Почему в отчете на СКД по счету 41 появляется фантомное сальдо в разрезе регистратора

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

При разработке отчетов на Системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда стандартная Оборотно-сальдовая ведомость (ОСВ) показывает нулевые остатки, а самописный отчет в разрезе регистратора или партий выдает странные «копейки» или «фантомное» конечное сальдо. Особенно часто это проявляется на счете 41 «Товары» в конфигурации 1С:Бухгалтерия 3.0.

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

Причина 1: Неправильная настройка ролей полей в СКД

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

Разберем по шагам, как это сделать:

  1. Откройте схему компоновки данных и перейдите на закладку «Набор данных».
  2. Найдите поле, отвечающее за начальный остаток (например, СуммаНачальныйОстаток).
  3. В колонке «Роль» нажмите на кнопку выбора.
  4. Установите тип «Остатки».
  5. Укажите Вид остатка: «Начальный».
  6. В поле Счет укажите имя поля, содержащего счет (например, Счет).
  7. В поле Бухгалтерский тип выберите соответствующее значение.
  8. Важный нюанс: Если вы выводите отчет в разрезе регистратора, обязательно заполните поле «Имя группы» (например, «Сумма»). У начального и конечного остатка одной и той же группы «Имя группы» должно совпадать. Это дает понять СКД, что эти два поля — части одного баланса.

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

Причина 2: Периодичность виртуальной таблицы

Когда мы работаем с виртуальной таблицей ОстаткиИОбороты, критически важно правильно выбрать параметр Периодичность. Рассмотрим основные варианты:

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

Выясним причину, почему совет из сообщения №1 (установить периодичность «Секунда») может не помочь. Если у вас несколько документов в одну секунду, «Секунда» не разделит их корректно для расчета остатка. Использование Периодичность = Авто в сочетании с полем Регистратор обычно является оптимальным решением для бухгалтерских регистров.

Причина 3: Особенности документа «Передача товаров» и корректировка стоимости

В сообщении №6 автор заметил, что сальдо не закрывается именно по партиям, где фигурирует документ «Передача товаров». В 1С:Бухгалтерии 3.0 это часто связано с механизмом корректировки стоимости номенклатуры.

Посмотрим на ситуацию глубже: В течение месяца товары могут списываться по «плановой» или «средней» стоимости, которая была актуальна на момент проведения документа. В конце месяца регламентная операция «Закрытие месяца» (документ «Регламентная операция» с типом «Корректировка стоимости») дозаписывает движения по 41 счету, корректируя себестоимость до реальной.

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

Причина 4: Ошибочное суммирование в ресурсах

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

Правильный подход:

Причина 5: Пустые субконто и партионный учет

Иногда «непонятное сальдо» — это результат развернутого сальдо по пустой и заполненной партии. В бухгалтерском учете 1С, если по какому-то документу партия не была заполнена (например, ручная операция или некорректный ввод остатков), а списание произошло с указанием партии, в ОСВ (если выключена настройка «Выводить пустые субконто») это может выглядеть как закрытый остаток.

В СКД же эти записи попадут в разные строки:

  1. Строка с Партия = <Пусто> (Остаток: +10 шт)
  2. Строка с Партия = Приходная накладная №1 (Остаток: -10 шт)

Итого по номенклатуре — 0, но в разрезе партий — висят остатки. Для решения этой задачи проверьте чистоту данных с помощью стандартной консоли запросов.

Практические рекомендации по исправлению

Разберем алгоритм действий, который поможет убрать фантомное сальдо:

1. Пересчитайте итоги. Как советовали в сообщении №4, выполните Тестирование и исправление (ТиИ) с галочкой «Пересчет итогов». Если физические таблицы итогов в базе данных разошлись с таблицей движений, виртуальные таблицы будут выдавать неверные данные.

2. Проверьте запрос в консоли. Напишите простой запрос к виртуальной таблице ОстаткиИОбороты без участия СКД. Если запрос выдает правильные данные, значит проблема 100% в настройках компоновки (роли, ресурсы, настройки группировок).

Пример структуры запроса для проверки:


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

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

Подводя итог: «непонятное сальдо» в СКД — это почти всегда либо следствие неучтенных регламентных операций (корректировок), либо результат неверной настройки ролей полей остатков. Тщательная проверка настроек ролей и периодичности «Авто» обычно решает 90% подобных проблем.

← На главную