При разработке отчетов по бухгалтерскому учету часто возникает задача детализации данных по конкретной аналитике, например, по контрагентам. Казалось бы, задача тривиальная — добавить поле в запрос. Однако на практике разработчики сталкиваются с тем, что поле не появляется в настройках, или данные не выводятся вовсе, особенно если речь идет о счетах доходов и расходов (90, 91), где контрагент может отсутствовать в явном виде. В этой статье мы подробно разберем, как правильно извлечь информацию о контрагентах из регистра бухгалтерии и корректно настроить схему компоновки данных.
Для начала разберем ситуацию, с которой столкнулся автор темы. Использование виртуальной таблицы Хозрасчетный.Обороты позволяет быстро получить данные по оборотам счетов. Но важно помнить, что аналитика (субконто) в регистре бухгалтерии хранится в виде нумерованных полей Субконто1, Субконто2 и так далее. Порядок этих субконто жестко задан в Плане счетов.
Рассмотрим типичную ошибку: попытку обратиться к Субконто1 на счете, где первым субконто является вовсе не "Контрагенты". Выясним причину, почему данные могут не выводиться. На счетах учета выручки (90) или прочих доходов (91) аналитика "Контрагенты" обычно отсутствует. Она находится на корреспондирующих счетах (60, 62). Поэтому простого обращения к оборотам одного счета недостаточно.
Проанализируем ситуацию: если нам нужно увидеть доходы в разрезе покупателей, нам необходимо связать оборот по кредиту счета 90.01 с данными счета 62.01. Для этих целей лучше всего подходит виртуальная таблица Хозрасчетный.ОборотыДтКт. Она позволяет обращаться к аналитике обеих сторон проводки одновременно.
Посмотрим на пример запроса, который позволяет вытянуть контрагента, даже если его нет на основном счету:
ВЫБРАТЬ
ХозрасчетныйОборотыДтКт.Период,
ХозрасчетныйОборотыДтКт.Организация,
ВЫРАЗИТЬ(ХозрасчетныйОборотыДтКт.СубконтоДт1 КАК Справочник.Контрагенты) КАК Контрагент,
ХозрасчетныйОборотыДтКт.СуммаОборот КАК СуммаДохода
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода, , СчетКт = &СчетДоходов, , , , ) КАК ХозрасчетныйОборотыДтКт
В данном примере мы используем СубконтоДт1, предполагая, что на дебетовом счету (например, 62.01) первым субконто является "Контрагент". Использование функции ВЫРАЗИТЬ критически важно для СКД, так как это позволяет системе однозначно определить тип поля и предоставить пользователю доступ к его реквизитам (ИНН, КПП и т.д.).
После написания запроса часто возникает проблема: "Я добавил поле в текст запроса, но в настройках отчета его нет". Разберем по шагам, как это исправить:
Важный момент: если вы используете таблицу Хозрасчетный.Обороты, как автор темы, убедитесь, что вы обращаетесь к Субконто1 правильно. Если на разных счетах контрагент занимает разные позиции (где-то первый, где-то второй), в СКД рекомендуется использовать параметры ВидыСубконто в настройках виртуальной таблицы. Это позволит "вытащить" контрагента по имени вида субконто, а не по его индексу.
Для того чтобы поле "Контрагент" корректно отображалось в группировках и отборах, необходимо проверить его Роль в СКД. Рассмотрим подробнее:
В списке полей набора данных найдите колонку "Роль". Для полей, полученных из виртуальных таблиц оборотов, важно, чтобы измерения (Организация, Справочник.Контрагенты) имели соответствующие пометки. Если поле является аналитикой, проверьте, не стоит ли на нем галочка в колонке "Ограничение". Если установлена галочка "Ограничение поля" или "Ограничение группировки", пользователь просто не увидит это поле в интерфейсе настройки отчета.
Если структура плана счетов специфична и контрагента невозможно получить напрямую из проводок, рассмотрим более гибкий метод — использование нескольких наборов данных и их связи в СКД.
Разберем этот метод по шагам:
Регистратор.РеализацияТоваровУслуг), где выбираем Ссылка и Контрагент.Регистратор = Ссылка.Такой подход позволяет вывести контрагента из шапки документа, даже если в самой проводке по счету 90 или 91 такая аналитика не ведется. Это "тяжелый" метод с точки зрения производительности, но он гарантирует получение данных.
Когда поле успешно добавлено в набор данных и стало доступно, переходим к финальной настройке:
Субконто1 или Контрагент) из списка доступных полей в список выбранных.Проанализируем ситуацию, если список доступных полей пуст. Это часто происходит, когда разработчик забыл указать псевдоним поля в запросе или когда в СКД настроены Функциональные опции, которые скрывают учет по контрагентам в текущей базе.
Подведем итог нашего исследования. Для разделения бухгалтерского отчета по контрагентам следует:
Хозрасчетный.ОборотыДтКт для сопоставления счетов доходов/расходов с расчетными счетами.ВЫРАЗИТЬ(... КАК Справочник.Контрагенты) для корректной типизации.Регистратор.Следуя этим правилам, вы сможете построить гибкий и информативный отчет, который позволит бухгалтеру или менеджеру видеть финансовые результаты в разрезе каждого делового партнера.