Создание внешней и встроенной обработки в Конфигураторе 1С 8.3
Содержание
Чтобы создать обработку
в Конфигураторе 1С 8.3, откройте любую базу в режиме Конфигуратора и выберите Файл → Новый… → Внешняя обработка. Задайте имя, добавьте реквизиты и форму, напишите код и сохраните файл с расширением .epf. Встроенную обработку создают иначе: в дереве конфигурации правой кнопкой по ветке Обработки → Добавить.
Внешняя обработка живёт отдельным файлом и не требует обновлять конфигурацию базы. Поэтому почти все разовые и пользовательские доработки делают именно так. Ниже — путь от пустого файла до обработки, которая подключена в рабочей базе и при желании запускается по расписанию.
Внешняя или встроенная: что решить до создания обработки
Обработка — объект конфигурации для действий с данными: заполнить, перенести, пересчитать, выгрузить. Она ничего не хранит сама, в отличие от справочника или документа. Перед тем как открыть Конфигуратор , решите, где она будет жить.
| Вариант | Где хранится | Когда выбирать | Минусы |
|---|---|---|---|
| Внешняя обработка | Файл .epf на диске или в справочнике дополнительных обработок | Типовая конфигурация на поддержке, разовые задачи, выгрузки, групповые правки | Нужны права на открытие внешних обработок; при смене структуры данных файл может сломаться |
| Встроенная обработка | Внутри конфигурации базы | Конфигурация уже снята с поддержки или своя, обработка нужна постоянно и всем | Требует изменить конфигурацию и обновить её в базе; мешает обновлению типовой |
| Дополнительная обработка (БСП) | Внешний файл, зарегистрированный в базе | БП 3.0, ЗУП 3.1, УТ 11 и другие типовые на БСП: нужна кнопка в разделе, права, расписание | Нужна функция регистрации в модуле объекта |
Для типовой конфигурации на поддержке почти всегда правильный ответ — внешняя обработка. Встраивать объект в типовую ради одной задачи значит усложнить себе каждое следующее обновление.
Перед стартом проверьте:
- 🧪 есть копия рабочей базы, на которой можно отлаживаться;
- 🔑 у вас есть доступ к Конфигуратору этой копии;
- 📌 понятно, какие объекты обработка читает и меняет, и кто будет её запускать;
- 🗂 известна конфигурация и её редакция: имена документов и реквизитов в БП 3.0 и УТ 11 различаются.
Создание обработки в Конфигураторе: пошаговая инструкция
Шаг 1. Новый файл
- Запустите 1С в режиме
Конфигураторна копии базы. Открывать саму конфигурацию (Конфигурация → Открыть конфигурацию) для внешней обработки не нужно. - Выберите
Файл → Новый…, в списке —Внешняя обработка, нажмитеОК. - Откроется окно объекта. На вкладке
ОсновныезаполнитеИмялатиницей или кириллицей без пробелов, напримерЗаполнениеРеализаций, иСиноним— его увидит пользователь.
Шаг 2. Реквизиты и табличные части
На вкладке Данные добавьте реквизиты обработки. Это её «переменные», которые пользователь видит на форме.
Для примера ниже понадобятся:
- реквизит
Периодс типомСтандартныйПериод; - табличная часть
Документыс колонкамиДокумент(типДокументСсылка.РеализацияТоваровУслуг) иСумма(типЧисло, 15 знаков, 2 после запятой).
Шаг 3. Форма
На вкладке Формы нажмите кнопку добавления. Конструктор предложит тип Форма обработки и флажок назначения основной формой — оставьте его. В свойстве ОсновнаяФорма должна стоять эта форма, иначе при открытии файла пользователь не увидит вашего интерфейса.
Шаг 4. Сохранение
Нажмите Ctrl+S или Файл → Сохранить. Укажите папку и имя файла — расширение .epf подставится само. С этого момента файл можно открывать в любой базе той же конфигурации.
Встроенная обработка: чем отличается порядок
Конфигурация → Открыть конфигурацию.- В дереве правой кнопкой по ветке
Обработки→Добавить. - Дальше всё как во внешней: имя, реквизиты, форма, код.
- Чтобы обработка появилась у пользователей, включите её в нужную подсистему на вкладке
Подсистемы, настройте права в ролях и выполнитеКонфигурация → Обновить конфигурацию базы данных(F7).
Готовую внешнюю обработку
можно встроить: контекстное меню ветки Обработки → Вставить внешнюю обработку, отчет…. Обратное действие — Сохранить как внешнюю обработку, отчет… на встроенном объекте.
Форма обработки: реквизиты, элементы и команды
Откройте форму двойным щелчком. Слева вверху — дерево элементов, справа — реквизиты и команды формы, внизу — модуль формы и предварительный просмотр.
Как вывести данные на форму:
- Во вкладке
РеквизитыраскройтеОбъект— там лежат реквизиты и табличные части обработки. - Перетащите
ПериодиДокументымышью в дерево элементов. Платформа сама создаст поле ввода и таблицу. - Во вкладке
Командыдобавьте командуЗаполнить. В свойствеДействиенажмите лупу — Конфигуратор создаст обработчик в модуле формы. - Перетащите команду в дерево элементов или в командную панель формы. Появится кнопка.
💡 Реквизиты обработки (в составе Объект) и реквизиты формы — разные вещи. Если значение нужно в модуле объекта или при регистрации в БСП, создавайте реквизит обработки. Если оно нужно только интерфейсу, достаточно реквизита формы.
Несколько приёмов оформления, которые экономят время пользователю:
- 🧩 группы с горизонтальной группировкой для полей, которые логически связаны (период и организация);
- 🔒 свойство
ТолькоПросмотру колонкиСумма, чтобы её случайно не правили; - 🧭 свойство
КнопкаПоУмолчаниюу основной команды — тогда она срабатывает поCtrl+Enter; - ✅ проверка заполнения: у реквизита свойство
ПроверкаЗаполнения = Выдавать ошибкуи вызовПроверитьЗаполнение()перед выполнением.
Код обработки 1С: что пишется на клиенте, а что на сервере
Управляемая форма делит код директивами компиляции. Это главное, что ломает новичков.
| Директива | Где выполняется | Что доступно |
|---|---|---|
&НаКлиенте | На компьютере пользователя | Форма, диалоги, Сообщить(). Запросы и объекты базы недоступны |
&НаСервере | На сервере | Запросы, объекты базы и данные формы, которые передаются туда и обратно |
&НаСервереБезКонтекста | На сервере | Запросы и объекты базы, но без данных формы: передача быстрее |
Пример 1. Заполнение таблицы запросом
Обработчик команды Заполнить в модуле формы. Он работает в БП 3.0 и УТ 11, где есть документ РеализацияТоваровУслуг с реквизитом СуммаДокумента.
&НаКлиенте
Процедура Заполнить(Команда)
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
ЗаполнитьНаСервере();
ПоказатьОповещениеПользователя("Найдено документов: " + Формат(Объект.Документы.Количество(), "ЧН=0; ЧГ=0"));
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНаСервере()
Объект.Документы.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Документ,
| Реализация.СуммаДокумента КАК Сумма
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И Реализация.Проведен
|УПОРЯДОЧИТЬ ПО
| Реализация.Дата";
Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Документы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
КонецЦикла;
КонецПроцедуры
Текст запроса удобнее собирать конструктором: правой кнопкой в модуле → Конструктор запроса. Имена полей в КАК совпадают с колонками табличной части, поэтому ЗаполнитьЗначенияСвойств разложит значения сам.
Пример 2. Логика в модуле объекта
Основной алгоритм лучше держать в модуле объекта обработки (кнопка Модуль объекта на вкладке Прочее). Тогда его можно вызвать и с формы, и из регламентного задания.
В модуле объекта:
Функция ОбщаяСумма() Экспорт
Итог = 0;
Для Каждого Строка Из Документы Цикл
Итог = Итог + Строка.Сумма;
КонецЦикла;
Возврат Итог;
КонецФункции
В модуле формы:
&НаСервере
Функция ОбщаяСуммаНаСервере()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Возврат ОбработкаОбъект.ОбщаяСумма();
КонецФункции
РеквизитФормыВЗначение превращает данные формы в настоящий объект обработки. Если метод что-то изменил в табличной части, верните данные на форму: ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект").
Обработка, которая записывает документы или элементы справочников, сначала гоняется только на копии базы. Групповая запись может перепровести сотни документов, а отменить её одной кнопкой нельзя.
Отладка, оптимизация и документирование
Как отлаживать внешнюю обработку
- В Конфигураторе откройте файл
.epfи поставьте точку останова (F9) на нужной строке. - Запустите 1С:Предприятие из Конфигуратора:
Отладка → Начать отладку(F5). - В пользовательском режиме откройте обработку из того же файла: главное меню (кнопка с тремя полосками) →
Файл → Открыть. - Выполнение остановится на точке, значения переменных смотрите через
Shift+F9или табло.
Если поправили код, сохраните файл и откройте обработку в пользовательском режиме заново — уже открытая форма продолжит работать по старому коду.
Что ускоряет обработку
- ⚡ Один запрос вместо цикла с обращением через точку (
Документ.Контрагент.ИННв цикле читает объект при каждом проходе). - 🚫 Никаких запросов внутри цикла: соберите всё пакетным запросом или через временную таблицу.
- 📦
&НаСервереБезКонтекста, если серверной процедуре не нужна форма целиком: не гоняется весь набор данных формы. - 🧱 Для записи многих объектов — транзакции порциями по несколько сотен, а не одна на всё и не по одной на каждый объект.
Как документировать
- в свойстве
Комментарийобработки — назначение и автор; - перед каждой экспортной процедурой — комментарий с параметрами и возвращаемым значением (Конфигуратор показывает его в подсказке);
- версия обработки — в функции регистрации БСП (см. ниже) и в имени файла, например
ЗаполнениеРеализаций_1.2.epf; - справка для пользователя — вкладка
Справочная информацияобъекта, она открывается поF1на форме.
Как сохранить и подключить обработку в рабочей базе
Есть три способа передать обработку пользователю.
| Способ | Как | Когда подходит |
|---|---|---|
| Открыть файлом | Главное меню → Файл → Открыть, выбрать .epf | Разовая задача, запускает администратор |
| Зарегистрировать как дополнительную | В БП 3.0: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки | Постоянное использование, нужны права и место в разделе |
| Встроить в конфигурацию | Через ветку Обработки и обновление конфигурации | Своя или снятая с поддержки конфигурация |
При открытии файлом платформа показывает предупреждение о безопасности: внешняя обработка может выполнить любой код. Пользователю без права на интерактивное открытие внешних обработок откроется ошибка прав доступа — это настраивается в группах доступа, а не в обработке.
Функция регистрации для БСП
Чтобы обработку можно было добавить в список дополнительных, в модуле объекта нужна экспортная функция СведенияОВнешнейОбработке. Без неё база откажется её регистрировать.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.2";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
ПараметрыРегистрации.Информация = "Заполнение списка реализаций за период";
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Заполнение реализаций";
Команда.Идентификатор = "ОткрытьФорму";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Команда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Порядок регистрации:
- Включите флажок
Дополнительные отчеты и обработкив разделеАдминистрирование → Печатные формы, отчеты и обработки. - Откройте список
Дополнительные отчеты и обработкии нажмитеДобавить из файла. - Выберите
.epf, в карточке на вкладке команд укажите, в каких разделах показывать команду и каким пользователям. - Нажмите
Записать и закрыть. Команда появится в разделе в пунктеДополнительные обработки.
БезопасныйРежим = Ложь разрешает обработке всё: работу с файлами, COM, внешние ресурсы. Если ей это не нужно, ставьте Истина — в безопасном режиме такой код просто не выполнится.
Новую версию обработки загружают в ту же карточку, а не регистрируют второй раз. Иначе в разделе появятся две одинаковые команды, и пользователи будут запускать старую.
Автоматическое выполнение и интеграция с другими системами
Запуск по расписанию
БСП умеет запускать дополнительную обработку как регламентное задание. Для этого команде задают тип серверного вызова, а в модуле объекта пишут процедуру ВыполнитьКоманду:
// В функции СведенияОВнешнейОбработке:
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.Идентификатор = "ЕжедневнаяПроверка";
// Отдельной процедурой в модуле объекта:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "ЕжедневнаяПроверка" Тогда
// основной алгоритм без обращений к форме и диалогам
КонецЕсли;
КонецПроцедуры
После регистрации в карточке обработки у такой команды появится возможность задать расписание. В клиент-серверном варианте регламентные задания выполняет сервер 1С. В файловом варианте они идут, только пока открыт хотя бы один сеанс, или через отдельный запуск по расписанию Windows.
В процедуре для расписания нельзя вызывать Предупреждение, Вопрос и любые окна: на сервере их показать некому. Результат пишите в журнал регистрации методом ЗаписьЖурналаРегистрации.
Интеграция
Внешняя обработка — удобная точка обмена с другими программами:
- 📄 чтение и запись файлов:
ТекстовыйДокумент,ЧтениеJSON,ЧтениеXML,ТабличныйДокументдля Excel; - 🌐 обращение к внешним сервисам через
HTTPСоединениеиHTTPЗапрос; - 🔌 COM-соединение с другой базой 1С, если обмен нужен разово и без настройки планов обмена.
Всё это требует БезопасныйРежим = Ложь и обычно права на внешние ресурсы.