Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor <cursoragent@cursor.com>
1107 lines
86 KiB
Plaintext
1107 lines
86 KiB
Plaintext
#Область ПрограммныйИнтерфейс
|
||
|
||
// Возвращает код планируемого статус маркируемого товара
|
||
//
|
||
// Параметры:
|
||
// ПланируемыйСтатусМаркируемогоТовара - ПеречислениеСсылка.ПланируемыйСтатусМаркируемогоТовара - Планируемый статус маркируемого товара.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Код планируемого статус маркируемого товара по ОФД
|
||
//
|
||
Функция КодПланируемыйСтатусМаркируемогоТовара(ПланируемыйСтатусМаркируемогоТовара) Экспорт
|
||
|
||
Соответствие = Новый Соответствие();
|
||
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварРеализован") , 1);
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.МерныйТоварВСтадииРеализации"), 2);
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварВозвращен") , 3);
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ЧастьТовараВозвращена") , 4);
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.СтатусТовараНеИзменился") , 255);
|
||
|
||
Возврат Соответствие.Получить(ПланируемыйСтатусМаркируемогоТовара);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает код ответа ОИСМ о статусе товара
|
||
//
|
||
// Параметры:
|
||
// ОтветОИСМОСтатусеТовара - ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ от ИСМО.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Ответ ОИСМ о статусе товара по ОФД
|
||
//
|
||
Функция КодОтветаОИСМОСтатусеТовара(ОтветОИСМОСтатусеТовара) Экспорт
|
||
|
||
Соответствие = Новый Соответствие();
|
||
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараКорректен") , 1);
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараНекорректен"), 2);
|
||
Соответствие.Вставить(ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ОборотТовараПриостановлен") , 3);
|
||
|
||
Возврат Соответствие.Получить(ОтветОИСМОСтатусеТовара);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает ответ ОИСМ о статусе товара по коду.
|
||
//
|
||
// Параметры:
|
||
// ОтветОИСМОСтатусеТовара - Число - Ответ от ИСМО.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ПеречислениеСсылка.ОтветОИСМОСтатусеТовара - Ответ ОИСМ.
|
||
//
|
||
Функция ОтветОИСМОСтатусеТовараПоКоду(ОтветОИСМОСтатусеТовара) Экспорт
|
||
|
||
Соответствие = Новый Соответствие();
|
||
|
||
Соответствие.Вставить(1, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараКорректен"));
|
||
Соответствие.Вставить(2, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ПланируемыйСтатусТовараНекорректен"));
|
||
Соответствие.Вставить(3, ПредопределенноеЗначение("Перечисление.ОтветОИСМОСтатусеТовара.ОборотТовараПриостановлен"));
|
||
|
||
Возврат Соответствие.Получить(ОтветОИСМОСтатусеТовара);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает код типа маркировки ККТ по коду.
|
||
//
|
||
// Параметры:
|
||
// ТипМаркировкиККТ - ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТ.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка, Произвольный - Код типа маркировки ККТ
|
||
Функция КодТипаМаркировкиККТ(ТипМаркировкиККТ) Экспорт
|
||
|
||
ТипыМаркировкиККТ = Новый Соответствие();
|
||
|
||
ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ИзделияИзМеха") , "02");
|
||
ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ЛекарственныеПрепараты"), "03");
|
||
ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ТабачнаяПродукция") , "05");
|
||
ТипыМаркировкиККТ.Вставить(ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ОбувныеТовары") , "1520");
|
||
|
||
Возврат ТипыМаркировкиККТ.Получить(ТипМаркировкиККТ);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает код типа маркировки ККТ.
|
||
//
|
||
// Параметры:
|
||
// КодТипМаркировкиККТ - Число - Код тип маркировки ККТ
|
||
//
|
||
// Возвращаемое значение:
|
||
// Произвольный, ПеречислениеСсылка.ТипыМаркировкиККТ - Тип маркировки ККТПо коду
|
||
Функция ТипМаркировкиККТПоКоду(КодТипМаркировкиККТ) Экспорт
|
||
|
||
ТипыМаркировкиККТ = Новый Соответствие();
|
||
|
||
ТипыМаркировкиККТ.Вставить("02" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ИзделияИзМеха"));
|
||
ТипыМаркировкиККТ.Вставить("03" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ЛекарственныеПрепараты"));
|
||
ТипыМаркировкиККТ.Вставить("05" , ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ТабачнаяПродукция"));
|
||
ТипыМаркировкиККТ.Вставить("1520", ПредопределенноеЗначение("Перечисление.ТипыМаркировкиККТ.ОбувныеТовары"));
|
||
|
||
Возврат ТипыМаркировкиККТ.Получить(КодТипМаркировкиККТ);
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает статус результата запроса КМ по коду.
|
||
//
|
||
// Параметры:
|
||
// КодСтатуса - Число - Код статуса.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Произвольный, ПеречислениеСсылка.СтатусРезультатаЗапросаКМ - Статус результата запроса КМПо коду
|
||
Функция СтатусРезультатаЗапросаКМПоКоду(КодСтатуса) Экспорт
|
||
|
||
РезультатЗапроса = Новый Соответствие();
|
||
|
||
РезультатЗапроса.Вставить(0, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Получен"));
|
||
РезультатЗапроса.Вставить(1, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.Ожидается"));
|
||
РезультатЗапроса.Вставить(2, ПредопределенноеЗначение("Перечисление.СтатусРезультатаЗапросаКМ.НеМожетБытьПолучен"));
|
||
|
||
Возврат РезультатЗапроса.Получить(Число(КодСтатуса));
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает, для каких типов идентификаторов будет заполняться код товара.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив из ПеречислениеСсылка.ТипыИдентификаторовТовараККТ
|
||
//
|
||
Функция КодТовараЗаполняетсяДляТиповИдентификаторов() Экспорт;
|
||
|
||
ТипыИдентификаторов = Новый Массив();
|
||
ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2);
|
||
ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3);
|
||
ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1);
|
||
ТипыИдентификаторов.Добавить(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха);
|
||
ТипыИдентификаторовОбработка = ТипыИдентификаторов;
|
||
ВыполненаСтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияВызовСервераПереопределяемый.КодТовараЗаполняетсяДляТиповИдентификаторов(ТипыИдентификаторовОбработка, ВыполненаСтандартнаяОбработка);
|
||
Если ВыполненаСтандартнаяОбработка Тогда
|
||
Результат = ТипыИдентификаторов
|
||
Иначе
|
||
Результат = ТипыИдентификаторовОбработка
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Идентифицирует ли код товара (значение тега 1162) экземпляр товара.
|
||
//
|
||
// Параметры:
|
||
// РеквизитКодаТовара - Строка - Значение реквизита кода товара в BASE64.
|
||
// ШтриховойКодТовара - Строка - Штриховой код товара.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - Истина - Если код товара идентифицирует экземпляр товара.
|
||
//
|
||
Функция КодТовараИдентифицируетЭкземпляр(Знач РеквизитКодаТовара = Неопределено, Знач ШтриховойКодТовара = Неопределено) Экспорт
|
||
|
||
Результат = Ложь;
|
||
// Если реквизит кода товара (1162) не передается в готовом виде
|
||
Если ПустаяСтрока(РеквизитКодаТовара) Тогда
|
||
МодульМенеджерОборудованияМаркировкаКлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиентСервер");
|
||
ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ШтриховойКодТовара);
|
||
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
|
||
КонецЕсли;
|
||
|
||
Если НЕ ПустаяСтрока(РеквизитКодаТовара) Тогда
|
||
ТипыИдентификаторов = КодТовараЗаполняетсяДляТиповИдентификаторов();
|
||
НачалоРеквизитКодаТовара = Лев(РеквизитКодаТовара, 3);
|
||
Если НачалоРеквизитКодаТовара = "RE0" Тогда // GS1 Data Matrix или Data Matrix - Если первые 2 байта значения кода товара имеют значения "44h4Dh".
|
||
Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1) <> Неопределено;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "UkZ" Тогда // Меховые изделия - Если первые 2 байта значения кода товара имеют значения "52h46h".
|
||
Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха) <> Неопределено;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "xRR" Тогда // ЕГАИС 2.0 - Если первые 2 байта значения кода товара имеют значения "C5h14h".
|
||
Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2) <> Неопределено;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "xR4" Тогда // ЕГАИС 3.0 - Если первые 2 байта значения кода товара имеют значения "C5h1Eh".
|
||
Результат = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3) <> Неопределено;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#Область ФормированиеДанныхККТ
|
||
|
||
// Сформировать XML для запроса КМ.
|
||
//
|
||
// Параметры:
|
||
// ПараметрыОперации - Структура - Параметры операции.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка
|
||
//
|
||
Функция СформироватьXMLДляЗапросаКМ(ПараметрыОперации, РевизияИнтерфейса = 0) Экспорт
|
||
|
||
ЗаписьXML = Новый ЗаписьXML();
|
||
ЗаписьXML.УстановитьСтроку("UTF-8");
|
||
ЗаписьXML.ЗаписатьОбъявлениеXML();
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("RequestKM");
|
||
|
||
ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса;
|
||
Если ПустаяСтрока(ИдентификаторЗапроса) Тогда
|
||
ИдентификаторЗапроса = Новый УникальныйИдентификатор;
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьАтрибут("GUID", XMLСтрока(ИдентификаторЗапроса));
|
||
ЗаписьXML.ЗаписатьАтрибут("WaitForResult", ?(ПараметрыОперации.ОжидатьПолучениеОтветаОИСМ, "True", "False"));
|
||
ЗаписьXML.ЗаписатьАтрибут("NotSendToServer", ?(НЕ ПараметрыОперации.ОтправлятьНаСерверОИСМ, "True", "False"));
|
||
|
||
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ПараметрыОперации.КонтрольнаяМарка));
|
||
ПланируемыйСтатусТовара = КодПланируемыйСтатусМаркируемогоТовара(ПараметрыОперации.ПланируемыйСтатусТовара);
|
||
ЗаписьXML.ЗаписатьАтрибут("PlannedStatus", XMLСтрока(ПланируемыйСтатусТовара));
|
||
|
||
ДробноеКоличествоУказано = Ложь;
|
||
ДробноеКоличество = ПараметрыОперации.ДробноеКоличество;
|
||
Если Не ПустаяСтрока(ДробноеКоличество.Числитель) И Не ПустаяСтрока(ДробноеКоличество.Знаменатель) Тогда
|
||
Если Число(ДробноеКоличество.Числитель) > 0 И Число(ДробноеКоличество.Знаменатель) > 0 Тогда
|
||
ДробноеКоличествоУказано = Истина;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если РевизияИнтерфейса >= 4001 Тогда
|
||
// Приказ ФНС России от 12.04.2023 N ЕД-7-20/239@
|
||
Если ПараметрыОперации.Количество <> 1 Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Quantity", XMLСтрока(ПараметрыОперации.Количество)); // тег 1023
|
||
КонецЕсли;
|
||
Если ПланируемыйСтатусТовара = 2 Или ПланируемыйСтатусТовара = 4 Тогда
|
||
Если ДробноеКоличествоУказано Тогда
|
||
МераКоличестваПредметаРасчета = 0 ;
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity");
|
||
ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель));
|
||
ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ПараметрыОперации.КодЕдиницыИзмерения) Тогда
|
||
МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ПараметрыОперации.КодЕдиницыИзмерения)
|
||
Иначе
|
||
МераКоличестваПредметаРасчета = ПараметрыОперации.МераКоличестваПредметаРасчета;
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(МераКоличестваПредметаРасчета) И НЕ (МераКоличестваПредметаРасчета = 0) Тогда // тег 2108
|
||
МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета);
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
|
||
КонецЕсли;
|
||
Иначе
|
||
// Реквизиты "количество предмета расчета" (тег 1023) и "мера количества предмета расчета" (тег 2108) включаются в состав запроса о коде маркировки
|
||
// в случае, если реквизит "планируемый статус товара" (тег 2003) принимает значения "2" или "4".
|
||
Если ПланируемыйСтатусТовара = 2 Или ПланируемыйСтатусТовара = 4 Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут("Quantity", XMLСтрока(ПараметрыОперации.Количество)); // тег 1023
|
||
Если ДробноеКоличествоУказано Тогда
|
||
МераКоличестваПредметаРасчета = 0 ;
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity");
|
||
ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель));
|
||
ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
Иначе
|
||
Если Не ПустаяСтрока(ПараметрыОперации.КодЕдиницыИзмерения) Тогда
|
||
МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ПараметрыОперации.КодЕдиницыИзмерения)
|
||
Иначе
|
||
МераКоличестваПредметаРасчета = ПараметрыОперации.МераКоличестваПредметаРасчета;
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(МераКоличестваПредметаРасчета) Тогда // тег 2108
|
||
МераКоличестваПредметаРасчета = ОборудованиеЧекопечатающиеУстройстваРФКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета);
|
||
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
|
||
КонецЕсли;
|
||
КонецЕсли
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
Возврат ЗаписьXML.Закрыть();
|
||
|
||
КонецФункции
|
||
|
||
// Получить результаты запроса КМ из XML пакета.
|
||
//
|
||
// Параметры:
|
||
// ДанныеXML - Строка - XML.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Получить результаты запроса КМИз XMLПакета:
|
||
// * КодМаркировкиПроверен - Булево -
|
||
// * РезультатПроверки - Булево -
|
||
Функция ПолучитьРезультатыЗапросаКМИзXMLПакета(ДанныеXML) Экспорт
|
||
|
||
Параметры = Новый Структура();
|
||
Параметры.Вставить("КодМаркировкиПроверен", Ложь);
|
||
Параметры.Вставить("РезультатПроверки", Ложь);
|
||
|
||
Если Не ПустаяСтрока(ДанныеXML) Тогда
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(ДанныеXML);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
Если ЧтениеXML.Имя = "RequestKMResult" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Параметры.КодМаркировкиПроверен = ВРег(ЧтениеXML.ЗначениеАтрибута("Checking")) = "TRUE";
|
||
Параметры.РезультатПроверки = ВРег(ЧтениеXML.ЗначениеАтрибута("CheckingResult")) = "TRUE";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Параметры;
|
||
|
||
КонецФункции
|
||
|
||
// Получить результаты запроса ОИСМ КМ из XML пакета.
|
||
//
|
||
// Параметры:
|
||
// ДанныеXML - Строка - XML.
|
||
// Параметры - Неопределено - Параметры
|
||
//
|
||
// Возвращаемое значение:
|
||
// Неопределено, Структура - Получить результаты ОИСМКМИз XMLПакета:
|
||
// * ИдентификаторЗапроса - УникальныйИдентификатор.
|
||
// * СтатусРезультата - ПеречислениеСсылка.СтатусРезультатаЗапросаКМ.
|
||
// * РезультатПроверкиОИСМ - Булево -
|
||
// * КодРезультатаПроверкиОИСМ - Число -
|
||
// * РезультатПроверкиОИСМПредставление - Строка -
|
||
// * РезультатПроверкиСведенийОТоваре - Булево
|
||
// * РезультатПроверкиСведенийОТовареПФ - Булево
|
||
// * КодОбработкиЗапроса - Число
|
||
// * СтатусОбработкиЗапроса - ПеречислениеСсылка.СтатусОбработкиЗапросаКМ.
|
||
// * СтатусТовара - Неопределено -
|
||
Функция ПолучитьРезультатыОИСМКМИзXMLПакета(ДанныеXML, Параметры = Неопределено) Экспорт
|
||
|
||
Если Параметры = Неопределено Тогда
|
||
Параметры = Новый Структура();
|
||
КонецЕсли;
|
||
Параметры.Вставить("ИдентификаторЗапроса");
|
||
Параметры.Вставить("СтатусРезультата");
|
||
Параметры.Вставить("РезультатПроверкиОИСМ", Ложь);
|
||
Параметры.Вставить("КодРезультатаПроверкиОИСМ", 0);
|
||
Параметры.Вставить("РезультатПроверкиОИСМПредставление", "00000000");
|
||
|
||
Параметры.Вставить("РезультатПроверкиСведенийОТоваре");
|
||
Параметры.Вставить("РезультатПроверкиСведенийОТовареПФ");
|
||
Параметры.Вставить("КодОбработкиЗапроса");
|
||
Параметры.Вставить("СтатусОбработкиЗапроса");
|
||
|
||
Параметры.Вставить("СтатусТовара", Неопределено);
|
||
|
||
Если Не ПустаяСтрока(ДанныеXML) Тогда
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(ДанныеXML);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
Если ЧтениеXML.Имя = "ProcessingKMResult" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Параметры.РезультатПроверкиОИСМ = ВРег(ЧтениеXML.ЗначениеАтрибута("Result")) = "TRUE";
|
||
Параметры.КодРезультатаПроверкиОИСМ = ЧтениеXML.ЗначениеАтрибута("ResultCode");
|
||
Если ЧтениеXML.ЗначениеАтрибута("ResultCode") <> Неопределено Тогда
|
||
Параметры.КодРезультатаПроверкиОИСМ = Число(ЧтениеXML.ЗначениеАтрибута("ResultCode"));
|
||
Параметры.РезультатПроверкиОИСМПредставление = МенеджерОборудованияКлиентСервер.ПреобразоватьЧислоВБинарнуюСтроку(Параметры.КодРезультатаПроверкиОИСМ, 8);
|
||
КонецЕсли;
|
||
Если ЧтениеXML.ЗначениеАтрибута("StatusInfo") <> Неопределено Тогда
|
||
СтатусТовара = Число(ЧтениеXML.ЗначениеАтрибута("StatusInfo"));
|
||
Параметры.СтатусТовара = ОтветОИСМОСтатусеТовараПоКоду(СтатусТовара);
|
||
КонецЕсли;
|
||
Параметры.ИдентификаторЗапроса = ЧтениеXML.ЗначениеАтрибута("GUID");
|
||
КодОбработкиЗапроса = ЧтениеXML.ЗначениеАтрибута("HandleCode");
|
||
Если Не ПустаяСтрока(КодОбработкиЗапроса) Тогда
|
||
Параметры.КодОбработкиЗапроса = Число(КодОбработкиЗапроса);
|
||
Параметры.СтатусОбработкиЗапроса = СтатусОбработкиЗапросаКМПоКоду(Параметры.КодОбработкиЗапроса);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Параметры.РезультатПроверкиСведенийОТоваре = РезультатПроверкиСведенийОТоваре(Параметры.РезультатПроверкиОИСМПредставление);
|
||
Параметры.РезультатПроверкиСведенийОТовареПФ = РезультатПроверкиСведенийОТовареПФ(Параметры.РезультатПроверкиОИСМПредставление);
|
||
|
||
Возврат Параметры;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ЛогированиеОперацийПроверкиКМ
|
||
|
||
// Возвращает структуру для формирования записи в журнале логирования операций проверки кода маркировки
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Наименование - Строка - наименование товара
|
||
// * КонтрольнаяМарка - Строка - контрольная марка в виде Base64
|
||
// * ЗапросРазрешенияПродажиКМ - Булево - выполнялся запрос разрешения продажи
|
||
// * АдресСервераЗапросаРазрешения - Строка - адрес сервера где выполняется запрос разрешения
|
||
// * ТекстЗапросаРазрешения - Строка - текст запроса для получения разрешения
|
||
// * КодОтветаРазрешения - Строка - код ответа который получен от удаленного сервера, если код не задан, а значение флага
|
||
// ЗапросРазрешенияПродажиКМ установлено в Истина, тогда код будет содержать текст Таймаут
|
||
// * РезультатЗапросаРазрешения - Строка - JSON - строка, ответ от удаленного сервера ГИС МТ
|
||
// * ИдентификаторЗапросаРазрешения - Строка - идентификатор запроса полученного разрешения
|
||
// * ВремяЗапросаРазрешения - Строка, Дата, Неопределено - таймштамп полученный с удаленного сервера
|
||
// * ПродажаРазрешена - Булево - флаг указывающий, что продажа разрешена, на форме записи будет отображение, что продажа разрешена.
|
||
// * ПричинаЗапрета - Строка - Причина запрета продажи, для отображения на форме записи
|
||
// * ДополнительныеСведения - Массив из см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ДополнительноеСведениеЗапросаКМ
|
||
//
|
||
Функция ПараметрыЗаписиОперацииПроверкиКМ() Экспорт
|
||
|
||
Результат = Новый Структура();
|
||
Результат.Вставить("Наименование", "");
|
||
Результат.Вставить("КонтрольнаяМарка", "");
|
||
Результат.Вставить("ЗапросРазрешенияПродажиКМ", Истина);
|
||
Результат.Вставить("АдресСервераЗапросаРазрешения", "");
|
||
Результат.Вставить("ТекстЗапросаРазрешения", "");
|
||
Результат.Вставить("КодОтветаРазрешения", "");
|
||
Результат.Вставить("РезультатЗапросаРазрешения", "");
|
||
Результат.Вставить("ИдентификаторЗапросаРазрешения", "");
|
||
Результат.Вставить("ВремяЗапросаРазрешения", Неопределено);
|
||
Результат.Вставить("ПродажаРазрешена", Ложь);
|
||
Результат.Вставить("ПричинаЗапрета", "");
|
||
Результат.Вставить("ДополнительныеСведения", Новый Массив);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Процедура добавляет в журнал операций проверки контрольной марки, операцию по проверке КМ на сервере ГИС МТ
|
||
//
|
||
// Параметры:
|
||
// ПараметрыЗаписиОперации - см. ПараметрыЗаписиОперацииПроверкиКМ
|
||
//
|
||
Процедура ДобавитьЗаписьВЖурналОперацийПроверкиКМ(ПараметрыЗаписиОперации) Экспорт
|
||
|
||
МассивЗаписей = Новый Массив();
|
||
ПараметрыЗаписи = РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиКМ();
|
||
|
||
ПараметрыЗаписи.Ключ.ИдентификаторСессии = Новый УникальныйИдентификатор();
|
||
ПараметрыЗаписи.Ключ.ИдентификаторЗапроса = Новый УникальныйИдентификатор();
|
||
ЗапросКМ = ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ();
|
||
ЗаполнитьЗначенияСвойств(ЗапросКМ, ПараметрыЗаписиОперации);
|
||
|
||
ПараметрыЗаписи.ЗапросКМ = ЗапросКМ;
|
||
ПараметрыЗаписи.ФлагиПроверкиОИСМ = "";
|
||
ПараметрыЗаписи.ЛокальныйОтветXML = "";
|
||
ПараметрыЗаписи.УдаленныйОтветXML = "";
|
||
ПараметрыЗаписи.ПокупкаПодтверждена = Истина;
|
||
МассивЗаписей.Добавить(ПараметрыЗаписи);
|
||
|
||
РегистрыСведений.ОперацииПроверкиКМ.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(МассивЗаписей);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает параметры записи результата проверки ЕГАИС в журнал проверки кода маркировки
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * ИдентификаторФискальнойОперации - Строка - guid идентификатор фискальной операции
|
||
// * Выполнено - Булево - результат операции выполнен
|
||
// * ШтрихкодыПродукции - Соответствие из КлючИЗначение:
|
||
// ** Ключ - Строка - марка в base64
|
||
// ** Значение - Структура :
|
||
// *** Наименование - Строка - наименование продукции
|
||
// * ИдентификаторЗапроса - Строка - Идентификатор запроса ЕГАИС
|
||
// * ВходящееСообщение - ОпределяемыйТип.СообщениеЕГАИСвБПО - тип сообщения ЕГАИС
|
||
// * ИсходящееСообщение - ОпределяемыйТип.СообщениеЕГАИСвБПО - тип сообщения ЕГАИС
|
||
// * СообщениеПередано - Булево - флаг того что сообщение передано успешно
|
||
// * ТекстОшибки - Строка
|
||
// * ПодписьЧека - Строка
|
||
//
|
||
Функция ПараметрыЗаписиРезультатаПроверкиЕГАИС() Экспорт
|
||
|
||
Возврат РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиЕГАИС();
|
||
|
||
КонецФункции
|
||
|
||
// Выполняет запись в журнал операций проверки КМ
|
||
//
|
||
// Параметры:
|
||
// ПараметрыЗаписи - см. ПараметрыЗаписиРезультатаПроверкиЕГАИС
|
||
//
|
||
Процедура ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи) Экспорт
|
||
|
||
РегистрыСведений.ОперацииПроверкиКМ.ДобавитьРезультатыОтправкиЕГАИС(ПараметрыЗаписи);
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
#Область ФормированиеДанныхККТ
|
||
|
||
// Выполняет запись о маркировке в XML для отправки на фискальный регистратор
|
||
Процедура ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, Позиция, ПараметрыФискализации) Экспорт
|
||
|
||
ДанныеКодаТоварнойНоменклатуры = Позиция.ДанныеКодаТоварнойНоменклатуры;
|
||
ДанныеКодаТовара = Неопределено;
|
||
|
||
// Код товара заполняемся для "товара" для ФФД 1.1
|
||
Если ПараметрыФискализации.РевизияИнтерфейса < 3004
|
||
И Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.Товар
|
||
И Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТовар Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Требования к разработке драйверов подключаемого оборудования, версия 3.2 и выше.
|
||
Если ПараметрыФискализации.РевизияИнтерфейса > 3001 Тогда
|
||
|
||
МодульМенеджерОборудованияМаркировкаКлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("МенеджерОборудованияМаркировкаКлиентСервер");
|
||
Если НЕ ПустаяСтрока(Позиция.КодВидаНоменклатурнойКлассификации) Тогда
|
||
ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.КодВидаНоменклатурнойКлассификации);
|
||
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
|
||
ИначеЕсли НЕ ПустаяСтрока(Позиция.ШтрихкодBase64) Тогда
|
||
ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.ШтрихкодBase64, Истина);
|
||
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
|
||
Иначе
|
||
ДанныеКодаТовара = МодульМенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.Штрихкод);
|
||
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
|
||
КонецЕсли;
|
||
|
||
ТипыИдентификаторов = КодТовараЗаполняетсяДляТиповИдентификаторов();
|
||
|
||
Если ПараметрыФискализации.РевизияИнтерфейса > 3003 Тогда // 3.4 и выше
|
||
// ФФД 1.2
|
||
Если (НЕ ПустаяСтрока(РеквизитКодаТовара) И НЕ ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64)) Тогда // Запись тега 1163
|
||
Если ПустаяСтрока(Позиция.КонтрольнаяМарка) И ТипыИдентификаторов.Найти(ДанныеКодаТовара.ТипИдентификатораТовара)<> Неопределено Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
|
||
Если ДанныеКодаТовара.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут(ДанныеКодаТовара.НаименованиеРеквизита, XMLСтрока(МенеджерОборудованияКлиентСервер.Base64ВШтрихкод(ДанныеКодаТовара.ШтрихкодBase64)));
|
||
// Заполнение отраслевых реквизитов в соответствии с требованиями ЦРПТ по ТипИдентификатораТовара
|
||
ЗаполнитьОтраслевойРеквизитИзделияИзНатуральногоМеха(Позиция);
|
||
ИначеЕсли ДанныеКодаТовара.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараНеРаспознан Тогда
|
||
ЗаписьXML.ЗаписатьАтрибут(ДанныеКодаТовара.НаименованиеРеквизита, XMLСтрока(ДанныеКодаТовара.ШтрихкодBase64));
|
||
Иначе
|
||
ШтрихкодBase64 = ШтрихкодДляТега1163Base64(ДанныеКодаТовара);
|
||
ЗаписьXML.ЗаписатьАтрибут(ДанныеКодаТовара.НаименованиеРеквизита, XMLСтрока(ШтрихкодBase64));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ДанныеКодаТовара.ТипИдентификатораТовара = Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1 И ДанныеКодаТовара.ТехническийКод Тогда
|
||
ЗаполнитьОтраслевойРеквизитМолочнаяПродукцияСНечитаемымиКМ(Позиция);
|
||
КонецЕсли;
|
||
Иначе
|
||
// ФФД 1.1
|
||
ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров();
|
||
ФормироватьРеквизитКодаТовара = Ложь;
|
||
НачалоРеквизитКодаТовара = Лев(РеквизитКодаТовара, 3);
|
||
Если НЕ ПустаяСтрока(Позиция.КодВидаНоменклатурнойКлассификации) Тогда // СИЗ
|
||
ФормироватьРеквизитКодаТовара = Истина
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "RQg" Тогда // EAN8 - Если первые 2 байта значения кода товара имеют значения "45h08h".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8) <> Неопределено;
|
||
ФормироватьРеквизитКодаТовара = ФормироватьРеквизитКодаТовара И Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "RQ0" Тогда // EAN13 - Если первые 2 байта значения кода товара имеют значения "45h0Dh".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеEAN8) <> Неопределено;
|
||
// Формируем 1162 только товаров объемно-сортовой учета, если заполняем отраслевой реквизит.
|
||
ФормироватьРеквизитКодаТовара = ФормироватьРеквизитКодаТовара И Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "SQ4" Тогда // ITF-14 - Если первые 2 байта значения кода товара имеют значения "49h0Eh".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеITF14) <> Неопределено;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "RE0" Тогда // GS1 Data Matrix или Data Matrix - Если первые 2 байта значения кода товара имеют значения "44h4Dh".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеDataMatrixGS1) <> Неопределено;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "UkZ" Тогда // Меховые изделия - Если первые 2 байта значения кода товара имеют значения "52h46h".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.ИзделияИзНатуральногоМеха) <> Неопределено;
|
||
// Формируем 1162 для изделия из натурального меха, если заполняем отраслевой реквизит.
|
||
ФормироватьРеквизитКодаТовара = ФормироватьРеквизитКодаТовара И ТипыТоваров.ИзделияИзНатуральногоМеха;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "xRR" Тогда // ЕГАИС 2.0 - Если первые 2 байта значения кода товара имеют значения "C5h14h".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС2) <> Неопределено;
|
||
ИначеЕсли НачалоРеквизитКодаТовара = "xR4" Тогда // ЕГАИС 3.0 - Если первые 2 байта значения кода товара имеют значения "C5h1Eh".
|
||
ФормироватьРеквизитКодаТовара = ТипыИдентификаторов.Найти(Перечисления.ТипыИдентификаторовТовараККТ.КодТовараВФорматеЕГАИС3) <> Неопределено;
|
||
КонецЕсли;
|
||
|
||
Если Не ФормироватьРеквизитКодаТовара Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Если первые 2 байта значения кода товара имеют значения "00h00h" в автономном режиме реквизит не включается.
|
||
Если ПараметрыФискализации.АвтономныйРежим И Лев(РеквизитКодаТовара, 2) = "AA" Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
// Реквизит кода товара (1162) для стандарта 3.2 и выше в ККТ передается в готовом виде.
|
||
Если НЕ ПустаяСтрока(РеквизитКодаТовара) Тогда
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
|
||
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(РеквизитКодаТовара));
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
КонецЕсли;
|
||
КонецЕсли
|
||
Иначе
|
||
// Требования к разработке драйверов подключаемого оборудования, версия 3.1 и ниже.
|
||
Если ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ТипМаркировки) Тогда // Необходимо всегда указывать тип маркировки.
|
||
Возврат;
|
||
КонецЕсли;
|
||
Если ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак)
|
||
И ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы)
|
||
И ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.СерийныйНомер)Тогда
|
||
Возврат;
|
||
КонецЕсли;
|
||
|
||
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
|
||
Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ТипМаркировки) Тогда // Тип маркировки.
|
||
ТипМаркировки = КодТипаМаркировкиККТ(ДанныеКодаТоварнойНоменклатуры.ТипМаркировки);
|
||
ЗаписьXML.ЗаписатьАтрибут("StampType", XMLСтрока(ТипМаркировки));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак) Тогда // Контрольный идентификационный знак (КиЗ).
|
||
ЗаписьXML.ЗаписатьАтрибут("Stamp" , XMLСтрока(ДанныеКодаТоварнойНоменклатуры.КонтрольныйИдентификационныйЗнак));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы) Тогда // Глобальный идентификатор торговой единицы (GTIN).
|
||
ЗаписьXML.ЗаписатьАтрибут("GTIN" , XMLСтрока(ДанныеКодаТоварнойНоменклатуры.ГлобальныйИдентификаторТорговойЕдиницы));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.СерийныйНомер) Тогда // Серийный номер.
|
||
ЗаписьXML.ЗаписатьАтрибут("SerialNumber" , XMLСтрока(ДанныеКодаТоварнойНоменклатуры.СерийныйНомер));
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара) Тогда // Реквизит кода товара.
|
||
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ДанныеКодаТоварнойНоменклатуры.РеквизитКодаТовара));
|
||
КонецЕсли;
|
||
ЗаписьXML.ЗаписатьКонецЭлемента();
|
||
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ЛогированиеПроверкиКМ
|
||
|
||
// Подготавливает отображение информации в форме списка операций проверки КМ
|
||
Процедура ПриПолученииДанныхСпискаОперацийПроверкиКМ(ИмяЭлемента, Настройки, Строки) Экспорт
|
||
|
||
ТаблицаПроверкиСведенийОТовареПФ = МенеджерОборудованияМаркировка.ТаблицаПроверкиСведенийОТовареПФ();
|
||
ТаблицаКодовОтветаГИСМТ = ТаблицаКодовОтветаГИСМТ();
|
||
МассивШтрихкодов = Новый Массив();
|
||
Для Каждого Строка Из Строки Цикл
|
||
|
||
Данные = Строка.Значение.Данные;
|
||
Если Не ПустаяСтрока(Данные.ФлагиПроверкиОИСМ) Тогда
|
||
Данные.РезультатПроверкиОИСМ = ТаблицаПроверкиСведенийОТовареПФ[Данные.ФлагиПроверкиОИСМ];
|
||
КонецЕсли;
|
||
Результат = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Данные.КодМаркировки, Истина);
|
||
Если Результат.Разобран Тогда
|
||
Данные.ТипКода = Результат.ТипИдентификатораТовара;
|
||
Иначе
|
||
Данные.ТипКода = Результат.ТипИдентификатораТовара;
|
||
КонецЕсли;
|
||
Если МассивШтрихкодов.Найти(Данные.Штрихкод) = Неопределено Тогда
|
||
МассивШтрихкодов.Добавить(Данные.Штрихкод);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает таблицу кодов ответа ГИСМТ
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие из КлючИЗначение:
|
||
// * Ключ - Число
|
||
// * Значение - Строка
|
||
//
|
||
Функция ТаблицаКодовОтветаГИСМТ() Экспорт
|
||
|
||
ТаблицаРезультатов = Новый Соответствие();
|
||
ТаблицаРезультатов.Вставить(Неопределено, ""); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить(0, НСтр("ru = 'Таймаут'")); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить(401, НСтр("ru = 'Ошибка авторизации'")); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить(203, НСтр("ru = 'Аварийная ситуация'")); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить(429, НСтр("ru = 'Не доступна'")); //@NON-NLS-1 @NON-NLS-2
|
||
Возврат ТаблицаРезультатов;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает таблицу проверки сведений о товарах
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие из КлючИЗначение:
|
||
// * Ключ - Строка
|
||
// * Значение - Строка
|
||
//
|
||
Функция ТаблицаПроверкиСведенийОТоваре() Экспорт
|
||
|
||
ТаблицаРезультатов = Новый Соответствие();
|
||
|
||
ТаблицаРезультатов.Вставить("00000000", НСтр("ru='Проверка КП КМ не выполнена, статус товара не проверен'"));
|
||
ТаблицаРезультатов.Вставить("00000001", НСтр("ru='Проверка КП КМ выполнена в ФН с отрицательным результатом, статус товара не проверен'"));
|
||
ТаблицаРезультатов.Вставить("00000011", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара не проверен'"));
|
||
ТаблицаРезультатов.Вставить("00010000", НСтр("ru='Проверка КП КМ не выполнена, статус товара не проверен (ККТ функционирует в автономном режиме)'"));
|
||
ТаблицаРезультатов.Вставить("00010001", НСтр("ru='Проверка КП КМ выполнена в ФН с отрицательным результатом, статус товара не проверен (ККТ функционирует в автономном режиме)'"));
|
||
ТаблицаРезультатов.Вставить("00010011", НСтр("ru='Проверка КП КМ выполнена в ФН с положительным результатом, статус товара не проверен (ККТ функционирует в автономном режиме)'"));
|
||
ТаблицаРезультатов.Вставить("00000101", НСтр("ru='Проверка КП КМ выполнена с отрицательным результатом, статус товара некорректен'"));
|
||
ТаблицаРезультатов.Вставить("00000111", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара некорректен'"));
|
||
ТаблицаРезультатов.Вставить("00001111", НСтр("ru='Проверка КП КМ выполнена с положительным результатом, статус товара корректен'"));
|
||
|
||
Возврат ТаблицаРезультатов;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает период хранения операций проверки КМ в регистре сведений
|
||
//
|
||
// Возвращаемое значение:
|
||
// ПеречислениеСсылка.ПериодХраненияИсторииОпераций
|
||
Функция ПериодХраненияИсторииОперацийПроверкиКМ() Экспорт
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
ПериодХранения = Константы.СрокХраненияОперацийПроверкиКМ.Получить();
|
||
Возврат ПериодХранения;
|
||
|
||
КонецФункции
|
||
|
||
// Установить значение констант сроков хранения операций в регистрах сведений
|
||
//
|
||
Процедура УстановитьСрокХраненияОперацийПроверкиКМ() Экспорт
|
||
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
Если НЕ ЗначениеЗаполнено(Константы.СрокХраненияОперацийПроверкиКМ.Получить()) Тогда
|
||
Константы.СрокХраненияОперацийПроверкиКМ.Установить(Перечисления.ПериодХраненияИсторииОпераций.ВсеВремя);
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ХранитьУспешныеОперацииРазрешения() Экспорт
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
Возврат Константы.ХранитьУспешныеОперацииРазрешения.Получить();
|
||
КонецФункции
|
||
|
||
// Регламентное задание, выполнят очистку истории операций проверки КМ
|
||
//
|
||
// Параметры:
|
||
// ДатаОчистки - Дата
|
||
Процедура ОчисткаИсторииОперацийПроверкиКМ(ДатаОчистки) Экспорт
|
||
|
||
РегистрыСведений.ОперацииПроверкиКМ.ОчиститьРегистрЗаПрошлыеМесяцы(ДатаОчистки);
|
||
РегистрыСведений.ОперацииПроверкиКМ.ОчиститьРегистрЗаТекущийМесяц(ДатаОчистки);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Добавляет в регистр записи по переданным параметрам
|
||
//
|
||
// Параметры:
|
||
// РезультатыПроверки - Массив из см. РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиКМ
|
||
//
|
||
Процедура ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(РезультатыПроверки) Экспорт
|
||
|
||
РегистрыСведений.ОперацииПроверкиКМ.ДобавитьРезультатыПроверкиКодаМаркировкиВРегистр(РезультатыПроверки);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Возвращает структуру для обновления записи по идентификаторам сессии и запроса
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Ключ - Структура -содержит ключ записи, идентификаторы сессии и запроса:
|
||
// ** ИдентификаторСессии - Строка
|
||
// ** ИдентификаторЗапроса - Строка
|
||
// * Результат - Булево, Неопределено - общий результат операции
|
||
// * ЗапросКМ - Структура, Неопределено - структура запроса КМ
|
||
// * ФлагиПроверкиОИСМ - Строка, Неопределено - флаги ответа от сервера ОИСМ
|
||
// * ЛокальныйОтветXML - Строка - Строка XML ответ от драйвера
|
||
// * УдаленныйОтветXML - Строка - Строка XML ответ от драйвера с сервера ОИСМ
|
||
// * ПокупкаПодтверждена - Булево, Неопределено - флаг подтверждения покупки
|
||
//
|
||
Функция ПараметрыЗаписиРезультатаПроверкиКМ() Экспорт
|
||
|
||
Возврат РегистрыСведений.ОперацииПроверкиКМ.ПараметрыЗаписиРезультатаПроверкиКМ();
|
||
|
||
КонецФункции
|
||
|
||
|
||
// Выполняет обновление записи по переданным параметрам
|
||
//
|
||
// Параметры:
|
||
// ПараметрыЗаписи - см. ПараметрыЗаписиРезультатаПроверкиКМ
|
||
//
|
||
Процедура ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи) Экспорт
|
||
|
||
РегистрыСведений.ОперацииПроверкиКМ.ОбновитьРезультатыПроверкиКодаМаркировкиВРегистре(ПараметрыЗаписи);
|
||
|
||
КонецПроцедуры
|
||
|
||
// Привязывает идентификатор фискальной операции к указанной сессии проверки кода маркировки
|
||
//
|
||
// Параметры:
|
||
// ИдентификаторСессии - Строка - идентификатор сессии проверки кода маркировки
|
||
// ИдентификаторФискальнойОперации - Строка - идентификатор фискальной записи
|
||
Процедура ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки(ИдентификаторСессии, ИдентификаторФискальнойОперации) Экспорт
|
||
|
||
РегистрыСведений.ОперацииПроверкиКМ.ОбновитьИдентификаторФискальнойОперацииРезультатаПроверкиКодаМаркировки(ИдентификаторСессии, ИдентификаторФискальнойОперации);
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область РегламентныеЗадания
|
||
|
||
// Вызывается из процедуры РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий
|
||
// для установки доступности регламентного задания, определяет зависимость от функциональных опций.
|
||
//
|
||
// Параметры:
|
||
// Настройки - ТаблицаЗначений
|
||
// ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция
|
||
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция = Неопределено) Экспорт
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
#Область РегламентныеЗаданияТехнологияСервиса
|
||
|
||
// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов
|
||
Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков
|
||
Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт
|
||
|
||
|
||
КонецПроцедуры
|
||
|
||
#КонецОбласти
|
||
|
||
// Данные запроса проверки кода для разрешительной системы
|
||
//
|
||
Процедура ЗаполнитьДанныеЗапросПроверкиКода(Позиция) Экспорт
|
||
|
||
ЗапросПроверкиКода = Позиция.ЗапросПроверкиКода;
|
||
ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит;
|
||
|
||
Если Не ПустаяСтрока(ЗапросПроверкиКода.ИдентификаторЗапроса) И Не ПустаяСтрока(ЗапросПроверкиКода.ВременнаяМетка) Тогда
|
||
ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262 - "030"
|
||
ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20231121"); // 1263 - "21.11.2023"
|
||
ОтраслевойРеквизит.НомерДокументаОснования = "1944"; // 1264 - "1944"
|
||
ЗначениеРеквизита = "UUID=%1&Time=%2";
|
||
ЗначениеРеквизита = СтрШаблон(ЗначениеРеквизита, ЗапросПроверкиКода.ИдентификаторЗапроса, ЗапросПроверкиКода.ВременнаяМетка);
|
||
Если Не ПустаяСтрока(ЗапросПроверкиКода.ИдентификаторЭкземпляра) Тогда
|
||
ЗначениеРеквизита = ЗначениеРеквизита + "&Inst=" + ЗапросПроверкиКода.ИдентификаторЭкземпляра;
|
||
КонецЕсли;
|
||
Если Не ПустаяСтрока(ЗапросПроверкиКода.ВерсияБазы) Тогда
|
||
ЗначениеРеквизита = ЗначениеРеквизита + "&Ver=" + ЗапросПроверкиКода.ВерсияБазы;
|
||
КонецЕсли;
|
||
Если ПустаяСтрока(ОтраслевойРеквизит.ЗначениеРеквизита) Тогда // 1265
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита;
|
||
Иначе
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = ОтраслевойРеквизит.ЗначениеРеквизита + "&" + ЗначениеРеквизита;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьОтраслевойРеквизитОбъемноСортовойУчет(Позиция) Экспорт
|
||
|
||
ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров();
|
||
ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит;
|
||
// Передача сведений об объемно сортовой товара при оптовой продаже через ККТ.
|
||
Если Позиция.ОбъемноСортовойУчет И ТипыТоваров.ОбъемноСортовойУчет Тогда
|
||
ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262
|
||
ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20220326"); // 1263 - 26.03.2022
|
||
ОтраслевойРеквизит.НомерДокументаОснования = "477"; // 1264
|
||
ЗначениеРеквизита = "crpt=mrk";
|
||
Если Не ПустаяСтрока(Позиция.КоличествоВесовогоТовара) Тогда
|
||
ЗначениеРеквизита = ЗначениеРеквизита + "&q=" + Позиция.КоличествоВесовогоТовара;
|
||
КонецЕсли;
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита; // 1265
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьОтраслевойРеквизитОбщественноеПитание(Позиция) Экспорт
|
||
|
||
ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров();
|
||
ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит;
|
||
Если ТипыТоваров.ОбщественноеПитание Тогда
|
||
// Передача сведений при указании услуг в общественном питание.
|
||
ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262
|
||
ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20220326"); // 1263 - 26.03.2022
|
||
ОтраслевойРеквизит.НомерДокументаОснования = "477"; // 1264
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = "mode=horeca"; // 1265
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьОтраслевойРеквизитИзделияИзНатуральногоМеха(Позиция) Экспорт
|
||
|
||
ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров();
|
||
ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит;
|
||
Если ТипыТоваров.ИзделияИзНатуральногоМеха Тогда
|
||
// Передача сведений о выбытии меховых изделий через ККТ.
|
||
ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262
|
||
ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20160811"); // 1263
|
||
ОтраслевойРеквизит.НомерДокументаОснования = "787"; // 1264
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = "crpt=mrk"; // 1265
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьОтраслевойРеквизитМолочнаяПродукцияСНечитаемымиКМ(Позиция) Экспорт
|
||
|
||
ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров();
|
||
ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит;
|
||
Если ТипыТоваров.МолочнаяПродукцияСНечитаемымиКМ Тогда
|
||
ДатаПроизводства = ?(Позиция.ДатаПроизводства <> Неопределено, Формат(Позиция.ДатаПроизводства, "ДФ=""ггММдд"""), "");
|
||
ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262
|
||
ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20201215"); // 1263
|
||
ОтраслевойРеквизит.НомерДокументаОснования = "2099"; // 1264
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = "pd=" + ДатаПроизводства + "&km=tech"; // 1265 - ГГММДД – дата производства товара
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Процедура ЗаполнитьОтраслевойРеквизитВетеринарныеПрепараты(Позиция) Экспорт
|
||
|
||
ТипыТоваров = ОборудованиеЧекопечатающиеУстройства.ОтраслевойРеквизитЗаполняетсяДляТиповТоваров();
|
||
ОтраслевойРеквизит = Позиция.ОтраслевойРеквизит;
|
||
Если ТипыТоваров.ВетеринарныеПрепараты Тогда
|
||
// Заполнение отраслевого реквизита для ветеринарныых препаратов при передаче рецепта.
|
||
ОтраслевойРеквизит.ИдентификаторФОИВ = "030"; // 1262
|
||
ОтраслевойРеквизит.ДатаДокументаОснования = Дата("20240527"); // 1263 - 27.05.2024
|
||
ОтраслевойРеквизит.НомерДокументаОснования = "675"; // 1264
|
||
ЗначениеРеквизита = ?(Позиция.ВетеринарноеТребование, "tm=VPT", "tm=VPR");
|
||
Если Не ПустаяСтрока(Позиция.РецептНомер) Тогда
|
||
ЗначениеРеквизита = ЗначениеРеквизита + "&dn=" + Позиция.РецептНомер;
|
||
КонецЕсли;
|
||
РецептДата = ?(Позиция.РецептДата <> Неопределено, Формат(Позиция.РецептДата, "ДФ=""ггММдд"""), "");
|
||
Если Не ПустаяСтрока(РецептДата) Тогда
|
||
ЗначениеРеквизита = ЗначениеРеквизита + "&dd=" + РецептДата;
|
||
КонецЕсли;
|
||
ОтраслевойРеквизит.ЗначениеРеквизита = ЗначениеРеквизита // 1265
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция ШтрихкодДляТега1163Base64(ДанныеКодаТовара) Экспорт
|
||
|
||
Если ДанныеКодаТовара.НаименованиеРеквизита = "GS1.0"
|
||
Или ДанныеКодаТовара.НаименованиеРеквизита = "GS1.M" Тогда
|
||
|
||
Штрихкод = "";
|
||
ДанныеШтрихкода = ДанныеКодаТовара.ДанныеШтрихкода;
|
||
|
||
ЗначениеПоля = ДанныеШтрихкода.Получить("01");
|
||
Если ЗначениеПоля<>Неопределено Тогда
|
||
Штрихкод = Штрихкод + "01" + ЗначениеПоля.Значение;
|
||
КонецЕсли;
|
||
ЗначениеПоля = ДанныеШтрихкода.Получить("21");
|
||
Если ЗначениеПоля<>Неопределено Тогда
|
||
Штрихкод = Штрихкод + "21" + ЗначениеПоля.Значение;
|
||
КонецЕсли;
|
||
Результат = МенеджерОборудованияКлиентСервер.ШтрихкодВBase64(Штрихкод);
|
||
|
||
Иначе
|
||
Результат = ДанныеКодаТовара.ШтрихкодBase64;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
// Получить обработки запроса КМ по коду.
|
||
//
|
||
Функция СтатусОбработкиЗапросаКМПоКоду(КодОбработкиЗапроса)
|
||
|
||
СтатусОбработки = Новый Соответствие();
|
||
|
||
СтатусОбработки.Вставить(0, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.КорректныйФормат"));
|
||
СтатусОбработки.Вставить(1, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.НекорректныйФормат"));
|
||
СтатусОбработки.Вставить(2, ПредопределенноеЗначение("Перечисление.СтатусОбработкиЗапросаКМ.НекорректныйФорматКМ"));
|
||
|
||
Возврат СтатусОбработки.Получить(Число(КодОбработкиЗапроса));
|
||
|
||
КонецФункции
|
||
|
||
// Получить результат проверки сведений о товаре.
|
||
//
|
||
// Параметры:
|
||
// РезультатПроверки - Строка
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка
|
||
//
|
||
Функция РезультатПроверкиСведенийОТоваре(РезультатПроверки) Экспорт
|
||
|
||
РезультатыПроверки = ТаблицаПроверкиСведенийОТоваре();
|
||
|
||
Возврат РезультатыПроверки.Получить(РезультатПроверки);
|
||
|
||
КонецФункции
|
||
|
||
// Получить результат проверки сведений о товаре.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие из КлючИЗначение:
|
||
// * Ключ - Строка
|
||
// * Значение - Строка
|
||
//
|
||
Функция ТаблицаПроверкиСведенийОТовареПФ() Экспорт
|
||
|
||
ТаблицаРезультатов = Новый Соответствие();
|
||
|
||
ТаблицаРезультатов.Вставить("00000000", "[М]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00000001", "[М-]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00000011", "[М]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00010000", "[М]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00010001", "[М-]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00010011", "[М]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00000101", "[М-]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00000111", "[М-]"); //@NON-NLS-1 @NON-NLS-2
|
||
ТаблицаРезультатов.Вставить("00001111", "[М+]"); //@NON-NLS-1 @NON-NLS-2
|
||
|
||
Возврат ТаблицаРезультатов;
|
||
|
||
КонецФункции
|
||
|
||
// Получить результат проверки сведений о товаре.
|
||
//
|
||
// Параметры:
|
||
// РезультатПроверки - Число
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка
|
||
//
|
||
Функция РезультатПроверкиСведенийОТовареПФ(РезультатПроверки) Экспорт
|
||
|
||
РезультатыПроверки = ТаблицаПроверкиСведенийОТовареПФ();
|
||
|
||
Возврат РезультатыПроверки.Получить(РезультатПроверки);
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗаписатьРезультатыПроверкиКодаМаркировкиВРегистр_ПреобразованиеВJSON(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
|
||
|
||
Возврат Строка(Значение);
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ФункцииРаботыGS1
|
||
|
||
// Разобрать строку штрихкода в соответствии со стандартом GS1.
|
||
//
|
||
// Параметры:
|
||
// Штрихкод - Строка - значение штрихкода.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - см. МенеджерОборудованияМаркировкаКлиентСервер.НовыйРезультатРазбораСтрокиШтрихкодаGS1.
|
||
Функция РазобратьСтрокуШтрихкодаGS1(Знач Штрихкод) Экспорт;
|
||
|
||
РезультатРазбора = МенеджерОборудованияМаркировкаКлиентСервер.НовыйРезультатРазбораСтрокиШтрихкодаGS1();
|
||
|
||
КодыGS1 = КодыGS1();
|
||
|
||
Если СтрНачинаетсяС(Штрихкод, "(") Тогда
|
||
МенеджерОборудованияМаркировкаКлиентСервер.РазобратьСтрокуШтрихкодаGS1СоСкобками(Штрихкод, РезультатРазбора, КодыGS1);
|
||
Иначе
|
||
Разделитель = ОбщегоНазначенияБПОКлиентСервер.РазделительGS1();
|
||
ЧастиШтрихкода = СтрРазделить(Штрихкод, Разделитель, Ложь);
|
||
Для Каждого ЧастьБезРазделителей Из ЧастиШтрихкода Цикл
|
||
МенеджерОборудованияМаркировкаКлиентСервер.РазобратьСтрокуШтрихкодаGS1Служебный(ЧастьБезРазделителей, РезультатРазбора, КодыGS1);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Возврат РезультатРазбора;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ФункцииМаркировкиПродукции
|
||
|
||
// Разобрать штриховой код товара.
|
||
//
|
||
// Параметры:
|
||
// Штрихкод - Строка - Штрихкод
|
||
// ШтрихкодВBase64 - Булево - Штрихкод в base64
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Разобрать штриховой код товара:
|
||
// * Разобран - Булево -
|
||
// * ОписаниеОшибки - СТрока
|
||
// * ПредставлениеШтрихкода - Строка -
|
||
// * ДанныеШтрихкода - Строка -
|
||
// * ТипИдентификатораТовара - ПеречислениеСсылка.ТипыИдентификаторовТовараККТ -
|
||
// * GTIN - Строка -
|
||
// * СерийныйНомер - Строка -
|
||
// * EAN - Строка -
|
||
// * РеквизитКодаТовараHEX - Строка -
|
||
// * РеквизитКодаТовара - Строка -
|
||
// * ИдентифицируетЭкземпляр - Булево -
|
||
// * ПотребительскаяУпаковкаТабачнойПродукции - Булево -
|
||
// * ШтрихкодBase64 - Булево -
|
||
// * НаименованиеРеквизита - Строка -
|
||
//
|
||
Функция РазобратьШтриховойКодТовара(Знач Штрихкод, Знач ШтрихкодВBase64 = Ложь) Экспорт;
|
||
|
||
КодыGS1 = КодыGS1();
|
||
Возврат МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовараСлужебная(Штрихкод, ШтрихкодВBase64, КодыGS1);
|
||
|
||
КонецФункции
|
||
|
||
// Коды GS1.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие из Строка - Коды GS1
|
||
Функция КодыGS1() Экспорт
|
||
|
||
Возврат МенеджерОборудованияМаркировкаПовтИсп.КодыGS1Служебный();
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|