Уменьшение цены на 1 в заказе покупателя. #811634


#0 by progaoff
Загружаю из Экселя заказ покупателя, есть товар с 0 ценой, его нужно сделать с ценой 1 и уменьшить сумму документа на 1 или уменьшить цену любого товара на 1. Подскажите, как победить?
#1 by Lexey_
ну и где вот это " и уменьшить сумму документа на 1 или уменьшить цену любого товара на 1"?
#2 by progaoff
да вот это я тут и спросил собственно)
#3 by Ненавижу 1С
а если нет другого товара с ценой больше 1?
#4 by grigo
Запомни, сколько раз добавил, и вычти сумму из первых попавшихся  строк
#5 by 3achem
в два прохода, в первом счаитаешь сколько нулевых, во втором последовательно отнимаешь и скалдываешь.
#6 by progaoff
пример можно, приблизительно понимаю о чем речь, но в коде не представляю
#7 by dezss
для каждого стр из Заказ.Товары цикл
#8 by azernot
Судя по тому, что есть количество, рекомендую всё же запоминать не цены, а суммы. И далее уменьшать все суммы в каждой строке документа пропорционально отношению "СуммаКоррекции/СуммаДокументаДоПравки", а если возникает погрешность из-за округления относить её на строку с самой большой суммой.
#9 by Buster007
+ после каждого уменьшения суммы на 1 в строке, надо заново осуществлять поиск строки с максимальной ценой
#10 by azernot
Нет смысла, достаточно сравнивать и запоминать строку при добавлении :) Если все суммы уменьшаются на одинаковую пропорцию, то строка с самой большой суммой не изменится.
#11 by Buster007
строка с максимальной суммой может стать равна другим строкам
#12 by Buster007
либо высчитать долю каждой строки в общей сумме документа, и пропорционально этой доле распределить новые позиции с нулевой ценой, но это может привести к тому, что где-то что-то не так округлится и начнутся танцы с бубном )
#13 by azernot
Только если она и до уменьшения была равна. Но даже если она будет равна другим строкам, что с того? Округление мы корректируем в любой, первой попавшейся из этих "максимальных".
#14 by azernot
"Новые" строки (в смысле те, по которым цена была равна 0) - это точно такие же строки, как все остальные. И сумма по ним уменьшаются точно так же как и по остальным.
#15 by azernot
В общем, примерно такой код получается:
#16 by azernot
Правильнее наверное всё же так:
#17 by breezee
А зачем? Это же бред
#18 by mistеr
Загрузить, отсортировать по цене. Идти циклом с двух сторон, сверху прибавлять (пока цена нулевая), снизу отнимать. Если снизу встретили нулевую цену, возвращаемся в самый низ.
#19 by mistеr
...если снизу встретили нулевую *или единичную* цену...
#20 by Смотрящий
Бесплатное что то в заказ пихают. Календарик какой нить, а в 1С по 0 цене не внести - не проводит документ вот и мучаются
#21 by Михаил Козлов
Иногда бывает опция (настройка пользователя) разрешить нулевые цены в оптовой/розничной торговле.
#22 by Смотрящий
не указал тс конфу, может и есть там опция да не знают о ней
#23 by breezee
Разве это правильное решение? Можно как-то 100% скидкой обойтись. Да и сумму в документе не надо ни как отнимать, если уж решили так делать. Я бы сделал так: Зачем так сложно?  КоэффициентКорректировки = (ИтоговаяСуммаДокумента - СуммаКоррекции)/ИтоговаяСуммаДокумента; Можно же просто обойти все строки ТЧ(запросом или циклом не важно) накопить сумму по строкам где сумма <>1. Я вообще не вижу смысл ветки. Объясните, может есть какой-то глубинный смысл? Это же очень простой алгоритм..
#24 by breezee
Извините, мысль поплыла. В общем, можно просто просуммировать все строки где сумма <> 1 после обработки ТЧ и результат поместить в сумму документа.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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