Разработка внешних отчетов остается одной из самых востребованных задач при сопровождении конфигураций 1С:Предприятие. Часто пользователям необходимы специфические аналитические выборки, которые не предусмотрены в типовой поставке или требуют уникальной логики обработки данных. В отличие от отчетов, встроенных непосредственно в конфигурацию, внешние отчеты позволяют гибко масштабировать функционал без изменения основной структуры базы данных.
Переход на архитектуру управляемых форм (УФ) кардинально изменил подход к проектированию интерфейса подобных модулей. Теперь разработчик должен не только написать запрос к базе данных, но и корректно сформировать макет, настроить командный интерфейс и обеспечить кроссплатформенную совместимость. В этой статье мы детально разберем процесс создания внешнего отчета с нуля, уделяя внимание особенностям работы в режиме управляемого приложения.
Подготовка структуры внешнего отчета
Процесс создания начинается с инициализации нового объекта метаданных. В конфигураторе необходимо выбрать ветку «Внешние отчеты» и создать новый элемент. На вкладке «Основные» ключевым параметром является выбор варианта использования. Для работы в современных версиях платформы 1С:Предприятие критически важно установить флажок «Для всех вариантов совместимости» или явно указать «Управляемое приложение». Игнорирование этого шага приведет к тому, что отчет просто не запустится в тонком клиенте.
Следующим этапом является определение состава макетов. Именно здесь закладывается визуальная часть будущего документа. В дереве метаданных отчета появляется папка «Макеты», куда необходимо добавить новый элемент типа «Схема компоновки данных» (СКД). Это стандарт де-факто для аналитических выборок в 1С. Если ваш отчет требует сложной табличной верстки, не связанной с динамическими данными, можно также использовать макеты типа «Обычная область», но для аналитики СКД предпочтительнее.
⚠️ Внимание: При создании внешнего отчета убедитесь, что свойство «Использовать» установлено в значение «Отчет». Если случайно выбрать «Обработка», система не позволит подключить отчет к командному интерфейсу стандартным способом, и вам придется переделывать объект.
Настройка свойств макета СКД включает в себя определение набора данных и полей вывода. На этом этапе вы еще не пишете сложный код, а лишь описываете, какие колонки будут присутствовать в результате. Платформа автоматически сгенерирует форму отчета на основе описанной схемы, что значительно ускоряет процесс разработки первичного прототипа.
Написание запроса и настройка СКД
Сердцем любого отчета является запрос. В редакторе схемы компоновки данных необходимо перейти на вкладку «Наборы данных» и создать новый набор. В поле «Запрос» вводится текст обращения к базе данных. Однако синтаксис должен быть строго соблюден, иначе макет не сможет сформировать структуру результата.
После ввода текста запроса следует нажать кнопку «Автоматическое заполнение полей». Система проанализирует запрос и создаст соответствующие поля в наборе данных. Далее на вкладке «Ресурсы» можно настроить параметры, которые пользователь будет вводить перед формированием отчета. Например, период отчета, конкретный склад или контрагента. Эти параметры автоматически станут элементами формы ввода.
ВЫБРАТЬ
Номенклатура.Ссылка КАК Номенклатура,
СУММА(ОстаткиТоваров.Количество) КАК Количество
ИЗ
РегистрНакопления.ОстаткиТоваров КАК ОстаткиТоваров
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
ПО ОстаткиТоваров.Номенклатура = Номенклатура.Ссылка
ГДЕ
ОстаткиТоваров.Период МЕЖДУ &НачалоПериода И &КонецПериода
Особое внимание стоит уделить типам данных параметров. Если в запросе используется параметр &НачалоПериода, в свойствах ресурса необходимо явно указать тип «Дата». Несоответствие типов приведет к ошибке выполнения запроса при попытке пользователя сформировать отчет. Для сложных случаев, когда логика выборки зависит от нескольких условий, целесообразно использовать виртуальные таблицы или временные наборы данных внутри СКД.
Оптимизация сложных запросов
Если ваш отчет работает медленно на больших объемах данных, попробуйте использовать индексацию по полям, участвующим в отборе. Также проверьте план выполнения запроса через консоль запросов, чтобы убедиться, что оптимизатор 1С выбирает правильные пути доступа к таблицам.
Программная логика в модуле объекта
Хотя схема компоновки данных берет на себя большую часть работы по формированию результата, часто требуется вмешательство программиста. Модуль объекта внешнего отчета содержит события, позволяющие динамически менять поведение системы. Наиболее востребованным событием является ПриКомпоновкеРезультата. Оно срабатывает непосредственно перед тем, как данные будут выведены пользователю.
В этом событии вы можете программно отключать определенные поля, менять заголовки колонок или устанавливать отборы, которые не были предусмотрены в интерфейсе. Например, если пользователь не имеет права видеть закупочные цены, вы можете скрыть соответствующее поле макета прямо в коде. Для этого используется объект КомпоновщикНастроек, который предоставляет полный доступ к структуре отчета.
- 📊 Динамическое скрытие полей: Позволяет адаптировать отчет под права доступа конкретного пользователя без создания копий макета.
- 🔄 Изменение параметров: Можно программно подставлять значения параметров, если они не были введены пользователем, беря их из настроек системы.
- 🎨 Условное оформление: Хотя это чаще делается в СКД, в модуле можно задать сложные правила выделения цветом строк с отрицательными значениями.
Также в модуле объекта часто реализуется событие ПриСозданииНаСервере. Здесь инициализируются значения по умолчанию для параметров отчета. Это улучшает пользовательский опыт, так как при открытии формы отчет уже готов к работе с предустановленными значениями, например, текущим месяцем или основным складом организации.
Используйте объект «ПараметрыКомпоновкиДанных» для точечного изменения настроек. Например, код «КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить()» позволяет добавить новый фильтр программно, что полезно для реализации сложной бизнес-логики.
Особенности работы с формой отчета
В архитектуре управляемых форм внешний отчет имеет собственную форму, отличную от формы обычной обработки. По умолчанию платформа создает форму с командной панелью и местом для вывода настроек компоновки. Однако разработчик может расширить эту форму, добавив собственные элементы управления. Это делается через конфигуратор в разделе «Формы» объекта отчета.
Часто возникает необходимость добавить кнопку «Выгрузить в Excel» или переключатель вида отчета (детальный/сводный). Для этого в форму добавляется новая команда, а в модуле формы прописывается обработчик события ПриНажатии. Клиентский код может только инициировать эти действия или работать с интерфейсом.
| Элемент формы | Тип размещения | Назначение |
|---|---|---|
| Поле ввода периода | Группа «Параметры» | Задание временного диапазона для выборки |
| Табличное поле | Основная область | Отображение результатов СКД (автоматически) |
| Кнопка «Печать» | Командная панель | Вызов печатной формы или сохранения в файл |
| Флажок «Показывать нули» | Группа «Настройки» | Управление видимостью строк с нулевыми остатками |
При работе с формой следует учитывать ограничения тонкого клиента. Некоторые элементы управления, доступные в обычной форме, могут вести себя иначе или требовать дополнительной настройки свойств видимости. Например, использование поля «Поле текстового документа» требует подключения соответствующей библиотеки или использования стандартных механизмов вывода.
Отладка и тестирование внешнего отчета
Процесс отладки внешних отчетов имеет свою специфику. Поскольку отчет является внешним файлом (.erf), его нельзя просто запустить на выполнение клавишей F5 из конфигуратора, как обычную обработку. Необходимо использовать режим «1С:Предприятие» с ключом запуска или загружать отчет непосредственно из интерфейса пользователя. Наиболее удобный способ — использование команды «Загрузить внешний отчет» в режиме предприятия.
Для пошаговой отладки кода модуля объекта необходимо запустить отладчик в конфигураторе, выбрать режим «Отладка внешнего отчета» и указать путь к файлу. После этого при запуске отчета из режима предприятия система остановится на точках останова. Это позволяет отслеживать значения переменных, проверять логику формирования параметров и анализировать ошибки выполнения запросов.
⚠️ Внимание: При отладке запросов помните, что в режиме отладчика контекст выполнения может отличаться от боевого. Убедитесь, что у пользователя, под которым вы тестируете, есть права на чтение всех таблиц, участвующих в запросе. Ошибка «Права доступа» — одна из самых частых причин падения отчетов в продуктивной среде.
Также стоит протестировать отчет на разных версиях платформы и в разных режимах совместимости. Поведение некоторых функций, особенно связанных с датой и временем или округлением чисел, может незначительно отличаться. Проверка на «толстом» и «тонком» клиенте обязательна, даже если вы разрабатываете только для управляемого приложения, так как некоторые механизмы могут по-разному инициализироваться.
Деплой и обновление отчетов в организации
После успешного тестирования отчет готов к внедрению. Существует несколько способов доставки внешних отчетов пользователям. Самый простой — ручная загрузка через интерфейс «Администрирование» -> «Печатные формы, отчеты и обработки». Однако для крупных предприятий с сотнями рабочих мест этот метод неэффективен. В таких случаях используется механизм автозагрузки из общей папки или через обработку обновления конфигурации.
При обновлении версии отчета важно учитывать механизм версионирования. Если вы замените файл отчета с тем же именем, пользователи получат новую версию при следующем запуске. Однако, если изменилась структура параметров (СКД), у пользователей могут сохраниться старые настройки, которые вызовут ошибки. Рекомендуется очищать сохраненные настройки варианта отчета при существенных изменениях структуры.
☑️ Чек-лист перед выгрузкой в продакшн
Для автоматизации процесса можно написать небольшую обработку-загрузчик, которая будет помещаться в каталог Support конфигурации. При обновлении конфигурации эта обработка автоматически зарегистрирует внешний отчет в базе данных, присвоит ему необходимые права и добавит в меню пользователей. Это избавляет администраторов от рутинной работы по ручной установке отчетов на каждом компьютере.
Автоматическая регистрация отчета через обработку обновления — наиболее надежный способ гарантировать, что все пользователи получат актуальную версию инструмента без ручного вмешательства администратора.
Часто задаваемые вопросы (FAQ)
Можно ли использовать внешние отчеты в веб-клиенте 1С?
Да, внешние отчеты, созданные на управляемых формах, полностью поддерживают работу в веб-клиенте. Однако следует избегать использования объектов, недоступных в браузере, таких как работа с файловой системой клиента напрямую без специальных механизмов загрузки/выгрузки.
Как защитить внешний отчет от несанкционированного копирования?
Полностью защитить внешний отчет сложно, так как это файл. Однако вы можете включить опцию «Защищенный режим» при сохранении, что затруднит прямое редактирование макетов в конфигураторе без знания пароля. Также логику можно вынести в общие модули основной конфигурации, к которым у отчета будет доступ, но которые нельзя скопировать отдельно.
Почему отчет работает медленно на больших данных?
Чаще всего проблема кроется в отсутствии индексов по полям отбора или неоптимальном тексте запроса. Проверьте, не выбираете ли вы лишние поля, и используйте временные таблицы для промежуточных вычислений, если объем данных превышает десятки тысяч строк.
Можно ли передать параметры во внешний отчет из другой обработки?
Да, это возможно. При вызове внешнего отчета программно через объект ВнешняяОбработка.Создать (или аналогичный для отчета), вы можете заполнить свойства параметров перед вызовом метода Сформировать или открыть форму с предустановленными значениями.