Внешняя обработка 1С 8.3 своими руками: от пустого файла .epf до запуска в рабочей базе

· 9 мин

Содержание

Чтобы создать обработку в 1С, откройте базу в Конфигураторе и выберите Файл → Новый, затем тип «Внешняя обработка». Добавьте реквизиты, форму и код, сохраните объект в файл .epf через Файл → Сохранить. В режиме 1С:Предприятие файл открывают через главное меню Файл → Открыть или регистрируют в списке дополнительных обработок.

Типичная ситуация: главбух просит раз в месяц найти контрагентов без ИНН и выгрузить их списком. Типового отчёта под это нет, а дорабатывать конфигурацию и снимать её с поддержки ради одной кнопки никто не хочет. Внешняя обработка решает задачу без изменения конфигурации: это отдельный файл, который живёт рядом с базой и подключается по необходимости. Ниже весь путь на этом примере, в интерфейсе «Такси» на платформе 8.3.

Какой тип объекта выбрать и как его создать

Перед стартом решите, что именно вы делаете. У платформы три близких варианта, и путать их дорого.

ВариантФайлКогда подходитЧто с конфигурацией
Внешняя обработка.epfСервисные действия: заполнить, исправить, загрузить, выгрузитьНе меняется
Внешний отчёт.erfНужен вывод данных с отбором и настройками на схеме компоновкиНе меняется
Обработка внутри конфигурации или расширениянет отдельного файлаФункция нужна постоянно и всем пользователямМеняется конфигурация или подключается расширение

Для разовых и периодических задач почти всегда хватает внешней обработки. Если результат — таблица для печати с группировками, удобнее внешний отчёт на СКД.

Создание объекта в Конфигураторе

  1. Запустите 1С в режиме Конфигуратор. Подойдёт любая база, но лучше копия той, где обработка будет работать: тогда в типах реквизитов доступны её справочники и документы.
  2. Выберите Файл → Новый (или Ctrl+N), в списке — «Внешняя обработка», нажмите ОК.
  3. Откроется окно объекта с деревом: «Реквизиты», «Табличные части», «Формы», «Команды», «Макеты».
  4. Откройте свойства корневого элемента (Alt+Enter) и задайте Имя латиницей или кириллицей без пробелов, например ПоискКонтрагентовБезИНН, и понятный Синоним — его увидит пользователь в заголовке.

Конфигурацию базы открывать не нужно. Внешняя обработка редактируется отдельно и не требует монопольного режима.

Реквизиты и форма внешней обработки

Данные обработки хранятся в реквизитах объекта, а пользователь видит их через форму. Сначала опишите данные, потом рисуйте интерфейс.

Реквизиты и табличная часть

Для примера нужны:

  • 📅 реквизит ТолькоАктивные с типом «Булево» — флажок «не показывать помеченных на удаление»;
  • 📋 табличная часть Результат с двумя реквизитами: Контрагент (тип СправочникСсылка.Контрагенты) и ИНН (строка длиной 12).

Реквизит добавляют кнопкой «Добавить» на ветке «Реквизиты», тип выбирают в палитре свойств. Табличная часть создаётся так же на своей ветке, а её колонки — внутри неё.

Создание основной формы

  1. Встаньте на ветку «Формы» и нажмите «Добавить».
  2. В конструкторе формы выберите «Форма обработки», оставьте флажок «Назначить форму основной», нажмите «Готово».
  3. Откроется редактор управляемой формы: слева вверху дерево элементов, справа — реквизиты формы, где уже есть реквизит Объект с вашими данными.
  4. Перетащите Объект → ТолькоАктивные и Объект → Результат в дерево элементов. Платформа сама создаст флажок и таблицу с колонками.
  5. На вкладке «Команды» добавьте команду Заполнить. В свойстве «Действие» нажмите лупу: платформа предложит создать обработчик и спросит, где его разместить. Выберите вариант с клиентской процедурой и вызовом сервера.
  6. Перетащите команду на форму или в командную панель — появится кнопка.

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

Код обработки: модуль объекта и модуль формы

Новички пишут всё в модуле формы, и через месяц там каша. Рабочее правило: в модуле объекта — логика с данными, в модуле формы — реакция на кнопки и вызов сервера.

Модуль объекта

Модуль открывают через контекстное меню корневого элемента обработки, пункт «Открыть модуль объекта». Код выполняется на сервере, поэтому запросы и запись данных — здесь.

Процедура ЗаполнитьСписок() Экспорт

	Результат.Очистить();

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Контрагенты.Ссылка КАК Контрагент,
	|	Контрагенты.ИНН КАК ИНН
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|	НЕ Контрагенты.ЭтоГруппа
	|	И Контрагенты.ИНН = """"
	|	И (НЕ &ТолькоАктивные ИЛИ НЕ Контрагенты.ПометкаУдаления)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Контрагенты.Наименование";
	Запрос.УстановитьПараметр("ТолькоАктивные", ТолькоАктивные);

	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		ЗаполнитьЗначенияСвойств(Результат.Добавить(), Выборка);
	КонецЦикла;

КонецПроцедуры

Слово Экспорт обязательно: без него форма не увидит процедуру. Имена справочника и реквизитов взяты из 1С:Бухгалтерии 3.0. В другой конфигурации проверьте их в дереве метаданных.

Модуль формы

Форма на клиенте ничего не знает о запросах. Ей нужно передать управление на сервер, превратить данные формы в объект обработки, вызвать метод и вернуть результат обратно.

&НаКлиенте
Процедура Заполнить(Команда)
	ЗаполнитьНаСервере();
	ПоказатьОповещениеПользователя("Найдено записей: " + Формат(Объект.Результат.Количество(), "ЧН=0; ЧГ=0"));
КонецПроцедуры

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

Пара РеквизитФормыВЗначение и ЗначениеВРеквизитФормы — главный приём при работе с управляемой формой обработки. Первая функция даёт полноценный объект с методами модуля, вторая записывает изменения обратно в форму. Забыли вторую — таблица на экране останется пустой, хотя код отработал.

Значения по умолчанию при открытии формы

Пользователь не должен каждый раз ставить одни и те же флажки. Начальные значения задают в обработчике ПриСозданииНаСервере: в редакторе формы откройте свойства самой формы, найдите событие в списке и нажмите лупу.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Объект.ТолькоАктивные = Истина;
КонецПроцедуры

Здесь же удобно сразу заполнить таблицу, если список нужен при каждом открытии. Но долгий запрос в этом событии задерживает открытие формы. Для тяжёлых выборок оставьте отдельную кнопку Заполнить, чтобы пользователь сначала выставил отборы.

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

ДирективаГде выполняетсяЧто можно
&НаКлиентеУ пользователяДиалоги, оповещения, работа с элементами формы
&НаСервереНа сервере, с контекстом формыЗапросы, объекты базы, реквизиты формы
&НаСервереБезКонтекстаНа сервере, без данных формыБыстрые вычисления по переданным параметрам

Таблица значений в обработке: выборка, обход, вывод на форму

Табличная часть удобна, когда состав колонок известен заранее. Если колонки собираются в коде или данные нужны только для расчёта, берите таблицу значений.

Получение и обход таблицы значений

Результат запроса превращается в таблицу значений одной строкой:

ТЗ = Запрос.Выполнить().Выгрузить();

ТЗ.Колонки.Добавить("Комментарий", Новый ОписаниеТипов("Строка"));
Для Каждого Строка Из ТЗ Цикл
	Если СтрДлина(Строка.ИНН) = 0 Тогда
		Строка.Комментарий = "Заполнить ИНН";
	КонецЕсли;
КонецЦикла;

ТЗ.Свернуть("Контрагент", "");

Полезные методы, которые нужны почти в каждой обработке:

  • 🔍 НайтиСтроки(Новый Структура("ИНН", "")) — отбор строк по значениям колонок;
  • 🔢 Итог("Сумма") — сумма по числовой колонке;
  • 🧹 Свернуть("Группировки", "Суммируемые") — группировка с суммированием;
  • ↕️ Сортировать("Контрагент Возр") — сортировка.

Вывод таблицы значений на форму

Таблицу значений нельзя просто положить на клиент. Порядок такой:

  1. В реквизитах формы добавьте реквизит с типом «ТаблицаЗначений», например ТаблицаДанных.
  2. Раскройте его и добавьте колонки с теми же именами и типами, что в коде.
  3. Перетащите реквизит на форму.
  4. В серверной процедуре после расчёта выполните ЗначениеВРеквизитФормы(ТЗ, "ТаблицаДанных").

Колонки, которых нет в реквизите формы, на экран не попадут. Это частая причина «пустой» колонки.

Изменение данных базы

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

Перед первым запуском записывающей обработки в рабочей базе сделайте резервную копию. Проверьте результат на копии: откатить сотни перезаписанных документов без бэкапа почти невозможно.

Сохранение и запуск внешней обработки в базе

Сохранение файла .epf

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

Храните файлы в одной сетевой папке с версией в имени: ПоискКонтрагентов_v2.epf. Через полгода вы скажете себе спасибо.

Способ 1: разовый запуск через меню «Файл»

  1. Откройте базу в режиме 1С:Предприятие.
  2. Нажмите кнопку главного меню в заголовке окна и выберите Файл → Открыть (или Ctrl+O).
  3. Укажите файл .epf. Платформа покажет предупреждение о том, что внешний файл может быть опасен, — подтвердите, если файл ваш.

Для такого запуска у пользователя должно быть право «Интерактивное открытие внешних обработок». В типовых конфигурациях на БСП его дают через профиль групп доступа «Открытие внешних отчетов и обработок».

Способ 2: регистрация в дополнительных обработках

В типовых конфигурациях на БСП обработку можно подключить постоянно, через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Тогда пользователи запускают её из раздела программы, а не из файла, и права на открытие внешних файлов им не нужны.

Для регистрации в модуль объекта добавляют экспортную функцию СведенияОВнешнейОбработке:

Функция СведенияОВнешнейОбработке() Экспорт

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

	Команда = ПараметрыРегистрации.Команды.Добавить();
	Команда.Представление = "Контрагенты без ИНН";
	Команда.Идентификатор = "ОткрытьФорму";
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	Команда.ПоказыватьОповещение = Ложь;

	Возврат ПараметрыРегистрации;

КонецФункции

В строке параметра указывают версию БСП, под которую написана обработка. Без этой функции программа откажется загружать файл в справочник дополнительных обработок.

Способ запускаПлюсыМинусы
Файл → ОткрытьБыстро, без настройкиНужно право на внешние файлы, файл лежит у пользователя
Дополнительные обработкиВидна в разделе, права по группам доступа, версии хранятся в базеНужна функция регистрации

Отладка внешней обработки и типичные ошибки

Как отладить обработку

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

Отладчик останавливается только в той копии файла, которая открыта в Конфигураторе. Скопировали обработку в другую папку и запустили оттуда — точки останова не сработают.

В клиент-серверном варианте серверный код отлаживается, только если отладка разрешена на сервере 1С. Служба агента для этого запускается с параметром -debug. Включать его — дело администратора: перезапуск службы обрывает сеансы всех пользователей, поэтому делают это вне рабочего времени.

Ошибки, которые встречаются чаще других

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

Перед сохранением всегда запускайте синтаксический контроль модуля (Ctrl+F7). Ошибка в коде не помешает сохранить файл, но обработка упадёт уже у пользователя.

Частые вопросы о создании обработок в 1С

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