Использование принтера чеков для отладки чеков на примере неправильной ставки НДС при авансе. УНФ 3.0

Я решал задачу, почему аванс по предоплате печатается без НДС.

Решил использовать принтер чеков. Для этого нужно сделать две заплатки.

В модуле ОборудованиеЧекопечатающиеУстройства:

&Вместо("ПодготовитьДанныеОперации")
Функция дор_ПодготовитьДанныеОперации(ПараметрыПодключения, Команда, ПараметрыОперации)

	ЭтоПринтерЧеков = Команда = "OpenShift" ИЛИ Команда = "CloseShift" ИЛИ Команда = "CheckFiscalization" И
    ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков; 
	Если ЭтоПринтерЧеков Тогда
		//25-01-16 Осипов Разрешаем фискализацию на принтерах чеков                      
		ПараметрыОперации.Вставить("АвтономнаяККТ", истина);
	КонецЕсли;
		
	ДанныеОперации = ПродолжитьВызов(ПараметрыПодключения, Команда, ПараметрыОперации);     
	
	Если ЭтоПринтерЧеков И ДанныеОперации.Свойство("ТекстЧека") Тогда
		//25-01-16 Печатаем текст чека
		Сообщить(Символы.ПС + Символы.ПС + ДанныеОперации.ТекстЧека);
	КонецЕсли;
	
	Возврат ДанныеОперации;
КонецФункции

В форме ФормаРМК обработки РабочееМестоКассира:

&НаСервереБезКонтекста
&Вместо("КассаПоддерживаетОперацииПоСНОИзСпискаПокупок")
Функция дор_КассаПоддерживаетОперацииПоСНОИзСпискаПокупок(ИдентификаторУстройства, СНОИзСпискаПокупок)
	//Чтобы на принтерах чеков не работал  этот контроль
	Если ИдентификаторУстройства.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ПринтерЧеков Тогда
		Результат = Новый Структура("Ошибка,ТекстОшибки", Ложь, "");
		Результат.Ошибка = ложь;
		Возврат Результат;
	КонецЕсли;
	Результат = ПродолжитьВызов(ИдентификаторУстройства, СНОИзСпискаПокупок);
	Возврат Результат;
КонецФункции

Единственно, в кассе ККМ принтер чеков почему-то можно прописать только как «Сервис оборудования»:

Можно было использовать и кассу без подключения (без доработок), но там я не видел чек. Хотя, как показывает задача, можно было обойтись и без визуализации чека.

Этот текст чека заплатка выдает в окно сообщений. Видно, что ставка без НДС передается уже в команду «CheckFiscalization», т.е. задается где-то раньше:

Для решения задачи в функции видим, что в ОборудованиеЧекопечатающиеУстройства.ПодготовитьДанныеОперации в массиве ПараметрыОперации.ПозицииЧека поле СтавкаНДС не заполнена.

Ставка НДС заполняется в методе ОборудованиеЧекопечатающиеУстройства.ДополнитьТоварамиПараметрыПриПробитииЧека:

Ставка получается так:

Ставка НСД 5% выглядит так:

Как видим, здесь ошибка — не указана ставка НДС 5%. Исправляем патчем модуля УправлениеНебольшойФирмойПовтИсп:

&Вместо("ПолучитьЗначениеСтавкиНДСДляККТ")
Функция дор_ПолучитьЗначениеСтавкиНДСДляККТ(СтавкаНДС, ЭтоАванс)
	
	//Исправляем в 1С не учитываются 5% на аванс
	
	Результат = ПродолжитьВызов(СтавкаНДС, ЭтоАванс);
	
	Если Результат = Неопределено И
		ЗначениеЗаполнено(СтавкаНДС) И Не СтавкаНДС.НеОблагается И ЭтоАванс Тогда
			Если СтавкаНДС.Ставка = 5 Тогда
				Результат = 105;
			ИначеЕсли СтавкаНДС.Ставка = 7 Тогда
				Результат = 107;
			КонецЕсли;
	КонецЕсли;
		
	Возврат Результат;
	
КонецФункции

После этого ставка НДС печатается нормально (на скрине ошибочная ставка, другого нет):

Налицо ошибка 1С. Причем в релизе, который якобы готов к ставке НДС 5%.

Среда: УНФ 3.0.10.178 Объем: 1.5 час

fixin

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

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

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

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