gifts2017

Автоматический запуск регламентных заданий в обычном приложении: хитрый ход

Опубликовал Роман С (Dach) в раздел Программирование - Практика программирования

С выходом продуктов компании 1С на управляемых формах в типовых конфигурациях появилась очень удобная возможность встраивать в информационную базу внешние обработки и настраивать для них расписание выполнения. Однако, для обычного приложения - таких возможностей нет. Возникла необходимость в типовой БП 2.0 по расписанию запускать некую внешнюю обработку. На поддержке находится несколько баз и выполнять доработку конфигураций очень не хотелось ввиду увеличения впоследствии времени на обновление. В статье приведен пример, как обойти описанное ограничение.

 Практически во всех типовых конфигурациях 1С встроен функционал обмена данными. В частности, есть уже существующее в конфигурации регламентное задание "ОбменДанными", а также справочник "Настройки выполнения обмена" и "Настройки обмена данными". Они то нам и понадобятся. Идея состоит в том, что обмен данными можно выполнять по произвольным правилам обмена. С помощью продукта "Конвертация данных 2.1" создаем произвольные правила обмена. В качестве конфигурации источника указываем ту ИБ, где необходимо выполнять произвольный код по расписанию. В качестве приемника - абсолютно любую информационную базу. Мы НЕ создаем ни одного правила конвертации и НЕ создаем ни одного правила выгрузки. Правила обмена пустые полностью. В обработчике для самих правил "Перед выгрузкой данных" (вызывается двойным кликом по правилам в списке конвертаций) встраиваем вот такой код:

НекаяВнешняяОбработка = Справочники.ВнешниеОбработки.НайтиПоНаименованию(" НекаяВнешняяОбработка ");

Если НекаяВнешняяОбработка  <> Справочники.ВнешниеОбработки.ПустаяСсылка() Тогда

Попытка
//
ИмяФайла = ПолучитьИмяВременногоФайла();
 ДвоичныеДанные = НекаяВнешняяОбработка .ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
//
 ИсполняемаяОбработка = ВнешниеОбработки.Создать(ИмяФайла); 
  ИсполняемаяОбработка.ВыполнитьПроцедуруПроизвольныхДействий();
//
УдалитьФайлы(ИмяФайла);

  ИсполняемаяОбработка = Неопределено;

Исключение

КонецПопытки

КонецЕсли;

Отказ = Истина;

Разумеется, внешнюю обработку предварительно необходимо загрузить в справочник внешних обработок. Создавая объект, мы обращаемся к его методу, после выполнения - уничтожаем объект и отказываемся от выгрузки. В результате наш произвольный код будет выполняться по расписанию обмена, которое можно настроить произвольным образом. Единственное, при выполнении такого "обмена" будет выдаваться сообщение вроде: "Запись изменений текущей информационной базы в файл обмена завершилась с ошибками! Обмен данными по настройке "Произвольный" завершен (10:58:43)." Лично меня не напрягает. Всем спасибо за внимание, не забываем ставить плюсы 

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

2. Роман С (Dach) 20.03.13 16:21
(1) Нууу... когда искал по сайту, поиск был по "регламент*"... И как быть? Указать ссылку на вашу статью?
3. Belomor (Belomor) 24.03.13 10:38
Ссылка на статью лишней не будет
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа