Отображение значения поля связанного справочника в карточке редактирования
В карточке редактирования добавлено поле справочника и поле описаия значеия выбранного значения справочника. Но описание отображается только после сохранения данных в карточке.
Как заставить отображать систему отображать поля связанного справочника после выбора нового значения в карточке редактирования?
Нравится
Добрый день, Станислав!
Насколько мы поняли из предоставленного Вами описания проблемы: у Вас есть два поля, соответствующие двум связанным справочникам, в зависимости от выбранного значения в одном поле, значения другого варьируются и зависят от выбранного значения в первом справочнике.
Аналогичная функциональность реализована в карточке раздела "Задачи" (зависимость справочника "Результат" от справочника "Состояния"). Для реализации необходимой Вам функциональности Вы можете просмотреть реализацию стандартного функционала и сделать это по аналогии (сервис scr_TaskEdit). Для того, чтобы второй справочник открывался в карточке без пересохранения ее, Вам необходимо сперва объявить переменные, соответствующие ключам обоих справочников, а затем "наложить" фильтр. Как например, это реализовано в разделе задач:
function edtResultOnPrepareSelectWindow(LookupDataControl) {
var Dataset = dlData.Dataset;
var LookupDataset = LookupDataControl.DataField.LookupDataset;
var StatusID = Dataset.Values('StatusID');
var TaskTypeID = Dataset.Values('TypeID');
ApplyDatasetFilter(LookupDataset, 'TaskTypeID', TaskTypeID, true);
ApplyDatasetFilter(LookupDataset, 'StatusID', StatusID, true);
var AllowedResultIDs = GetAttribute(Self, 'AllowedResultIDs');
var IsResultIDsFilterEnabled = Assigned(AllowedResultIDs);
ApplyDatasetIncludeFilter(LookupDataset, 'IncludeID',
AllowedResultIDs, IsResultIDsFilterEnabled);
}
Желаем удачи!
Нет. Немного не то. Есть в карточке задачи, например, поле "Контрагент" и есть поле, которое отображает, например, численность из карточки контрагента (отображение, недоступное для изменения. Поле "Численность" взято только для примера). Так вот численность отобразится в карточке задачи только после сохранения самой карточки, а при создании новой карточки при выборе контрагента у меня отображается пустое поле "Численность". Как мне отобразить значение? Нужен общий подход без привязки к конкретному полю. При этом может быть ситуация, когда мне нужно отобразить значение из справочника более глубокого вложения, т.е.: в задаче есть контрагент, у котрагента есть ссылка на id определенного справочника, из этого справочника нужно отобразить определенное поле.
Попробую объяснить на примере который Вы привели.
Нужно на событие изменения поля "Контрагент" датасета карточки задачи, делать запрос на получение значения поля "Численность" из датасета контрагентов.
Затем это значение присваивать контролу в котором нужно отобразить значение.
Можно использовать функцию GetDatasetFieldValueByID(DatasetUSI, ID, FieldName) из scr_DB.
Код будет выглядеть примерно следующим образом.
................... function dlDataOnDatasetDataChange(DataField) { if (!Assigned(DataField)) { return; } var DataFieldName = DataField.Name; var Dataset = DataField.ParentDataFields.ParentDataset; switch (DataFieldName){ case ('AccountID'): edtQuantity.Value = GetDatasetFieldValueByID('ds_Account', DataField.Value, 'Quantity'); break; ...............................