Публикация

Скрытие поля в карточке в зависимости от типа на примере Отрасли в Контрагенте

1. Откройте сервис карточки окна редактирования контрагента wnd_AccountEdit;
2. Выберите поле, Которое планируется скрывать в зависимости от типа, и скопируйте его название:

01

По имени поля мы будем обращаться к нему из скрипта, меняя свойство IsEnabled:

edtField.IsEnabled = true;

3. Откройте запрос справочника Тип контрагента sq_AccountType.
Нажмите просмотр запроса

02

Затем выполнить запрос:

03

В окне Результаты мы получим список идентификаторов, по которым мы будем проверять.

Например, если на нужно показывать поле только для типа Партнер, программный код будет выглядеть следующим образом:

if (Dataset('AccountTypeID') ==  '{2229B3B7-9210-4B3A-AAAD-2A4168678CA1}'){
edtField.IsEnabled = true;
edtField.IsVisible = true;
}else{
edtField.IsEnabled = false;
edtField.IsVisible = false;
}

4. Вставлять данный программный код нужно в двух местах:
- на открытие карточки
- на изменение значения поля Тип

Откройте скрипт карточки редактирования контрагента scr_AccountEdit и найдите функцию function wnd_AccountEditOnPrepare(Window)

04

В конец функции вставьте следующий программный код:

               if (dlData.Dataset('AccountTypeID') ==  '{2229B3B7-9210-4B3A-AAAD-2A4168678CA1}'){
                               edtField.IsEnabled = true;
                               edtField.IsVisible = true;
               }else{
                               edtField.IsEnabled = false;
                               edtField.IsVisible = false;
               }

06

Найдите функцию function dlDataOnDatasetDataChange(DataField) и добавьте в нее следующий программный код:

               if(FieldName == 'AccountTypeID'){
                               if (Dataset('AccountTypeID') ==  '{2229B3B7-9210-4B3A-AAAD-2A4168678CA1}'){
                                               edtField.IsEnabled = true;
                                               edtField.IsVisible = true;
                               }else{
                                               edtField.IsEnabled = false;
                                               edtField.IsVisible = false;
                               }
               }

07

5. Сохраните и закройте скрипт. Перезапустите Terrasoft.

В результате поле Отрасль будет отображаться только для контрагентов с типом Партнер.

Нравится

Поделиться

4 комментария

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}')

Коллеги, благодарю!
В случае, если значений много, действительно гораздо функциональнее будет такая конструкция :)

Показать все комментарии