При разработке отчетов на Системе компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда стандартная Оборотно-сальдовая ведомость (ОСВ) показывает нулевые остатки, а самописный отчет в разрезе регистратора или партий выдает странные «копейки» или «фантомное» конечное сальдо. Особенно часто это проявляется на счете 41 «Товары» в конфигурации 1С:Бухгалтерия 3.0.
В этой статье мы подробно разберем причины возникновения таких расхождений, проанализируем настройки виртуальных таблиц и выясним, как правильно настроить роли полей, чтобы отчет работал корректно.
Это самая распространенная техническая ошибка. Для того чтобы СКД понимала, как рассчитывать остатки на каждую конкретную дату (или на момент документа-регистратора), недостаточно просто выбрать поля СуммаНачальныйОстаток и СуммаКонечныйОстаток в запросе. Необходимо правильно настроить их Роли на закладке «Набор данных».
Разберем по шагам, как это сделать:
СуммаНачальныйОстаток).Счет).Проанализируем ситуацию: если роли не заданы, СКД может начать просто суммировать остатки по строкам регистраторов, что приведет к геометрическому росту итоговых цифр, так как остаток на каждый момент времени будет прибавляться к предыдущему.
Когда мы работаем с виртуальной таблицей ОстаткиИОбороты, критически важно правильно выбрать параметр Периодичность. Рассмотрим основные варианты:
Если в параметрах виртуальной таблицы указана периодичность Период, а в запросе вы выбираете Регистратор, то при настройке «Авто» (как упоминалось в обсуждении) СКД пытается самостоятельно определить минимальный период. Однако для корректного вывода движений по конкретным документам рекомендуется использовать значение Запись или Авто, но с обязательным включением полей периодов в запрос.
Выясним причину, почему совет из сообщения №1 (установить периодичность «Секунда») может не помочь. Если у вас несколько документов в одну секунду, «Секунда» не разделит их корректно для расчета остатка. Использование Периодичность = Авто в сочетании с полем Регистратор обычно является оптимальным решением для бухгалтерских регистров.
В сообщении №6 автор заметил, что сальдо не закрывается именно по партиям, где фигурирует документ «Передача товаров». В 1С:Бухгалтерии 3.0 это часто связано с механизмом корректировки стоимости номенклатуры.
Посмотрим на ситуацию глубже: В течение месяца товары могут списываться по «плановой» или «средней» стоимости, которая была актуальна на момент проведения документа. В конце месяца регламентная операция «Закрытие месяца» (документ «Регламентная операция» с типом «Корректировка стоимости») дозаписывает движения по 41 счету, корректируя себестоимость до реальной.
Если в вашем отчете установлен фильтр по конкретным типам документов или если запрос не учитывает эти корректировки (которые часто делаются без указания конкретной партии или, наоборот, привязываются к движениям специфическим образом), то по конкретной партии может «зависнуть» остаток. Стандартная ОСВ видит общую картину по счету/номенклатуре, а ваш отчет на СКД может «спотыкаться» об эти разрывы.
Проанализируем типичную ошибку начинающих разработчиков на закладке «Ресурсы». Для полей остатка нельзя использовать функцию Сумма() в привычном понимании, если вы хотите получить остаток на период.
Правильный подход:
Иногда «непонятное сальдо» — это результат развернутого сальдо по пустой и заполненной партии. В бухгалтерском учете 1С, если по какому-то документу партия не была заполнена (например, ручная операция или некорректный ввод остатков), а списание произошло с указанием партии, в ОСВ (если выключена настройка «Выводить пустые субконто») это может выглядеть как закрытый остаток.
В СКД же эти записи попадут в разные строки:
Партия = <Пусто> (Остаток: +10 шт)Партия = Приходная накладная №1 (Остаток: -10 шт)Итого по номенклатуре — 0, но в разрезе партий — висят остатки. Для решения этой задачи проверьте чистоту данных с помощью стандартной консоли запросов.
Разберем алгоритм действий, который поможет убрать фантомное сальдо:
1. Пересчитайте итоги. Как советовали в сообщении №4, выполните Тестирование и исправление (ТиИ) с галочкой «Пересчет итогов». Если физические таблицы итогов в базе данных разошлись с таблицей движений, виртуальные таблицы будут выдавать неверные данные.
2. Проверьте запрос в консоли. Напишите простой запрос к виртуальной таблице ОстаткиИОбороты без участия СКД. Если запрос выдает правильные данные, значит проблема 100% в настройках компоновки (роли, ресурсы, настройки группировок).
Пример структуры запроса для проверки:
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Счет,
ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
ХозрасчетныйОстаткиИОбороты.Субконто3 КАК Партия,
ХозрасчетныйОстаткиИОбороты.Регистратор,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет = &Счет41, , ) КАК ХозрасчетныйОстаткиИОбороты
3. Убедитесь, что в параметрах виртуальной таблицы не используются условия в секции ГДЕ, которые могут отсекать движения, влияющие на расчет остатка. Все фильтры по аналитике (Счет, Субконто) должны передаваться в Параметры виртуальной таблицы.
Подводя итог: «непонятное сальдо» в СКД — это почти всегда либо следствие неучтенных регламентных операций (корректировок), либо результат неверной настройки ролей полей остатков. Тщательная проверка настроек ролей и периодичности «Авто» обычно решает 90% подобных проблем.