Книга знаний

1С:Предприятие / v8 / Приемы программирования / Внешние обработки

v8: Автоматический запуск внешней обработки

Автор статьи: Advan | Редакторы: Гений 1С, borik
Последняя редакция №11 от 27.11.08 | История
URL: http://kb.mista.ru/article.php?id=340

Ключевые слова: автоматический запуск внешней обработки, автоматический запуск, запуск обработки ночью, пакетный запуск


В 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()  ' Запуск экспортной процедуры



Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2024 | Mista.ru

Яндекс.Метрика