периодическое формирование задач

Добрый день!

Возникла необходимость каждый месяц автоматически создавать задачи по всем контрагентам с определенным типом.

Создание задачи из скрипта проблем не вызывает, но каким образом (не используя хранимые процедуры и тригеры, а средствами JavaScript) отобрать в начале месяца всех контрагентов с нужным типом?

Нравится

8 комментариев

Здравствуйте, Павел!

Вы можете реализовать данную функциональность с помощью JOB, который будет выполнять действия или запускать процедуру в конкретные промежутки времени.
Данное решение подходит для версий приложения под MS SQL.
Как альтернативный вариант можете организовать проверку по дате на событие OnPrepare wnd_Main, если проверка возвращает значение, то применять фильтр (ранее созданный), т.е. проверка по дате будет работать каждый раз при запуске системы.

Terrasoft Support Team

Ага, каждый раз при запуске системы у каждого пользователя. А если два человека одновременно в начале месяца зайдут то, вообще весело будет.
JOB хороший вариант, но тогда не отработает логика, которая в скриптах прописана.
Я не уверен, но помоему при запуске tscrm.exe можно указать сервис окна, которое запустится вместо wnd_Main и пользователя\пароль. Если да, то рисуем новый сервис окна, в котором на OnPrepare создаем задачи и в конце закрываем окно. После в планировщик задач прописываем запуск tscrm.exe с правильными параметрами и ждем начала следующего месяца :)

Действительно хороший вариант, спасибо!

Вот пример запуска

TSCRM.exe /wnd=wnd_import /usr=Supervisor /pwd="" /cfg=tscrm

Добрый день!

Создал окно, при вызове wnd_BPOnPrepare, создается задача с нужными реквизитами, но количество таких задач должно быть равным количеству клиентов с определенным типом.

Каким образом лучше организовать цикл перебора?

function wnd_BPOnPrepare(Window) {
var DatasetTask = Services.GetNewItemByUSI('ds_Task');
var DatasetAccount = Services.GetNewItemByUSI('ds_Account');
var AccountTypeID = '{CB403C3E-51C9-4117-8ADF-CEC787AE584C}'; //тип клиента = Клиент
ApplyDatasetFilter(DatasetAccount, 'AccountTypeID', AccountTypeID, true);
//в sq_Account создать фильтр сравнения с параметром AccountTypeID
DatasetAccount.Open();

DatasetTask.Append();

DatasetTask.Values('Title')='Связь'
DatasetTask.Values('PriorityID')= '{F6E5132C-BFC4-48E4-832B-0A60BBF6FC57}';
DatasetTask.Values('TypeID')= '{EE2F344B-BCE6-48A7-8813-20A4964DDE82}';
DatasetTask.Values('OwnerID')= DatasetAccount.Values('OwnerID');
DatasetTask.Values('StatusID')= '{9E289E42-9A0E-4A9C-A57F-049754310D95}';
DatasetTask.Values('AccountID')= DatasetAccount.Values('ID');
//DatasetTask.Values('StartDate')= GetTodayDate();
//DatasetTask.Values('DueDate')= AddDateDays(DateTime, 25)

DatasetTask.Post();
DatasetTask.Close();
DatasetAccount.Close();
}

Попробывал так:

function wnd_BPOnPrepare(Window) {
var DatasetTask = Services.GetNewItemByUSI('ds_Task');
var DatasetAccount = Services.GetNewItemByUSI('ds_Account');
var AccountTypeID = '{CB403C3E-51C9-4117-8ADF-CEC787AE584C}'; //тип клиента = Клиент
ApplyDatasetFilter(DatasetAccount, 'AccountTypeID', AccountTypeID, true);
//в sq_Account создать фильтр сравнения с параметром AccountTypeID
DatasetAccount.Open();

(!DatasetAccount.IsEOF)
DatasetTask.Append();

DatasetTask.Values('Title')='Связь'
DatasetTask.Values('PriorityID')= '{F6E5132C-BFC4-48E4-832B-0A60BBF6FC57}';
DatasetTask.Values('TypeID')= '{EE2F344B-BCE6-48A7-8813-20A4964DDE82}';
DatasetTask.Values('OwnerID')= DatasetAccount.Values('OwnerID');
DatasetTask.Values('StatusID')= '{9E289E42-9A0E-4A9C-A57F-049754310D95}';
DatasetTask.Values('AccountID')= DatasetAccount.Values('ID');
//DatasetTask.Values('StartDate')= GetTodayDate();
//DatasetTask.Values('DueDate')= AddDateDays(DateTime, 25)

DatasetTask.Post();
DatasetAccount.GotoNext();
}

DatasetTask.Close();
DatasetAccount.Close();
}

но создается 1242 задачи вместо 2-х

Я бы это сделал вот так

var AccountTypeID = '{CB403C3E-51C9-4117-8ADF-CEC787AE584C}';
var stNone = 0;
 
var AccountsDataset =  GetDetailSummary(
	'tbl_Account', 'AccountTypeID', AccountTypeID, 'ID', stNone);
var DatasetTask = Services.GetNewItemByUSI('ds_Task');
try {
	AccountsDataset.GoToFirst();
	while (!AccountsDataset.IsEOF) {
		DatasetTask.Append();
		DatasetTask.Values('Title')='Связь'
		DatasetTask.Values('PriorityID')= '{F6E5132C-BFC4-48E4-832B-0A60BBF6FC57}';
		DatasetTask.Values('TypeID')= '{EE2F344B-BCE6-48A7-8813-20A4964DDE82}';
		DatasetTask.Values('OwnerID')= DatasetAccount.Values('OwnerID');
		DatasetTask.Values('StatusID')= '{9E289E42-9A0E-4A9C-A57F-049754310D95}';
		DatasetTask.Values('AccountID')= DatasetAccount.Values('ID');
		//DatasetTask.Values('StartDate')= GetTodayDate();
		//DatasetTask.Values('DueDate')= AddDateDays(DateTime, 25)
		DatasetTask.Post();
		AccountsDataset.GotoNext();
	}
} finally {
	AccountsDataset.Close();
	DatasetTask.Close();
 
}

Вопрос снят, все получилось!

Показать все комментарии