Как сделать, чтобы при выборе одного справочника автоматически подтягивалось значение другого в соседнем поле?
Для реализации данного функционала, необходимо:
1. Создать справочник:
В результате, создадутся сервисы в ветке Accounts\Dictionaries\SubFields\
2. Проверить, создалось ли поле в таблице tbl_SubFields (Accounts\Dictionaries\SubFields\tbl_SubFields):
3. В сервисе запроса sq_SubFields (Accounts\Dictionaries\SubFields\sq_SubFields) добавить параметр:
4. Добавить фильтр сравнения:
5. Проверить, создалось ли поле в сервисе датасета ds_SubFields (Accounts\Dictionaries\SubFields\ds_SubFields):
6. Проверить, создалась ли карточка редактирования wnd_SubFieldsEdit (Accounts\Dictionaries\SubFields\wnd_SubFieldsEdit) и поле «Отрасль» в ней:
7. Добавить поле в сервис таблицы tbl_Account (Accounts\General\Main Grid\tbl_Account):
8. Добавить связь:
9. Добавить колонку в сервис запроса sq_Account (Accounts\General\Main Grid\sq_Account):
10. Присоединить таблицу к запросу:
11. Добавить колонку:
12. Создать поле в сервисе датасета ds_Account (Accounts\General\Main Grid\ds_Account):
13. Добавить визуальный компонент в карточку редактирования, указав соответствующие созданному полю свойства:
14. Перейти на вкладку события и создать обработчик OnPrepareSelectWindow (дважды кликнув по пустому полю, в результате чего в нем появится запись edtSubFieldOnPrepareSelectWindow):
15. Добавить в созданный обработчик следующий код:
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var AccountFieldID = GetDatasetFieldValue(Dataset, 'FieldID');
ApplyDatasetFilter(LookupDataset, 'FieldID', AccountFieldID, true);
В результате:
16. Сохранить изменения и перезапустить Terrasoft.
17. Заполнить справочник «Подотрасли».
В результате:
Источник: БЗ
Нашла куда более адекватный вариант решения от Наташи Бондарь:
Для того, чтобы при выборе одного значения справочника, ограничивалось содержимое другого справочника необходимо:
1. Создать обработчик события OnPrepareSelectWindow поля-справочника, содержимое которого нужно ограничить:
2. В теле функции обработки события осуществлять фильтрацию записей справочника посредством вызова функции function ApplyDatasetFilter(Dataset, FilterName, ParamValue, Enabled). Обращаем Ваше внимание, в сервисе выборки данных (sq_xxx) справочника, значения которого нужно ограничить, обязательно должен присутствовать фильтр сравнения и параметр.
Реализацию подобной функциональности Вы можете посмотреть во многих карточках редактирования системы, например, для базовых полей «Страна», «Регион» карточек [Контакт], [Контрагент].
Ответ на 2 вопрос:
Для того, чтобы при заполнении одного поля, другое поле заполнялось автоматически необходимо:
В функции OnDatasetDataChange набора данных (датасета) делать проверку по полю. Если изменяется содержимое поля «Контакт», осуществлять фильтрация записей датасета контактов (ds_Contact) по текущему контакту (фильтрация выполняется посредством функции function ApplyDatasetFilter(Dataset, FilterName, ParamValue, Enabled)). После фильтрации получать значение подразделения контакта и присваивать его полю «Подразделение» датасета карточки редактирования.
var Dataset = dlData.Dataset; if (DataField.Name == 'ContactID' ) { var DatasetContacts = Services.GetNewItemByUSI('ds_Contact'); ApplyDatasetFilter(DatasetContacts, 'ID', DataField.Value, true); DatasetContacts.Open(); var Podrazdelenie = DatasetContacts('Podrazdelenie'); Dataset('Podrazdelenie') = Podrazdelenie; DatasetContacts.Close(); }