Как программно узнать, откуда отчет в 1С берет данные и как формируются цифры?

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

Для начинающих разработчиков и аналитиков в среде 1С одним из самых частых и сложных вопросов является поиск источника данных конкретной цифры в отчете. База данных 1С содержит тысячи таблиц, регистров и документов, а типовые отчеты могут иметь крайне запутанную внутреннюю архитектуру. В этой статье мы подробно разберем, по какому алгоритму можно программно "раскопать" любую цифру в отчете с помощью Конфигуратора, на примере отчета "Чистые активы" в конфигурации "1С:Управление нашей фирмой" (УНФ).

Общая концепция: как данные попадают в отчет

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

Поэтому наша главная задача — пройти этот путь в обратном порядке: Отчет -> Схема запроса -> Регистр -> Документ-регистратор.

Шаг 1. Находим отчет в Конфигураторе

Для начала откроем нашу информационную базу в режиме Конфигуратор. Выполним следующие действия:

  1. Откроем дерево конфигурации (меню Конфигурация — Открыть конфигурацию).
  2. Найдем ветку Отчеты и развернем ее.
  3. Найдем нужный нам отчет. В нашем примере это отчет с системным именем ЧистыеАктивы.
  4. Дважды кликнем по нему, чтобы открыть окно свойств отчета.

Шаг 2. Изучаем схему компоновки данных (СКД)

Почти все современные отчетах в 1С построены на базе Системы компоновки данных (СКД). Нам нужно найти основной макет, который управляет получением данных. В окне свойств отчета обратим внимание на поле Основная схема компоновки данных. Обычно этот макет называется ОсновнаяСхемаКомпоновкиДанных. Нажмем на кнопку "Открыть" (лупа) рядом с ним. Для быстрого извлечения и исследования текста запроса из отчетов СКД в режиме предприятия подойдёт консоль запросов с загрузкой запроса из отчета СКД.

Перед нами откроется конструктор СКД со множеством вкладок. Давайте разберем, где начинающие разработчики часто совершают ошибку:

Шаг 3. Анализируем текст запроса

Перейдем на вкладку Наборы данных. В левом верхнем окне мы увидим наш набор данных (обычно типа "Запрос" с именем НаборДанных1), а в правом окне — сам текст запроса на языке запросов 1С. Проанализируем текст запроса для нашего отчета "Чистые активы":


ВЫБРАТЬ
    УправленческийОстатки.Счет КАК Счет,
    УправленческийОстатки.Организация КАК Организация,
    УправленческийОстатки.СуммаОстаток КАК СуммаОстаток,
    УправленческийОстатки.СуммаОстатокДт КАК СуммаОстатокДебет,
    УправленческийОстатки.СуммаОстатокКт КАК СуммаОстатокКредит,
    &ДатаПериода КАК ДатаВПериоде,
    НАЧАЛОПЕРИОДА(&ДатаПериода, МЕСЯЦ) КАК ДинамическийПериод
ИЗ
    РегистрБухгалтерии.Управленческий.Остатки(
        ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&ДатаПериода, ДЕНЬ), СЕКУНДА, 1), 
        Счет.ТипСчета В (&ТипыСчета), 
        СценарийПланирования = ЗНАЧЕНИЕ(Справочник.СценарииПланирования.Фактический)
    ) КАК УправленческийОстатки

Давайте разберем этот запрос по деталям:

Шаг 4. Почему в СКД нет строки "Расчеты с покупателями"?

Частая проблема новичков: они пытаются найти конкретный текст (например, строчку из отчета "Расчеты с покупателями") прямо внутри текста запроса или в настройках макета СКД и ничего не находят.

Выясним причину этого поведения. "Расчеты с покупателями" — это не имя колонки в базе данных и не программный код. Это элемент справочника (в данном случае — конкретный счет из Плана счетов). В запросе мы выбираем поле Счет. На уровне интерфейса СКД автоматически группирует данные по этому полю и выводит его наименование («представление»).

Таким образом, чтобы понять, откуда берется эта строка:

  1. Перейдем в режим "1С:Предприятие".
  2. Откроем Управленческий план счетов (в УНФ он находится в разделе Компания — План счетов).
  3. Найдем счет с наименованием "Расчеты с покупателями" (например, счет с кодом 62).
  4. Теперь мы точно знаем, что цифра в отчете формируется из остатков по этому счету в регистре бухгалтерии Управленческий.

Шаг 5. Как узнать, какими документами сформирована цифра?

Теперь мы понимаем физический смысл цифры. Но как узнать, какие документы сделали проводки по счету "Расчеты с покупателями"? Для этого можно использовать как встроенные механизмы отчета, так и средства разработчика.

Вариант А. Стандартная расшифровка (Drill-down)

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

Вариант Б. Программная отладка параметров СКД

Иногда параметры запроса (например, фильтр &ТипыСчета) заполняются динамически в коде 1С перед выводом отчета. Чтобы увидеть, какие именно значения туда передаются, выполним программную отладку:

  1. В Конфигураторе откроем модуль объекта отчета ЧистыеАктивы.
  2. Найдем предопределенную процедуру ПриКомпоновкеРезультата. Она вызывается системой непосредственно в момент формирования отчета.
  3. Установим точку останова внутри этой процедуры (клавиша F9).
  4. Запустим сеанс 1С в режиме отладки и сформируем наш отчет.
  5. Когда выполнение программы остановится на точке останова, откроем окно Табло (Ctrl+Alt+W) и вычислим выражение:

ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы

В открывшемся списке параметров найдем параметр ТипыСчета и посмотрим на его реальное свойство Значение. Это позволит нам со 100% точностью определить список счетов, участвующих в расчете, даже если они заполняются сложным программным путем. Для отладки запросов и схем компоновки в пользовательском сеансе без серверной отладки можно применить расширение для отладки СКД и запросов под пользователем.

Резюме

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

← На главную