Как исправить ошибку «Поле объекта не обнаружено (АрхивироватьЧекиККМПриЗакрытииКассовойСмены)» в 1С:УНФ?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

При обновлении конфигурации 1С:Управление нашей фирмой (УНФ) до релизов линейки 1.6.22.х или 1.6.23.х пользователи часто сталкиваются с неприятной ситуацией. После успешного завершения обновления при попытке зайти в раздел «Администрирование» или нажать на ссылку «Ещё больше возможностей» система выдает критическую ошибку: Поле объекта не обнаружено (АрхивироватьЧекиККМПриЗакрытииКассовойСмены). В этой статье мы подробно разберем, почему возникает этот сбой, и рассмотрим эффективные методы его устранения.

Анализ причины возникновения ошибки

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

Суть проблемы заключается в следующем: при открытии формы настроек система запускает программный перебор констант, которые должны отображаться на форме. Процедура обращается к реквизиту АрхивироватьЧекиККМПриЗакрытииКассовойСмены, но в метаданных формы данного релиза этот реквизит либо отсутствует, либо был переименован, в то время как программный код в общем модуле или модуле формы остался прежним.

Давайте определим конкретное место в конфигураторе, где происходит сбой. Как правило, это обработка НастройкаПрограммы, форма НастройкаПрограммы и процедура ПолучитьЗначенияКонстантРазмещенныхНаФормеУНФ(). Система пытается динамически прочитать значение, которого нет в коллекции формы, что и приводит к аварийному завершению работы формы.

Почему стандартные методы не помогают?

Многие технические специалисты первым делом запускают Тестирование и исправление (ТиИ) или выполняют очистку кэша. Однако в данном случае эти действия бесполезны. Проанализируем почему:

  1. Тестирование и исправление проверяет физическую целостность таблиц и ссылок. Поскольку структура таблиц в порядке, а ошибка находится в исполняемом коде формы, ТиИ ничего не найдет.
  2. Очистка кэша помогает, если конфигурация на клиенте «залипла», но здесь ошибка воспроизводится на уровне метаданных самого релиза.

Способ 1: Использование расширения конфигурации

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

Разберем процесс подключения исправления по шагам:

  1. Перейдем в раздел Настройки — Печатные формы, отчеты и обработки — Расширения.
  2. Загрузим подготовленный файл расширения (исправления).
  3. Важный нюанс: после добавления расширения необходимо обязательно снять галочку «Безопасный режим». Это критично, так как расширения, модифицирующие программный код типовых форм, требуют повышенных прав доступа. Без снятия этой опции расширение просто не сработает, и ошибка останется.
  4. Перезапустим сеанс 1С.

Способ 2: Ручная правка кода (для нетиповых баз)

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

Проанализируем пример кода, который может решить проблему внутри формы настройки:


&НаСервере
Процедура ПолучитьЗначенияКонстантРазмещенныхНаФормеУНФ()
    // Находим строку, вызывающую ошибку, и оборачиваем её
    Попытка
        ЗначениеРеквизита = НаборКонстант.АрхивироватьЧекиККМПриЗакрытииКассовойСмены;
    Исключение
        // Если реквизит не найден, просто игнорируем его или присваиваем значение по умолчанию
        ЗначениеРеквизита = Ложь; 
        ЗаписьЖурналаРегистрации("Ошибка настроек", УровеньЖурналаРегистрации.Предупреждение, , , "Поле АрхивироватьЧекиККМПриЗакрытииКассовойСмены не найдено в метаданных.");
    КонецПопытки;
КонецПроцедуры

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

Способ 3: Установка официальных патчей 1С

Фирма 1С оперативно выпускает исправления для критических багов в виде патчей (исправлений). Если у вас настроена интернет-поддержка, мы рекомендуем проверить наличие официального исправления.

Для этого выполним следующие действия:

  1. Зайдем в меню Администрирование — Обслуживание.
  2. Выберем пункт Обновление программы и перейдем по ссылке Установленные исправления (патчи).
  3. Нажмем кнопку Поиск и установка исправлений.
  4. В списке доступных патчей найдем те, что относятся к версии 1.6.22 или 1.6.23 и касаются формы настроек.

Если патч найден, система установит его автоматически, и проблема исчезнет без вмешательства в код.

Рекомендации по дальнейшему обновлению

Выясним, стоит ли продолжать обновление, если вы столкнулись с такой ошибкой. Опытные программисты рекомендуют не останавливаться на «промежуточных» релизах. Ошибка с полем АрхивироватьЧекиККМПриЗакрытииКассовойСмены была полностью исправлена в более поздних сборках (начиная с 1.6.24 и выше).

Посмотрим на оптимальную стратегию действий:

  1. Если текущая работа невозможна, примените расширение (как описано в способе 1).
  2. Запланируйте обновление до актуального стабильного релиза (например, ветки 1.6.25 или выше).
  3. Перед обновлением обязательно делайте полную резервную копию базы, даже если «кассиры уже работают». В случае критического сбоя перенос данных за один день будет стоить дешевле, чем восстановление разрушенной базы данных.

Таким образом, мы выяснили, что данная проблема носит исключительно программный характер и легко решается либо временным патчем/расширением, либо переходом на исправленную версию программы. Главное — помнить про отключение безопасного режима для расширений, иначе исправление не вступит в силу.

← На главную