Создание внешней и встроенной обработки в Конфигураторе 1С 8.3

· 10 мин

Содержание

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

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

Внешняя или встроенная: что решить до создания обработки

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

ВариантГде хранитсяКогда выбиратьМинусы
Внешняя обработкаФайл .epf на диске или в справочнике дополнительных обработокТиповая конфигурация на поддержке, разовые задачи, выгрузки, групповые правкиНужны права на открытие внешних обработок; при смене структуры данных файл может сломаться
Встроенная обработкаВнутри конфигурации базыКонфигурация уже снята с поддержки или своя, обработка нужна постоянно и всемТребует изменить конфигурацию и обновить её в базе; мешает обновлению типовой
Дополнительная обработка (БСП)Внешний файл, зарегистрированный в базеБП 3.0, ЗУП 3.1, УТ 11 и другие типовые на БСП: нужна кнопка в разделе, права, расписаниеНужна функция регистрации в модуле объекта

Для типовой конфигурации на поддержке почти всегда правильный ответ — внешняя обработка. Встраивать объект в типовую ради одной задачи значит усложнить себе каждое следующее обновление.

Перед стартом проверьте:

  • 🧪 есть копия рабочей базы, на которой можно отлаживаться;
  • 🔑 у вас есть доступ к Конфигуратору этой копии;
  • 📌 понятно, какие объекты обработка читает и меняет, и кто будет её запускать;
  • 🗂 известна конфигурация и её редакция: имена документов и реквизитов в БП 3.0 и УТ 11 различаются.

Создание обработки в Конфигураторе: пошаговая инструкция

Шаг 1. Новый файл

  1. Запустите 1С в режиме Конфигуратор на копии базы. Открывать саму конфигурацию (Конфигурация → Открыть конфигурацию) для внешней обработки не нужно.
  2. Выберите Файл → Новый…, в списке — Внешняя обработка, нажмите ОК.
  3. Откроется окно объекта. На вкладке Основные заполните Имя латиницей или кириллицей без пробелов, например ЗаполнениеРеализаций, и Синоним — его увидит пользователь.

Шаг 2. Реквизиты и табличные части

На вкладке Данные добавьте реквизиты обработки. Это её «переменные», которые пользователь видит на форме.

Для примера ниже понадобятся:

  • реквизит Период с типом СтандартныйПериод;
  • табличная часть Документы с колонками Документ (тип ДокументСсылка.РеализацияТоваровУслуг) и Сумма (тип Число, 15 знаков, 2 после запятой).

Шаг 3. Форма

На вкладке Формы нажмите кнопку добавления. Конструктор предложит тип Форма обработки и флажок назначения основной формой — оставьте его. В свойстве ОсновнаяФорма должна стоять эта форма, иначе при открытии файла пользователь не увидит вашего интерфейса.

Шаг 4. Сохранение

Нажмите Ctrl+S или Файл → Сохранить. Укажите папку и имя файла — расширение .epf подставится само. С этого момента файл можно открывать в любой базе той же конфигурации.

Встроенная обработка: чем отличается порядок

  1. Конфигурация → Открыть конфигурацию.
  2. В дереве правой кнопкой по ветке Обработки → Добавить.
  3. Дальше всё как во внешней: имя, реквизиты, форма, код.
  4. Чтобы обработка появилась у пользователей, включите её в нужную подсистему на вкладке Подсистемы, настройте права в ролях и выполните Конфигурация → Обновить конфигурацию базы данных (F7).

Готовую внешнюю обработку можно встроить: контекстное меню ветки Обработки → Вставить внешнюю обработку, отчет…. Обратное действие — Сохранить как внешнюю обработку, отчет… на встроенном объекте.

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

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

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

  1. Во вкладке Реквизиты раскройте Объект — там лежат реквизиты и табличные части обработки.
  2. Перетащите Период и Документы мышью в дерево элементов. Платформа сама создаст поле ввода и таблицу.
  3. Во вкладке Команды добавьте команду Заполнить. В свойстве Действие нажмите лупу — Конфигуратор создаст обработчик в модуле формы.
  4. Перетащите команду в дерево элементов или в командную панель формы. Появится кнопка.

💡 Реквизиты обработки (в составе Объект) и реквизиты формы — разные вещи. Если значение нужно в модуле объекта или при регистрации в БСП, создавайте реквизит обработки. Если оно нужно только интерфейсу, достаточно реквизита формы.

Несколько приёмов оформления, которые экономят время пользователю:

  • 🧩 группы с горизонтальной группировкой для полей, которые логически связаны (период и организация);
  • 🔒 свойство ТолькоПросмотр у колонки Сумма, чтобы её случайно не правили;
  • 🧭 свойство КнопкаПоУмолчанию у основной команды — тогда она срабатывает по Ctrl+Enter;
  • ✅ проверка заполнения: у реквизита свойство ПроверкаЗаполнения = Выдавать ошибку и вызов ПроверитьЗаполнение() перед выполнением.

Код обработки 1С: что пишется на клиенте, а что на сервере

Управляемая форма делит код директивами компиляции. Это главное, что ломает новичков.

ДирективаГде выполняетсяЧто доступно
&НаКлиентеНа компьютере пользователяФорма, диалоги, Сообщить(). Запросы и объекты базы недоступны
&НаСервереНа сервереЗапросы, объекты базы и данные формы, которые передаются туда и обратно
&НаСервереБезКонтекстаНа сервереЗапросы и объекты базы, но без данных формы: передача быстрее

Пример 1. Заполнение таблицы запросом

Обработчик команды Заполнить в модуле формы. Он работает в БП 3.0 и УТ 11, где есть документ РеализацияТоваровУслуг с реквизитом СуммаДокумента.

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

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

Текст запроса удобнее собирать конструктором: правой кнопкой в модуле → Конструктор запроса. Имена полей в КАК совпадают с колонками табличной части, поэтому ЗаполнитьЗначенияСвойств разложит значения сам.

Пример 2. Логика в модуле объекта

Основной алгоритм лучше держать в модуле объекта обработки (кнопка Модуль объекта на вкладке Прочее). Тогда его можно вызвать и с формы, и из регламентного задания.

В модуле объекта:

Функция ОбщаяСумма() Экспорт
	Итог = 0;
	Для Каждого Строка Из Документы Цикл
		Итог = Итог + Строка.Сумма;
	КонецЦикла;
	Возврат Итог;
КонецФункции

В модуле формы:

&НаСервере
Функция ОбщаяСуммаНаСервере()
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	Возврат ОбработкаОбъект.ОбщаяСумма();
КонецФункции

РеквизитФормыВЗначение превращает данные формы в настоящий объект обработки. Если метод что-то изменил в табличной части, верните данные на форму: ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект").

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

Отладка, оптимизация и документирование

Как отлаживать внешнюю обработку

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

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

Что ускоряет обработку

  • ⚡ Один запрос вместо цикла с обращением через точку (Документ.Контрагент.ИНН в цикле читает объект при каждом проходе).
  • 🚫 Никаких запросов внутри цикла: соберите всё пакетным запросом или через временную таблицу.
  • 📦 &НаСервереБезКонтекста, если серверной процедуре не нужна форма целиком: не гоняется весь набор данных формы.
  • 🧱 Для записи многих объектов — транзакции порциями по несколько сотен, а не одна на всё и не по одной на каждый объект.

Как документировать

  • в свойстве Комментарий обработки — назначение и автор;
  • перед каждой экспортной процедурой — комментарий с параметрами и возвращаемым значением (Конфигуратор показывает его в подсказке);
  • версия обработки — в функции регистрации БСП (см. ниже) и в имени файла, например ЗаполнениеРеализаций_1.2.epf;
  • справка для пользователя — вкладка Справочная информация объекта, она открывается по F1 на форме.

Как сохранить и подключить обработку в рабочей базе

Есть три способа передать обработку пользователю.

СпособКакКогда подходит
Открыть файломГлавное меню → Файл → Открыть, выбрать .epfРазовая задача, запускает администратор
Зарегистрировать как дополнительнуюВ БП 3.0: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработкиПостоянное использование, нужны права и место в разделе
Встроить в конфигурациюЧерез ветку Обработки и обновление конфигурацииСвоя или снятая с поддержки конфигурация

При открытии файлом платформа показывает предупреждение о безопасности: внешняя обработка может выполнить любой код. Пользователю без права на интерактивное открытие внешних обработок откроется ошибка прав доступа — это настраивается в группах доступа, а не в обработке.

Функция регистрации для БСП

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

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

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

	Возврат ПараметрыРегистрации;
КонецФункции

Порядок регистрации:

  1. Включите флажок Дополнительные отчеты и обработки в разделе Администрирование → Печатные формы, отчеты и обработки.
  2. Откройте список Дополнительные отчеты и обработки и нажмите Добавить из файла.
  3. Выберите .epf, в карточке на вкладке команд укажите, в каких разделах показывать команду и каким пользователям.
  4. Нажмите Записать и закрыть. Команда появится в разделе в пункте Дополнительные обработки.

БезопасныйРежим = Ложь разрешает обработке всё: работу с файлами, COM, внешние ресурсы. Если ей это не нужно, ставьте Истина — в безопасном режиме такой код просто не выполнится.

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

Автоматическое выполнение и интеграция с другими системами

Запуск по расписанию

БСП умеет запускать дополнительную обработку как регламентное задание. Для этого команде задают тип серверного вызова, а в модуле объекта пишут процедуру ВыполнитьКоманду:

// В функции СведенияОВнешнейОбработке:
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.Идентификатор = "ЕжедневнаяПроверка";

// Отдельной процедурой в модуле объекта:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
	Если ИдентификаторКоманды = "ЕжедневнаяПроверка" Тогда
		// основной алгоритм без обращений к форме и диалогам
	КонецЕсли;
КонецПроцедуры

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

В процедуре для расписания нельзя вызывать Предупреждение, Вопрос и любые окна: на сервере их показать некому. Результат пишите в журнал регистрации методом ЗаписьЖурналаРегистрации.

Интеграция

Внешняя обработка — удобная точка обмена с другими программами:

  • 📄 чтение и запись файлов: ТекстовыйДокумент, ЧтениеJSON, ЧтениеXML, ТабличныйДокумент для Excel;
  • 🌐 обращение к внешним сервисам через HTTPСоединение и HTTPЗапрос;
  • 🔌 COM-соединение с другой базой 1С, если обмен нужен разово и без настройки планов обмена.

Всё это требует БезопасныйРежим = Ложь и обычно права на внешние ресурсы.

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

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

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

Можно ли создать внешнюю обработку без доступа к Конфигуратору?
Нет. Редактор форм и модулей есть только в режиме Конфигуратора. Подойдёт любая база, даже пустая, но версия платформы должна быть не ниже той, где обработку будут запускать.
Обработка из БП 3.0 заработает в УТ 11?
Только если в коде нет обращений к объектам, которых в УТ нет или которые называются иначе. Код на платформенных методах переносится, а обращения к документам и регистрам надо проверять.
Чем внешняя обработка отличается от внешнего отчёта?
Отчёт строится на схеме компоновки данных и нужен для просмотра данных. Обработка выполняет действия: заполняет, меняет, загружает. Файл отчёта имеет расширение .erf.
Можно ли защитить код обработки от просмотра?
Можно поставить пароль на модуль в Конфигураторе, но надёжной защитой это не считается. Код, который нельзя показывать, лучше держать на своей стороне, например в веб-сервисе.
Почему обработка в файловой базе работает, а в клиент-серверной падает?
Чаще всего из-за обращений к файлам: на сервере путь вида C:\Temp указывает на диск сервера, а не пользователя. Файлы с компьютера пользователя передают через временное хранилище.