Порядок чеков коррекции в УТ 11.5

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

В типовой код пробития чеков в модуле ПодключаемоеОборудованиеДрайверКлиент вмешиваться довольно сложно:

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

Но придется. Использую только вставки (три штуки) с оператором Перейти:

&ИзменениеИКонтроль("ПечатьЧекаКоррекции")
Асинх Функция бс_ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
	
	Попытка     
		
#Вставка                   
	Результат = Неопределено;
	Перейти ~СторноОперации;
	~Операция:     
	Если НЕ Результат Тогда Перейти ~КонецОпераций; КонецЕсли;
#КонецВставки
		Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда
		...
		КонецЕсли;
		
#Вставка     
	Перейти ~КонецОпераций;
	~СторноОперации:
#КонецВставки
		Если Результат И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда      
		...
		КонецЕсли; 
#Вставка     
	Перейти ~Операция;
	~КонецОпераций:
#КонецВставки
		
		Если Результат Тогда  
			РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);  
		Иначе                 
			РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера);
		КонецЕсли;
		
	Исключение            
		РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	КонецПопытки;
	
	Возврат РезультатВыполнения; 
	
КонецФункции

Проверяем в 1С, порядок операций изменился:

Как работает оператор безусловного перехода можно увидеть в приложенном GIF:

Среда: УТ 11.5.19.74 Объем: 3 час.

fixin

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

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

комментария 3

  1. rzd:

    Можно и безе «Перейти»

    Условие = 0;
    Пока Условие<2 Цикл
    Если Условие=1 Тогда
    Сообщить("1");
    Иначе
    Сообщить("2");
    КонецЕсли;
    Условие = Условие+1;
    КонецЦикла;

    В любом случае, и то и другое — плохой код

    • Нельзя получить хороший код, изменяя плохой код.
      С циклами будет менее понятно и больше вставок (возможно).

  1. 12.12.2024

    […] я решал задачу по изменению порядка печати чеков коррекции, столкнулся с одним интересным нюансом построения […]

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

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