При переходе на релиз 1С:Управление производственным предприятием (УПП) версии 1.3.133.1 многие пользователи и разработчики столкнулись с критической ошибкой. При попытке распечатать типовые формы документов «Реализация товаров и услуг», такие как Универсальный передаточный документ (УПД) или Счет-фактура, система аварийно завершает работу с техническим сообщением об ошибке: Поле не найдено "ШтрихкодыУпаковок.Штрихкод".
В данной статье мы подробно разберем причины возникновения этой неполадки, проанализируем исходный код и рассмотрим несколько способов решения — от оперативного «костыля» до полноценного исправления в коде и официального обновления.
Проанализируем ситуацию: ошибка возникает в общем модуле ИнтеграцияИС при вызове метода ВыполнитьПакет. Техническая причина кроется в масштабном рефакторинге механизмов интеграции с информационными системами маркировки (ИС МП), который разработчики 1С проводили в данном релизе. В табличной части ШтрихкодыУпаковок документов реализации реквизит был переименован (в частности, в ШтрихкодУпаковки), однако в текстах запросов, формирующих данные для печати, осталось обращение к старому имени поля — Штрихкод.
Рассмотрим по шагам, как можно устранить эту проблему самостоятельно, если ваша конфигурация доработана и вы не можете оперативно установить свежий патч или следующий релиз.
Наиболее правильным и точечным решением является изменение псевдонима поля в запросе, который собирает данные для печати. Выясним, где именно находится этот код. Основная проблема локализована в модуле УчетНДС.
УчетНДС.СобратьДанныеПоРеализацииТоваровИУслуг.ШтрихкодыУпаковок.Проанализируем фрагмент запроса, который вызывает сбой:
|ВЫБРАТЬ
| Ссылка КАК Ссылка,
| ШтрихкодУпаковки КАК ШтрихкодУпаковки
|ИЗ
| Документ.РеализацияТоваровУслуг.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок
|ГДЕ
| ШтрихкодыУпаковок.Ссылка = &ДокументОснование
В метаданных текущего релиза поле называется ШтрихкодУпаковки, но механизмы печати ожидают получить структуру с полем Штрихкод. Нам необходимо назначить псевдоним полю. Исправим код следующим образом:
|ВЫБРАТЬ
| Ссылка КАК Ссылка,
| ШтрихкодУпаковки КАК Штрихкод
|ИЗ
| Документ.РеализацияТоваровУслуг.ШтрихкодыУпаковок КАК ШтрихкодыУпаковок
|ГДЕ
| ШтрихкодыУпаковок.Ссылка = &ДокументОснование
Важно: обратите внимание на строку ШтрихкодУпаковки КАК Штрихкод. После этого изменения пакетный запрос выполнится успешно, так как ожидаемое поле будет найдено.
Если вам требуется максимально быстро восстановить работоспособность печати, не вникая в структуру запросов НДС, можно воспользоваться методом обхода ошибки в модулях интеграции. Рассмотрим пример модификации общего модуля ИнтеграцияИС (строка 516 и далее) внутри функции ВыполнитьПакетЗапросов.
Вместо прямого выполнения пакета, которое приводит к дампу, мы можем добавить проверку:
// Вместо типового: Результат = Запрос.ВыполнитьПакет();
// Используем безопасный возврат
Результат = Неопределено;
Возврат Таблицы;
Затем в модуле ЭлектронноеВзаимодействиеИСМП (в районе строки 217) в функции ЧастичноеСодержимое(ТаблицаУпаковок) необходимо добавить обработку пустого результата:
РезультатыЗапроса = ИнтеграцияИС.ВыполнитьПакетЗапросов(Запрос, СписокЗапросов, Ложь);
Если НЕ ЗначениеЗаполнено(РезультатыЗапроса) Тогда
Возврат Неопределено;
КонецЕсли;
Внимание: этот способ является «костылем». Он позволит распечатать документ, но данные о кодах маркировки (если они используются) могут не попасть в печатную форму корректно.
Фирма «1С» признала данную ошибку критической (Bug ID 00125867) и выпустила исправительный релиз 1.3.133.2 буквально на следующий день. Если ваша конфигурация находится на типовой поддержке и не содержит значительных изменений, самым надежным решением будет обновление до версии 1.3.133.2 или выше. В нем все вышеописанные правки в модулях УчетНДС и ИнтеграцияИС уже внесены разработчиками.
Разбирая проблемы релиза 1.3.133.1, нельзя не упомянуть еще один нюанс, который часто замечают программисты при отладке. Это проблема «незакрывающейся» формы документа «Реализация товаров и услуг». Даже если вы просто открыли документ и ничего в нем не меняли, при закрытии 1С просит сохранить изменения.
Проанализируем причину. В модуле формы документа РеализацияТоваровУслуг в процедуре ОбновлениеОтображения присутствует строка:
ЭлементыФормы.АдресДоставки.Значение = УправлениеКонтактнойИнформацией.ПолучитьПредставлениеАдресаПоСтрока(АдресДоставки);
Так как ОбновлениеОтображения вызывается системой крайне часто, любое минимальное различие (лишний пробел или разный регистр) в строке адреса и результате функции форматирования приводит к тому, что 1С считает объект измененным (устанавливается флаг Модифицированность = Истина). Для устранения этого поведения в сильно кастомизированных базах разработчики часто комментируют эту строку, так как она носит лишь декоративный характер.
Мы рассмотрели техническую ошибку релиза 1.3.133.1, связанную с обращением к несуществующему полю Штрихкод. Для исправления ситуации рекомендуем:
УчетНДС, заменив имя поля на актуальное с использованием псевдонима.