Имя: Пароль:
1C
1С v8
Запись тега 1162 из 1с для табачной продукции
0 demONx6
 
06.05.19
02:08
Всем привет.

Собственно суть вопроса в теме. Есть необходимость заполнить тег 1162 из 1С.

Нашел "Алгоритм записи тега 1162", но как-то там все не совсем понятно.
https://xn--80ajghhoc2aj1c8b.xn--p1ai/upload/iblock/a0f/a0f7fa37208f3118db26c00fc9bb2b5b.pdf

Например в примере:
"1. Выделяем GTIN 14 символов: 00000046210654 и преобразуем в бинарный вид: 00 00 02 C1 1E 5E"
00 00 02 C1 1E 5E - это шестнадцатиричное представление числа 46210654, с добавленными нулями вначале. При чем тут Бинарный вид?

Далее:
"2. Выделяем Serial 7 символов: ADgopSq и преобразуем в строковое значение: 41 44
67 6f 70 53 71" Тут последнее сочетание цифр вообще не понятно что что...

Ну и в конце:
"3. Складываем 00 05 + 00 00 02 C1 1E 5E + 41 44 67 6f 70 53 71 и кодируем в BASE64:
AAUAAALBHl5BRGdvcFNx." Если допустим получим второе и третье значение, то первое "00 05" - это что и как?
Если 05 - это обозначение табачки, то 00 - они фиксированы? Или эту комбинацию надо целиком формировать?

Гугл конечно делится информацией, но ее недостаточно для решения задачи. А может конечно я ищу так. Просьба натолкнуть на правильные мыли.
1 SadrArt
 
06.05.19
02:23
(0)  >Если допустим получим второе и третье значение, то первое "00 05" - это что и как?
Если 05 - это обозначение табачки, то 00 - они фиксированы?

В алгоритме четко же написано:
Код типа маркировки
Байты [1:2] (2 байта) - Код типа маркировки
Постоянное значение: 00 05

Что тут не понятно?
2 Garykom
 
гуру
06.05.19
02:23
3 Garykom
 
гуру
06.05.19
02:25
(0) Ты что сканер с марки выдает напиши, разделим что куда засовывать
4 demONx6
 
06.05.19
03:29
(1) > Что тут не понятно?
Да, действительно. Не обратил на это внимание. Спасибо.

(3) Мне бы хоть с примером разобраться, что и как кодировать. Возьмем тот из мануала "(01)00000046210654(21)ADgopSq(91)12(92)1234v67i"
Если идти от конца, то в Base64Строка в качестве параметра мне нужно засунуть значение типа ДвоичныеДанные, чтобы получить нужный результат. Следовательно все три составляющие нужно привести к типу ДД, затем конкатенировать и преобразовать. Так?

Serial (ADgopSq) я привел к виду двоичных данных. Воспользовался следующим методом:
ПотокSerial = Новый ПотокВПамяти;
Текст = Новый ЗаписьТекста(ПотокSerial, КодировкаТекста.UTF8);
Текст.Записать("ADgopSq"); // помещаем данные, тип значения: Строка
Текст.Закрыть();
Serial_ДвоичныеДанные = ПотокSerial.ЗакрытьИПолучитьДвоичныеДанные(); // получаем 41 44 67 6f 70 53 71 в типе значений ДвоичныеДанные

Этот способ для 00000046210654 не подходит. Используя вышеописанный метод пытался записать это значение в виде Строки("00000046210654"), Числа(46210654), Формировал шестнадцатиричный вид в текстовом виде("000002C11E5E"), преобразовывал число в бинарную строку("10110000010001111001011110"). Все четыре раза итоговое значение было отличным от "00 00 02 C1 1E 5E"
5 Garykom
 
гуру
06.05.19
03:41
(4)

&НаКлиенте
Функция DecToAny(Знач тЗначение, тОснование)
   тРезультат = "";

   Пока тЗначение > 0 Цикл
      тРезультат = Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", тЗначение%тОснование + 1, 1) + тРезультат;
      тЗначение = Цел(тЗначение/тОснование) ;
   КонецЦикла;

   Возврат тРезультат;
КонецФункции


Затем банально
Сообщить(DecToAny(Число("00000046210654"),16));
6 Garykom
 
гуру
06.05.19
03:42
7 Garykom
 
гуру
06.05.19
03:43
Но учитывай предельную разрядность чисел в 1С, если сильно большие будут то придется свою для больших арифметику писать ))
Или найти готовую для 1С.
8 Garykom
 
гуру
06.05.19
03:48
Просто кто то кто писал мануал "Алгоритм записи тега 1162" путает бинарный формат (имхо из 0 и 1) и HEX (шестнадцатеричную запись в виде строки)
9 demONx6
 
06.05.19
03:57
(8) вот-вот. И мне так кажется.
10 demONx6
 
06.05.19
07:11
(5) DecToAny(Число("00000046210654"),16) делает шестнадцатеричное представление числа в текстовом типе. А как получить это же значение но в типе значений "Двоичные данные?".
11 demONx6
 
06.05.19
07:13
Чтобы вот так было:
http://pastexen.com/i/hdPnKxipiH.jpg
12 demONx6
 
06.05.19
07:20
(10) Аналогичный вопрос к тому, как получить "00 05" в виде двоичных данных.
13 Garykom
 
гуру
06.05.19
11:06
(12) Наймите программиста
Независимо от того, куда вы едете — это в гору и против ветра!