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