Имя: Пароль:
1C
1C 7.7
v7: Чек коррекции в 1С 7.7 АТОЛ
0 Rolod76
 
14.07.25
14:07
В 1С 7.7 метод getParamByteArray не поддерживается,
пробую делать вот так:
ИнфоКоррекции = FR.getParamStringHex(FR.LIBFPTR_PARAM_TAG_VALUE);
Но при установке тега
FR.setParamStrHex(1174, ИнфоКоррекции);
на чеке выдает ошибку, и вот такой ответ:
Ответ 148 Ошибка Ошибка программирования реквизита 1174 (Превышение длины реквизита)
Кто-то победил эту проблему?
в 8-ке все хорошо...
1 Злопчинский
 
14.07.25
14:12
(0) что значит "в 77 не поддерживается"..?
2 MWWRuza
 
гуру
14.07.25
14:18
(1) Да было там чего-то такое, что биты с нулевым нужно передавать, а для систем, не поддерживающих это, команда альтернативная... Сейчас подробностей не помню, но, в общем принципе как-то так.
3 MWWRuza
 
гуру
14.07.25
14:21
(0) А тут: ИнфоКоррекции - у Вас что? Там Хекс строка должна быть...
4 MWWRuza
 
гуру
14.07.25
14:23
Вот, с ИнфоСтарта:
подсказали есть в мануалах примечание "При использовании COM-объекта ваш язык может не поддерживать получение из драйвера параметра типа bytearray. В этом случае можно использовать обходной вариант. Нужно запросить такой параметр через getParamStringHex(), он вернет строку с последовательностью байтов вида "01 02 FF AA ...". Далее, эту строку можно записать во входной параметр любого метода через методы setParamStrHex() или setNonPrintableParamStrHex(), и она запишется в драйвер как bytearray."
5 MWWRuza
 
гуру
14.07.25
14:30
Так-же, тут можно почитать: https://olegon.ru/showthread.php?t=38985
6 Rolod76
 
14.07.25
14:40
строку я получаю:
Инфо коррекции: 99 04 11 00 91 AB E3 A6 A5 A1 AD A0 EF 20 A7 A0 AF A8 E1 AA A0 9A 04 13 00 32 30 32 35 2E 31 31 2E 30 37 20 30 30 3A 30 30 3A 30 30 9B 04 03 00 31 31 37
Но при установке тега 1174
FR.setParamStrHex(1174, ИнфоКоррекции);
Ответ 148 Ошибка Ошибка программирования реквизита 1174 (Превышение длины реквизита)
7 MWWRuza
 
гуру
14.07.25
14:50
Может пробелы убрать?
8 Rolod76
 
14.07.25
14:52
Пробовал, ошибка та же...
Это при открытии чека вылазит.
9 MWWRuza
 
гуру
14.07.25
15:01
Ну, х.з...
Чеки коррекции я не делал.
Но для остальных похожих реквизитов вроде работает.
10 Rolod76
 
14.07.25
15:01
Интересно далее, сделал в 8-ке через
FR.setParamStrHex(1174, ИнфоКоррекции);
работает... и строка получаемая другая:
correctionInfo=99 04 11 00 91 AB E3 A6 A5 A1 AD A0 EF 20 A7 A0 AF A8 E1 AA A0 9A 04 04 00 00 54 70 68 9B 04 03 00 31 31 37
11 Rolod76
 
14.07.25
15:04
еще интереснее, эту строку перекинул в семерку, чек вышел без ошибок
12 trad
 
14.07.25
17:26
буду краток:

OLEExSup = СоздатьОбъект("OLEExSup");
ИнфоКоррекцииМассив = OLEExSup.InvokeOLEMethod(FR, "getParamByteArray", FR.LIBFPTR_PARAM_TAG_VALUE);
OLEExSup.InvokeOLEMethod(FR, "setParamByteArray", 1174, ИнфоКоррекцииМассив);


https://www.1cpp.ru/forum/YaBB.pl?num=1234282554
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший