Имя: Пароль:
1C
1С v8
Маркировка в чеке (символ [М], код идентификации и т.п.)
0 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
      }
   ],


Посоветуйте, что проверить? Кдуа бежать? Что делать?
1 lodger
 
18.06.20
18:50
я так пишу, все шабашит.
                    ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
                    ЗаписьXML.ЗаписатьАтрибут("StampType"        ,XMLСтрока("1520")); // обувь
                        ЗаписьXML.ЗаписатьАтрибут("GTIN"        ,XMLСтрока(ТекущаяПозиция.GTIN));
                        ЗаписьXML.ЗаписатьАтрибут("SerialNumber"    ,XMLСтрока(МаскированиеСимволов(ТекущаяПозиция.КиЗГИСМ)));
один нюанс - для буковки [М] чел из ЦТО освежал прошивку в самой машинке.
2 lodger
 
18.06.20
18:51
попробуй MarkingCode убрать
3 azernot
 
18.06.20
18:55
(1) Прошивка от февраля 2020 года, обратился к спецам за более свежей, пока молчат. Даже и не знаю, есть ли более свежая.
(2) Попробовал, не помогло. Всё ровно то же самое.
4 lodger
 
18.06.20
19:00
(3) тогда подозреваю SerialNumber="diW__-hyg9lD="
есть ли у тебя серийник без спецсимволов?
5 lodger
 
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");
                        
    Возврат Результат;
КонецФункции
6 azernot
 
18.06.20
19:09
(4) Я пробовал разные серийники. И этот "diW__-hyg9lD=" - тоже спецсимволов, которые надо экранировать, не содержит.
7 Креатив
 
18.06.20
19:12
(0)Обновиться до актуальной версии Розницы религия не позволяет?
8 azernot
 
18.06.20
19:13
(7) Нереально. Слишком всё перепилено.
9 Креатив
 
18.06.20
19:16
(8)Для чего?
10 azernot
 
18.06.20
19:21
(9) Для системы лояльности, для учёта персональных продаж, для учёта рабочего времени... и т.д и т.п.

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

для штриха - требования те-же самые, смотри что у тебя не так и исправляй...
13 HawkEye
 
22.06.20
12:51
(0) да... тэг для маркируемых 1162, не увидел такого в твоем XML
14 dezss
 
22.06.20
12:55
(13) Все у него есть.
Это работа через компоненту, там передается xml-ка.
(0) Компоненту для работы с кассой когда обновлял?
15 azernot
 
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*.*

Может что-то не так делаю?
16 BeerHelpsMeWin
 
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"

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

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

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

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

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

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

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

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