При разработке новых внешних обработок постоянно приходится настраивать одни и те же механизмы, поэтому сделал такой шаблон дополнительной обработки. Что он умеет:
1) Шаблон внешней обработки с правильным заполнением.
2) Хранение настроек обработки в реквизите ДополнительнаяОбработка.ХранилищеНастроек
3) Хранение настроек обработки в ХранилищеОбщихНастроек
4) Запуск обработки средствами БСП.
5) Запуск обработки в фоне средствами БСП
6) Хранение паролей
7) Открытие журнала регистрации для просмотра событий обработки.
1) Шаблон внешней обработки с правильным заполнением.
Функция СведенияОВнешнейОбработке() Экспорт
ВерсияВО = "01";
КраткоВО = "Пример дополнительной обработки";
ИнформацияВО = "Пример дополнительной обработки с параметарми";
ИдентификаторВО = "ПримерДополнительнойОбработки";
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Информация = НСтр("ru = '" + ИнформацияВО + "'");
ПараметрыРегистрации.Версия = ВерсияВО;
ПараметрыРегистрации.БезопасныйРежим = Ложь;
// Тут указывается версия БСП. В принципе, это параметр необязательный, но он проверяется в процедуре
// ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(ИдентификаторКоманды, ПараметрыКоманды, ЭтотОбъект);
// В некоторых конфигурцаиях эта функция находится в другом общем модуле
ПараметрыРегистрации.ВерсияБСП = ОбщегоНазначенияБПО.ВерсияБСП();
// Добавляем открытие формы
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = КраткоВО + " (Форма обработки)";
НоваяКоманда.Идентификатор = ИдентификаторВО;
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
// Добавляем регламентную процедуру
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = КраткоВО + " (Вызов сервера)";
НоваяКоманда.Идентификатор = ИдентификаторВО;
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
2) Хранение настроек обработки в реквизите ДополнительнаяОбработка.ХранилищеНастроек
&НаСервереБезКонтекста
Процедура СохранитьНастройкиВДополнительнойОбработке(СсылкаНаСправочник, СохраняемоеЗначение)
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ДополнительныеОтчетыИОбработки");
ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаСправочник);
Блокировка.Заблокировать();
ДополнительнаяОбработкаОбъект = СсылкаНаСправочник.ПолучитьОбъект();
// Параметры сохраняем в реквизит "ХранилищеНастроек" справочника "ДополнительныеОтчетыИОбработки"
ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемоеЗначение);
ДополнительнаяОбработкаОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьНастройкиИзДополнительнойОбработки(СсылкаНаСправочник)
Если ЗначениеЗаполнено(СсылкаНаСправочник) Тогда
ХранилищеНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаНаСправочник, "ХранилищеНастроек");
Возврат ХранилищеНастроек.Получить();
КонецЕсли;
КонецФункции
3) Хранение настроек обработки в ХранилищеОбщихНастроек
&НаСервереБезКонтекста
Процедура СохранитьНастройкиХранилищеОбщихНастроекНаСервере(ИмяФормы, ПараметрыОбработки)
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ИмяФормы, "ПараметрыОбработки", ПараметрыОбработки);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьНастройкиИзХранилищаОбщихНастроекНаСервере(ИмяФормы)
Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ИмяФормы, "ПараметрыОбработки");
КонецФункции
4) Запуск обработки средствами БСП.
&НаКлиенте
Процедура ВыполнитьНепосредственно(Команда)
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(Объект.СсылкаНаСправочник);
ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Выполняется команда...'");
// Выполнение обработки типовым методом БСП. Параметры мы передаём напрямую из формы
Операция = ВыполнитьКомандуНапрямую(ПараметрыКоманды, "ПримерДополнительнойОбработки");
КонецПроцедуры
&НаСервере
Функция ВыполнитьКомандуНапрямую(ПараметрыКоманды, ИдентификаторКоманды)
Операция = Новый Структура("Статус, КраткоеПредставлениеОшибки, ПодробноеПредставлениеОшибки");
Попытка
ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(ИдентификаторКоманды, ПараметрыКоманды, ЭтотОбъект);
Операция.Статус = "Выполнено";
Исключение
Операция.КраткоеПредставлениеОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
Операция.ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Возврат Операция;
КонецФункции
5) Запуск обработки в фоне средствами БСП
&НаКлиенте
Процедура ВыполнитьВФоне(Команда)
Если Не ПроверитьЗаполнение() Тогда
Возврат;
КонецЕсли;
ПараметрыКоманды = ДополнительныеОтчетыИОбработкиКлиент.ПараметрыВыполненияКомандыВФоне(Объект.СсылкаНаСправочник);
ПараметрыКоманды.СопровождающийТекст = НСтр("ru = 'Выполняется команда...'");
Обработчик = Новый ОписаниеОповещения("ПослеЗавершенияДлительнойОперации", ЭтотОбъект);
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне("ПримерДополнительнойОбработки", ПараметрыКоманды, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗавершенияДлительнойОперации(Операция, СопровождающийТекст) Экспорт
Если Операция.Статус = "Выполнено" Тогда
ПоказатьОповещениеПользователя(НСтр("ru = 'Успешное завершение'"), , СопровождающийТекст, БиблиотекаКартинок.Успешно32);
Иначе
ПоказатьПредупреждение(, Операция.КраткоеПредставлениеОшибки);
КонецЕсли;
КонецПроцедуры
6) Хранение паролей
&НаСервереБезКонтекста
Процедура СохранитьНастройкиВБезопасноеХранилище(СсылкаНаСправочник, СохраняемоеЗначение)
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СсылкаНаСправочник, СохраняемоеЗначение, "ПараметрПароль");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьНастройкиИзБезопасноеХранилище(СсылкаНаСправочник)
Возврат ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СсылкаНаСправочник, "ПараметрПароль");
КонецФункции
7) Открытие журнала регистрации для просмотра событий обработки.
&НаКлиенте
Процедура ОткрытьЖурналРегистрации(Команда)
// Отбор - Структура:
// Пользователь - Строка
// - СписокЗначений - имя или список пользователей информационной базы.
// СобытиеЖурналаРегистрации - Строка, Массив - идентификатор события.
// ДатаНачала - Дата - начало интервала отображаемых событий.
// ДатаОкончания - Дата - конец интервала отображаемых событий.
// Данные - Произвольный - данные любого типа.
// Сеанс - СписокЗначений - список выбираемых сеансов.
// Уровень - Строка, Массив - представление уровня важности события журнала регистрации.
// ИмяПриложения - Массив - массив идентификаторов приложения.
Отбор = Новый Структура;
//Отбор.Вставить("Пользователь", "Администратор");
//Отбор.Вставить("Уровень", "Ошибка");
Отбор.Вставить("ДатаНачала", НачалоДня(ТекущаяДата()));
Отбор.Вставить("ДатаОкончания", КонецДня(ТекущаяДата()));
МассивСобытий = Новый Массив;
МассивСобытий.Добавить("ПримерДополнительнойОбработки.ВыполнитьКоманду");
МассивСобытий.Добавить("ПримерДополнительнойОбработки.СтартВыполнения");
Отбор.Вставить("СобытиеЖурналаРегистрации", МассивСобытий);
ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(Отбор, ЭтаФорма);
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.183.24
- Управление торговлей, редакция 11, релизы 11.5.24.52
Вступайте в нашу телеграмм-группу Инфостарт