Страницы: 1
RSS
Разделить остатки товара между магазинами пропорционально их потребностям
 
Привет,

никак не могу решить задачу.
Есть целое число, которое нужно равномерно распределить по весу. Но с округлением это не работает, т.к. распределить нужно так же целыми числами.

Пример прилагаю, буду очень благодарен за помощь. В примере видна проблема. см. Столбец Разница.
Изменено: qaqae - 30.04.2020 19:14:26
 
Првильно написали - с округлением не работает. К какому магазину не добавь разницу, нарушится округление.
 
в этом и суть запроса, найти другое решение.  
 
Решение зависит от требуемого результата. Пока не расскажете, как делить хотите, то и решения не будет.
 
vikttur,
если разница положительная, то добавлять к первому минимальному перемещению.
еслм разница отрицательная, от отнимать у первого максимального к перемещения.
 
Можно распределять распределяемое последовательно по ячейкам. Тогда проблем с избытком или недостатком не будет.
 
Vas-1998, подскажете как ?
 

название темы:
полностью разделить остатки товара между магазинами пропорционально их потребностям

Код
=ОКРУГЛ(RC[-3]/СУММ(RC2:RC4)*RC1;0)+ЕСЛИ((RC[-3]=МАКС(RC2:RC4))*(СЧЁТЕСЛИ(RC2:RC[-3];RC[-3])=1);RC1-СУММ(ОКРУГЛ(RC2:RC4/СУММ(RC2:RC4)*RC1;0));)
Изменено: Ігор Гончаренко - 01.05.2020 13:47:30
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко,спасибо, все как нужно!
 
Ігор Гончаренко, подскажите, пожалуйста. добавил еще 1 магазин и получилось -1. И еще в одном примере остаток не распределился.
 
во-первых формула не моя
во вторых моя формула неправильно распределяет только для второго товара(((
предлагается из 2 имеющихся в первый магазин отправить -1, а в остальные 3 по 1 в итоге 2шт.. распределились по 4 магазинам))
если не идти на поводу у первого возникшего решения, а немного подумать, то можно написать универсальную формулу (еще и короче намного и без массива)
Код
=ОКРУГЛ(RC[-4]/СУММ(RC[-4]:RC5)*(RC1-ЕСЛИ(СТОЛБЕЦ()>6;СУММ(RC[-1]:RC6)));0)
Изменено: Ігор Гончаренко - 01.05.2020 14:56:51
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ладно, в любом случае спасибо, буду пытаться найти решение.
Формула ваша немного дополнена, но ек скелет (ваша формула) не затронута.  

Цитата
Ігор Гончаренко написал: можно написать универсальную формулу (еще и короче намного и без массива)
Да, так работает, а с распределением, когда у какого-то товара вес очень большой (выделил), что-то можно придумать? Буду очень благодарен.
 
Цитата
qaqae написал:
Vas-1998 , подскажете как ?
Как сделать я написал)
Реализация то совсем простая
 
Vas-1998, спасибо, решение схоже, с предложением от Ігор Гончаренко, но его масштабируемое. В любом случае пока не понимаю как решить проблему, когда у какого-то магазина большой существенно большее требование чем у других. Например такое.


Остаток товара на складеТребуется товара в магазин 1Требуется товара в магазин2Требуется товара в магазин 3
2054001
В этом случае он отдает весь остаток на складе ему, а требуется чтобы хотя бы по 1шт отдал и другим.  
 
ну, вот! наконец-то!
не:
у меня есть задача - решайте ее как хотите
а:
условия задачи следующие....

qaqae,
мои контакты в профиле. я напишу вам нужную формулу за символическую сумму, интересно - пишите
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
qaqae написал:
В этом случае он отдает весь остаток на складе ему, а требуется чтобы хотя бы по 1шт отдал и другим.  
Ну так отдайте заранее им по немногу а остальное распределяйте
 
Это пласт товаров в 5-6 тысяч. Каждый товар может в один магазин требоваться мало, а в другой много. При этом другой товар может наооборот требовать много в один магазин и мало в другой.  
 
Ігор Гончаренко, ок, свяжусь в личку.  
 
Таки решил задачу самостоятельно, не уверен, что кому-то понадобится, т.к. решение узкопрофилированное, но все же оставлю файл тут.
Всем спасибо за помощь.
Изменено: qaqae - 04.05.2020 13:35:28
Страницы: 1
Наверх