Создание собственных отчетов в среде 1С:Предприятие является одной из ключевых задач для разработчика, позволяющей гибко адаптировать учет под специфические потребности бизнеса. В отличие от типовых обработок, кастомный отчет дает возможность выбирать именно те метрики, которые важны для конкретного руководителя или отдела продаж. Работа ведется непосредственно в режиме Конфигуратор, где проектируются объекты метаданных и пишется программный код на встроенном языке платформы.
Процесс разработки отчета по продажам требует глубокого понимания структуры базы данных, особенно таблиц документов реализации и справочников номенклатуры и контрагентов. Современные версии платформы, такие как 1С:Предприятие 8.3, предлагают мощный механизм Системы Компоновки Данных (СКД), который существенно упрощает процесс создания аналитических форм. Однако, для сложных расчетов или нестандартных выборок часто требуется написание запросов вручную, что дает полный контроль над логикой получения информации.
В данной статье мы детально разберем процесс создания нового отчета, начиная с добавления объекта метаданных и заканчивая настройкой полей вывода и отбора. Вы научитесь правильно формировать запросы к регистрам накопления и документальным таблицам, а также настраивать пользовательские настройки для удобства эксплуатации готового решения в режиме 1С:Предприятие.
Подготовка объекта метаданных и структуры отчета
Первым шагом в разработке является создание нового объекта в дереве конфигурации. Для этого необходимо раскрыть ветку Отчеты и добавить новый элемент, назвав его, например, ОтчетПоПродажамРасширенный. В свойствах объекта важно установить флажок «Макет по умолчанию», если вы планируете использовать табличный документ, или оставить настройки по умолчанию для СКД, что является предпочтительным вариантом для аналитических задач.
После создания объекта следует перейти к редактированию его модуля. В модуле объекта отчета обычно размещается код процедуры Сформировать, которая вызывается при нажатии кнопки формирования пользователем. Именно здесь располагается основная логика работы, включая получение параметров от пользователя и выполнение запроса к базе данных.
⚠️ Внимание: При создании отчета в типовой конфигурации (например, УТ 11 или ERP) избегайте прямого изменения объектов, помеченных как «неизменяемые». Используйте механизм расширений (Extensions), чтобы обновления платформы не затерли ваши доработки.
Структура отчета должна быть продумана заранее: какие поля будут в шапке, какие в табличной части, а какие послужат группировками. Это напрямую влияет на сложность последующего запроса и производительность формирования результата.
Формирование запроса к данным о продажах
Сердцем любого отчета является запрос, который извлекает информацию из таблиц базы данных. Для анализа продаж основными источниками данных служат документы РеализацияТоваровУслуг и регистры накопления, такие как Продажи или Взаиморасчеты. Использование регистров предпочтительнее, так как они уже агрегируют данные и работают быстрее, чем прямой обход документов.
При написании текста запроса необходимо использовать конструктор или ручной режим ввода в редакторе модуля. Важно правильно указать псевдонимы для таблиц и полей, чтобы код был читаемым. Пример простого запроса может выглядеть следующим образом:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Документ,
РеализацияТоваровУслуг.Дата КАК ДатаДокумента,
РеализацияТоваровУслуг.Контрагент КАК Клиент,
СУММА(РеализацияТоваровУслугТовары.Сумма) КАК СуммаПродажи
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ПО РеализацияТоваровУслуг.Ссылка = РеализацияТоваровУслугТовары.Ссылка
ГДЕ
РеализацияТоваровУслуг.Проведен = ИСТИНА
И РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.Дата,
РеализацияТоваровУслуг.Контрагент
В данном примере используются параметры &НачалоПериода и &КонецПериода, которые будут запрашиваться у пользователя при запуске отчета. Это стандартная практика для временных выборок.
Особое внимание следует уделить типу соединения таблиц. ЛЕВОЕ СОЕДИНЕНИЕ гарантирует, что даже если в документе нет товарных строк (что редкость, но возможно при ошибках ввода), сам документ попадет в выборку. Для финансовых показателей чаще используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ, чтобы исключить пустые записи.
Используйте временные таблицы в запросе, если требуется сложная многоступенчатая обработка данных перед выводом. Это упрощает отладку и позволяет разбить логику на понятные этапы.
Настройка схемы компоновки данных (СКД)
После того как запрос готов, необходимо связать его с макетом отчета через СКД. В конфигураторе открывается макет по умолчанию, где на вкладке «Настройки» определяется структура вывода. Здесь создается новый набор данных, в который вставляется текст ранее написанного запроса.
На этапе настройки полей необходимо сопоставить поля запроса с полями вывода. Для каждого поля можно задать заголовок, видимый пользователю, тип данных и формат. Например, поле СуммаПродажи следует отформатировать как Число(15, 2), чтобы отображать копейки, а дату привести к формату ДД.ММ.ГГГГ.
СКД позволяет гибко управлять группировками. Вы можете настроить иерархию: сначала группировка по Контрагентам, затем по Документам, и в деталях — по Номенклатуре. Это достигается перетаскиванием полей в область «Группировки» в конструкторе настроек.
| Элемент настройки | Описание | Пример значения |
|---|---|---|
| Поле | Имя поля из запроса | Клиент, СуммаПродажи |
| Заголовок | Текст, видимый в шапке таблицы | Покупатель, Итого к оплате |
| Горизонтальное размещение | Порядок колонок в отчете | 1, 2, 3.. |
| Видимость | Отображать ли поле по умолчанию | Да / Нет |
Это позволяет передавать отчеты между базами без потери логики отображения.
☑️ Проверка настроек СКД
Реализация пользовательских параметров и отборов
Для того чтобы отчет был интерактивным, необходимо реализовать панель параметров. В модуле формы отчета или в настройках СКД описываются параметры, такие как Период, Организация или Менеджер. Эти параметры передаются в текст запроса как значения полей.
В коде модуля объекта часто используется процедура ПриСозданииНаСервере, где можно задать значения параметров по умолчанию. Например, установить период с начала текущего месяца по текущую дату. Это улучшает пользовательский опыт, избавляя от необходимости каждый раз вводить даты вручную.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Параметры.Период.Начало = НачалоМесяца(ТекущаяДата());
Параметры.Период.Конец = КонецДня(ТекущаяДата());
КонецПроцедуры
Также можно реализовать динамические отборы. Например, если пользователь выбирает конкретную организацию в параметрах, то в запросе автоматически подставляется условие фильтрации по этому юридическому лицу. Это достигается через механизм Виртуальных таблиц или явные условия в тексте запроса.
⚠️ Внимание: Никогда не подставляйте значения параметров в текст запроса через конкатенацию строк (склеивание). Это создает уязвимость для SQL-инъекций. Используйте только параметры запроса (символ
&).
Гибкость настройки отборов позволяет одному отчету закрывать множество сценариев использования: от ежедневной сводки менеджера до месячного анализа для директора.
Оптимизация производительности и работа с большими объемами
При работе с большими базами данных, где количество документов реализации исчисляется миллионами, скорость формирования отчета становится критическим фактором. Основная нагрузка ложится на СУБД, поэтому оптимизация запроса является приоритетной задачей разработчика.
Первое правило оптимизации — использование индексов. Поля, по которым происходит отбор (Дата, Контрагент, Организация) и соединение таблиц, должны быть индексированы. В 1С индексы создаются автоматически для основных реквизитов, но для регистров накопления стоит проверить настройки в конфигураторе.
- 🚀 Используйте только необходимые поля в выборке
ВЫБРАТЬ, избегая конструкцииВЫБРАТЬ *. - 🗄️ Применяйте виртуальные таблицы регистров накопления с указанием параметров среза (
СрезПоследних,СрезПервых). - ⚡ Избегайте функций в условиях
ГДЕ, применяемых к полям таблиц, так как это отключает использование индексов.
Еще одним способом ускорения является ограничение объема выборки на уровне сервера 1С. Если отчет формируется в табличный документ, можно настроить paginations (постраничный вывод) или выгружать данные в файл, если строк слишком много.
Почему отчет работает медленно?
Частая причина медленной работы — отсутствие индексов по полям отбора или использование функций над полями в условии WHERE. Также проверьте, не блокируется ли выборка транзакциями других пользователей.
Регулярный анализ плана выполнения запроса через консоль запросов или ADP (Admin Performance) помогает выявить узкие места. Иногда простая перестановка таблиц в соединении может дать кратный прирост скорости.
Вывод результатов и экспорт данных
Финальным этапом является представление данных пользователю. В режиме предприятия отчет открывается в окне с табличным документом. Пользователь может сортировать колонки, скрывать ненужные группировки и применять дополнительные отборы прямо в интерфейсе благодаря возможностям СКД.
Важной функцией является экспорт данных. 1С позволяет выгружать сформированный отчет в различные форматы: Microsoft Excel, PDF, MXL или HTML. Для этого в интерфейсе отчета предусмотрены соответствующие кнопки. Программно это можно реализовать через методы объекта ТабличныйДокумент.
Для печати часто используется специальный макет печати, который отличается от основного макета отчета. В нем настраиваются колонтитулы, разрывы страниц и шрифты, чтобы бумажная версия выглядела презентабельно и соответствовала стандартам документооборота компании.
⚠️ Внимание: При экспорте в Excel сложные группировки СКД могут преобразовываться некорректно. Всегда проверяйте выгруженный файл, особенно формулы и объединенные ячейки, перед отправкой контрагентам.
Возможность сохранения вариантов настроенного отчета позволяет пользователям создавать свои персональные дашборды. Например, менеджер может сохранить настройку «Мои продажи за неделю» и открывать её одним кликом.
Качественный отчет в 1С — это баланс между гибкостью настроек для пользователя и жесткой оптимизацией запросов для быстродействия системы.
Как добавить вычисляемое поле в отчет без изменения запроса?
В настройках СКД можно добавить вычисляемое поле, используя язык выражений 1С. Например, чтобы рассчитать НДС от суммы, создайте поле с выражением СуммаПродажи * 0.2. Это поле будет рассчитываться клиентом или сервером после получения основных данных.
Можно ли использовать один отчет для разных видов документов?
Да, это реализуется через параметр отчета, который фильтрует документы по виду операции или через объединение запросов (ОБЪЕДИНИТЬ ВСЕ), если структуры таблиц документов схожи.
Где хранятся настройки сохраненных вариантов отчета?
Настройки вариантов отчета хранятся в информационной базе в специальном регистре сведений или в таблице версионирования, в зависимости от версии платформы и конфигурации. Они привязаны к конкретному пользователю.
Как скрыть служебные поля от пользователя в СКД?
В настройках полей СКД установите флаг «Видимость» в значение Ложь. Такое поле будет участвовать в группировках или вычислениях, но не отобразится в печатной форме или таблице на экране.
Что делать, если отчет не формируется из-за прав доступа?
Проверьте права доступа пользователя к используемым таблицам и регистрам. Возможно, потребуется добавить роль, разрешающую чтение документов реализации, в профиль доступа пользователя.