Способ 1: NAS - запуск в качестве сервиса из командной строки в формате:
"\\сетевой_путь_к_папке_NAS\nassql.exe" appservername=NAVISIONSERVER-SQL, servername=NAVISIONSERVER, database=LiveDB, company="Компания """Тест""", startupparameter=jobschID_SCHED, installasservice=Yes
эту строку нужно запустить 1 раз.
А эту каждый раз, когда вам нужно запустить Диспетчер задач:
"\\сетевой_путь_к_папке_NAS\nassql.exe" appservername=NAVISIONSERVER-SQL, servername=NAVISIONSERVER, database=LiveDB, company="Компания """Тест""", startupparameter=jobschID_SCHED
где ID_SCHED - код задания в таблице 5981
При этом в СU1 ApplicationManagement нужно в триггере NASHandler прописать такой текст (отмечен //EDV01 begin/end)
ParamStr := UPPERCASE(NASID);
REPEAT
SepPosition := STRPOS(ParamStr,',');
IF SepPosition > 0 THEN
Parameter := COPYSTR(ParamStr,1,SepPosition - 1)
ELSE
Parameter := COPYSTR(ParamStr,1);
IF (COPYSTR(Parameter,1,2) = 'CG') THEN BEGIN
BizTalkNASStartup.RUN;
IF STRPOS(Parameter,' PORT=') > 0 THEN
IF EVALUATE(PortNumber,COPYSTR(Parameter,STRPOS(Parameter,'=') + 1)) THEN BEGIN
BizTalkNASStartup.StartTcpListen(PortNumber);
CGNASStartedinLoop := TRUE;
END;
IF (STRLEN(Parameter) = 2) THEN BEGIN
BizTalkNASStartup.StartTcpListen(0);
CGNASStartedinLoop := TRUE;
END;
END;
IF (COPYSTR(Parameter,1,4) = 'ADCS') THEN BEGIN
IF STRPOS(Parameter,' ADCSID=') > 0 THEN
IF EVALUATE(ADCSID,COPYSTR(Parameter,STRPOS(Parameter,'=') + 1)) THEN
ADCSNASStartup.SetNASID(ADCSID)
ELSE
ADCSNASStartup.SetNASID('NAS1');
ADCSNASStartup.RUN;
CGNASStartedinLoop := TRUE;
END;
//EDV01 begin
IF COPYSTR(Parameter,1,6) = 'JOBSCH' THEN
IF JobSchedulerSetup.GET(DELCHR(COPYSTR(Parameter,7),'<>',' ')) THEN BEGIN
CASE JobSchedulerSetup."Object Type" OF
JobSchedulerSetup."Object Type"::Report:
REPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE,FALSE);
JobSchedulerSetup."Object Type":

ataport:
DATAPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE);
JobSchedulerSetup."Object Type"::Codeunit:
CODEUNIT.RUN(JobSchedulerSetup."Object No.");
END;
END;
CGNASStartedinLoop := TRUE;
//EDV01 end
IF CGNASStartedinLoop = FALSE THEN
CASE Parameter OF
'MAILLOG':
CODEUNIT.RUN(CODEUNIT::"E-Mail Dispatcher");
ELSE
IF CPApplnSrvSetup.GET(Parameter) THEN BEGIN
CPApplnSrvMgt.SetNASID(Parameter);
WORKDATE := 0D;
IF CPApplnSrvMgt.GetSendMail THEN BEGIN
MailHandler.RUN;
MailHandler.StartCountDown(2000);
END;
IF CPApplnSrvMgt.GetPerformSynch THEN
MsgDispatcher.RUN;
IF CPApplnSrvMgt.GetPerformRequests THEN
RequestHandler.RUN;
END ELSE
ERROR(Text018,Parameter);
END;
ParamStr := COPYSTR(ParamStr,SepPosition + 1);
CGNASStartedinLoop := FALSE;
UNTIL SepPosition = 0;
Это для случая, если нам нужно вызвать какую-то конкретную задачу. Если же нужно просто запустить диспетчер, то можно дописать
//EDV01 begin
IF COPYSTR(Parameter,1,6) = 'JOBSCH' THEN
IF JobSchedulerSetup.GET(DELCHR(COPYSTR(Parameter,7),'<>',' ')) THEN BEGIN
CASE JobSchedulerSetup."Object Type" OF
JobSchedulerSetup."Object Type"::Report:
REPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE,FALSE);
JobSchedulerSetup."Object Type":

ataport:
DATAPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE);
JobSchedulerSetup."Object Type"::Codeunit:
CODEUNIT.RUN(JobSchedulerSetup."Object No.");
END;
END ELSE //добавляем для обработки параметра JOBSCH без указания конкретной задачи
//сюда вставить код с кнопки СТАРТ формы управления диспетчером задач
CGNASStartedinLoop := TRUE;
//EDV01 end
Единственное, что я не знаю, так это то, какой параметр нужно указать в строке запуска NAS (или NASSQL) для того, чтобы отрубить сессию (останосить application server). Если кто знает, подскажите.
Способ 2: Создать сервис Windows с помощью Windows Resource Kit (доки можно почитать тут:
http://support.microsoft.com/kb/q137890/
Ресурс кит загружается тут -
http://www.microsoft.com/downloads/details...DisplayLang=en)
Затем создать задания Windows через Стандартные программы Назначенные задания для запуска и остановки созданного сервиса.
Например:
C:\WINDOWS\system32\sc.exe start JobSchedulerNav
C:\WINDOWS\system32\sc.exe stop JobSchedulerNav
Все это нужно сделать от некого пользователя, отвечающего за диспетчер.
На главной форме или в ApplicationManagement написать проверку пользователя и запуск диспетчера, если пользователь тот, который нам нужен.
Все это работает. Отжирает сессию, конечно. Но ведь ночью мало кто работает из сотрудников