Для начинающих разработчиков и аналитиков в среде 1С одним из самых частых и сложных вопросов является поиск источника данных конкретной цифры в отчете. База данных 1С содержит тысячи таблиц, регистров и документов, а типовые отчеты могут иметь крайне запутанную внутреннюю архитектуру. В этой статье мы подробно разберем, по какому алгоритму можно программно "раскопать" любую цифру в отчете с помощью Конфигуратора, на примере отчета "Чистые активы" в конфигурации "1С:Управление нашей фирмой" (УНФ).
Прежде чем мы перейдем к Конфигуратору, давайте вспомним базовое правило архитектуры 1С. В подавляющем большинстве случаев документы в системе напрямую в отчеты не попадают. При проведении документы делают записи в специальные таблицы — регистры (накопления, сведений, бухгалтерии, расчета). Регистры выполняют роль "аккумуляторов" информации. Отчеты же, в свою очередь, обращаются с помощью запросов именно к виртуальным или реальным таблицам регистров, чтобы быстро получить остатки или обороты.
Поэтому наша главная задача — пройти этот путь в обратном порядке: Отчет -> Схема запроса -> Регистр -> Документ-регистратор.
Для начала откроем нашу информационную базу в режиме Конфигуратор. Выполним следующие действия:
Отчеты и развернем ее.ЧистыеАктивы.Почти все современные отчетах в 1С построены на базе Системы компоновки данных (СКД). Нам нужно найти основной макет, который управляет получением данных. В окне свойств отчета обратим внимание на поле Основная схема компоновки данных. Обычно этот макет называется ОсновнаяСхемаКомпоновкиДанных. Нажмем на кнопку "Открыть" (лупа) рядом с ним. Для быстрого извлечения и исследования текста запроса из отчетов СКД в режиме предприятия подойдёт консоль запросов с загрузкой запроса из отчета СКД.
Перед нами откроется конструктор СКД со множеством вкладок. Давайте разберем, где начинающие разработчики часто совершают ошибку:
СуммаОстаток, СуммаОстатокДебет). Нам показаны только формулы агрегации, такие как Сумма(СуммаОстаток). Самих источников данных здесь нет, поэтому долго задерживаться на этой вкладке не имеет смысла.Перейдем на вкладку Наборы данных. В левом верхнем окне мы увидим наш набор данных (обычно типа "Запрос" с именем НаборДанных1), а в правом окне — сам текст запроса на языке запросов 1С. Проанализируем текст запроса для нашего отчета "Чистые активы":
ВЫБРАТЬ
УправленческийОстатки.Счет КАК Счет,
УправленческийОстатки.Организация КАК Организация,
УправленческийОстатки.СуммаОстаток КАК СуммаОстаток,
УправленческийОстатки.СуммаОстатокДт КАК СуммаОстатокДебет,
УправленческийОстатки.СуммаОстатокКт КАК СуммаОстатокКредит,
&ДатаПериода КАК ДатаВПериоде,
НАЧАЛОПЕРИОДА(&ДатаПериода, МЕСЯЦ) КАК ДинамическийПериод
ИЗ
РегистрБухгалтерии.Управленческий.Остатки(
ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(&ДатаПериода, ДЕНЬ), СЕКУНДА, 1),
Счет.ТипСчета В (&ТипыСчета),
СценарийПланирования = ЗНАЧЕНИЕ(Справочник.СценарииПланирования.Фактический)
) КАК УправленческийОстатки
Давайте разберем этот запрос по деталям:
ИЗ РегистрБухгалтерии.Управленческий.Остатки(...) прямо говорит нам о том, что источником данных для всего отчета служит виртуальная таблица остатков регистра бухгалтерии "Управленческий".Счет, Организация и различные виды остатков сумм.Счет.ТипСчета В (&ТипыСчета). Это означает, что отчет выводит баланс не по всем счетам учета, а только по тем, типы которых будут переданы в параметре &ТипыСчета.Частая проблема новичков: они пытаются найти конкретный текст (например, строчку из отчета "Расчеты с покупателями") прямо внутри текста запроса или в настройках макета СКД и ничего не находят.
Выясним причину этого поведения. "Расчеты с покупателями" — это не имя колонки в базе данных и не программный код. Это элемент справочника (в данном случае — конкретный счет из Плана счетов). В запросе мы выбираем поле Счет. На уровне интерфейса СКД автоматически группирует данные по этому полю и выводит его наименование («представление»).
Таким образом, чтобы понять, откуда берется эта строка:
Компания — План счетов).Управленческий.Теперь мы понимаем физический смысл цифры. Но как узнать, какие документы сделали проводки по счету "Расчеты с покупателями"? Для этого можно использовать как встроенные механизмы отчета, так и средства разработчика.
Большинство отчетов на СКД поддерживают детализацию "из коробки". Попробуем выполнить двойной клик на интересующей нас цифре в сформированном отчете. Система предложит выбрать поле для расшифровки или другой отчет. Для счетов учета оптимальным выбором будет открыть стандартный отчет "Карточка счета" или "Обороты счета" по выбранному счету "Расчеты с покупателями". В открывшемся отчете вы увидите детальный список документов-регистраторов (таких как РасходнаяНакладная, ПоступлениеНаСчет и др.), которые совершили движения и повлияли на итоговое число.
Иногда параметры запроса (например, фильтр &ТипыСчета) заполняются динамически в коде 1С перед выводом отчета. Чтобы увидеть, какие именно значения туда передаются, выполним программную отладку:
ЧистыеАктивы.ПриКомпоновкеРезультата. Она вызывается системой непосредственно в момент формирования отчета.
ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы
В открывшемся списке параметров найдем параметр ТипыСчета и посмотрим на его реальное свойство Значение. Это позволит нам со 100% точностью определить список счетов, участвующих в расчете, даже если они заполняются сложным программным путем. Для отладки запросов и схем компоновки в пользовательском сеансе без серверной отладки можно применить расширение для отладки СКД и запросов под пользователем.
Мы детально разобрали процесс поиска источников данных для отчетов. Понимание связей между экранными формами отчетов, схемами компоновки данных (СКД), текстами SQL-подобных запросов и регистрами системы — это ключевой навык для любого программиста 1С. Действуя по предложенной инструкции, вы сможете без труда разобраться в устройстве даже самых сложных аналитических панелей конфигурации.