Что легче и эффективнее разработать для конфигурации 1С: внешний отчет или отчет в расширении?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке дополнительного функционала для типовых конфигураций 1С (таких как БП 3.0, УТ 11, ERP) перед программистом часто встает дилемма: использовать механизм дополнительных отчетов и обработок (внешние файлы .erf / .epf) или реализовать задачу через расширение конфигурации. В этой статье мы подробно проанализируем оба подхода, разберем их сильные и слабые стороны, а также выясним, в каких ситуациях тот или иной метод будет объективно легче и правильнее.

Механизм внешних отчетов и печатных форм (БСП)

Внешние отчеты — это классический способ расширения функционала без изменения самой информационной базы. Они подключаются через справочник Дополнительные отчеты и обработки, который входит в состав Библиотеки стандартных подсистем (БСП). Рассмотрим особенности этого метода.

Основное преимущество внешнего отчета заключается в его автономности. Вы создаете файл, который можно передать клиенту или загрузить в базу без необходимости выгонять пользователей из системы (хотя расширения в современных версиях 8.3 также позволяют это делать, но с нюансами). Если вам нужно создать тиражируемое решение, например, для продажи на специализированных площадках, таких как Инфостарт, то внешний отчет — ваш единственный выбор.

Однако при разработке внешнего отчета программисты часто сталкиваются с трудностями отладки. Разберем типичную ситуацию: чтобы проверить изменения в коде внешней печатной формы, подключенной через БСП, вам часто приходится выполнять следующий цикл действий:

  1. Внести изменения в модуле объекта внешнего отчета.
  2. Сохранить файл .erf на диске.
  3. Зайти в справочник "Дополнительные отчеты и обработки".
  4. Найти нужную запись и обновить файл из папки.
  5. Записать элемент справочника.
  6. Открыть документ и нажать кнопку печати.

Для упрощения этой задачи опытные разработчики используют специальные "отладчики внешних печатных форм", которые имитируют вызов формы со стороны БСП, передавая необходимые параметры в процедуру Печать. Рассмотрим пример кода, который обычно требуется для регистрации внешней печатной формы в системе:


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

Преимущества и легкость разработки в расширении

Многие современные разработчики склоняются к использованию расширений, так как это субъективно быстрее и удобнее. Рассмотрим подробнее, почему расширение может оказаться «легче» в реализации.

Во-первых, это полноценная отладка. Отчет в расширении является частью дерева метаданных (хоть и во вторичном потоке). Вы можете ставить точки останова в любом месте кода, использовать замер производительности и видеть изменения сразу после нажатия кнопки "Обновить конфигурацию базы данных" (F7). Нет необходимости в постоянной перезаписи файлов в справочниках.

Во-вторых, доступ к данным. В расширении вы можете добавлять собственные реквизиты к документам. Если вашему отчету нужны данные, которых нет в типовой конфигурации, вы просто добавляете их в расширение, и они становятся доступны в запросах СКД (Схемы компоновки данных) точно так же, как и родные поля. Внешний отчет ограничен только теми данными, которые уже есть в базе, либо ему приходится хранить информацию в сторонних местах (например, в дополнительных сведениях).

В-третьих, интеграция в интерфейс. Если вам нужно добавить кнопку отчета не просто в стандартное меню "Отчеты", а в конкретное место на форме документа рядом с кнопкой "Провести", расширение позволяет сделать это за пару минут через механизм перехвата формы (&НаСервере, &НаКлиенте). Посмотрим на пример добавления команды в форму через расширение:


&ИзменениеИКонтроль("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Добавляем новую команду формы программно
    МояКоманда = ЭтаФорма.Команды.Добавить("Расш1_ОткрытьСпециальныйОтчет");
    МояКоманда.Действие = "Расш1_ОткрытьСпециальныйОтчет";
    МояКоманда.Заголовок = "Спец. отчет";
    
    // Размещаем кнопку на командной панели
    НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Расш1_КнопкаОтчета", Тип("КнопкаФормы"), ЭтаФорма.Элементы.КоманднаяПанельФормы);
    НовыйЭлемент.ИмяКоманды = "Расш1_ОткрытьСпециальныйОтчет";
КонецПроцедуры

Сравнение безопасности и режимов работы

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

Если вашему отчету требуются такие действия, администратору придется вручную снимать галочку "Безопасный режим" в настройках дополнительной обработки. В расширениях работа с безопасным режимом также присутствует, но она более гибкая и прозрачная для разработчика на этапе проектирования прав доступа.

Когда стоит выбрать внешний отчет?

Несмотря на удобство расширений, внешние отчеты незаменимы в следующих случаях:

  1. Тиражирование решения: Если вы планируете распространять отчет среди разных клиентов с разными версиями конфигураций. Внешний файл .erf более универсален.
  2. Быстрые правки "на лету": Когда нужно оперативно изменить печатную форму в рабочей базе, не обновляя конфигурацию (даже если это расширение).
  3. Легкость удаления: Чтобы "удалить" функционал внешнего отчета, достаточно пометить на удаление одну запись в справочнике. Удаление расширения — более ответственный шаг, особенно если в нем были созданы новые реквизиты (данные в этих реквизитах будут безвозвратно утеряны при удалении расширения).

Обновление конфигурации: как ведут себя отчеты и расширения?

Выясним, что происходит при обновлении типовой конфигурации от 1С. Внешние отчеты могут перестать работать, если фирма 1С изменит структуру экспортных процедур в общих модулях (например, в УправлениеПечатью или ДополнительныеОтчетыИОбработки). Однако вы узнаете об этом только в момент запуска отчета пользователем.

Расширения же имеют встроенный механизм проверки применимости. При обновлении основной конфигурации система сразу выдаст предупреждение, если методы, на которые опирается расширение, были изменены или удалены. Это позволяет программисту исправить проблему еще до того, как база будет передана пользователям. Это делает расширение более надежным инструментом в долгосрочной перспективе сопровождения.

Итоговые рекомендации

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

Рассмотрев оба варианта, мы видим, что "легкость" — понятие субъективное, зависящее от конкретных требований к задаче. Однако технологическое преимущество в плане скорости разработки и удобства отладки сегодня однозначно на стороне расширений.

← На главную