Вопрос

Неправильное заполнение 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 комментариев
var CommTypeDataset = Dataset.DataFields(FieldName).LookupDataset;

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

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

Как по мне, можно было бы вообще обойтись:

var IsPhone = GetDatasetFieldValueByID('ds_CommunicationType', CommunicationTypeID, 'IsPhone');

А функцию можно сократить до:

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;
 }

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

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