Почему в 1С при переходе на платформу 8.3.10 не открываются окна управляемых форм в обычном приложении и как это исправить?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Разберем характерную проблему, с которой сталкиваются разработчики при эксплуатации гибридных конфигураций (например, УТП, КА 1.1 или УПП 1.3 на обычных формах с добавленными управляемыми формами). На релизах платформы 8.3.8 и 8.3.9 доработанные управляемые формы документов функционируют корректно. Однако при переходе на платформу 8.3.10 (включая релизы 8.3.10.2561 и аналогичные) при попытке проведения документа окно статуса или результат выполнения операции перестает отображаться, блокируя работу пользователя.

Причины возникновения сбоя на платформе 8.3.10

Выясним, какие изменения в платформе привела к подобному исследованию поведения программы:

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

Способы решения проблемы

Рассмотрим несколько вариантов исправления данной ситуации в зависимости от инфраструктуры и возможностей доработки конфигурации.

Вариант 1. Повышение режима совместимости конфигурации

Посмотрим на самое прямое решение — изменение режима совместимости конфигурации с устаревшего Версия 8.2.13 на актуальный Версия 8.3.6 или выше. Это задействует обновленные механизмы работы с управляемыми формами.

Разберем по шагам, как выполнить смену режима совместимости:

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

Вариант 2. Использование альтернативной версии платформы

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

  1. Даунгрейд платформы: Откат на стабильные релизы ветки 8.3.9 (например, 8.3.9.2170), где рефакторинг оконной системы еще не задевал механизм вызова управляемых форм из обычного приложения.
  2. Обновление на более свежие ветки: Переход на платформы версий 8.3.12, 8.3.14 или выше. В более поздних релизах платформы ошибки отрисовки гибридных окон и диалогов проведения были исправлены разработчиками «1С».

Вариант 3. Программный обход интерактивного проведения

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

Рассмотрим пример реализации команды проведения в модуле управляемой формы:


&НаКлиенте
Процедура КомандаПровестиДокумент(Команда)
	
	Если ПровестиДокументНаСервере() Тогда
		ПоказатьОповещениеПользователю("Успех", , "Документ успешно проведен!");
		ОповеститьОбИзменении(Объект.Ссылка);
	Иначе
		ПоказатьПредупреждение(, "Не удалось провести документ. Проверьте Журнал регистрации.");
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПровестиДокументНаСервере()
	
	ДокументОбъект = РеквизитФормыВЗначение("Объект");
	
	Попытка
		ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
		ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
		Возврат Истина;
	Исключение
		ЗаписатьРегистрЖурналаРегистрации("Ошибка проведения", 
			УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
		Возврат Ложь;
	КонецПопытки;
	
КонецФункции

Риски и ограничения при изменении режима совместимости

Обратим особое внимание на риски, связанные с повышением режима совместимости в крупных конфигурациях (УТП, КА 1.1, УПП 1.3):

  1. Изменение работы языка запросов: Меняется логика оптимизатора запросов и обработка значений NULL в виртуальных таблицах регистров накопления и бухгалтерии, что может приводить к искажению данных в отчетах.
  2. Сбои в отчетах СКД: Изменение режима совместимости часто приводит к сбросу сохраненных пользовательских настроек и группировок в отчетах на базе Системы компоновки данных.
  3. Исключения при вызове модальных окон: Если свойства Режим использования модальности или Режим использования синхронных вызовов переведены в статус Не использовать, платформа будет вызывать критические ошибки на устаревших методах Вопрос, Предупреждение и ОткрытьФормуМодально.
  4. Длительная реструктуризация: Изменение режима совместимости выше версии 8.2.16 или 8.3.6 запускает полную реструктуризацию отдельных таблиц базы данных. На больших информационных базах этот процесс требует длительного монопольного доступа и обязательного создания резервной копии.
← На главную