gifts2017

УТ 11.1 Простые примеры: Округлять автоматическую скидку до целого рубля по итогу

Опубликовал Юрий Зайцев (Yury1001) в раздел Программирование - Практика программирования

Или сдача без копеек

Пролог (в блоге)

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


Решение:

После расчёта скидки, отыскать строку с наибольшей суммой и подправить её на число копеек в итого.

Для этого в модуле формы документа Реализация товаров и услуг, находим процедуру РассчитатьСкидкиНаценкиНаСервере и вставляем кусок кода после расчёта скидок, но перед обновлением итоговых сумм, например, перед строкой

Объект.СкидкиРассчитаны = Истина;

 

Текст, на рисунке он не помещается, можно скопировать отсюда:

текИтог = Объект.Товары.Итог("СуммаСНДС");
Простить = текИтог % 1;
Если Простить > 0 Тогда
	текСумма = 0;
	максСтрока = -1;
	Для Каждого Элемента из Объект.Товары Цикл
		Если Элемента.СуммаСНДС > текСумма Тогда
			текСумма = Элемента.СуммаСНДС;
			максСтрока = Элемента.НомерСтроки - 1;
		КонецЕсли;
	КонецЦикла;
	Если максСтрока  -1 Тогда
		Объект.Товары[максСтрока].СуммаСНДС = Объект.Товары[максСтрока].СуммаСНДС - Простить;
		Объект.Товары[максСтрока].СуммаАвтоматическойСкидки = 
			Объект.Товары[максСтрока].СуммаАвтоматическойСкидки + Простить;
		Объект.Товары[максСтрока].ПроцентАвтоматическойСкидки = 
			Окр(Объект.Товары[максСтрока].СуммаАвтоматическойСкидки / 
			(Объект.Товары[максСтрока].Количество * Объект.Товары[максСтрока].Цена) * 100, 2);
		СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект);
		ТекПроцентНДС = ЦенообразованиеКлиентСервер.ПолучитьСтавкуНДСЧислом(Объект.Товары[максСтрока].СтавкаНДС);
		Объект.Товары[максСтрока].СуммаНДС = ЦенообразованиеКлиентСервер.РассчитатьСуммуНДС(Объект.Товары[максСтрока].Сумма, 
			ТекПроцентНДС, СтруктураПересчетаСуммы.ЦенаВключаетНДС);
		Объект.Товары[максСтрока].Сумма = Объект.Товары[максСтрока].СуммаСНДС - 
			?(СтруктураПересчетаСуммы.ЦенаВключаетНДС, 0, Объект.Товары[максСтрока].СуммаНДС);
	КонецЕсли;                                                                             
КонецЕсли;

Теперь при записи или по команде пользователя «Рассчитать скидки» будет выполняться корректировка копеек.


См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Уткаев (AndrewUtkaev) 16.07.14 13:00
Почему бы не пользоваться стандартным функционалом?
2. Юрий Зайцев (Yury1001) 16.07.14 13:58
3. Михаил (cjeymik) 17.07.14 09:15
Делаем скидку с типом "Округление суммы документа" в большую сторону, добавляем ее в группу совместного применения (сложение) с нашей автоматической скидкой, всё...
4. Юрий Зайцев (Yury1001) 18.07.14 15:55
(3) cjeymik, (1) AndrewUtkaev, не получается - нужно округлять в сторону клиента!?
Прикрепленные файлы:
5. Sergey (Serdgio) 17.02.15 14:13
Только вот это условие странное: Если максСтрока -1 Тогда
Может, здесь на неравенство проверять нужно?
6. виктор Р. (badrvic) 25.03.15 12:32
Попробовал скидку с типом "Округление суммы документа"
Удивительные вообще детали работы с этими скидками. есть скидки 2, 7,13%.
2% и 13% округляются и сумма документа в результате ровная
7% не округляются никак, копейки также висят. (сама по себе скидка действует)

Плюс еще не работает округление суммы документа, когда используются ручные скидки.сумма в результате получается с копейками.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа