К статье
Практический материал

Отчеты и Аналитика · 12 мин

Как сделать отчет в 1С 7.7: пошаговое руководство

Как создать отчет в 1С 7.7: конструктор отчетов, запросы, форма и модуль, печатная форма. Практическая инструкция с примерами кода и типичными ошибками.

Отчеты в 1С 7.7 создаются в конфигураторе и представляют собой объект метаданных с собственной формой, модулем на встроенном языке и табличным макетом для вывода результата. В отличие от современных версий платформы, здесь нет системы компоновки данных: весь алгоритм выборки и вывода описывается программно, что требует понимания структуры объектов и синтаксиса встроенного языка.

Перед началом работы определите, какие данные должен показывать отчет: обороты по счетам бухгалтерского учета, движения регистров, списки документов или справочников. От этого зависит выбор механизма выборки — объект «Запрос», прямой перебор документов или работа с итогами бухгалтерского учета через объект «БухгалтерскиеИтоги».

Ниже разобран полный цикл: от создания пустого объекта до работающего отчета с параметрами, группировками и печатной формой. Примеры приведены для типовых конфигураций «Бухгалтерский учет» и «Торговля и склад», но подход универсален.

Создание объекта «Отчет» в конфигураторе

Откройте конфигуратор (ярлык «1С:Предприятие — Конфигуратор» или запуск с ключом конфигуратора), загрузите конфигурацию и откройте дерево метаданных через меню «Конфигурация — Открыть конфигурацию». В ветке «Документы, Журналы, Справочники» найдите узел «Отчеты», вызовите контекстное меню и выберите «Новый отчет».

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

После завершения работы конструктора в дереве метаданных появится новый объект с тремя составляющими: форма (диалог с настройками), модуль формы (код на встроенном языке) и макет (табличный документ с секциями). Именно связку «модуль + макет» вы будете программировать дальше.

Настройка формы отчета и реквизитов-параметров

Форма отчета — это диалог, в котором пользователь задает период и отборы. Откройте форму двойным щелчком по строке «Форма» в структуре объекта. На диалог добавляются элементы: поля ввода для дат, списки выбора, флажки и кнопки.

Типовой набор реквизитов для большинства отчетов: ДатаНач и ДатаКон (тип «Дата»), реквизиты типа «Справочник» для отбора по контрагенту, складу или сотруднику, а также флажок детализации. Каждый реквизит добавляется через меню «Вставить — Реквизит диалога» с указанием типа значения.

Обязательно добавьте на форму кнопку «Сформировать» с формулой вызова одноименной процедуры. Возле нее полезно разместить кнопку «Закрыть» и, при необходимости, кнопку сохранения настроек. Проверьте, что реквизиты формы доступны в модуле — они обращаются напрямую по имени без префиксов.

Порядок создания формы
  1. 1
    Откройте форму отчета в конфигураторе
  2. 2
    Добавьте реквизиты ДатаНач и ДатаКон типа «Дата»
  3. 3
    Добавьте реквизиты отбора (склад, контрагент) нужного типа
  4. 4
    Разместите кнопку «Сформировать» с вызовом процедуры Сформировать()
  5. 5
    Сохраните форму и проверьте ее открытие в режиме предприятия

Выбор способа получения данных

В 1С 7.7 есть три основных способа выбрать данные для отчета, и выбор зависит от источника. Для регистров и документов чаще всего используют объект «Запрос» — он работает быстро и поддерживает группировки. Для бухгалтерских итогов применяют объект «БухгалтерскиеИтоги» с методами выборки по счетам и субконто. Прямой перебор через ВыбратьДокументы() или ВыбратьЭлементы() подходит для простых списков, но медленнее запроса на больших объемах.

Запрос описывается текстом на специальном языке, похожем на упрощенный SQL. В тексте указываются переменные-источники, условия (секция «|Условие»), группировки («|Группировка») и функции агрегирования («|Функция Сумма»). Параметры из формы передаются через конструкцию [ДатаНач] с предварительным присвоением реквизитов переменным модуля.

Способы выборки данных

Объект «Запрос»

Быстрый, поддерживает группировки и функции; требует знания языка запросов 7.7

БухгалтерскиеИтоги

Оптимален для отчетов по счетам и субконто; работает только с бухгалтерскими итогами

Прямой перебор документов

Прост в понимании; медленный на больших базах, не подходит для агрегатных отчетов

Пример модуля отчета с запросом

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

Процедура Сформировать()

Если (ДатаНач = '01.01.80') Или (ДатаКон = '01.01.80') Тогда

Предупреждение("Укажите период отчета");

Возврат;

КонецЕсли;

Таб = СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Макет");

Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса =

"//{{ЗАПРОС(Сформировать)

|Период с ДатаНач по ДатаКон;

|Товар = Регистр.ОстаткиТоваров.Товар;

|Склад = Регистр.ОстаткиТоваров.Склад;

|Количество = Регистр.ОстаткиТоваров.Количество;

|Функция НачОст = НачОст(Количество);

|Функция КонОст = КонОст(Количество);

|Группировка Склад;

|Группировка Товар;

|Условие(Склад в ВыбСклад);

|//}}ЗАПРОС

";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

Таб.ВывестиСекцию("Шапка");

Пока Запрос.Группировка("Склад") = 1 Цикл

Таб.ВывестиСекцию("Склад");

Пока Запрос.Группировка("Товар") = 1 Цикл

Таб.ВывестиСекцию("Товар");

КонецЦикла;

КонецЦикла;

Таб.ВывестиСекцию("Подвал");

Таб.ТолькоПросмотр(1);

Таб.Показать("Отчет по остаткам");

КонецПроцедуры

Обратите внимание на обрамление текста запроса комментариями //{{ЗАПРОС(...)}} — это позволяет открыть текст в визуальном конструкторе запросов через контекстное меню «Конструкторы — Конструктор запроса». Конструктор формирует текст автоматически и заметно снижает количество синтаксических ошибок.

Условие Условие(Склад в ВыбСклад) сработает корректно, если реквизит формы ВыбСклад заполнен. Для необязательных отборов используйте программную сборку текста: если параметр пуст, строку условия просто не добавляйте к тексту запроса.

Создание макета и секций вывода

Макет — это табличный документ, нарезанный на именованные секции. Откройте макет, выделите строки будущей секции (например, шапку с заголовками колонок) и задайте имя через меню «Таблица — Имена — Назначить имя» или через свойства секции. Типовой набор секций: «Шапка», строки группировок («Склад», «Товар»), «Подвал» с итогами.

Внутри ячеек макета размещаются выражения в квадратных скобках, например [Запрос.Товар] или [Запрос.КонОст]. При выводе секции методом Таб.ВывестиСекцию("Товар") эти выражения вычисляются в контексте текущей строки запроса. Для форматирования чисел используйте функцию Формат() прямо в ячейке: [Формат(Запрос.КонОст,"Ч17.2")].

Горизонтальные секции присоединяются методом ПрисоединитьСекцию() — так строятся кросс-отчеты, где колонки формируются динамически (например, месяцы по горизонтали). Учтите, что чрезмерное количество присоединенных секций замедляет вывод и затрудняет печать.

Имена секций и выражений в макете чувствительны к регистру только частично, но опечатка в имени секции вызовет ошибку «Секция не найдена» в момент формирования. Держите под рукой список имен секций и проверяйте каждую новую секцию сразу после создания — это экономит время отладки.
ПЗ
Практическое замечание

Итоги, расчетные поля и параметры печати

Итоги по группировкам запрос считает автоматически: при обходе группировки верхнего уровня функции НачОст, КонОст, Сумма возвращают агрегированные значения. Если нужен итог по всему отчету, добавьте секцию «Подвал» и выводите в ней значения функций после завершения циклов — на этот момент контекст запроса содержит общие итоги.

Для вычисляемых полей, которых нет в запросе (например, средняя цена как сумма делить на количество), объявляйте переменные в модуле и вычисляйте их внутри цикла перед выводом секции. В макете такие переменные доступны по имени, как и поля запроса.

Перед выводом результата настройте параметры страницы: ориентацию (альбомная для широких отчетов), масштаб и повтор шапки при печати. Это делается методами объекта «Таблица» — Опции() и установкой повторяемых строк через свойства макета.

Контрольные точки

Как проверить результат

Запрос выполняется
Норма

Метод Выполнить() вернул 1, данные выводятся

Тревожный признак

Возврат 0 — синтаксическая ошибка в тексте запроса или неверные имена объектов

Итоги по группировкам
Норма

Суммы по группам сходятся с общим итогом

Тревожный признак

Итоги пустые или дублируются — перепутан порядок группировок

Отбор по параметрам
Норма

Смена склада/контрагента меняет результат

Тревожный признак

Отбор игнорируется — условие не попало в текст запроса

Типичные ошибки и ограничения платформы 7.7

Самая частая ошибка — обращение к группировке, которой нет в тексте запроса. Метод Запрос.Группировка("Товар") вернет ошибку, если группировка «Товар» не объявлена. Вторая типичная проблема — забытный период: без строки Период с ... по ... регистровый запрос вернет данные некорректно или выдаст ошибку.

Помните об ограничениях платформы: табличный документ имеет предел по размеру, и отчет на сотни тысяч строк может «съесть» всю память и завершиться аварийно. Для больших выборок добавляйте отборы, выводите данные порциями или формируйте отчет за меньший период. Также учитывайте, что при работе пользователей в монопольном режиме недоступен пересчет итогов — планируйте регламентные операции заранее.

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

Типичные ошибки
01
Обращение к необъявленной группировке — ошибка выполнения при обходе запроса
02
Отсутствие проверки заполненности дат — отчет формируется за пустой период и возвращает нули
03
Опечатка в имени секции макета — ошибка «Секция не найдена» при выводе
04
Формирование отчета без отборов на большой базе — нехватка памяти и аварийное завершение
05
Изменение конфигурации без резервной копии — риск потери данных при ошибке

Часто задаваемые вопросы

Можно ли сделать отчет в 1С 7.7 без программирования?

Полностью без кода — нет: платформа 7.7 не имеет визуальных конструкторов отчетов уровня СКД. Однако конструктор запроса и конструктор отчета генерируют большую часть кода автоматически, поэтому для простого отчета достаточно минимальных правок готового шаблона.

Почему запрос возвращает пустой результат, хотя данные в базе есть?

Чаще всего причина в неверном периоде (даты не заданы или перепутаны местами), в условии отбора, которое отсекает все строки, или в том, что итоги регистра не рассчитаны на нужную дату. Проверьте период, временно уберите условия и выполните «Полный пересчет итогов» в режиме предприятия.

Как вывести отчет в Excel или сохранить в файл?

Объект «Таблица» поддерживает метод Записать(ИмяФайла, ТипФайла). Доступные форматы зависят от версии релиза платформы: как минимум поддерживается собственный формат MXL, в поздних релизах — таблицы Excel. Сформированную таблицу также можно сохранить вручную из окна просмотра через меню «Файл — Сохранить как».

Чем отчет отличается от обработки в 1С 7.7?

Технически это почти идентичные объекты: и у отчета, и у обработки есть форма, модуль и макет. Разница в назначении: отчеты предназначены для вывода данных и размещаются в меню отчетов, а обработки — для выполнения действий над данными (загрузка, изменение, удаление). Внешние файлы имеют расширение ERT в обоих случаях.

Как сделать внешний отчет, не изменяя конфигурацию?

Создайте отчет в конфигураторе, затем сохраните его как внешний файл через «Файл — Сохранить как» с расширением ERT. Пользователи смогут открывать его в режиме предприятия через «Файл — Открыть». Это безопасный способ добавлять отчеты без модификации основной конфигурации.

Отчет формируется очень долго — что делать в первую очередь?

Сузьте период и добавьте отборы, замените перебор документов на запрос, уберите из текста запроса неиспользуемые группировки и функции. Если база файловая и большая, проверьте фрагментацию файлов и убедитесь, что антивирус не проверяет каталог базы в реальном времени.

Итог

Что важно запомнить

Отчет в 1С 7.7 строится по схеме «форма с параметрами — запрос или перебор данных — вывод секций макета». Используйте конструктор запроса, проверяйте имена группировок и секций, делайте резервную копию перед изменением конфигурации и ограничивайте объем выборки на больших базах.