Своя внешняя обработка в 1С 8.3: форма, код, отладка и подключение
Содержание
Свою обработку в 1С 8.3 создают в Конфигураторе: Файл → Новый → Внешняя обработка. Затем добавляют форму, пишут код в модуле формы и сохраняют результат в файл .epf. Такой файл открывают в рабочей базе через Файл → Открыть или подключают как дополнительную обработку, и конфигурация при этом не меняется.
Типичная ситуация: главбух просит раз в месяц находить контрагентов без ИНН, а штатного отчёта под это нет. Писать доработку в саму конфигурацию незачем. Хватит маленькой внешней обработки на 30 строк кода. Ниже весь путь на этом примере: от пустого файла до кнопки в разделе программы. Порядок действий общий для платформы 8.3 и не зависит от конфигурации, а подключение показано на Бухгалтерии 3.0.
Какую обработку создать: внешнюю, встроенную или в расширении
Сначала решите, где будет жить обработка. От этого зависит, придётся ли трогать конфигурацию и как потом обновлять код.
| Вариант | Где хранится | Когда выбирать | Ограничения |
|---|---|---|---|
Внешняя обработка (.epf) | Отдельный файл или справочник дополнительных обработок | Разовые задачи, сервисные инструменты, отчёты под одного клиента | Нужны права на открытие внешних обработок |
| Обработка в составе конфигурации | Дерево метаданных конфигурации | Своя (нетиповая) конфигурация | В типовой снимает конфигурацию с полной поддержки, усложняет обновления |
Обработка в расширении (.cfe) | Расширение конфигурации | Нужно постоянное место в интерфейсе, доступ к типовым модулям | Расширения есть с платформы 8.3.6, нужно отдельно обновлять расширение |
Для первой обработки берите внешний вариант. Он не затрагивает типовую конфигурацию , его легко перенести в другую базу и удалить. Всё, что описано ниже про форму и код, одинаково работает и для обработки внутри конфигурации или расширения.
💡 Ещё до работы в Конфигураторе запишите на бумаге три вещи:
- 📥 что пользователь вводит (период, организация, файл);
- ⚙️ что обработка делает (только читает данные или ещё и записывает);
- 📤 что пользователь получает (таблица на экране, файл, изменённые документы).
Обработка, которая только читает данные, почти безопасна. Обработка, которая записывает документы или справочники, требует тестовой базы и резервной копии.
Создание файла обработки в Конфигураторе
Внешнюю обработку можно создать, открыв Конфигуратор любой базы. Удобнее использовать копию рабочей базы: тогда при написании запросов вы видите реальные справочники и документы.
- Запустите 1С в режиме «Конфигуратор» и откройте базу.
- Выберите
Файл → Новый, в списке отметьте «Внешняя обработка», нажмите «ОК». - В открывшемся окне задайте имя латиницей или кириллицей без пробелов, например
КонтрагентыБезИНН. - Заполните синоним: «Контрагенты без ИНН». Его пользователь увидит в заголовке окна.
- Сразу сохраните файл:
Файл → Сохранить как, тип.epf, понятное имя файла.
Окно обработки разделено на блоки: реквизиты, табличные части, формы, команды и макеты. Модуль объекта открывается из меню «Действия» этого окна.
Реквизиты и табличные части
Реквизиты обработки хранят то, что вводит пользователь. Табличная часть хранит строки результата. Для примера создайте:
- 📌 реквизит
Организацияс типомСправочникСсылка.Организации(если нужен отбор); - 📋 табличную часть
Результатс одним реквизитомКонтрагент, типСправочникСсылка.Контрагенты.
Типы из конфигурации доступны в обработке, только если вы создаёте её в Конфигураторе той же конфигурации. Если открыть файл в базе другой конфигурации, где справочника Контрагенты нет, обработка выдаст ошибку.
Не называйте реквизиты так же, как стандартные свойства и методы: Ссылка, Имя, Форма. Конфигуратор не всегда ругается сразу, а ошибка вылезет при выполнении кода.
Форма обработки: реквизиты, таблица и кнопки
В интерфейсе «Такси» работают только управляемые формы. Обычные формы запускаются лишь в толстом клиенте, поэтому для новой обработки делайте управляемую.
- В блоке «Формы» нажмите кнопку добавления (зелёный плюс).
- В конструкторе формы выберите тип «Форма обработки».
- Отметьте флажок «Назначить форму основной» и нажмите «Готово».
Откроется редактор формы. Слева вверху дерево элементов, справа вверху реквизиты формы, внизу модуль формы и вкладки с командами.
Как вывести данные на форму
Главный реквизит формы называется Объект. Внутри него лежат все реквизиты и табличные части обработки. Чтобы показать их пользователю, раскройте Объект в списке реквизитов и перетащите нужное поле в дерево элементов.
- Перетащите
Организация, и на форме появится поле ввода. - Перетащите табличную часть
Результат, и появится таблица с колонкой «Контрагент».
Как добавить кнопку
Кнопка на форме это команда формы.
- Перейдите на вкладку «Команды формы» и добавьте новую команду, назовите её
Заполнить. - В свойствах команды найдите поле «Действие» и нажмите кнопку с лупой. Конфигуратор спросит, где создать обработчик: выберите «Создать на клиенте и процедуру на сервере».
- Перетащите команду
Заполнитьв дерево элементов формы, например в командную панель.
Конфигуратор сам создаст две пустые процедуры в модуле формы. Осталось наполнить их кодом.
💡 Форма считается удачной, если её можно понять без инструкции: сверху поля отбора, ниже кнопка действия, ещё ниже результат. Свойство «Подсказка» у поля помогает объяснить, что в него вводить.
Программный код обработки: клиент, сервер и запрос
Код формы делится на две части. Директива &НаКлиенте выполняется на компьютере пользователя, &НаСервере выполняется там, где лежит база. Обращаться к данным базы (запросы, чтение справочников, запись документов) можно только на сервере.
Клиентская процедура реагирует на нажатие кнопки и вызывает серверную. Серверная делает всю работу с данными.
&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНаСервере()
Объект.Результат.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Контрагент
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ЭтоГруппа
| И НЕ Контрагенты.ПометкаУдаления
| И Контрагенты.ИНН = """"
|
|УПОРЯДОЧИТЬ ПО
| Контрагенты.Наименование";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Результат.Добавить();
НоваяСтрока.Контрагент = Выборка.Контрагент;
КонецЦикла;
Если Объект.Результат.Количество() = 0 Тогда
Сообщить("Контрагентов без ИНН не найдено.");
КонецЕсли;
КонецПроцедуры
Этот код решает задачу целиком: очищает таблицу, выбирает не помеченные на удаление элементы с пустым ИНН и выводит их на форму. Пользователь может кликнуть по строке и открыть карточку контрагента.
Как не писать запрос вручную
Текст запроса удобно собирать конструктором. Поставьте курсор между кавычками после Запрос.Текст =, вызовите контекстное меню и выберите «Конструктор запроса». Отметьте таблицы и поля мышкой, задайте условия на вкладке «Условия», и Конфигуратор вставит готовый текст.
Правила, которые экономят время
- 🔁 Один вызов сервера на одно действие. Не вызывайте серверную процедуру в цикле по строкам на клиенте: каждый вызов идёт по сети.
- 🧱 Всю логику держите в модуле объекта, а в модуле формы оставляйте только реакцию на кнопки. Тогда ту же логику можно вызвать из регламентного задания или другой обработки.
- 🔤 Числа склеивайте со строкой через
Формат(Число, "ЧГ=0")илиСтрШаблон, иначе в сообщении появятся пробелы-разделители разрядов. - 🔒 Если обработка записывает объекты, оборачивайте запись в
НачатьТранзакцию()/ЗафиксироватьТранзакцию()сОтменитьТранзакцию()в блокеИсключение. Тогда сбой на середине не оставит базу в половинчатом состоянии.
Обработку, которая меняет документы или справочники, сначала запускайте только в копии базы. Массовое перепроведение или перезапись сотен объектов отменить кнопкой нельзя.
Отладка и проверка обработки до запуска у пользователей
Отладчик есть в самом Конфигураторе. Порядок для внешней обработки такой.
- Откройте модуль формы и встаньте на строку
Объект.Результат.Очистить();. НажмитеF9: слева появится красная точка останова. - Запустите отладку:
Отладка → Начать отладку → Тонкий клиент(или клавишаF5, она запускает клиент по умолчанию). - В открывшемся окне 1С откройте ваш файл: главное меню (кнопка с тремя полосками)
→ Файл → Открыть, выберите.epf. - Нажмите «Заполнить». Выполнение остановится на точке, а Конфигуратор покажет строку.
- Идите по коду клавишами
F11(шаг с заходом в процедуру) иF10(шаг без захода). Значения переменных смотрите, наведя на них курсор или черезShift+F9(вычислить выражение).
Точка останова срабатывает, когда в клиенте открыт тот же файл, что редактируется в Конфигураторе. Если открыть копию из другой папки, отладчик её не узнает.
В клиент-серверной базе отладка серверного кода требует, чтобы на сервере 1С была включена отладка. Её включает администратор сервера, без этого серверные точки останова не срабатывают.
Что проверить перед передачей обработки
- ✅ Пустые значения: что будет, если пользователь не выбрал организацию.
- ✅ Большой объём: запуск на полной базе за год, а не на трёх тестовых документах.
- ✅ Права: запуск под пользователем с обычной ролью, а не под администратором.
- ✅ Повторный запуск: не задваивает ли обработка данные, если нажать кнопку дважды.
Подключение обработки к программе и выпуск новых версий
Открывать файл через меню каждый раз неудобно, и рядовым пользователям это часто запрещено. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) обработку регистрируют в справочнике дополнительных отчётов и обработок. Тогда она хранится в базе и запускается из нужного раздела.
Функция регистрации
Чтобы программа приняла файл, в модуль объекта обработки (не формы) добавьте экспортную функцию СведенияОВнешнейОбработке:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Контрагенты без ИНН";
Команда.Идентификатор = "ОткрытьФорму";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Команда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Нашей обработке хватает безопасного режима: она только читает данные. Если код работает с файлами на диске, COM-объектами или внешними компонентами, безопасный режим придётся выключить, и это решение должен принять администратор базы.
Регистрация в Бухгалтерии 3.0
- Откройте
Администрирование → Печатные формы, отчеты и обработки. - Включите флажок «Дополнительные отчеты и обработки», если он выключен.
- Перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла».
- Выберите
.epf. Программа прочитает функцию регистрации и заполнит карточку. - В карточке укажите размещение: раздел, где появится команда (например, «Справочники» или «Покупки»).
- На вкладке пользователей отметьте, кому доступна обработка, и нажмите «Записать и закрыть».
После этого в выбранном разделе в группе сервисов появится команда «Дополнительные обработки», а в её списке ваша «Контрагенты без ИНН».
Обновление и распространение
Выпуск новой версии устроен просто, если соблюдать два правила.
- 🔢 Увеличивайте
ПараметрыРегистрации.Версияпри каждом изменении: «1.0», «1.1», «2.0». По номеру в карточке видно, какая версия сейчас в базе. - 📂 Обновляйте ту же карточку, а не добавляйте новую. В карточке есть команда загрузки обработки из файла: она заменит код, сохранив размещение и список пользователей.
Если обработка нужна в нескольких базах, храните .epf в одной сетевой папке, а рядом короткий файл с историей изменений: версия, дата, что поменялось. Когда обработок становится больше десятка, их удобнее вести в 1С:EDT с системой контроля версий: там исходники хранятся текстом, и каждое изменение видно построчно.
Опишите в комментарии к обработке, что она делает и кто её автор. Через год вы или ваш преемник скажете себе спасибо, открыв в списке файл «Обработка1.epf» без единого пояснения.
Частые вопросы
Можно ли создать обработку без Конфигуратора, прямо в пользовательском режиме?
Нужна ли отдельная лицензия, чтобы писать обработки?
Чем внешняя обработка отличается от внешнего отчёта?
.erf, обработка в .epf.