Массовое редактирование записей в Terrasoft

В Terrasoft CRM Sales версий до 3.4 нет встроенного функционала массового изменения записей.

В версии 3.4 такой функционал появился, но он ограничен количеством выделенных записей (обычно это 40). И массовое изменение записей, количество которых больше на 2-3 порядка, становится весьма трудоемкой задачей.

Если такого функционала в Террасофте нет, то функционал сам придет в Террасофт.

Алгоритм реализации массового изменения записей следующий:

  1. Разместить кнопку для запуска скрипта
  2. Открыть датасет, записи которого необходимо изменить
  3. Прошерстить каждую запись датасета и изменить нужное поле
  4. Закрыть датасет
  5. Сообщить об успешном окончании внесения изменений

Ниже рассмотрен пример - в разделе "Контрагенты" для всех контрагентов из страны "Россия" необходимо изменить ответственного менеджера.

В админке Террасофта открываем датагрид wnd_AccountsGridArea.
Добавляем кнопку и прописываем для нее событие на клик. По нажатию этой кнопки будет выполняться функция массового изменения контрагентов.
Добавление кнопки в датагрид

Редактируем функцию btnManagerOnClick следующим образом:

function btnManagerOnClick(Control) {
var AccountDataset = Services.GetNewItemByUSI('ds_Account');

var CountryRussiaID = '{DE315AF9-5694-44DF-988C-633933E856F3}';
var ManagerKorneevID = '{34DCDC19-A1EE-45A1-8C99-FB59A8B5038D}';

ApplyDatasetFilter(AccountDataset, 'CountryID', CountryRussiaID, true); // Фильтрация датасета по стране
// чтобы фильтрация работала, необходимо задать фильтр сравнения CountryID в запросе sq_Account

MessageBox('Поехали!'); //информационные сообщения

AccountDataset.Open();

while (!AccountDataset.IsEOF) { //цикл перебора всех записей отфильтрованного датасета
AccountDataset.Edit(); // открываем датасет на редактирование
AccountDataset('OwnerID') = ManagerKorneevID; //изменяем поле "Ответственный"
AccountDataset.Post(); // сохраняем изменения
AccountDataset.GotoNext(); //переходим к следующей записи датасета
}

AccountDataset.Close();

MessageBox('Все готово, шеу!');
}

В самом цикле while можно использовать условия if для дополнительного отсеивания записей, которые нужно редактировать. Причем можно вообще не использовать функцию ApplyDatasetFilter для фильтрации датасета. Это не отразится на времени выполнения скрипта. В этом случае цикл будет выглядеть следующим образом:

while (!AccountDataset.IsEOF) {
if (AccountDataset('CountryID') == CountryRussiaID) {
AccountDataset.Edit();
AccountDataset('OwnerID') = ManagerKorneevID;
AccountDataset.Post();
}
AccountDataset.GotoNext();
}

Самая интригующая часть - запуск клиента Terrasoft и нажатие новой кнопки. Обычно массовое изменение 10 000 записей занимает не больше минуты.
После завершения процедуры лучше скрыть кнопку, чтобы подстраховаться от повторных нажатий.

Добавить комментарий

Ваш e-mail не будет опубликован.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: