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

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

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

Использование виртуальной таблицы ОстаткиИОбороты

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

Для реализации отчета выполним следующие действия:

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

При таком подходе платформа 1С автоматически рассчитывает показатели для каждого документа (регистратора). Это позволяет избежать сложных связей наборов данных в СКД и существенно повышает производительность системы.

Реализация через систему компоновки данных (СКД)

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

Рассмотрим алгоритм действий при работе с подчиненными наборами:

  1. Первый набор данных (основной) должен выбирать список документов за нужный период. Важно, чтобы в результат попадали поля Регистратор и МоментВремени.
  2. Второй набор данных (подчиненный) должен обращаться к виртуальной таблице Остатки.
  3. В настройках связей наборов данных установим связь по номенклатуре и складу. В поле Период для второго набора передадим значение МоментВремени из первого набора.

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

Анализ данных и расчет свободного остатка

Для корректного вывода свободного остатка после каждого документа, определим формулу в ВычисляемыхПолях:

СвободныйОстаток = Остаток - Резерв

При работе с регистрами накопления ОстаткиТоваров и Резервы проанализируем ситуацию:


ВЫБРАТЬ
    Остатки.Период КАК Период,
    Остатки.Регистратор КАК Регистратор,
    Остатки.КоличествоОстаток КАК Остаток,
    Резервы.КоличествоОстаток КАК Резерв
ИЗ
    РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(,, Регистратор,,) КАК Остатки
    ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Резервы.ОстаткиИОбороты(,, Регистратор,,) КАК Резервы
    ПО Остатки.Регистратор = Резервы.Регистратор

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

Рекомендации по контролю данных

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

Применяя данные подходы, вы сможете создать надежный инструмент для контроля товарных остатков и обеспечить прозрачность движения ТМЦ в вашей конфигурации 1С.

← На главную