15 сент. 2016 - Дмитрий Виноградов

RFID маркировка КИЗ для меховых изделий из 1C

В связи со вступлением в силу 12 августа 2016 года Соглашения о реализации в 2015-2016 годах пилотного проекта по маркировки товаров из меха контрольными идентификационными знаками, на рынке появилась потребность в индивидуализации RFID меток КИЗ.

Рассмотрим применение программной платформы Шина RFID для индивидуализации КИЗ через 1С:Предприятие.

Весь процесс состоит из следующих простых этапов:

  1. Подключение к Шине RFID
  2. Получение списка RFID меток со считывателя
  3. Индивидуализация КИЗ
  4. Формирование XML документа для ГИС Маркировка 

	Интерфейс обработки 1С для маркировки шуб

Подключение к Шине RFID

// Подключение событий внешней обработки
ПодключитьВнешнююКомпоненту("AddIn.RfidBus1cClient");

// Подключение к Шине RFID
ШинаРфид = Новый COMОбъект("AddIn.RfidBus1cClient");
ШинаРфид.Connect("demo.rfidbus.rfidcenter.ru", 80, "demo", "demo");

// Получение всех считывателей из Шины RFID
Считыватели = ШинаРфид.GetReaders();

Получение списка RFID меток со считывателя

В Шине RFID предусмотрены инструменты автоматического декодирования EPC записанного по стандартам GS1 (SGTIN, SSCC и др.) у найденных меток.

// Включить автоматическое декодирование EPC на считывателе
ШинаРфид.EnableDecodeEpc(Считыватель.Id);

 Поиск меток в Шине RFID реализован двумя способами:

  1. Перевод считывателя в режим чтения — информация о найденных метках асинхронно передаётся через внешние события до изменения режима работы устройства;
  2. Запрос RFID меток находящихся в поле зрения считывателя — реализует синхронный запрос Шине RFID на кратковременный перевод RFID считывателя в режим чтения, с последующим возвратом списка найденных RFID меток.

Ввиду того, что при нахождении считывателя в состоянии чтения нельзя работать с банками памяти меток, а нам необходимо считывать TID найденных меток, то реализация поиска меток должна осуществляться через синхронный запрос.

// Получить список RFID меток в области видимости считывателя
Метки = ШинаРфид.GetTransponders(Считыватель.Id);

 Теперь для каждой метки можно запросить TID и получить её декодированные данные.

Для Каждого Метка Из Метки Цикл
    Тид = ByteArrayToHexString(ШинаРфид.ReadMultipleBlocks(
            Считыватель.Id, 
            Метка, 
            TransponderBank_Tid, 
            0,  // Начальный блок банка
            4,  // Количество блоков по 2 байта
            ПарольДоступа));

    РасширенныеДанные = Метка.Extended.Groups.Выгрузить();
    Для Каждого Данные Из РасширенныеДанные Цикл
        Если Данные.Name = "Epc" Тогда
            МассивЕпс = Данные.Items.Выгрузить();
            Если Цел(ПолучитьЗначение(МассивЕпс, "Type")) = ЗАГОЛОВОК_SGTIN96 Тогда
                Фильтр  = ПолучитьЗначение(МассивЕпс, "Filter");
                ПрефиксКомпании = ПолучитьЗначение(МассивЕпс, "Gcp");
                Артикул = ПолучитьЗначение(МассивЕпс, "Item");
                СерийныйНомер = ПолучитьЗначение(МассивЕпс, "Serial");
					
                Sgtin96 = Фильтр + "." + ПрефиксКомпании + "." + Артикул + "." + СерийныйНомер;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецЦикла

 Индивидуализация КИЗ

 Индивидуализация КИЗ происходит путём записи на неё SGTIN-96, с последующей блокировкой метки. 

НоваяМетка = ШинаРфид.WriteEpcSgtin96(
    Считыватель.Id, 
    МеткаСТид.Метка, 
    GCP,       // Первые 9 цифр GTIN
    Артикул,   // Цифры GTIN с 10 слева
    СерийныйНомер,
    1, // Filter Values for SGTIN EPC Tags: 1 - Point of Sale (POS) Trade Item
    3  // SGTIN Partition Table
);

// Для блокировки необходимо задать пароль доступа
ШинаРфид.SetAccessPassword(Считыватель.Id, НоваяМетка, НовыйПароль, ПарольДоступа);

// Навсегда заблокировать все банки RFID метки
ШинаРфид.LockTransponder(
        Считыватель.Id, НоваяМетка, TransponderBankLockType_PermanentLocked, ПарольДоступа);

Уникальный серийный номер маркируемого объекта задаётся внутренними правилами организации. В общем случае, достаточно брать заводской серийный номер транспондера из его TID.

Формирование XML документа для ГИС Маркировка

 На основе полученных на предыдущих шагах данных, формируем выгрузку в ГИС Маркировка. 

<?xml version="1.0" encoding="UTF-8"?>
<query version="2.32" xsi:noNamespaceSchemaLocation="..\xsd_new1\query.xsd">
	<unify_self_signs action_id="20">
		<sender_gln>4610002329991</sender_gln>
		<unify_date>2016-09-15T08:53:15Z</unify_date>
		<unifies>
			<by_gtin>
				<sign_gtin>4680449131624</sign_gtin>
				<union>
					<gs1_sgtin>001100000010110110111110010111001100011100010001100101100000000000000000000000001010101000110000</gs1_sgtin>
					<sing_tid>E2801100E00030AA</sing_tid>
				</union>
			</by_gtin>
		</unifies>
	</unify_self_signs>
</query>