Как бы половчее избежать запроса в цикле? #728943


#0 by pessok
Коллеги, приветствую УТ 10.3, несколько допиленная под нужды. В данном случае говорим о розничной продаже в разрезе заказов. Дополнительно сделан РН ТоварыНаБорту, соответственно кладовщик при отгрузке "отправляет" в машину товары, и уже именно из этих товаров формируются документы продажи. Есть обработочка, которая по списку заказов формирует ЧекиККМ, а потом закрытие заказов, чтобы подчистить хвосты. Ранее списание происходило с того склада, который был указан кладовщиком при отправке на борт. Теперь нужно реализовать нечто типа метода списания ФИФО в разрезе организаций, чтобы ЧекККМ создавался на ту организацию, где сейчас есть остатки (т.е. на один заказ может быть N чеков от разных организаций, не спрашивайте зачем, это "узбекский учет" (: ) Притом надо учесть, что созданные ранее чеки тоже виртуально списывают партии (хотя на самом деле спишет уже только ОРП). Чеки создаются группой в одной транзакции, соответственно для каждого конкретного заказа нужно проверить остатки с учетом уже созданных ранее в этой транзакции чеков. Я представляю себе только запрос в цикле (при обходе заказов формируем запрос остатков), а как сделать красивее?
#1 by gerthog
Блин, два раза прочитал и ничего не понял(
#2 by spiller26
та же ботва. Кусок кода дайте.
#3 by pessok
щас, момент
#4 by H A D G E H O G s
Бред какой-то. Почему не РТУ + ПКО?
#5 by H A D G E H O G s
Заказ - это заказ покупателя? Как один заказ покупателя может быть на несколько организаций?
#6 by pessok
потому что хотят чеки. см. "узбекский учет". Продажа обезличена, но все равно ведется в разрезе заказов заказ один, а чеков по нему может быть несколько, на несколько разных организаций. Код, пока не дописан, т.к. я не уверен, что ход мыслей правильный. Пока писал все эти TODO уже, кажись, придумал относительно нормальное решение
#7 by batman69
мля..
#8 by pessok
+ более верное, на мой взгляд, решение появилось: сначала сформировать полную таблицу остатков, а потом уже непосредственно в ней при создании чеков уменьшать количество остатка по организации. И для этой таблице при обходе искать соответствия
#9 by H A D G E H O G s
Удачи вам, мистер Горски.
#10 by pessok
конкретнее, пожалуйста ;)
#11 by pessok
да кто спорит, что это жутота, но делать надо
#12 by spiller26
ВыборкаЗаказ = Запрос.Выполнить.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) Зачем группировка??? Зачем в запросе Итоги?
#13 by Garykom
Ух ты "рюкзачки"
#14 by pessok
это еще старый вариант просто, когда для одного заказа четко создавался один чек по организации заказа. Заполнять чеки удобнее по группировкам. Итоги не нужны, согласен
#15 by Garykom
Кстати запросы считают что то (когда + и -) медленно, они тока выборку быстро делают данных (по индексам) Так что самое быстрое и без запросов в цикле, это запросом строим таблицу(ы) и дальше по ней(ним) работаем
#16 by pessok
ну вот я так и подумал. в описал
#17 by spiller26
Можно сделать все в одном запросе, но долго "МассивЗаказов" загнать в ВТ_МассивЗаказов Функцию СформироватьТаблицуОстатковПартийПоЗаказам(МассивЗаказов) переработать в запрос
#18 by pessok
не можно, к сожалению. мне нужно проверять чеки, которые уже созданы в этой транзакции. Т.е: В массиве заказов два заказа. в каждом "Номенклатура А" - 1 шт У нас есть по одной партии этого товара на каждой из двух организаций. Соответственно после того, как создался первый чек остатки уже изменились, второй чек должен создаваться с учетом этого
#19 by pessok
посему оптимальное, на мой взгляд, сразу создать таблицу остатков и уже при создании чеков убирать из нее "списанную" чеком номенклатуру
#20 by Михаил Козлов
+. Как модуле партионного учета.
#21 by mdocs
набор умных слов. Сначала надо написать работающий код, потом думать об оптимизации. Если можете сразу все продумать оптимально, то это отлично. Если нет - то пишите хоть как нибудь но чтоб на выходе были верные данные.
#22 by pessok
вот это как раз таки плохой подход. надо сразу писать нормально. потому что в противной случае этот копрокод так и останется навсегда
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С