Вот здесь поподробнее.
Ну насколько я понимаю, сейчас загрузив чек возврата кассир видит то, что записано в БД. Соответственно если в БД записать уже пересчитанные скидки, то и при возврате будет все правильно.
Я видимо мутно объясняю, попробую с картинками
Вот что видит кассир при регистрации и возврате:
http://proformu.spb.ru/img/dancy/dancy-now.pngПри загрузке в товароучетку я привел цены к такому виду:
http://proformu.spb.ru/img/dancy/check.png1. Округлил по правилам математики до 10 рублей суммы. В итоге первая
позиция стала 4500 - 225 = 4275
С округлением 4280
Остальные позиции аналогично.
2. Сравнил сумму чека и сумму товаров. Разница тут всегда или 0 или 10р (поскольку округляю до 10).
3. В данном случае разница была -10р и я "вычел" ее из самого дорогого товара (в данном случае из первого и он стал 4280).
Если бы пересчет скидок с учетом округления происходил во время регистрации, то в позиции "1" на первой картинке (
http://proformu.spb.ru/img/dancy/dancy-now.png)
стояло бы 370, а в позиции "2" - 20
И при возврате, кассир смотрит сумму в этих полях.
Алгоритм округления скидок вообщем-то может быть любой, главное чтоб сложив "итого" по каждой строке чека получалась та сумма, которая стоит в "к оплате".