3859 lines
321 KiB
Plaintext
3859 lines
321 KiB
Plaintext
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Функция начинает выполнение команды, обрабатывает и перенаправляет на исполнение команду к драйверу.
|
||
//
|
||
// Параметры:
|
||
// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения.
|
||
// ПараметрыПодключения - Структура
|
||
// Команда - Строка - команда для выполнения
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации) Экспорт;
|
||
|
||
ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера;
|
||
ДанныеОперации.Вставить("Команда", Команда);
|
||
|
||
// ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ФИСКАЛЬНЫМИ УСТРОЙСТВАМИ
|
||
Если Команда = "CheckFiscalization" Тогда
|
||
РезультатВыполнения = Ждать ФискализацияЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "PrintText" Или Команда = "PrintQRCode" Тогда
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "OpenShift" Тогда
|
||
РезультатВыполнения = Ждать ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "CloseShift" Тогда
|
||
РезультатВыполнения = Ждать ЗакрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "Encash" Тогда
|
||
РезультатВыполнения = Ждать Инкассация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "OpenCashDrawer" Тогда
|
||
РезультатВыполнения = Ждать ОткрытьДенежныйЯщик(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "PrintReceiptCorrection" Тогда
|
||
РезультатВыполнения = Ждать ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "ReportCurrentStatusOfSettlements" Тогда
|
||
РезультатВыполнения = Ждать ОтчетОТекущемСостоянииРасчетов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "PrintXReport" Тогда
|
||
РезультатВыполнения = Ждать ОтчетБезГашения(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "GetLineLength" Тогда
|
||
РезультатВыполнения = Ждать ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "AnnulCheck" Тогда
|
||
РезультатВыполнения = Ждать АннулированиеЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "GetDataKKT" Тогда
|
||
РезультатВыполнения = Ждать ПараметрыККТ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "GetCurrentStatus" Тогда
|
||
РезультатВыполнения = Ждать ТекущееСостояние(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "OperationFN" Тогда
|
||
РезультатВыполнения = Ждать ОперацияФискальногоНакопителя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "PrintCheckCopy" Тогда
|
||
РезультатВыполнения = Ждать НапечататьКопиюЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "OpenSessionRegistrationKM" Тогда
|
||
РезультатВыполнения = Ждать ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "CloseSessionRegistrationKM" Тогда
|
||
РезультатВыполнения = Ждать ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "RequestKM" Тогда
|
||
РезультатВыполнения = Ждать ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "RequestKMKMNoWait" Тогда
|
||
РезультатВыполнения = Ждать ЗапросКМБезОжиданияОтвета(ПараметрыПодключения.ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "GetProcessingKMResult" Тогда
|
||
РезультатВыполнения = Ждать РезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "ConfirmKM" Тогда
|
||
РезультатВыполнения = Ждать ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "CheckKM" Тогда
|
||
РезультатВыполнения = Ждать ПроверкаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "CheckFiscalizationPacket" Тогда
|
||
РезультатВыполнения = Ждать ФискализацияЧекаПакетом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
// ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ЭКВАЙРИНГОВЫМИ ТЕРМИНАЛАМИ
|
||
ИначеЕсли Команда = "AuthorizeSales" Или Команда = "AuthorizeRefund" Или Команда = "AuthorizeVoid"
|
||
Или Команда = "PayByPaymentCardWithCashWithdrawal" Или Команда = "PurchaseWithEnrollment" Тогда
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда
|
||
РезультатВыполнения = Ждать ЭквайринговаяОперацияXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ЭквайринговаяОперация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда);
|
||
КонецЕсли;
|
||
ИначеЕсли Команда = "PayElectronicCertificate" Или Команда = "ReturnElectronicCertificate" Тогда
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда
|
||
РезультатВыполнения = Ждать ЭквайринговаяОперацияСЭлектроннымСертификатомXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ЭквайринговаяОперацияСЭлектроннымСертификатом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда);
|
||
КонецЕсли;
|
||
ИначеЕсли Команда = "Settlement" Тогда // Сверка итогов по картам
|
||
РезультатВыполнения = Ждать ИтогиДняПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "EmergencyVoid" Тогда // Аварийная отмена платежа
|
||
РезультатВыполнения = Ждать АварийнаяОтменаОперации(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "GetCardParametrs" Тогда // Получить параметры карты
|
||
РезультатВыполнения = Ждать ПараметрыКарты(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "GetOperationByCards" Тогда // Получить параметры карты
|
||
РезультатВыполнения = Ждать ОперацииПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "AuthorizePreSales" Или Команда = "AuthorizeCompletion" Или Команда = "AuthorizeVoidPreSales" Тогда
|
||
РезультатВыполнения = Ждать ЭквайринговаяОперацияXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда);
|
||
|
||
// ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ДИСПЛЕЯМИ ПОКУПАТЕЛЯ
|
||
ИначеЕсли Команда = "GetOutputOptions" Тогда // Получить параметры вывода.
|
||
РезультатВыполнения = Ждать ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "DisplayText" Тогда // Вывод строк на дисплей.
|
||
РезультатВыполнения = Ждать ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "ClearText" Тогда // Очистка дисплея.
|
||
РезультатВыполнения = Ждать ОчиститьДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "DisplayQRCode" Тогда // Вывод QR кода на дисплей.
|
||
РезультатВыполнения = Ждать ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "DisplayStatus" Тогда // Вывести статус на дисплей покупателя
|
||
РезультатВыполнения = Ждать ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "DisplayStatusRM" Тогда // Вывести статус рабочего места на дисплей покупателя
|
||
РезультатВыполнения = Ждать ВывестиСтатусРабочегоМестаНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "OutputHTML" Тогда // Вывести HTML на дисплей покупателя.
|
||
РезультатВыполнения = Ждать ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "DisplayInfo" Тогда // Вывести информацию на дисплей покупателя
|
||
РезультатВыполнения = Ждать ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
// ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ЭЛЕКТРОННЫМИ ВЕСАМИ
|
||
ИначеЕсли Команда = "GetWeight" Тогда // Получить вес.
|
||
РезультатВыполнения = Ждать ПолучитьВес(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
ИначеЕсли Команда = "Calibrate" Тогда // Установить вес тары.
|
||
РезультатВыполнения = Ждать Тарировать(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Недопустимая команда.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция начинает выполнение команды несертифицированного оборудования, обрабатывает и перенаправляет
|
||
// на исполнение команду к драйверу.
|
||
//
|
||
// Параметры:
|
||
// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения.
|
||
// ПараметрыПодключения - Структура
|
||
// Команда - Строка - команда для выполнения
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ВыполнениеКомандыНесертифицированногоОборудованияАсинх(ПараметрыПодключения, Команда, ДанныеОперации) Экспорт;
|
||
|
||
ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера;
|
||
РезультатВыполнения = МенеджерОборудованияКлиентСервер.ПараметрыВыполненияОперацииНаОборудовании();
|
||
РезультатВыполнения.Вставить("Результат", Ложь);
|
||
РезультатВыполнения.Вставить("ОписаниеОшибки", "");
|
||
РезультатВыполнения.Вставить("ИдентификаторУстройства", ПараметрыПодключения.ИдентификаторУстройства);
|
||
|
||
Попытка
|
||
МодульОборудованиеНесертифицированноеКлиентПереопределяемый = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОборудованиеНесертифицированноеКлиентПереопределяемый");
|
||
Результат = Ждать МодульОборудованиеНесертифицированноеКлиентПереопределяемый.ВыполнитьКомандуАсинх(
|
||
ОбъектДрайвера, ПараметрыПодключения, Команда, ДанныеОперации, РезультатВыполнения);
|
||
Если Результат <> Неопределено Тогда
|
||
РезультатВыполнения.Результат = Результат;
|
||
КонецЕсли;
|
||
Исключение
|
||
Возврат ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Если Не РезультатВыполнения.Результат Тогда
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает объект драйвера
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// ОбъектВнешнейКомпоненты
|
||
//
|
||
Асинх Функция ОбъектДрайвераАсинх(ПараметрыПодключения) Экспорт
|
||
|
||
Если ПараметрыПодключения.ИдентификаторОбъекта = Неопределено Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
|
||
ОбъектДрайвера = МенеджерОборудованияКлиент.ОбъектДрайвераИзКэша(ПараметрыПодключения.ИдентификаторОбъекта);
|
||
Если ОбъектДрайвера <> Неопределено Тогда
|
||
Возврат ОбъектДрайвера;
|
||
КонецЕсли;
|
||
|
||
ТекстСообщения = СтрШаблон(
|
||
НСтр("ru = 'Для продолжения работы требуется установка внешней компоненты ""%1"".'"),
|
||
ПараметрыПодключения.Наименование);
|
||
|
||
Если ПараметрыПодключения.ПодключениеИзМакета Или ОбщегоНазначенияБПОКлиентСервер.ЭтоМобильныйКлиент() Тогда
|
||
|
||
Операция = НСтр("ru = 'Подключить из макета'");
|
||
Если Не ПараметрыПодключения.МакетДоступен Тогда
|
||
|
||
ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Для внешней компоненты макет %1 не обнаружен.'"), ПараметрыПодключения.ИмяМакетаДрайвера);
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Операция, ОписаниеОшибки);
|
||
Возврат Неопределено;
|
||
|
||
КонецЕсли;
|
||
|
||
Если МенеджерОборудованияКлиент.ДопустимаУстановкаКомпоненты(ПараметрыПодключения.ИмяМакетаДрайвера) Тогда
|
||
|
||
Параметры = ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения();
|
||
Параметры.ТекстПояснения = ТекстСообщения;
|
||
Параметры.Изолированно = ПараметрыПодключения.БезопасноеПодключение;
|
||
Параметры.Кэшировать = Ложь;
|
||
|
||
ДанныеЛога = Новый Структура();
|
||
ДанныеЛога.Вставить("Идентификатор", ПараметрыПодключения.ИдентификаторОбъекта);
|
||
ДанныеЛога.Вставить("ПолноеИмяМакета", ПараметрыПодключения.ИмяМакетаДрайвера);
|
||
ДанныеЛога.Вставить("ПараметрыПодключения", Параметры);
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ДанныеЛога);
|
||
РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзМакетаАсинх(ПараметрыПодключения.ИдентификаторОбъекта, ПараметрыПодключения.ИмяМакетаДрайвера, Параметры);
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатПодключения, "Подключено, ОписаниеОшибки");
|
||
|
||
Иначе
|
||
|
||
РезультатПодключения = ВнешниеКомпонентыБПОКлиент.РезультатПодключения();
|
||
РезультатПодключения.Подключено = Ложь;
|
||
ОписаниеОшибки = СтрШаблон(НСтр("ru = 'Подключение внешней компоненты из макета %1 не допустимо.'"), ПараметрыПодключения.ИмяМакетаДрайвера);
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Операция, ОписаниеОшибки);
|
||
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ПараметрыПодключения.ПодключениеЛокальноПоИдентификатору Тогда
|
||
#Если ВебКлиент Тогда
|
||
РезультатПодключения = ВнешниеКомпонентыБПОКлиент.РезультатПодключения();
|
||
РезультатПодключения.Подключено = Ложь;
|
||
#Иначе
|
||
Операция = НСтр("ru = 'Подключить из реестра Windows'");
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ПараметрыПодключения.ИдентификаторОбъекта, "Идентификатор");
|
||
РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуИзРеестраWindowsАсинх(ПараметрыПодключения.ИдентификаторОбъекта);
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатПодключения, "Подключено, ОписаниеОшибки");
|
||
#КонецЕсли
|
||
Иначе
|
||
Параметры = ВнешниеКомпонентыБПОКлиент.ПараметрыПодключения();
|
||
Параметры.ТекстПояснения = ТекстСообщения;
|
||
Параметры.Изолированно = ПараметрыПодключения.БезопасноеПодключение;
|
||
Параметры.Кэшировать = Ложь;
|
||
Параметры.ПредложитьЗагрузить = Истина;
|
||
Параметры.ПредложитьУстановить = Истина;
|
||
Параметры.ОбновлятьАвтоматически = Ложь;
|
||
|
||
Операция = НСтр("ru = 'Подключить компоненту'");
|
||
ДанныеЛога = Новый Структура();
|
||
ДанныеЛога.Вставить("Идентификатор", ПараметрыПодключения.ИдентификаторОбъекта);
|
||
ДанныеЛога.Вставить("ПараметрыПодключения", Параметры);
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ДанныеЛога);
|
||
РезультатПодключения = Ждать ВнешниеКомпонентыБПОКлиент.ПодключитьКомпонентуАсинх(ПараметрыПодключения.ИдентификаторОбъекта, Неопределено, Параметры);
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатПодключения, "Подключено, ОписаниеОшибки");
|
||
КонецЕсли;
|
||
|
||
Если РезультатПодключения.Подключено Тогда
|
||
ОбъектДрайвера = РезультатПодключения.ПодключаемыйМодуль;
|
||
МенеджерОборудованияКлиент.ДобавитьДрайверВКэш(ПараметрыПодключения.ИдентификаторОбъекта, ОбъектДрайвера);
|
||
КонецЕсли;
|
||
|
||
Возврат ОбъектДрайвера;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает описание драйвера
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ОписаниеДрайвераАсинх(ПараметрыПодключения) Экспорт
|
||
|
||
ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения);
|
||
Если ОбъектДрайвера = Неопределено Тогда
|
||
|
||
РезультатВыполнения = ОшибкаЗагрузкиДрайвера(ПараметрыПодключения);
|
||
Возврат РезультатВыполнения;
|
||
|
||
Иначе
|
||
|
||
Если Не ПустаяСтрока(ПараметрыПодключения.ШаблонЛокализации) Тогда
|
||
Попытка
|
||
ТекущийЯзык = ТекущийЯзык();
|
||
КодЯзыкаПользователя = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка);
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetLocalization", ВМассив(КодЯзыкаПользователя, ПараметрыПодключения.ШаблонЛокализации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.УстановитьЛокализациюАсинх(КодЯзыкаПользователя, ПараметрыПодключения.ШаблонЛокализации); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если Не РезультатВызова.Значение Тогда
|
||
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка локализации драйвера.'"));
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
ОписаниеПолучено = Истина;
|
||
ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера();
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDescription");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.ОписаниеДрайвераXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
РевизияИнтерфейса = 2005;
|
||
ОписаниеПолучено = Ложь;
|
||
КонецПопытки;
|
||
|
||
Если Не ОписаниеПолучено Тогда
|
||
Попытка
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.НаименованиеДрайвера, ОписаниеДрайвера.ОписаниеДрайвера, ОписаниеДрайвера.ТипОборудования,
|
||
РевизияИнтерфейса, ОписаниеДрайвера.ИнтеграционныйКомпонент, ОписаниеДрайвера.ОсновнойДрайверУстановлен, ОписаниеДрайвера.URLЗагрузкиДрайвера); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова,
|
||
"Name, Description, EquipmentType, InterfaceRevision, IntegrationLibrary, MainDriverInstalled, DownloadURL");
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ПолучитьОписание", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Истина);
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Если ПараметрыВызова.Количество() > 1 И Не СтрНачинаетсяС(ПараметрыВызова[0], "<?") Тогда
|
||
// WEB клиент не генерирует исключение при вызове метода с неверным количество параметров.
|
||
ОписаниеДрайвера.НаименованиеДрайвера = ПараметрыВызова[0]; // НаименованиеДрайвера
|
||
ОписаниеДрайвера.ОписаниеДрайвера = ПараметрыВызова[1]; // ОписаниеДрайвера
|
||
ОписаниеДрайвера.ТипОборудования = ПараметрыВызова[2]; // ТипОборудования
|
||
ОписаниеДрайвера.РевизияИнтерфейса = ПараметрыВызова[3]; // РевизияИнтерфейса
|
||
ОписаниеДрайвера.ИнтеграционныйКомпонент = ПараметрыВызова[4]; // ИнтеграционныйКомпонент
|
||
ОписаниеДрайвера.ОсновнойДрайверУстановлен = ПараметрыВызова[5]; // ОсновнойДрайверУстановлен
|
||
ОписаниеДрайвера.URLЗагрузкиДрайвера = ПараметрыВызова[6]; // URLЗагрузкиДрайвера
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetVersion");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьНомерВерсииАсинх(); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
КонецПопытки;
|
||
ОписаниеДрайвера.ВерсияДрайвера = РезультатВызова.Значение;
|
||
Иначе
|
||
ОписаниеДрайвераПараметры = МенеджерОборудованияКлиент.ПолучитьОписаниеДрайвера(ПараметрыВызова[0]); // ОписаниеДрайвераXML
|
||
ЗаполнитьЗначенияСвойств(ОписаниеДрайвера, ОписаниеДрайвераПараметры);
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetInterfaceRevision");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
КонецПопытки;
|
||
ОписаниеДрайвера.РевизияИнтерфейса = РезультатВызова.Значение;
|
||
КонецЕсли;
|
||
|
||
ПараметрыПодключения.РевизияИнтерфейса = ОписаниеДрайвера.РевизияИнтерфейса;
|
||
Если ОписаниеДрайвера.РевизияИнтерфейса >= 4000 И ОписаниеДрайвера.ПоддерживаетсяЛокализация Тогда
|
||
ШаблонЛокализации = "";
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetLocalizationPattern");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьШаблонЛокализацииАсинх(ШаблонЛокализации); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
ОписаниеДрайвера.ШаблонЛокализации = ПараметрыВызова[0];
|
||
КонецЕсли
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения шаблон локализации драйвера.'") + Символы.ПС + ОписаниеОшибки);
|
||
КонецПопытки;
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ОписаниеДрайвера.РевизияИнтерфейсаПредставление = ПредставлениеРевизияИнтерфейса(ОписаниеДрайвера.РевизияИнтерфейса);
|
||
ПараметрыПодключения.РевизияИнтерфейса = ОписаниеДрайвера.РевизияИнтерфейса;
|
||
|
||
Если НЕ ОписаниеДрайвера.РевизияИнтерфейса > 4002 Тогда
|
||
// Устанавливаем тип оборудования.
|
||
Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Истина, Ложь);
|
||
Если Не Результат Тогда
|
||
Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// Получаем параметры драйвера. Для 4003 и выше - тип оборудования установиться в методе.
|
||
Результат = Ждать ПараметрыДрайвераАсинх(ОбъектДрайвера, ОписаниеДрайвера, ПараметрыПодключения);
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Результат);
|
||
РезультатВыполнения.Вставить("ОписаниеДрайвера", ОписаниеДрайвера);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает параметры драйвера
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ОписаниеДрайвера - Структура
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево
|
||
//
|
||
Асинх Функция ПараметрыДрайвераАсинх(ОбъектДрайвера, ОписаниеДрайвера, ПараметрыПодключения) Экспорт
|
||
|
||
ПараметрыДрайвера = "";
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EquipmentParameters", ПараметрыПодключения, "ТипОборудованияИмя");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПараметрыОборудованияАсинх(ПараметрыПодключения.ТипОборудованияИмя, ПараметрыДрайвера); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
ОписаниеДрайвера.ПараметрыДрайвера = РезультатВызова.Параметры[1];
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения параметров драйвера.'") + Символы.ПС + ОписаниеОшибки);
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
Иначе
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetParameters");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыАсинх(ПараметрыДрайвера); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ОписаниеДрайвера.ПараметрыДрайвера = РезультатВызова.Параметры[0];
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения параметров драйвера.'") + Символы.ПС + ОписаниеОшибки);
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
ДополнительныеДействия = "";
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetAdditionalActions");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьДополнительныеДействияАсинх(ДополнительныеДействия); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка получения описания драйвера.'"));
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
ОписаниеДрайвера.ДополнительныеДействия = ПараметрыВызова[0];
|
||
ОписаниеДрайвера.Установлен = Истина;
|
||
|
||
Если ПараметрыПодключения.Свойство("КоличествоПодключенных") Тогда
|
||
ОписаниеДрайвера.Вставить("КоличествоПодключенных", ПараметрыПодключения.КоличествоПодключенных);
|
||
КонецЕсли;
|
||
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
// Устанавливает параметры драйвера
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// УстановитьТипОборудования - Булево
|
||
// УстановитьПараметры - Булево
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево
|
||
//
|
||
Асинх Функция УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, УстановитьТипОборудования = Истина, УстановитьПараметры = Истина) Экспорт
|
||
|
||
Если УстановитьТипОборудования И ПараметрыПодключения.Свойство("ТипОборудованияИмя") Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetParameter", ВМассив("EquipmentType", ПараметрыПодключения.ТипОборудованияИмя));
|
||
РезультатВызова = Ждать ОбъектДрайвера.УстановитьПараметрАсинх("EquipmentType", ПараметрыПодключения.ТипОборудованияИмя); // ТипОборудования
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
Если РезультатВызова.Значение <> Истина Тогда // Может быть Неопределено
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если УстановитьПараметры И ПараметрыПодключения.Параметры <> Неопределено Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetParameter", ПараметрыПодключения.Параметры);
|
||
|
||
Для Каждого Параметр Из ПараметрыПодключения.Параметры Цикл
|
||
Если Лев(Параметр.Ключ, 2) = "P_" Тогда
|
||
ЗначениеПараметра = Параметр.Значение;
|
||
ИмяПараметра = Сред(Параметр.Ключ, 3);
|
||
Попытка
|
||
РезультатВызова = Ждать ОбъектДрайвера.УстановитьПараметрАсинх(ИмяПараметра, ЗначениеПараметра); // Структура
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат Ложь;
|
||
КонецПопытки;
|
||
Если РезультатВызова.Значение <> Истина Тогда // Может быть Неопределено
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
// Функция начинает подключение устройства.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ПодключитьУстройствоАсинх(ПараметрыПодключения) Экспорт
|
||
|
||
Если ПараметрыПодключения.ТипОборудования = ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ОблачнаяККТ") Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения);
|
||
Если ОбъектДрайвера = Неопределено Тогда
|
||
Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения);
|
||
КонецЕсли;
|
||
|
||
ПараметрыПодключения.ОбъектДрайвера = ОбъектДрайвера;
|
||
|
||
РевизияИнтерфейса = 2005;
|
||
ОписаниеПолучено = Истина;
|
||
ОписаниеДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыОписанияДрайвера();
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetInterfaceRevision");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
РевизияИнтерфейса = РезультатВызова.Значение;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОписаниеПолучено = Ложь;
|
||
КонецПопытки;
|
||
|
||
Если Не ОписаниеПолучено Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDescription");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОписаниеАсинх(ОписаниеДрайвера.НаименованиеДрайвера, ОписаниеДрайвера.ОписаниеДрайвера, ОписаниеДрайвера.ТипОборудования,
|
||
ОписаниеДрайвера.РевизияИнтерфейса, ОписаниеДрайвера.ИнтеграционныйКомпонент, ОписаниеДрайвера.ОсновнойДрайверУстановлен, ОписаниеДрайвера.URLЗагрузкиДрайвера); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
РевизияИнтерфейса = РезультатВызова.Параметры[3];
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ПолучитьОписание");
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
ПараметрыПодключения.РевизияИнтерфейса = РевизияИнтерфейса;
|
||
ОписаниеДрайвера.РевизияИнтерфейса = РевизияИнтерфейса;
|
||
|
||
Если ПустаяСтрока(ПараметрыПодключения.РевизияИнтерфейса) Или ПараметрыПодключения.РевизияИнтерфейса = 0 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Ревизия интерфейса драйвера не определена.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
Иначе
|
||
ПараметрыПодключения.РевизияИнтерфейсаПредставление = ПредставлениеРевизияИнтерфейса(ПараметрыПодключения.РевизияИнтерфейса);
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда
|
||
Если Не ПустаяСтрока(ПараметрыПодключения.ШаблонЛокализации) Тогда
|
||
Попытка
|
||
ТекущийЯзык = ТекущийЯзык();
|
||
КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка);
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetLocalization", ВМассив(КодЯзыка, ПараметрыПодключения.ШаблонЛокализации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.УстановитьЛокализациюАсинх(КодЯзыка, ПараметрыПодключения.ШаблонЛокализации); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если НЕ РезультатВызова.Значение Тогда
|
||
ОбщегоНазначенияБПОКлиент.СообщитьПользователю(НСтр("ru='Ошибка локализации драйвера.'"));
|
||
ОшибкаВызоваДрайвера("УстановитьЛокализацию");
|
||
КонецЕсли
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConnectEquipment", ПараметрыПодключения, ", ТипОборудованияИмя, ПараметрыXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПодключитьОборудованиеАсинх(ПараметрыПодключения.ИДУстройства,
|
||
ПараметрыПодключения.ТипОборудованияИмя, ПараметрыПодключения.ПараметрыXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыПодключения.ИДУстройства = РезультатВызова.Параметры[0];
|
||
Результат = РезультатВызова.Значение;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ПодключитьОборудование", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
Иначе
|
||
|
||
Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Истина, Ложь);
|
||
Если Не Результат Тогда
|
||
Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера");
|
||
КонецЕсли;
|
||
|
||
Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения, Ложь);
|
||
Если Не Результат Тогда
|
||
Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера");
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Open");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПодключитьАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыПодключения.ИДУстройства = РезультатВызова.Параметры[0];
|
||
Результат = РезультатВызова.Значение;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("Подключить", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
КонецЕсли;
|
||
|
||
Если Результат <> Истина Тогда // Может быть Неопределено
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
Иначе
|
||
|
||
ТипыОборудования = ПараметрыПодключения.ТипыОборудования;
|
||
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяЧекопечатающиеУстройства()
|
||
И ((ТипыОборудования.Свойство("ККТ") И ТипыОборудования.ККТ)
|
||
Или (ТипыОборудования.Свойство("ПринтерЧеков") И ТипыОборудования.ПринтерЧеков)
|
||
Или (ТипыОборудования.Свойство("ФискальныйРегистратор") И ТипыОборудования.ФискальныйРегистратор)
|
||
) Тогда
|
||
Результат = Ждать ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, Неопределено)
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяПлатежныеСистемы()
|
||
И ТипыОборудования.Свойство("ЭквайринговыйТерминал") И ТипыОборудования.ЭквайринговыйТерминал Тогда
|
||
Результат = Ждать ПараметрыТерминала(ОбъектДрайвера, ПараметрыПодключения, Неопределено)
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяДисплеиПокупателя()
|
||
И ТипыОборудования.Свойство("ДисплейПокупателя") И ТипыОборудования.ДисплейПокупателя Тогда
|
||
Результат = Ждать ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, Неопределено);
|
||
Если ПараметрыПодключения.ДисплейОтрабатываетНажатия Тогда
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("Нажатие"); //@NON-NLS-1 @NON-NLS-2
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("OnClick");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяВесовоеОборудование()
|
||
И ТипыОборудования.Свойство("ЭлектронныеВесы") И ТипыОборудования.ЭлектронныеВесы Тогда
|
||
Результат = Ждать ПараметрыВесов(ОбъектДрайвера, ПараметрыПодключения, Неопределено);
|
||
Если ПараметрыПодключения.СобытиеПолученииВеса Тогда
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("Взвешивание"); //@NON-NLS-1 @NON-NLS-2
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("Weighting");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяУстройстваВвода()
|
||
И ТипыОборудования.Свойство("СканерШтрихкода") Тогда
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.СканерШтрихкода Тогда
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("Штрихкод"); //@NON-NLS-1 @NON-NLS-2
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("ШтрихкодBase64"); //@NON-NLS-1 @NON-NLS-2
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("Barcode");
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("BarcodeBase64");
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.СканерШтрихкода Тогда
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("НажатиеКлавиши"); //@NON-NLS-1 @NON-NLS-2
|
||
ПараметрыПодключения.ИменаСобытий.Добавить("KeyPress");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция начинает отключение устройства.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ОтключитьУстройствоАсинх(ПараметрыПодключения) Экспорт
|
||
|
||
ОбъектДрайвера = ПараметрыПодключения.ОбъектДрайвера;
|
||
Если ОбъектДрайвера = Неопределено Тогда
|
||
Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения);
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4002 Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DisconnectEquipment");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтключитьОборудованиеАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ОтключитьОборудование", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
Иначе
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Close");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтключитьАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("Отключить", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Выполняет тест устройства
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ТестУстройстваАсинх(ПараметрыПодключения) Экспорт
|
||
|
||
ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения);
|
||
Если ОбъектДрайвера = Неопределено Тогда
|
||
Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения);
|
||
КонецЕсли;
|
||
|
||
РевизияИнтерфейса = Ждать РевизияИнтерфейсаАсинх(ОбъектДрайвера, ПараметрыПодключения);
|
||
|
||
Результат = Ложь;
|
||
РезультатТеста = "";
|
||
АктивированДемоРежим = "";
|
||
Если РевизияИнтерфейса > 4002 Тогда
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EquipmentTest", ПараметрыПодключения, "ТипОборудованияИмя, ПараметрыXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ТестированиеОборудованияАсинх(ПараметрыПодключения.ТипОборудованияИмя,
|
||
ПараметрыПодключения.ПараметрыXML, РезультатТеста, АктивированДемоРежим); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ТестированиеОборудования", ТекстОшибки);
|
||
КонецПопытки;
|
||
|
||
Если ТипЗнч(РезультатВызова.Значение) = Тип("Булево") Тогда
|
||
Результат = РезультатВызова.Значение;
|
||
РезультатТеста = РезультатВызова.Параметры[2];
|
||
АктивированДемоРежим = РезультатВызова.Параметры[3];
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения);
|
||
Если Результат Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DeviceTest");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ТестУстройстваАсинх(РезультатТеста, АктивированДемоРежим); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ТестУстройства");
|
||
КонецПопытки;
|
||
|
||
Если ТипЗнч(РезультатВызова.Значение) = Тип("Булево") Тогда
|
||
Результат = РезультатВызова.Значение;
|
||
РезультатТеста = РезультатВызова.Параметры[0];
|
||
АктивированДемоРежим = РезультатВызова.Параметры[1];
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Результат);
|
||
РезультатВыполнения.Вставить("РезультатВыполнения" , РезультатТеста);
|
||
РезультатВыполнения.Вставить("АктивированДемоРежим", АктивированДемоРежим);
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Выполняет автонастройку устройства
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция АвтонастройкаУстройстваАсинх(ПараметрыПодключения) Экспорт
|
||
|
||
ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения);
|
||
Если ОбъектДрайвера = Неопределено Тогда
|
||
Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения);
|
||
КонецЕсли;
|
||
|
||
РевизияИнтерфейса = Ждать РевизияИнтерфейсаАсинх(ОбъектДрайвера, ПараметрыПодключения);
|
||
|
||
Результат = Ложь;
|
||
ПоказыватьОкноАвтонастройки = Истина;
|
||
Таймаут = 60;
|
||
ПараметрыПодключенияXML = "";
|
||
|
||
Если РевизияИнтерфейса > 4002 Тогда
|
||
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EquipmentAutoSetup",
|
||
ВМассив(,ПараметрыПодключения.ПараметрыXML,,ПоказыватьОкноАвтонастройки,Таймаут));
|
||
РезультатВызова = Ждать ОбъектДрайвера.АвтонастройкаОборудованияАсинх(ПараметрыПодключения.ТипОборудованияИмя,
|
||
ПараметрыПодключения.ПараметрыXML, ПараметрыПодключенияXML, ПоказыватьОкноАвтонастройки, Таймаут); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
КонецПопытки;
|
||
|
||
|
||
Если ТипЗнч(РезультатВызова.Значение) = Тип("Булево") Тогда
|
||
Результат = РезультатВызова.Значение;
|
||
ПараметрыПодключенияXML = РезультатВызова.Параметры[2];
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Результат);
|
||
РезультатВыполнения.Вставить("ПараметрыПодключенияXML", ПараметрыПодключенияXML);
|
||
РезультатВыполнения.Вставить("ПараметрыПодключения" , МенеджерОборудованияВызовСервера.ЗагрузитьПараметрыXML(ПараметрыПодключенияXML));
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Выполняет дополнительное действие
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
// ПараметрыВыполнения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция ВыполнитьДополнительноеДействиеАсинх(ПараметрыПодключения, ПараметрыВыполнения) Экспорт
|
||
|
||
ОбъектДрайвера = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения);
|
||
Если ОбъектДрайвера = Неопределено Тогда
|
||
Возврат ОшибкаЗагрузкиДрайвера(ПараметрыПодключения);
|
||
КонецЕсли;
|
||
|
||
Результат = Ждать УстановитьПараметрыДрайвераАсинх(ОбъектДрайвера, ПараметрыПодключения);
|
||
Если Результат Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DoAdditionalAction", ПараметрыВыполнения, "ИмяДействия");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВыполнитьДополнительноеДействиеАсинх(ПараметрыВыполнения.ИмяДействия); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Результат = РезультатВызова.Значение;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОписаниеОшибки = НСтр("ru='Ошибка выполнения дополнительного действия.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
РезультатВыполнения = ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Иначе
|
||
Возврат ОшибкаВызоваДрайвера("УстановитьПараметрыДрайвера");
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Выполняет тест устройства
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция РевизияИнтерфейсаАсинх(ОбъектДрайвера, ПараметрыПодключения) Экспорт
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetInterfaceRevision");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРевизиюИнтерфейсаАсинх(); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
РевизияИнтерфейса = РезультатВызова.Значение;
|
||
Исключение
|
||
// Версия требований 2.5 и ниже
|
||
РевизияИнтерфейса = 2005;
|
||
КонецПопытки;
|
||
ПараметрыПодключения.РевизияИнтерфейса = РевизияИнтерфейса;
|
||
|
||
Возврат РевизияИнтерфейса;
|
||
|
||
КонецФункции
|
||
|
||
#Область РежимСовместимости
|
||
|
||
// Начинает выполнение команды, обрабатывает и перенаправляет на исполнение команду к драйверу.
|
||
//
|
||
// Параметры:
|
||
// ОповещениеПриЗавершении - ОписаниеОповещения - событие описания оповещения.
|
||
// ПараметрыПодключения - Структура
|
||
// Команда - Строка - команда для выполнения
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Процедура НачатьВыполнениеКоманды(ОповещениеПриЗавершении, ПараметрыПодключения, Команда, ДанныеОперации) Экспорт
|
||
|
||
Если ПараметрыПодключения.Несертифицированное Тогда
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяНесертифицированноеОборудование() Тогда
|
||
РезультатВыполнения = Ждать ВыполнениеКомандыНесертифицированногоОборудованияАсинх(ПараметрыПодключения, Команда, ДанныеОперации);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, РезультатВыполнения);
|
||
КонецЕсли;
|
||
Иначе
|
||
Результат = Ждать ВыполнениеКоманды(ПараметрыПодключения, Команда, ДанныеОперации);
|
||
Если Результат.Свойство("ДлительнаяОперация") Тогда
|
||
Если Результат.ДлительнаяОперация = "ПроверкаКМ" Тогда
|
||
МодульМенеджерОборудованияМаркировкаКлиент = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиент");
|
||
МодульМенеджерОборудованияМаркировкаКлиент.ДлительнаяОперацияПроверкаКМ(ОповещениеПриЗавершении, Команда, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
Иначе
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Начинает получение объекта драйвера
|
||
Асинх Процедура НачатьПолучениеОбъектаДрайвера(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт
|
||
|
||
Результат = Ждать ОбъектДрайвераАсинх(ПараметрыПодключения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Начинает получение описания драйвера
|
||
Асинх Процедура НачатьПолучениеОписанияДрайвера(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт
|
||
|
||
Результат = Ждать ОписаниеДрайвераАсинх(ПараметрыПодключения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура начинает подключение устройства.
|
||
//
|
||
Асинх Процедура НачатьПодключениеУстройства(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт
|
||
|
||
Результат = Ждать ПодключитьУстройствоАсинх(ПараметрыПодключения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура начинает отключение устройства.
|
||
//
|
||
Асинх Процедура НачатьОтключениеУстройства(ОповещениеПриЗавершении, ПараметрыПодключения) Экспорт
|
||
|
||
Результат = Ждать ОтключитьУстройствоАсинх(ПараметрыПодключения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура начинает тест устройства.
|
||
//
|
||
Асинх Процедура НачатьТестУстройства(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт
|
||
|
||
Результат = Ждать ТестУстройстваАсинх(ПараметрыПодключения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Процедура начинает автонастройку устройства.
|
||
//
|
||
Асинх Процедура НачатьАвтонастройкуУстройства(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт
|
||
|
||
Результат = Ждать АвтонастройкаУстройстваАсинх(ПараметрыПодключения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Выполнение дополнительного действия для устройства.
|
||
//
|
||
Асинх Процедура НачатьВыполнитьДополнительноеДействие(ОповещениеПриЗавершении, ПараметрыПодключения, ПараметрыВыполнения) Экспорт
|
||
|
||
Результат = Ждать ВыполнитьДополнительноеДействиеАсинх(ПараметрыПодключения, ПараметрыВыполнения);
|
||
ВыполнитьОбработкуОповещения(ОповещениеПриЗавершении, Результат);
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбработатьСобытие
|
||
|
||
Функция ОбработатьСобытиеШтрихкод(Данные) Экспорт
|
||
|
||
ИмяСобытия = "ScanData";
|
||
Штрихкод = СокрЛП(Данные);
|
||
Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда
|
||
ДанныеСобытия = Новый Структура("Штрихкод,Данные", Штрихкод, Данные);
|
||
Иначе
|
||
ДанныеСобытия = Новый Массив();
|
||
ДанныеСобытия.Добавить(Штрихкод);
|
||
МассивВторогоПорядка = Новый Массив();
|
||
МассивВторогоПорядка.Добавить(Данные);
|
||
МассивВторогоПорядка.Добавить(Штрихкод);
|
||
МассивВторогоПорядка.Добавить(0);
|
||
ДанныеСобытия.Добавить(МассивВторогоПорядка);
|
||
КонецЕсли;
|
||
|
||
РезультатОбработки = Новый Структура();
|
||
РезультатОбработки.Вставить("Результат", Истина);
|
||
РезультатОбработки.Вставить("Событие" , ИмяСобытия);
|
||
РезультатОбработки.Вставить("Данные" , ДанныеСобытия);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбработатьСобытиеШтрихкод64(Данные) Экспорт
|
||
|
||
ИмяСобытия = "ScanDataBase64";
|
||
Штрихкод = СокрЛП(Данные);
|
||
Если МенеджерОборудованияКлиент.СобытиеУстройствВводаНовыйФормат() Тогда
|
||
ДанныеСобытия = Новый Структура("Штрихкод,Данные", Штрихкод, Данные);
|
||
Иначе
|
||
ДанныеСобытия = Новый Массив();
|
||
ДанныеСобытия.Добавить(Штрихкод);
|
||
МассивВторогоПорядка = Новый Массив();
|
||
МассивВторогоПорядка.Добавить(Данные);
|
||
МассивВторогоПорядка.Добавить(Штрихкод);
|
||
МассивВторогоПорядка.Добавить(0);
|
||
ДанныеСобытия.Добавить(МассивВторогоПорядка);
|
||
КонецЕсли;
|
||
|
||
РезультатОбработки = Новый Структура();
|
||
РезультатОбработки.Вставить("Результат", Истина);
|
||
РезультатОбработки.Вставить("Событие" , ИмяСобытия);
|
||
РезультатОбработки.Вставить("Данные" , ДанныеСобытия);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбработатьНажатиеКлавиши(Данные) Экспорт
|
||
|
||
ИмяСобытия = "KeyPress";
|
||
Штрихкод = СокрЛП(Данные);
|
||
ДанныеСобытия = Новый Структура("НажатаяКлавиша,Данные", СокрЛП(Данные), Данные);
|
||
|
||
РезультатОбработки = Новый Структура();
|
||
РезультатОбработки.Вставить("Результат", Истина);
|
||
РезультатОбработки.Вставить("Событие" , ИмяСобытия);
|
||
РезультатОбработки.Вставить("Данные" , ДанныеСобытия);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбработатьНажатиеНаДисплее(Данные) Экспорт
|
||
|
||
ИмяСобытия = "Pressed";
|
||
|
||
РезультатОбработки = Новый Структура();
|
||
РезультатОбработки.Вставить("Результат", Истина);
|
||
РезультатОбработки.Вставить("Событие" , ИмяСобытия);
|
||
РезультатОбработки.Вставить("Данные" , Данные);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
|
||
Функция ОбработатьСобытиеВеса(ПараметрыПодключения, Данные) Экспорт
|
||
|
||
Результат = Истина;
|
||
ИмяСобытия = "Weighting";
|
||
Стабилизация = Истина;
|
||
ОшибкаРазмещения = Ложь;
|
||
ЗонаПересечения = Новый Массив();
|
||
Вес = 0;
|
||
|
||
ДанныеМассив = СтрРазделить(СокрЛП(Данные), ";");
|
||
Попытка
|
||
Вес = ?(ДанныеМассив.Количество() > 0, Число(ДанныеМассив[0]), 0);
|
||
Если ДанныеМассив.Количество() > 1 И ВРег(ДанныеМассив[1]) = "UNSTABLE" Тогда
|
||
Стабилизация = Ложь; // Вес не стабилизирован
|
||
КонецЕсли;
|
||
Если ДанныеМассив.Количество() > 2 Тогда // Ошибка размещения
|
||
ОшибкаРазмещенияМассив = СтрРазделить(СокрЛП(ДанныеМассив[2]), ",");
|
||
Для Каждого ОшибкаРазмещенияЭлемент Из ОшибкаРазмещенияМассив Цикл
|
||
ОшибкаРазмещения = Истина;
|
||
Если Не ПустаяСтрока(ОшибкаРазмещенияЭлемент) И ВРег(Лев(ОшибкаРазмещенияЭлемент,3)) = "ERR" Тогда
|
||
СтрЗонаПересечения = Сред(ОшибкаРазмещенияЭлемент, 5);
|
||
Если Не ПустаяСтрока(СтрЗонаПересечения) Тогда
|
||
ЗонаПересечения.Добавить(Число(СтрЗонаПересечения));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Исключение
|
||
Результат = Ложь;
|
||
КонецПопытки;
|
||
|
||
ДанныеСобытия = ПараметрыСобытияВеса();
|
||
ДанныеСобытия.ИдентификаторУстройства = ПараметрыПодключения.ИдентификаторУстройства;
|
||
ДанныеСобытия.Вес = Вес;
|
||
ДанныеСобытия.Стабилизация = Стабилизация;
|
||
ДанныеСобытия.ОшибкаРазмещения = ОшибкаРазмещения;
|
||
ДанныеСобытия.ЗонаПересечения = ЗонаПересечения;
|
||
|
||
РезультатОбработки = Новый Структура();
|
||
РезультатОбработки.Вставить("Результат", Результат);
|
||
РезультатОбработки.Вставить("Событие" , ИмяСобытия);
|
||
РезультатОбработки.Вставить("Данные" , ДанныеСобытия);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет обработку внешних событий подключаемого оборудования.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
//
|
||
Функция ОбработатьСобытие(ОбъектДрайвера, ПараметрыПодключения, Событие, Данные) Экспорт
|
||
|
||
Операция = СтрШаблон(НСтр("ru = 'Событие: %1'"), Событие);
|
||
ДанныеДляЛога = ОбщегоНазначенияБПОКлиентСервер.ШтрихкодВBase64(Данные);
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, Операция, ДанныеДляЛога, "Данные");
|
||
|
||
Если Событие = "Штрихкод" Или Событие = "Barcode" Тогда
|
||
РезультатОбработки = ОбработатьСобытиеШтрихкод(Данные);
|
||
ИначеЕсли Событие = "ШтрихкодBase64" Или Событие = "BarcodeBase64" Тогда
|
||
РезультатОбработки = ОбработатьСобытиеШтрихкод64(Данные);
|
||
ИначеЕсли Событие = "НажатиеКлавиши" Или Событие = "KeyPress" Тогда
|
||
РезультатОбработки = ОбработатьНажатиеКлавиши(Данные);
|
||
ИначеЕсли Событие = "Взвешивание" Или Событие = "Weighting" Тогда
|
||
РезультатОбработки = ОбработатьСобытиеВеса(ПараметрыПодключения, Данные);
|
||
ИначеЕсли Событие = "Нажатие" Или Событие = "OnClick" Тогда
|
||
РезультатОбработки = ОбработатьНажатиеНаДисплее(Данные);
|
||
Иначе
|
||
РезультатОбработки = Новый Структура();
|
||
РезультатОбработки.Вставить("Результат", Ложь);
|
||
РезультатОбработки.Вставить("Событие" , "");
|
||
РезультатОбработки.Вставить("Данные" , Данные);
|
||
Возврат РезультатОбработки;
|
||
КонецЕсли;
|
||
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатОбработки);
|
||
Возврат РезультатОбработки;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ОбщиеСинхронныеМетодыОбработчиков
|
||
|
||
// Конструктор результата выполнения операции на оборудовании
|
||
//
|
||
// Параметры:
|
||
// Результат - Булево
|
||
// ОписаниеОшибки - Строка
|
||
// - Неопределено
|
||
// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование
|
||
// - Неопределено
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Результат - Булево
|
||
// * ОписаниеОшибки - Строка
|
||
// - Неопределено
|
||
// * ОшибкаЗагрузки - Булево
|
||
// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование
|
||
// - Неопределено
|
||
//
|
||
Функция РезультатОперацииНаОборудовании(Результат = Ложь, ОписаниеОшибки = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт
|
||
|
||
РезультатВыполнения = Новый Структура();
|
||
РезультатВыполнения.Вставить("Результат" , Результат);
|
||
РезультатВыполнения.Вставить("ОписаниеОшибки", ОписаниеОшибки);
|
||
РезультатВыполнения.Вставить("ОшибкаЗагрузки", Ложь);
|
||
РезультатВыполнения.Вставить("ИдентификаторУстройства", ИдентификаторУстройства);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОшибкаЗагрузкиДрайвера(ПараметрыПодключения, ОписаниеОшибки = "") Экспорт
|
||
|
||
Текст = НСтр("ru='%1: Не удалось загрузить драйвер устройства.
|
||
|Проверьте, что драйвер корректно установлен и зарегистрирован в системе.
|
||
|%2'");
|
||
Текст = СтрШаблон(Текст, ПараметрыПодключения.Наименование, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, Текст);
|
||
РезультатВыполнения.ОшибкаЗагрузки = Истина;
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОшибкаВызоваДрайвера(МетодДрайвера = Неопределено, ОписаниеОшибки = Неопределено, ЗаписьВЖурналРегистрации = Ложь) Экспорт
|
||
|
||
Если НЕ ПустаяСтрока(МетодДрайвера) Тогда
|
||
СообщениеОбОшибке = НСтр("ru='Ошибка вызова метода драйвера <%1>.'");
|
||
СообщениеОбОшибке = СтрШаблон(СообщениеОбОшибке, МетодДрайвера);
|
||
Иначе
|
||
СообщениеОбОшибке = НСтр("ru='Данный тип оборудования не поддерживает данную команду.'");
|
||
КонецЕсли;
|
||
|
||
Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда
|
||
СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + ОписаниеОшибки;
|
||
КонецЕсли;
|
||
|
||
Если ЗаписьВЖурналРегистрации Тогда
|
||
ОбщегоНазначенияБПОКлиент.ЗаписатьОшибкуВЖурналРегистрации(НСтр("ru = 'Подключаемое оборудование.'"), СообщениеОбОшибке);
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, СообщениеОбОшибке);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
// Установить информацию приложения в драйвере
|
||
//
|
||
// Параметры:
|
||
// ПараметрыПодключения - Структура
|
||
// ПараметрыВыполнения - Структура
|
||
//
|
||
// Возвращаемое значение:
|
||
// см. РезультатОперацииНаОборудовании
|
||
//
|
||
Асинх Функция УстановитьИнформациюПриложенияАсинх(ОбъектДрайвера, ПараметрыПодключения)
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "SetApplicationInformation", ПараметрыПодключения, "ПараметрыПриложенияXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.УстановитьИнформациюПриложенияАсинх(ПараметрыПодключения.ПараметрыПриложенияXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
ОписаниеОшибки = НСтр("ru='Ошибка установки информации приложения для драйвера.'");
|
||
Возврат РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
КонецПопытки;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(РезультатВызова.Значение);
|
||
Если РезультатВызова.Значение <> Истина Тогда
|
||
ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
Асинх Функция ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога = Неопределено)
|
||
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОшибкуАсинх(""); // Структура
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, РезультатВызова.Параметры[0]);
|
||
|
||
Если ЗаписьЛога <> Неопределено Тогда
|
||
ЗаписатьОшибкуДрайвераВЛогОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПредставлениеРевизияИнтерфейса(РевизияИнтерфейса)
|
||
|
||
Возврат ОбщегоНазначенияБПОКлиентСервер.ПредставлениеРевизияИнтерфейса(РевизияИнтерфейса);
|
||
|
||
КонецФункции
|
||
|
||
#Область ФискальныеУстройства
|
||
|
||
// Получает ширину строки в символах.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ШиринаСтроки(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.Свойство("ШиринаСтроки") И ПараметрыПодключения.ШиринаСтроки > 0 Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ШиринаСтроки", ПараметрыПодключения.ШиринаСтроки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetLineLength");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьШиринуСтрокиАсинх(ПараметрыПодключения.ИДУстройства, 0); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыПодключения.ШиринаСтроки = РезультатВызова.Параметры[1];
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ПолучитьШиринуСтроки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ШиринаСтроки", РезультатВызова.Параметры[1]); // Структура
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет фискализацию чека.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ФискализацияЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда
|
||
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
ТекущийСтатус = Неопределено;
|
||
ВыполнялосьПодтверждениеПокупки = Ложь;
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда
|
||
ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
// Если есть текущая проверка КМ
|
||
Если НЕ ПустаяСтрока(ТекущийСтатус.ИдентификаторЗапроса) Тогда
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConfirmKM", ВМассив(ТекущийСтатус.ИдентификаторЗапроса,0));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ТекущийСтатус.ИдентификаторЗапроса, 0); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
ВыполнялосьПодтверждениеПокупки = Истина;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
Если ДанныеОперации.ЕстьПерсональныеДанные Тогда
|
||
ДанныеЧекаXML = ДанныеОперации.ДанныеЧекаXMLПерсональныеДанные
|
||
Иначе
|
||
ДанныеЧекаXML = ДанныеОперации.ДанныеЧекаXML;
|
||
КонецЕсли;
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно, ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3];
|
||
Иначе // Версия стандарта 2.2 (ОФД 1.05)
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(,ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно,
|
||
ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[3];
|
||
ДанныеОперации.НомерСменыККТ = ПараметрыВызова[4];
|
||
ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[5];
|
||
ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[6];
|
||
КонецЕсли;
|
||
ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса();
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧек", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если ТекущийСтатус <> Неопределено Тогда
|
||
ЗаписьОперацииКМ = Новый Структура();
|
||
ЗаписьОперацииКМ.Вставить("ИдентификаторСессии", ТекущийСтатус.ИдентификаторСессии);
|
||
ЗаписьОперацииКМ.Вставить("ИдентификаторЗапроса", ТекущийСтатус.ИдентификаторЗапроса);
|
||
ЗаписьОперацииКМ.Вставить("ВыполнялосьПодтверждениеПокупки", ВыполнялосьПодтверждениеПокупки);
|
||
ДанныеОперации.Вставить("ЗаписьОперацииКМ", ЗаписьОперацииКМ);
|
||
КонецЕсли;
|
||
Если ДанныеОперации.ТестовыеЧеки <> Неопределено И ДанныеОперации.ТестовыеЧеки.Количество() > 0 Тогда
|
||
РезультатПечатиНефискальныхДокументов = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
РезультатВыполнения.Вставить("РезультатПечатиНефискальныхДокументов", РезультатПечатиНефискальныхДокументов);
|
||
КонецЕсли;
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет печать чека коррекции.
|
||
//
|
||
Асинх Функция ПечатьЧекаКоррекции(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Попытка
|
||
|
||
Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив( , Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4004 Тогда
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно,
|
||
ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[2];
|
||
ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3];
|
||
КонецЕсли;
|
||
Иначе
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства,
|
||
ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[1];
|
||
ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[2];
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Иначе
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив(, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ,
|
||
ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[1];
|
||
ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[2];
|
||
ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3];
|
||
ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[4];
|
||
ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[5];
|
||
КонецЕсли;
|
||
ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса();
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(,ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно,
|
||
ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[2];
|
||
ДанныеОперации.РезультатОперацииXML = ПараметрыВызова[3];
|
||
КонецЕсли;
|
||
Иначе
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(,ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.Электронно,
|
||
ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ, ДанныеОперации.ФискальныйПризнак, ДанныеОперации.АдресСайтаПроверки); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ДанныеОперации.ДанныеЧекаXML = ПараметрыВызова[2];
|
||
ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[3];
|
||
ДанныеОперации.НомерСменыККТ = ПараметрыВызова[4];
|
||
ДанныеОперации.ФискальныйПризнак = ПараметрыВызова[5];
|
||
ДанныеОперации.АдресСайтаПроверки = ПараметрыВызова[6];
|
||
КонецЕсли;
|
||
ДанныеОперации.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Результат И ДанныеОперации.СформироватьЧекКоррекцииСторно Тогда
|
||
ПараметрыФискализацииСторно = ДанныеОперации.ЧекКоррекцииСторно;
|
||
Если ДанныеОперации.ЧекКоррекцииНаККТ Тогда
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив(, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4004 Тогда
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно,
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); // Структура
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[2];
|
||
ПараметрыФискализацииСторно.РезультатОперацииXML = ПараметрыВызова[3];
|
||
КонецЕсли;
|
||
Иначе
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства,
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); // Структура
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[1];
|
||
ПараметрыФискализацииСторно.РезультатОперацииXML = ПараметрыВызова[2];
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Иначе
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCorrectionCheck", ВМассив(, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекКоррекцииАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.НомерЧекаККТ, ПараметрыФискализацииСторно.НомерСменыККТ,
|
||
ПараметрыФискализацииСторно.ФискальныйПризнак, ПараметрыФискализацииСторно.АдресСайтаПроверки); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[1];
|
||
ПараметрыФискализацииСторно.НомерЧекаККТ = ПараметрыВызова[2];
|
||
ПараметрыФискализацииСторно.НомерСменыККТ = ПараметрыВызова[3];
|
||
ПараметрыФискализацииСторно.ФискальныйПризнак = ПараметрыВызова[4];
|
||
ПараметрыФискализацииСторно.АдресСайтаПроверки = ПараметрыВызова[5];
|
||
КонецЕсли;
|
||
ПараметрыФискализацииСторно.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса();
|
||
КонецЕсли;
|
||
Иначе
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(, ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыФискализацииСторно.Электронно,
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML, ПараметрыФискализацииСторно.РезультатОперацииXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[2];
|
||
ПараметрыФискализацииСторно.РезультатОперацииXML = ПараметрыВызова[3];
|
||
КонецЕсли;
|
||
Иначе
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(, ДанныеОперации.Электронно, Экранировать(ДанныеОперации.ДанныеЧекаXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(
|
||
ПараметрыПодключения.ИДУстройства,
|
||
ПараметрыФискализацииСторно.Электронно,
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML,
|
||
ПараметрыФискализацииСторно.НомерЧекаККТ,
|
||
ПараметрыФискализацииСторно.НомерСменыККТ,
|
||
ПараметрыФискализацииСторно.ФискальныйПризнак,
|
||
ПараметрыФискализацииСторно.АдресСайтаПроверки); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
Результат = РезультатВызова.Значение;
|
||
Если Результат Тогда
|
||
ПараметрыФискализацииСторно.ДанныеЧекаXML = ПараметрыВызова[2];
|
||
ПараметрыФискализацииСторно.НомерЧекаККТ = ПараметрыВызова[3];
|
||
ПараметрыФискализацииСторно.НомерСменыККТ = ПараметрыВызова[4];
|
||
ПараметрыФискализацииСторно.ФискальныйПризнак = ПараметрыВызова[5];
|
||
ПараметрыФискализацииСторно.АдресСайтаПроверки = ПараметрыВызова[6];
|
||
КонецЕсли;
|
||
ПараметрыФискализацииСторно.ДатаВремяЧека = ОбщегоНазначенияБПОКлиент.ДатаСеанса();
|
||
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Результат Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧекКоррекции", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет печать текста.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Попытка
|
||
Если ДанныеОперации.Свойство("ТестовыеЧеки") И ДанныеОперации.ТестовыеЧеки.Количество() > 0 Тогда
|
||
Для Каждого ТекстПечати Из ДанныеОперации.ТестовыеЧеки Цикл
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintTextDocument", ВМассив(,ТекстПечати));
|
||
РезультатВызова = Ждать ОбъектДрайвера.НапечататьТекстовыйДокументАсинх(ПараметрыПодключения.ИДУстройства, ТекстПечати); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если НЕ РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Если ДанныеОперации.Свойство("КопияЧека") И ДанныеОперации.КопияЧека.Количество() > 0 Тогда
|
||
Для Каждого Копия Из ДанныеОперации.КопияЧека Цикл
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintTextDocument", ВМассив(,Копия));
|
||
РезультатВызова = Ждать ОбъектДрайвера.НапечататьТекстовыйДокументАсинх(ПараметрыПодключения.ИДУстройства, Копия); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если НЕ РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьТекстовыйДокумент", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет инкассацию.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция Инкассация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда
|
||
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
СуммаЧека = ?(ДанныеОперации.ТипИнкассации = 1, ДанныеОперации.СуммаЧека, - ДанныеОперации.СуммаЧека);
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CashInOutcome", ВМассив(,ДанныеОперации.ДанныеЧекаXML, СуммаЧека));
|
||
РезультатВызова = Ждать ОбъектДрайвера.НапечататьЧекВнесенияВыемкиАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ДанныеЧекаXML, СуммаЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
ДанныеОперации.СтатусСмены = 1; // Открыта
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьЧекВнесенияВыемки", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Иначе
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет закрытие смены.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ЗакрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда
|
||
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь);
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CloseShift", ДанныеОперации, ", ПараметрыXML");
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML,
|
||
ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ЗакрытьСмену", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
ДанныеОперации.СтатусСмены = 1; // Статус 1 - Закрыта, 2 - Открыта, 3 - Истекла.
|
||
ДанныеОперации.РезультатXML = ПараметрыВызова[2];
|
||
Если ПараметрыВызова.Количество() > 3 Тогда
|
||
ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3];
|
||
ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[4];
|
||
КонецЕсли;
|
||
РезультатВыполнения.Результат = Истина;
|
||
РезультатВыполнения.Вставить("ДрайверСнятСПоддержки" , ПараметрыПодключения.СнятСПоддержки);
|
||
РезультатВыполнения.Вставить("СообщениеПриИспользовании", ПараметрыПодключения.СообщениеПриИспользовании);
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4001 Тогда
|
||
Результат = Ждать УстановитьИнформациюПриложенияАсинх(ОбъектДрайвера, ПараметрыПодключения);
|
||
КонецЕсли;
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет открытие смены.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ОткрытьСмену(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда
|
||
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
ПараметрыККТ = "";
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDataKKT");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ПараметрыККТ); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
ПараметрыККТ = РезультатВызова.Параметры[1];
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь);
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OpenShift", ДанныеОперации, ", ПараметрыXML");
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСменуАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML,
|
||
ДанныеОперации.НомерСменыККТ, ДанныеОперации.НомерЧекаККТ); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
Исключение
|
||
Возврат ОшибкаВызоваДрайвера("ОткрытьСмену", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
ДанныеОперации.СтатусСмены = 2; // Статус 1 - Закрыта, 2 - Открыта, 3 - Истекла.
|
||
ДанныеОперации.Вставить("ПараметрыККТ", ПараметрыККТ);
|
||
ДанныеОперации.РезультатXML = ПараметрыВызова[2];
|
||
Если ПараметрыВызова.Количество() > 3 Тогда
|
||
ДанныеОперации.НомерСменыККТ = ПараметрыВызова[3];
|
||
ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[4];
|
||
КонецЕсли;
|
||
РезультатВыполнения.Результат = Истина;
|
||
РезультатВыполнения.Вставить("ДрайверСнятСПоддержки" , ПараметрыПодключения.СнятСПоддержки);
|
||
РезультатВыполнения.Вставить("СообщениеПриИспользовании", ПараметрыПодключения.СообщениеПриИспользовании);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет открытие денежного ящика.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ОткрытьДенежныйЯщик(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OpenCashDrawer");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОткрытьДенежныйЯщикАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьДенежныйЯщик", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет формирование отчета о текущем состоянии расчетов.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ОтчетОТекущемСостоянииРасчетов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
РезультатXML = "";
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReportCurrentStatusOfSettlements", ДанныеОперации, ", ПараметрыXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтчетОТекущемСостоянииРасчетовАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, РезультатXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
ДанныеОперации.РезультатXML = РезультатВызова.Параметры[2];
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОтчетОТекущемСостоянииРасчетов", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Иначе
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет формирование отчет без гашения.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ОтчетБезГашения(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.Свойство("ПринтерЧеков") И ПараметрыПодключения.ТипыОборудования.ПринтерЧеков Тогда
|
||
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
ИначеЕсли ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintXReport", ДанныеОперации, ", ПараметрыXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.НапечататьОтчетБезГашенияАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьОтчетБезГашения", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Иначе
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет аннулирование чека.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция АннулированиеЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("НомерСменыККТ" , Неопределено);
|
||
РезультатВыполнения.Вставить("НомерЧекаККТ" , Неопределено);
|
||
РезультатВыполнения.Вставить("СтатусСмены", 2);
|
||
РезультатВыполнения.Вставить("ДатаВремяЧека", ОбщегоНазначенияБПОКлиент.ДатаСеанса());
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет получение параметров ККТ.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ПараметрыККТ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
Если ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDataKKT");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ПараметрыККТXML", РезультатВызова.Параметры[1]);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Осуществляет открытие смены.
|
||
//
|
||
// Параметры:
|
||
// ОбъектДрайвера - ОбъектВнешнейКомпоненты
|
||
// ПараметрыПодключения - Структура
|
||
// ДанныеОперации - Структура - данные операции для выполнения команды
|
||
//
|
||
Асинх Функция ТекущееСостояние(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
Возврат ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь);
|
||
Попытка
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда // Версия стандарта 3.0 (ОФД 1.1)
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCurrentStatus", ДанныеОперации, ", ПараметрыXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьТекущееСостояниеАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ДанныеОперации.РезультатXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCurrentStatus");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьТекущееСостояниеАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.НомерЧекаККТ, ДанныеОперации.НомерСменыККТ,
|
||
ДанныеОперации.СтатусСмены, ДанныеОперации.РезультатXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
Возврат ОшибкаВызоваДрайвера("ПолучитьТекущееСостояние", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
РезультатВыполнения.Результат = Истина;
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3000 Тогда
|
||
ДанныеОперации.ПараметрыXML = ПараметрыВызова[1];
|
||
ДанныеОперации.РезультатXML = ПараметрыВызова[2];
|
||
Иначе
|
||
ДанныеОперации.НомерЧекаККТ = ПараметрыВызова[1];
|
||
ДанныеОперации.НомерСменыККТ = ПараметрыВызова[2];
|
||
ДанныеОперации.СтатусСмены = ПараметрыВызова[3];
|
||
ДанныеОперации.РезультатXML = ПараметрыВызова[4];
|
||
КонецЕсли;
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Процедура осуществляет операцию с фискальным накопителем.
|
||
//
|
||
Асинх Функция ОперацияФискальногоНакопителя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
Возврат ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OperationFN", ДанныеОперации, ", ТипОперации, ПараметрыXML");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОперацияФНАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ТипОперации, ДанныеОперации.ПараметрыXML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если НЕ РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОперацияФН", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetDataKKT");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыККТАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
ДанныеОперации.Вставить("ПараметрыККТ", РезультатВызова.Параметры[1]);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыККТ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция печать копию чека.
|
||
//
|
||
Асинх Функция НапечататьКопиюЧека(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Тогда
|
||
Возврат ОшибкаВызоваДрайвера();
|
||
КонецЕсли;
|
||
|
||
Если ДанныеОперации.Свойство("Аппаратно") И ДанныеОперации.Аппаратно Тогда
|
||
|
||
НомерЧека = 0;
|
||
Если ДанныеОперации <> Неопределено И ДанныеОперации.Свойство("НомерЧека") Тогда
|
||
НомерЧека = ДанныеОперации.НомерЧека;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintCheckCopy", ВМассив(, НомерЧека));
|
||
РезультатВызова = Ждать ОбъектДрайвера.НапечататьКопиюЧекаАсинх(ПараметрыПодключения.ИДУстройства, НомерЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("НомерЧека", НомерЧека);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("НапечататьКопиюЧека", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПечатьТекста(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция открывает сессию регистрации КМ.
|
||
//
|
||
Асинх Функция ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "OpenSessionRegistrationKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецЕсли;
|
||
|
||
ИдентификаторСессии = МенеджерОборудованияКлиент.СессияПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если НЕ ПустаяСтрока(ИдентификаторСессии) Тогда
|
||
|
||
ОписаниеОшибки = НСтр("ru='Сессия проверки кодов маркировки уже открыта.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "OpenSessionRegistrationKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OpenSessionRegistrationKM");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОткрытьСессиюРегистрацииКМАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
ИдентификаторСессии = Строка(Новый УникальныйИдентификатор);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ИдентификаторСессии", ИдентификаторСессии);
|
||
МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства, ИдентификаторСессии);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Исключение
|
||
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОткрытьСессиюРегистрацииКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция закрывает сессию регистрации КМ.
|
||
//
|
||
Асинх Функция ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "CloseSessionRegistrationKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецЕсли;
|
||
|
||
ИдентификаторСессии = МенеджерОборудованияКлиент.СессияПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Если ПустаяСтрока(ИдентификаторСессии) Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CloseSessionRegistrationKM");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ЗакрытьСессиюРегистрацииКМАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
МенеджерОборудованияКлиент.УстановитьСессиюПроверкиКодовМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ЗакрытьСессиюРегистрацииКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Запрос КМ.
|
||
//
|
||
Асинх Функция ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ConfirmKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
ИдентификаторСессии = ТекущийСтатус.ИдентификаторСессии;
|
||
ИдентификаторЗапроса = ТекущийСтатус.ИдентификаторЗапроса;
|
||
|
||
// Если нет открытой сессии - открываем автоматически.
|
||
Если ПустаяСтрока(ИдентификаторСессии) Тогда
|
||
ВремРезультатВыполнения = Ждать ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
Если Не ВремРезультатВыполнения.Результат Тогда
|
||
Возврат ВремРезультатВыполнения;
|
||
Иначе
|
||
ИдентификаторСессии = ВремРезультатВыполнения.ИдентификаторСессии;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// Если есть текущая проверка КМ
|
||
Если НЕ ПустаяСтрока(ИдентификаторЗапроса) Тогда
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConfirmKM", ВМассив(, ИдентификаторЗапроса, 0));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ИдентификаторЗапроса, 0); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
|
||
КонецЕсли;
|
||
|
||
ИдентификаторЗапроса = ДанныеОперации.ИдентификаторЗапроса;
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "RequestKM", ВМассив(, Экранировать(ДанныеОперации.ПараметрыXML)));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ЗапросКМАсинх(ПараметрыПодключения.ИДУстройства, ДанныеОперации.ПараметрыXML, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
|
||
ПараметрыВызова = РезультатВызова.Параметры;
|
||
РезультатОперацииXML = ПараметрыВызова[2];
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ИдентификаторСессии" , ИдентификаторСессии);
|
||
РезультатВыполнения.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса);
|
||
РезультатВыполнения.Вставить("ЗапросXML" , ДанныеОперации.ПараметрыXML);
|
||
РезультатВыполнения.Вставить("РезультатXML", РезультатОперацииXML);
|
||
МенеджерОборудованияКлиент.УстановитьРезультатПроверкиКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства,
|
||
ИдентификаторСессии, ДанныеОперации, РезультатВыполнения, ИдентификаторЗапроса);
|
||
|
||
ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат;
|
||
ДанныеПромежуточногоРезультата = Новый Структура();
|
||
ДанныеПромежуточногоРезультата.Вставить("ДанныеОперации", ДанныеОперации);
|
||
ДанныеПромежуточногоРезультата.Вставить("РезультатВыполнения", РезультатВыполнения);
|
||
ПромежуточныйРезультат.Вставить("ЗапросКМ", ДанныеПромежуточногоРезультата);
|
||
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ЗапросКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Запрос КМ без ожидания ответа.
|
||
//
|
||
Асинх Функция ЗапросКМБезОжиданияОтвета(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
РезультатВыполнения = Ждать ЗапросКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
СтатусЗапроса = 0;
|
||
РезультатОперацииXML = "";
|
||
Если РезультатВыполнения.Результат Тогда
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetProcessingKMResult");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРезультатыЗапросаКМАсинх(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатОперацииXML = РезультатВызова.Параметры[1];
|
||
СтатусЗапроса = РезультатВызова.Параметры[2];
|
||
ДанныеОперации.Вставить("РезультатXML", РезультатОперацииXML);
|
||
ДанныеОперации.Вставить("СтатусРезультатаКод", СтатусЗапроса);
|
||
РезультатВыполнения.Результат = Истина;
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьРезультатыЗапросаКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
ДанныеОперации.Вставить("Выбытие", Истина);
|
||
РезультатВыполнения = Ждать ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если РезультатВыполнения.Результат И (СтатусЗапроса = 0 Или СтатусЗапроса = 2) Тогда
|
||
ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат;
|
||
РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ"));
|
||
ПромежуточныйРезультат.Удалить("ЗапросКМ");
|
||
ИначеЕсли Не РезультатВыполнения.Результат Тогда
|
||
ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат;
|
||
РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ"));
|
||
ПромежуточныйРезультат.Удалить("ЗапросКМ");
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Подтвердить результаты запроса КМ.
|
||
//
|
||
Асинх Функция ПодтвердитьКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ConfirmKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ИдентификаторЗапроса = ?(ДанныеОперации.Свойство("ИдентификаторЗапроса"), ДанныеОперации.ИдентификаторЗапроса, "");
|
||
Выбытие = ?(ДанныеОперации.Свойство("Выбытие"), ДанныеОперации.Выбытие, Истина);
|
||
|
||
Если ПустаяСтрока(ИдентификаторЗапроса) Тогда
|
||
ОписаниеОшибки = НСтр("ru='Идентификатор запроса КМ не указан.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ConfirmKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
|
||
ТипПодтверждения = ?(Выбытие, 0, 1);
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ConfirmKM", ВМассив(, ИдентификаторЗапроса, ТипПодтверждения));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПодтвердитьКМАсинх(ПараметрыПодключения.ИДУстройства, ИдентификаторЗапроса, ТипПодтверждения); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ИдентификаторЗапроса", ИдентификаторЗапроса);
|
||
МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИдентификаторУстройства);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПодтвердитьКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Получить результаты запроса КМ.
|
||
//
|
||
Асинх Функция РезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetProcessingKMResult", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
|
||
ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат;
|
||
РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ"));
|
||
ПромежуточныйРезультат.Удалить("ЗапросКМ");
|
||
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
СтатусЗапроса = 0;
|
||
РезультатОперацииXML = "";
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetProcessingKMResult");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьРезультатыЗапросаКМАсинх(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатОперацииXML = РезультатВызова.Параметры[1];
|
||
СтатусЗапроса = РезультатВызова.Параметры[2];
|
||
ДанныеОперации.Вставить("РезультатXML", РезультатОперацииXML);
|
||
ДанныеОперации.Вставить("СтатусРезультатаКод", СтатусЗапроса);
|
||
|
||
Иначе
|
||
ДанныеОперации.Вставить("РезультатXML", "");
|
||
ДанныеОперации.Вставить("СтатусРезультатаКод", 0);
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьРезультатыЗапросаКМ", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Если РезультатВыполнения.Результат И (СтатусЗапроса = 0 Или СтатусЗапроса = 2) Тогда
|
||
ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат;
|
||
РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ"));
|
||
ПромежуточныйРезультат.Удалить("ЗапросКМ");
|
||
ИначеЕсли Не РезультатВыполнения.Результат Тогда
|
||
ПромежуточныйРезультат = МенеджерОборудованияКлиент.ПодключаемоеОборудование().ПромежуточныйРезультат;
|
||
РезультатВыполнения.Вставить("ЗапросКМ", ПромежуточныйРезультат.Получить("ЗапросКМ"));
|
||
ПромежуточныйРезультат.Удалить("ЗапросКМ");
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Проверка КМ.
|
||
//
|
||
Асинх Функция ПроверкаКМ(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
ОписаниеОшибки = СтрШаблон(
|
||
НСтр("ru='Драйвер %1 (версия %2) (рев.%3) не поддерживает операцию проверки кода маркировки. Для корректной работы требуется обновить драйвер.'"),
|
||
ПараметрыПодключения.Наименование,
|
||
ПараметрыПодключения.ВерсияДрайвера,
|
||
ПараметрыПодключения.РевизияИнтерфейса);
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "RequestKM", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ДлительнаяОперация", "ПроверкаКМ");
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет фискализацию чека пакетом.
|
||
//
|
||
Асинх Функция ФискализацияЧекаПакетом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
|
||
Если НЕ ПараметрыПодключения.ТипыОборудования.ККТ Или ПараметрыПодключения.РевизияИнтерфейса < 3004 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Драйвер не поддерживает операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "ProcessCheck", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ProcessCheck", ВМассив(, Ложь, ДанныеОперации.ДанныеЧекаXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.СформироватьЧекАсинх(ПараметрыПодключения.ИДУстройства, Ложь, ДанныеОперации.ДанныеЧекаXML, ДанныеОперации.РезультатОперацииXML);; // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("СформироватьЧек", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ЭквайринговыеТерминалы
|
||
|
||
Функция РезультатЭквайринговойОперации(Результат, ОписаниеОшибки, ПараметрыПодключения) Экспорт
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Результат, ОписаниеОшибки, ПараметрыПодключения.ИдентификаторУстройства);
|
||
|
||
РезультатВыполнения.Вставить("ВидОплатыНаТерминале");
|
||
РезультатВыполнения.Вставить("ВидОплатыНаТерминалеКод", 0);
|
||
РезультатВыполнения.Вставить("НомерМерчанта");
|
||
РезультатВыполнения.Вставить("НомерКарты");
|
||
РезультатВыполнения.Вставить("НомерЧекаЭТ");
|
||
РезультатВыполнения.Вставить("СсылочныйНомер");
|
||
РезультатВыполнения.Вставить("КодАвторизации");
|
||
РезультатВыполнения.Вставить("СтатусОперации");
|
||
РезультатВыполнения.Вставить("РеквизитыКартыQR");
|
||
РезультатВыполнения.Вставить("ИдентификаторКорзины");
|
||
|
||
РезультатВыполнения.Вставить("СуммаОперации");
|
||
РезультатВыполнения.Вставить("СуммаЭлектронногоСертификата");
|
||
РезультатВыполнения.Вставить("СуммаСобственныхСредств");
|
||
РезультатВыполнения.Вставить("ТекстСлипЧека");
|
||
|
||
РезультатВыполнения.Вставить("ХешНомерКарты");
|
||
РезультатВыполнения.Вставить("СсылкаНаПлатежныйСчет");
|
||
РезультатВыполнения.Вставить("ДатаВремя");
|
||
РезультатВыполнения.Вставить("КодЗавершения");
|
||
РезультатВыполнения.Вставить("ИдентификаторПлатежнойСистемы");
|
||
РезультатВыполнения.Вставить("ИдентификаторБанковскойТранзакции");
|
||
|
||
РезультатВыполнения.Вставить("ИдентификаторТерминала" , ПараметрыПодключения.ИдентификаторТерминала);
|
||
РезультатВыполнения.Вставить("ИдентификаторБанкаЭквайера", ПараметрыПодключения.ИдентификаторБанкаЭквайера);
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Процедура возвращает параметры терминале.
|
||
//
|
||
Асинх Функция ПараметрыТерминала(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "TerminalParamters");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПараметрыТерминалаАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
РезультатОперацииXML = РезультатВызова.Параметры[1];
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
|
||
ПараметрыТерминала = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML);
|
||
Если ПараметрыТерминала.Свойство("TerminalID") И Не ПустаяСтрока(ПараметрыТерминала.TerminalID) Тогда
|
||
ПараметрыПодключения.ИдентификаторТерминала = ПараметрыТерминала.TerminalID;
|
||
КонецЕсли;
|
||
Если ПараметрыТерминала.Свойство("AcquiringBankIdentifier") И Не ПустаяСтрока(ПараметрыТерминала.AcquiringBankIdentifier) Тогда
|
||
ПараметрыПодключения.ИдентификаторБанкаЭквайера = ПараметрыТерминала.AcquiringBankIdentifier;
|
||
КонецЕсли;
|
||
ПараметрыПодключения.ПечатьКвитанцийНаТерминале = ПараметрыТерминала.Свойство("PrintSlipOnTerminal") И ВРег(ПараметрыТерминала.PrintSlipOnTerminal) = "TRUE";
|
||
ПараметрыПодключения.КороткиеСлипЧеки = ПараметрыТерминала.Свойство("ShortSlip") И ВРег(ПараметрыТерминала.ShortSlip) = "TRUE";
|
||
ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств = ПараметрыТерминала.Свойство("CashWithdrawal") И ВРег(ПараметрыТерминала.CashWithdrawal) = "TRUE";
|
||
ПараметрыПодключения.ОплатаЭлектроннымиСертификатами = ПараметрыТерминала.Свойство("ElectronicCertificates") И ВРег(ПараметрыТерминала.ElectronicCertificates) = "TRUE";
|
||
ПараметрыПодключения.ЧастичнаяОтмена = ПараметрыТерминала.Свойство("PartialCancellation") И ВРег(ПараметрыТерминала.PartialCancellation) = "TRUE";
|
||
ПараметрыПодключения.ConsumerPresentedQR = ПараметрыТерминала.Свойство("ConsumerPresentedQR") И ВРег(ПараметрыТерминала.ConsumerPresentedQR) = "TRUE";
|
||
ПараметрыПодключения.ПокупкаСЗачислениемНаКарту = ПараметрыТерминала.Свойство("PurchaseWithEnrollment") И ВРег(ПараметрыТерминала.PurchaseWithEnrollment) = "TRUE";
|
||
ПараметрыПодключения.СписокОперацийПоКартам = ПараметрыТерминала.Свойство("ListCardTransactions") И ВРег(ПараметрыТерминала.ListCardTransactions) = "TRUE";
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
КонецЕсли
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПараметрыТерминала", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
Иначе
|
||
Попытка
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PrintSlipOnTerminal");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПечатьКвитанцийНаТерминалеАсинх(); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ПараметрыПодключения.ПечатьКвитанцийНаТерминале = РезультатВызова.Значение;
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПечатьКвитанцийНаТерминале", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция выполняет получение параметров карты.
|
||
//
|
||
Асинх Функция ПараметрыКарты(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
|
||
Если РевизияИнтерфейса > 3004 Тогда
|
||
ОтПоследнейОперации = Ложь;
|
||
НомерКарты = "";
|
||
ХешНомерКарты = "";
|
||
РеквизитыКартыQR = "";
|
||
СсылкаНаПлатежныйСчет = "";
|
||
ТипКарты = "";
|
||
СвояКарта = 0;
|
||
Попытка
|
||
Если РевизияИнтерфейса >= 4000 Тогда
|
||
РеквизитыКартыQR = ?(ДанныеОперации.Свойство("РеквизитыКартыQR"), ДанныеОперации.РеквизитыКартыQR, "");
|
||
Если Не ПустаяСтрока(РеквизитыКартыQR) И НЕ ПараметрыПодключения.ConsumerPresentedQR Тогда
|
||
ОписаниеОшибки = НСтр("ru='Consumer-Presented QR не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetCardParametrs", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCardParametrs", ВМассив(, РеквизитыКартыQR, ОтПоследнейОперации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, РеквизитыКартыQR, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, СсылкаНаПлатежныйСчет, ТипКарты, СвояКарта); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли РевизияИнтерфейса >= 3007 Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCardParametrs", ВМассив(,ОтПоследнейОперации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, СсылкаНаПлатежныйСчет, ТипКарты, СвояКарта); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Иначе
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCardParametrs", ВМассив(,ОтПоследнейОперации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыКартыАсинх(ПараметрыПодключения.ИДУстройства, ОтПоследнейОперации, НомерКарты, ХешНомерКарты, ТипКарты, СвояКарта); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, ", , НомерКарты, ХешНомерКарты, ТипКарты, СвояКарта");
|
||
КонецЕсли;
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Если РевизияИнтерфейса >= 4000 Тогда
|
||
РеквизитыКартыQR = РезультатВызова.Параметры[1];
|
||
НомерКарты = РезультатВызова.Параметры[3];
|
||
ХешНомерКарты = РезультатВызова.Параметры[4];
|
||
СсылкаНаПлатежныйСчет = РезультатВызова.Параметры[5];
|
||
ТипКарты = РезультатВызова.Параметры[6];
|
||
СвояКарта = РезультатВызова.Параметры[7];
|
||
ИначеЕсли РевизияИнтерфейса >= 3007 Тогда
|
||
НомерКарты = РезультатВызова.Параметры[2];
|
||
ХешНомерКарты = РезультатВызова.Параметры[3];
|
||
СсылкаНаПлатежныйСчет = РезультатВызова.Параметры[4];
|
||
ТипКарты = РезультатВызова.Параметры[5];
|
||
СвояКарта = РезультатВызова.Параметры[6];
|
||
Иначе
|
||
НомерКарты = РезультатВызова.Параметры[2];
|
||
ХешНомерКарты = РезультатВызова.Параметры[3];
|
||
ТипКарты = РезультатВызова.Параметры[4];
|
||
СвояКарта = РезультатВызова.Параметры[5];
|
||
КонецЕсли;
|
||
РезультатВыполнения.Вставить("НомерКарты" , НомерКарты);
|
||
РезультатВыполнения.Вставить("ХешНомерКарты", ХешНомерКарты);
|
||
РезультатВыполнения.Вставить("СсылкаНаПлатежныйСчет", СсылкаНаПлатежныйСчет);
|
||
РезультатВыполнения.Вставить("РеквизитыКартыQR" , РеквизитыКартыQR);
|
||
РезультатВыполнения.Вставить("ТипКарты" , ТипКарты);
|
||
РезультатВыполнения.Вставить("СвояКарта" , СвояКарта);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыКарты", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetCardParametrs", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Процедура возвращает операции по картам.
|
||
//
|
||
Асинх Функция ОперацииПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса < 4000 Тогда
|
||
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetOperationByCards", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
|
||
Иначе
|
||
|
||
Если НЕ ПараметрыПодключения.СписокОперацийПоКартам Тогда
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "GetOperationByCards", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetOperationByCards");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьОперацииПоКартамАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатОперацииXML = РезультатВызова.Параметры[1];
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("РезультатОперацииXML", РезультатОперацииXML);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьОперацииПоКартам", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет операцию на ЭТ.
|
||
//
|
||
Асинх Функция ЭквайринговаяОперация(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда)
|
||
|
||
РевизияИнтерфейса = ПараметрыПодключения.РевизияИнтерфейса;
|
||
|
||
РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, "");
|
||
НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0);
|
||
НомерКарты = ?(ДанныеОперации.НомерКарты <> Неопределено, ДанныеОперации.НомерКарты, "");
|
||
НомерЧека = ?(ДанныеОперации.НомерЧека <> Неопределено, ДанныеОперации.НомерЧека, "");
|
||
СсылочныйНомер = ?(ДанныеОперации.СсылочныйНомер <> Неопределено, ДанныеОперации.СсылочныйНомер, "");
|
||
КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, "");
|
||
СуммаОперации = ?(ДанныеОперации.СуммаОперации <> Неопределено, ДанныеОперации.СуммаОперации, 0);
|
||
СуммаНаличных = ?(ДанныеОперации.СуммаНаличных <> Неопределено, ДанныеОперации.СуммаНаличных, 0);
|
||
СуммаОригинальнойОперации = ?(ДанныеОперации.СуммаОригинальнойОперации <> Неопределено, ДанныеОперации.СуммаОригинальнойОперации, 0);
|
||
ТекстСлипЧека = "";
|
||
|
||
Попытка
|
||
Если РевизияИнтерфейса >= 4000 Тогда
|
||
|
||
Если Команда = "AuthorizeSales" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCard",
|
||
ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,НомерКарты,НомерЧека));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации,
|
||
НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeRefund" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard",
|
||
ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации,
|
||
НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeVoid" Тогда
|
||
|
||
Если СуммаОригинальнойОперации > 0 И НЕ ПараметрыПодключения.ЧастичнаяОтмена Тогда
|
||
ОписаниеОшибки = НСтр("ru='Частичная отмена не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "CancelPaymentByPaymentCard", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
Иначе
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard",
|
||
ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации,
|
||
СуммаОригинальнойОперации, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда
|
||
|
||
Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal",
|
||
ВМассив(,НомерМерчанта,РеквизитыКартыQR,СуммаОперации,СуммаНаличных));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, СуммаОперации,
|
||
СуммаНаличных, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли РевизияИнтерфейса >= 3005 Тогда
|
||
|
||
Если Команда = "AuthorizeSales" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCard", ВМассив(, НомерМерчанта, СуммаОперации, НомерКарты, НомерЧека));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации,
|
||
НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeRefund" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard",
|
||
ВМассив(,НомерМерчанта,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации,
|
||
НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeVoid" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelPaymentByPaymentCard",
|
||
ВМассив(,НомерМерчанта,СуммаОперации,НомерКарты,НомерЧека,СсылочныйНомер,КодАвторизации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации,
|
||
НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли РевизияИнтерфейса >= 3006 И Команда = "PayByPaymentCardWithCashWithdrawal" Тогда
|
||
|
||
Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal",
|
||
ВМассив(,НомерМерчанта,СуммаОперации,СуммаНаличных));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, СуммаОперации,
|
||
СуммаНаличных, НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, ", , , НомерКарты, НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека");
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PayByPaymentCardWithCashWithdrawal", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Иначе
|
||
|
||
Если Команда = "AuthorizeSales" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayByPaymentCard", ВМассив(,НомерКарты, СуммаОперации, НомерЧека));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьПлатежнойКартойАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации,
|
||
НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeRefund" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPaymentByPaymentCard",
|
||
ВМассив(,НомерКарты,СуммаОперации,НомерЧека,СсылочныйНомер,КодАвторизации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации,
|
||
НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeVoid" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelPaymentByPaymentCard",
|
||
ВМассив(,НомерКарты,СуммаОперации,НомерЧека,СсылочныйНомер,КодАвторизации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежПоПлатежнойКартеАсинх(ПараметрыПодключения.ИДУстройства, НомерКарты, СуммаОперации,
|
||
НомерЧека, СсылочныйНомер, КодАвторизации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
Если РевизияИнтерфейса >= 4000 Тогда
|
||
НомерМерчанта = РезультатВызова.Параметры[1];
|
||
РеквизитыКартыQR = РезультатВызова.Параметры[2];
|
||
СуммаОперации = РезультатВызова.Параметры[3];
|
||
Если Команда = "AuthorizeVoid" Тогда
|
||
НомерКарты = РезультатВызова.Параметры[5];
|
||
НомерЧека = РезультатВызова.Параметры[6];
|
||
СсылочныйНомер = РезультатВызова.Параметры[7];
|
||
КодАвторизации = РезультатВызова.Параметры[8];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[9];
|
||
ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда
|
||
СуммаНаличных = РезультатВызова.Параметры[4];
|
||
НомерКарты = РезультатВызова.Параметры[5];
|
||
НомерЧека = РезультатВызова.Параметры[6];
|
||
СсылочныйНомер = РезультатВызова.Параметры[7];
|
||
КодАвторизации = РезультатВызова.Параметры[8];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[9];
|
||
Иначе
|
||
НомерКарты = РезультатВызова.Параметры[4];
|
||
НомерЧека = РезультатВызова.Параметры[5];
|
||
СсылочныйНомер = РезультатВызова.Параметры[6];
|
||
КодАвторизации = РезультатВызова.Параметры[7];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[8];
|
||
КонецЕсли;
|
||
ИначеЕсли РевизияИнтерфейса >= 3005 Тогда
|
||
НомерМерчанта = РезультатВызова.Параметры[1];
|
||
СуммаОперации = РезультатВызова.Параметры[2];
|
||
Если Команда = "PayByPaymentCardWithCashWithdrawal" Тогда
|
||
СуммаНаличных = РезультатВызова.Параметры[3];
|
||
НомерКарты = РезультатВызова.Параметры[4];
|
||
НомерЧека = РезультатВызова.Параметры[5];
|
||
СсылочныйНомер = РезультатВызова.Параметры[6];
|
||
КодАвторизации = РезультатВызова.Параметры[7];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[8];
|
||
Иначе
|
||
НомерКарты = РезультатВызова.Параметры[3];
|
||
НомерЧека = РезультатВызова.Параметры[4];
|
||
СсылочныйНомер = РезультатВызова.Параметры[5];
|
||
КодАвторизации = РезультатВызова.Параметры[6];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[7];
|
||
КонецЕсли;
|
||
Иначе
|
||
НомерКарты = РезультатВызова.Параметры[1];
|
||
СуммаОперации = РезультатВызова.Параметры[2];
|
||
НомерЧека = РезультатВызова.Параметры[3];
|
||
СсылочныйНомер = РезультатВызова.Параметры[4];
|
||
КодАвторизации = РезультатВызова.Параметры[5];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[6];
|
||
КонецЕсли;
|
||
РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения);
|
||
РезультатВыполнения.НомерМерчанта = НомерМерчанта;
|
||
РезультатВыполнения.НомерКарты = НомерКарты;
|
||
РезультатВыполнения.НомерЧекаЭТ = НомерЧека;
|
||
РезультатВыполнения.СсылочныйНомер = СсылочныйНомер;
|
||
РезультатВыполнения.КодАвторизации = КодАвторизации;
|
||
РезультатВыполнения.СуммаОперации = СуммаОперации;
|
||
РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR;
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека);
|
||
ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование();
|
||
ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет операцию на ЭТ в XML режиме.
|
||
//
|
||
Асинх Функция ЭквайринговаяОперацияXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса < 4003 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, "");
|
||
СуммаОперации = ?(ДанныеОперации.СуммаОперации <> Неопределено, ДанныеОперации.СуммаОперации, 0);
|
||
НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0);
|
||
СуммаОригинальнойОперации = ?(ДанныеОперации.СуммаОригинальнойОперации <> Неопределено, ДанныеОперации.СуммаОригинальнойОперации, 0);
|
||
ВходяшиеПараметрыXML = ?(ДанныеОперации.Свойство("ВходяшиеПараметрыXML"), ДанныеОперации.ВходяшиеПараметрыXML, "");
|
||
ТекстСлипЧека = "";
|
||
ИсходящиеПараметрыXML = "";
|
||
|
||
Попытка
|
||
Если Команда = "AuthorizeSales" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Pay", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeRefund" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnPayment", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьПлатежАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeVoid" Тогда
|
||
|
||
Если СуммаОригинальнойОперации > 0 И НЕ ПараметрыПодключения.ЧастичнаяОтмена Тогда
|
||
ОписаниеОшибки = НСтр("ru='Частичная отмена не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "CancelPayment", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
Иначе
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelPayment", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПлатежАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Команда = "PayByPaymentCardWithCashWithdrawal" Тогда
|
||
|
||
Если ПараметрыПодключения.ВыдачиНаличныхДенежныхСредств Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayWithCashWithdrawal", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатаCВыдачейНаличныхАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PayWithCashWithdrawal", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Команда = "PurchaseWithEnrollment" Тогда
|
||
|
||
Если ПараметрыПодключения.ПокупкаСЗачислениемНаКарту Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PurchaseWithEnrollment", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПокупкаСЗачислениемАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "PurchaseWithEnrollment", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Команда = "AuthorizePreSales" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Authorisation", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПреавторизацияАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeCompletion" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "AuthConfirmation", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ЗавершитьПреавторизациюАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "AuthorizeVoidPreSales" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "CancelAuthorisation", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтменитьПреавторизациюАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения);
|
||
РезультатВыполнения.НомерМерчанта = НомерМерчанта;
|
||
РезультатВыполнения.СуммаОперации = СуммаОперации;
|
||
РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR;
|
||
|
||
ВходяшиеПараметрыXML = РезультатВызова.Параметры[1];
|
||
ИсходящиеПараметрыXML = РезультатВызова.Параметры[2];
|
||
РезультатВыполнения.Вставить("ВходяшиеПараметрыXML" , ВходяшиеПараметрыXML);
|
||
РезультатВыполнения.Вставить("ИсходящиеПараметрыXML" , ИсходящиеПараметрыXML);
|
||
ТекстСлипЧека = РезультатВызова.Параметры[3];
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека);
|
||
ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование();
|
||
ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет операцию на ЭТ c электронным сертификатом.
|
||
//
|
||
Асинх Функция ЭквайринговаяОперацияСЭлектроннымСертификатом(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса < 3005 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, "");
|
||
НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0);
|
||
НомерКарты = ?(ДанныеОперации.НомерКарты <> Неопределено, ДанныеОперации.НомерКарты, "");
|
||
НомерЧека = ?(ДанныеОперации.НомерЧека <> Неопределено, ДанныеОперации.НомерЧека, "");
|
||
СсылочныйНомер = ?(ДанныеОперации.СсылочныйНомер <> Неопределено, ДанныеОперации.СсылочныйНомер, "");
|
||
КодАвторизации = ?(ДанныеОперации.КодАвторизации <> Неопределено, ДанныеОперации.КодАвторизации, "");
|
||
ИдентификаторКорзины = ?(ДанныеОперации.ИдентификаторКорзины <> Неопределено, ДанныеОперации.ИдентификаторКорзины, "");
|
||
СуммаЭлектронногоСертификата = ?(ДанныеОперации.СуммаЭлектронногоСертификата <> Неопределено, ДанныеОперации.СуммаЭлектронногоСертификата, 0);
|
||
СуммаСобственныхСредств = ?(ДанныеОперации.СуммаСобственныхСредств <> Неопределено, ДанныеОперации.СуммаСобственныхСредств, 0);
|
||
ТекстСлипЧека = "";
|
||
СтатусОперации = 0;
|
||
|
||
Если НЕ ПараметрыПодключения.ОплатаЭлектроннымиСертификатами Тогда
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда
|
||
Если Команда = "PayElectronicCertificate" Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate",
|
||
ВМассив(,НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины,
|
||
СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека,
|
||
СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate",
|
||
ВМассив(,НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, СсылочныйНомер));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, РеквизитыКартыQR, ИдентификаторКорзины,
|
||
СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека,
|
||
СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
Иначе
|
||
Если Команда = "PayElectronicCertificate" Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate",
|
||
ВМассив(,НомерМерчанта, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, ИдентификаторКорзины,
|
||
СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека,
|
||
СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate",
|
||
ВМассив(,НомерМерчанта, ИдентификаторКорзины, СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека, СсылочныйНомер));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьЭлектроннымСертификатомАсинх(ПараметрыПодключения.ИДУстройства, НомерМерчанта, ИдентификаторКорзины,
|
||
СуммаЭлектронногоСертификата, СуммаСобственныхСредств, НомерКарты, НомерЧека,
|
||
СсылочныйНомер, КодАвторизации, СтатусОперации, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда
|
||
НомерМерчанта = РезультатВызова.Параметры[1];
|
||
РеквизитыКартыQR = РезультатВызова.Параметры[2];
|
||
ИдентификаторКорзины = РезультатВызова.Параметры[3];
|
||
СуммаЭлектронногоСертификата = РезультатВызова.Параметры[4];
|
||
СуммаСобственныхСредств = РезультатВызова.Параметры[5];
|
||
НомерКарты = РезультатВызова.Параметры[6];
|
||
НомерЧека = РезультатВызова.Параметры[7];
|
||
СсылочныйНомер = РезультатВызова.Параметры[8];
|
||
КодАвторизации = РезультатВызова.Параметры[9];
|
||
СтатусОперации = РезультатВызова.Параметры[10];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[11];
|
||
Иначе
|
||
НомерМерчанта = РезультатВызова.Параметры[1];
|
||
ИдентификаторКорзины = РезультатВызова.Параметры[2];
|
||
СуммаЭлектронногоСертификата = РезультатВызова.Параметры[3];
|
||
СуммаСобственныхСредств = РезультатВызова.Параметры[4];
|
||
НомерКарты = РезультатВызова.Параметры[5];
|
||
НомерЧека = РезультатВызова.Параметры[6];
|
||
СсылочныйНомер = РезультатВызова.Параметры[7];
|
||
КодАвторизации = РезультатВызова.Параметры[8];
|
||
СтатусОперации = РезультатВызова.Параметры[9];
|
||
ТекстСлипЧека = РезультатВызова.Параметры[10];
|
||
КонецЕсли;
|
||
РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения);
|
||
РезультатВыполнения.НомерМерчанта = НомерМерчанта;
|
||
РезультатВыполнения.НомерКарты = НомерКарты;
|
||
РезультатВыполнения.НомерЧекаЭТ = НомерЧека;
|
||
РезультатВыполнения.СсылочныйНомер = СсылочныйНомер;
|
||
РезультатВыполнения.КодАвторизации = КодАвторизации;
|
||
РезультатВыполнения.СтатусОперации = СтатусОперации;
|
||
РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR;
|
||
РезультатВыполнения.ИдентификаторКорзины = ИдентификаторКорзины;
|
||
РезультатВыполнения.СуммаЭлектронногоСертификата = СуммаЭлектронногоСертификата;
|
||
РезультатВыполнения.СуммаСобственныхСредств = СуммаСобственныхСредств;
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека);
|
||
ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование();
|
||
ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет аварийную отмену операции по карте.
|
||
//
|
||
Асинх Функция АварийнаяОтменаОперации(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "EmergencyReversal");
|
||
РезультатВызова = Ждать ОбъектДрайвера.АварийнаяОтменаОперацииАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("АварийнаяОтменаОперации", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет сверку итогов по картам.
|
||
//
|
||
Асинх Функция ИтогиДняПоКартам(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
ТекстСлипЧека = "";
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Settlement");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ИтогиДняПоКартамАсинх(ПараметрыПодключения.ИДУстройства, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ТекстСлипЧека", РезультатВызова.Параметры[1]);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ИтогиДняПоКартам", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса > 4001 Тогда
|
||
Результат = Ждать УстановитьИнформациюПриложенияАсинх(ОбъектДрайвера, ПараметрыПодключения);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет операцию на ЭТ c электронным сертификатом в XML режиме.
|
||
//
|
||
Асинх Функция ЭквайринговаяОперацияСЭлектроннымСертификатомXML(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации, Команда)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса < 4003 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
РеквизитыКартыQR = ?(ДанныеОперации.РеквизитыКартыQR <> Неопределено, ДанныеОперации.РеквизитыКартыQR, "");
|
||
НомерМерчанта = ?(ДанныеОперации.НомерМерчанта <> Неопределено, ДанныеОперации.НомерМерчанта, 0);
|
||
ИдентификаторКорзины = ?(ДанныеОперации.ИдентификаторКорзины <> Неопределено, ДанныеОперации.ИдентификаторКорзины, "");
|
||
СуммаЭлектронногоСертификата = ?(ДанныеОперации.СуммаЭлектронногоСертификата <> Неопределено, ДанныеОперации.СуммаЭлектронногоСертификата, 0);
|
||
СуммаСобственныхСредств = ?(ДанныеОперации.СуммаСобственныхСредств <> Неопределено, ДанныеОперации.СуммаСобственныхСредств, 0);
|
||
ВходяшиеПараметрыXML = ?(ДанныеОперации.Свойство("ВходяшиеПараметрыXML"), ДанныеОперации.ВходяшиеПараметрыXML, "");
|
||
ТекстСлипЧека = "";
|
||
ИсходящиеПараметрыXML = "";
|
||
|
||
Если НЕ ПараметрыПодключения.ОплатаЭлектроннымиСертификатами Тогда
|
||
ОписаниеОшибки = НСтр("ru='Терминал не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Если Команда = "PayElectronicCertificate" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "PayElectronicCertificate", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОплатитьСертификатомАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
ИначеЕсли Команда = "ReturnElectronicCertificate" Тогда
|
||
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ReturnElectronicCertificate", ВМассив(,ВходяшиеПараметрыXML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВернутьСертификатомАсинх(ПараметрыПодключения.ИДУстройства, ВходяшиеПараметрыXML, ИсходящиеПараметрыXML, ТекстСлипЧека); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
|
||
Иначе
|
||
ОписаниеОшибки = НСтр("ru='Команда не поддерживается драйвером.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатЭквайринговойОперации(Истина, Неопределено, ПараметрыПодключения);
|
||
РезультатВыполнения.НомерМерчанта = НомерМерчанта;
|
||
РезультатВыполнения.РеквизитыКартыQR = РеквизитыКартыQR;
|
||
РезультатВыполнения.ИдентификаторКорзины = ИдентификаторКорзины;
|
||
РезультатВыполнения.СуммаЭлектронногоСертификата = СуммаЭлектронногоСертификата;
|
||
РезультатВыполнения.СуммаСобственныхСредств = СуммаСобственныхСредств;
|
||
|
||
ВходяшиеПараметрыXML = РезультатВызова.Параметры[1];
|
||
ИсходящиеПараметрыXML = РезультатВызова.Параметры[2];
|
||
РезультатВыполнения.Вставить("ВходяшиеПараметрыXML" , ВходяшиеПараметрыXML);
|
||
РезультатВыполнения.Вставить("ИсходящиеПараметрыXML" , ИсходящиеПараметрыXML);
|
||
ТекстСлипЧека = РезультатВызова.Параметры[3];
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Вставить("ТекстСлипЧека" , ТекстСлипЧека);
|
||
ПодключаемоеОборудование = МенеджерОборудованияКлиент.ПодключаемоеОборудование();
|
||
ПодключаемоеОборудование.ПоследнийСлипЧек = ТекстСлипЧека;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера(Команда, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ДисплейПокупателя
|
||
|
||
// Функция возвращает параметры вывода на дисплей покупателя.
|
||
//
|
||
Асинх Функция ПараметрыВывода(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 3004 Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetCustomerDisplayOptions");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыДисплеяПокупателяАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
РезультатОперацииXML = РезультатВызова.Параметры[1];
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыДисплея = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML);
|
||
Если ПараметрыДисплея.Свойство("Columns") И Не ПустаяСтрока(ПараметрыДисплея.Columns) Тогда
|
||
ПараметрыПодключения.СтолбцовНаДисплее = Число(ПараметрыДисплея.Columns);
|
||
КонецЕсли;
|
||
Если ПараметрыДисплея.Свойство("Rows") И Не ПустаяСтрока(ПараметрыДисплея.Rows) Тогда
|
||
ПараметрыПодключения.СтрокНаДисплее = Число(ПараметрыДисплея.Rows);
|
||
КонецЕсли;
|
||
ПараметрыПодключения.ДисплейОтображаетТекст = ПараметрыДисплея.Свойство("DisplayText") И ВРег(ПараметрыДисплея.DisplayText) = "TRUE";
|
||
ПараметрыПодключения.ДисплейОтображаетГрафику = ПараметрыДисплея.Свойство("DisplayGraphics") И ВРег(ПараметрыДисплея.DisplayGraphics) = "TRUE";
|
||
ПараметрыПодключения.ДисплейОтображаетQRКод = ПараметрыДисплея.Свойство("DisplayQRCode") И ВРег(ПараметрыДисплея.DisplayQRCode) = "TRUE";
|
||
ПараметрыПодключения.ДисплейОтображаетHTML = ПараметрыДисплея.Свойство("DisplayHTML") И ВРег(ПараметрыДисплея.DisplayHTML) = "TRUE";
|
||
ПараметрыПодключения.ДисплейОтображаетСтатус = ПараметрыДисплея.Свойство("DisplayStatus") И ВРег(ПараметрыДисплея.DisplayStatus) = "TRUE";
|
||
ПараметрыПодключения.ДисплейОтображаетСостоянияРМ = ПараметрыДисплея.Свойство("DisplayWorkplaceStatus") И ВРег(ПараметрыДисплея.DisplayWorkplaceStatus) = "TRUE";
|
||
ПараметрыПодключения.ДисплейОтрабатываетНажатия = ПараметрыДисплея.Свойство("DisplayInteractiveMode") И ВРег(ПараметрыДисплея.DisplayInteractiveMode) = "TRUE";
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("СтолбцовНаДисплее", ПараметрыПодключения.СтолбцовНаДисплее);
|
||
РезультатВыполнения.Вставить("СтрокНаДисплее" , ПараметрыПодключения.СтрокНаДисплее);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетТекст" , ПараметрыПодключения.ДисплейОтображаетТекст);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетГрафику", ПараметрыПодключения.ДисплейОтображаетГрафику);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетQRКод" , ПараметрыПодключения.ДисплейОтображаетQRКод);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетHTML" , ПараметрыПодключения.ДисплейОтображаетHTML);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетСтатус" , ПараметрыПодключения.ДисплейОтображаетСтатус);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетСостоянияРМ", ПараметрыПодключения.ДисплейОтображаетСостоянияРМ);
|
||
РезультатВыполнения.Вставить("ДисплейОтрабатываетНажатия", ПараметрыПодключения.ДисплейОтрабатываетНажатия);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыДисплеяПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
Иначе
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetOutputOptions");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьПараметрыВыводаАсинх(ПараметрыПодключения.ИДУстройства, 20, 2); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыПодключения.СтолбцовНаДисплее = Число(РезультатВызова.Параметры[1]);
|
||
ПараметрыПодключения.СтрокНаДисплее = Число(РезультатВызова.Параметры[2]);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("СтолбцовНаДисплее", ПараметрыПодключения.СтолбцовНаДисплее);
|
||
РезультатВыполнения.Вставить("СтрокНаДисплее" , ПараметрыПодключения.СтрокНаДисплее);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетТекст" , Истина);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетГрафику", Ложь);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетQRКод" , Ложь);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетHTML" , Ложь);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетСтатус" , Ложь);
|
||
РезультатВыполнения.Вставить("ДисплейОтображаетСостоянияРМ", Ложь);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьПараметрыВывода", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет вывод списка строк на дисплей покупателя.
|
||
//
|
||
Асинх Функция ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
СтрокиТекста = ?(ДанныеОперации.Свойство("СтрокиТекста"), ДанныеОперации.СтрокиТекста, НСтр("ru='Данные для вывода не указаны'"));
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "StringOutputOnCustomerDisplay", ВМассив(,СтрокиТекста));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, СтрокиТекста); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиСтрокуНаДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет вывод QR кода на дисплей покупателя.
|
||
//
|
||
Асинх Функция ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
ЗначениеQRКода = ?(ДанныеОперации.Свойство("ЗначениеQRКода"), ДанныеОперации.ЗначениеQRКода, "");
|
||
КартинкаQRКода = ?(ДанныеОперации.Свойство("КартинкаQRКода"), ДанныеОперации.КартинкаQRКода, "");
|
||
СтрокиТекста = ?(ДанныеОперации.Свойство("СтрокиТекста"), ДанныеОперации.СтрокиТекста, "");
|
||
|
||
Если Не ПустаяСтрока(СтрокиТекста) Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "StringOutputOnCustomerDisplay", ВМассив(,СтрокиТекста));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВывестиСтрокуНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, СтрокиТекста); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиСтрокуНаДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
Возврат РезультатВыполнения;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "QRCodeOutputOnCustomerDisplay", ВМассив(,ЗначениеQRКода, КартинкаQRКода));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВывестиQRКодНаДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства, ЗначениеQRКода, КартинкаQRКода); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиQRКодНаДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет вывод HTML на дисплей покупателя.
|
||
//
|
||
Асинх Функция ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
ТекстHTML = ?(ДанныеОперации.Свойство("ТекстHTML"), ДанныеОперации.ТекстHTML, "");
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "OutputHTML", ВМассив(,ТекстHTML));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ВывестиHTMLАсинх(ПараметрыПодключения.ИДУстройства, ТекстHTML); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ВывестиHTML", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет вывод информации на дисплей покупателя.
|
||
//
|
||
Асинх Функция ВывестиИнформациюНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
|
||
Если ПараметрыПодключения.ДисплейОтображаетHTML Тогда
|
||
РезультатВыполнения = Ждать ВывестиHTMLНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
Иначе
|
||
|
||
Если ПараметрыПодключения.ДисплейОтображаетТекст Тогда
|
||
РезультатВыполнения = Ждать ВывестиСтрокуНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.ДисплейОтображаетQRКод Тогда
|
||
РезультатВыполнения = Ждать ВывестиQRКодНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.ДисплейОтображаетСтатус Тогда
|
||
СтатусОперации = ?(ДанныеОперации.Свойство("СтатусОперации"), ДанныеОперации.СтатусОперации, 0);
|
||
Если СтатусОперации = 1 Или СтатусОперации = 2 Тогда
|
||
РезультатВыполнения = Ждать ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецЕсли;
|
||
|
||
Если ПараметрыПодключения.ДисплейОтображаетСостоянияРМ Тогда
|
||
РезультатВыполнения = Ждать ВывестиСтатусРабочегоМестаНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет вывод статуса на дисплей покупателя.
|
||
//
|
||
Асинх Функция ВывестиСтатусНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса < 3009 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Устройство не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "DisplayOperationStatus", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
СтатусОперации = ?(ДанныеОперации.Свойство("КодСтатусОперации"), ДанныеОперации.КодСтатусОперации, 0);
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DisplayOperationStatus", ВМассив(,СтатусОперации));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтобразитьСтатусОперацииАсинх(ПараметрыПодключения.ИДУстройства, СтатусОперации); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОтобразитьСтатусОперации", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет вывод статуса рабочего места на дисплей покупателя.
|
||
//
|
||
Асинх Функция ВывестиСтатусРабочегоМестаНаДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса < 4001 Тогда
|
||
ОписаниеОшибки = НСтр("ru='Устройство не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "DisplayWorkplaceStatus", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
СтатусРабочегоМеста = ?(ДанныеОперации.Свойство("КодСтатусаРабочегоМеста"), ДанныеОперации.КодСтатусаРабочегоМеста, 0);
|
||
ЗвуковойСигнал = ?(ДанныеОперации.Свойство("ЗвуковойСигнал"), ?(ДанныеОперации.ЗвуковойСигнал, 1, 0), 0);
|
||
|
||
Если ЗвуковойСигнал = 0
|
||
И ПараметрыПодключения.Свойство("КодТекущегоСтатусаРабочегоМеста")
|
||
И ПараметрыПодключения.КодТекущегоСтатусаРабочегоМеста = СтатусРабочегоМеста Тогда
|
||
Возврат РезультатОперацииНаОборудовании(Истина);
|
||
КонецЕсли;
|
||
ПараметрыПодключения.Вставить("КодТекущегоСтатусаРабочегоМеста", СтатусРабочегоМеста);
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "DisplayWorkplaceStatus", ВМассив(,СтатусРабочегоМеста, ЗвуковойСигнал));
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОтобразитьСтатусРабочегоМестаАсинх(ПараметрыПодключения.ИДУстройства, СтатусРабочегоМеста, ЗвуковойСигнал); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОтобразитьСтатусРабочегоМеста", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет очистку дисплея покупателя.
|
||
//
|
||
Асинх Функция ОчиститьДисплейПокупателя(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ClearCustomerDisplay");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ОчиститьДисплейПокупателяАсинх(ПараметрыПодключения.ИДУстройства); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ОчиститьДисплейПокупателя", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ЭлектронныеВесы
|
||
|
||
// Функция возвращает параметры события веса.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры события веса:
|
||
// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование
|
||
// * Вес - Число
|
||
// * Стабилизация - Булево -
|
||
// * ОшибкаРазмещения - Булево -
|
||
// * ЗонаПересечения - Массив из Число -
|
||
//
|
||
Функция ПараметрыСобытияВеса() Экспорт
|
||
|
||
Результат = Новый Структура();
|
||
Результат.Вставить("ИдентификаторУстройства");
|
||
Результат.Вставить("Вес");
|
||
Результат.Вставить("Стабилизация", Истина);
|
||
Результат.Вставить("ОшибкаРазмещения", Ложь);
|
||
Результат.Вставить("ЗонаПересечения" , Новый Массив());
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает параметры весов.
|
||
//
|
||
Асинх Функция ПараметрыВесов(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4000 Тогда
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "ScaleOptions");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПараметрыВесовАсинх(ПараметрыПодключения.ИДУстройства, ""); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
РезультатОперацииXML = РезультатВызова.Параметры[1];
|
||
Если РезультатВызова.Значение Тогда
|
||
ПараметрыВесов = ОбщегоНазначенияБПОКлиент.ПрочитатьКорневойЭлементXML(РезультатОперацииXML);
|
||
ПараметрыПодключения.ВесыПоддерживаютТарирование = ПараметрыВесов.Свойство("Calibrate") И ВРег(ПараметрыВесов.Calibrate) = "TRUE";
|
||
ПараметрыПодключения.СобытиеПолученииВеса = ПараметрыВесов.Свойство("WeighingEvent") И ВРег(ПараметрыВесов.WeighingEvent) = "TRUE";
|
||
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ВесыПоддерживаютТарирование", ПараметрыПодключения.ВесыПоддерживаютТарирование);
|
||
РезультатВыполнения.Вставить("СобытиеПолученииВеса" , ПараметрыПодключения.СобытиеПолученииВеса);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПараметрыВесов", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
Иначе
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("ВесыПоддерживаютТарирование", Ложь);
|
||
РезультатВыполнения.Вставить("СобытиеПолученииВеса" , Ложь);
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет получение веса груза, расположенного на весах.
|
||
//
|
||
Асинх Функция ПолучитьВес(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Вес = 0;
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "GetWeight");
|
||
РезультатВызова = Ждать ОбъектДрайвера.ПолучитьВесАсинх(ПараметрыПодключения.ИДУстройства, Вес); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
Вес = Число(РезультатВызова.Параметры[1]);
|
||
Если Вес < 0 Тогда
|
||
Вес = 0;
|
||
КонецЕсли;
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
РезультатВыполнения.Вставить("Вес", Вес);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("ПолучитьВес", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Функция осуществляет установку веса тары на весах.
|
||
//
|
||
Асинх Функция Тарировать(ОбъектДрайвера, ПараметрыПодключения, ДанныеОперации)
|
||
|
||
Если ПараметрыПодключения.РевизияИнтерфейса >= 4001 И НЕ ПараметрыПодключения.ВесыПоддерживаютТарирование Тогда
|
||
ОписаниеОшибки = НСтр("ru='Оборудование не поддерживает данную операцию.'");
|
||
ЗаписатьОшибкуВЛог(ПараметрыПодключения, "Calibrate", ОписаниеОшибки);
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Ложь, ОписаниеОшибки);
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
ВесТары = ?(ДанныеОперации.Свойство("ВесТары"), Число(ДанныеОперации.ВесТары), 0);
|
||
|
||
Попытка
|
||
ЗаписьЛога = НачатьЗаписьЛогаОперации(ПараметрыПодключения, "Calibrate", ВМассив(,ВесТары));
|
||
РезультатВызова = Ждать ОбъектДрайвера.УстановитьВесТарыАсинх(ПараметрыПодключения.ИДУстройства, ВесТары); // Структура
|
||
ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова);
|
||
Если РезультатВызова.Значение Тогда
|
||
РезультатВыполнения = РезультатОперацииНаОборудовании(Истина);
|
||
Иначе
|
||
РезультатВыполнения = Ждать ПолучитьОшибкуДрайвера(ОбъектДрайвера, ЗаписьЛога);
|
||
КонецЕсли;
|
||
Исключение
|
||
ТекстОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
|
||
ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки);
|
||
РезультатВыполнения = ОшибкаВызоваДрайвера("УстановитьВесТары", ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
|
||
КонецПопытки;
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
|
||
#КонецОбласти
|
||
|
||
|
||
#Область ЛогированиеОпераций
|
||
|
||
Функция НачатьЗаписьЛогаОперации(ПараметрыПодключения, Команда, ЗначенияПараметров = Неопределено, ИдентификаторыВходящихПараметров = "")
|
||
КонецФункции
|
||
|
||
Функция ЗавершитьЗаписьЛогаОперации(ЗаписьЛога, РезультатВызова, ИдентификаторыИсходящихПараметров = "")
|
||
КонецФункции
|
||
|
||
Функция ЗавершитьЗаписьЛогаИсключением(ЗаписьЛога, ТекстОшибки)
|
||
КонецФункции
|
||
|
||
Функция ЗаписатьОшибкуДрайвераВЛогОперации(ЗаписьЛога, РезультатВызова)
|
||
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗаписатьОшибкуВЛог(ПараметрыПодключения, Команда, ОписаниеОшибки)
|
||
КонецФункции
|
||
|
||
Функция ВМассив(Параметр1, Параметр2=Null, Параметр3=Null, Параметр4=Null, Параметр5=Null, Параметр6=Null, Параметр7=Null, Параметр8=Null, Параметр9=Null)
|
||
|
||
Результат = Новый Массив();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция Экранировать(Знач Значение)
|
||
|
||
Значение = СтрЗаменить(Значение, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволGS1());
|
||
Значение = СтрЗаменить(Значение, ОбщегоНазначенияБПОКлиентСервер.РазделительEOT(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволEOT());
|
||
Значение = СтрЗаменить(Значение, ОбщегоНазначенияБПОКлиентСервер.РазделительRS(), ОбщегоНазначенияБПОКлиентСервер.ЭкранированныйСимволRS());
|
||
Значение = СтрЗаменить(Значение, Символ(0), "\n");
|
||
Возврат Значение;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|