Добрый день!
Возникла необходимость каждый месяц автоматически создавать задачи по всем контрагентам с определенным типом.
Создание задачи из скрипта проблем не вызывает, но каким образом (не используя хранимые процедуры и тригеры, а средствами JavaScript) отобрать в начале месяца всех контрагентов с нужным типом?
Нравится
Здравствуйте, Павел!
Вы можете реализовать данную функциональность с помощью JOB, который будет выполнять действия или запускать процедуру в конкретные промежутки времени.
Данное решение подходит для версий приложения под MS SQL.
Как альтернативный вариант можете организовать проверку по дате на событие OnPrepare wnd_Main, если проверка возвращает значение, то применять фильтр (ранее созданный), т.е. проверка по дате будет работать каждый раз при запуске системы.
Terrasoft Support Team
Ага, каждый раз при запуске системы у каждого пользователя. А если два человека одновременно в начале месяца зайдут то, вообще весело будет.
JOB хороший вариант, но тогда не отработает логика, которая в скриптах прописана.
Я не уверен, но помоему при запуске tscrm.exe можно указать сервис окна, которое запустится вместо wnd_Main и пользователя\пароль. Если да, то рисуем новый сервис окна, в котором на OnPrepare создаем задачи и в конце закрываем окно. После в планировщик задач прописываем запуск tscrm.exe с правильными параметрами и ждем начала следующего месяца :)
Добрый день!
Создал окно, при вызове 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(); }