Как исправить ошибку «Значение не является значением объектного типа (Отбор)» при открытии Рабочего стола в 1С?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе с конфигурациями на обычных формах, такими как Бухгалтерия предприятия 1.3 или Управление производственным предприятием 1.3, разработчики и системные администраторы часто сталкиваются с неожиданным поведением системы после обновления платформы до ветки 8.3.13. Одной из наиболее неприятных проблем является падение системы при открытии начальной страницы (Рабочего стола) с ошибкой обращения к свойству Отбор. В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем технические нюансы работы платформы и рассмотрим пошаговые инструкции по устранению неисправности.

Анализ проблемы и технический контекст

Рассмотрим ситуацию: при запуске системы на платформе версии 8.3.13.1513 пользователь видит сообщение об ошибке в модуле формы Рабочего стола. Текст ошибки выглядит следующим образом:

{Обработка.РабочийСтол.Форма.Форма.Форма(509)}: Значение не является значением объектного типа (Отбор)

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


Процедура БанкУстановитьОтбор(УчетПоВсемОрганизациям)
    Если НЕ ОсновнаяОрганизация.Пустая() Тогда
        ЖурналДокументовСписокБанк.Отбор.Организация.Использование = Истина;
        ...
КонецПроцедуры

Выясним причину такого поведения. В платформе версии 8.3.13 был изменен механизм инициализации реквизитов формы. Если объект (в данном случае ЖурналДокументовСписок) объявлен в реквизитах формы, но не выведен на саму форму как элемент управления (табличное поле) или скрыт, платформа в целях оптимизации может не создавать программный объект при старте. В результате в отладчике мы видим, что переменная ЖурналДокументовСписокБанк имеет значение Неопределено. Попытка обращения к свойству Отбор у неинициализированного объекта и вызывает исключение.

Проблемы с динамическим кэшем (Storage64.cpp)

Дополнительно в Технологическом журнале (ТЖ) часто обнаруживаются записи следующего вида: Файл не обнаружен 'v8stg64://c:/1/DynamicalWorkCache': src\Storage64.cpp. Проанализируем, что это означает. Это указывает на критический сбой в механизме динамического обновления конфигурации. В ветке 8.3.13 разработчики 1С начали внедрять поддержку 64-битных индексов для файловых хранилищ, что привело к конфликтам при работе с локальным кэшем пользователя, если конфигурация обновлялась динамически («демонски»).

Решение 1: Смена версии платформы (наиболее надежный способ)

Посмотрим на практический опыт эксплуатации данной ветки платформы. Версия 8.3.13.1513 признана специалистами крайне нестабильной для работы с «обычными» формами. У нас есть два варианта действий:

  1. Откат на стабильную ветку: Установим версию 8.3.12.1595 или более свежий релиз из ветки 8.3.12. Как показывает практика, на этой платформе проблемы с инициализацией объектов в 1.3 отсутствуют.
  2. Обновление до исправленного релиза: Если использование 8.3.13 критично (например, для нужд 1С:ERP), следует обновиться до версии 8.3.13.1644 или выше. В этих сборках ошибки инициализации журналов были частично исправлены.

Решение 2: Очистка кэша конфигурации

Если смена платформы невозможна или не помогла сразу, разберем процедуру полной очистки кэша. Обычного ключа запуска /ClearCache может быть недостаточно, так как он не затрагивает DynamicalWorkCache.

Выполним следующие шаги:

  1. Завершим все сеансы работы с базой данных.
  2. Перейдем в каталог %LOCALAPPDATA%\1C\1cv8\.
  3. Удалим все папки с именами в виде GUID (например, 25e9821a-7b3e-4f32...).
  4. Повторим процедуру для каталога %APPDATA%\1C\1cv8\.
  5. В случае клиент-серверного варианта, рекомендуется остановить службу сервера 1С и очистить содержимое папки snccntx в каталоге данных сервера. Это удалит битые индексы динамических обновлений.

Решение 3: Принудительное обновление метаданных формы

Разберем способ «подсказать» платформе, что объект необходимо инициализировать. Иногда помогает простое пересохранение проблемного объекта в конфигураторе:

  1. Откроем конфигуратор и найдем обработку РабочийСтол.
  2. Откроем основную форму обработки.
  3. Внесем любое незначительное изменение (например, немного передвинем элемент управления или добавим пробел в комментарии модуля).
  4. Нажмем Сохранить.
  5. Вернем изменение обратно и снова нажмем Сохранить.
  6. Выполним обновление конфигурации базы данных (клавиша F7).

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

Решение 4: Тестирование и исправление (ТИИ)

Проанализируем ситуацию, когда ошибка вызвана логическим повреждением таблиц соответствия. В этом случае поможет запуск встроенного механизма тестирования:

  1. Запустим конфигуратор и перейдем в меню Администрирование — Тестирование и исправление.
  2. Установим флажки: «Реиндексация таблиц» и «Проверка логической целостности».
  3. Выберем режим «Тестирование и исправление».
  4. Нажмем «Выполнить».

Особое внимание уделим проверке логической целостности — она восстанавливает связи между объектами метаданных и физическими таблицами базы данных, что критично при возникновении ошибок в Storage64.cpp.

Резюме

Подводя итог, можно сказать, что ошибка «Значение не является значением объектного типа (Отбор)» на Рабочем столе — это классический пример несовместимости старого кода конфигураций на обычных формах с новыми механизмами оптимизации платформы 8.3.13. Основной рекомендацией остается использование проверенных и стабильных релизов платформы (ветки 8.3.12 или 8.3.14+) и осторожное отношение к динамическому обновлению конфигурации в рабочем режиме.

← На главную