Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Разбивка суммы производных чисел на части
 
Всем привет!
Возникла такая проблема: есть два товара - их могут брать как по одному, так и вместе. Если вместе, то на один из них цена будет дешевле. В итоговой сумме по количеству не делит.
Исходники - сумма по отдельности и вместе
Пробовал разбивать циклом, но нужно постоянно перебирать условия (+1, +1, +1...), а так же возникают двойные варианты
Возможно у кого есть какие идеи, как решить без цикла или проще.
Спасибо!
 
Можно решить через "поиск решения", необходимо определится:
1. Решение должно быть целочисленным?
2. Нужно ли решать оптимизационную задачу: максимальное количество самого дешёвого товара или подойдет любое решение?
3. Товаров только 2 или их может быть существенно больше?
Изменено: MCH - 10 Апр 2018 12:03:07
 
MCH,
1) да, только целые результаты (сумма=количество*цена), они кратные цене за единицу
2) в данном случае интересуют все комбинации (с учётом того, что на практике числа не целые и совпадений при переборе должно быть немного)
3) в данном примере по два товара, их может быть до 5-ти
 
(подниму тему повыше)
 
... непонятно только, что такое "период 1", "период 2".
Изменено: AB1 - 17 Апр 2018 11:11:21
 
AB1, периоды - это недели, например (продажи за 1 неделю (период), продажи за 2 неделю (период)
 
Crewcat,
1. А товары в группах могут пересекаться?
Например, группы товаров A+B и A+B+C пересекаются.
Одно дело считать 2 варианта, а другое - множество.
2. Если в группе может быть до 5 товаров, то скидка предоставляется только на один из них?
3. Если у товара 2 цены: 10 и 8, а сумма 80, то как определить количество - это 10*8 или 8*10?
Изменено: AB1 - 11 Апр 2018 15:47:08
 
AB1,
1) нет, пересекаться не могут; скидка действует только если берут все 2 или 5 вместе (если берут 4 вместе, например, а потом отдельно 5-ый, то нету)
2) скидка идёт только на один товар из всех
3) для этого красным выделил *1 период, вариант может быть не один
 
1. Я немного о другом. Например, у вас проводятся в одном периоде две акции, и в обеих участвуют одинаковые товары. Т.е. в данном случае возможно наличие трех цен на один товар в течение одного периода.
3. Получается, что нужно выводить все варианты комбинаций, при которых можно получить исходную сумму?
Изменено: AB1 - 12 Апр 2018 11:46:37
 
AB1,такого нету
 
{подниму тему повыше, всё ещё актуально}
 
Цитата
Crewcat написал:
{подниму тему повыше, всё ещё актуально}
Всё ещё актуально более детальное описание и пример данных с расшифровкой что означает 1 период, *1 период (или), 2 период. Почему в формуле в К12 присутствует чётность, если разговор идёт покупался ли товар В вместе с товаром А в определённый (какой?) период и как это обозначается в исходных данных.
 
Андрей VG, период=неделя (к примеру), писал выше

1) вот файл с дополнительным описанием
2) чётностью в формулах я перебирал, делится ли сумма на розничную цену целым числом (если нет, то явно в сумме товар по двум ценам)
Изменено: Crewcat - 13 Апр 2018 10:47:46
 
Цитата
Crewcat написал:
вот файл с дополнительным описанием
Спасибо. Хотя это тоже запутывает. По существу задача состоит в решении Линейного Диофантового уравнения для товара В, если он попадает в неделю скидок. И из вариантов решения отбираются такие, что количество В со скидкой не больше количества А.
Честно говоря. не уверен, что это можно решить формулами. Хотя, может виртуозы формулисты и возьмутся. Тут такие зубры бродят :)
 
Цитата
Crewcat написал:
на практике числа не целые
так целые или не целые? Огромная разница.
F1 творит чудеса
 
Данные - Поиск решения. Сделал с ограничением A>promo, но оно не обязательно.
F1 творит чудеса
 
Написал макрос. Тщательно не тестировал, возможны ошибки. Проверки на максимальное количество строк при выводе на листе amount нет, поэтому нужно обращать на это внимание.

На листе price_1 размещены цены за единицу товара при продаже без групп.
На листе price_2 размещены цены на товары в группах, в которых один со скидкой.
Максимальное количество наименований товаров в группе - 5.

На листе sum размещены суммы продаж каждого товара за период.
На листе amount выводятся результаты в 12 столбцах: 5*2 - для товаров, 1*2 - для группы.
"*" отмечаются периоды, в которых размещены несколько комбинаций продаж для определенной группы товаров.
Если у товаров из группы отсутствуют продажи (лист sum) в определенном периоде, значит они не выводятся.
Если определено, что товары из группы вместе не продавались, то количество раздельных продаж выводится на строке без добавления наименований товаров, которых нет в группе.
Товары, которые не участвуют в группах, выводятся отдельно от товаров, которые продавались в группах.
Изменено: AB1 - 16 Апр 2018 12:00:55
 
Максим Зеленский, верно(
числа могут быть как целые, так и не целые
если не целые - поиск решения не находит
 
AB1,а если взять всё-таки только два товара, а не пять?
не разбивает, если числа не целые
 
Цитата
Crewcat написал:
если не целые - поиск решения не находит
??
а вот не верю. Поиск решения без ограничения по целым числам проще и быстрее.
Если могут быть дробные числа, нужно в настройках поиска решения убрать ограничение "целого числа"
F1 творит чудеса
 
Crewcat,
Переделал макрос на работу только с двумя товарами в группе.
Ошибок, связанных с некорректной работой макроса с дробными числами, не обнаружил.
Пожалуйста, приведите пример (желательно в моем файле).
 
AB1,
 
Максим Зеленский,
 
Добавил пропуск ошибок, вроде считает верно.
Лишние строки при выводе информации в будущем уберу.
 
AB1, спасибо!
1) нашёл проблему: макрос игнорирует подсчёт (sum), если в периоде А - пусто (=0)
2) возможно ли отобразить сумму в таком виде
Screenshot-_1.png (4.81 КБ)
Изменено: Crewcat - 16 Апр 2018 16:23:31
 
2. Вы имеете в виду, что информацию нужно перенести с amount на лист sum и перевернуть? Или перевернуть, но оставить на листе amount?

Удалил пустые строки. Те данные, которые вы использовали в последний раз обрабатываются корректно.
Что касается других вариантов исходных данных, не тестировал - к сожалению, сейчас мало свободного времени.
Изменено: AB1 - 17 Апр 2018 11:16:21
 
Crewcat, во-первых, вторая неделя в вашем примере не имеет решения с целочисленным количеством товара, так как $24 для B ну никак не получить сложением 14*x и 16,99*y.
Во-вторых, я же написал:
Цитата
Максим Зеленский написал:
Сделал с ограничением A>promo, но оно не обязательно.
Изменил во второй неделе суму по B на 28, удалил ограничение A>promo, и все заработало.
Если удалить ограничение на целочисленное количество товара, то тогда и для 24 найдет. Ничего сложного
F1 творит чудеса
 
AB1,перевернуть, но оставить на листе amount
всё работает верно, супер, спасибо
 
Максим Зеленский, спасибо, разобрался)
 
Crewcat, вчера неверно понял задачу, сейчас разобрался, как мне кажется)
Страницы: 1 2 След.
Читают тему (гостей: 2)