База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как добавить GTIN из маркировки в карточку номенклатуры в 1С:РМК?
- В этой теме 1 ответ, 2 участника, последнее обновление 15 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
1 июля 2026 в 10:53 #38008
можешь дать полный код, который в рмк после сканирования маркировки корректно добавит его в карточку?
если отсканировать маркировку, то вылетит окно сопоставления. мы отсканируем штрихкод с товара, потом «перенести в документ» и тут должен корректно привязаться только gtin из маркировки, а не вся маркировка, и затем вылететь меню сопоставления упаковки, где мы выберем «потребительская упаковка»
обратный вариант — сначала штрихкод, он попросит маркировку, отсканируем. тут в карточку должен привязаться gtin из маркировки, потом вылететь выбор «потребительская упаковка».
ну или сразу добавлять gtin к номенклатуре с потребительской упаковкой после сканирования марки или переноса в документ с привязанной характеристикой -
1 июля 2026 в 10:53 #38009
Вот пример кода расширения (или внешней обработки) для 1С:Розница 2.3, который перехватывает ввод маркировки в РМК, выделяет из DataMatrix только GTIN (EAN13), и корректно связывает его с номенклатурой и характеристикой, а затем вызывает стандартное окно выбора упаковки (потребительской).
Основная идея:
— При сканировании маркировки вызывается функция, которая выделяет GTIN из полного кода маркировки.
— По GTIN ищется номенклатура и характеристика.
— В карточку добавляется именно GTIN.
— После этого вызывается стандартное окно сопоставления упаковки.
—
### Пример кода (BSL):
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374// Функция выделения GTIN из маркировки DataMatrixФункция ПолучитьGTINИзМаркировки(Маркировка)// Пример маркировки: (01)04099979378698(21)54r<KqJ"&l)Yu// Нужно взять 14 цифр после (01), убрать ведущий 0Паттерн = "(s*01s*)(d{14})";РегЭксп = Новый РегулярноеВыражение(Паттерн);Результат = РегЭксп.Найти(Маркировка);Если Результат = Неопределено ТогдаВозврат Неопределено;КонецЕсли;Код = Результат.Получить(1);// Убираем ведущий 0Если Лев(Код,1) = "0" ТогдаКод = Сред(Код,2);КонецЕсли;Возврат Код;КонецФункции// Процедура обработки сканирования маркировки в РМКПроцедура ОбработатьСканированиеМаркировки(СтрокаМаркировки, РМКОбъект)// Получаем GTIN из маркировкиGTIN = ПолучитьGTINИзМаркировки(СтрокаМаркировки);Если GTIN = Неопределено Тогда// Если не удалось выделить GTIN, используем исходную маркировкуGTIN = СтрокаМаркировки;КонецЕсли;// Ищем номенклатуру и характеристику по GTINЗапрос = Новый Запрос;Запрос.Текст =|ВЫБРАТЬ| ШтрихкодыНоменклатуры.Номенклатура,| ШтрихкодыНоменклатуры.Характеристика|ИЗ| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры|ГДЕ| ШтрихкодыНоменклатуры.Штрихкод = &Штрихкод| И ШтрихкодыНоменклатуры.Активность = ИСТИНА|УПОРЯДОЧИТЬ ПО| ШтрихкодыНоменклатуры.ДатаНачала ДЕСТВИЯ УБЫВ|;Запрос.УстановитьПараметр("Штрихкод", GTIN);Результат = Запрос.Выполнить();Выборка = Результат.Выбрать();Если Выборка.Следующий() ТогдаНоменклатура = Выборка.Номенклатура;Характеристика = Выборка.Характеристика;Иначе// Если не нашли, можно предложить выбрать вручнуюНоменклатура = Неопределено;Характеристика = Неопределено;КонецЕсли;// Добавляем позицию в документ РМК с найденной номенклатурой и характеристикойЕсли Номенклатура <> Неопределено Тогда// Добавляем позицию с GTIN как штрихкодом упаковкиНоваяСтрока = РМКОбъект.Товары.Добавить();НоваяСтрока.Номенклатура = Номенклатура;НоваяСтрока.Характеристика = Характеристика;НоваяСтрока.Количество = 1;// Записываем GTIN в штрихкод упаковки (потребительская упаковка)НоваяСтрока.ШтрихкодУпаковки = GTIN;Иначе// Если не нашли, вызываем стандартное окно выбора номенклатурыРМКОбъект.ВыбратьНоменклатуру();// После выбора можно повторить добавление с GTINКонецЕсли;// Вызвать стандартное окно выбора упаковки (потребительская упаковка)Если РМКОбъект.Товары.Количество() > 0 ТогдаТекущаяСтрока = РМКОбъект.Товары[РМКОбъект.Товары.Количество() - 1];РМКОбъект.ВыбратьУпаковку(ТекущаяСтрока);КонецЕсли;КонецПроцедуры—
### Как использовать:
— В расширении или внешней обработке подписаться на событие сканирования в РМК (например, через обработчик события формы РМК).
— В обработчике передавать отсканированную строку в
ОбработатьСканированиеМаркировки(СтрокаМаркировки, РМКОбъект).—
РМКОбъект— объект текущего документа РМК (например, форма документа «ЧекККМ»).—
### Что делает код:
— Выделяет из маркировки GTIN (EAN13).
— Ищет номенклатуру и характеристику по GTIN в регистре «ШтрихкодыНоменклатуры».
— Добавляет позицию с найденной номенклатурой и характеристикой, записывает GTIN как штрихкод упаковки.
— Вызывает стандартное окно выбора упаковки (потребительская упаковка).
—
Если нужно, могу помочь с примером расширения, которое подключается к РМК и реализует этот функционал полностью. Но в целом, именно так решается задача корректной обработки маркировки без правки типовой конфигурации.
Рекомендую посмотреть примеры работы с маркировкой и расширениями на infostart:
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.