Добрый день.
Создал новый справочник ds_jobs(id, name, tasktypeid)
В нем есть поле "Тип задачи", тип задачи берется из справочника "Типы задач".
Добавил его на окно задачи.
Для того, чтобы справочник ds_jobs зависел от "Типы задач" необходимо добавить фильтр.
Добавляю:
var Dataset = dlData.Dataset;
var TypeID = Dataset.Values('TypeID');
var IsEnabled = (TypeID != null);
var LookupDataset = LookupDataControl.DataField.LookupDataset;
ApplyDatasetFilter(LookupDataset, 'TaskTypeID', TypeID, IsEnabled);
}
В ответ получаю "Исключение брошено и не поймано", в чем может быть проблема? Может в фильтре не то применяю?
Нравится
Проверьте существует ли в sq_jobs параметр TaskTypeID и одноименный фильтр
Большое спасибо, теперь я понял как работать с фильтрами =)
Хотелось бы уточнить как проверить наличие в справочнике.
Необходимо, чтобы для типов задач, которые есть в справочнике ds_jobs, он был isvisible = true.
Для остальных isvisible = false.
function edtTypeOnPrepareSelectWindow(LookupDataControl, SelectWindow) { var Dataset = dlData.Dataset; var JobsDataset = Services.GetSingleItemByUSI('ds_Jobs'); JobsDataset.Open(); JobsDataset.Edit(); if(Dataset.Values('TypeID') == JobsDataset.Values('TaskTypeID')) { Dataset.DataFields.ItemsByName('JobID').IsVisible = true; } else { Dataset.DataFields.ItemsByName('JobID').IsVisible = false; } }
Что то похожее может быть. Но это не катит
Олег, в поле типа справочник может быть только одно значение, которое не содержится в справочнике - NULL. Иное значение Вы не сможете выбрать, разве что присвоить запросом вручную, минуя Terrasoft.
Свойство IsVisble есть у поля в карточке, его нет в датасете. Поэтому скрипт будет выглядеть примерно так:
if(!Dataset.Values('TypeID')) { edtJob.IsVisible = true; } else { edtJob.IsVisible = false; }
var Dataset = BaseDBEdit.Dataset; var JobsDataset = Services.GetSingleItemByUSI('ds_Jobs'); JobsDataset.Open(); JobsDataset.Edit(); if(Dataset.Values('TypeID') == JobsDataset.Values('TaskTypeID')) { edtJob.IsVisible = true; } else { edtJob.IsVisible = false; }
А можно ли сделать как нибудь так? Сделать проверку на наличие ID типа задачи в датасете ds_Jobs.
if(Dataset.Values('TypeID') есть в "ds_jobs") { edtJob.IsVisible = true; } else { edtJob.IsVisible = false; }
Здравствуйте Олег
Вы можете пройти циклом по всем записям по определенному полю ds_Jobs. И установить переменную есть ли определенная запись в датасете или нет.
Пример, того как пройтись циклом по датасету
var Dataset = Services.GetNewItemByUSI('ds_jobs'); Dataset.Open(); while(!Dataset.IsEOF) { if ( Dataset.Values('TypeID') == TypeID ) Isfound = true; Dataset.GotoNext(); }
var Dataset = BaseDBEdit.Dataset; var TypeID = Dataset.Values('TypeID'); var JobsDataset = Services.GetNewItemByUSI('ds_jobs'); JobsDataset.Open(); while(!JobsDataset.IsEOF) { if(TypeID == JobsDataset.Values('TaskTypeID')) { Isfound = true; edtJob.IsVisible = true; JobsDataset.GotoNext(); } else { edtJob.IsVisible = false; } }
Сделал так. но программа зависает при открытии окна задачи
var Dataset = BaseDBEdit.Dataset; var TypeID = Dataset.Values('TypeID'); var JobsDataset = Services.GetNewItemByUSI('ds_jobs'); JobsDataset.Open(); while(!JobsDataset.IsEOF) { if(TypeID == JobsDataset.Values('TaskTypeID')) { Isfound = true; edtJob.IsVisible = true; JobsDataset.GotoNext(); } else { edtJob.IsVisible = false; JobsDataset.GotoNext(); } }
Олег, вы объявили Isfound ?
Я предлагаю сначала пройтись по циклу, а потом уже присваивать edtJob свойство видимости т.е
edtJob.IsVisible = Isfound присваивать после того как мы пройдемся по датасету:
Примерный вид :
var Dataset = BaseDBEdit.Dataset; var TypeID = Dataset.Values('TypeID'); var JobsDataset = Services.GetNewItemByUSI('ds_jobs'); JobsDataset.Open(); var Isfound = false; while(!JobsDataset.IsEOF) { if(TypeID == JobsDataset.Values('TaskTypeID')) Isfound = true; JobsDataset.GotoNext(); } edtJob.IsVisible = Isfound;