|
Маркировка в чеке (символ [М], код идентификации и т.п.) | ☑ | ||
---|---|---|---|---|
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) и вуаля! Теперь на ККМ всё стало печататься. В ОФД всё передаваться! Ларчик открывался очень просто, но блин хрен найдёшь это. Всем спасибо, кто участвовал, кто помогал, кто наталкивал на мысль! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |