При обновлении нетиповых или сильно доработанных конфигураций на платформе 1С:Предприятие программисты часто сталкиваются с неожиданным поведением стандартных механизмов. Одной из наиболее резонансных проблем в начале 2020 года стал выпуск релизов 1С:Управление производственным предприятием (УПП), редакция 1.3.133.1 и 1С:Управление торговлей (УТ), редакция 10.3.59.1. После обновления пользователи обнаружили, что печать важнейших первичных документов — Счетов-фактур и Универсальных передаточных документов (УПД) — полностью заблокирована.
В этой статье мы подробно разберем, почему возникает ошибка «Поле не найдено "ШтрихкодыУпаковок.Штрихкод"», проанализируем внутренние механизмы работы подсистемы интеграции с маркировкой (ИСМП) и рассмотрим способы ручного и автоматического исправления этого бага.
Проблема заявляет о себе в момент попытки вывода на печать Счета-фактуры или УПД из документов «Реализация товаров и услуг» (РТиУ) или «Корректировка реализации». На экран выводится следующее системное сообщение:
{ОбщийМодуль.ИнтеграцияИС.Модуль(516)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
Результат = Запрос.ВыполнитьПакет();
по причине:
{(3, 20)}: Поле не найдено "ШтрихкодыУпаковок.Штрихкод"
ШтрихкодыУпаковок.<<?>>Штрихкод КАК Штрихкод
Заметим, что ошибка проявляется даже в тех случаях, когда организация не занимается оборотом маркируемой продукции (обувь, табак, одежда), а табличные части документов, предназначенные для кодов маркировки, остаются абсолютно пустыми.
Выясним причину такого поведения. Дело в том, что при подготовке данных для печатных форм система всегда инициализирует механизмы проверки кодов маркировки и штрихкодов упаковок через общий модуль интеграции. Внутри процедуры подготовки печатной формы вызывается функция ЧастичноеСодержимое() общего модуля ЭлектронноеВзаимодействиеИСМП. В качестве параметра в эту функцию передается таблица значений ТаблицаУпаковок (в коде запроса она фигурирует под именем-параметром &ШтрихкодУпаковки).
Рассмотрим структуру запроса, выполняемого на шаге инициализации. С помощью точки останова в конфигураторе мы можем извлечь текст запроса, на котором спотыкается платформа:
ВЫБРАТЬ
ШтрихкодыУпаковок.Ссылка КАК Ссылка,
ШтрихкодыУпаковок.Штрихкод КАК Штрихкод
ПОМЕСТИТЬ ШтрихкодыВходящие
ИЗ
&ШтрихкодУпаковки КАК ШтрихкодыУпаковок
ИНДЕКСИРОВАТЬ ПО
Штрихкод
;
Проанализируем ситуацию подробнее. Когда в качестве источника данных в запросе 1С используется таблица значений, переданная через параметр (в нашем случае это &ШтрихкодУпаковки), платформа динамически типизирует поля этой временной таблицы на основе структуры колонок переданного объекта ТаблицаЗначений.
В структуре метаданных обновленной конфигурации колонка этой таблицы на самом деле называется ШтрихкодУпаковки, в то время как разработчики фирмы «1С» при написании текста запроса ошибочно обратились к полю Штрихкод:
ШтрихкодыУпаковок.Штрихкод КАК Штрихкод
Поскольку колонки с именем Штрихкод во входящей таблице значений не существует, СУБД закономерно возвращает ошибку компиляции пакета запросов: «Поле не найдено "ШтрихкодыУпаковок.Штрихкод"».
Если ваша база данных находится на замке (на поддержке с возможностью изменения) и вы не можете оперативно накатить следующее официальное обновление, мы рекомендуем внести точечное исправление в код общего модуля. Это займет не более 5 минут и полностью восстановит работоспособность печати документов.
Выполним следующие шаги:
ЭлектронноеВзаимодействиеИСМП (обратите внимание, что в старых релизах этот функционал мог располагаться в модуле ЭлектронноеВзаимодействиеМОТП, но в рамках рефакторинга подсистемы маркировки он переименован).ЧастичноеСодержимое(ТаблицаУпаковок). Для быстрого поиска используйте сочетание клавиш Ctrl + F.ШтрихкодыВходящие.
"ВЫБРАТЬ
| ШтрихкодыУпаковок.Ссылка КАК Ссылка,
| ШтрихкодыУпаковок.Штрихкод КАК Штрихкод
|ПОМЕСТИТЬ ШтрихкодыВходящие
|ИЗ
| &ШтрихкодУпаковки КАК ШтрихкодыУпаковок"
ШтрихкодУпаковки:
"ВЫБРАТЬ
| ШтрихкодыУпаковок.Ссылка КАК Ссылка,
| ШтрихкодыУпаковок.ШтрихкодУпаковки КАК Штрихкод // исправлено!
|ПОМЕСТИТЬ ШтрихкодыВходящие
|ИЗ
| &ШтрихкодУпаковки КАК ШтрихкодыУпаковок"
F7) и запустите сеанс в режиме Предприятия для проверки печати.Фирма «1С» оперативно отреагировала на проблему, заблокировавшую отгрузки у сотен предприятий по всей стране. Проблемные релизы УПП 1.3.133.1 и УТ 10.3.59.1 были отозваны с портала технической поддержки.
Если вы планируете решать проблему штатным путем, выполните переход на исправленные версии:
Важное предупреждение для администраторов: При обновлении на исправленный релиз 1.3.133.2 некоторые пользователи сталкиваются со вторичной ошибкой разбора схем WSDL. Для её устранения после завершения обновления обязательно очистите локальный кэш конфигурации на рабочих станциях пользователей и перезапустите службу сервера «1С:Предприятие».
Отдельно разберем ситуацию, когда вы используете модифицированные или внешние печатные формы УПД и счетов-фактур. Если после обновления конфигурации даже на исправленный релиз внешняя печатная форма продолжает выдавать ошибку, это связано с изменением структуры общих модулей интеграции.
В релизах начала 2020 года разработчики переименовали устаревший общий модуль ЭлектронноеВзаимодействиеМОТП в ЭлектронноеВзаимодействиеИСМП. Внешняя обработка печатной формы пытается обратиться к несуществующему более объекту метаданных, что вызывает падение системы.
Чтобы восстановить работу внешней печатной формы:
.epf) в конфигураторе.ЭлектронноеВзаимодействиеМОТП на новый вызов ЭлектронноеВзаимодействиеИСМП.Применение одного из описанных методов позволит вам полностью ликвидировать сбой печати первичных документов и вернуть систему автоматизации в штатный рабочий режим.