Добрый день.
Имеется проблема, конфигурация УТ 11.1, но это к теме имеет косвенное отношение. Необходимо распределять скидку на товар для каждой позиции. Приведу пример.
Продаем Товар, 200 шт., цена Товара 0,31 р. в сумме 62 р. На всю сумму делаем скидку 31 р. Теперь нам надо определить цену Товара после применения скидки. 31/200 = 0,155. Округлить до 0,15 или 0,16 мы не можем, тогда итоговая сумма не будет равна 31 р. Мы должны разделить на несколько позиций, например
1. Товар цена: 0,15, количество 150, сумма 22,5 р.
2. Товар цена: 0,17, количество 50, сумма 8,5 р.
Итого: 31 р.

Проблема усложняется и тем, что количество товара может быть не целым, например 0,003.

Менять сумму скидки при невозможности разделения суммы со скидкой на количество товара без остатка не выйдет. Скидка может быть бонусами, покупатель будет против неполного списания их со счета.

В какую сторону копать для построения алгоритма?
---
Если вопрос заключается в том, как распределить сумму после применения скидки пропорционально количеству, при этом учесть разрядность результата, то используйте функцию "ОбщегоНазначения.РаспределитьСуммуПропорциональноКоэффициентам" (в зависимости от версии конфигурации функция может располагаться и в модуле "ОбщегоНазначенияКлиентСервер").
---
а зачем такие сложности?
просто в оплату пишите несколько сумм с разными типами
оплата рублями
оплата баллами
общая сумма должна равняться сумме документа(чека), и ничего разносить не надо
---
к сожалению надо, в подробности опускаться не хотелось бы, это не поможет решить задачу. Но суть такова что необходимо цену товара получить именно с учетом скидок.
---
хорошо,зайдем с другого края, у покупателя есть бонусов на 500 руб.
он оплачивает покупку на сумму 400 руб бонусами. по вашей логике цена товара уйдет в 0. как вы через бухгалтерию будете проводить продажу за 0 руб.? Налоговые органы не поймут!
---
вы зачем-то прицепились к скидке бонусом, проблема может быть и при обычной скидке. Под полным списанием со счета я не подразумевал возможность списания баллов больше или равным сумме документа. Вопрос о реализации в розницу товаров в подарок к теме вообще никакого отношения не имеет.
---
А как Вы видите разделение товара на несколько позиций? Вы подразумеваете, что после применения скидки строка товара в документе должна разбиться на две строки с разными ценами?
---
Конкретно в моем случае мне необходимо получить отдельную таблицу с рассчитанными распределениями сумм.
---
Извините, тогда я не понял Ваше первоначальных вопрос. Я подумал, что результат по описанному алгоритму Вам необходимо получить непосредственно в ТЧ "Товары" типовыми средствами.

А раз Вы заполняете некую собственную таблицу, при этом привели алгоритм расчета сумм, то в чем же тогда вопрос?
---
Я не привел алгоритма. Вопрос в том, какой метод использовать для разработки алгоритма? Я понимаю, что это частный случай равномерного распределения, но не уверен что не существует типовых методов для данной предметной области, не хотелось бы изобретать велосипед.
---
Если вопрос заключается в том, как распределить сумму после применения скидки пропорционально количеству, при этом учесть разрядность результата, то используйте функцию "ОбщегоНазначения.РаспределитьСуммуПропорциональноКоэффициентам" (в зависимости от версии конфигурации функция может располагаться и в модуле "ОбщегоНазначенияКлиентСервер").
---
Не подходит, функция кидает не распределенный остаток на максимальный элемент массива. Кинув предложенный в теме пример, получил 0.16 для всего массива и -0.84 для нулевого элемента, т.е. помимо неравномерного распределения, еще и цена может выйти отрицательной.
---
Прошу прощения, проверял на старой версии торговли. В последней эта функция сильно изменена и делает как раз то, что надо, огромное спасибо.
---
Сообщение было скрыто модератором.