Как получить резервы товаров на дату в разрезе документов-резервистов в 1С:Управление торговлей 11?

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

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

Почему нельзя получить регистратор из таблицы остатков?

Выясним причину, по которой обратиться к регистратору из таблицы остатков не получится:

  1. Устройство таблиц остатков: Виртуальная таблица Остатки() агрегирует данные строго по измерениям регистра (в регистре СвободныеОстатки это Номенклатура, Характеристика, Склад и Серия). Документ-регистратор — это реквизит записи движения, а не измерение. При формировании итогов регистратора как сущности просто не существует.
  2. Логическая некорректность использования регистраторов из оборотов: Если попытаться обратиться к таблице движений или ОстаткиИОбороты(), вы получите список документов, совершавших движения. Однако резерв — это временное состояние. Если документ создал резерв, а позже товар был отгружен или резерв снят, получение остатка по таблице движений за прошлый период вернет неактуальные документы, которые давно закрыты.

Способ 1. Запрос к регистрам учета заказов

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

Чтобы получить актуальные резервы на дату с указанием документа, удерживающего резерв, необходимо обращаться к виртуальной таблице Остатки() соответствующего регистра заказов и отбирать строки с вариантом обеспечения «Резервировать на складе».

Разберем пример запроса к регистру заказов клиентов:


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

Способ 2. Использование механизма обособленного обеспечения (Назначений)

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

Способ 3. Программный вызов данных из типового отчета

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

Важное замечание по версиям конфигурации

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

← На главную