Порядок чеков коррекции в УТ 11.5
При коррекции чеков клиенту захотелось, чтобы сначала шел чек сторно, потом чек новой откорректированной продажи.
В типовой код пробития чеков в модуле ПодключаемоеОборудованиеДрайверКлиент вмешиваться довольно сложно:
// Осуществляет печать чека коррекции. // Функция ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) Попытка Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда ... Результат = ОбъектДрайвера.СформироватьЧек(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); КонецЕсли; Если Результат И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда Результат = ОбъектДрайвера.СформироватьЧекКоррекции(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно, ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.НомерЧекаККТ, ПараметрыФискализацииСторно.НомерСменыККТ, ПараметрыФискализацииСторно.ФискальныйПризнак, ПараметрыФискализацииСторно.АдресСайтаПроверки); ... КонецЕсли; Если Результат Тогда РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); Иначе РезультатВыполнения = ПолучитьОшибкуДрайвера(ОбъектДрайвера); КонецЕсли; Исключение РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат РезультатВыполнения; КонецФункции
Но придется. Использую только вставки (три штуки) с оператором Перейти:
&ИзменениеИКонтроль("ПечатьЧекаКоррекции") Асинх Функция бс_ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации) Попытка #Вставка Результат = Неопределено; Перейти ~СторноОперации; ~Операция: Если НЕ Результат Тогда Перейти ~КонецОпераций; КонецЕсли; #КонецВставки Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда ... КонецЕсли; #Вставка Перейти ~КонецОпераций; ~СторноОперации: #КонецВставки Если Результат И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда ... КонецЕсли; #Вставка Перейти ~Операция; ~КонецОпераций: #КонецВставки Если Результат Тогда РезультатВыполнения = РезультатОперацииНаОборудовании(Истина); Иначе РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера); КонецЕсли; Исключение РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат РезультатВыполнения; КонецФункции
Проверяем в 1С, порядок операций изменился:
Как работает оператор безусловного перехода можно увидеть в приложенном GIF:
Среда: УТ 11.5.19.74 Объем: 3 час.
Можно и безе «Перейти»
Условие = 0;
Пока Условие<2 Цикл
Если Условие=1 Тогда
Сообщить("1");
Иначе
Сообщить("2");
КонецЕсли;
Условие = Условие+1;
КонецЦикла;
В любом случае, и то и другое — плохой код
Нельзя получить хороший код, изменяя плохой код.
С циклами будет менее понятно и больше вставок (возможно).