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