Каталог решений - Шаблон дополнительной обработки с сохранением параметров

Шаблон дополнительной обработки с сохранением параметров

Шаблон дополнительной обработки с сохранением параметров

В наличии

Шаблон дополнительной обработки, используется для начала разработки внешних обработок.

Описание

При разработке новых внешних обработок постоянно приходится настраивать одни и те же механизмы, поэтому сделал такой шаблон дополнительной обработки. Что он умеет:

1) Шаблон внешней обработки с правильным заполнением.

2) Хранение настроек обработки в реквизите ДополнительнаяОбработка.ХранилищеНастроек

3) Хранение настроек обработки в ХранилищеОбщихНастроек

4) Запуск обработки средствами БСП.

5) Запуск обработки в фоне средствами БСП

6) Хранение паролей

7) Открытие журнала регистрации для просмотра событий обработки.

 

1) Шаблон внешней обработки с правильным заполнением.

Функция СведенияОВнешнейОбработке() Экспорт
	
	ВерсияВО = "01";
	КраткоВО = "Пример дополнительной обработки";
	ИнформацияВО     = "Пример дополнительной обработки с параметарми";
	ИдентификаторВО = "ПримерДополнительнойОбработки";
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Информация = НСтр("ru = '" + ИнформацияВО + "'");
	ПараметрыРегистрации.Версия = ВерсияВО;
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	// Тут указывается версия БСП. В принципе, это параметр необязательный, но он проверяется в процедуре
	// ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(ИдентификаторКоманды, ПараметрыКоманды, ЭтотОбъект);
	// В некоторых конфигурцаиях эта функция находится в другом общем модуле
	ПараметрыРегистрации.ВерсияБСП = ОбщегоНазначенияБПО.ВерсияБСП();
	
	// Добавляем открытие формы
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = КраткоВО + " (Форма обработки)";
	НоваяКоманда.Идентификатор = ИдентификаторВО;
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	НоваяКоманда.ПоказыватьОповещение = Ложь;
	
	// Добавляем регламентную процедуру
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = КраткоВО + " (Вызов сервера)";
	НоваяКоманда.Идентификатор = ИдентификаторВО;
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Ложь;
	
	Возврат ПараметрыРегистрации;	
	
КонецФункции

 

2) Хранение настроек обработки в реквизите ДополнительнаяОбработка.ХранилищеНастроек
 

&НаСервереБезКонтекста
Процедура СохранитьНастройкиВДополнительнойОбработке(СсылкаНаСправочник, СохраняемоеЗначение)
	
	НачатьТранзакцию();
	
	Попытка
		Блокировка = Новый БлокировкаДанных;
		ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки");
		ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаСправочник);
		Блокировка.Заблокировать();
		
		ДополнительнаяОбработкаОбъект = СсылкаНаСправочник.ПолучитьОбъект();
		// Параметры сохраняем в реквизит "ХранилищеНастроек" справочника "ДополнительныеОтчетыИОбработки"
		ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемоеЗначение);
		ДополнительнаяОбработкаОбъект.Записать();
		
		ЗафиксироватьТранзакцию();
		
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
		
	КонецПопытки;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьНастройкиИзДополнительнойОбработки(СсылкаНаСправочник)
	
	Если ЗначениеЗаполнено(СсылкаНаСправочник) Тогда
		ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаСправочник, "ХранилищеНастроек");
		Возврат ХранилищеНастроек.Получить();
		
	КонецЕсли;
	
КонецФункции

 

3) Хранение настроек обработки в ХранилищеОбщихНастроек
 

&НаСервереБезКонтекста
Процедура СохранитьНастройкиХранилищеОбщихНастроекНаСервере(ИмяФормы, ПараметрыОбработки)
	
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "ПараметрыОбработки", ПараметрыОбработки);

КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьНастройкиИзХранилищаОбщихНастроекНаСервере(ИмяФормы)
	
	Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяФормы, "ПараметрыОбработки");
	
КонецФункции

4) Запуск обработки средствами БСП.
 

&НаКлиенте
Процедура ВыполнитьНепосредственно(Команда)
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(Объект.СсылкаНаСправочник);
	ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Выполняется команда...'");
	
	// Выполнение обработки типовым методом БСП. Параметры мы передаём напрямую из формы
	Операция = ВыполнитьКомандуНапрямую(ПараметрыКоманды, "ПримерДополнительнойОбработки");

КонецПроцедуры

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

5) Запуск обработки в фоне средствами БСП
 

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

&НаКлиенте
Процедура ПослеЗавершенияДлительнойОперации(Операция, СопровождающийТекст) Экспорт
	
	Если Операция.Статус = "Выполнено" Тогда
		ПоказатьОповещениеПользователя(НСтр("ru = 'Успешное завершение'"), , СопровождающийТекст, БиблиотекаКартинок.Успешно32);
	Иначе
		ПоказатьПредупреждение(, Операция.КраткоеПредставлениеОшибки);
	КонецЕсли;
	
КонецПроцедуры

6) Хранение паролей
 

&НаСервереБезКонтекста
Процедура СохранитьНастройкиВБезопасноеХранилище(СсылкаНаСправочник, СохраняемоеЗначение)
	
	ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СсылкаНаСправочник, СохраняемоеЗначение, "ПараметрПароль");
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьНастройкиИзБезопасноеХранилище(СсылкаНаСправочник)
	
	Возврат ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СсылкаНаСправочник, "ПараметрПароль");
	
КонецФункции

7) Открытие журнала регистрации для просмотра событий обработки.
 

&НаКлиенте
Процедура ОткрытьЖурналРегистрации(Команда)

	//  Отбор - Структура:
	//      Пользователь              - Строка
	//                                - СписокЗначений - имя или список пользователей информационной базы.
	//      СобытиеЖурналаРегистрации - Строка, Массив - идентификатор события.
	//      ДатаНачала                - Дата           - начало интервала отображаемых событий.
	//      ДатаОкончания             - Дата           - конец интервала отображаемых событий.
	//      Данные                    - Произвольный   - данные любого типа.
	//      Сеанс                     - СписокЗначений - список выбираемых сеансов.
	//      Уровень                   - Строка, Массив - представление уровня важности события журнала регистрации.
	//      ИмяПриложения             - Массив         - массив идентификаторов приложения.
	
	Отбор = Новый Структура;
	//Отбор.Вставить("Пользователь", "Администратор");
	//Отбор.Вставить("Уровень", "Ошибка");
	Отбор.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));
	Отбор.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));

	МассивСобытий = Новый Массив;
	МассивСобытий.Добавить("ПримерДополнительнойОбработки.ВыполнитьКоманду");
	МассивСобытий.Добавить("ПримерДополнительнойОбработки.СтартВыполнения");
	Отбор.Вставить("СобытиеЖурналаРегистрации", МассивСобытий);
	
	ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор, ЭтаФорма);

КонецПроцедуры