Мастер рассылки e-mail 2.2 для управляемых форм

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации.
Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

С появлением платформы 8.3  появилась возможность настройки работы в конфигурации без модальных/ синхронных вызовов для поддержки работы через браузеры. При вызове старых методов теперь либо происходит ошибка, либо предупреждение. Подробнее об этом Вы можете  прочитать вот здесь: http://its.1c.ru/docs/v8nonmodal/

То есть теперь надо переписывать старые обработки с использованием новых методов. Но если переписать без затей, то клиент не сможет запустить ее на старой платформе/конфигурации.

Я столкнулся с решением этой проблемы в тексте обработки консоли управляемых запросов. Начав переделывать по этой технологии свои обработки, я столкнулся с недопустимым временем переделки. Для упрощения переделки я предлагаю свою библиотеку подмены  модальных/синхронных вызовов, и пример ее использования.

Библиотека замены модальных и синхронных вызовов 1.02

#Область LibreUniModal_1_02


////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ Библиотеки универсальных вызовов с автоматической поддержкой модальности
// Предназначены для простоты написания кода работающего в любой версии 8.2 - 8.3 с поддержкой модальности или без оной.
// Молочников Олег 2024г. Версия библиотеки 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 и их владельцев. Можно осуществлять быстрый отбор по любым полям справочников партнеры, контактной информации партнеров. Например отобрать по ответственному менеджеру, а  потом исключить галочками ненужных контактных лиц. 

Если поле "кому" пустое, то используется динамический список.

Добавлена кнопка предварительного тестирования перед отправкой.

3 Comments

  1. Franco

    Господа, а что значит «Выполнить(»?! Пользователи веб-клиента — идите лесом?!

    Reply
  2. milkers

    (1) Franco, Пока да. Иначе обработка несовместима с 8.2. Надо думать, что можно сделать.

    Reply
  3. aspirator23

    Аналогично решал. Кроме стандартных вызовов, есть проблема с 1с-языком. В 8.3 появились функции и процедуры, которых нет в 8.2.

    Решение похоже: либо использовать старые, либо выносить исполнение новых в зависимости от платформы в разные общие модули, формы обработок, отчетов.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *