Отголоски автоматического округления. УТ 11.5

После ввода округления до копеек клиент обратился с проблемой, что сумма НДС в документе и печатной форме счета не совпадает. Проверил — в счете стояла некорректная сумма НДС, если перещелкнуть количество, то сумма НДС исправлялась.

Добавил код, чтобы перед типовой «Перед записью» пересчитывалась сумма НДС документа:

&НаКлиенте
Процедура дор_ПередЗаписьюПеред(Отказ, ПараметрыЗаписи)
	дор_К.ПересчитатьСуммыНДСПередЗаписью(ЭтаФорма); 
	ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры

Функция в общем клиентском модуле дор_К:

Функция ПересчитатьСуммыНДСПередЗаписью(Форма) Экспорт
	
	СтруктураДействий = Новый Структура;                                                                   
	СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Форма.Объект);
	СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
	СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
	
	//Чтобы пересчитывался итог                                         
	Попытка
		ЗависимыеРеквизиты = Форма.дор_ЗависимыеРеквизиты();
  		СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты);
	Исключение
	КонецПопытки;

	
	КэшированныеЗначения = Неопределено;
	
	Для Каждого Строка ИЗ Форма.Объект.Товары Цикл
		ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(Строка, СтруктураДействий, КэшированныеЗначения);
	КонецЦикла;       
	
КонецФункции        

UPD: в структуру действий не нужно вставлять пересчет суммы, иначе сумма пересчитывается, но без скидок. Нужно пересчитывать только сумму НДС и сумму с НДС.

UPD 2: в структуру действий нужно добавить пересчет зависимых реквизитов (тары), иначе итоги не пересчитываются. После открытия формы заново можно получить итоги, но так не показываются. При этом в форму документов нужно добавить экспортную функцию:

&НаСервере
Функция дор_ЗависимыеРеквизиты() Экспорт
	Возврат ЗависимыеРеквизиты();
КонецФункции

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

Потому что сумму НДС можно поменять вручную и поставить там любую сумму. Обработка корректирует этот недостаток.

Добавил корректировку в форму заказа покупателя и реализации. И дополнительно в КП.

UPD 2: Также добавил перед записью проверку цен и сумм, на всякий случай:

Процедура ПроверитьЦеныСуммыПередЗаписью(Форма, Отказ) Экспорт
	
	//Возврат;
	Сч = 0;
	Для Каждого Строка ИЗ Форма.Объект.Товары Цикл
		Сч = Сч + 1; 
		ТекСумма = Строка.Сумма;
		ТекСуммаСкидок = Строка.СуммаРучнойСкидки;
		РасчСумма1 = Окр(Строка.Цена * Строка.Количество - ТекСуммаСкидок, 2);
		РасчСумма2 = Окр(Строка.Цена * Строка.Количество, 2) - ТекСуммаСкидок;
		Если ТекСумма <> РасчСумма1 И ТекСумма <> РасчСумма2 Тогда
			Сообщить("В строке " +  Сч 
			+ " по товару: " + Строка.Номенклатура 
			+ " сумма: " + ТекСумма 
			+ " а должна быть: " + РасчСумма1 
			+ " или: " + РасчСумма2 
			+ ". Исправьте, изменения не записаны!");
			Отказ = истина;
		КонецЕсли;
	КонецЦикла;       
	
КонецПроцедуры

UPD 3: увы, округление до копеек не защищает нас от «гуляния» суммы НДС. На больших накладных все же копейки гуляют. Можно было изначально отказаться от доработок и сделать удобную возможность подгонять накладную под нужную сумму оплаты через скидку на нужное количество коппеек.

Среда: УТ 11.5.12.53. Объем 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 7

  1. rzd:

    Решение огонь. Открыли документ. Распечатали. Отдали клиенту. Нажали провести и закрыть. Суммы поменялись

    • в 1С можно распечатать только сохраненный документ. Корректировка срабатывает перед записью. Вы не уловили этот момент?

      • rzd:

        Ещё раз. Документ уже в базе. Сохраненный. Открыли, ничего не меняли. Распечатали. Нажали сохранить — и оппа включилась обработка изменений. Где гарантия, что данные не изменятся?

        • нет гарантии. если НДС был кривой, он подправится. А зачем нажимали сохранить?

          • 11:

            Потому что в 1С работают пользователи, а не программисты, они нажимают на кнопки не задумываясь. А хорошие программисты не допускают возможности сделать ошибку. Ваша реализация и правда ужасная

          • бывает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *