Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Передача данных в тег 1162

v7: Передача данных в тег 1162
Я
   brenli
 
28.01.20 - 10:07
Всем привет.
Пытаюсь тестить обработку для пробития чеков и при попытке передать значение в тег 1162 - вылазит ошибка.

Стр = Сред(КодМаркировки, 1, 31);    
Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE, Стр);

ДТО версии 10.6.
ККТ-АТОЛЛ 11 Ф
ФФД ККТ 1.05

Ошибка -  Не поддерживается в данной версии.
          Неверное количество.

Что не так? Код маркировки на примере обуви.
Переданная последовательность не преобразована, а просто считана сканером.
 
 
   johnnik
 
1 - 28.01.20 - 10:09
А прошивка кассы какая?
   Garykom
 
2 - 28.01.20 - 10:10
(0) >последовательность не преобразована, а просто считана сканером

Вероятно поэтому. Шо за маркировка и как там тег 1162 правильно заполнять изучить
   Garykom
 
3 - 28.01.20 - 10:10
(1) Теоретически все ККТ должны быть обновлены ибо электронно -> безналично
   brenli
 
4 - 28.01.20 - 11:25
(1)
Код модели: 67
Название ККТ: АТОЛ 11Ф
Версия прошивки: 3.0.1245
   brenli
 
5 - 28.01.20 - 11:25
+(4)  Аппарат тестовый и не фискализирован.
   Kigo_Kigo
 
6 - 28.01.20 - 11:27
Мозги машинке шейте, то что у вас ФФД ККТ 1.05 ничего не говорит, точнее говорит что, на машинках есть режим совместимости когда ккт 1.0 работает с 1.05, но с ограниченным функционалом, и ЕМНИП нужна еще прошивка с ключем доступа 10
   brenli
 
7 - 28.01.20 - 11:32
(2) В новой версии драйвера как я понял можно сразу передать строку со сканера.

Я ошибаюсь?
   brenli
 
8 - 28.01.20 - 11:32
(6) Спасибо
   brenli
 
9 - 28.01.20 - 11:48
Пример кода который надо передать "010462005942174621lCwnRN%pO%n(U\u001D91003A\u001D928lugLSHOzL7dPJE+jJx7TQbgN0OiH/iXuc0QK4Oc9ULdwdagxVJUKVplNq7vfh8EOrjQTXa/aqLt3gwq4Be3qg=="
   MWWRuza
 
10 - 28.01.20 - 11:54
(0)Ошибка -  Не поддерживается в данной версии.
          Неверное количество.

А чего он у Вас на количество ругается? Вы туда что передаете? Для маркированной продукции, количество ВСЕГДА должно быть равно 1, тут без вариантов.
   brenli
 
11 - 28.01.20 - 12:10
(10) Незнаю.
Если не пытаться установить Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE, Стр); 
все пробивается без ошибок.

Так же пытался сделать так

GTIN   = Сред(КодМаркировки,3,14);
SERIAL = Сред(КодМаркировки,19,13);
                
Объект.setParam(Объект.LLIBFPTR_PARAM_NOMENCLATURE_TYPE, Объект.LIBFPTR_NT_SHOES);
Объект.setParam(Объект.LIBFPTR_PARAM_GTIN, GTIN);
Объект.setParam(Объект.LIBFPTR_PARAM_SERIAL_NUMBER, SERIAL);
Объект.utilFormNomenclature();

Ругается на Объект.LLIBFPTR_PARAM_NOMENCLATURE_TYPE
   brenli
 
12 - 28.01.20 - 12:11
Вероятно из за старой прошивки мозга кассы.
   brenli
 
13 - 28.01.20 - 12:14
LIBFPTR_PARAM_MARKING_CODE - массив с данными штрихкода маркировки. По умолчанию не передается в ККТ. В этом параметре можно передать данные от сканера. ККТ их разберет в реквизит 1162 самостоятельно.

Я правильно понимаю что в этот параметр можно передать 10462005942174621lCwnRN%pO%n(U из строки кода 010462005942174621lCwnRN%pO%n(U\u001D91003A\u001D928lugLSHOzL7dPJE+jJx7TQbgN0OiH/iXuc0QK4Oc9ULdwdagxVJUKVplNq7vfh8EOrjQTXa/aqLt3gwq4Be3qg==
и все должно пройти по красоте?
   victuan1
 
14 - 29.01.20 - 07:57
(13) 1С 7.7 не поддерживает тип данных "массив" (с т. зр. драйвера).
Выход:
1) передавать использую другой метод (а он том есть)
2) передавать используя JSON
   brenli
 
15 - 29.01.20 - 08:17
(14) Преобразовывать в строку hex ?
   victuan1
 
16 - 29.01.20 - 08:20
(15) Решение в (11), только надо учесть общий префикс для всех товаров 444d
Вроде же у вас есть мое решение? Там это всё реализовано.
   brenli
 
17 - 29.01.20 - 08:24
(16) ваше решение ?

//******************************************* 

Функция DecToAny(Знач тЗначение, тОснование)
   тРезультат = "";
 
   Пока тЗначение > 0 Цикл
      тРезультат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", тЗначение%тОснование + 1, 1) + тРезультат;
      тЗначение = Цел(тЗначение/тОснование) ;
   КонецЦикла;
 
   Возврат тРезультат;
КонецФункции
//******************************************* 

Функция AsciToHex(Знач тЗначение)
    ДлинаСтр  = СтрДлина(тЗначение);
    тРезультат = "";
    Для i=1 По ДлинаСтр Цикл
        ТекСимвол = Сред(тЗначение,i,1);
        тРезультат = тРезультат + DecToAny(КодСимв(ТекСимвол),16)+" ";
    КонецЦикла;    
    Возврат тРезультат;
КонецФункции    
//*******************************************
   brenli
 
18 - 29.01.20 - 08:28
Касаемо
(11) -> Если не пытаться установить Объект.setParam(Объект.LIBFPTR_PARAM_MARKING_CODE, Стр); 
На форуме атола сказали нужна 5 версия прошивки иначе не катит.

(11)
->GTIN   = Сред(КодМаркировки,3,14);
->SERIAL = Сред(КодМаркировки,19,13);
                
->Объект.setParam(Объект.LLIBFPTR_PARAM_NOMENCLATURE_TYPE, Объект.LIBFPTR_NT_SHOES);
->Объект.setParam(Объект.LIBFPTR_PARAM_GTIN, GTIN);
->Объект.setParam(Объект.LIBFPTR_PARAM_SERIAL_NUMBER, SERIAL);
->Объект.utilFormNomenclature();

А касаемо этого сказали до марта 2020 года можно использовать, потом не желательно 

Ругается на Объект.LLIBFPTR_PARAM_NOMENCLATURE_TYPE
   brenli
 
19 - 29.01.20 - 12:17
Для всех страждущих и заепавшихся с темой перевода в hex 

//******************************************* 

Функция РазделитьСтрокуБайтНаГруппы(Знач тЗначение)
    Длина = СтрДлина(тЗначение);
    Пробел = " ";
    ВыходнаяСтрока = "";
    Пока Длина>0 Цикл
            Перенос = Лев(тЗначение,2); 
            Длина = Длина - 2;
            тЗначение=Прав(тЗначение,Длина); 
            ВыходнаяСтрока = ВыходнаяСтрока + Перенос + Пробел;
    КонецЦикла;                             
    Возврат ВыходнаяСтрока;
КонецФункции    
//******************************************* 

Функция ПроверкаИИсправлениеДлины(Знач тЗначение, тБайт)
    Если тБайт=0 Тогда
        Возврат тЗначение;    
    КонецЕсли;    
    
    тЗначение = СтрЗаменить(тЗначение," ","");
     
    тБайт = тБайт * 2;// Так как в hex формате группы из 2х цифр 

    
    РезультатДеления = СтрДлина(тЗначение)%тБайт;
    Если РезультатДеления = 0 Тогда
        Возврат тЗначение;
    КонецЕсли;
    
    КолВоНедостающихРазрядов = тБайт - РезультатДеления;
    СтрНулей = "";
    Для i=1 По КолВоНедостающихРазрядов Цикл
        СтрНулей = СтрНулей + "0";
    КонецЦикла;    
        
    Возврат СтрНулей+тЗначение;
КонецФункции    
//******************************************* 

Функция DecToAny(Знач тЗначение, тОснование)
   тРезультат = "";
 
   Пока тЗначение > 0 Цикл
      тРезультат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", тЗначение%тОснование + 1, 1) + тРезультат;
      тЗначение = Цел(тЗначение/тОснование) ;
   КонецЦикла;
 
   Возврат тРезультат;
КонецФункции
//******************************************* 

Функция AsciToHex(Знач тЗначение)
    ДлинаСтр  = СтрДлина(тЗначение);
    тРезультат = "";
    Для i=1 По ДлинаСтр Цикл
        ТекСимвол = Сред(тЗначение,i,1);
        тРезультат = тРезультат + DecToAny(КодСимв(ТекСимвол),16);
    КонецЦикла;               
    
    Возврат тРезультат;
КонецФункции    
//******************************************* 

Процедура Сформировать()
Сообщить(РазделитьСтрокуБайтНаГруппы(ПроверкаИИсправлениеДлины(DecToAny(Число("04620059421746"),16),6)));
//    Сообщить(РазделитьСтрокуБайтНаГруппы(ПроверкаИИсправлениеДлины(DecToAny("04620059421746",16),13)));

//    Сообщить(РазделитьСтрокуБайтНаГруппы(ПроверкаИИсправлениеДлины(AsciToHex("sgEKKPPcS25y5"),13)));
//    Сообщить(ПроверкаИИсправлениеДлины(AsciToHex("sgEKKPPcS25y5"),13));

КонецПроцедуры     


На примере обуви 
Для оформления GTIN в виде hex последовательности - вызывайте DecToAny(<GTIN>, <С основанием = 16>), > проверяйте четность - вызывайте > ПроверкаИИсправлениеДлины(<результат функции DecToAny>,<Число байт значения, для пример GTIN - 6 байт>) > разбить результат на группы по 2 циферки 00h 01h и т.д  РазделитьСтрокуБайтНаГруппы(<результат функции ПроверкаИИсправлениеДлины>).

Для оформления Serial в виде hex последовательности - вызывайте AsciToHex(<Serial>) затем - вызывайте DecToAny(<результат функции AsciToHex>, <С основанием = 16>), > проверяйте четность - вызывайте > ПроверкаИИсправлениеДлины(<результат функции DecToAny>,<Число байт значения, для пример Serial- 13 байт>) > разбить результат на группы по 2 циферки 00h 01h и т.д  РазделитьСтрокуБайтНаГруппы(<результат функции ПроверкаИИсправлениеДлины>).
   brenli
 
20 - 29.01.20 - 12:19
Префиксы 49 0E или  44 4D или другие в зависимости от длины кода дорисовать элементарно
   brenli
 
21 - 29.01.20 - 13:56
Так же всем кто хочет из строки HEX передать или установить значение тега 1162 в драйвере, юзайте метод

Объект.setParamStrHex(1162, "44 4D 04 33 B1 00 2C 32  6C 43 77 6E 52 4E 25 70 4F 25 6E 28 55")

И ничего не надо мудрить
   victuan1
 
22 - 29.01.20 - 15:54
(21) Верно. Так и сделано в нашем решении.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.