Своя внешняя обработка в 1С 8.3: форма, код, отладка и подключение

· 10 мин

Содержание

Свою обработку в 1С 8.3 создают в Конфигураторе: Файл → Новый → Внешняя обработка. Затем добавляют форму, пишут код в модуле формы и сохраняют результат в файл .epf. Такой файл открывают в рабочей базе через Файл → Открыть или подключают как дополнительную обработку, и конфигурация при этом не меняется.

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

Какую обработку создать: внешнюю, встроенную или в расширении

Сначала решите, где будет жить обработка. От этого зависит, придётся ли трогать конфигурацию и как потом обновлять код.

ВариантГде хранитсяКогда выбиратьОграничения
Внешняя обработка (.epf)Отдельный файл или справочник дополнительных обработокРазовые задачи, сервисные инструменты, отчёты под одного клиентаНужны права на открытие внешних обработок
Обработка в составе конфигурацииДерево метаданных конфигурацииСвоя (нетиповая) конфигурацияВ типовой снимает конфигурацию с полной поддержки, усложняет обновления
Обработка в расширении (.cfe)Расширение конфигурацииНужно постоянное место в интерфейсе, доступ к типовым модулямРасширения есть с платформы 8.3.6, нужно отдельно обновлять расширение

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

💡 Ещё до работы в Конфигураторе запишите на бумаге три вещи:

  • 📥 что пользователь вводит (период, организация, файл);
  • ⚙️ что обработка делает (только читает данные или ещё и записывает);
  • 📤 что пользователь получает (таблица на экране, файл, изменённые документы).

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

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

Внешнюю обработку можно создать, открыв Конфигуратор любой базы. Удобнее использовать копию рабочей базы: тогда при написании запросов вы видите реальные справочники и документы.

  1. Запустите 1С в режиме «Конфигуратор» и откройте базу.
  2. Выберите Файл → Новый, в списке отметьте «Внешняя обработка», нажмите «ОК».
  3. В открывшемся окне задайте имя латиницей или кириллицей без пробелов, например КонтрагентыБезИНН.
  4. Заполните синоним: «Контрагенты без ИНН». Его пользователь увидит в заголовке окна.
  5. Сразу сохраните файл: Файл → Сохранить как, тип .epf, понятное имя файла.

Окно обработки разделено на блоки: реквизиты, табличные части, формы, команды и макеты. Модуль объекта открывается из меню «Действия» этого окна.

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

Реквизиты обработки хранят то, что вводит пользователь. Табличная часть хранит строки результата. Для примера создайте:

  • 📌 реквизит Организация с типом СправочникСсылка.Организации (если нужен отбор);
  • 📋 табличную часть Результат с одним реквизитом Контрагент, тип СправочникСсылка.Контрагенты.

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

Не называйте реквизиты так же, как стандартные свойства и методы: Ссылка, Имя, Форма. Конфигуратор не всегда ругается сразу, а ошибка вылезет при выполнении кода.

Форма обработки: реквизиты, таблица и кнопки

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

  1. В блоке «Формы» нажмите кнопку добавления (зелёный плюс).
  2. В конструкторе формы выберите тип «Форма обработки».
  3. Отметьте флажок «Назначить форму основной» и нажмите «Готово».

Откроется редактор формы. Слева вверху дерево элементов, справа вверху реквизиты формы, внизу модуль формы и вкладки с командами.

Как вывести данные на форму

Главный реквизит формы называется Объект. Внутри него лежат все реквизиты и табличные части обработки. Чтобы показать их пользователю, раскройте Объект в списке реквизитов и перетащите нужное поле в дерево элементов.

  • Перетащите Организация, и на форме появится поле ввода.
  • Перетащите табличную часть Результат, и появится таблица с колонкой «Контрагент».

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

Кнопка на форме это команда формы.

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

Конфигуратор сам создаст две пустые процедуры в модуле формы. Осталось наполнить их кодом.

💡 Форма считается удачной, если её можно понять без инструкции: сверху поля отбора, ниже кнопка действия, ещё ниже результат. Свойство «Подсказка» у поля помогает объяснить, что в него вводить.

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

Код формы делится на две части. Директива &НаКлиенте выполняется на компьютере пользователя, &НаСервере выполняется там, где лежит база. Обращаться к данным базы (запросы, чтение справочников, запись документов) можно только на сервере.

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

&НаКлиенте
Процедура Заполнить(Команда)
	ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере()

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

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

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

	Если Объект.Результат.Количество() = 0 Тогда
		Сообщить("Контрагентов без ИНН не найдено.");
	КонецЕсли;

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

Этот код решает задачу целиком: очищает таблицу, выбирает не помеченные на удаление элементы с пустым ИНН и выводит их на форму. Пользователь может кликнуть по строке и открыть карточку контрагента.

Как не писать запрос вручную

Текст запроса удобно собирать конструктором. Поставьте курсор между кавычками после Запрос.Текст =, вызовите контекстное меню и выберите «Конструктор запроса». Отметьте таблицы и поля мышкой, задайте условия на вкладке «Условия», и Конфигуратор вставит готовый текст.

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

  • 🔁 Один вызов сервера на одно действие. Не вызывайте серверную процедуру в цикле по строкам на клиенте: каждый вызов идёт по сети.
  • 🧱 Всю логику держите в модуле объекта, а в модуле формы оставляйте только реакцию на кнопки. Тогда ту же логику можно вызвать из регламентного задания или другой обработки.
  • 🔤 Числа склеивайте со строкой через Формат(Число, "ЧГ=0") или СтрШаблон, иначе в сообщении появятся пробелы-разделители разрядов.
  • 🔒 Если обработка записывает объекты, оборачивайте запись в НачатьТранзакцию() / ЗафиксироватьТранзакцию() с ОтменитьТранзакцию() в блоке Исключение. Тогда сбой на середине не оставит базу в половинчатом состоянии.

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

Отладка и проверка обработки до запуска у пользователей

Отладчик есть в самом Конфигураторе. Порядок для внешней обработки такой.

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

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

В клиент-серверной базе отладка серверного кода требует, чтобы на сервере 1С была включена отладка. Её включает администратор сервера, без этого серверные точки останова не срабатывают.

Что проверить перед передачей обработки

  • ✅ Пустые значения: что будет, если пользователь не выбрал организацию.
  • ✅ Большой объём: запуск на полной базе за год, а не на трёх тестовых документах.
  • ✅ Права: запуск под пользователем с обычной ролью, а не под администратором.
  • ✅ Повторный запуск: не задваивает ли обработка данные, если нажать кнопку дважды.
Диагностика: выберите симптом

Подключение обработки к программе и выпуск новых версий

Открывать файл через меню каждый раз неудобно, и рядовым пользователям это часто запрещено. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) обработку регистрируют в справочнике дополнительных отчётов и обработок. Тогда она хранится в базе и запускается из нужного раздела.

Функция регистрации

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

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

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

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

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

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

Нашей обработке хватает безопасного режима: она только читает данные. Если код работает с файлами на диске, COM-объектами или внешними компонентами, безопасный режим придётся выключить, и это решение должен принять администратор базы.

Регистрация в Бухгалтерии 3.0

  1. Откройте Администрирование → Печатные формы, отчеты и обработки.
  2. Включите флажок «Дополнительные отчеты и обработки», если он выключен.
  3. Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
  4. Выберите .epf. Программа прочитает функцию регистрации и заполнит карточку.
  5. В карточке укажите размещение: раздел, где появится команда (например, «Справочники» или «Покупки»).
  6. На вкладке пользователей отметьте, кому доступна обработка, и нажмите «Записать и закрыть».

После этого в выбранном разделе в группе сервисов появится команда «Дополнительные обработки», а в её списке ваша «Контрагенты без ИНН».

Обновление и распространение

Выпуск новой версии устроен просто, если соблюдать два правила.

  • 🔢 Увеличивайте ПараметрыРегистрации.Версия при каждом изменении: «1.0», «1.1», «2.0». По номеру в карточке видно, какая версия сейчас в базе.
  • 📂 Обновляйте ту же карточку, а не добавляйте новую. В карточке есть команда загрузки обработки из файла: она заменит код, сохранив размещение и список пользователей.

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

Опишите в комментарии к обработке, что она делает и кто её автор. Через год вы или ваш преемник скажете себе спасибо, открыв в списке файл «Обработка1.epf» без единого пояснения.

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

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