Разработка внешних отчетов в платформе 1С:Предприятие 8.3 является одной из самых востребованных задач для программистов и аналитиков. Часто возникает ситуация, когда стандартного функционала конфигурации недостаточно для получения специфических аналитических данных, либо требуется предоставить отчет пользователю, не имеющему прав на запуск основной базы данных. Внешний отчет представляет собой отдельный файл с расширением .erf (для отчетов) или .epf (для обработок), который выполняется в контексте текущей информационной базы.
Создание такого инструмента позволяет гибко настраивать выборки данных, использовать сложные алгоритмы обработки и формировать печатные формы без внесения изменений в основную конфигурацию. Это особенно актуально при работе с типовыми решениями, где прямое изменение кода запрещено или нежелательно. В этой статье мы детально разберем процесс создания отчета с нуля, подключение к внешним источникам данных и типичные ошибки, которых следует избегать.
Процесс разработки требует понимания архитектуры платформы, работы с запросами и навыков программирования на встроенном языке. Мы рассмотрим примеры кода, структуру модулей и настройки системы компоновки данных (СКД), которые станут фундаментом для ваших будущих проектов.
Подготовка окружения и создание файла отчета
Первым этапом является запуск конфигуратора. Вам необходимо создать новый файл внешней обработки. Для этого в меню конфигуратора выберите пункт Файл → Новый или воспользуйтесь комбинацией клавиш Ctrl+N. В открывшемся диалоговом окне критически важно правильно выбрать тип объекта. В списке типов метаданных найдите и выберите пункт Внешний отчет. Именно этот тип гарантирует, что файл будет корректно интерпретироваться системой как отчетная форма, а не как обработка или другой объект.
После выбора типа система предложит сохранить файл на диске. Рекомендуется использовать понятное имя файла, например, ОтчетПоПродажам.erf. Расширение .erf присваивается автоматически при сохранении. Важно отметить, что внешний отчет не регистрируется в дереве метаданных основной конфигурации. Он существует как автономный объект, который подключается к базе только в момент запуска пользователем через интерфейс 1С:Предприятие.
⚠️ Внимание: Если вы планируете использовать отчет в веб-клиенте или тонком клиенте, убедитесь, что при сохранении файла вы не используете устаревшие форматы. Файл должен быть сохранен в формате версии 8.3 и выше для корректной работы со всеми современными интерфейсами платформы.
После создания файла перед вами откроется окно редактирования объекта. Здесь вы увидите структуру, аналогичную обычному отчету в конфигурации: модуль объекта, модуль менеджера (если используется), макеты и формы. Для начала работы над логикой нам потребуется определить основные реквизиты, которые будут использоваться для ввода параметров отчета, таких как период, организация или конкретный контрагент.
☑️ Подготовка к созданию отчета
Настройка формы и параметров ввода данных
Интерфейс взаимодействия с пользователем настраивается через форму отчета. Откройте форму объекта и перейдите в режим редактирования. На форму необходимо вынести элементы управления, которые позволят пользователю задать критерии отбора. Стандартным подходом является использование полей ввода периода, полей выбора из справочников и переключателей вариантов отчета. Все эти элементы должны быть привязаны к реквизитам формы.
Для добавления реквизитов перейдите на вкладку Реквизиты в окне редактирования формы. Создайте новые реквизиты с типом Дата для периода, типом СправочникСсылка.Организации для выбора юрлица и типом Булево для различных флагов. Имена реквизитов должны быть лаконичными и понятными, например, ДатаНачала, ДатаОкончания, ВыбраннаяОрганизация. Эти имена будут использоваться в коде модуля для получения значений, введенных пользователем.
Визуальное оформление формы также играет роль в удобстве работы. Вы можете группировать элементы управления, используя группы с типом Обычная или Подчиненные элементы. Это позволяет логически разделить параметры ввода и кнопки управления. Не забудьте добавить команду Сформировать, которая будет запускать основную процедуру формирования отчета. Привяжите эту команду к соответствующей кнопке на форме.
Используйте предопределенные значения для полей периода, например, "НачалоТекущегоМесяца" и "КонецТекущегоМесяца", чтобы пользователю не приходилось вводить даты вручную при каждом запуске.
Разработка модуля объекта и логика формирования
Основная логика работы отчета размещается в модуле объекта. Перейдите в окно модуля объекта, нажав кнопку 1С или выбрав соответствующий пункт в меню. Здесь мы напишем процедуру, которая будет обрабатывать нажатие кнопки формирования. Ключевым моментом является получение данных из информационной базы с помощью объекта Запрос.
Текст запроса должен быть оптимизирован для выборки необходимых полей. Использование временных таблиц часто упрощает дальнейшую обработку данных. Ниже приведен пример структуры процедуры формирования, где данные загружаются в таблицу значений, которая затем передается в систему компоновки данных.
&НаКлиенте
Процедура Сформировать(Команда)
ПараметрыКомпоновки = Новый Структура;
ПараметрыКомпоновки.Вставить("НачалоПериода", Объект.ДатаНачала);
ПараметрыКомпоновки.Вставить("КонецПериода", Объект.ДатаОкончания);
Отчет = Новый ТабличныйДокумент;
Отчет.АвтоМасштаб = Истина;
// Здесь вызывается процедура формирования на сервере или в локальном режиме
Макет = ПолучитьМакет("Основной");
Область = Макет.ПолучитьОбласть("Шапка");
Отчет.Вывести(Область);
Отчет.Показать("Результат отчета");
КонецПроцедуры
Важно понимать разницу между выполнением кода на клиенте и на сервере. Если ваш внешний отчет обращается к данным базы, основная часть логики должна выполняться на сервере. Для этого используется директива &НаСервере. Однако, если отчет работает в файловом варианте или без подключения к серверу 1С, весь код может выполняться локально. В большинстве случаев внешние отчеты запускаются в контексте текущей базы, поэтому доступ к данным возможен напрямую.
⚠️ Внимание: При работе с большими объемами данных избегайте циклического перебора записей в коде. Старайтесь выполнять все фильтрации и группировки средствами языка запросов 1С, так как это значительно повышает производительность системы.
Работа со схемой компоновки данных (СКД)
Современная разработка в 1С 8.3 немыслима без использования Схемы компоновки данных. Этот механизм позволяет отделить логику получения данных от логики их отображения. Для настройки СКД в модуле объекта или в форме отчета необходимо создать объект КомпоновщикНастроек и загрузить в него схему, описывающую структуру отчета.
Схема компоновки данных может быть создана программно или загружена из внешнего файла .xml. Программный способ более гибкий, так как позволяет динамически изменять структуру отчета в зависимости от выбранных параметров. В схеме описываются наборы данных, поля, параметры и условия отбора. Пример создания простой схемы приведен ниже.
Процедура СформироватьСКД()
Компоновщик = Новый КомпоновщикНастроек;
Схема = Новый СхемаКомпоновкиДанных;
НаборДанных = Схема.НаборыДанных.Добавить();
НаборДанных.Имя = "ДанныеПродаж";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ..."; // Текст вашего запроса
НаборДанных.Запрос = Запрос;
Компоновщик.Инициализировать(Схема);
Настройки = Компоновщик.Настройки;
Результат = Компоновщик.СкомпоноватьРезультат(Настройки);
ТаблицаРезультата = Результат.ТабличныйДокумент;
ТаблицаРезультата.Показать();
КонецПроцедуры
Использование СКД дает пользователю возможность самостоятельно настраивать вид отчета: менять порядок колонок, добавлять итоговые строки, применять отборы и группировки без вмешательства программиста. Это делает внешний отчет универсальным инструментом аналитики. Не забывайте определять параметры схемы, чтобы связать их с реквизитами формы отчета.
Подключение к внешним источникам данных
Одной из уникальных возможностей внешних отчетов является способность подключаться к другим информационным базам или даже к сторонним СУБД. Это реализуется через объект ПодключениеКВнешнемуИсточникуДанных. Такая функциональность часто требуется для консолидации данных из нескольких филиалов или для выгрузки информации в формат, отличный от внутренней структуры 1С.
Для подключения необходимо знать строку соединения. Она содержит тип источника, путь к файлу базы или адрес сервера, имя базы и учетные данные. Строку соединения можно сформировать программно или запросить у пользователя через специальное диалоговое окно. После установления соединения вы можете выполнять запросы к внешней базе так же, как и к основной.
| Параметр подключения | Описание | Пример значения |
|---|---|---|
| Тип источника | Указывает тип подключаемой базы | File, MSSQLServer, PostgreSQL |
| Строка соединения | Полный путь или адрес сервера | File="C:\Bases\Base1"; |
| Пользователь | Имя пользователя внешней базы | Admin |
| Пароль | Пароль для доступа к данным | 123456 |
При работе с внешними источниками следует учитывать вопросы безопасности. Никогда не храните пароли в открытом виде в коде отчета. Лучше запрашивать их у пользователя в момент запуска или использовать механизмы безопасного хранения учетных данных, предоставляемые платформой. Также помните, что структура внешней базы может отличаться от вашей, поэтому запросы должны быть адаптированы под конкретную конфигурацию источника.
Особенности работы с SQL-запросами
При подключении к SQL-серверу напрямую (через ODBC) синтаксис запроса меняется на стандартный SQL, а не язык запросов 1С. Это требует знания специфики диалекта SQL используемой СУБД.
Вывод результатов и печать отчетов
Финальным этапом работы отчета является представление данных пользователю. Наиболее распространенным форматом является табличный документ, который позволяет просматривать данные, форматировать их и отправлять на печать. Объект ТабличныйДокумент предоставляет широкий спектр методов для управления выводом: объединение ячеек, настройка шрифтов, цветов и границ.
Для печати отчета используется метод Печать() объекта табличного документа. Перед этим можно настроить параметры печати, такие как ориентация страницы, поля и масштаб. Также предусмотрена возможность экспорта данных в популярные форматы, такие как Microsoft Excel, PDF или HTML. Это достигается вызовом соответствующих методов записи.
Если отчет формируется в виде сложного документа с графиками и диаграммами, стоит рассмотреть использование макетов. Макеты позволяют заранее подготовить шаблон оформления в редакторе табличного документа конфигуратора. В коде программы вы лишь заполняете области макета данными, что упрощает поддержку и изменение внешнего вида отчета в будущем.
⚠️ Внимание: При экспорте в Excel большие объемы данных могут привести к значительной задержке или ошибке переполнения памяти. Рекомендуется разбивать выгрузку на листы или использовать формат CSV для очень больших выборок.
Использование табличного документа является стандартом де-факто для вывода отчетности в 1С, обеспечивая максимальную совместимость с печатными устройствами и офисными пакетами.
Частые ошибки и оптимизация производительности
В процессе разработки внешних отчетов программисты часто сталкиваются с рядом типичных проблем. Одной из самых распространенных ошибок является некорректная работа с транзакциями. Если ваш отчет не только читает, но и записывает данные, необходимо явно управлять транзакциями, чтобы избежать блокировок и конфликтов. Однако, для чисто отчетных форм использование транзакций обычно не требуется и даже вредно для производительности.
Другая частая проблема — неэффективные запросы. Использование конструкций ВЫБРАТЬ * без необходимости загружает лишние данные в память. Всегда указывайте конкретный список полей, которые действительно нужны для отчета. Также следует избегать вложенных циклов по выборкам данных. Если требуется сопоставить данные из двух разных выборок, лучше использовать соединения в самом запросе или временные таблицы.
Особое внимание уделите обработке исключительных ситуаций. Внешний отчет работает в среде пользователя, и любой необработанный сбой приведет к аварийному завершению работы. Используйте конструкцию Попытка...Исключение для перехвата ошибок и вывода понятных сообщений пользователю. Это повысит надежность вашего решения и упростит диагностику проблем.
Для отладки сложных запросов используйте встроенный консоль запросов. Она позволяет быстро тестировать текст запроса и видеть результат без необходимости компиляции всего отчета.
Можно ли использовать внешний отчет в веб-клиенте 1С?
Да, внешние отчеты поддерживаются в веб-клиенте, однако существуют ограничения. Отчет не должен использовать объекты, недоступные в веб-режиме, например, некоторые методы работы с файловой системой клиента или COM-объекты. Также необходимо убедиться, что все используемые в отчете метаданные доступны в веб-клиенте.
Как передать параметры из основного окна 1С во внешний отчет?
Параметры можно передать через структуру при вызове метода Выполнить() внешней обработки. В коде вызывающей программы создается структура с именами параметров и их значениями, которая передается вторым аргументом метода выполнения.
В чем разница между внешним отчетом и внешней обработкой?
Технически они очень похожи, но имеют разное назначение. Внешний отчет (.erf) ориентирован на получение и отображение данных (чтение), тогда как внешняя обработка (.epf) предназначена для изменения данных, проведения документов и выполнения сервисных функций (запись). Интерфейс запуска у них также может отличаться.
Нужно ли компилировать внешний отчет перед использованием?
Нет, внешние отчеты в 1С 8.3 являются интерпретируемыми объектами. Они не требуют предварительной компиляции в машинный код. Однако файл должен быть сохранен в актуальном формате версии платформы, чтобы движок 1С мог корректно прочитать его структуру.