Правка внешней обработки .epf в конфигураторе 1С 8.3: код, форма, отладка

· 10 мин

Содержание

Внешнюю обработку 1С редактируют в Конфигураторе: запустите его для любой информационной базы, выберите Файл → Открыть (Ctrl+O) и укажите файл .epf. Обработка откроется отдельным окном с деревом объекта — там правят модуль, формы, реквизиты, а затем сохраняют файл через Файл → Сохранить (Ctrl+S).

Частое заблуждение — что для правки нужен доступ к конфигурации самой базы и монопольный режим. Нет: внешняя обработка — отдельный файл, конфигурацию базы она не меняет. Но открывать её лучше в Конфигураторе той же базы, где она будет работать: тогда редактор «узнаёт» справочники и документы, на которые ссылается код.

Подготовка: что сделать до правки и как открыть файл .epf

Начните с копии. Файл .epf — двоичный контейнер, и после неудачного сохранения откатиться можно только к копии.

✅ Что проверить перед стартом:

  • 📁 Скопируйте исходный файл, например в Обработка_v1_оригинал.epf.
  • 🧩 Узнайте, откуда обработка берётся у пользователей: открывают файлом или она загружена в справочник «Дополнительные отчеты и обработки». От этого зависит, как вы потом выложите новую версию.
  • 🖥️ Подготовьте копию рабочей базы для проверки. Не отлаживайте обработку, которая пишет данные, на рабочей базе — одна ошибка в цикле записи создаст сотни лишних документов.
  • 🔑 Убедитесь, что у вашего пользователя есть права на запуск Конфигуратора и на интерактивное открытие внешних обработок.

Как открыть обработку для редактирования

  1. Запустите 1С, выберите базу и нажмите кнопку Конфигуратор.
  2. В Конфигураторе откройте меню Файл → Открыть или нажмите Ctrl+O.
  3. В диалоге выберите тип файла «Внешняя обработка» или «Все файлы» и укажите .epf.
  4. Откроется окно обработки с деревом: корневой элемент, реквизиты, табличные части, формы, макеты.

Открывать конфигурацию базы (Конфигурация → Открыть конфигурацию) для этого не нужно. Обработка редактируется независимо от неё.

Внешний отчёт (.erf) открывается тем же способом. Всё, что ниже сказано про модуль, формы и отладку, относится к нему так же.

Если окна с деревом не видно, хотя файл открылся, поищите его в списке открытых окон внизу Конфигуратора или в меню Окна.

Из чего состоит внешняя обработка в дереве метаданных

Перед правкой разберитесь, где что лежит. Внешняя обработка устроена как маленький объект конфигурации.

Элемент дереваЧто в нём хранитсяКогда туда лезть
Корень (свойства обработки)Имя, синоним, основная формаПереименовать обработку, сменить форму по умолчанию
Модуль объектаКод, общий для всей обработки, выполняется на сервереОсновная логика, регистрация в БСП
РеквизитыПоля объекта обработки: дата, организация, флагиДобавить новый параметр
Табличные частиТаблицы внутри объектаНужен список строк для обработки
ФормыИнтерфейс и модуль формыКнопки, поля, клиентский код
МакетыПечатные формы, шаблоны, двоичные данныеПравка печатной формы

Модуль объекта открывается из окна свойств обработки кнопкой Открыть модуль объекта или через контекстное меню корня дерева. Модуль формы — двойным щелчком по форме, затем вкладка Модуль в редакторе формы.

Модуля менеджера у внешней обработки нет. Весь серверный код, который не относится к форме, живёт в модуле объекта.

Как понять, что обработка встроена в БСП

Найдите в модуле объекта экспортную функцию СведенияОВнешнейОбработке(). Если она есть, обработка рассчитана на подключение через справочник дополнительных обработок. В ней задаются вид (обработка, печатная форма, заполнение объекта), версия, назначение и список команд.

Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.1";
	// ... команды
	Возврат ПараметрыРегистрации;
КонецФункции

При каждой правке поднимайте значение Версия, например с 1.1 до 1.2. Так в справочнике видно, какая версия загружена, и проще разбираться, если пользователь жалуется на старое поведение.

Редактирование программного кода обработки

Код правят в двух местах: в модуле объекта и в модуле формы. Главное отличие — где этот код выполняется.

Директивы компиляции в модуле формы

В управляемой форме каждая процедура помечается директивой:

  • 🖱️ &НаКлиенте — код на компьютере пользователя: реакция на кнопки, вопросы, открытие форм.
  • 🗄️ &НаСервере — код на сервере с доступом к данным формы: запросы, запись объектов.
  • ⚡ &НаСервереБезКонтекста — серверный код без передачи формы; быстрее, но реквизиты формы в нём недоступны, только параметры.

Типовой каркас кнопки выглядит так:

&НаКлиенте
Процедура Выполнить(Команда)
	ВыполнитьНаСервере();
	ПоказатьОповещениеПользователя("Готово");
КонецПроцедуры

&НаСервере
Процедура ВыполнитьНаСервере()
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	ОбработкаОбъект.ОбработатьДанные();
	ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
КонецПроцедуры

Метод ОбработатьДанные() здесь — экспортная процедура модуля объекта. С клиента её вызвать нельзя: на клиенте Объект — это данные формы, а не объект обработки. Поэтому вызов идёт через РеквизитФормыВЗначение на сервере.

Приёмы, которые экономят время

  • 🔎 Ctrl+F — поиск по модулю, Ctrl+Shift+F — глобальный поиск.
  • 🧭 Список процедур модуля открывается кнопкой на панели редактора или через контекстное меню — удобно, когда модуль на тысячу строк.
  • 🧪 Ctrl+F7 — проверка синтаксиса модуля. Делайте её после каждой заметной правки, а не перед сохранением.
  • ✍️ Шаблоны и контекстная подсказка (Ctrl+Пробел) подставляют имена реквизитов и методов. Если подсказка не видит справочник базы, скорее всего, обработка открыта в Конфигураторе другой базы.

Если модуль защищён паролем, редактор не покажет текст. Снять защиту можно только зная пароль. Если пароля нет — обращайтесь к автору обработки: подбирать или обходить защиту чужой разработки нельзя.

Добавляя код, который пишет в базу, оборачивайте запись в транзакцию или хотя бы ограничьте обработку тестовой выборкой (например, первые 10 строк). Ошибка проявится на десяти документах, а не на всей базе.

Работа с формой: элементы, реквизиты и команды

Редактор управляемой формы состоит из трёх частей. Слева вверху — дерево элементов, справа вверху — реквизиты и команды формы, внизу — предпросмотр.

Как добавить поле на форму

  1. Создайте реквизит в ветке Реквизиты дерева обработки, если значение нужно объекту, или в реквизитах формы, если оно нужно только интерфейсу.
  2. Укажите тип: дата, число, ссылка на справочник.
  3. Перетащите реквизит мышью из списка реквизитов формы в дерево элементов. Реквизиты объекта находятся внутри основного реквизита Объект.
  4. Настройте заголовок и подсказку в палитре свойств элемента.

Как добавить кнопку

  1. На вкладке Команды редактора формы нажмите «Добавить».
  2. В свойстве Действие нажмите на лупу — Конфигуратор создаст в модуле формы процедуру-обработчик с директивой &НаКлиенте.
  3. Перетащите команду в дерево элементов: на командную панель формы или в нужную группу.

Порядок и расположение полей меняют перетаскиванием в дереве элементов и группами («Обычная группа», «Страницы»). Свойство группы Группировка задаёт, идут элементы по горизонтали или по вертикали.

Старая обычная форма

Обработка, написанная под толстый клиент, может содержать обычную форму. По умолчанию Конфигуратор 8.3 может не давать её править. Включите редактирование в Сервис → Параметры, на вкладке Общие: режим «Управляемое приложение и обычное приложение».

Учтите: обычная форма работает только в толстом клиенте. Если базу открывают через тонкий клиент или браузер, такую форму придётся переделать на управляемую — перенести элементы и разнести код по директивам.

Какая форма у вашей обработки и где её запускают?

Отладка и тестирование изменённой обработки

Отладка нужна, когда результат не тот, а синтаксической ошибки нет. Порядок такой.

  1. В модуле поставьте точку останова на нужной строке: F9 или двойной щелчок по левому полю.
  2. Запустите отладку из Конфигуратора: Отладка → Начать отладку (F5). База откроется в режиме 1С:Предприятие с подключённым отладчиком.
  3. В открывшемся приложении выберите Файл → Открыть и укажите тот же файл .epf, который правите. Платформа может показать предупреждение о потенциально опасном действии — подтвердите открытие, если файл ваш.
  4. Нажмите кнопку в обработке. Выполнение остановится на точке останова, а Конфигуратор покажет текущую строку.
  5. Пошаговое выполнение: F11 — с заходом в процедуру, F10 — без захода, Shift+F11 — выйти из процедуры. Значения переменных смотрите в окне Табло или наведя курсор.

Для серверного кода в клиент-серверной базе отладка на сервере должна быть разрешена администратором. Если точки на клиенте срабатывают, а на сервере нет — дело в настройке отладки сервера, а не в обработке.

Точки останова срабатывают только для файла, открытого с диска. Обработка, загруженная в справочник дополнительных обработок, хранится внутри базы — это уже другая копия, и ваш отладчик её «не видит». Отлаживайте файл, а в справочник загружайте готовую версию.

Как проверить правку без отладчика

Для простой проверки хватит сообщений:

Сообщить("Строк к обработке: " + Формат(Выборка.Количество(), "ЧГ=0"));

После проверки уберите отладочные Сообщить — пользователь не должен видеть служебный вывод.

После каждого сохранения закройте форму обработки и откройте файл заново. Если изменения всё равно не подхватились, перезапустите сеанс 1С:Предприятие.

Сохранение обработки и выкладка новой версии

Отдельной «компиляции» у внешней обработки нет. Платформа компилирует модули сама при открытии файла. Ваша задача — сохранить файл без синтаксических ошибок.

  1. Проверьте синтаксис всех изменённых модулей (Ctrl+F7 в каждом).
  2. Сохраните: Файл → Сохранить (Ctrl+S) — перезапишет исходный файл; Файл → Сохранить как — запишет под новым именем.
  3. Дайте файлу понятное имя с версией: ЗагрузкаПрайса_1.2.epf.

Если в модуле осталась ошибка, Конфигуратор сообщит об этом при проверке, а пользователь получит её при открытии. Не полагайтесь на то, что «до этой процедуры никто не дойдёт».

Обновление в справочнике дополнительных обработок

Если обработка подключена через БСП, сохранённый файл нужно загрузить в базу:

  1. Откройте раздел администрирования (в БП и ЗУП — Администрирование, в некоторых конфигурациях — НСИ и администрирование), группу «Печатные формы, отчеты и обработки».
  2. Откройте список дополнительных отчётов и обработок и найдите свою.
  3. В карточке выберите команду загрузки из файла (ищите её на командной панели или в меню Ещё) и укажите новый .epf.
  4. Проверьте, что версия в карточке сменилась, и запишите элемент.

Если в обработке поменялись команды или их размещение, проверьте вкладку размещения и пользователей — новые команды могут не появиться в нужных разделах без повторной настройки.

Способ запуска у пользователейЧто делать после правки
Открывают файл через Файл → ОткрытьЗаменить файл в общей папке, предупредить пользователей
Справочник дополнительных обработокЗагрузить новый файл в карточку, проверить версию и размещение
Копия обработки встроена в конфигурациюПравить уже конфигурацию или расширение, а не внешний файл

Ошибки при редактировании обработки и как их снять

Ниже — сообщения, которые чаще всего всплывают именно после правки. Ищите своё по первым словам текста ошибки.

Диагностика: выберите симптом

⚠️ Ещё три промаха, которые не дают текста ошибки, но портят результат:

  • 🔁 Удаление строк коллекции в прямом цикле Для Каждого — часть строк пропускается. Удаляйте в обратном цикле: Для Сч = 1 По Таблица.Количество() Цикл Строка = Таблица[Таблица.Количество() - Сч]; ... КонецЦикла;.
  • 🗂️ Переименование реквизита объекта без правки формы — элемент остаётся привязан к старому пути данных и показывает пустое поле или ошибку.
  • 📝 Запись объектов в цикле без проверки Модифицированность() — каждый документ перезаписывается, даже если ничего не изменилось, и в журнале регистрации появляются тысячи записей.

Частые вопросы

Можно ли отредактировать обработку без Конфигуратора нужной базы?
Да, подойдёт Конфигуратор любой базы, даже пустой файловой. Но ссылки на справочники и документы, которых в этой базе нет, будут считаться неопределёнными типами, а подсказка не сработает. Для серьёзной правки берите копию той базы, где обработка работает.
Можно ли править обработку в 1С:EDT?
Да. В EDT внешние обработки ведут как отдельный проект: импортируют файл .epf, правят и выгружают обратно в .epf. Это удобно, если обработку хранят в Git.
Чем отличается редактирование внешней обработки от встроенной?
Встроенная обработка — часть конфигурации. Чтобы её изменить, нужно открыть конфигурацию, снять объект с поддержки или сделать расширение, а затем обновить конфигурацию базы. Внешний файл правится и сохраняется отдельно, без обновления базы.
Как превратить встроенную обработку во внешнюю для правки?
В дереве конфигурации щёлкните обработку правой кнопкой и выберите сохранение во внешнюю обработку. Получится .epf-файл, который можно править и запускать отдельно, не трогая конфигурацию.
Нужно ли выгонять пользователей из базы, чтобы сохранить обработку?
Нет. Внешняя обработка — отдельный файл, база не блокируется. Пользователей надо лишь предупредить, чтобы они закрыли старую копию и открыли новую.