Скрытие поля в карточке в зависимости от типа на примере Отрасли в Контрагенте
1. Откройте сервис карточки окна редактирования контрагента wnd_AccountEdit;
2. Выберите поле, Которое планируется скрывать в зависимости от типа, и скопируйте его название:
По имени поля мы будем обращаться к нему из скрипта, меняя свойство IsEnabled:
3. Откройте запрос справочника Тип контрагента sq_AccountType.
Нажмите просмотр запроса
Затем выполнить запрос:
В окне Результаты мы получим список идентификаторов, по которым мы будем проверять.
Например, если на нужно показывать поле только для типа Партнер, программный код будет выглядеть следующим образом:
edtField.IsEnabled = true;
edtField.IsVisible = true;
}else{
edtField.IsEnabled = false;
edtField.IsVisible = false;
}
4. Вставлять данный программный код нужно в двух местах:
- на открытие карточки
- на изменение значения поля Тип
Откройте скрипт карточки редактирования контрагента scr_AccountEdit и найдите функцию function wnd_AccountEditOnPrepare(Window)
В конец функции вставьте следующий программный код:
edtField.IsEnabled = true;
edtField.IsVisible = true;
}else{
edtField.IsEnabled = false;
edtField.IsVisible = false;
}
Найдите функцию function dlDataOnDatasetDataChange(DataField) и добавьте в нее следующий программный код:
if (Dataset('AccountTypeID') == '{2229B3B7-9210-4B3A-AAAD-2A4168678CA1}'){
edtField.IsEnabled = true;
edtField.IsVisible = true;
}else{
edtField.IsEnabled = false;
edtField.IsVisible = false;
}
}
5. Сохраните и закройте скрипт. Перезапустите Terrasoft.
В результате поле Отрасль будет отображаться только для контрагентов с типом Партнер.
GUID хорошо выносить в константы (scr_Consts).
Кроме IsVisible и IsEnabled может понадобиться edtField.DataField.IsRequired.
Согласен с Александром и для повышения читабельности кода использовать конструкцию типа:
... edtField.IsVisible = Dataset('AccountTypeID') == '{222...8CA1}'; edtField.IsEnabled = Dataset('AccountTypeID') == '{222...8CA1}'; ...
+1 к предыдущему, но ещё я в декоративных целях добавляю скобки:
edtField.IsVisible = (Dataset('AccountTypeID') == '{222...8CA1}');
Это повышает читаемость, особенно в сложных условиях:
edtField.IsVisible = (Dataset('AccountTypeID') == '{222...8CA1}') || (Dataset('AccountTypeID') == '{333...8CB2}')
Коллеги, благодарю!
В случае, если значений много, действительно гораздо функциональнее будет такая конструкция :)