bdd2

Библиотека замены модальных и синхронных вызовов, Мастер рассылки e-mail 2.2 для управляемых форм

Опубликовал Олег Молочников (milkers) в раздел Программирование - Практика программирования

Для авторов обработок: Библиотека процедур для замены модальных и синхронных вызовов. Получившийся код работает на любых версиях платформы, автоматически выбирая модальный и синхронный режим работы в зависимости от настроек конфигурации и платформы. Для пользователей: переделанный из старый разработки под 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 с поддержкой модальности или без оной.
// Молочников Олег 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,УТ, БП) (Только управляемые формы)

За основу, взята http://infostart.ru/public/155390/?rate=1

Добавлены: Динамический список для отбора e-mail и их владельцев. Можно осуществлять быстрый отбор по любым полям справочников партнеры, контактной информации партнеров. Например отобрать по ответственному менеджеру, а  потом исключить галочками ненужных контактных лиц. 

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

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

Скачать файлы

Наименование Файл Версия Размер
Отправка Электронных Писем УФ 2.2
.epf 35,75Kb
21.12.16
0
.epf 2.2 35,75Kb Скачать
Отправка Электронных Писем УФ 2.1
.epf 32,83Kb
21.12.16
8
.epf 2_1 32,83Kb 8 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Франко Деллиани (Franco) 58 30.12.15 14:28 Сейчас в теме
Господа, а что значит «Выполнить(»?! Пользователи веб-клиента - идите лесом?!
2. Олег Молочников (milkers) 1566 30.12.15 14:36 Сейчас в теме
(1) Franco, Пока да. Иначе обработка несовместима с 8.2. Надо думать, что можно сделать.
3. aspirator 23 (aspirator23) 288 02.01.16 15:48 Сейчас в теме
Аналогично решал. Кроме стандартных вызовов, есть проблема с 1с-языком. В 8.3 появились функции и процедуры, которых нет в 8.2.
Решение похоже: либо использовать старые, либо выносить исполнение новых в зависимости от платформы в разные общие модули, формы обработок, отчетов.