Разберем характерную проблему, с которой сталкиваются разработчики при эксплуатации гибридных конфигураций (например, УТП, КА 1.1 или УПП 1.3 на обычных формах с добавленными управляемыми формами). На релизах платформы 8.3.8 и 8.3.9 доработанные управляемые формы документов функционируют корректно. Однако при переходе на платформу 8.3.10 (включая релизы 8.3.10.2561 и аналогичные) при попытке проведения документа окно статуса или результат выполнения операции перестает отображаться, блокируя работу пользователя.
Выясним, какие изменения в платформе привела к подобному исследованию поведения программы:
Версия 8.2.13, то при запуске базы в толстом клиенте (в режиме обычного приложения) вызов управляемых форм использует устаревшие эмуляторы контекста. В платформе 8.3.10 системное окно прогресса или проведения из управляемой формы теряет фокус, блокируется или не отрисовывается.Рассмотрим несколько вариантов исправления данной ситуации в зависимости от инфраструктуры и возможностей доработки конфигурации.
Посмотрим на самое прямое решение — изменение режима совместимости конфигурации с устаревшего Версия 8.2.13 на актуальный Версия 8.3.6 или выше. Это задействует обновленные механизмы работы с управляемыми формами.
Разберем по шагам, как выполнить смену режима совместимости:
Версия 8.3.6 (или более высокое, подходящее для вашей конфигурации).Если повышение режима совместимости сопряжено с высокими рисками для рабочей базы, проанализируем варианты смены релиза платформы:
Проанализируем программный способ решения, при котором мы отказываемся от стандартной кнопки проведения управляемой формы и реализуем собственную команду. В этом случае проведение выполняется на сервере напрямую через метод Записать(РежимЗаписиДокумента.Проведение) без вызова зависающего системного диалога.
Рассмотрим пример реализации команды проведения в модуле управляемой формы:
&НаКлиенте
Процедура КомандаПровестиДокумент(Команда)
Если ПровестиДокументНаСервере() Тогда
ПоказатьОповещениеПользователю("Успех", , "Документ успешно проведен!");
ОповеститьОбИзменении(Объект.Ссылка);
Иначе
ПоказатьПредупреждение(, "Не удалось провести документ. Проверьте Журнал регистрации.");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПровестиДокументНаСервере()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
Возврат Истина;
Исключение
ЗаписатьРегистрЖурналаРегистрации("Ошибка проведения",
УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
Возврат Ложь;
КонецПопытки;
КонецФункции
Обратим особое внимание на риски, связанные с повышением режима совместимости в крупных конфигурациях (УТП, КА 1.1, УПП 1.3):
NULL в виртуальных таблицах регистров накопления и бухгалтерии, что может приводить к искажению данных в отчетах.Режим использования модальности или Режим использования синхронных вызовов переведены в статус Не использовать, платформа будет вызывать критические ошибки на устаревших методах Вопрос, Предупреждение и ОткрытьФормуМодально.