Как корректно загрузить помарочные коды маркировки в документ реализации в 1С:УТ 11 с помощью мобильного приложения и решить проблему с изменением количества при сканировании групповых штрихкодов?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В современных реалиях оптовой торговли маркированной продукцией, такой как обувь, табак, лекарства, одежда и другие категории товаров, возникает острая необходимость в эффективном и безошибочном помарочном учете при отгрузке. Стандартные подходы, когда товар приходится переносить к стационарному компьютеру для сканирования, или полное отсутствие автоматизации на складе, становятся узким местом, существенно замедляя процесс и увеличивая вероятность ошибок. Мы рассмотрим, как можно решить эту проблему, используя самописное мобильное приложение (аналог ТСД) для 1С:Управление торговлей 11 (УТ 11), а также разберем типичные сложности, возникающие на этом пути.

Зачастую, когда готовые коммерческие решения для ТСД кажутся перегруженными или избыточно функциональными для специфических задач небольшого или среднего склада, разработчики прибегают к созданию собственных мобильных приложений. Такие приложения могут подключаться к 1С:УТ 11 через


HTTP-сервисы
, запрашивать необходимые данные (например, накладные с маркированным товаром) и передавать отсканированные коды обратно в информационную систему. Однако, на этапе интеграции данных в учетную систему возникают определенные трудности, особенно когда речь идет о специфических механизмах 1С для работы с маркировкой.

Основные трудности при загрузке маркировки в документ реализации

Одна из ключевых проблем, с которой мы можем столкнуться, это корректная загрузка отсканированных кодов маркировки непосредственно в документ «Реализация товаров и услуг». Многие разработчики пытаются напрямую работать с табличными частями документа, такими как ШтрихкодыУпаковок. Мы выясним, что это не всегда приводит к желаемому результату. При попытке программно добавить данные в эту табличную часть и последующей записи документа, строки с кодами могут попросту удаляться или изменяться без видимой причины, даже при использовании флага


Загрузка = Истина
. Это происходит потому, что 1С:УТ 11 имеет сложный встроенный механизм контроля и валидации кодов маркировки, который активно взаимодействует с государственной информационной системой мониторинга товаров (ГИС МТ), известной как «Честный ЗНАК». Прямая запись в табличные части, минуя стандартные процедуры, может нарушать логику системы и приводить к отторжению данных.

Другой потенциальный путь, который мы могли бы рассмотреть, это имитация работы типовых обработок, таких как ПроверкаИПодборПродукцииИСМП. Эта обработка специально предназначена для работы с маркированными товарами, их проверки и подбора. В ней есть различные механизмы, включая


ВнешнееСобытие
(для имитации сканера) или функция

ЗагрузитьИзТСД
. Однако, внедрение в эти механизмы и их корректная активация извне может быть неочевидной и требовать глубокого понимания внутренних процессов конфигурации.

Решение проблемы загрузки помарочных кодов

Мы предлагаем обратить внимание на существующий типовой функционал 1С, который предназначен для импорта данных. В документе «Реализация товаров и услуг», а точнее, в форме «Подбор и проверка маркированной продукции», есть очень полезная кнопка «Загрузить из внешнего файла». Именно этот механизм оказался наиболее эффективным для решения задачи. Давайте разберем его подробнее.

  1. Мобильное приложение (ТСД) сканирует коды: На вашем самописном мобильном приложении кладовщик сканирует индивидуальные коды маркировки (КИЗы) с каждой единицы товара, предназначенной для отгрузки. После завершения сканирования данные передаются в 1С:УТ 11. Этот обмен может быть реализован через

    
    HTTP-сервис
    
    или любой другой удобный механизм.

    Пример гипотетического кода на стороне мобильного приложения для отправки данных:

    
    // Предполагается, что CodesToTransfer - это массив отсканированных кодов
    ОтветСервера = HttpСоединение.ОтправитьЗапрос("POST", "/ut11_extension_api/receive_marks", CodesToTransfer);
    

    На стороне 1С:УТ 11 HTTP-сервис принимает эти данные и сохраняет их во временное хранилище. Это может быть регистр сведений, вспомогательный документ в расширении или даже временный файл на сервере 1С.

    Пример обработчика

    
    HTTP-сервиса
    
    в 1С (псевдокод):

    
    Функция ReceiveMarks(Запрос)
        // Разбор JSON-строки из тела запроса
        МассивКодов = JSON.Прочитать(Запрос.ПолучитьТелоКакСтроку());
    
        // Сохранение кодов во временное хранилище
        // Например, в РегистрСведений.ОтсканированныеМаркировкиСклада
        Для Каждого КодМаркировки Из МассивКодов Цикл
            ЗаписьРегистра = РегистрыСведений.ОтсканированныеМаркировкиСклада.СоздатьМенеджерЗаписи();
            ЗаписьРегистра.КодМаркировки = КодМаркировки;
            ЗаписьРегистра.Пользователь = ТекущийПользователь; // Или пользователь, от которого пришел запрос
            ЗаписьРегистра.ДокументОснование = УникальныйИдентификаторДокументаОтгрузки;
            ЗаписьРегистра.Записать();
        КонецЦикла;
    
        Возврат Новый HTTPСервисОтвет(200);
    КонецФункции
    
  2. Автоматизация заполнения файла импорта: Когда пользователь (бухгалтер или оператор) открывает документ «Реализация товаров и услуг» и переходит к форме «Подбор и проверка маркированной продукции», он нажимает на кнопку «Загрузить из внешнего файла». Эта кнопка вызывает стандартную обработку, которая предоставляет окно для выбора файла или для ввода данных в табличный документ.

    Мы можем доработать этот механизм (например, с помощью расширения или внешней обработки), чтобы он автоматически заполнял открывающийся табличный документ данными, которые были ранее отсканированы и сохранены мобильным приложением. Для этого нужно перехватить событие открытия формы загрузки или добавить свою логику, которая при вызове кнопки «Загрузить из внешнего файла» будет брать коды из временного хранилища и подставлять их в табличный документ.

    Гипотетический механизм автоматического заполнения (в расширении или внешней обработке):

    1. Перехватываем команду кнопки: Находим команду, которая обрабатывает нажатие кнопки «Загрузить из внешнего файла» в форме подбора маркированной продукции.
    2. Инициируем заполнение: Перед вызовом стандартной процедуры загрузки из файла или сразу после открытия формы загрузки, мы можем вызвать свою процедуру.
    3. Извлекаем данные: Получаем отсканированные коды из
      
      РегистрыСведений.ОтсканированныеМаркировкиСклада
      
      (или другого хранилища), связанные с текущим документом реализации.
    4. Заполняем табличный документ: Программно создаем или получаем ссылку на
      
      ТабличныйДокумент
      
      , который используется для импорта, и заполняем его строками с кодами маркировки.
    5. Вызываем стандартную обработку: После заполнения вызываем стандартную процедуру 1С, которая обрабатывает данные из табличного документа и корректно разносит их по документу «Реализация».

    В результате, стандартный механизм 1С обрабатывает эти данные так, как будто они были вручную введены или импортированы из файла, обеспечивая корректное заполнение всех необходимых табличных частей и проведение валидации. Такой подход позволяет использовать надежный типовой функционал 1С для работы с маркировкой, не пытаясь "сломать" его внутренние механизмы.

Проблема с групповыми штрихкодами и изменение количества

После успешного решения задачи загрузки индивидуальных кодов маркировки, мы можем столкнуться с новой проблемой, особенно при работе с групповыми штрихкодами (кодами упаковки). Представьте ситуацию: у вас есть упаковка, содержащая 6 единиц товара, каждая из которых имеет свой индивидуальный код маркировки. Сама упаковка также имеет групповой штрихкод. При сканировании такого группового штрихкода в мобильном приложении и последующей передаче данных в УТ 11, мы можем обнаружить, что количество товара в документе «Реализация» изменилось с ожидаемых 6 единиц на 1.

Это происходит потому, что система 1С может по-разному интерпретировать групповые штрихкоды. Вместо того, чтобы «разложить» групповой штрихкод на 6 индивидуальных единиц товара (и их коды маркировки), она может воспринять сам групповой штрихкод как одну учетную единицу товара. То есть, система видит «одну упаковку» и считает, что это «одна единица» товара, а не упаковка, содержащая несколько единиц.

Выясняем причину изменения количества

Для того чтобы разобраться, почему происходит это нежелательное изменение количества, нам необходимо проанализировать работу конкретных процедур в 1С:УТ 11. Ключевой процедурой, отвечающей за изменение количества в документе после сканирования или других операций, является ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии.

Мы рекомендуем отладить эту процедуру при возникновении проблемы с групповыми штрихкодами. Поставьте точку останова в начале этой процедуры и проследите за ее выполнением, когда происходит сканирование группового штрихкода. Обратите внимание на следующие моменты:

  1. Входящие параметры: Какие данные передаются в эту процедуру? Корректно ли система передает информацию о составе групповой упаковки или она передает только сам групповой код без информации о вложенных единицах?
  2. Логика обработки: Как процедура ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии обрабатывает полученные данные? Есть ли там ветвления кода, которые по-разному обрабатывают индивидуальные и групповые штрихкоды?
  3. Источники данных: Откуда процедура берет информацию о количестве? Она может обращаться к настройкам номенклатуры, видам упаковок, или данным из ГИС МТ.

Мы также должны тщательно проверить настройки номенклатуры и видов упаковок в 1С:УТ 11. Убедитесь, что:

Если настройки номенклатуры и упаковок корректны, но проблема сохраняется, то, скорее всего, необходимо будет доработать логику внутри процедуры ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии или процедур, которые ее вызывают, чтобы она правильно интерпретировала групповой штрихкод и корректировала количество в документе реализации, основываясь на фактическом числе единиц товара в упаковке.

Особенности работы с HTTP-сервисами и расширениями

Использование


HTTP-сервисов
для обмена данными между мобильным приложением и 1С:УТ 11 — это современный и эффективный подход. Однако, при его реализации критически важно убедиться, что данные, передаваемые через сервис, корректно обрабатываются в 1С:УТ 11 с учетом всех нюансов помарочного учета. Часто для этого требуется создание собственного расширения или внешней обработки, которая:

Расширения позволяют добавлять новый функционал или изменять существующий без снятия конфигурации с поддержки, что является предпочтительным методом доработки в современных версиях 1С. Мы можем добавить в расширение собственные HTTP-сервисы, формы, отчеты и процедуры, которые будут взаимодействовать с типовыми объектами конфигурации.

Пример структуры кода в расширении для работы с внешними данными:


// В расширении "МоеРасширениеДляТСД"

// Модуль HTTP-сервиса
Функция ПринятьОтсканированныеМарки(Запрос) Экспорт
    // ... логика приема и сохранения данных ...
    // Например, вызываем обработку или модуль, который сохранит данные
    Обработки.МояОбработкаДляМаркировки.СохранитьВременныеМарки(СписокМарок, ДокОснование);
    Возврат Новый HTTPСервисОтвет(200);
КонецФункции

// Общий модуль или модуль обработки в расширении
Процедура СохранитьВременныеМарки(МассивМарок, ДокументОснование) Экспорт
    // ... логика сохранения марок в РегистрСведений.ОтсканированныеМаркиРасширения ...
КонецПроцедуры

// В событии "ПриОткрытии" формы "Подбора и проверки маркированной продукции" (через расширение)
Процедура Расширение_ПриОткрытии(Отказ)
    // ...
    // Добавляем свою кнопку или перехватываем действие существующей
    // Например, если есть кнопка "Загрузить из внешнего файла", 
    // мы можем добавить обработчик после ее стандартного действия
    // или создать свою кнопку "Загрузить с ТСД"
    // ...
    // После нажатия нашей кнопки или перехвата:
    ТабДокДляЗагрузки = Новый ТабличныйДокумент;
    // Заполняем ТабДокДляЗагрузки из РегистрСведений.ОтсканированныеМаркиРасширения
    // ...
    // Инициируем стандартную загрузку, передавая наш ТабДокДляЗагрузки
    // ОбработкаПодбора.ЗагрузитьКодыИзТабличногоДокумента(ТабДокДляЗагрузки);
    // ...
КонецПроцедуры

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

Заключение

Мы выяснили, что создание собственной системы помарочного учета с использованием мобильного приложения для 1С:УТ 11 возможно, и может быть эффективнее покупки готовых решений, если последние не удовлетворяют специфическим требованиям. Основным путем для успешной интеграции отсканированных кодов является использование типового механизма «Загрузить из внешнего файла» в форме подбора маркированной продукции, с автоматизированным заполнением этого файла данными с мобильного приложения.

Для решения проблем с некорректным изменением количества при сканировании групповых штрихкодов, необходимо детально отладить процедуру ОтразитьИзменениеКоличестваВТабличныхЧастяхТоварыСерии и убедиться в правильности настроек номенклатуры и видов упаковок. Эти шаги помогут вам построить надежную и функциональную систему помарочного учета на складе, которая значительно повысит эффективность отгрузки маркированных товаров.

← На главную