При необходимости анализировать движение товаров, возникает задача получения остатков и резервов в разрезе каждого документа. Часто это требуется для контроля влияния изменений в проведенных документах на доступность товара. Рассмотрим основные подходы к решению данной задачи в системе 1С.
Самым эффективным и стандартным способом решения является использование виртуальной таблицы ОстаткиИОбороты. Если вам необходимо видеть состояние остатков после каждого движения, данный метод является наиболее предпочтительным, так как он минимизирует количество обращений к базе данных.
Для реализации отчета выполним следующие действия:
ОстаткиИОбороты регистра накопления.Периодичность укажем значение Регистратор.НачальныйОстаток, Приход, Расход и КонечныйОстаток.При таком подходе платформа 1С автоматически рассчитывает показатели для каждого документа (регистратора). Это позволяет избежать сложных связей наборов данных в СКД и существенно повышает производительность системы.
Если задача требует специфической логики, например, вычисления свободного остатка как разницы между остатком и резервом, можно использовать механизм ВычисляемыхПолей в СКД.
Рассмотрим алгоритм действий при работе с подчиненными наборами:
Регистратор и МоментВремени.Остатки.Период для второго набора передадим значение МоментВремени из первого набора.Важно помнить, что данный метод создает высокую нагрузку на сервер, так как для каждой записи основного набора будет выполняться отдельный запрос. Используйте его только в том случае, если стандартная таблица ОстаткиИОбороты не может быть применена из-за особенностей логики учета.
Для корректного вывода свободного остатка после каждого документа, определим формулу в ВычисляемыхПолях:
СвободныйОстаток = Остаток - Резерв
При работе с регистрами накопления ОстаткиТоваров и Резервы проанализируем ситуацию:
ВЫБРАТЬ
Остатки.Период КАК Период,
Остатки.Регистратор КАК Регистратор,
Остатки.КоличествоОстаток КАК Остаток,
Резервы.КоличествоОстаток КАК Резерв
ИЗ
РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(,, Регистратор,,) КАК Остатки
ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.Резервы.ОстаткиИОбороты(,, Регистратор,,) КАК Резервы
ПО Остатки.Регистратор = Резервы.Регистратор
Данный запрос позволит объединить движения из разных регистров в разрезе одного документа. Это даст возможность увидеть, как каждое действие пользователя меняет общую картину доступности товаров на складе.
Если цель формирования отчета — превентивный контроль перед изменением документов «задним числом», рекомендуем обратить внимание на следующие аспекты:
Номенклатура, Склад, Период), имеют соответствующие индексы в структуре базы данных. Это критично для скорости работы отчета.Анализ доступности товаров. Часто такие отчеты уже содержат необходимые алгоритмы расчета доступного остатка и работают значительно быстрее самостоятельно разработанных решений.Применяя данные подходы, вы сможете создать надежный инструмент для контроля товарных остатков и обеспечить прозрачность движения ТМЦ в вашей конфигурации 1С.