Terrasoft 2.8

Неправильное заполнение Dataset

Здравствуйте!
Я пытаюсь программными средствами читать справочник типов средств связи. Как работает код, проверял отладкой.

function GetIsPhone(Dataset, FieldName) {
if (IsEmptyGUID(Dataset.ValAsGUID(FieldName))) return;
var CommunicationTypeID = Dataset.ValAsGUID(FieldName);
var CommTypeDataset = Dataset.DataFields(FieldName).LookupDataset;
if (CommTypeDataset.IsActive) CommTypeDataset.Close();
ApplyDatasetFilter(CommTypeDataset, 'ID', CommunicationTypeID, true);
CommTypeDataset.Open();
var IsPhone = CommTypeDataset.ValAsBool('IsPhone');
CommTypeDataset.Close();
ApplyDatasetFilter(CommTypeDataset, 'ID', CommunicationTypeID, false);
return IsPhone;
}

FieldName ='Communication2TypeID'
CommunicationTypeID соответствует мобильному телефону, но в результате работы этого кода в некоторых случаях получаю IsPhone=false, хотя в справочнике поле isPhone = true. Проверка CommTypeDataset.Values('IsPhone') показывает NULL. Запрос sq_CommunicationType в оболочке администратора работает нормально.

Нравится

5 комментариев

[javascript]
var CommTypeDataset = Dataset.DataFields(FieldName).LookupDataset;
[/javascript]
здесь предложил бы использовать новый экземпляр датасета
var CommTypeDataset = Services.GetNewItemByUSI('ds_CommunicationType');

Спасибо Саша! получилось.

Как по мне, можно было бы вообще обойтись:
[javascript]
var IsPhone = GetDatasetFieldValueByID('ds_CommunicationType', CommunicationTypeID, 'IsPhone');
[/javascript]

А функцию можно сократить до:
[javascript]
function GetIsPhone(Dataset, FieldName) {
if (IsEmptyValue(Dataset) || IsEmptyValue(FieldName)) {
return;
}
var CommunicationTypeID = Dataset(FieldName);
if (IsEmptyGUID(CommunicationTypeID)) {
return;
}
var IsPhone = GetDatasetFieldValueByID('ds_CommunicationType', CommunicationTypeID, 'IsPhone');
return IsPhone;
}
[/javascript]

Спасибо! Уместное замечание, не мешало бы пересмотреть и остальной код с учетом этого.

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