Добрый день.
Создал новый справочник 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.
[javascript]
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;
}
}
[/javascript]
Что то похожее может быть. Но это не катит
Олег, в поле типа справочник может быть только одно значение, которое не содержится в справочнике - NULL. Иное значение Вы не сможете выбрать, разве что присвоить запросом вручную, минуя Terrasoft.
Свойство IsVisble есть у поля в карточке, его нет в датасете. Поэтому скрипт будет выглядеть примерно так:
[javascript]
if(!Dataset.Values('TypeID'))
{
edtJob.IsVisible = true;
}
else
{
edtJob.IsVisible = false;
}
[/javascript]
[javascript]
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;
}
[/javascript]
А можно ли сделать как нибудь так? Сделать проверку на наличие ID типа задачи в датасете ds_Jobs.
[javascript]
if(Dataset.Values('TypeID') есть в "ds_jobs")
{
edtJob.IsVisible = true;
}
else
{
edtJob.IsVisible = false;
}
[/javascript]
Здравствуйте Олег
Вы можете пройти циклом по всем записям по определенному полю ds_Jobs. И установить переменную есть ли определенная запись в датасете или нет.
Пример, того как пройтись циклом по датасету
[javascript]
var Dataset = Services.GetNewItemByUSI('ds_jobs');
Dataset.Open();
while(!Dataset.IsEOF) {
if ( Dataset.Values('TypeID') == TypeID )
Isfound = true;
Dataset.GotoNext();
}
[/javascript]
[javascript]
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;
}
}
[/javascript]
Сделал так. но программа зависает при открытии окна задачи
[javascript]
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();
}
}
[/javascript]
Олег, вы объявили Isfound ?
Я предлагаю сначала пройтись по циклу, а потом уже присваивать edtJob свойство видимости т.е
edtJob.IsVisible = Isfound присваивать после того как мы пройдемся по датасету:
Примерный вид :
[javascript]
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;
[/javascript]