v8: Автоматический запуск внешней обработки Ключевые слова: автоматический запуск внешней обработки, автоматический запуск, запуск обработки ночью, пакетный запуск
В 8-ке не нужно заводить специального пользователя для автоматического запуска обработок можно просто добавить одну процедуру в ПриНачалеРаботыСистемы()
Если СокрЛП(ПараметрЗапуска)="" Тогда //параметра нет ничего не делаем
ИначеЕсли Лев(ПараметрЗапуска,3)="авт" тогда
Попытка
Дл=СтрДлина(ПараметрЗапуска);
Строка=Прав(ПараметрЗапуска,Дл-3);
Обработка = ВнешниеОбработки.Создать(Строка);
Форма = Обработка.ПолучитьФорму();
Форма.Открыть();
Исключение
Предупреждение("Обработка не найдена!",5); // для отладки добавим - это лучше чем копаться в логах
ЗавершитьРаботуСистемы();
КонецПопытки;
КонецЕсли;
После этого достаточно в шедулер или в батник добавить строку такого типа
Для серверной версии:
"C:\Program Files\1cv8\bin\1cv8.exe" enterprise /SИмяСервера\ИмяБазы /NПользователь /PПароль /C"АвтПутьКОбработке"
Для файловой версии:
"C:\Program Files\1cv8\bin\1cv8.exe" enterprise /F"ПутьКБазе" /NПользователь /PПароль /C"АвтПутьКОбработке"
После этого при открытии обработки прописать код и после завершения работы обработки завершить работу программы.
От Гения 1С:Продвинутые пацаны так не пишут.
Так блин придется менять конфу всякий раз, как нужно будет сделать новую обработку.
Продвинутые пацаны пишут так:
Если СокрЛП(ПараметрЗапуска)="" Тогда //параметра нет ничего не делаем
ИначеЕсли Лев(ПараметрЗапуска,3)="авт" тогда
Попытка
Дл=СтрДлина(ПараметрЗапуска);
Строка=Прав(ПараметрЗапуска,Дл-3);
Выполнить(Строка);
Исключение
Стр="Не удалось выполнить код:"+Символы.ПС+Строка;
Предупреждение(Стр,5); Сообщить(Стр); //Ночью кто кнопки тискать будет??? К тому же сообщение идет в лог по ключу /OUT
ЗавершитьРаботуСистемы();
КонецПопытки;
КонецЕсли;
Тогда вызываться этот код будет так:
/C"ВыполнитьНочныеЗадания();"
Кстати, если код слишком большой, можно выложить его во внешнюю обработку и в ключе передавать код, который будет открывать эту внешнюю обработку и запускать:
/C"АвтВнешняяОбработка = ВнешниеОбработки.Создать(ПолноеИмяФайла); ВнешняяОбработка.Запуститься();"
Комментарий: Набивать большой код а строку запуска неудобно, первая обработка предназначена только для запуска обработки, которую можно править в любой момент(в 8.0 это актуально), если необходимо запускать по ПараметрЗапуска код то можно разделить по префиксу "авт", например у меня выполняеться по префиксу "РБД" автообмен - можно еще добавить префикс "код".
Меня спрашивали, как передать в командной строке путь, который будет заключен в кавычки.
Поясняю на примере:
/C"АвтВнешняяОбработка = ВнешниеОбработки.Создать(""\\server\1s\night.epf""); ВнешняяОбработка.Запуститься();"
То есть кавычки повторяются дважды.
Не забудьте, что права на запуск параметра должны быть только под пользователем с администраторскими правами, т.е. анализировать и выполнять параметр запуска нужно только под правами админа.
Можно еще поставить в начале параметра запуска префикс RUN:, чтобы можно было передавать и другие параметры при запуске, а не только тупо выполнять все, что передается.
Также Книга знаний: v8: Ключи запуска 1С 80 из командной строки
От Borik: Пример на VBS.
Set v81 = CreateObject("V81.Application")
res = v81.Connect("Srvr = Server;Ref = MyBase;Usr=auto;Pwd=password")
set obr = V81.ExternalDataProcessors.Create("c:\111\SendFax.epf")
obr.Run() ' Запуск экспортной процедуры
|