При обновлении конфигурации «Управление торговлей 10.3» до актуальных релизов и использовании современной платформы 8.3.18 и выше, многие специалисты сталкиваются с критической ошибкой. Она возникает в момент закрытия формы подбора номенклатуры, если пользователь не сохранил документ, а сразу закрывает окно программы или форму. Давайте разберем, почему это происходит и как устранить данную проблему.
Данная ошибка — {Обработка.ПодборНоменклатуры.Форма.ОсновнаяФорма.Форма(1176)}: Значение не является значением объектного типа (ЭтотОбъект) — свидетельствует о том, что механизм сохранения настроек формы пытается обратиться к владельцу формы в тот момент, когда объект ВладелецФормы уже был удален из оперативной памяти платформой. Конфигурация УТ 10.3 построена на базе обычных форм, и логика их взаимодействия с платформой 8.3.18+ имеет ряд архитектурных конфликтов, связанных с асинхронным закрытием окон.
Первое и самое эффективное решение, подтвержденное практикой сообщества, — это отказ от использования платформы версии 8.3.18 в связке с устаревшими конфигурациями на обычных формах. Рекомендуется использовать проверенную стабильную версию 8.3.17 (например, 8.3.17.1851).
8.3.17.1851 или аналогичную из ветки 8.3.17.Практика показывает, что именно в ветке 8.3.17 конфигурация УТ 10.3 работает наиболее стабильно, без «аварийных завершений» и ошибок при обращении к свойствам объектов, которые уже были выгружены из памяти.
Если по каким-то причинам переход на другую версию платформы невозможен, нам необходимо «обезопасить» код, который вызывает ошибку. Мы должны добавить проверку, существует ли ВладелецФормы перед тем, как обращаться к его методам или свойствам.
Разберем, как это сделать по шагам:
Обработка.ПодборНоменклатуры.Формы — ОсновнаяФорма.1176 (или близкую к ней, где происходит вызов СохранитьЗначение).Попытка ... Исключение или добавьте проверку на существование владельца.Пример безопасного кода, который предотвратит вылет программы:
Если ВладелецФормы <> Неопределено Тогда
Попытка
СохранитьЗначение(СокрЛП(?(ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма"),
ВладелецФормы.Объект.Ссылка.Метаданные.Имя,
ВладелецФормы.ЭтотОбъект.Метаданные.Имя)));
Исключение
// Игнорируем ошибку сохранения, так как форма-владелец уже уничтожена
КонецПопытки;
КонецЕсли;
Данный подход позволяет системе корректно завершить работу формы подбора, не пытаясь обратиться к несуществующим объектам. Это стандартная практика при разработке на 1С: когда мы работаем с формами, которые могут быть закрыты в любой момент, всегда необходимо проверять наличие ВладелецФормы.
Помимо исправления кода, важно помнить о чистоте системы. Если вы часто обновляете платформу или конфигурацию, в кэше могут оставаться «битые» файлы, которые приводят к непредсказуемому поведению системы:
локальный кэш 1С на клиентских машинах.Тестирование и исправление (ТиИ) информационной базы в Конфигураторе после обновления конфигурации.технологического журнала, чтобы исключить конфликты на уровне СУБД.Следуя этим рекомендациям, вы сможете стабилизировать работу вашей конфигурации УТ 10.3 и обеспечить комфортную работу пользователей.