![]() |
![]() |
![]() |
|
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 |
|||
13
Rolod76
15.07.25
✎
09:55
|
(12) Спасибо большое, Массив получает в формате OleSafeArray
По второй строке выдает ошибку "Неизвестное имя". Не пойму, на что ругается. Может есть способ преобразовать OleSafeArray в COMSafeArray? |
|||
14
Rolod76
15.07.25
✎
09:44
|
Попробовал через этот метод:
OLEExSup.InvokeOLEMethod(FR, "setParam", 1174, ИнфоКоррекцииМассив); ошибка та же: Ответ 148 Ошибка Ошибка программирования реквизита 1174 (Превышение длины реквизита) |
|||
15
trad
15.07.25
✎
10:09
|
тебе надо разобраться с кодом, что предшествует getParamByteArray/getParamStringHex и чем он (код) отличается от кода в 8-ке
|
|||
16
Rolod76
15.07.25
✎
10:26
|
8-ка
Fptr.setParam(1177, "Служебная записка"); fptr.setParam(1178, Date(2025,07,11)); Сообщить("Дата коррекции=" + Date(2025,07,11)); Fptr.setParam(1179, "117"); Fptr.utilFormTlv(); //correctionInfo = Fptr.getParamByteArray(Fptr.LIBFPTR_PARAM_TAG_VALUE); correctionInfo = Fptr.getParamStringHex(Fptr.LIBFPTR_PARAM_TAG_VALUE); ==== 7-ка ДатаКоррекции = День + "." + Месяц + "." + Год + " 00:00:00"; FR.setParam(1177, "Служебная записка"); // Наименование основания для коррекции рез = FR.setParam(1178, ДатаКоррекции); //Дата документа основания для коррекции (время всегда 00:00:00) FR.setParam(1179, "117"); FR.utilFormTlv(); // Основание для коррекции ИнфоКоррекции = FR.getParamStringHex(FR.LIBFPTR_PARAM_TAG_VALUE); В итоге строки разные по длине, и содержанию |
|||
17
trad
15.07.25
✎
10:41
|
копай в сторону установки 1178
|
|||
18
trad
15.07.25
✎
11:02
|
попробуй
FR.setParam(1178, Дата(Год, Месяц, День)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |