Как связать справочники, чтобы при изменении одного поля автоматически подставлялось значение из второго?
Реализация автоматического отображения значения в пользовательском поле с типом «Справочник» в зависимости от типа
Допустим, в карточке конфигурационной единицы нужно создать поле с типом «Справочник» (поле будет называться «Категория»). В зависимости от выбранного типа в карточке КЕ в поле «Категория» должна отображаться та или иная категория.
Для реализации подобного функционала нужно выполнить следующие действия:
1. Создать справочник категорий. Для этого откройте меню Файл – Справочники – Настройка справочников. Выберите раздел «Конфигурационные единицы» и нажмите на кнопку «Создать справочник».
2. Укажите необходимые свойства:
3. После того, как справочник будет создан, нужно создать поле «Категория» в карточке редактирования инцидента. Для этого откройте меню Файл – Настройка – Пользовательские поля и создайте для раздела «Конфигурационные единицы» поле:
Не активируйте опцию «Применить для всех типов»! Не указывайте типы КЕ на детали «Типы»!
Сохраните карточку.
4. Запустите TSAdmin.exe. Откройте сервис wnd_ConfigurationItemEdit (Configuration Item -> General -> MainGrid). Добавьте в него поле LookupDataControl
5. В свойстве DatasetLink укажите значение dlData, в свойстве DataFieldName укажите название Вашего поля:
Сохраните изменения.
6. Затем нужно добавить поле «Категория» в справочник типов конфигурационных единиц, где Вы сможете указать соответствие типа и категории. Для этого откройте сервис tbl_ConfigurationItemType (Configuration Item -> Dictionaries -> Types) и добавьте в него новое поле:
7. Создайте новую связь с укажите для нее необходимые параметры:
8. Откройте сервис sq_ConfigurationItemType и создайте новую связь с таблицей справочника:
9. Создайте два поля в ветке Select: одно поле из таблицы tbl_ConfigurationItemType, а второе – из tbl_ConfigurationCategory
10. Откройте сервис ds_ConfigurationItemType и добавьте в него новое поле с типом «Справочник», укажите ему необходимые свойства:
11. Создайте в папке Type новый сервис с типом Window:
12. Укажите в свойстве TemplateWindowUSI сервис wnd_BaseDBEdit, а также необходимые свойства:
13. Сохраните внесенные изменения. Заново откройте этот сервис.
14. На закладке «Невизуальные» для компонента dlData укажите нужный датасет
15. Перейдите на закладку «Визуальные» и в компоненте frmData создайте сперва поле с типом TextDataControl и присвойте ему необходимые свойства:
16. Создайте поле с типом LookupDataControl и присвойте ему свойства:
17. Создайте поле MemoDataControl и присвойте ему свойства:
18. Сохраните внесенные изменения. Перезапустите рабочее приложение Terrasoft CRM.
19. Откройте меню Файл – Справочники – Настройка справочников – Конфигурационные единицы – Типы/Модели конфигурационных единиц. Кликните дважды на записи этого справочника. В поле «Окно редактирования» укажите сервис созданной Вами карточки редактирования:
20. Откройте справочник Конфигурационные единицы – Категория и заполните его возможными значениями
21. Откройте справочник Конфигурационные единицы – Типы/Модели и для каждого типа укажите значение категории:
22. Запустите еще раз TSAdmin.exe. Откройте сервис wnd_ConfigurationItemEditScipt. Найдите в этом скрипте функцию function dlDataOnDatasetDataChange. В этой функции найдите блок case 'ConfigurationItemTypeID' и добавьте в него такие строки:
var Dataset = DataField.ParentDataFields.ParentDataset;
var ConfigurationItemTypeID = Dataset.Values('ConfigurationItemTypeID');
Dataset.Values('ConfigurationCategoryID') = GetDatasetFieldValueByID('ds_ConfigurationItemType', ConfigurationItemTypeID, 'ConfigurationCategoryID');
23. В меню «Использовать скрипты» добавьте скрипт scr_DB
24. Сохраните внесенные изменения. Перезапустите рабочее приложение Terrasoft CRM и протестируйте работоспособность системы. В результате при выборе значения в поле «Тип» - в поле «Категория» будет автоматически отображаться нужное значение, указанное в справочнике.
Источник: БЗ