Имя: Пароль:
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) и вуаля! Теперь на ККМ всё стало печататься. В ОФД всё передаваться!

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

Всем спасибо, кто участвовал, кто помогал, кто наталкивал на мысль!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn