Почему в отчете СКД неверно рассчитываются итоги при детализации по регистратору и как это исправить?

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

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

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

Причины некорректного расчета итогов в СКД

Проанализируем, как система компоновки данных работает с виртуальными таблицами остатков и оборотов:

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

Пошаговое исправление схемы компоновки данных

Рассмотрим по шагам, какие изменения необходимо внести в схему компоновки данных, чтобы восстановить корректный расчет итогов.

Шаг 1. Корректировка текста запроса

Откроем схему компоновки данных и перейдем к набору данных-запросу. Проверим параметры виртуальной таблицы регистра бухгалтерии или регистра накопления. В параметре периодичности виртуальной таблицы необходимо указать Авто.

Посмотрим на пример правильного формирования выборки по регистру бухгалтерии:


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

Обратим внимание: в запросе обязательно должны присутствовать поля ПериодСекунда, Регистратор, НомерСтроки (если в одном документе возможно несколько строк с одинаковой аналитикой), а также парные поля остатков СуммаНачальныйОстаток и СуммаКонечныйОстаток.

Шаг 2. Настройка ролей полей на вкладке «Наборы данных»

Перейдем на вкладку Наборы данных и настроим колонку Роль для каждого ключевого поля:

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

Шаг 3. Настройка ресурсов и структуры отчета

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

Теперь перейдем на вкладку Настройки. В структуре отчета мы можем свободно комбинировать группировки: формировать отчет только по номенклатуре, раскрывать до складов или опускаться до конкретного Регистратора. Благодаря наличию поля ПериодСекунда и верно заданным ролям итоговые строки отчета на всех уровнях группировок будут рассчитываться корректно и полностью совпадут с типовыми бухгалтерскими отчетами.

← На главную