Как разделить отчет по регистру бухгалтерии по контрагентам в системе компоновки данных (СКД)?

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

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

Анализ структуры данных регистра бухгалтерии

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

Рассмотрим типичную ошибку: попытку обратиться к Субконто1 на счете, где первым субконто является вовсе не "Контрагенты". Выясним причину, почему данные могут не выводиться. На счетах учета выручки (90) или прочих доходов (91) аналитика "Контрагенты" обычно отсутствует. Она находится на корреспондирующих счетах (60, 62). Поэтому простого обращения к оборотам одного счета недостаточно.

Шаг 1. Выбор правильной виртуальной таблицы

Проанализируем ситуацию: если нам нужно увидеть доходы в разрезе покупателей, нам необходимо связать оборот по кредиту счета 90.01 с данными счета 62.01. Для этих целей лучше всего подходит виртуальная таблица Хозрасчетный.ОборотыДтКт. Она позволяет обращаться к аналитике обеих сторон проводки одновременно.

Посмотрим на пример запроса, который позволяет вытянуть контрагента, даже если его нет на основном счету:


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

В данном примере мы используем СубконтоДт1, предполагая, что на дебетовом счету (например, 62.01) первым субконто является "Контрагент". Использование функции ВЫРАЗИТЬ критически важно для СКД, так как это позволяет системе однозначно определить тип поля и предоставить пользователю доступ к его реквизитам (ИНН, КПП и т.д.).

Шаг 2. Настройка полей в конструкторе запроса СКД

После написания запроса часто возникает проблема: "Я добавил поле в текст запроса, но в настройках отчета его нет". Разберем по шагам, как это исправить:

  1. Откроем конструктор схемы компоновки данных.
  2. Перейдем на закладку "Наборы данных".
  3. Проверим наличие флажка "Автозаполнение". Если он включен, СКД автоматически пытается вытянуть все поля из запроса.
  4. Если поле все равно не появилось, перейдем на закладку "Компоновка данных" (внутри конструктора запроса) и вручную добавим поле в список выбранных полей на закладке "Поля".

Важный момент: если вы используете таблицу Хозрасчетный.Обороты, как автор темы, убедитесь, что вы обращаетесь к Субконто1 правильно. Если на разных счетах контрагент занимает разные позиции (где-то первый, где-то второй), в СКД рекомендуется использовать параметры ВидыСубконто в настройках виртуальной таблицы. Это позволит "вытащить" контрагента по имени вида субконто, а не по его индексу.

Шаг 3. Установка ролей и ограничений

Для того чтобы поле "Контрагент" корректно отображалось в группировках и отборах, необходимо проверить его Роль в СКД. Рассмотрим подробнее:

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

Шаг 4. Альтернативный метод через связь наборов данных

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

Разберем этот метод по шагам:

  1. Создаем первый набор данных (запрос) для получения оборотов по счетам. В запросе обязательно выбираем поле Регистратор.
  2. Создаем второй набор данных (запрос) к документам-регистраторам (например, РеализацияТоваровУслуг), где выбираем Ссылка и Контрагент.
  3. На закладке "Связи наборов данных" связываем их по полю Регистратор = Ссылка.

Такой подход позволяет вывести контрагента из шапки документа, даже если в самой проводке по счету 90 или 91 такая аналитика не ведется. Это "тяжелый" метод с точки зрения производительности, но он гарантирует получение данных.

Шаг 5. Вывод поля в структуру отчета

Когда поле успешно добавлено в набор данных и стало доступно, переходим к финальной настройке:

  1. Переходим на закладку "Настройки" в СКД.
  2. В дереве настроек выбираем нужную группировку или создаем новую.
  3. В правой части окна на закладке "Выбранные поля" переносим наше поле (например, Субконто1 или Контрагент) из списка доступных полей в список выбранных.
  4. Если поле нужно использовать как заголовок группы, добавляем его в "Группировки".

Проанализируем ситуацию, если список доступных полей пуст. Это часто происходит, когда разработчик забыл указать псевдоним поля в запросе или когда в СКД настроены Функциональные опции, которые скрывают учет по контрагентам в текущей базе.

Резюме и рекомендации

Подведем итог нашего исследования. Для разделения бухгалтерского отчета по контрагентам следует:

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

← На главную