Получить остатки заказов в УТ 11.5.22 и выше..

1. nano1c 174 27.08.26 16:04 Сейчас в теме
Такая простая задача не имеет простого решения. Если смотреть отчет ОстаткиИдоступность то там очень тяжелый запрос ("онлайн-офлайн" регистры), который дополняется текстом из модуля через процедуру РаспределениеЗапасов():

ТекстЗапроса = СхемаКомпоновкиДанных.НаборыДанных.Основной.Запрос;

ИменаТаблиц = ОбеспечениеВДокументахСервер.НовыеИменаТаблицДляРаспределенияЗапасов();
ИменаТаблиц.Остатки = "ЗапасыИПотребностиОстатки"; // @query-part-1
ИменаТаблиц.ОстаткиКонтролируемыхПартий = "ЗапасыИПотребностиОстаткиКонтролируемыхПартий"; // @query-part-1
ИменаТаблиц.Результат = "ПодстановкаРасчетРезервов"; // @query-part-1

ОбеспечениеВДокументахСервер.РаспределениеЗапасов(ТекстЗапроса, ИменаТаблиц);

Пытался понять логику всего этого но, если честно, все это напоминает гавнокод.
aka Любитель XML; +1 Ответить
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Avatarzorro 81 28.08.26 02:02 Сейчас в теме
так остатки заказов это 1 регистр. посмотри куда заказ клиента пишет. Оттуда и забирай остатки. реализация пишет туда же, только с расходом. По итогу у заказа остается 0 в остатках когда он полностью отгружен.

Если сомневаешься, то посмотри как заполняется реализация при создании на основании заказа. Она делает именно так как я и говорю
3. muskul 28.08.26 02:25 Сейчас в теме
Регистр Распределение запасов, но с тем как 1с сейчас все перепиливают возможно скоро его прийдется менять.
4. nano1c 174 28.08.26 10:35 Сейчас в теме
(3) Ну да, резервы можно получить из РегистрСведений.РаспределениеЗапасов так:
СУММА(ВЫБОР
КОГДА РаспределениеЗапасов.ХарактеристикаПотребности В (ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.РезервироватьНаСкладе), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.РезервироватьПоМереПоступления), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.РезервироватьНаСкладеИзЗаблокированных), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.РезервироватьПоМереПоступленияИзЗаблокированных))
И РаспределениеЗапасов.СостояниеЗапаса В (ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличииОжидаетсяРазблокировка), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличииНеПодлежитРазблокировке), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ОжидаетсяКПоступлению), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ОжидаетсяКПоступлениюСБлокировкой), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ОжидаетсяКПоступлениюНеПодлежитРазблокировке))
ТОГДА РаспределениеЗапасов.Количество
ИНАЧЕ 0
КОНЕЦ) КАК ВРезерве

но у этого рег. сведений нет Периода, - даты, на какую срез (для решения этой проблемы я использовал РаспределениеЗапасов.заказнаотгрузку.дата<=&д2). И речь про то, чтобы получить именно то что осталось вне резервов - остатки "живых" (неотгруженных) заказов, которые не вошли в резервы. То, что можно посмотреть в СостоянииВыполнения в каждом конкретном заказе. Методом тыка я нашел эти остатки так (но, вероятно, это не точно):
....
среднее(ЗапасыИпотребностиОстатки.кобеспечениюОстаток +ЗапасыИпотребностиОстатки.РезервироватьнаскладеОстаток + ЗапасыИпотребностиОстатки.РезервироватьПоМереПоступленияОстаток) КАК ЗаказыПокупателей
ИЗ
РегистрСведений.РаспределениеЗапасов КАК РаспределениеЗапасов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗапасыИПотребности.Остатки(&д2
,
Склад ССЫЛКА Справочник.Склады
И Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)) КАК ЗапасыИпотребностиОстатки
ПО (РаспределениеЗапасов.Номенклатура = ЗапасыИпотребностиОстатки.Номенклатура)
Для отправки сообщения требуется регистрация/авторизация

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот