Правка внешних и встроенных обработок 1С 8.3: код, формы, макеты и отладка
Содержание
Чтобы отредактировать обработку в 1С, откройте Конфигуратор. Внешнюю обработку
(файл .epf) правят через Файл → Открыть, конфигурацию базы при этом открывать не нужно. Встроенную обработку правят в дереве конфигурации, но в типовой базе сначала придётся разрешить изменения в настройке поддержки или перенести правку в расширение.
Какой путь выбрать? Внешняя обработка — самый безопасный вариант: файл живёт отдельно, типовые обновления его не трогают. Расширение подходит, когда надо поменять поведение встроенного объекта и не потерять лёгкое обновление. Снятие с поддержки — крайний случай: каждое следующее обновление придётся сравнивать и объединять вручную.
| Что правим | Где | Риск для обновлений |
|---|---|---|
Внешняя обработка .epf | Конфигуратор, Файл → Открыть | Нет |
| Встроенная обработка через расширение | Конфигурация → Расширения конфигурации | Низкий |
| Встроенная обработка, снятая с поддержки | Дерево конфигурации | Высокий |
| Макет типовой печатной формы | Режим Предприятия, список макетов | Нет |
Подготовка: права, режим запуска и копия базы
Для правки нужны права администратора и доступ к Конфигуратору. Обычный пользователь с ролью бухгалтера войти туда не сможет.
Что проверить до начала:
- 🔑 Пользователь — с полными правами. В типовых конфигурациях это роль «Полные права» или «Администратор системы».
- 🖥 Платформа — та же, на которой работает база. Обработку, сохранённую в новой платформе, старая может не открыть.
- 💾 Копия — для встроенных обработок обязательна:
Администрирование → Выгрузить информационную базув Конфигураторе, получится файл.dt. - 📁 Копия файла — для внешней обработки просто скопируйте
.epfрядом с другим именем.
Встроенные обработки правьте на копии базы, а не на рабочей. Разверните .dt в отдельную базу, проверьте изменения там и только потом переносите их в рабочую.
Запуск Конфигуратора: в окне выбора баз выделите нужную и нажмите кнопку «Конфигуратор». Для внешней обработки подойдёт любая база — хоть пустая. Но проверять результат удобнее на той, где обработка будет работать: нужны те же справочники и документы.
Для формы обработки важен тип интерфейса. Управляемые формы открываются в тонком клиенте. Обычные формы из старых конфигураций работают только в толстом клиенте, и проверять их надо там же.
Как отредактировать встроенную обработку в Конфигураторе
Встроенные обработки лежат в дереве конфигурации, в ветке «Обработки». Порядок действий:
- Откройте
Конфигурация → Открыть конфигурацию. - Разверните ветку «Обработки» и найдите нужную. Для быстрого поиска выделите корень дерева и начните набирать имя.
- Дважды щёлкните по обработке — откроется окно её свойств: реквизиты, табличные части, формы, команды, макеты.
- Модуль объекта открывается через вкладку «Прочее» или из контекстного меню объекта. Модуль формы — двойным щелчком по форме и вкладке «Модуль» внизу редактора формы.
В типовой конфигурации на поддержке объекты закрыты замком. Изменить их можно двумя способами.
Включить изменения в настройке поддержки
Путь: Конфигурация → Поддержка → Настройка поддержки, кнопка «Включить возможность изменения». Затем для нужной обработки задайте правило:
- 🟡 Объект поставщика редактируется с сохранением поддержки — правка разрешена, при обновлении платформа предложит сравнить и объединить.
- 🔴 Объект поставщика снят с поддержки — обновления этот объект больше не меняют.
Включение возможности изменения переводит всю конфигурацию в режим, при котором обновление идёт через сравнение и объединение. Это дольше и требует квалификации. Для бухгалтерии без штатного программиста лучше выбрать расширение.
Перенести правку в расширение
Расширение — отдельный слой поверх типовой конфигурации. Появилось в платформе 8.3.6, полноценная работа с формами и модулями — в более поздних версиях.
Конфигурация → Расширения конфигурации, кнопка «Добавить».- Откройте конфигурацию расширения.
- В основной конфигурации щёлкните правой кнопкой по обработке → «Добавить в расширение».
- В расширении заимствуйте нужную форму и меняйте её элементы. Для процедур модуля используйте аннотации
&Перед,&После,&Вместо, а с платформы 8.3.16 —&ИзменениеИКонтроль.
Сама типовая обработка остаётся нетронутой. Обновление конфигурации проходит как обычно, а расширение после него нужно проверить: если разработчики переименовали метод, заимствование сломается.
Работа с внешней обработкой: файл .epf
Внешняя обработка — это отдельный файл. Отредактировать её можно без доступа к конфигурации базы.
- Запустите Конфигуратор для любой базы.
Файл → Открыть, выберите файл.epf. Внешние отчёты имеют расширение.erfи открываются так же.- Откроется окно обработки со своим деревом: реквизиты, табличные части, формы, макеты.
- Внесите правки и сохраните файл:
Файл → СохранитьилиCtrl+S.
Пример простой команды формы. Клиентская часть вызывает сервер, сервер считает данные:
&НаКлиенте
Процедура Выполнить(Команда)
Количество = КоличествоКонтрагентовНаСервере();
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("Контрагентов в базе: %1", Формат(Количество, "ЧН=0; ЧГ=0"));
Сообщение.Сообщить();
КонецПроцедуры
&НаСервереБезКонтекста
Функция КоличествоКонтрагентовНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Кол ИЗ Справочник.Контрагенты";
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Возврат Выборка.Кол;
КонецФункции
Обращение к базе — только в серверных процедурах. Директива &НаСервереБезКонтекста не передаёт на сервер данные формы, поэтому такой вызов быстрее.
Если обработка подключена как дополнительная
В типовых конфигурациях на БСП внешние обработки часто зарегистрированы в справочнике: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Тогда сама обработка хранится в базе, а файл на диске — лишь исходник.
Порядок правки:
- Откройте карточку обработки и выгрузите её в файл командой «Выгрузить в файл…».
- Отредактируйте файл в Конфигураторе.
- В модуле объекта не удаляйте экспортную функцию
СведенияОВнешнейОбработке()— по ней база понимает, что это за обработка и где её показывать. Увеличьте в ней номер версии, чтобы отличать правленый вариант. - Вернитесь в карточку и загрузите файл командой «Загрузить из файла…», затем «Записать и закрыть».
Если поменять имя или состав команд в СведенияОВнешнейОбработке(), после загрузки придётся заново настроить размещение команд в разделах и доступ пользователей.
Отладка и анализ кода обработки
Без отладчика правка похожа на гадание. Порядок запуска:
- В Конфигураторе выберите
Отладка → Начать отладку → Тонкий клиент(илиF5— запуск в основном режиме). - В открывшемся Предприятии запустите обработку. Внешнюю откройте через
Файл → Открытьв главном меню. - В Конфигураторе откройте тот же файл
.epfи поставьте точку останова на нужной строке —F9. - Выполните действие в форме. Выполнение остановится на точке.
Клавиши отладчика:
| Клавиша | Действие |
|---|---|
F9 | Поставить или снять точку останова |
F10 | Шаг через процедуру |
F11 | Шаг внутрь процедуры |
Shift+F11 | Выйти из процедуры |
Shift+F9 | Вычислить выражение |
F5 | Продолжить выполнение |
Точки останова в дополнительной обработке, загруженной в справочник, обычно не срабатывают: база запускает её из временной копии. Для отладки открывайте сам файл через Файл → Открыть.
Серверный код в клиент-серверной базе
В файловой базе серверные процедуры отлаживаются сразу. В клиент-серверной нужно, чтобы отладка была разрешена на сервере 1С: служба агента запускается с ключом -debug. Если ключа нет, точки в процедурах &НаСервере молча пропускаются.
Добавление ключа требует перезапуска службы сервера 1С. При этом оборвутся сеансы всех пользователей. Делайте это вне рабочего времени и только на тестовом сервере, если такой есть.
Замер производительности
Если обработка работает медленно, включите Отладка → Замер производительности перед запуском действия. После остановки замера Конфигуратор покажет, какие строки заняли больше всего времени и сколько раз выполнились. Чаще всего узким местом оказывается запрос внутри цикла — его выносят из цикла и получают данные одним запросом.
Изменение макетов и печатных форм обработки
Макет — это табличный документ с областями. Печатная форма собирается из областей кодом.
В Конфигураторе макет открывается из ветки «Макеты» обработки. Что можно менять:
- ✏️ текст и оформление ячеек, шрифты, границы;
- 📐 ширину колонок и высоту строк;
- 🧩 параметры ячеек — в свойстве «Заполнение» выбирается «Параметр», имя параметра заполняется из кода;
- 📦 именованные области — выделите строки и задайте имя через
Таблица → Имена → Назначить имя.
Не переименовывайте области и параметры, на которые ссылается код. Код получает область по имени — Макет.ПолучитьОбласть("Шапка"). Сменили имя в макете — печать упадёт с ошибкой.
Типовые печатные формы без Конфигуратора
Для многих типовых печатных форм Конфигуратор не нужен вовсе. В БП 3.0, ЗУП 3.1 и УТ 11 есть список Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм.
Выберите макет, нажмите «Изменить», поправьте его во встроенном редакторе и сохраните. Изменённый макет хранится в базе и переживает обновления. Вернуть исходный вариант можно командой «Использовать стандартный макет».
Так можно поменять оформление, текст и ширину колонок. Новые данные в форму так не добавить — для этого нужна правка кода через внешнюю печатную форму или расширение.
Сохранение, проверка и обновление базы
Перед сохранением прогоните синтаксический контроль модуля: в редакторе модуля нажмите Ctrl+F7. Ошибки появятся в окне сообщений внизу, двойной щелчок переводит к строке.
Дальше путь зависит от вида обработки.
| Вид | Как сохранить | Что сделать после |
|---|---|---|
Внешняя .epf | Ctrl+S в окне обработки | Переоткрыть обработку в Предприятии |
| Дополнительная (в справочнике) | Сохранить файл | Загрузить его в карточку обработки |
| Встроенная | Конфигурация → Сохранить конфигурацию | Конфигурация → Обновить конфигурацию базы данных (F7) |
| В расширении | Сохранить расширение | Обновить конфигурацию базы данных для расширения |
Правка обработки обычно не меняет структуру таблиц базы, поэтому монопольный режим, как правило, не нужен. Если в базе работают люди, платформа предложит динамическое обновление.
После динамического обновления пользователи остаются на старой версии конфигурации до перезапуска сеанса. Программа сама покажет им предложение перезапуститься. Чтобы изменения увидели все, попросите коллег перезайти.
Если правка затронула реквизиты другого объекта — например, вы добавили поле в справочник ради обработки, — обновление уже меняет структуру данных. Тогда понадобится монопольный режим: попросите всех выйти из базы.
Ошибки при редактировании обработок
Ещё одна частая причина неожиданных ошибок — вызов серверных методов из клиентского кода. Сообщение «Метод объекта недоступен на клиенте» означает, что обращение к базе или к объекту стоит в процедуре с директивой &НаКлиенте. Перенесите эту часть в серверную процедуру и вызывайте её с клиента.
Частые вопросы
Можно ли отредактировать обработку без Конфигуратора?
Слетит ли правка внешней обработки после обновления конфигурации?
Нужна ли лицензия на Конфигуратор для правки обработки?
Можно ли превратить встроенную обработку во внешнюю?
Где хранить исходники правленых обработок?
.epf с номером версии в имени или в системе контроля версий. Для расширений и конфигураций удобнее выгрузка в файлы и хранилище конфигурации.