Доброго времени суток, коллеги.
Есть перечень Сервисов, упакованных в Сервисные договора. Создаём Инцидент, выбираем Контрагента - автоматически подставляется соответствующий основной Сервисный договор. Далее выбираем Сервис из списка доступных согласно Пакета сервисов в данном Сервисном договоре. И вот тут мне нужно автоматически выставить нужный Тип инцидента. Условно говоря, в моём бизнес-процессе Тип инцидента - это группировка Сервисов по сути: IT, организационное, техническое и т.п. Соответственно, по Типу инцидент пойдёт в решение в разные подразделения.
Подскажите, пожалуйста, где нужно поковыряться для реализации? Начну с того, что в справочнике Сервисов добавлю выбор Типа инцидента, которому этот Сервис соответствует. Далее надо в окне редактирования Инцидента при смене Сервиса подставлять Тип инцидента. Как это сделать?
Нравится
Это можно сделать либо в скрипте карточки в обработчике dlDataOnDatasetDataChange, либо в скрипте датасета на SelfOnDatasetDataChange.
Итак.
В Сервисы через штатный механизм добавил справочник Типов инцидента. Заполнил справочник.
В sq_Incident добавил поле ServiceIncidentTypeID из уже подцепленной tbl_ITService.IncidentTypeID
Прописал это поле в ds_Incident
Теперь в скрипт. Пошел по первому пути.
function dlDataOnDatasetDataChange(DataField) {
DataChange(DataField);
SmartLookupOnDataChange(DataField);
}
Проваливаюсь в DataChange, нахожу там обработку изменения ITServiceID
if (Name == 'ITServiceID') {
// получаем ID типа инцидента по сервису
var iIncidentTypeID = Dataset.Values('ServiceIncidentTypeID');
// меняем тип инцидента
Dataset.Values('IncidentTypeID') =iIncidentTypeID;
ProcessChangeITServiceID(Dataset);
return;
}
Не падает, но при изменении Сервиса контрол Тип инцидента оказывается пустым. На каком шаге мог ошибиться?
Попробуйте отладиться, чтобы на каждом шаге видеть значения переменных. Вообще, для получения значения tbl_ITService.IncidentTypeID проще было бы не добавлять поле в sq и ds инцидента, а воспользоваться функцией GetDatasetFieldValueByID('ds_ITService', ITServiceID, 'IncidentTypeID');