| 
    
            
         
         | 
    
    
  | 
        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, Дата(Год, Месяц, День))  | 
|||
| 
    19
    
        Rolod76    
     15.07.25 
            ✎
    13:53 
 | 
         
        (18) С меня бутылка :)
 
        Просто передал: FR.setParam(1178, ЧекОснование.ДатаДок); и заработало!!! Вы правильно обратили внимание на тег 1178, в 7-ке не нужно его преобразовывать. В общем и через FR работает, и через OLE, еще раз спасибо!  | 
|||
| 
    20
    
        trad    
     15.07.25 
            ✎
    14:06 
 | 
         
        (19) 👍     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |