Здравствуйте.
Такая проблема.
В карточке инцидента должны отображаться определённые поля в зависимости от типа инцидента.
Как это можно реализовать/где посмотреть примеры?
Спасибо.
Нравится
Здравствуйте.
Создайте функцию:
[javascript]
function hideSomeFields(Dataset)
{
var IncidentTypeID = '{paste_ID_here}';
if (Dataset('TypeID') == IncidentTypeID)
{
edtSomeField.IsVisible = true;
edtSomeField1.IsVisible = false;
edtSomeField.IsEnabled = false;
}
else
{
edtSomeField.IsVisible = false;
edtSomeField1.IsVisible = true;
edtSomeField.IsEnabled = true;
}
}
[/javascript]
И вызывайте её на OnPrepare окна карточки редактирования. А также на OnDatasetDataChange(DataField) для объекта dlData:
[javascript]
if (DataField.Name == 'TypeID')
{
hideSomeFields(DataField.ParentDataFields.ParentDataset);
}
[/javascript]
Нужно решить ту же задачу.
Создал функцию hideSomeFields(Dataset). На событии OnPrepare все отрабатывает, но при выполнении функции на событии OnDatasetDataChange пишет, что 'edtSomeField' - определение отсутствует.
Подскажите, пожалуйста, что можно с этим сделать?
Добрый день, Дмитрий! Можно взглянуть на Ваш код полностью (или сервис)?
Полагаю Вы где-то ошибку допустили, адаптируя приведенный выше пример под свои реалии. При этом на событие OnPrepare ошибок может не быть, если не выполняется условие (Dataset('TypeID') == IncidentTypeID), но реализуемая логика тоже работать, как этого ожидается, не должна.
Код в карточке редактирования:
[javascript]
function hideSomeFields(Dataset)
{
if (Dataset('ChargesTypeID') != null)
{
fg1.IsVisible = true;
}
else
{
fg1.IsVisible = false;
}
}
function wnd_ChargesEditOnPrepare(Window) {
wnd_BaseDBEditOnPrepare(Window);
var Dataset = dlData.Dataset;
hideSomeFields(Dataset);
}
[/javascript]
и код в датасете
[javascript]
function ds_ChargesOnDatasetDataChange(DataField) {
var DataFields = DataField.ParentDataFields;
var Dataset = DataFields.ParentDataset;
if (DataField.Name == 'ChargesTypeID')
{
hideSomeFields(DataField.ParentDataFields.ParentDataset);
}
}
[/javascript]
"Молчанов Дмитрий Павлович" написал:и код в датасете
Его надо не в датасете, а тоже в карточке, на событии DataChange датасета карточки.
Дмитрий, какая ошибка возникает?
Вы пишите "при выполнении функции на событии OnDatasetDataChange пишет, что 'edtSomeField' - определение отсутствует" - однако в коде нет обращения к edtSomeField.
Александр верно заметил, логику нужно прописывать в скрипте карточки, а не датасета.
А в скрипте карточки нет же события OnDatasetDataChange. Поэтому делаю в скрипте датасета.
А ошибка возникает следующая: fg1 - Определение отсутствует.
fg1 - это FrameGroup в карточке, который мне нужно скрыть в зависимости от условий
"Молчанов Дмитрий Павлович" написал:А в скрипте карточки нет же события OnDatasetDataChange.
Так создайте. Откройте в дизайнере карточки события её датасета и создайте обработчик нужного события.