Почему не выводится штрихкод из документа поступления в 1С:УТ 11 и как это исправить?

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

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

Разберем симптомы проблемы

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

Проанализируем техническую причину ошибки

Проблема кроется в программном коде обработки ПечатьЭтикетокИЦенников, а именно в процедуре ЗаполнитьТаблицуТоваровПоДокументу. В релизах ветки 11.4.13 разработчиками была допущена ошибка в логике формирования SQL-запроса к регистру сведений ШтрихкодыНоменклатуры.

Когда система пытается массово получить штрихкоды для списка товаров из документа, она выполняет ЛЕВОЕ СОЕДИНЕНИЕ (Left Join) табличной части документа с регистром штрихкодов. В условии соединения участвуют не только Номенклатура и Характеристика, но и поле Упаковка. Выясним причину сбоя: в базе данных значение «пустой упаковки» может интерпретироваться либо как NULL, либо как пустая ссылка типа СправочникСсылка.УпаковкиЕдиницыИзмерения. В указанном релизе условие соединения прописано таким образом, что если упаковка в документе не указана (пустая), запрос ожидает строгое соответствие с «пустой» упаковкой в регистре, но из-за особенностей работы платформы с типами данных в сложных запросах, соединение не происходит, и результат возвращает пустое значение штрихкода.

Вариант 1: Установка официального исправления (патча)

Поскольку данная проблема является официально признанной ошибкой (багом) релиза 11.4.13.180, компания 1С выпустила специальные патчи (исправления). Это самый быстрый и безопасный способ решения проблемы без полного обновления конфигурации.

  1. Перейдем в раздел Администрирование — Обслуживание — Обновление программы.
  2. Выберем пункт «Установленные исправления (патчи)».
  3. Проверим наличие доступных патчей для версии 11.4.13. Если система подключена к поддержке, она автоматически предложит скачать исправление, корректирующее работу запроса в обработке печати ценников.

Вариант 2: Обновление конфигурации

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

В этих версиях алгоритм подбора штрихкодов пересмотрен: система сначала пытается найти штрихкод с учетом конкретной упаковки, и если он не найден — ищет любой доступный штрихкод для данной номенклатуры и характеристики.

Вариант 3: Использование расширения (для программистов)

Если обновление невозможно, а патч по каким-то причинам не устанавливается, мы можем исправить запрос самостоятельно с помощью механизма расширений. Нам необходимо перехватить запрос в обработке ПечатьЭтикетокИЦенников. Посмотрим на пример того, как должен выглядеть фрагмент исправленного условия в запросе:


// Вместо жесткого соединения:
// И ТекстоваяТаблица.Упаковка = Штрихкоды.Упаковка
// Используем более гибкое условие в ГДЕ или через ВЫБОР:
ГДЕ
    (Штрихкоды.Упаковка = ТекстоваяТаблица.Упаковка 
    ИЛИ (ТекстоваяТаблица.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) 
         И Штрихкоды.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)))

Такой подход гарантирует, что система сопоставит товары без упаковок со штрихкодами, у которых упаковка также не задана.

Вариант 4: Временное решение для пользователя (обходной путь)

Если этикетки нужно напечатать «здесь и сейчас», а программиста нет рядом, можно воспользоваться особенностью работы формы. Проанализируем алгоритм действий:

  1. Заполним обработку печати из документа как обычно (штрихкоды будут пустыми).
  2. Выделим все строки в таблице (нажмем Ctrl + A).
  3. Нажмем кнопку «Заполнить» в командной панели таблицы.
  4. Выберем пункт «Перезаполнить по номенклатуре» (или аналогичный пункт, инициирующий обновление данных). В этот момент система запустит другой алгоритм поиска штрихкодов, который работает при интерактивном изменении строк, и данные появятся в колонках.

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

Иногда проблема может усугубляться некорректными настройками ведения учета. Проверим следующие моменты:

Таким образом, мы выяснили, что отсутствие штрихкода в печати из документа — это программная недоработка конкретного релиза 11.4.13.180, связанная с фильтрацией по пустой ссылке упаковки. Оптимальным решением будет установка исправляющего патча или обновление конфигурации до актуальной версии.

← На главную