В современных реалиях оптовой торговли маркированной продукцией, такой как обувь, табак, лекарства, одежда и другие категории товаров, возникает острая необходимость в эффективном и безошибочном помарочном учете при отгрузке. Стандартные подходы, когда товар приходится переносить к стационарному компьютеру для сканирования, или полное отсутствие автоматизации на складе, становятся узким местом, существенно замедляя процесс и увеличивая вероятность ошибок. Мы рассмотрим, как можно решить эту проблему, используя самописное мобильное приложение (аналог ТСД) для 1С:Управление торговлей 11 (УТ 11), а также разберем типичные сложности, возникающие на этом пути.
Зачастую, когда готовые коммерческие решения для ТСД кажутся перегруженными или избыточно функциональными для специфических задач небольшого или среднего склада, разработчики прибегают к созданию собственных мобильных приложений. Такие приложения могут подключаться к 1С:УТ 11 через
HTTP-сервисы
Одна из ключевых проблем, с которой мы можем столкнуться, это корректная загрузка отсканированных кодов маркировки непосредственно в документ «Реализация товаров и услуг». Многие разработчики пытаются напрямую работать с табличными частями документа, такими как ШтрихкодыУпаковок. Мы выясним, что это не всегда приводит к желаемому результату. При попытке программно добавить данные в эту табличную часть и последующей записи документа, строки с кодами могут попросту удаляться или изменяться без видимой причины, даже при использовании флага
Загрузка = Истина
Другой потенциальный путь, который мы могли бы рассмотреть, это имитация работы типовых обработок, таких как ПроверкаИПодборПродукцииИСМП. Эта обработка специально предназначена для работы с маркированными товарами, их проверки и подбора. В ней есть различные механизмы, включая
ВнешнееСобытие
ЗагрузитьИзТСД
Мы предлагаем обратить внимание на существующий типовой функционал 1С, который предназначен для импорта данных. В документе «Реализация товаров и услуг», а точнее, в форме «Подбор и проверка маркированной продукции», есть очень полезная кнопка «Загрузить из внешнего файла». Именно этот механизм оказался наиболее эффективным для решения задачи. Давайте разберем его подробнее.
Мобильное приложение (ТСД) сканирует коды: На вашем самописном мобильном приложении кладовщик сканирует индивидуальные коды маркировки (КИЗы) с каждой единицы товара, предназначенной для отгрузки. После завершения сканирования данные передаются в 1С:УТ 11. Этот обмен может быть реализован через
HTTP-сервис
Пример гипотетического кода на стороне мобильного приложения для отправки данных:
// Предполагается, что CodesToTransfer - это массив отсканированных кодов
ОтветСервера = HttpСоединение.ОтправитьЗапрос("POST", "/ut11_extension_api/receive_marks", CodesToTransfer);
На стороне 1С:УТ 11 HTTP-сервис принимает эти данные и сохраняет их во временное хранилище. Это может быть регистр сведений, вспомогательный документ в расширении или даже временный файл на сервере 1С.
Пример обработчика
HTTP-сервиса
Функция ReceiveMarks(Запрос)
// Разбор JSON-строки из тела запроса
МассивКодов = JSON.Прочитать(Запрос.ПолучитьТелоКакСтроку());
// Сохранение кодов во временное хранилище
// Например, в РегистрСведений.ОтсканированныеМаркировкиСклада
Для Каждого КодМаркировки Из МассивКодов Цикл
ЗаписьРегистра = РегистрыСведений.ОтсканированныеМаркировкиСклада.СоздатьМенеджерЗаписи();
ЗаписьРегистра.КодМаркировки = КодМаркировки;
ЗаписьРегистра.Пользователь = ТекущийПользователь; // Или пользователь, от которого пришел запрос
ЗаписьРегистра.ДокументОснование = УникальныйИдентификаторДокументаОтгрузки;
ЗаписьРегистра.Записать();
КонецЦикла;
Возврат Новый HTTPСервисОтвет(200);
КонецФункции
Автоматизация заполнения файла импорта: Когда пользователь (бухгалтер или оператор) открывает документ «Реализация товаров и услуг» и переходит к форме «Подбор и проверка маркированной продукции», он нажимает на кнопку «Загрузить из внешнего файла». Эта кнопка вызывает стандартную обработку, которая предоставляет окно для выбора файла или для ввода данных в табличный документ.
Мы можем доработать этот механизм (например, с помощью расширения или внешней обработки), чтобы он автоматически заполнял открывающийся табличный документ данными, которые были ранее отсканированы и сохранены мобильным приложением. Для этого нужно перехватить событие открытия формы загрузки или добавить свою логику, которая при вызове кнопки «Загрузить из внешнего файла» будет брать коды из временного хранилища и подставлять их в табличный документ.
Гипотетический механизм автоматического заполнения (в расширении или внешней обработке):
РегистрыСведений.ОтсканированныеМаркировкиСклада
ТабличныйДокумент
В результате, стандартный механизм 1С обрабатывает эти данные так, как будто они были вручную введены или импортированы из файла, обеспечивая корректное заполнение всех необходимых табличных частей и проведение валидации. Такой подход позволяет использовать надежный типовой функционал 1С для работы с маркировкой, не пытаясь "сломать" его внутренние механизмы.
После успешного решения задачи загрузки индивидуальных кодов маркировки, мы можем столкнуться с новой проблемой, особенно при работе с групповыми штрихкодами (кодами упаковки). Представьте ситуацию: у вас есть упаковка, содержащая 6 единиц товара, каждая из которых имеет свой индивидуальный код маркировки. Сама упаковка также имеет групповой штрихкод. При сканировании такого группового штрихкода в мобильном приложении и последующей передаче данных в УТ 11, мы можем обнаружить, что количество товара в документе «Реализация» изменилось с ожидаемых 6 единиц на 1.
Это происходит потому, что система 1С может по-разному интерпретировать групповые штрихкоды. Вместо того, чтобы «разложить» групповой штрихкод на 6 индивидуальных единиц товара (и их коды маркировки), она может воспринять сам групповой штрихкод как одну учетную единицу товара. То есть, система видит «одну упаковку» и считает, что это «одна единица» товара, а не упаковка, содержащая несколько единиц.
Для того чтобы разобраться, почему происходит это нежелательное изменение количества, нам необходимо проанализировать работу конкретных процедур в 1С:УТ 11. Ключевой процедурой, отвечающей за изменение количества в документе после сканирования или других операций, является ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии.
Мы рекомендуем отладить эту процедуру при возникновении проблемы с групповыми штрихкодами. Поставьте точку останова в начале этой процедуры и проследите за ее выполнением, когда происходит сканирование группового штрихкода. Обратите внимание на следующие моменты:
ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии обрабатывает полученные данные? Есть ли там ветвления кода, которые по-разному обрабатывают индивидуальные и групповые штрихкоды?Мы также должны тщательно проверить настройки номенклатуры и видов упаковок в 1С:УТ 11. Убедитесь, что:
Если настройки номенклатуры и упаковок корректны, но проблема сохраняется, то, скорее всего, необходимо будет доработать логику внутри процедуры ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии или процедур, которые ее вызывают, чтобы она правильно интерпретировала групповой штрихкод и корректировала количество в документе реализации, основываясь на фактическом числе единиц товара в упаковке.
Использование
HTTP-сервисов
Расширения позволяют добавлять новый функционал или изменять существующий без снятия конфигурации с поддержки, что является предпочтительным методом доработки в современных версиях 1С. Мы можем добавить в расширение собственные HTTP-сервисы, формы, отчеты и процедуры, которые будут взаимодействовать с типовыми объектами конфигурации.
Пример структуры кода в расширении для работы с внешними данными:
// В расширении "МоеРасширениеДляТСД"
// Модуль HTTP-сервиса
Функция ПринятьОтсканированныеМарки(Запрос) Экспорт
// ... логика приема и сохранения данных ...
// Например, вызываем обработку или модуль, который сохранит данные
Обработки.МояОбработкаДляМаркировки.СохранитьВременныеМарки(СписокМарок, ДокОснование);
Возврат Новый HTTPСервисОтвет(200);
КонецФункции
// Общий модуль или модуль обработки в расширении
Процедура СохранитьВременныеМарки(МассивМарок, ДокументОснование) Экспорт
// ... логика сохранения марок в РегистрСведений.ОтсканированныеМаркиРасширения ...
КонецПроцедуры
// В событии "ПриОткрытии" формы "Подбора и проверки маркированной продукции" (через расширение)
Процедура Расширение_ПриОткрытии(Отказ)
// ...
// Добавляем свою кнопку или перехватываем действие существующей
// Например, если есть кнопка "Загрузить из внешнего файла",
// мы можем добавить обработчик после ее стандартного действия
// или создать свою кнопку "Загрузить с ТСД"
// ...
// После нажатия нашей кнопки или перехвата:
ТабДокДляЗагрузки = Новый ТабличныйДокумент;
// Заполняем ТабДокДляЗагрузки из РегистрСведений.ОтсканированныеМаркиРасширения
// ...
// Инициируем стандартную загрузку, передавая наш ТабДокДляЗагрузки
// ОбработкаПодбора.ЗагрузитьКодыИзТабличногоДокумента(ТабДокДляЗагрузки);
// ...
КонецПроцедуры
Важно помнить, что любые доработки должны быть реализованы таким образом, чтобы минимально затрагивать типовой код конфигурации, преимущественно через расширения. Это обеспечивает легкость обновления и поддержку системы.
Мы выяснили, что создание собственной системы помарочного учета с использованием мобильного приложения для 1С:УТ 11 возможно, и может быть эффективнее покупки готовых решений, если последние не удовлетворяют специфическим требованиям. Основным путем для успешной интеграции отсканированных кодов является использование типового механизма «Загрузить из внешнего файла» в форме подбора маркированной продукции, с автоматизированным заполнением этого файла данными с мобильного приложения.
Для решения проблем с некорректным изменением количества при сканировании групповых штрихкодов, необходимо детально отладить процедуру ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии и убедиться в правильности настроек номенклатуры и видов упаковок. Эти шаги помогут вам построить надежную и функциональную систему помарочного учета на складе, которая значительно повысит эффективность отгрузки маркированных товаров.