Настройка класса обслуживания
Класс обслуживания содержит периоды обслуживания в течение рабочей недели и исключения из общего графика обслуживания.
Настройка периода обслуживания производится отдельно для каждого дня недели, в течение дня можно задать сколь угодно много не пересекающихся периодов обслуживания.
Период обслуживания – временной промежуток, в рамках которого происходит отсчет регламентного времени.
Для учета праздничных дней, переносов при выпадении праздничных дней на рабочие или локальных изменений графика работы организаций можно задать исключение. Аналогично периодам обслуживания в рамках дня исключения можно задать конкретные временные периоды, в течение которых будет происходить отсчет регламентного времени.
Исключение – календарный день, в течение которого обслуживание производится не в рамках стандартного графика (используется для учета выходных и праздничных дней).
Период исключения – временной промежуток обслуживания в течение исключения, когда происходит отсчет регламентного времени.
- Добавление класса обслуживания
- Настройка периодов обслуживания
- Настройка исключений в графике обслуживания
- Примеры добавления исключений в класс обслуживания
Добавление класса обслуживания
Чтобы добавить класс обслуживания, выполните следующие действия:
- В меню навигации выберите "Справочники" → "Системные справочники" → "Классы обслуживания".
- В справочнике (блок "Элементы справочника") нажмите кнопку Добавить элемент.
- На форме "Добавление элемента" заполните поля:
- Название — введите название элемента справочника, которое будет использоваться в системе в качестве значения атрибута объекта типа "Элемент справочника" и "Набор элементов справочника".
- Код — введите код для идентификации элемента справочника. Код должен быть уникален в пределах справочника, с учетом регистра.
- Родитель — выберите папку, в которую вложен данный элемент (если в справочнике созданы папки).
- Описание — введите описание класса обслуживания.
- Нажмите кнопку Сохранить. Форма добавления закроется, новый класс обслуживания отобразится в справочнике.
Для класса обслуживания выполняются следующие настройки:
Настройка периодов обслуживания
Период обслуживания — временной промежуток, в рамках которого производится предоставление услуг (поддержка пользователей). В течение одного дня недели можно настроить один или несколько периодов обслуживания.
Если для класса обслуживания не определен ни один период обслуживания, класс обслуживания обрабатывается как 24х7 (24 часа в течение 7 дней).
Добавить период обслуживания
Чтобы добавить период обслуживания, выполните следующие действия:
- В меню навигации выберите "Справочники" → "Системные справочники" → "Классы обслуживания".
-
Откройте карточку класса обслуживания.
-
В блоке "График обслуживания" нажмите иконку
в строке дня недели. -
На форме "Добавление периода обслуживания" выберите временные рамки периода обслуживания.
Для выбора значения можно воспользоваться поиском в поле выбора.
- Нажмите кнопку Сохранить. Форма добавления закроется, карточка класса обслуживания обновится.
Изменить периоды обслуживания в рамках одного дня недели
Чтобы изменить период обслуживания:
- В меню навигации выберите "Справочники" → "Системные справочники" → "Классы обслуживания".
- Откройте карточку класса обслуживания.
-
В блоке "График обслуживания" нажмите иконку
в строке дня недели. -
На форме редактирования периодов обслуживания:
- Чтобы изменить временные границы периода обслуживания, выберите новые значения в списках выбора. Для выбора значения можно воспользоваться поиском в поле выбора.
- Чтобы удалить период обслуживания, нажмите на иконке
в строке периода обслуживания.
- Нажмите кнопку Сохранить.
Форма редактирования закроется, внесенные изменения будут применены, карточка класса обслуживания обновится.
Настройка исключений в графике обслуживания
Исключения в графике обслуживания могут быть настроены в двух вариантах:
- календарный день — если указана только дата и в рамках этой даты не указан ни один период, то весь этот день считается нерабочим;
- периоды исключений — если указаны дата и периоды исключений, то это периоды обслуживания в этот конкретный день.
Список исключений в графике обслуживания отображается в карточке настройки класса обслуживания (блок "Исключения в графике обслуживания"). Для списка применяется сортировка по убыванию дат.
Добавить дату исключения из общего графика обслуживания
Чтобы добавить дату исключения из общего графика обслуживания, выполните следующие действия:
- В меню навигации выберите "Справочники" → "Системные справочники" → "Классы обслуживания".
-
Откройте карточку класса обслуживания.
- В блоке "Исключения в графике обслуживания" нажмите кнопку Добавить исключение.
- На форме добавления исключения выберите дату исключения.
- Нажмите кнопку Сохранить. Форма добавления закроется, карточка класса обслуживания обновится.
Добавить период исключения
В рамках одного календарного дня можно добавить несколько периодов исключения:
- В меню навигации выберите "Справочники" → "Системные справочники" → "Классы обслуживания".
- Откройте карточку класса обслуживания.
- В блоке "Исключения в графике обслуживания" нажмите на иконку
в строке дня исключения. -
На форме добавления периода исключения выберите рамки периода обслуживания.
Для выбора значения можно воспользоваться поиском в поле выбора.
- Нажмите кнопку Сохранить. Форма добавления закроется, карточка класса обслуживания обновится.
Изменить период исключения в рамках одной даты
Чтобы изменить период исключения в рамках одной даты, выполните следующие действия:
- В меню навигации выберите "Справочники" → "Системные справочники" → "Классы обслуживания".
- Откройте карточку класса обслуживания.
- В блоке "Исключения в графике обслуживания" нажмите иконку
в строке дня исключения. -
На форме редактирования периодов исключения:
- Чтобы изменить временные границы периода исключения, выберите новые значения в списках. Для выбора значения можно воспользоваться поиском в поле выбора.
- Чтобы удалить период исключения, нажмите иконку
в строке периода исключения.
- Нажмите кнопку Сохранить. Форма редактирования закроется, внесенные изменения будут применены, карточка класса обслуживания обновится.
Удалить дату исключения
Чтобы удалить исключение в графике обслуживания, в карточке класса обслуживания в блоке "Исключения в графике обслуживания" нажмите иконку
в строке с датой исключения.
Примеры добавления исключений в класс обслуживания
Пример 1
Скрипт изменяет класс обслуживания у всех открытых запросов, независимо от того, какой класс обслуживания был настроен ранее (например, 8х5 или 24х7).
Если необходимо обновить класс обслуживания с учетом текущего класса, используйте скрипт из Примера 2.
Условие: Класс "Запрос", системный атрибут "Класс обслуживания" (serviceTime).
Исключения в класс обслуживания добавляются через файл (Загрузка и выгрузка исключений для классов обслуживания) или вручную в элементе справочника "Классы обслуживания". В этом случае автоматически создается черновик класса обслуживания, который затем утверждает технолог.
После добавления исключений в класс обслуживания запускается скрипт, который изменяет класс обслуживания на указанный по UUID у всех открытых запросов с любым классом обслуживания.
При большом количестве запросов обновление выполняется постепенно. Чтобы процесс проходил стабильно и без перегрузки системы, следует выполнять актуализацию пачками по N объектов (оптимально — по 50). Для этого создайте временную задачу планировщика, которая с заданной периодичностью будет обрабатывать еще не обновленные объекты.
def newClassUuid = 'servicetime$123'
// получаем объекты так, чтобы не получать уже актуализированные и те, актуализация которых не требуется
def scs = api.db.query("SELECT 'serviceCall\$' || id FROM serviceCall WHERE state != 'closed' AND serviceTime.id != :classId")
.set('classId', newClassUuid.split('\\$')[1])
.setMaxResults(50)
.list()
def newClass = utils.get(newClassUuid)
for (def sc : scs) {
try {
utils.editWithoutEventActions(sc, ['serviceTime': newClass], true)
} catch (Exception e) {
logger.error("[Изменение класса обслуживания] Не удалось выполнить для ${sc}!", e)
}
}
logger.info("[Изменение класса обслуживания] Успешно завершено для ${scs.size()} запросов.")
return scs.size()
Если у счетчика времени установлен флажок в параметре "Разрешить пересчет временных характеристик при смене класса обслуживания объекта", то после обновления будет выполнен пересчет временных характеристик обратного счетчика, ссылающегося на данный класс обслуживания.
Пример 2
Условие: Класс "Запрос", системный атрибут "Класс обслуживания" (serviceTime).
После добавления исключений в класс обслуживания запускается скрипт, который изменяет класс обслуживания на указанный по UUID у всех открытых запросов с учетом их текущего класса обслуживания.
Скрипт выбирает запросы с текущим классом обслуживания и обновляет их на новую версию соответствующего класса обслуживания. Обработка выполняется пачками по N объектов, что позволяет избежать перегрузки системы и ошибок при массовых изменениях.
/*& 3600 */
// ПАРАМЕТРЫ ------------------------------------------------------------
def METACLASS = 'serviceCall'
def SERVICE_TIME = 'serviceTime' // Атрибут типа Элемент справочника, на класс обслуживания
def EDIT_NUM = 10; // Число объектов редактируемых в одной транзакции
def LIMIT = 1000; // Число объектов редактируемых за один запуск скрипта
// ФУНКЦИИ --------------------------------------------------------------
def editObjects = { objectUuids ->
def count = 0
for (uuid in objectUuids)
{
try
{
def object = utils.get(uuid);
def oldServiceTime = object[SERVICE_TIME]
def newServiceTime = utils.get('servicetime', ['title': oldServiceTime.title, 'status': 'active'])
if (newServiceTime)
{
utils.editWithoutEventActions(object, [(SERVICE_TIME): newServiceTime]);
logger.info("[Обновление класса обслуживания] Объект ${uuid} отредактирован: ${oldServiceTime?.UUID} -> ${newServiceTime?.UUID}");
count += 1;
}
else
{
logger.info("[Обновление класса обслуживания] Объект ${uuid} не отредактирован: для ${oldServiceTime?.UUID} нет актуальной версии");
}
}
catch (Exception e)
{
logger.warn("[Обновление класса обслуживания] Не удалось отредактировать объект ${uuid}: ${e.toString()}", e);
}
}
return count
}
// ОСНОВНОЙ БЛОК --------------------------------------------------------
try
{
// получаем все объекты в статусах отличных от Закрыт (closed), у которых класс обслуживания является устаревшим (old)
def uuids = api.db.query("SELECT '${METACLASS}\$'||cast(o.id as string) FROM ${METACLASS} o WHERE o.state <> 'closed' AND o.${SERVICE_TIME} IS NOT NULL AND o.${SERVICE_TIME}.status = 'old'")
.setMaxResult(LIMIT)
.list();
logger.info("[Обновление класса обслуживания] Всего найдено объектов для обновления класса обслуживания (ограничение - ${LIMIT}): ${uuids.size()}")
// Разделяем объекты на пачки по EDIT_NUM
def uuidBatches = uuids.collate(EDIT_NUM);
def batchCount = uuidBatches.size()
logger.info("[Обновление класса обслуживания] Количество пачек объектов: ${batchCount}")
// Выполняем обработку объектов пачками
for (int i = 0; i < batchCount; i++)
{
try
{
def count = api.tx.call { editObjects(uuidBatches[i]) };
logger.info("[Обновление класса обслуживания] [${i + 1}/${batchCount}] Изменено ${count} объектов из ${Math.min(uuidBatches[i].size(), EDIT_NUM)}");
}
catch (Exception e) {
logger.info("[Обновление класса обслуживания] [${i + 1}/${batchCount}] Получена ошибка: ${e.toString()}", e);
}
}
logger.info("[Обновление класса обслуживания] Редактирование объектов завершено");
}
catch (Exception e)
{
logger.warn("[Обновление класса обслуживания] Получена ошибка: ${e.toString()}", e);
}
Пример 3
Для запроса установлен класс обслуживания, как значение пользовательского атрибута типа "Элемент справочника".
В этом случае при добавлении исключения черновик класса обслуживания не создается.
Рекомендуется выполнить следующие действия:
- Создать копию класса обслуживания, в который нужно внести исключение.
- Добавить исключение.
- Применить скрипт, меняющий класс обслуживания в незакрытых запросах на новый.
Если у счетчика времени установлен флажок в параметре "Разрешить пересчет временных характеристик при смене класса обслуживания объекта", то после обновления будет выполнен пересчет временных характеристик обратного счетчика, ссылающегося на данный класс обслуживания.