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

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

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

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

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

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

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

А чего он у Вас на количество ругается? Вы туда что передаете? Для маркированной продукции, количество ВСЕГДА должно быть равно 1, тут без вариантов.
11 brenli
 
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
12 brenli
 
28.01.20
12:11
Вероятно из за старой прошивки мозга кассы.
13 brenli
 
28.01.20
12:14
LIBFPTR_PARAM_MARKING_CODE - массив с данными штрихкода маркировки. По умолчанию не передается в ККТ. В этом параметре можно передать данные от сканера. ККТ их разберет в реквизит 1162 самостоятельно.

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

//*******************************************
Функция DecToAny(Знач тЗначение, тОснование)
   тРезультат = "";

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

   Возврат тРезультат;
КонецФункции
//*******************************************
Функция AsciToHex(Знач тЗначение)
    ДлинаСтр  = СтрДлина(тЗначение);
    тРезультат = "";
    Для i=1 По ДлинаСтр Цикл
        ТекСимвол = Сред(тЗначение,i,1);
        тРезультат = тРезультат + DecToAny(КодСимв(ТекСимвол),16)+" ";
    КонецЦикла;    
    Возврат тРезультат;
КонецФункции    
//*******************************************
18 brenli
 
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
19 brenli
 
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 и т.д  РазделитьСтрокуБайтНаГруппы(<результат функции ПроверкаИИсправлениеДлины>).
20 brenli
 
29.01.20
12:19
Префиксы 49 0E или  44 4D или другие в зависимости от длины кода дорисовать элементарно
21 brenli
 
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")

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