При работе с алкогольной продукцией в конфигурации «1С:Бухгалтерия предприятия 3.0» пользователи могут столкнуться с критическим сбоем при попытке открыть документ Остатки ЕГАИС или воспользоваться «Помощником корректировки остатков ЕГАИС». Программа аварийно завершает работу формы и выдает следующее диагностическое сообщение:
{Документ.ОстаткиЕГАИС.Форма.ФормаДокумента.Форма(667)}: Поле объекта не обнаружено (ХарактеристикиИспользуются)
В этой статье мы подробно разберем, почему возникает данная неполадка, какие конфигурации оказались под ударом, а также рассмотрим все возможные способы решения проблемы — от официального обновления до временных технических обходов кода для базовых и проф-версий программы.
Давайте проанализируем внутреннюю архитектуру решений «1С:Предприятие», чтобы понять природу этого сбоя. Источником проблемы стал некорректный перенос программного кода из общей библиотеки интеграции (ГосИС / БЭД — Библиотека электронного документооборота) в типовую конфигурацию «1С:Бухгалтерия предприятия 3.0».
Эта библиотека пишется как универсальный модуль для различных программных продуктов 1С, включая такие сложные торговые решения, как «Управление торговлей 11», «1С:Розница» и «1С:УНФ». В этих торговых конфигурациях активно поддерживается ведение учета в разрезе дополнительных свойств номенклатуры — характеристик (например, цвет, размер, объем). Соответственно, в коде интеграции с ЕГАИС присутствует проверка, используются ли характеристики для конкретной позиции номенклатуры.
Однако в стандартной «1С:Бухгалтерии предприятия» (как в базовой, так и в ПРОФ/КОРП версиях) функционал ведения учета по характеристикам на уровне метаданных встроенной учетной системы физически отсутствует и не поддерживается. При выпуске очередного обновления разработчики допустили прямое обращение к свойству номенклатуры в форме документа без предварительной проверки его существования в текущей конфигурации:
Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) И СтрокаТЧ.Номенклатура.ХарактеристикиИспользуются Тогда
// Некий алгоритм обработки характеристик для ЕГАИС
КонецЕсли;
Поскольку у справочника Номенклатура в «1С:Бухгалтерии» нет реквизита или свойства ХарактеристикиИспользуются, платформа 1С:Предприятие генерирует исключение «Поле объекта не обнаружено» и прекращает выполнение кода, блокируя открытие формы документа.
Данный сбой затронул пользователей целого ряда программных продуктов:
Рассмотрим несколько вариантов устранения этой ошибки в зависимости от вашей версии программы и возможности редактирования конфигурации.
Если вы используете типовую конфигурацию (особенно базовую версию, где внесение изменений в код невозможно), самым простым и правильным решением будет обновление программы. Разработчики компании 1С оперативно исправили данное несоответствие.
Начиная с релиза 3.0.73.50 «1С:Бухгалтерии предприятия» ошибка полностью устранена.
В обновленном коде разработчики заменили прямое обращение к реквизиту на вызов безопасной функции общего назначения. Эта функция проверяет наличие реквизита в метаданных конкретной конфигурации. Для «1С:Бухгалтерии» она всегда возвращает значение Ложь, позволяя коду корректно выполняться дальше без возникновения исключений.
Если по каким-то причинам вы не можете оперативно обновить базу данных (например, конфигурация сильно доработана и требует времени на аудит кода перед обновлением), используйте рекомендации технической поддержки:
Остатки ЕГАИС.Если ваша программа версии ПРОФ или КОРП находится на поддержке без возможности изменения основной конфигурации, вы можете исправить ошибку с помощью механизма расширений. Это позволит не снимать базу с поддержки и сохранить возможность автоматического обновления в будущем.
Для этого программисту необходимо создать расширение и перехватить процедуру открытия формы документа Остатки ЕГАИС (метод ПриСозданииНаСервере или сопутствующую процедуру заполнения табличной части на сервере). В расширении мы можем принудительно переопределить логику проверки:
&Вместо("ПроверитьИспользованиеХарактеристикНоменклатуры") // Имя оригинальной процедуры интеграционного модуля
Процедура Расш_ПроверитьИспользованиеХарактеристикНоменклатуры(СтрокаТЧ)
// Так как в БП характеристики не используются, принудительно возвращаем Ложь
ИспользоватьХарактеристики = Ложь;
КонецПроцедуры
Этот способ безопасен и решает проблему мгновенно до момента установки официального релиза обновления 1С.
Если ваша база данных уже доработана сторонними специалистами и снята с поддержки, вы можете внести правку непосредственно в конфигураторе.
Выясним точное место ошибки по детальному тексту исключения: откройте конфигуратор, перейдите в форму документа ОстаткиЕГАИС и найдите указанную строку (в районе строки 667). Найдите участок кода, обращающийся к ХарактеристикиИспользуются, и оберните проверку в безопасную конструкцию:
// Безопасный вариант проверки наличия реквизита в метаданных номенклатуры
ХарактеристикиПоддерживаются = ОбщегоНазначения.ЕстьРеквизитОбъекта("ХарактеристикиИспользуются", Метаданные.Справочники.Номенклатура);
Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
Если ХарактеристикиПоддерживаются И СтрокаТЧ.Номенклатура.ХарактеристикиИспользуются Тогда
// Код обработки характеристик
КонецЕсли;
КонецЕсли;
После сохранения конфигурации базы данных (клавиша F7) документ Остатки ЕГАИС будет открываться без каких-либо ошибок.