а) на форме Справочник.ВнешниеОбработки.Форма.ФормаЭлемента добавляет/изменяет/удаляет РегламентноеЗадание и его Расписание (см. описание РегламентноеЗаданиеGUIDНажатие) б) в серверном модуле вызывает ВыполнитьОбработкуПоРегламентномуЗаданию (см. описание)
// Добавляет/изменяет/удаляет РегламентноеЗадание программно + его расписание
// Требуется в Справочники.ВнешниеОбработки:
// - добавить реквизит РегламентноеЗаданиеGUID типа УникальныйИдентификатор
// Требуется на форме Справочник.ВнешниеОбработки.Форма.ФормаЭлемента:
// - добавить Надпись РегламентноеЗаданиеGUID с галкой Гиперссылка и обработчик нажатия РегламентноеЗаданиеGUIDНажатие
// - ПриОткрытии() добавить вызов РегламентноеЗаданиеGUIDНажатие("ПриОткрытии")
// Обработка, как и в БСП 3, должна содержать метод ВыполнитьКоманду, но при этом не должна содержать метод СведенияОВнешнейОбработке, т.к. поддерживается лишь 1 тип - ВызовСерверногоМетода
Процедура РегламентноеЗаданиеGUIDНажатие(Элемент)
// Инициализирует заголовок чтобы не отображать ГУИД в некотрых случаях
ЭлементыФормы.РегламентноеЗаданиеGUID.Заголовок = "Расписание не указано";
// Создает РЗ на основании предопределенного/подбирает ранее созданное по ГУИД
РЗ = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗаданиеGUID);
Если РЗ = Неопределено Тогда
РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок);
КонецЕсли;
Если Элемент = "ПриОткрытии" Тогда
Если РЗ.Использование Тогда
ЭлементыФормы.РегламентноеЗаданиеGUID.Заголовок = РЗ.Расписание;
КонецЕсли;
Перейти ~БегущаяСтрока;
КонецЕсли;
// см. ИрОбщий.МетодРеализованЛкс. Надежно проверяет существование у объекта метода с заданным именем
ИмяФайла = ПолучитьИмяВременногоФайла();
Попытка
ДвоичныеДанные = ЭтотОбъект.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Объект = ?(ЭтотОбъект.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, ВнешниеОтчеты.Создать(ИмяФайла), ВнешниеОбработки.Создать(ИмяФайла));
Исключение
ВызватьИсключение КомментарийКФайлуИсточнику;
КонецПопытки;
УдалитьФайлы(ИмяФайла);
Попытка
Выполнить("Объект.ВыполнитьКоманду(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)");
Исключение
Инфо = ИнформацияОбОшибке();
Пока Инфо.Причина <> Неопределено Цикл
Инфо = Инфо.Причина;
КонецЦикла;
МетодРеализован = Найти(Инфо.Описание, "Слишком много фактических параметров") > 0
ИЛИ Найти(Инфо.Описание, "Too many actual parameters") > 0
ИЛИ Найти(Инфо.Описание, "Занадто багато фактичних параметрів") > 0; // Украинский
Если Не МетодРеализован Тогда
ВызватьИсключение Инфо.Описание+" в "+ИмяФайлаВнешнейОбработки;
КонецЕсли;
КонецПопытки;
// Заполняет регламентное задание
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(РЗ.Расписание);
РасписаниеУстановлено = ДиалогРасписания.ОткрытьМодально();
Если РасписаниеУстановлено И (Не Ссылка.Пустая() ИЛИ Вопрос("Для установки регламентного задания обработка должна быть записана", РежимДиалогаВопрос.ОКОтмена, "15", КодВозвратаДиалога.ОК, "Записать?", КодВозвратаДиалога.Отмена) = КодВозвратаДиалога.ОК) Тогда
РЗ.Параметры.Очистить();
РЗ.Параметры.Добавить(Ссылка);
РЗ.Расписание = ДиалогРасписания.Расписание;
РЗ.Наименование = "Внешняя обработка: " + Наименование + " / Команда: " + "ВыполнитьКоманду";
РЗ.Использование= Истина;
РЗ.ИмяПользователя = ИмяПользователя();
РЗ.Записать();
РегламентноеЗаданиеGUID = РЗ.УникальныйИдентификатор;
Записать();
ЭлементыФормы.РегламентноеЗаданиеGUID.Заголовок = РЗ.Расписание;
ЭлементыФормы.РегламентноеЗаданиеGUID.БегущаяСтрока = РежимБегущейСтроки.Нормально;
Иначе
Если РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РЗ.УникальныйИДентификатор) <> Неопределено Тогда
РЗ.Удалить()
КонецЕсли;
ЭлементыФормы.РегламентноеЗаданиеGUID.Заголовок = "Расписание не указано";
КонецЕсли;
~БегущаяСтрока:
ЭлементыФормы.РегламентноеЗаданиеGUID.БегущаяСтрока = РежимБегущейСтроки[?(СтрДлина(ЭлементыФормы.РегламентноеЗаданиеGUID.Заголовок)/ЭлементыФормы.РегламентноеЗаданиеGUID.Ширина>0.2, "Быстро", "НеИспользовать")];
КонецПроцедуры
// см. БСП 3+: ДополнительныеОтчетыИОбработки.ВыполнитьОбработкуПоРегламентномуЗаданию
// Справочники.ВнешниеОбработки.ПолучитьОбъект().ВыполнитьКоманду() по Справочники.ВнешниеОбработки.Расписание.Получить()
Процедура ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды = "ВыполнитьКоманду") Экспорт
// Запись журнала регистрации
ИмяСобытия = "ВыполнитьОбработкуПоРегламентномуЗаданию";
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,,,ВнешняяОбработка, СтрШаблон("Команда %1: Запуск.", ИдентификаторКоманды));
ОбработкаСтруктура = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВнешняяОбработка, "ВидОбработки,ХранилищеВнешнейОбработки");
Менеджер = ?(ОбработкаСтруктура.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, ВнешниеОтчеты, ВнешниеОбработки);
// Выполнение команды
Попытка
ИмяОбработки = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ОбработкаСтруктура.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяОбработки);
ОбработкаОбъект = Менеджер.Создать(ИмяОбработки, Ложь);
ОбработкаОбъект.ВыполнитьКоманду(ИдентификаторКоманды);
УдалитьФайлы(ИмяОбработки);
Исключение
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,,,ВнешняяОбработка, СтрШаблон("Команда %1: Ошибка выполнения:%2", ИдентификаторКоманды, Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;
// Запись журнала регистрации
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,,,ВнешняяОбработка, СтрШаблон("Команда %1: Завершение.", ИдентификаторКоманды));
КонецПроцедуры
{31} Переменной Объект присвоено значение, но оно нигде не используется
{62} Переменной РегламентноеЗаданиеGUID присвоено значение, но оно нигде не используется
Орфографическая ошибка в Гиперссылка: Гиперссылка
Орфографическая ошибка в некотрых: некотрых
Орфографическая ошибка в Занадто: Занадто
Орфографическая ошибка в багато: багато
Орфографическая ошибка в фактичних: фактичних
Орфографическая ошибка в УникальныйИДентификатор: Дентификатор
Создание регламентного задания из внешней обработки
Добавить элемент в обычную форму
Программная обработка расшифровки отчета на СКД на обычных формах
ПриСозданииВнешнейОбработки (БСП)
ПолучитьРегламентноеЗаданиеВнешнийВызов (БСП)
УдалитьРегламентноеЗаданиеВнешнийВызов (БСП)
Индикатор отчета для Обычных форм
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)