Автоматический запуск регламентных заданий в обычном приложении: хитрый ход
С выходом продуктов компании 1С на управляемых формах в типовых конфигурациях появилась очень удобная возможность встраивать в информационную базу внешние обработки и настраивать для них расписание выполнения. Однако, для обычного приложения — таких возможностей нет. Возникла необходимость в типовой БП 2.0 по расписанию запускать некую внешнюю обработку. На поддержке находится несколько баз и выполнять доработку конфигураций очень не хотелось ввиду увеличения впоследствии времени на обновление. В статье приведен пример, как обойти описанное ограничение.
- Описание
- Подробнее
Описание
Практически во всех типовых конфигурациях 1С встроен функционал обмена данными. В частности, есть уже существующее в конфигурации регламентное задание «ОбменДанными», а также справочник «Настройки выполнения обмена» и «Настройки обмена данными». Они то нам и понадобятся. Идея состоит в том, что обмен данными можно выполнять по произвольным правилам обмена. С помощью продукта «Конвертация данных 2.1» создаем произвольные правила обмена. В качестве конфигурации источника указываем ту ИБ, где необходимо выполнять произвольный код по расписанию. В качестве приемника — абсолютно любую информационную базу. Мы НЕ создаем ни одного правила конвертации и НЕ создаем ни одного правила выгрузки. Правила обмена пустые полностью. В обработчике для самих правил «Перед выгрузкой данных» (вызывается двойным кликом по правилам в списке конвертаций) встраиваем вот такой код:
НекаяВнешняяОбработка = Справочники.ВнешниеОбработки.НайтиПоНаименованию(» НекаяВнешняяОбработка «);
Если НекаяВнешняяОбработка <> Справочники.ВнешниеОбработки.ПустаяСсылка() Тогда
Попытка
//
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = НекаяВнешняяОбработка .ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
//
ИсполняемаяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
ИсполняемаяОбработка.ВыполнитьПроцедуруПроизвольныхДействий();
//
УдалитьФайлы(ИмяФайла);
ИсполняемаяОбработка = Неопределено;
Исключение
КонецПопытки
КонецЕсли;
Отказ = Истина;
Разумеется, внешнюю обработку предварительно необходимо загрузить в справочник внешних обработок. Создавая объект, мы обращаемся к его методу, после выполнения — уничтожаем объект и отказываемся от выгрузки. В результате наш произвольный код будет выполняться по расписанию обмена, которое можно настроить произвольным образом. Единственное, при выполнении такого «обмена» будет выдаваться сообщение вроде: «Запись изменений текущей информационной базы в файл обмена завершилась с ошибками! Обмен данными по настройке «Произвольный» завершен (10:58:43).» Лично меня не напрягает. Всем спасибо за внимание, не забываем ставить плюсы

