С появлением платформы 8.3 появилась возможность настройки работы в конфигурации без модальных/ синхронных вызовов для поддержки работы через браузеры. При вызове старых методов теперь либо происходит ошибка, либо предупреждение. Подробнее об этом Вы можете прочитать вот здесь: http://its.1c.ru/docs/v8nonmodal/
То есть теперь надо переписывать старые обработки с использованием новых методов. Но если переписать без затей, то клиент не сможет запустить ее на старой платформе/конфигурации.
Я столкнулся с решением этой проблемы в тексте обработки консоли управляемых запросов. Начав переделывать по этой технологии свои обработки, я столкнулся с недопустимым временем переделки. Для упрощения переделки я предлагаю свою библиотеку подмены модальных/синхронных вызовов, и пример ее использования.
Библиотека замены модальных и синхронных вызовов 1.02
#Область LibreUniModal_1_02 //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ Библиотеки универсальных вызовов с автоматической поддержкой модальности // Предназначены для простоты написания кода работающего в любой версии 8.2 - 8.3 с поддержкой модальности или без оной. // Молочников Олег 2015г. Версия библиотеки 1.02 // Если Вы будете дорабатывать библиотеку, пожалуйста поделитесь исправлениями oleg.molochnikov@mail.ru // // Для работы библиотеки необходимо добавить две переменные объекта // МодальностьРазрешена Булево // ВерсияПриложения Строка // // Следующий код нужно включить в процедуру "При создании на сервере" // // СисИнфо = Новый СистемнаяИнформация; // Объект.ВерсияПриложения = СисИнфо.ВерсияПриложения; // // Если Лев(Объект.ВерсияПриложения, 3) = "8.2" Тогда // Объект.МодальностьРазрешена = Истина; // Иначе // Выполнить("Объект.МодальностьРазрешена = Метаданные.РежимИспользованияМодальности = Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.Использовать;"); // КонецЕсли; // &НаКлиенте Процедура УниверсальныйПредупреждение(ТекстПредупреждения,ТаймаутПредупреждения=0,ЗаголовокПредупреждения="",КодПослеобработки="",ДополнительныеПараметры="") Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда ДополнительныеПараметры=Новый Структура; КонецЕсли; ДополнительныеПараметры.Вставить("КодПослеобработки",КодПослеобработки); ДополнительныеПараметры.Вставить("ТекстПредупреждения",ТекстПредупреждения); Если Объект.МодальностьРазрешена Тогда КодВыполнения = " Предупреждение(ТекстПредупреждения,ТаймаутПредупреждения,ЗаголовокПредупреждения); | УниверсальныйПредупреждениеЗавершение(ДополнительныеПараметры);"; Иначе КодВыполнения = " | ПоказатьПредупреждение(Новый ОписаниеОповещения(""УниверсальныйПредупреждениеЗавершение"", ЭтаФорма,ДополнительныеПараметры), ТекстПредупреждения,ТаймаутПредупреждения,ЗаголовокПредупреждения);"; КонецЕсли; Выполнить(КодВыполнения); КонецПроцедуры &НаКлиенте Процедура УниверсальныйПредупреждениеЗавершение(ДополнительныеПараметры) Экспорт Если ДополнительныеПараметры.Свойство("КодПослеобработки") И ДополнительныеПараметры.КодПослеобработки<>"" Тогда Выполнить(ДополнительныеПараметры.КодПослеобработки); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УниверсальныйОткрытьЗначение(ОбъектОткрытия,КодПослеобработки="",ДополнительныеПараметры="") Если ДополнительныеПараметры="" Тогда ДополнительныеПараметры=Новый Структура; ДополнительныеПараметры.Вставить("КодПослеобработки",КодПослеобработки); ДополнительныеПараметры.Вставить("ОбъектОткрытия",ОбъектОткрытия); КонецЕсли; Если Объект.МодальностьРазрешена Тогда КодВыполнения = " ОткрытьЗначение(ОбъектОткрытия); | УниверсальныйОткрытьЗначениеЗавершение(ДополнительныеПараметры);"; Иначе КодВыполнения = " | ПоказатьЗначение(Новый ОписаниеОповещения(""УниверсальныйОткрытьЗначениеЗавершение"", ЭтаФорма,ДополнительныеПараметры), ОбъектОткрытия);"; КонецЕсли; Выполнить(КодВыполнения); КонецПроцедуры &НаКлиенте Процедура УниверсальныйОткрытьЗначениеЗавершение(ДополнительныеПараметры) Экспорт Если ДополнительныеПараметры="" Тогда Возврат; КонецЕсли; Если ДополнительныеПараметры.Свойство("КодПослеобработки") И ДополнительныеПараметры.КодПослеобработки<>"" Тогда Выполнить(ДополнительныеПараметры.КодПослеобработки); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УниверсальныйЗапуститьПриложение(СтрокаКоманды,ТекущийКаталог="",КодПослеобработки="",ДополнительныеПараметры="") Если ДополнительныеПараметры="" Тогда ДополнительныеПараметры=Новый Структура; ДополнительныеПараметры.Вставить("КодПослеобработки",КодПослеобработки); ДополнительныеПараметры.Вставить("ТекущийКаталог",ТекущийКаталог); КонецЕсли; Если Объект.МодальностьРазрешена Тогда КодВыполнения = " ЗапуститьПриложение(СтрокаКоманды,ТекущийКаталог); | УниверсальныйЗапуститьПриложениеЗавершение(ДополнительныеПараметры);"; Иначе КодВыполнения = " | НачатьЗапускПриложения(Новый ОписаниеОповещения(""УниверсальныйЗапуститьПриложениеЗавершение"", ЭтаФорма), СтрокаКоманды,ТекущийКаталог);"; КонецЕсли; Выполнить(КодВыполнения); КонецПроцедуры &НаКлиенте Процедура УниверсальныйЗапуститьПриложениеЗавершение(ДополнительныеПараметры) Экспорт Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда ДополнительныеПараметры=Новый Структура; КонецЕсли; Если ДополнительныеПараметры.Свойство("КодПослеобработки") И ДополнительныеПараметры.КодПослеобработки<>"" Тогда Выполнить(ДополнительныеПараметры.КодПослеобработки); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура УниверсальныйВыборФайлов(Режим,МодульОбработкиФайла,ПолноеИмяФайла="",Фильтр="*",МножественныйВыбор=Ложь,Заголовок="Выберите файл",ДополнительныеПараметры="") Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда ДополнительныеПараметры=Новый Структура; КонецЕсли; ДополнительныеПараметры.Вставить("МодульОбработкиФайла",МодульОбработкиФайла); ДополнительныеПараметры.Вставить("ПолноеИмяФайла",ПолноеИмяФайла); ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = ПолноеИмяФайла; ДиалогОткрытияФайла.Фильтр = Фильтр; ДиалогОткрытияФайла.МножественныйВыбор = МножественныйВыбор; ДиалогОткрытияФайла.Заголовок = Заголовок; Если Объект.МодальностьРазрешена Тогда КодВыполнения = "Если ДиалогОткрытияФайла.Выбрать() Тогда | УниверсальныйВыборФайловЗавершение(ДиалогОткрытияФайла.ВыбранныеФайлы, ДополнительныеПараметры); |КонецЕсли;"; Иначе КодВыполнения = " |Оповещение = Новый ОписаниеОповещения(""УниверсальныйВыборФайловЗавершение"", ЭтаФорма,ДополнительныеПараметры); |ДиалогОткрытияФайла.Показать(Оповещение);"; КонецЕсли; Выполнить(КодВыполнения); КонецПроцедуры &НаКлиенте Процедура УниверсальныйВыборФайловЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт Если ВыбранныеФайлы=Неопределено ИЛИ ВыбранныеФайлы.Количество() = 0 Тогда Возврат; КонецЕсли; Для Каждого ВыбранныйФайл из ВыбранныеФайлы Цикл Выполнить(ДополнительныеПараметры.МодульОбработкиФайла); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура УниверсальныйВопрос(ТекстВопроса,МодульОбработки1,РежимДиалогаВопроса,Ответ1,Ответ2="", МодульОбработки2="",ДополнительныеПараметры=""); Если ТипЗнч(ДополнительныеПараметры) <> Тип("Структура") Тогда ДополнительныеПараметры=Новый Структура; КонецЕсли; ДополнительныеПараметры.Вставить("Ответ1",Ответ1); ДополнительныеПараметры.Вставить("Ответ2",Ответ2); ДополнительныеПараметры.Вставить("МодульОбработки1",МодульОбработки1); ДополнительныеПараметры.Вставить("МодульОбработки2",МодульОбработки2); Если Объект.МодальностьРазрешена Тогда КодВыполнения = " |Результат = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); |УниверсальныйВопросЗавершение(Результат, ДополнительныеПараметры);"; Иначе КодВыполнения = " |Оповещение = Новый ОписаниеОповещения(""УниверсальныйВопросЗавершение"", ЭтаФорма,ДополнительныеПараметры); |ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);"; КонецЕсли; Выполнить(КодВыполнения); КонецПроцедуры &НаКлиенте Процедура УниверсальныйВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат=ДополнительныеПараметры.Ответ1 Тогда Выполнить(ДополнительныеПараметры.МодульОбработки1); ИначеЕсли ДополнительныеПараметры.МодульОбработки2<>"" И Результат=ДополнительныеПараметры.Ответ2 Тогда Выполнить(ДополнительныеПараметры.МодульОбработки2); КонецЕсли; КонецПроцедуры #КонецОбласти
Для пользователей: Предлагаю вашему вниманию переделанный по этой технологии
Мастер рассылки e-mail 2.2 (ERP,УТ, БП) (Только управляемые формы)
За основу, взята //infostart.ru/public/155390/?rate=1
Добавлены: Динамический список для отбора e-mail и их владельцев. Можно осуществлять быстрый отбор по любым полям справочников партнеры, контактной информации партнеров. Например отобрать по ответственному менеджеру, а потом исключить галочками ненужных контактных лиц.
Если поле "кому" пустое, то используется динамический список.
Добавлена кнопка предварительного тестирования перед отправкой.