Имя: Пароль:
1C
1С v8
Заказы и отгрузка
,
0 neomarat
 
01.06.12
17:45
Теоретическая задача:
Есть Н-ое количество заказов.
Есть какое-то количество номенклатуры на складе.
Как из имеющегося количества на складе скомплектовать заказы так, чтобы отгрузить максимально возможное их количество. Т.е. если в заказе не хватает хоть одной позиции - он не может быть отгружен.
Кто-то уже наверняка занимался такой задачей.
На ум приходит самый простой путь - берем заказы - выстраиваем их по количеству от большего к меньшему и пытаемся наполнить - если не хватает - выкидываем. Но такой подход - не оптимален - это понятно.
Какие еще есть предложения?
1 neomarat
 
01.06.12
17:45
+ (0) Сумма заказов - значения не имеет
2 Нуф-Нуф
 
01.06.12
17:46
посади узбека-оператора. пусть анализирует
3 mikecool
 
01.06.12
17:46
теорию графов тебе в руки
4 shuhard
 
01.06.12
17:48
5 neomarat
 
01.06.12
17:49
(4) прикольно - дайте два!
6 neomarat
 
01.06.12
17:49
(2) узбек не справился ))
7 spu79
 
01.06.12
17:50
"чтобы отгрузить максимально возможное их количество." - тогда уж начинай анализ с самого маленького
8 spu79
 
01.06.12
17:50
(6) - тогда посадить такжика
9 neomarat
 
01.06.12
17:50
(3) жесть - всю читать? Помню толщину учебника - что внутри не помню
10 Irek-kazan
 
01.06.12
17:51
может для начала отбросить заказы которые изначально не подходят по кол-ву?
11 Irek-kazan
 
01.06.12
17:52
может так лучше сумма(цена*кол-во) -это вес, и отгружать сначала с максимальным весом?
12 neomarat
 
01.06.12
17:52
(10) - отличная мысль, спасибо
13 neomarat
 
01.06.12
17:53
(11) Цена пофиг
14 Alex S D
 
01.06.12
17:54
бардак у вас какой-то, обычно заказ должен быть отгружен клиенту в строго определенный срок
15 Irek-kazan
 
01.06.12
17:57
на ум только приходит перебор: создаются массивы заказ(кол-во по номенкл.1, кол-во по номенк.2, ...)
и массив склад(кол-во по номенкл.1, кол-во по номенк.2, ...) и сидишь тупо перебераешь вычитанием из массива склад массивов заказ
16 neomarat
 
01.06.12
17:57
(14) не мы укладываемся в сроки полюбому - там один контракт - просто номенклатуры больше чем дофига и она разбита на заказы от дочек предприятия, но номенклатура изготавливается поставщиком вразнобой. Нет смысла тащить на свой склад номенклатуру, которую пока не сможем отгрузить.
17 Irek-kazan
 
01.06.12
17:57
(15) но это как-то по тупому
18 neomarat
 
01.06.12
17:58
(15) решений может быть несколько при таком подходе - и не факт что первый перебор даст оптимальное решение
19 Irek-kazan
 
01.06.12
18:01
подай сюда v8: Russian Code Cup, вторая квалификация на второй этап
20 Mickeleangelo
 
01.06.12
18:45
1. Отобрать теоретически отгружаемые заказы (как советуют в (10))
2. Отсортировать их по приоритетам (кол-во, кол-во строк, сумма, важность клиента, срок выполнения, давность, комплексная оценка приоритета с коэффициентами)
3. Перебирать варианты рекурсивно в глубину или в ширину: 1, 1+2, 1+2+3, 1+2+4, 1+3, 1+3+4, 2+3, 2+4 …
4. Запоминать лучший вариант (по сумме приоритетов включенных заказов)
5. Остановиться по одному или нескольким из критериев: кол-во итераций, время подбора, % отгружаемых заказов (по количеству или приоритетам). Или полный перебор.
6. Если был поиск в ширину, то добить лучший вариант оставшимися заказами, пройдя по ним один раз.

ИМХО, для бизнеса и с учетом производительности 1С в таких задачах не надо искать идеальный вариант, а надо относительно быстро подбирать хороший вариант, приближенный к оптимальному, плюс давать одному умному менеджеру возможность ручной корректировки.
21 ILM
 
гуру
01.06.12
19:12
(0) Простите, но у вас хромает логика в постановке задачи.
[Как из имеющегося количества на складе скомплектовать заказы так, чтобы отгрузить максимально возможное их количество. Т.е. если в заказе не хватает хоть одной позиции - он не может быть отгружен.]
Во-первых, каждый заказ имеет разный уровень пользы, которую он наносит клиенту и компании.
Во-вторых, максимально освобождая склад, вы теряете продажи, за счет того что отсутствуют позиции для продажи. Например, некоторый комплект можно продать дороже, чем что-то одно из комплекта, так как клиенту нужен комплект.
В-третьих, во главу угла поставлены поблемы склад и доставки, а не клиента.
В-четвертых, вы принимаете заказы, которые не можете выполнить. Например, одна и таже позиция находится в разных заказов. У одного клиента общий заказ на 10 тыс, у другого на 1 тыс. Но первому не хватает чего-то одного, а у второо есть все в наличие. По логике вы будете отгружать второму. А важнее, все-таки первому. И тд и тп.

А ваша задача решается системой линейных уровнений, с максимумом веса заказа. Но вот за финансовый результат вашей компании, через один-два года работы по вашему алгоритму, я не поручусь. Даже поочередное чередование заказовна выполненение сначала четные, потом нечетные. Даст ошибок в несколько раз меньше, так как будет в 50% случаев давать веное решение.

Удачи
22 neomarat
 
01.06.12
20:07
(21) все нормально с логикой.
Во-первых - это один большой контракт для одного контрагента, но имеет много разных заказов для подразделений контрагента. И контрагенту без разницы в какой последовательности он получит эти заказы - главное заказ должен быть укомплектован полностью.
Во-вторых - эта номенклатура идет только этому контрагенту иее нельзя продать другим.
В-четвертых - мы принимаем этот заказ на срок, который будет соблюден, просто поставщик делает эту номенклатуру в соответствии со своими мощностями и к сроку все будет готово, но забирать ее мы можем как захотим.

Но все же отгружать заказы надо не в последний момент, а плавно.

Поэтому главное здесь - не увеличить стоимость замораживаемых денег и аренду складов из-за заказов, которые мы не можем отгрузить.
Как-то так.
23 neomarat
 
01.06.12
20:10
(20) Единственный минус - вариантов будет так много, что 1С задумается на год.
24 neomarat
 
01.06.12
20:11
(21) какая система линейных уранений? подтолкните куда копать?
25 ILM
 
гуру
01.06.12
20:13
Тогда простая схема. Отгружайте первый укомплектованный заказ. Затем второй и т.д. Вы отгружаете заказы по мере ввода. Самый старый заказ должен быть выполнен первым потом следующий.
26 ILM
 
гуру
01.06.12
20:14
Никакого СЛАУ не надо.
27 ILM
 
гуру
01.06.12
20:17
Похоже на госзаказ. Все равно независимо от отдельных заказов, важно выполнение всего контракта. Поэтому отгружайте комлекты по мере готовности. У вас будет возможность выдать те заказы, которые обеспечены, потом те которым не хватает малой части товара, потом те кому не хватает больше и до тех которых совсем нет в наличии. Постепенно выполняя заказ за заказом, вы фокусируетесь в одном заказе. Вам не приходится менять приоритет заказов.
28 neomarat
 
01.06.12
20:24
(27) но тут еще важно отгрузить как можно больше (по количеству номенклатуры) поскольку оплата происходит пропорционально отгруженному количеству. Но только полностью укомплектованных заказов. В том и вся соль.
29 ILM
 
гуру
01.06.12
20:26
Уже писал  [Отгружайте первый укомплектованный заказ. Затем второй и т.д.]
30 neomarat
 
01.06.12
20:28
(29) например, укомплектовали первый, в нем есть номенклатура1 и он состоит из 5 позиций.
Далее, пытаемся отгрузить второй заказ, в нем тоже есть номенклатура1 и он состоит из 25 позиций, но номенклатуры1 больше нет, поскольку мы ее отгрузили в первом, а остальные позиции есть.

На лицо проблема.
31 dklushin
 
01.06.12
23:40
предлагаю алгоритм (сильно не пинать, математики)

Расчитать для каждого заказа что-то типа выгодности формирования.

Выгода = (ВесТовара1ВЗаказе/ВесТовара1НаСкладе + ВесТовара2ВЗаказе/ВесТовара2НаСкладе + ... + ВесТовараNВЗаказе/ВесТовараNНаСкладе)

Где ВесТовараNВЗаказе = КоличествоТовараNВЗаказе/ОбщееКоличествоВсехТоваровВЗаказе
   ВесТовараNНаСкладе = КоличествоТовараNНаСкладе/ОбщееКоличествоВсехТоваровНаСкладе

Сформировать заказ, потом для остатков заказов и товаров повторить операцию.

То есть идея такова, что если в заказе преобладают над другими в процентном отношении товары, которых дохрена на складе, то его формировать первым. Потом считать все соотношения заново и так далее.. интересно было бы протестить что получится на реальных заказах..
32 dklushin
 
02.06.12
01:00
но метод который будет 100% работать это перебор, если заранее грамонто сформировать таблицы с ид-шниками документов и количеством товара на складе и требуемого, то будет вполне терпимо работать, ну конечно изначально выкинуть сначала те заказы, которые при любом раскладе не формируются.
33 neomarat
 
02.06.12
01:50
(31)Дима привет.
Алгоритм интересный, но первый же придуманный пример дает сбой в этом алгоритме
Заказ 1:
Ном1 1шт в заказе - 5 шт на складе
Ном2 2шт в заказе - 3 шт на складе

Заказ 2:
Ном1 5шт в заказе - 5 шт на складе

Формула дает, что выгоднее отгрузить первый заказ (коэф - 2,28) против второго (коэф 2).

На самом деле выгоднее отгрузить второй
34 neomarat
 
02.06.12
01:52
(32) время работы перебора к сожалению будет расти экспотенциально с ростом количеству заказов и номенклатуры.
35 neomarat
 
02.06.12
01:53
Теперь понимаю, почему в УПП нет вменяемой системы загрузки оборудования
36 hhhh
 
02.06.12
01:58
(32) всё-таки это какое-то дебильное требование. Нужно отгружать не максимальное количество, а делать равномерные отгрузки в течение месяца.

1. Допустим, если в один день вы отгружаете 100 позиций, в другой 10, а в третретий опять 100. Как вы будете плпнировать транспорт в этом случае? Грузчики один день будут в мыле, другой день простаивают. И не только у вас, и у контрагента будет тоже полнейший бардак. Лучше отгружать равномерно: 3 раза по 70.
37 neomarat
 
02.06.12
02:04
(36) нет - это не лучшее решение.
Во-первых - для этого придется снимать складские площади (дополнительные деньги)
Во-вторых - морозить деньги на несколько дней (а если они лежат на депозите в это время - то зарабатывают, а поскольку суммы огромные, сами понимаете)
В-третьих - да пофиг на грузчиков - быть в мыле это их работа, а транспорт у нас свой.
38 neomarat
 
02.06.12
02:06
(36) плюс в чем бардак? Накладные есть - кладовщик собирает, грузчики грузят, машины возят. Чем это отличается от обычной работы?
39 hhhh
 
02.06.12
02:17
(38) машины будут простаивать, на складе не пойми чего и в каком углу чего лежит, если вы в последний момент будете принимать решение об отгрузке и в постоянном аврале со всего склада собирать товар. Это приведет к неэффективному использованию складских площадей и на огромные суммы.
40 neomarat
 
02.06.12
02:30
(39)нет - не правильно.
Формируя эти заказы покупателей, мы по сути принимаем решение что в итоге заберем у поставщиков, чтобы не затаривать наши склады - так что времени вагон, а не с колес все.
Пока машины стоят - кушать не просят - это своего рода экономия и лучше чем гонять их полупустыми.
Когда склад затарен - и все наваливается уже не пойми куда - вот тогда вероятность ошибки действительно растет, тут же наоборот свободные площади и все будет лежать на местах, хотя и не долго.
41 ILM
 
гуру
02.06.12
08:45
Ну тогда отсортируйте сначала заказы по количеству товаров.
А в целом решал подобную задачу для запуска заказов на производство, которые обеспечены материалами. Только дороговато это было...