Дополнительные отчеты и обработки БСП — это подсистема, которая позволяет подключать внешние файлы .epf и .erf к типовой конфигурации без снятия с поддержки. Чтобы файл можно было зарегистрировать в справочнике «Дополнительные отчеты и обработки», в модуле объекта должна быть экспортная функция СведенияОВнешнейОбработке(): она сообщает вид разработки, объекты назначения и список команд. По виду и типу команды БСП решает, куда вывести кнопку и какой метод вызвать.
Ниже разберу виды разработок, структуру регистрационных данных, полный пример внешней печатной формы и способы отладки, которыми пользуюсь сам.
Что можно подключить через подсистему
Файлы двух форматов: внешние обработки (.epf) и внешние отчёты (.erf). Внутри подсистемы они делятся на виды:
| Вид | Где появляется команда | Файл |
|---|---|---|
ПечатнаяФорма | Меню «Печать» в форме объекта или списка | epf |
ЗаполнениеОбъекта | Меню «Заполнить» в форме объекта или списка | epf |
СозданиеСвязанныхОбъектов | «Создать на основании» → «Создание связанных объектов» | epf |
Отчет | Меню «Отчеты» в форме объекта или списка | erf |
ДополнительнаяОбработка | Раздел «Дополнительные обработки» в выбранных подсистемах | epf |
ДополнительныйОтчет | Раздел «Дополнительные отчеты» в выбранных подсистемах | erf |
Первые четыре — назначаемые: привязываются к конкретным документам и справочникам. Последние два — глобальные: живут в разделах интерфейса.
Что ещё даёт подсистема поверх «просто открыть файл»:
- несколько команд в одной обработке;
- заполнение и ввод на основании сразу для нескольких выбранных объектов;
- расписание для серверных команд (регламентное выполнение);
- безопасный и небезопасный режим запуска;
- режим публикации: используется, режим отладки, отключена;
- настройка разделов интерфейса и быстрого доступа к командам по пользователям.

Регистрационные данные: что возвращает СведенияОВнешнейОбработке
Функция возвращает структуру. Основные поля:
- Вид — строка из таблицы выше. Значения удобно брать функциями
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки...(). Минимально обязательное поле. - Назначение — массив строк вида
"Документ.РеализацияТоваровУслуг"; нужен для назначаемых видов. - Наименование — имя элемента справочника; если пусто, берётся синоним обработки.
- Версия и Информация — строки для карточки.
- БезопасныйРежим — булево.
- ВерсияБСП — версия библиотеки, под которую написана обработка; нужна для совместимости.
- Команды — таблица значений с колонками
Представление,Идентификатор,Использование,ПоказыватьОповещение,Модификатор.
Типы команд и вызываемые методы
Колонка Использование задаёт тип команды. В связке с видом он определяет, какой экспортный метод вызовет БСП:
| Тип команды | Вид | Что вызывается |
|---|---|---|
ВызовСерверногоМетода | ПечатнаяФорма | Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) в модуле объекта |
ВызовСерверногоМетода | ДополнительнаяОбработка, ДополнительныйОтчет | ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) |
ВызовСерверногоМетода | ЗаполнениеОбъекта | ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) |
ВызовСерверногоМетода | СозданиеСвязанныхОбъектов | ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения) |
ВызовКлиентскогоМетода | любой | экспортная процедура в основной форме обработки, &НаКлиенте |
ОткрытиеФормы | любой | открывается основная форма, в параметрах — ссылка на обработку и идентификатор команды |
Есть и специальные типы: СценарийВБезопасномРежиме, ЗагрузкаДанныхИзФайла, ЗаполнениеФормы. Их точное поведение описано в комментариях функций ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды...() вашей версии БСП — открываю их перед использованием, потому что от версии к версии детали меняются.
Для клиентского типа у обработки обязательно должна быть основная форма с экспортной процедурой нужной сигнатуры.
Пример: внешняя печатная форма
Ручная сборка структуры и таблицы команд, как во многих старых примерах, работает, но проще взять заготовку у самой БСП: функция ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке() возвращает структуру с правильными полями и пустой таблицей команд.
// Регистрационные данные для подсистемы «Дополнительные отчеты и обработки».
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.0.1";
ПараметрыРегистрации.БезопасныйРежим = Истина;
ПараметрыРегистрации.Информация = "Альтернативный бланк накладной для реализации товаров";
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Накладная (альтернативная)";
Команда.Идентификатор = "НакладнаяАльтернативная";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Ложь;
Команда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункцииМодификатор ПечатьMXL говорит БСП, что результат — табличный документ. Теперь процедура печати. Обратите внимание: это процедура, коллекцию печатных форм создаёт и передаёт сама БСП, пересоздавать её не нужно.
// Вызывается подсистемой «Печать» по команде с типом ВызовСерверногоМетода.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ИдентификаторФормы = "НакладнаяАльтернативная";
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИдентификаторФормы) Тогда
ТабличныйДокумент = СформироватьНакладную(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
ИдентификаторФормы, "Накладная (альтернативная)", ТабличныйДокумент);
КонецЕсли;
КонецПроцедуры
Функция СформироватьНакладную(МассивОбъектов, ОбъектыПечати)
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_НакладнаяАльтернативная";
Макет = ПолучитьМакет("Накладная");
Для Каждого Документ Из МассивОбъектов Цикл
Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = Документ.Номер;
ОбластьШапка.Параметры.Дата = Формат(Документ.Дата, "ДЛФ=D");
ОбластьШапка.Параметры.Контрагент = Документ.Контрагент;
ТабличныйДокумент.Вывести(ОбластьШапка);
// Привязка области к документу нужна для отправки по почте и сохранения по объектам
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало,
ОбъектыПечати, Документ);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункцииВ реальной форме данные лучше получать одним запросом по всему массиву, а не обращаться к реквизитам через точку в цикле. Здесь упрощено ради наглядности.
Пример серверной команды дополнительной обработки
Для вида ДополнительнаяОбработка с серверной командой:
// Точка входа для серверных команд дополнительной обработки.
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
Если ИдентификаторКоманды = "ЗакрытьСтарыеЗаказы" Тогда
ЗакрытьСтарыеЗаказы();
Иначе
ВызватьИсключение СтрШаблон("Неизвестная команда: %1", ИдентификаторКоманды);
КонецЕсли;
КонецПроцедурыТакую команду можно поставить в расписание в карточке справочника — и получить регламентное задание без доработки конфигурации.
Подключение к базе
- Откройте справочник «Дополнительные отчеты и обработки» (обычно раздел «Администрирование» → «Печатные формы, отчеты и обработки»).
- Нажмите «Добавить из файла» и выберите
.epfили.erf. - БСП вызовет
СведенияОВнешнейОбработке()и заполнит карточку: вид, назначение, команды. - Проверьте публикацию, разделы и, для назначаемых видов, список объектов.
- Запишите элемент. Команда появится в соответствующем меню.
При выпуске новой версии файла обновляйте элемент кнопкой загрузки файла в той же карточке, а не создавайте новый: иначе у пользователей окажутся две одинаковые команды.
Отладка дополнительных обработок
Обработка, запущенная из справочника, подключается из временного хранилища, и точки останова, поставленные в открытом в конфигураторе файле, могут не срабатывать. Рабочие способы:
- Открыть файл напрямую. «Файл → Открыть» в клиенте, запущенном из конфигуратора в режиме отладки, и вызвать нужный экспортный метод из формы-обёртки. Логика печати и обработки при этом та же.
- Вынести логику в отдельный метод с явными параметрами (ссылка, массив ссылок) и отлаживать его, а
ПечатьиВыполнитьКомандуоставить тонкими. - Остановка по ошибке. Временно добавить
ВызватьИсключениев нужном месте и включить в отладчике «Останавливаться по ошибке». - Небезопасный режим. Для части сценариев помогает временно выставить
БезопасныйРежим = Ложь, перерегистрировать обработку, открыть тот же файл через «Файл → Открыть», закрыть и запустить команду из справочника. - Режим публикации «Режим отладки», чтобы не показывать сырую версию всем пользователям.
Самая частая причина «изменения не работают» — забыли перезагрузить файл в справочник.
Типичные ошибки
- Нет
ЭкспортуСведенияОВнешнейОбработке,ПечатьилиВыполнитьКоманду— регистрация не пройдёт или команда не выполнится. - Неверное назначение. Опечатка в
"Документ.РеализацияТоваровУслуг"— кнопка не появится. - Пересоздание
КоллекцияПечатныхФормвнутриПечать— БСП не увидит результат. - Небезопасные операции в безопасном режиме: работа с файлами, COM, привилегированный режим без разрешений.
- Отсутствие основной формы при типе
ВызовКлиентскогоМетодаилиОткрытиеФормы.
Дополнительная обработка хороша, пока остаётся тонкой надстройкой. Если она начинает менять поведение форм и проводок — это уже задача для расширения.
Внешние печатные формы и бланки делаю в рамках услуги печатные формы 1С. Если доработка выходит за рамки команд и меню, переношу её в расширение конфигурации.
Итог
- Подсистема БСП подключает
.epfи.erfк типовой конфигурации без снятия с поддержки. - Обязательна экспортная
СведенияОВнешнейОбработке(); заготовку структуры даётДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(). - Вид и тип команды определяют, где появится кнопка и какой метод вызовется:
Печать,ВыполнитьКомандуили форма. - Печатная форма выводится через
УправлениеПечатью.НужноПечататьМакетиВывестиТабличныйДокументВКоллекцию. - Отлаживать удобнее через «Файл → Открыть» и тонкие точки входа.




