Имя: Пароль:
1C
 
УНФ 3.0 Где хранятся КИЗы с криптохвостами, сканированные в расходную накладную ?
0 bvb
 
27.02.26
14:27
Добрый день

Мне нужно сделать кастомизированную печатную форму (не путать с печатью этикеток) в которую будет выводиться сканированные КИЗы - полные (с криптохвостами)

Не могу понять где они хранятся (в этикетки же они как то печатаются)

В ТЧ "ШтрихкодыУпаковок" они в таком виде :  (01)04603744326014(21)5O3dLBfJaDIZ8
1 Джордж1
 
27.02.26
15:09
(0)нигде. их запрещено хранить

Это какие это вы этикетки печатаете с криптоховоствами интересно
2 torgm
 
27.02.26
16:07
(0) Хранить запрещено , но все делают, сделай свой регистр.
Для справки кизы эмитированные хранятся в отдельном регистре Пул маркировки кодов суз, 1С его обычно после ввода очищают, но многие этот момент правят и оставляют на память для перепечатки поврежденных этикеток.
3 Джордж1
 
27.02.26
16:09
(2)это наверное для производителей/импортеров только

А вот говорят что ЧЗ не выдает КИЗ с крипотохвостами, а отдает PDF (или что-то аналогичное) который только напечатать можно
4 bvb
 
27.02.26
16:19
К 1С восстанавливает исходный  QR при печати кодов маркировки из формы подбора расходной накладной ?

Значит они либо где то есть, либо есть алгоритм восстановления их по данным "Пул кодов маркировки СУЗ"

Вот распечатка из подбора расходной накладной (не вкладывается почемуто)

В ней коды (восстановленные по данным 1С)
Приложение ЧЗ читает - читает

Если считать QR сканером - он будет с криптохвостом :
0104603744326014215"4%5)&+!naP-91EE0692lTxQPD5B7w5TTsY5dPF5zZ97sYEX4MPpk4AqaghA9rQ=

Значит есть криптохвосты ?
5 Джордж1
 
27.02.26
16:27
(4)Криптохвост только в QR-коде есть, а больше его нигде и не должно быть
6 unenu
 
27.02.26
16:32
возможно это вам поможет
https://infostart.ru/1c/reports/2236499/
7 bvb
 
27.02.26
16:48
(5)
Несокрушимая логика подсказывает мне.
1 . Чтобы напечатать QR код - нужен криптохвост
2. Чтобы напечатать криптохвост из 1С в печатной форме 1С- криптохвост должен быть в 1С

ВЫвод : Криптохвост таки есть в 1С
8 Джордж1
 
27.02.26
16:53
(7)"Чтобы напечатать QR код - нужен криптохвост" - только это могут делать производители и импортеры.
И то не факт, что они сами могут формировать QR-код, а не получать готовую печатную форму

Вы производитель или импортер?
9 timurhv
 
27.02.26
17:02
(1) Хранить не запрещено в рамках бизнес-процесса и последующего удаления.
10 akronim
 
27.02.26
17:29
(7) Человек в (2) ответил подробно. Если ты эмитировал марку - криптохвост в пуле у тебя есть, чтобы ты смог напечатать. А  когда ввел марку в оборот - то криптохвост у тебя отбирают, чтобы ты не смог напечатать второй раз.
Джордж немного не в теме, видимо.
11 Джордж1
 
27.02.26
17:37
(10)"Если ты эмитировал марку - криптохвост в пуле у тебя есть, чтобы ты смог напечатать." - пул это что?

Я вот смотрю в ЛК ЧЗ - этикетки можно получить только готовые в формате pdf/eps

Через API эмитированные марки вытащить нельзя, по крайней мере я ничего подобного не нашел

Откуда же можно взять криптохвосты?
12 bvb
 
27.02.26
18:16
Я импортер
Сведений по Эмиссии кодов маркировки СУЗ у меня сейчас в программе нет (и речь не про то)

Я просто сосканировал КИЗы в подбор Расходной накладной

И потом печатаю оттуда этикетку на которой полноценный QR код КИЗа читающейся приложением ЧЗ (находится товар)

Вопрос : КАк 1С смогла напечатать QR если криптохвоста в программе после сканирования  нет ?


Я не говорю сейчас про печать кодов при эмиссии и вводе в оборот - это другая тема
Что непонятного ?
13 Джордж1
 
27.02.26
18:37
(12)а здесь ее случаем нет?

ШтрихкодыУпаковок.ШтрихКодУпаковки.ЗначениеШтрихкода

Насколько я понимаю в Расходной накладной нужна полная КИЗ с криптохвостом на случай печати чека
14 H A D G E H O G s
 
27.02.26
18:43
Всем привет.

Вот такой простой вопрос - если я, оптовик, купил коробку пива и упаковал ее в паллету - должен ли я передавать в ЧЗ данные об агрегации?
15 Джордж1
 
27.02.26
18:45
(14)упаковал в паллету и дальше что?
16 ejikbeznojek
 
27.02.26
18:56
(14) если продаете эту паллету и клиент хочет в упд увидеть код паллеты, то нужно.
17 Джордж1
 
27.02.26
18:59
(16)в печатной форме УПД он код не увидит
18 vis
 
27.02.26
19:31
(11) РС "Пул кодов маркировки СУЗ"
19 MWWRuza
 
гуру
27.02.26
19:39
(11) Я вот смотрю в ЛК ЧЗ - этикетки можно получить только готовые в формате pdf/eps

Ага. А этикетки - безобразные там... Ни туда, ни сюда.
На инфостарте лежит обработка, позволяющая распознать коды марок из пдф в нормальный текст.  Я пользуюсь, и печатаю потом своей обработкой, так, как мне нравится :-)
20 Джордж1
 
27.02.26
19:39
(18) как туда КИЗ попадают то?
21 Джордж1
 
27.02.26
19:41
(19) в вышеуказанный РС судя по наисанному КИЗ в сыром виде попадают. И вряд ли через распознавание
22 MWWRuza
 
гуру
27.02.26
19:43
(21) Ну, скорее всего. Но, это подходит только тем, кто СУЗ через API юзает... У кого обороты маленькие, и работает через ЛК  - такого РС не будет.
23 Джордж1
 
27.02.26
19:46
(22) в апи я такого не нашел. Придется в код лезть
24 ptiz
 
27.02.26
20:11
(14) Только если этого хочет покупатель.
25 ptiz
 
27.02.26
20:14
(20) Попадают после обработки заказа СУЗом.
А после печати - удаляются. Ну как удаляются - сначала ставится признак "напечатано", и 1С не дает повторно печатать. А через некоторое время удаляются.
Но иногда эти коды нужны - можно зафигачить какой-нибудь регистр-дубль и туда дублировать записи без удаления. Например, такое нужно, если коды заказывает тот, кто зареган в ЧЗ и является владельцем GTIN, а реально коды наносит производитель, и коды нужно в полном виде передать производителю по почте и т.п.
26 Джордж1
 
27.02.26
20:13
(25) обработка то их как получает?
Хоть название напишите я код гляну
27 H A D G E H O G s
 
27.02.26
20:21
&После("ПриЗаписи")
Процедура АЧЗПриЗаписи(Отказ, Замещение)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    ТаблицаДанных=ЭтотОбъект.Выгрузить(,"ШтрихкодУпаковки,ПолныйКодМаркировки");
    АЧЗМаркировка.ЗаполнитьКриптохвостыМарокИзТаблицыПолныхКодов(ТаблицаДанных);
КонецПроцедуры

Процедура ЗаполнитьКриптохвостыМарокИзТаблицыПолныхКодов(ТаблицаДанных) Экспорт
    
    МассивШтрихкодов=ТаблицаДанных.ВыгрузитьКолонку("ШтрихкодУпаковки");
    
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ШтрихкодыУпаковокТоваров.Ссылка КАК Ссылка
    |ИЗ
    |    Справочник.ШтрихкодыУпаковокТоваров КАК ШтрихкодыУпаковокТоваров
    |ГДЕ
    |    ШтрихкодыУпаковокТоваров.АЧЗКриптохвост = """"
    |    И ШтрихкодыУпаковокТоваров.Ссылка В(&МассивШтрихкодов)";
    Запрос.УстановитьПараметр("МассивШтрихкодов",МассивШтрихкодов);
    
    Разделитель = АЧЗОбщегоНазначенияКлиентСервер.ПолучитьРазделительКриптохвоста();
    БуферРазделитель=ПолучитьБуферДвоичныхДанныхИзСтроки(Разделитель);

    ТаблицаДанных.Индексы.Добавить("ШтрихкодУпаковки");
    Выборка=Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        СтрокаТаблицыДанных=ТаблицаДанных.Найти(Выборка.Ссылка,"ШтрихкодУпаковки");
        Если СтрокаТаблицыДанных=Неопределено Тогда
            Продолжить;
        КонецЕсли;
        ПолныйКодМаркировки=СтрокаТаблицыДанных.ПолныйКодМаркировки;
        Если ПолныйКодМаркировки="" Тогда
            Продолжить;
        КонецЕсли;
        
        Криптохвост=АЧЗМаркировкаКлиентСервер.ПолучитьКриптохвостИзПолногоКодаМаркировки(ПолныйКодМаркировки,БуферРазделитель);
        Если Не ЗначениеЗаполнено(Криптохвост) Тогда
            Продолжить;
        КонецЕсли;
        
        АЧЗОбщегоНазначения.УстановитьЗначениеРеквизитаОбъекта(Выборка.Ссылка,"АЧЗКриптохвост",Криптохвост,Истина,Истина);
        
    КонецЦикла;

КонецПроцедуры

Функция ПолучитьКриптохвостИзПолногоКодаМаркировки(ПолныйКодМаркировки, БуферРазделитель=Неопределено) Экспорт
    
    Если БуферРазделитель=Неопределено Тогда
        Разделитель = АЧЗОбщегоНазначенияКлиентСервер.ПолучитьРазделительКриптохвоста();
        БуферРазделитель=ПолучитьБуферДвоичныхДанныхИзСтроки(Разделитель);
    КонецЕсли;
    Результат="";
    
    Буфер=ПолучитьБуферДвоичныхДанныхИзBase64Строки(ПолныйКодМаркировки);
    МассивБуферов=Буфер.Разделить(БуферРазделитель);
    Если МассивБуферов.Количество()<=1 Тогда
        Возврат Результат;
    КонецЕсли;
    БуферКриптохвоста=МассивБуферов[МассивБуферов.ВГраница()];
    Результат=ПолучитьСтрокуИзБуфераДвоичныхДанных(БуферКриптохвоста);
    Возврат Результат;
    
КонецФункции
28 TTimur
 
01.03.26
19:39
(26) По опыту работы с лекарственными препаратами. Из СУЗ производитель запросом в API может получить КИЗ с криптохвостом только 1 (один) раз. Там, в API, реализовано пакетное получение массива КИЗ из набора "буферов": на каждый запрос на эмиссию КИЗ на учетных серверах создается несколько "буферов", с которых можно запрашивать эти самые хвостатые КИЗ для распечатки этикеток. Пока буфер не считан полностью, якобы можно запрашивать повторно (у меня так и не получилось это реализовать, сервер меня отфутболивал, но не очень было надо, я и не разбирался). После считывания всех КИЗ из определенного буфера, этот буфер закрывается и больше никто (никто, даже производитель) не может получить хвостатые КИЗ. Не записал в регистр и криво распечатал - досвидос, никакой повторной печати. В дальнейшем обмене во всех операциях по API (завершение нанесения, агрегация, выемка из упаковок, выпуск продукции, реализация и т.д.) участвуют только обрезанные КИЗ. Технически сканером можно получить полный КИЗ, возможно (не помню уже) он в рознице при сканировании в РМК временно хранится в каком-то пуле штрихкодов, но, опять таки, он везде для ЭДО в типовых обрезается, поэтому скорее всего он там тоже обрезанный.
29 MWWRuza
 
гуру
01.03.26
19:52
(28) Из СУЗ производитель запросом в API может получить КИЗ с криптохвостом только 1 (один) раз.

А отдают то хоть строкой? Или только их убогие печатные формы, как при маркировке остатков на сайте в ЛК - ???
30 Джордж1
 
01.03.26
22:31
(28)"он везде для ЭДО в типовых обрезается" - и не удивительно, в ЭДО то он и не нужен. А вот для реализация в рознице нужен - что вы ККМ передать
31 1cVandal
 
02.03.26
08:25
(3) выдает в csv
32 Ёпрст
 
гуру
02.03.26
09:50
(14) да. Если хочешь продавать паллету потом кому-то.
Через api агрегацию надо делать
33 Ёпрст
 
гуру
02.03.26
09:52
Только учти такую вещь, если хоть раз коробка/паллета разагрегирована, и не важно, что отгрузки потом не было/отменили, то фарш невозможно провернуть назад - в тот же номер коробки/паллеты обратно уже ничего не запихаешь. Короче, повторно нельзя использовать номер коробки/паллеты, даже если никаких движений по ним не было.
34 Ёпрст
 
гуру
02.03.26
09:55
(0) учти такую вещь, не вздумай показывать полную марку в табличном поле - поймаешь в 98% случаев вылет 1с-ины. Не периваривает она некоторые спецсимволы. Хранить можешь, да, как и печатать потом.
35 paramedic
 
02.03.26
12:14
(34) Вылет может и не поймаешь, но ошибку передачи между сервером и клиентом - точно. 1С все полные коды в БАЗЕ64 гоняет.
36 H A D G E H O G s
 
02.03.26
13:48
(33) Так, стоп.

Вот у меня есть паллета1 на 100 коробов.
Я сформировал новую паллету2 на 20 коробов из этих 100 коробов.

Отправил агрегацию на паллеты2 на 20 коробов.

Паллета1 считается на 80 коробов или пустая по данным ЧЗ?
37 Ёпрст
 
гуру
02.03.26
14:00
(36) Да, она дезагрегирована (расформирована)
38 Ёпрст
 
гуру
02.03.26
14:01
При запросе - покажет изначальный состав её, но отгрузить с ней не даст, будет ошибка в чз.
39 Ёпрст
 
гуру
02.03.26
14:11
Не совсем точно написал, можно трансформировать паллету1, если сделать соответствующий запрос через api, а уже потом лепить паллет2.
Если этого не сделать, то паллет1 разагрегируется автоматом при создании паллет2.

https://честныйзнак.рф/business/doc/?id=Формирование_упаковок.html
40 H A D G E H O G s
 
02.03.26
15:37
(39) Ясно. Спасибо большое.
41 Джордж1
 
02.03.26
16:01
Добавлю что разагрегация производится автоматически при любой операции операции с товаром из транспортной упаковки
42 Злопчинский
 
02.03.26
20:32
Удалил
43 akronim
 
03.03.26
11:07
(20) Документ Заказ на эмиссию - в 1С. Какой метод api он мспользует - это не знаю, никогда не интересовался.
44 Garykom
 
гуру
03.03.26
12:11
(14) Не обязан но можешь для удобства
45 Garykom
 
гуру
03.03.26
12:13
(39) Тут надо уточнить что маркировки они разные
И может быть разное поведение про автоматом
46 bvb
 
03.03.26
14:43
Короче я достал КИЗы с криптохвостами сканированные в расходную накладную так :
Функция ПолучитьТаблицуКИЗов (Ссылка)
    
    Запрос = Новый Запрос;
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ШтрихкодыУпаковок.ШтрихкодУпаковки КАК ШтрихкодУпаковки
    |ПОМЕСТИТЬ ВТ_ШтрихкодыУпаковок
    |ИЗ
    |    Документ.РасходнаяНакладная.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок
    |ГДЕ
    |    ШтрихкодыУпаковок.Ссылка = &Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ПулКодовМаркировкиСУЗ.КодМаркировки КАК КодМаркировки,
    |    ПулКодовМаркировкиСУЗ.GTIN КАК GTIN,
    |    ПулКодовМаркировкиСУЗ.Номенклатура КАК Номенклатура,
    |    ПулКодовМаркировкиСУЗ.ПолныйКодМаркировки КАК ПолныйКодМаркировкиbase64,
    |    ПулКодовМаркировкиСУЗ.Номенклатура.ТоварнаяНоменклатураВЭД КАК КодТНВЭД
    |ИЗ
    |    РегистрСведений.ПулКодовМаркировкиСУЗ КАК ПулКодовМаркировкиСУЗ
    |ГДЕ
    |    ПулКодовМаркировкиСУЗ.КодМаркировки В
    |            (ВЫБРАТЬ
    |                ВТ_ШтрихкодыУпаковок.ШтрихкодУпаковки.ЗначениеШтрихкода
    |            ИЗ
    |                ВТ_ШтрихкодыУпаковок КАК ВТ_ШтрихкодыУпаковок)";  
    
    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    
    Возврат  Запрос.Выполнить().ВЫгрузить();
    
КонецФункции
47 bvb
 
03.03.26
14:46
В запросе они в кодировке base64

КИЗ_с_Криптохвостом = ПреобразоватьBase64ВСтроку(Стр.ПолныйКодМаркировкиbase64);
КИЗ_с_Криптохвостом = СтрЗаменить(КИЗ_с_Криптохвостом, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), "");    



Если нужно обычной строкой так :
Функция ПреобразоватьBase64ВСтроку(СтрокаBase64) Экспорт
    
    Данные = Base64Значение(СтрокаBase64);
    
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
    Данные.Записать(ИмяВременногоФайла);
    
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    ТекстовыйДокумент.Прочитать(ИмяВременногоФайла, "UTF-8");
    
    Попытка
        УдалитьФайлы(ИмяВременногоФайла);
    Исключение
        
    КонецПопытки;
    
    Возврат ТекстовыйДокумент.ПолучитьТекст();
    
КонецФункции
48 H A D G E H O G s
 
03.03.26
19:30
(47)
ПолучитьДвоичныеДанныеИзBase64Строки()
ПолучитьСтрокуИзДвоичныхДанных()
49 bvb
 
04.03.26
12:41
Ну и вишенка на торт печать :

КИЗ_с_Криптохвостом_Исходный = KMS_ОбщийМодульКлиентСервер.ПреобразоватьBase64ВСтроку(Стр.ПолныйКодМаркировкиbase64);
КИЗ_с_Криптохвостом_БезGS1 = СтрЗаменить(КИЗ_с_Криптохвостом_Исходный, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1(), "");    
ОбластьМакета.Параметры.КИЗ_с_Криптохвостом_БезGS1 = КИЗ_с_Криптохвостом_БезGS1;
                    
            //DataMatrix**************************************
            ПараметрыШтрихкода = Новый Структура;
            ПараметрыШтрихкода.Вставить("Ширина",           200);
            ПараметрыШтрихкода.Вставить("Высота",           200);  
            ПараметрыШтрихкода.Вставить("ОтображатьТекст",  ЛОЖЬ);
            ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0);  //строка - исходный штрихкод с криптохвостом
            ПараметрыШтрихкода.Вставить("ТипКода",          24); // - Datamatrix GS1ASCII:
            ПараметрыШтрихкода.Вставить("Штрихкод", КИЗ_с_Криптохвостом_Исходный);
            РезультатГенерацииШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
            
            Если РезультатГенерацииШтрихкода.Картинка <> Неопределено Тогда
                ОбластьМакета.Рисунки.Квадрат100Пикселей.Картинка = РезультатГенерацииШтрихкода.Картинка;
            Иначе
                ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'При генерации картинки штрихкода произошла ошибка'"));
            КонецЕсли;


распечатываемый штрихкод полностью валиден и распознается приложением "Честный знак" с мобильного устройства

Тема закрыта.

А то тут пишут : "один раз", "хранить запрещено"
50 akronim
 
10.03.26
16:23
Тема закрыта.
А то тут пишут : "один раз", "хранить запрещено"

Ну понятно, что к ЧЗ ты не прислушиваешься, в плане хранить запрещено - не осуждаю. Но если в тебе так силен дух авантюризма - из 1С введи в оборот эту марку, запусти стандартное РЗ на очистку пула и попробуй методом из (46) повторно распечатать марку. Вдруг окажется, что так пишут не без оснований.
51 vis
 
10.03.26
18:46
(50) А если без "запусти стандартное РЗ на очистку пула" ?
52 akronim
 
11.03.26
10:14
(51) А это надо экспериментировать. У меня как-то давно ПолныйКодМаркировки очищался после ввода в оборот, хотя все РЗ были выключены, но почему - не разбирался. Поэтому написал на всякий случай, чтоб гарантированно.
53 paramedic
 
11.03.26
10:23
(52) Очищается он, очищается. Просто когда сканируется в расходный документ он опять туда пишется, НО без привязки к номенклатуре. Получается просто записывается КМ. Записываются только КодМаркировки, GTIN, ПолныйКодМаркировкиbase64, ХешСуммаКодаМаркировки, Организация, ТипШтрихкода.
В принципе, через GTIN можно попробовать выдернуть номенклатуру, но в самом регистре она не заполняется.
54 TTimur
 
11.03.26
11:09
(29) Строкой отдают, печатные формы потом сам свои делаешь или передаешь информацию "оператору печати", который тебе за денежку это все красиво на чем-нибудь печатает
55 MWWRuza
 
гуру
11.03.26
11:24
(54) Ну, по API то понятно, еще там бы они ограничили...
А мелким, которые работают непосредственно в ЛК, без API, такую возможность убрали... Раньше можно было выбрать CSV, PDF, и еще какой-то формат под принтер... А со середины прошлого года, CSV убрали в ЛК, оставили только два последних :-(
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.