Главная | Статьи | Разработки | Обратная связь | |||||
1С 8.0: Автозапуск обработки с установкой реквизитов.При работе с базой данных, довольно часто возникает необходимость в автоматическом запуске определенных обработок, например периодической выгрузки/загрузки каких-либо данных. Что бы минимизировать изменения конфигурации при появлении задач автозапуска обработок, имеет смысл добавить в конфигурацию универсальный механизм установки реквизитов и автоматического выполнения произвольной обработки. Идея заключается в следующем: при запуске 1С:Предприятия, с помощью ключа командной строки /C, передаем в качестве параметра запуска путь к файлу XML, содержащему "настройки" автозапуска обработки. Структура файла:
Внутри обоих обработчиков доступны переменные: "ОбъектОбработки" и "ФормаОбработки", предназначенные для доступа к реквизитам, экспортным процедурам/функциям, соответственно модуля и формы обработки. Утилиту, формирующую файл такого формата для выбранной обработки, можно скачать здесь. Пример полученного файла XML можно посмотреть здесь. Далее, в процедуре ПриНачалеРаботыСистемы() реализуем чтение параметра запуска и разбор переданного файла настроек. |
||
Процедура ПриНачалеРаботыСистемы() Если РольДоступна("АвтозапускОбработки") Тогда Если ПараметрЗапуска<>"" Тогда ФайлНастроек=Новый Файл(ПараметрЗапуска); Если ФайлНастроек.Существует() Тогда РазборФайлаНастроек(ФайлНастроек.ПолноеИмя); Иначе Сообщить("Файл не найден. "+ФайлНастроек.ПолноеИмя,СтатусСообщения.Важное); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры |
||
Процедура разбора файла настроек выглядит следующим образом: | ||
Процедура РазборФайлаНастроек(ИмяФайла) Попытка ХМЛ=Новый ЧтениеXML; ХМЛ.ОткрытьФайл(ИмяФайла); ХМЛ.Прочитать(); Если ХМЛ.ТипУзла<>ТипУзлаXML.НачалоЭлемента ИЛИ ХМЛ.Имя<>"АвтозапускОбработки" Тогда Сообщить("Неверный формат файла. Ожидается элемент <АвтозапускОбработки>.",СтатусСообщения.Информация); Возврат; КонецЕсли; ХМЛ.ПрочитатьАтрибут(); Если ХМЛ.Имя<>"ВидОбработки" Тогда Сообщить("Неверный формат файла. Ожидается атрибут <ВидОбработки>.",СтатусСообщения.Информация); Возврат; КонецЕсли; ВидОбработки=ХМЛ.Значение; ХМЛ.Прочитать(); Если ХМЛ.ТипУзла<>ТипУзлаXML.НачалоЭлемента ИЛИ ХМЛ.Имя<>"Путь" Тогда Сообщить("Неверный формат файла. Ожидается элемент <Путь>.",СтатусСообщения.Информация); Возврат; КонецЕсли; ХМЛ.Прочитать(); ОбъектОбработки=?(ВидОбработки="Внешняя",ВнешниеОбработки.Создать(ХМЛ.Значение),Обработки[ХМЛ.Значение].Создать()); ФормаОбработки=ОбъектОбработки.ПолучитьФорму(); ХМЛ.Прочитать(); ХМЛ.Прочитать(); Если ХМЛ.Имя<>"РеквизитыОбработки" Тогда Сообщить("Неверный формат файла. Ожидается элемент <РеквизитыОбработки>.",СтатусСообщения.Информация); Возврат; КонецЕсли; Имя=""; Пока ХМЛ.Прочитать() Цикл Если ХМЛ.Имя="РеквизитыОбработки" И ХМЛ.ТипУзла=ТипУзлаXML.КонецЭлемента Тогда Прервать; ИначеЕсли ХМЛ.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда Имя=ХМЛ.Имя; ИначеЕсли ХМЛ.ТипУзла=ТипУзлаXML.Текст Тогда ОбъектОбработки[Имя]=ЗначениеИзСтрокиВнутр(ХМЛ.Значение); КонецЕсли; КонецЦикла; ХМЛ.Прочитать(); ОбработчикПередОткрытием=""; ОбработчикПослеОткрытия=""; Если ХМЛ.ТипУзла<>ТипУзлаXML.НачалоЭлемента ИЛИ ХМЛ.Имя<>"ОбработчикПередОткрытиемФормы" Тогда Сообщить("Неверный формат файла. Ожидается элемент <ОбработчикПередОткрытиемФормы>.",СтатусСообщения.Информация); Возврат; КонецЕсли; ХМЛ.Прочитать(); Если ХМЛ.ТипУзла<>ТипУзлаXML.КонецЭлемента Тогда ОбработчикПередОткрытием=ХМЛ.Значение; ХМЛ.Прочитать(); КонецЕсли; ХМЛ.Прочитать(); Если ХМЛ.ТипУзла<>ТипУзлаXML.НачалоЭлемента ИЛИ ХМЛ.Имя<>"ОбработчикПослеОткрытияФормы" Тогда Сообщить("Неверный формат файла. Ожидается элемент <ОбработчикПослеОткрытияФормы>.",СтатусСообщения.Информация); Возврат; КонецЕсли; Если ХМЛ.ТипУзла<>ТипУзлаXML.КонецЭлемента Тогда ХМЛ.Прочитать(); ОбработчикПослеОткрытия=ХМЛ.Значение; КонецЕсли; ХМЛ.Закрыть(); Выполнить(ОбработчикПередОткрытием); ФормаОбработки.Открыть(); Выполнить(ОбработчикПослеОткрытия); Исключение Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное); КонецПопытки; КонецПроцедуры |
||
Таким образом, появляется возможность автозапуска любых обработок с установкой различных параметров (в том числе ссылочных значений), без изменений в конфигурации. Но, надо не забывать, что с эмулировать нажатие кнопки в форме обработки извне, возможно только в том случае если процедура нажатия имеет ключевое слово Экспорт. Хотя методически более грамотно выносить функционал, планируемый к автозапуску в экспортные процедуры модуля объекта. |
||
Назад | ||