Как исправить ошибку «Поле не найдено 'ШтрихкодыУпаковок.Штрихкод'» при печати УПД и счетов-фактур в 1С:УПП и 1С:УТ

Программист 1С v8.3 (Обычные формы) Налоговый учет
← На главную

При обновлении нетиповых или сильно доработанных конфигураций на платформе 1С:Предприятие программисты часто сталкиваются с неожиданным поведением стандартных механизмов. Одной из наиболее резонансных проблем в начале 2020 года стал выпуск релизов 1С:Управление производственным предприятием (УПП), редакция 1.3.133.1 и 1С:Управление торговлей (УТ), редакция 10.3.59.1. После обновления пользователи обнаружили, что печать важнейших первичных документов — Счетов-фактур и Универсальных передаточных документов (УПД) — полностью заблокирована.

В этой статье мы подробно разберем, почему возникает ошибка «Поле не найдено "ШтрихкодыУпаковок.Штрихкод"», проанализируем внутренние механизмы работы подсистемы интеграции с маркировкой (ИСМП) и рассмотрим способы ручного и автоматического исправления этого бага.

Симптомы и локализация неисправности

Проблема заявляет о себе в момент попытки вывода на печать Счета-фактуры или УПД из документов «Реализация товаров и услуг» (РТиУ) или «Корректировка реализации». На экран выводится следующее системное сообщение:


{ОбщийМодуль.ИнтеграцияИС.Модуль(516)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
    Результат = Запрос.ВыполнитьПакет();
по причине:
{(3, 20)}: Поле не найдено "ШтрихкодыУпаковок.Штрихкод"
ШтрихкодыУпаковок.<<?>>Штрихкод КАК Штрихкод

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

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

Технический анализ причин ошибки

Рассмотрим структуру запроса, выполняемого на шаге инициализации. С помощью точки останова в конфигураторе мы можем извлечь текст запроса, на котором спотыкается платформа:


ВЫБРАТЬ
    ШтрихкодыУпаковок.Ссылка КАК Ссылка,
    ШтрихкодыУпаковок.Штрихкод КАК Штрихкод
ПОМЕСТИТЬ ШтрихкодыВходящие
ИЗ
    &ШтрихкодУпаковки КАК ШтрихкодыУпаковок
ИНДЕКСИРОВАТЬ ПО
    Штрихкод
;

Проанализируем ситуацию подробнее. Когда в качестве источника данных в запросе 1С используется таблица значений, переданная через параметр (в нашем случае это &ШтрихкодУпаковки), платформа динамически типизирует поля этой временной таблицы на основе структуры колонок переданного объекта ТаблицаЗначений.

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

ШтрихкодыУпаковок.Штрихкод КАК Штрихкод

Поскольку колонки с именем Штрихкод во входящей таблице значений не существует, СУБД закономерно возвращает ошибку компиляции пакета запросов: «Поле не найдено "ШтрихкодыУпаковок.Штрихкод"».

Способ 1. Ручное исправление кода (для нетиповых конфигураций)

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

Выполним следующие шаги:

  1. Откройте базу данных в режиме Конфигуратор.
  2. Перейдите в дерево метаданных и найдите общий модуль ЭлектронноеВзаимодействиеИСМП (обратите внимание, что в старых релизах этот функционал мог располагаться в модуле ЭлектронноеВзаимодействиеМОТП, но в рамках рефакторинга подсистемы маркировки он переименован).
  3. Найдите в модуле экспортную функцию ЧастичноеСодержимое(ТаблицаУпаковок). Для быстрого поиска используйте сочетание клавиш Ctrl + F.
  4. В тексте функции найдите первый запрос пакета, формирующий временную таблицу ШтрихкодыВходящие.
  5. Замените ошибочное имя поля в запросе на корректное. Вместо исходного текста:
    
    "ВЫБРАТЬ
    |    ШтрихкодыУпаковок.Ссылка   КАК Ссылка,
    |    ШтрихкодыУпаковок.Штрихкод КАК Штрихкод
    |ПОМЕСТИТЬ ШтрихкодыВходящие
    |ИЗ
    |    &ШтрихкодУпаковки КАК ШтрихкодыУпаковок"
    
    пропишите правильное имя колонки ШтрихкодУпаковки:
    
    "ВЫБРАТЬ
    |    ШтрихкодыУпаковок.Ссылка   КАК Ссылка,
    |    ШтрихкодыУпаковок.ШтрихкодУпаковки КАК Штрихкод // исправлено!
    |ПОМЕСТИТЬ ШтрихкодыВходящие
    |ИЗ
    |    &ШтрихкодУпаковки КАК ШтрихкодыУпаковок"
    
  6. Сохраните конфигурацию базы данных (клавиша F7) и запустите сеанс в режиме Предприятия для проверки печати.

Способ 2. Обновление до исправленного релиза

Фирма «1С» оперативно отреагировала на проблему, заблокировавшую отгрузки у сотен предприятий по всей стране. Проблемные релизы УПП 1.3.133.1 и УТ 10.3.59.1 были отозваны с портала технической поддержки.

Если вы планируете решать проблему штатным путем, выполните переход на исправленные версии:

Важное предупреждение для администраторов: При обновлении на исправленный релиз 1.3.133.2 некоторые пользователи сталкиваются со вторичной ошибкой разбора схем WSDL. Для её устранения после завершения обновления обязательно очистите локальный кэш конфигурации на рабочих станциях пользователей и перезапустите службу сервера «1С:Предприятие».

Особенности работы с внешними печатными формами (ВПФ)

Отдельно разберем ситуацию, когда вы используете модифицированные или внешние печатные формы УПД и счетов-фактур. Если после обновления конфигурации даже на исправленный релиз внешняя печатная форма продолжает выдавать ошибку, это связано с изменением структуры общих модулей интеграции.

В релизах начала 2020 года разработчики переименовали устаревший общий модуль ЭлектронноеВзаимодействиеМОТП в ЭлектронноеВзаимодействиеИСМП. Внешняя обработка печатной формы пытается обратиться к несуществующему более объекту метаданных, что вызывает падение системы.

Чтобы восстановить работу внешней печатной формы:

  1. Откройте файл внешней печатной формы (.epf) в конфигураторе.
  2. Перейдите в модуль объекта обработки.
  3. Замените все упоминания устаревшего модуля ЭлектронноеВзаимодействиеМОТП на новый вызов ЭлектронноеВзаимодействиеИСМП.
  4. Проверьте, передаются ли параметры штрихкодов в соответствии с новыми требованиями конфигурации, и сохраните форму.

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

← На главную