Правка внешней обработки .epf в конфигураторе 1С 8.3: код, форма, отладка
Содержание
Внешнюю обработку
1С редактируют в Конфигураторе: запустите его для любой информационной базы, выберите Файл → Открыть (Ctrl+O) и укажите файл .epf. Обработка откроется отдельным окном с деревом объекта — там правят модуль, формы, реквизиты, а затем сохраняют файл через Файл → Сохранить (Ctrl+S).
Частое заблуждение — что для правки нужен доступ к конфигурации самой базы и монопольный режим. Нет: внешняя обработка — отдельный файл, конфигурацию базы она не меняет. Но открывать её лучше в Конфигураторе той же базы, где она будет работать: тогда редактор «узнаёт» справочники и документы, на которые ссылается код.
Подготовка: что сделать до правки и как открыть файл .epf
Начните с копии. Файл .epf — двоичный контейнер, и после неудачного сохранения откатиться можно только к копии.
✅ Что проверить перед стартом:
- 📁 Скопируйте исходный файл, например в
Обработка_v1_оригинал.epf. - 🧩 Узнайте, откуда обработка берётся у пользователей: открывают файлом или она загружена в справочник «Дополнительные отчеты и обработки». От этого зависит, как вы потом выложите новую версию.
- 🖥️ Подготовьте копию рабочей базы для проверки. Не отлаживайте обработку, которая пишет данные, на рабочей базе — одна ошибка в цикле записи создаст сотни лишних документов.
- 🔑 Убедитесь, что у вашего пользователя есть права на запуск Конфигуратора и на интерактивное открытие внешних обработок.
Как открыть обработку для редактирования
- Запустите 1С, выберите базу и нажмите кнопку
Конфигуратор. - В Конфигураторе откройте меню
Файл → Открытьили нажмите Ctrl+O. - В диалоге выберите тип файла «Внешняя обработка» или «Все файлы» и укажите
.epf. - Откроется окно обработки с деревом: корневой элемент, реквизиты, табличные части, формы, макеты.
Открывать конфигурацию базы (Конфигурация → Открыть конфигурацию) для этого не нужно. Обработка редактируется независимо от неё.
Внешний отчёт (.erf) открывается тем же способом. Всё, что ниже сказано про модуль, формы и отладку, относится к нему так же.
Если окна с деревом не видно, хотя файл открылся, поищите его в списке открытых окон внизу Конфигуратора или в меню Окна.
Из чего состоит внешняя обработка в дереве метаданных
Перед правкой разберитесь, где что лежит. Внешняя обработка устроена как маленький объект конфигурации.
| Элемент дерева | Что в нём хранится | Когда туда лезть |
|---|---|---|
| Корень (свойства обработки) | Имя, синоним, основная форма | Переименовать обработку, сменить форму по умолчанию |
| Модуль объекта | Код, общий для всей обработки, выполняется на сервере | Основная логика, регистрация в БСП |
| Реквизиты | Поля объекта обработки: дата, организация, флаги | Добавить новый параметр |
| Табличные части | Таблицы внутри объекта | Нужен список строк для обработки |
| Формы | Интерфейс и модуль формы | Кнопки, поля, клиентский код |
| Макеты | Печатные формы, шаблоны, двоичные данные | Правка печатной формы |
Модуль объекта открывается из окна свойств обработки кнопкой Открыть модуль объекта или через контекстное меню корня дерева. Модуль формы — двойным щелчком по форме, затем вкладка Модуль в редакторе формы.
Модуля менеджера у внешней обработки нет. Весь серверный код, который не относится к форме, живёт в модуле объекта.
Как понять, что обработка встроена в БСП
Найдите в модуле объекта экспортную функцию СведенияОВнешнейОбработке(). Если она есть, обработка рассчитана на подключение через справочник дополнительных обработок. В ней задаются вид (обработка, печатная форма, заполнение объекта), версия, назначение и список команд.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.1";
// ... команды
Возврат ПараметрыРегистрации;
КонецФункции
При каждой правке поднимайте значение Версия, например с 1.1 до 1.2. Так в справочнике видно, какая версия загружена, и проще разбираться, если пользователь жалуется на старое поведение.
Редактирование программного кода обработки
Код правят в двух местах: в модуле объекта и в модуле формы. Главное отличие — где этот код выполняется.
Директивы компиляции в модуле формы
В управляемой форме каждая процедура помечается директивой:
- 🖱️
&НаКлиенте— код на компьютере пользователя: реакция на кнопки, вопросы, открытие форм. - 🗄️
&НаСервере— код на сервере с доступом к данным формы: запросы, запись объектов. - ⚡
&НаСервереБезКонтекста— серверный код без передачи формы; быстрее, но реквизиты формы в нём недоступны, только параметры.
Типовой каркас кнопки выглядит так:
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
ПоказатьОповещениеПользователя("Готово");
КонецПроцедуры
&НаСервере
Процедура ВыполнитьНаСервере()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.ОбработатьДанные();
ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
КонецПроцедуры
Метод ОбработатьДанные() здесь — экспортная процедура модуля объекта. С клиента её вызвать нельзя: на клиенте Объект — это данные формы, а не объект обработки. Поэтому вызов идёт через РеквизитФормыВЗначение на сервере.
Приёмы, которые экономят время
- 🔎
Ctrl+F— поиск по модулю,Ctrl+Shift+F— глобальный поиск. - 🧭 Список процедур модуля открывается кнопкой на панели редактора или через контекстное меню — удобно, когда модуль на тысячу строк.
- 🧪
Ctrl+F7— проверка синтаксиса модуля. Делайте её после каждой заметной правки, а не перед сохранением. - ✍️ Шаблоны и контекстная подсказка (
Ctrl+Пробел) подставляют имена реквизитов и методов. Если подсказка не видит справочник базы, скорее всего, обработка открыта в Конфигураторе другой базы.
Если модуль защищён паролем, редактор не покажет текст. Снять защиту можно только зная пароль. Если пароля нет — обращайтесь к автору обработки: подбирать или обходить защиту чужой разработки нельзя.
Добавляя код, который пишет в базу, оборачивайте запись в транзакцию или хотя бы ограничьте обработку тестовой выборкой (например, первые 10 строк). Ошибка проявится на десяти документах, а не на всей базе.
Работа с формой: элементы, реквизиты и команды
Редактор управляемой формы состоит из трёх частей. Слева вверху — дерево элементов, справа вверху — реквизиты и команды формы, внизу — предпросмотр.
Как добавить поле на форму
- Создайте реквизит в ветке
Реквизитыдерева обработки, если значение нужно объекту, или в реквизитах формы, если оно нужно только интерфейсу. - Укажите тип: дата, число, ссылка на справочник.
- Перетащите реквизит мышью из списка реквизитов формы в дерево элементов. Реквизиты объекта находятся внутри основного реквизита
Объект. - Настройте заголовок и подсказку в палитре свойств элемента.
Как добавить кнопку
- На вкладке
Командыредактора формы нажмите «Добавить». - В свойстве
Действиенажмите на лупу — Конфигуратор создаст в модуле формы процедуру-обработчик с директивой&НаКлиенте. - Перетащите команду в дерево элементов: на командную панель формы или в нужную группу.
Порядок и расположение полей меняют перетаскиванием в дереве элементов и группами («Обычная группа», «Страницы»). Свойство группы Группировка задаёт, идут элементы по горизонтали или по вертикали.
Старая обычная форма
Обработка, написанная под толстый клиент, может содержать обычную форму. По умолчанию Конфигуратор 8.3 может не давать её править. Включите редактирование в Сервис → Параметры, на вкладке Общие: режим «Управляемое приложение и обычное приложение».
Учтите: обычная форма работает только в толстом клиенте. Если базу открывают через тонкий клиент или браузер, такую форму придётся переделать на управляемую — перенести элементы и разнести код по директивам.
Отладка и тестирование изменённой обработки
Отладка нужна, когда результат не тот, а синтаксической ошибки нет. Порядок такой.
- В модуле поставьте точку останова на нужной строке:
F9или двойной щелчок по левому полю. - Запустите отладку из Конфигуратора:
Отладка → Начать отладку(F5). База откроется в режиме 1С:Предприятие с подключённым отладчиком. - В открывшемся приложении выберите
Файл → Открытьи укажите тот же файл.epf, который правите. Платформа может показать предупреждение о потенциально опасном действии — подтвердите открытие, если файл ваш. - Нажмите кнопку в обработке. Выполнение остановится на точке останова, а Конфигуратор покажет текущую строку.
- Пошаговое выполнение:
F11— с заходом в процедуру,F10— без захода,Shift+F11— выйти из процедуры. Значения переменных смотрите в окнеТаблоили наведя курсор.
Для серверного кода в клиент-серверной базе отладка на сервере должна быть разрешена администратором. Если точки на клиенте срабатывают, а на сервере нет — дело в настройке отладки сервера, а не в обработке.
Точки останова срабатывают только для файла, открытого с диска. Обработка, загруженная в справочник дополнительных обработок, хранится внутри базы — это уже другая копия, и ваш отладчик её «не видит». Отлаживайте файл, а в справочник загружайте готовую версию.
Как проверить правку без отладчика
Для простой проверки хватит сообщений:
Сообщить("Строк к обработке: " + Формат(Выборка.Количество(), "ЧГ=0"));
После проверки уберите отладочные Сообщить — пользователь не должен видеть служебный вывод.
После каждого сохранения закройте форму обработки и откройте файл заново. Если изменения всё равно не подхватились, перезапустите сеанс 1С:Предприятие.
Сохранение обработки и выкладка новой версии
Отдельной «компиляции» у внешней обработки нет. Платформа компилирует модули сама при открытии файла. Ваша задача — сохранить файл без синтаксических ошибок.
- Проверьте синтаксис всех изменённых модулей (
Ctrl+F7в каждом). - Сохраните:
Файл → Сохранить(Ctrl+S) — перезапишет исходный файл;Файл → Сохранить как— запишет под новым именем. - Дайте файлу понятное имя с версией:
ЗагрузкаПрайса_1.2.epf.
Если в модуле осталась ошибка, Конфигуратор сообщит об этом при проверке, а пользователь получит её при открытии. Не полагайтесь на то, что «до этой процедуры никто не дойдёт».
Обновление в справочнике дополнительных обработок
Если обработка подключена через БСП, сохранённый файл нужно загрузить в базу:
- Откройте раздел администрирования (в БП и ЗУП —
Администрирование, в некоторых конфигурациях —НСИ и администрирование), группу «Печатные формы, отчеты и обработки». - Откройте список дополнительных отчётов и обработок и найдите свою.
- В карточке выберите команду загрузки из файла (ищите её на командной панели или в меню
Ещё) и укажите новый.epf. - Проверьте, что версия в карточке сменилась, и запишите элемент.
Если в обработке поменялись команды или их размещение, проверьте вкладку размещения и пользователей — новые команды могут не появиться в нужных разделах без повторной настройки.
| Способ запуска у пользователей | Что делать после правки |
|---|---|
Открывают файл через Файл → Открыть | Заменить файл в общей папке, предупредить пользователей |
| Справочник дополнительных обработок | Загрузить новый файл в карточку, проверить версию и размещение |
| Копия обработки встроена в конфигурацию | Править уже конфигурацию или расширение, а не внешний файл |
Ошибки при редактировании обработки и как их снять
Ниже — сообщения, которые чаще всего всплывают именно после правки. Ищите своё по первым словам текста ошибки.
⚠️ Ещё три промаха, которые не дают текста ошибки, но портят результат:
- 🔁 Удаление строк коллекции в прямом цикле
Для Каждого— часть строк пропускается. Удаляйте в обратном цикле:Для Сч = 1 По Таблица.Количество() Цикл Строка = Таблица[Таблица.Количество() - Сч]; ... КонецЦикла;. - 🗂️ Переименование реквизита объекта без правки формы — элемент остаётся привязан к старому пути данных и показывает пустое поле или ошибку.
- 📝 Запись объектов в цикле без проверки
Модифицированность()— каждый документ перезаписывается, даже если ничего не изменилось, и в журнале регистрации появляются тысячи записей.