Условие цикла #562754


#0 by Collector
Здравствуйте, Уважаемые! Подскажите, какое правильное условие для цикла написать, чтобы 1С начала создавать второй, третий и тд документ после того, как набирается ПланВес?
#1 by vicof
на г-код можно выкладывать
#2 by Mort
Блок-схемы себе нарисуй.
#3 by vicof
Пока Вес <= ПланВес Цикл     Если Вес <= ПланВес Тогда вот это зачем? Если ТекСтрока.Отметка = Истина Тогда вот это зачем?
#4 by lxs
+1
#5 by Axel2009
тут не условие нужно, а цикл переписывать.
#6 by Reset
+1
#7 by rutony
почти полный аналог задачек на списание по партиям для спеца платформы
#8 by Collector
По любому так не оставишь)) Не могли бы вы, хоть направить в правильную сторону ? А есть решение? Можно взглянуть ?
#9 by vicof
ты бы хоть задачу нормально описал
#10 by Collector
а что не нормального в моем описании? мне кажется все предельно ясно :-
#11 by rutony
Оно фактически отсутствует...
#12 by Axel2009
в текущем цикле я вижу только то что из существующих документов создается один, причем если веса плана больше чем суммарный вес в табличке, тогда тупо еще раз по тем же документикам создаем строчки, ну чтобы план забить и все.
#13 by Sammo
Если правильно понимаю, есть некая таблица значений с весами. Нужно раскидать по документам, причем задача оптимального подбора не стоит (максимальное соответсвие вес и план вес). Тогда простой обход таблицы с заполнением документа. Когда вес становится больше план веса - создаем следующий документ. Т.е. 1 цикл и 1 условие + обработка после выхода из цикла.
#14 by Collector
Что за обработка?
#15 by vicof
эмм...твоя
#16 by Axel2009
"обработка после выхода из цикла" подразумевается код записи документа, когда вышли из цикла.. псц
#17 by Sammo
при его наличии :)
#18 by Reset
Это очередной виток сумрака, когда 1) ТС не описал задачу 2) Аналитики построили предположения 3) ТС выясняет условие своей задачи по предположениям у аналитиков?
#19 by ice777
Для Каждого ТекСтрока из ТаблицаДокументов Цикл )
#20 by Collector
Вот как у меня получилось:
#21 by Axel2009
а если будет на какойто строке так, что планвес = 2000 вес = 1990 текстрока.вес = 500 то в документ попадет 2490 вес. это нормально?
#22 by Collector
Согласен, не нормально. Есть варианты ?
#23 by Axel2009
ну проверяй общий вес + текущий вес перед добавлением строки
#24 by Collector
Изменил условие. стало вроде лучше.
#25 by Collector
Но все равно не то получается. Выходит если Вес=50 ПланВес= 100 ТекСтрока.Вес=60, то он создаст новый документ, хотя за ним следуют, допустим 3 документа, по которым ТекСтрока.Вес=10, надо чтобы эти тоже попали в первый.. Т.е. документом по возможности набирать ПланВес.
#26 by Sammo
а вот это уже анализ и оптимальное заполнение. Это совершенно другая задача и решается несколько по другому...
#27 by Collector
Несколько по другому? Не подскажите алгоритм ?
#28 by hhhh
ну вот тут
#29 by Axel2009
оптимального алгоритма не существует =) из пример ВесПлан = 100; веса: 50 60 10 20 10 50 точнее существует конечно, но это кросс джоин саму на себя столько раз, сколько записей в таблице, но это очень долгий путь
#30 by Sammo
Самый простой, и мягко говоря, не очень оптимальный вариант: 1. Сортировать вес по убыванию. 2. Документы не сохранять до конца обработки. 3. Сначала пробуем вес добавить во все уже существующие документы, и только если никуда не влез - пихаем в новый. Но в общем случае результат будет лучше.
#31 by Jaffar
а ничего, что Объем не принимает никакого значения, отличного от 0? и происхождение лимитов ПланВес и ПланОбъем не понятно. надеюсь - это не глобальные переменные? можно их параметрами передать, если уж считать на сервере.
#32 by Collector
На тот момент когда код скинул, объем еще действительно не учавствовал. А ПланВес и ПланОбъем - это значения полей ввода на форме... Юзер сам их туда проставляет..
#33 by Collector
В общем, получилось вот так:
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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