На какое событие повесить скрытие полей в зависимости от типа?
Здравствуйте.
Такая проблема.
В карточке инцидента должны отображаться определённые поля в зависимости от типа инцидента.
Как это можно реализовать/где посмотреть примеры?
Спасибо.
Нравится
Здравствуйте.
Создайте функцию:
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; } }
И вызывайте её на OnPrepare окна карточки редактирования. А также на OnDatasetDataChange(DataField) для объекта dlData:
if (DataField.Name == 'TypeID') { hideSomeFields(DataField.ParentDataFields.ParentDataset); }
Нужно решить ту же задачу.
Создал функцию hideSomeFields(Dataset). На событии OnPrepare все отрабатывает, но при выполнении функции на событии OnDatasetDataChange пишет, что 'edtSomeField' - определение отсутствует.
Подскажите, пожалуйста, что можно с этим сделать?
Добрый день, Дмитрий! Можно взглянуть на Ваш код полностью (или сервис)?
Полагаю Вы где-то ошибку допустили, адаптируя приведенный выше пример под свои реалии. При этом на событие OnPrepare ошибок может не быть, если не выполняется условие (Dataset('TypeID') == IncidentTypeID), но реализуемая логика тоже работать, как этого ожидается, не должна.
Код в карточке редактирования:
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); }
и код в датасете
function ds_ChargesOnDatasetDataChange(DataField) { var DataFields = DataField.ParentDataFields; var Dataset = DataFields.ParentDataset; if (DataField.Name == 'ChargesTypeID') { hideSomeFields(DataField.ParentDataFields.ParentDataset); } }
"Молчанов Дмитрий Павлович" написал:и код в датасете
Его надо не в датасете, а тоже в карточке, на событии DataChange датасета карточки.
Дмитрий, какая ошибка возникает?
Вы пишите "при выполнении функции на событии OnDatasetDataChange пишет, что 'edtSomeField' - определение отсутствует" - однако в коде нет обращения к edtSomeField.
Александр верно заметил, логику нужно прописывать в скрипте карточки, а не датасета.
А в скрипте карточки нет же события OnDatasetDataChange. Поэтому делаю в скрипте датасета.
А ошибка возникает следующая: fg1 - Определение отсутствует.
fg1 - это FrameGroup в карточке, который мне нужно скрыть в зависимости от условий
"Молчанов Дмитрий Павлович" написал:А в скрипте карточки нет же события OnDatasetDataChange.
Так создайте. Откройте в дизайнере карточки события её датасета и создайте обработчик нужного события.