Получение значения дополнительного поля из Lookup Dataset

Добрый день.
Подскажите пзл.

Есть справочник "Семейное положение", добавил в него поле NeedFamilyInfo (BOOL). В справочнике все работает - и в Террасофте, и в БД.

Необходимо при смене в Контактах поля Семейное Положение анализировать значение поля NeedFamilyInfo.

Делаю так в методе dlDataOnDatasetDataChange Контактов:

if (Name == "MaritalStatusID"){
if (Value != null)
{
debugger;
var DS = edtMaritalStatus.DataField.LookupDataset;
EnableDatasetFilters(DS, false);
ApplyDatasetIDFilter(DS, Value, true);
if (DS.State == dstInactive)
DS.Open();
else
RefreshDataset(DS);

dlData.Dataset.DataFields.ItemsByName("FamilyMemberCount").IsRequired = DS.ValAsBool("NeedFamilyInfo");
}}
но всегда DS.Values("NeedFamilyInfo") = null

Пробовал и с использованием функции GetFieldValueFromDisabledField - все равно null.

Подскажите плз, где может быть ошибка?

Нравится

3 комментария

Добавлю:

Смотрел профайлером - всегда из справочника идет запрос только двух полей - ID и Name. Как заставить оптимизатор выбрать допольнительно другие поля?

Еще добавлю вопрос:
Что означает свойство IsLookupDataset?

Здравствуйте!
1. В скрипте scr_Util. Вам необходимо использовать ф-цию GetFieldValueFromLookupDataset. Но в GetDatasetFieldValueFromDatasetByFilter необходимо сделать доработку:

...
	ApplyDatasetFilter(Dataset, FilterFieldName, FilterFieldValue, true);
	var DataField = Dataset.DataFields.ItemsByName(ResultFieldName);
	var Column = GetGeneralColumnByDataField(DataField);
	if ((Assigned(Column)) && (!Column.IsEnabled)) {
		Column.IsEnabled = true;
	}
	Dataset.Open();
...

2. IsLookupDataset - см. http://terrasoft.com.ua/sdk/IDBDataset__IsLookupDataset@%5Bout,_retval%…

Показать все комментарии