Почему возникает ошибка «Значение не является значением объектного типа (ЭтотОбъект)» при закрытии формы подбора в УТ 10.3?

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

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

Техническая природа ошибки

Данная ошибка — {Обработка.ПодборНоменклатуры.Форма.ОсновнаяФорма.Форма(1176)}: Значение не является значением объектного типа (ЭтотОбъект) — свидетельствует о том, что механизм сохранения настроек формы пытается обратиться к владельцу формы в тот момент, когда объект ВладелецФормы уже был удален из оперативной памяти платформой. Конфигурация УТ 10.3 построена на базе обычных форм, и логика их взаимодействия с платформой 8.3.18+ имеет ряд архитектурных конфликтов, связанных с асинхронным закрытием окон.

Вариант решения №1: Стабилизация платформы

Первое и самое эффективное решение, подтвержденное практикой сообщества, — это отказ от использования платформы версии 8.3.18 в связке с устаревшими конфигурациями на обычных формах. Рекомендуется использовать проверенную стабильную версию 8.3.17 (например, 8.3.17.1851).

  1. Удалите текущую платформу 8.3.18.хххх с сервера и рабочих станций.
  2. Установите версию 8.3.17.1851 или аналогичную из ветки 8.3.17.
  3. Проверьте корректность работы механизма ввода на основании и открытия форм подбора.

Практика показывает, что именно в ветке 8.3.17 конфигурация УТ 10.3 работает наиболее стабильно, без «аварийных завершений» и ошибок при обращении к свойствам объектов, которые уже были выгружены из памяти.

Вариант решения №2: Программная модификация кода (исправление в Конфигураторе)

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

Разберем, как это сделать по шагам:

  1. Откройте «Конфигуратор» в режиме «Конфигурация».
  2. Найдите объект Обработка.ПодборНоменклатуры.
  3. Перейдите в Формы — ОсновнаяФорма.
  4. Найдите строку 1176 (или близкую к ней, где происходит вызов СохранитьЗначение).
  5. Оберните вызов в конструкцию Попытка ... Исключение или добавьте проверку на существование владельца.

Пример безопасного кода, который предотвратит вылет программы:


Если ВладелецФормы <> Неопределено Тогда
    Попытка
        СохранитьЗначение(СокрЛП(?(ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма"), 
        ВладелецФормы.Объект.Ссылка.Метаданные.Имя, 
        ВладелецФормы.ЭтотОбъект.Метаданные.Имя)));
    Исключение
        // Игнорируем ошибку сохранения, так как форма-владелец уже уничтожена
    КонецПопытки;
КонецЕсли;

Данный подход позволяет системе корректно завершить работу формы подбора, не пытаясь обратиться к несуществующим объектам. Это стандартная практика при разработке на 1С: когда мы работаем с формами, которые могут быть закрыты в любой момент, всегда необходимо проверять наличие ВладелецФормы.

Важные рекомендации по обслуживанию

Помимо исправления кода, важно помнить о чистоте системы. Если вы часто обновляете платформу или конфигурацию, в кэше могут оставаться «битые» файлы, которые приводят к непредсказуемому поведению системы:

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

← На главную