Имя: Пароль:
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
Ну тогда отсортируйте сначала заказы по количеству товаров.
А в целом решал подобную задачу для запуска заказов на производство, которые обеспечены материалами. Только дороговато это было...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший