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