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

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

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

Анализ проблемы виртуальной таблицы Регистратор

Когда мы используем виртуальную таблицу ОстаткиИОбороты с параметром Регистратор, система рассчитывает остатки на каждый момент движения конкретного документа. Если в вашем отчете необходимо видеть остатки в разрезе реквизита СчетНаОплату, который добавлен в документ, вы столкнетесь со следующими трудностями:

Метод расчета через обороты (Разница оборотов)

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

  1. Создадим запрос, который выбирает обороты по приходу (увеличение резерва под счет).
  2. Создадим второй запрос, который выбирает обороты по расходу (списание товара) с отрицательным знаком.
  3. Объединим результаты этих запросов через оператор ОБЪЕДИНИТЬ ВСЕ.

Такой подход позволяет игнорировать ограничения виртуальной таблицы остатков и гибко управлять группировками. В СКД вы сможете сгруппировать полученные данные по СчетуНаОплату и Контрагенту, получив корректное конечное сальдо.


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

ОБЪЕДИНИТЬ ВСЕ

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

Использование регистров накопления для оперативного учета

Если задача требует ведения сложной цепочки (резервирование -> списание -> возврат), использование регистра бухгалтерии может быть избыточным или методологически неверным. Регистр бухгалтерии предназначен для финансового учета, в то время как регистр накопления — для оперативного.

Чтобы избежать проблем с «скрытыми» остатками, рекомендуется:

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

Рекомендации по настройке в СКД

Для корректной работы отчета, независимо от выбранного метода, уделите внимание настройкам СКД:

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

Подводя итог: если вы видите, что остатки «не списываются» или неверно отображаются, проверьте, попадает ли аналитика счета в движения регистра. Если нет — переходите на метод расчета оборотов или пересмотрите структуру хранения данных, внедрив специализированный регистр накопления.

← На главную