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

Маркировка в чеке (символ [М], код идентификации и т.п.)

Маркировка в чеке (символ [М], код идентификации и т.п.)
Я
   azernot
 
18.06.20 - 18:29
Коллеги прошу помощи.
Пытаюсь малой кровью реализовать пробитие чеков ККМ на маркированный товар в 1С:Розница 2.2.5.28
Установлен ККМ Штрих М, драйвер "Штрих-М: Драйвер ККТ с передачей данных в ОФД" версия 4.15.0.817, ревизия интерфейса 2001

Правдами и неправдами в драйвер передаётся вот такой XML
<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
    <Parameters PaymentType="1" TaxVariant="0" SenderEmail="" CustomerEmail="" CustomerPhone=""/>
    <Positions>
        <FiscalString Name="Сапоги, детские (23 размер)" Quantity="1" Price="1" Amount="1" Department="1" Tax="18">
            <GoodCodeData StampType="1520" GTIN="04640096349827" SerialNumber="diW__-hyg9lD=" MarkingCode="RE0EOFtLboNkaVdfXy1oeWc5bEQ9"/>
        </FiscalString>
    </Positions>
    <Payments Cash="1" CashLessType1="0" CashLessType2="0" CashLessType3="0"/>
</CheckPackage>

Однако на чеке нет заветной буковки [М]  в составе чека на сайте ОФД нет никаких тэгов, никаких данных про эти самые данные маркировки:

"1059": [
      {
         "1023": 1,
         "1030": "Сапоги, детские (23 размер)",
         "1043": 100,
         "1079": 100,
         "1199": 1,
         "1212": 1,
         "1214": 4
      }
   ],


Посоветуйте, что проверить? Кдуа бежать? Что делать?
   lodger
 
1 - 18.06.20 - 18:50
я так пишу, все шабашит.
                    ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
                    ЗаписьXML.ЗаписатьАтрибут("StampType"        ,XMLСтрока("1520"));// обувь

                        ЗаписьXML.ЗаписатьАтрибут("GTIN"        ,XMLСтрока(ТекущаяПозиция.GTIN));
                        ЗаписьXML.ЗаписатьАтрибут("SerialNumber"    ,XMLСтрока(МаскированиеСимволов(ТекущаяПозиция.КиЗГИСМ)));
один нюанс - для буковки [М] чел из ЦТО освежал прошивку в самой машинке.
   lodger
 
2 - 18.06.20 - 18:51
попробуй MarkingCode убрать
   azernot
 
3 - 18.06.20 - 18:55
(1) Прошивка от февраля 2020 года, обратился к спецам за более свежей, пока молчат. Даже и не знаю, есть ли более свежая.
(2) Попробовал, не помогло. Всё ровно то же самое.
   lodger
 
4 - 18.06.20 - 19:00
(3) тогда подозреваю SerialNumber="diW__-hyg9lD="
есть ли у тебя серийник без спецсимволов?
   lodger
 
5 - 18.06.20 - 19:01
ну или проще, юзни 
Функция МаскированиеСимволов(текЗначение)
    Результат = "";
    
    // Маскирование служебных символов.

    Результат = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(текЗначение, 
                        "\",            "\\"),            // x5c

                        "/",            "\/"),            // x2f

                        Символ(008),    "\b"),            // x08

                        Символы.Таб,    "\t"),             // x09

                        Символы.ПС,        "\n"),            // x0a

                        Символы.ПФ,        "\f"),            // x0c

                        Символы.ВК,        "\r"),            // x0d

                        """",            "\""");            // x22


    // Маскирование специальных символов.

    Результат = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Результат, 
                        Символ(00),        "\u0000"),
                        Символ(01),        "\u0001"),
                        Символ(02),        "\u0002"),
                        Символ(03),        "\u0003"),
                        Символ(04),        "\u0004"),
                        Символ(05),        "\u0005"),
                        Символ(06),        "\u0006"),
                        Символ(07),        "\u0007"),
                        Символ(11),        "\u000b"),
                        Символ(14),        "\u000e"),
                        Символ(15),        "\u000f"),
                        Символ(16),        "\u0010"),
                        Символ(17),        "\u0011"),
                        Символ(18),        "\u0012"),
                        Символ(19),        "\u0013"),
                        Символ(20),        "\u0014"),
                        Символ(21),        "\u0015"),
                        Символ(22),        "\u0016"),
                        Символ(23),        "\u0017"),
                        Символ(24),        "\u0018"),
                        Символ(25),        "\u0019"),
                        Символ(26),        "\u001a"),
                        Символ(27),        "\u001b"),
                        Символ(28),        "\u001c"),
                        Символ(29),        "\u001d"),
                        Символ(30),        "\u001e"),
                        Символ(31),        "\u001f");
                        
    Возврат Результат;
КонецФункции
   azernot
 
6 - 18.06.20 - 19:09
(4) Я пробовал разные серийники. И этот "diW__-hyg9lD=" - тоже спецсимволов, которые надо экранировать, не содержит.
   Креатив
 
7 - 18.06.20 - 19:12
(0)Обновиться до актуальной версии Розницы религия не позволяет?
   azernot
 
8 - 18.06.20 - 19:13
(7) Нереально. Слишком всё перепилено.
   Креатив
 
9 - 18.06.20 - 19:16
(8)Для чего?
   azernot
 
10 - 18.06.20 - 19:21
(9) Для системы лояльности, для учёта персональных продаж, для учёта рабочего времени... и т.д и т.п.

Нет, я понимаю, что рано или поздно - придётся. Но сейчас надо решить одну малюсенькую проблемку.
Т.е. сканирование QR, подбор товаров по QR, контроль QR и т.п. - всё реализовано. Надо только подружить с ККМ
   azernot
 
11 - 22.06.20 - 12:24
Может есть у кого ещё какие идеи?
   HawkEye
 
12 - 22.06.20 - 12:48
(0) для АТОЛ-а... надо:
1. прошивка самого ФР с поддержкой [м].
2. драйвера с поддержкой [м].
3. 1С должна передать в тэге маркировку в правильном виде...

для штриха - требования те-же самые, смотри что у тебя не так и исправляй...
   HawkEye
 
13 - 22.06.20 - 12:51
(0) да... тэг для маркируемых 1162, не увидел такого в твоем XML
   dezss
 
14 - 22.06.20 - 12:55
(13) Все у него есть.
Это работа через компоненту, там передается xml-ка.
(0) Компоненту для работы с кассой когда обновлял?
   azernot
 
15 - 22.06.20 - 13:05
(13) Я так понимаю, что сам драйвер должен вот такой вот XML преобразовать в нужный формат и кинуть в ККМ по соответствующим тэгам.

(14) Регулярно... Уж и не знаю, когда в последний раз, столько раз туда-сюда мотался..

Обновляю путём загрузки файла shtrih-m_32.zip в общий макет "ДрайверШтрихМККТ54ФЗ" из C:\Program Files (x86)\SHTRIH-M\DrvFR 4.15\Bin\1C

Дополнительно чищу
C:\Users\<User>\AppData\Roaming\1C\1cv8\ExtCompT\smdrvfr*.*

Может что-то не так делаю?
   BeerHelpsMeWin
 
16 - 22.06.20 - 13:43
Если в ХМЛ всё есть, то следующим шагом проверь, принимает и понимает ККМ тэг.
Для этого после печати чека запускаешь "Тест драйвера ФР", заходишь в ФН - Данные, внизу выбираешь номер документа, ставишь галку "показать номера тегов" и жмешь "прочитать фискальный документ". В "1059,ПРЕДМ. РАСЧЕТА:" помимо всего прочего будет примерно такая строка: "1162,КТ:44 4D 00 00 02 C1 37 B5 5A 75 1B 89 23 3B 43 11 32 4F 41 20 20"

Если не попадает, то надо проверить, включена ли маркировка в самой ККМ. Как - спроси у техподдержки Штриха, они должны быть в курсе, какие именно параметры смотреть. Собственно, пусть они и проверяют, это их работа. Заодно попроси руками из "теста драйвера ФР" напечатать чек с маркированным товаром.
   BeerHelpsMeWin
 
17 - 22.06.20 - 13:50
Ну и вернемся на уровень выше.
1) Пересоздай кассу в 1с.
2) Ты уверен, что именно в тот макет добавляешь компоненту? Что не используется какой-нибудь справочник "обработки работы с торговым оборудованием" или еще что-нибудь (в сильно перепиленной версии все может быть очень забавно устроено)
   azernot
 
18 - 22.06.20 - 14:14
(16) Потанцевал с бубном, через "Тест драйвера ФН" сделал "Операцию ФН" и на вкладке "КТ 2" заполнил код маркировки заменив Символ(92) на <0x1D>
Как назло из кассы вылез чек с буковкой [М]
Т.е. грубо говоря фискальник - нормально настроен и готов к маркировке..
   shpioleg
 
19 - 22.06.20 - 14:29
Не знаю как у Штриха, но у Атола похожие теги. Можно передавать или через объект Код товара (там GTIN и серийник) или через строку Код маркировки.
Рекомендуемый способ передавать через Код маркировки. Самостоятельно зашифровать в base64(тут основная сложность, на Инфостарте есть пример), а драйвер сам определит к какому типу относится маркировка.
И Код товара и Код маркировки одновременно не нужно передавать.
   azernot
 
20 - 22.06.20 - 14:37
(17) Пересоздал кассу, уверен, что драйвер тот (версия только что мной установленная 4.15.0.815)... и эта версия меняется, когда я меняю макет.

(19) Я пробовал убрать из состава XML тэг "MarkingCode", и передавать только  StampType="1520" GTIN="04640096349827" SerialNumber="diW__-hyg9lD=". Не помогло.
Сейчас попробую наоборот, передать только "MarkingCode"..
   kupec
 
21 - 22.06.20 - 14:38
Нужно в таблицах что то еще поменять, сейчас попробую найти, было тоже самое
   azernot
 
22 - 22.06.20 - 14:49
+(20) Не помогло.
MarkingCode получаю хитрой процедурой 
Процедура СформироватьДвоичныеДанныеДляЧисла(ДанныеМаркировки, Знач ЗначениеЧисла = Неопределено, Знач ЗначениеСтроки = Неопределено)
    
    Префикс = ПрефиксКодированияРеквизита(ДанныеМаркировки.ТипИдентификатораТовара);
    
    Тело = Новый ПотокВПамяти();
    ЗаписьДанных = Новый ЗаписьДанных(Тело);
    ЗаписьДанных.ЗаписатьЦелое64(Число(ЗначениеЧисла), ПорядокБайтов.BigEndian);
    Если Не ПустаяСтрока(ЗначениеСтроки) Тогда
        ЗаписьДанных.ЗаписатьСимволы(ЗначениеСтроки); 
    КонецЕсли;
    ЗаписьДанных.Закрыть();
    Тело.Перейти(0, ПозицияВПотоке.Начало);
    ЗаписьДанных = Новый ЗаписьДанных(Тело);
    ЗаписьДанных.ЗаписатьЦелое16(Префикс, ПорядокБайтов.BigEndian);
    ЗаписьДанных.Закрыть();
    ДанныеМаркировки.РевизитКодаТовараHEX = Тело.ЗакрытьИПолучитьДвоичныеДанные();
    ДанныеМаркировки.РевизитКодаТовара = Base64Строка(ДанныеМаркировки.РевизитКодаТовараHEX);
    
КонецПроцедуры

Где ЗначениеЧисла  = GTIN, ЗначениеСтроки = СерийныйНомер
   BeerHelpsMeWin
 
23 - 22.06.20 - 17:10
(18) очень сильное колдунство
я дальше этого места не заходил, извини

из идей осталось разве что посмотреть, может где-то формат ФФД 1.0 жестко прописан (хотя по идее ККМ тогда не должны была ничего печатать)
   azernot
 
24 - 22.06.20 - 17:20
Всё господа, я победил это!
(23) Ты был очень близок, если не скзать полностью прав!

Короче, как выяснилось, ревизия интерфейса 2001 - означает, что нихрена в ККМ не нужно отправлять эти тэги маркировки. Т.е. в этой версии интерфейса обработки данных маркировки попросту нет.
Определяется каким именно интерфейсом я пользуюсь - вовсе не от того, какой драйвер я положил в макет (хотя и это тоже важно), а исходя из того, какое значение "ИдентификаторОбъекта" указано для предопределённого элемента "ДрайверШтрихМККТ54ФЗ" справочника "ДрайверыОборудования"

У меня стояло значение "AddIn.SMDrvFR1C20" - и использовался интерфейс 2001.
Как только я поменял ИдентификаторОбъекта на "AddIn.SMDrvFR1C22", стал использоваться интерфейс 2005, я для него переделал заполнение XML-ник (там есть некоторые изменения по сравнению с 2001) и вуаля! Теперь на ККМ всё стало печататься. В ОФД всё передаваться!

Ларчик открывался очень просто, но блин хрен найдёшь  это.

Всем спасибо, кто участвовал, кто помогал, кто наталкивал на мысль!


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