Добрый день!

Подскажите пожалуйста, как сделать так, чтобы при отсутствии записей в детали сворачивала бы ее?

Прикрепленные файлы

Нравится

1 комментарий
Лучший ответ

Установите значение class для вашей детали в значение class="ts-controlgroup detail grid-detail ts-controlgroup-collapsed", можно сделать через DOM

Установите значение class для вашей детали в значение class="ts-controlgroup detail grid-detail ts-controlgroup-collapsed", можно сделать через DOM

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

Доброго времени суток!
Нужна информация о том способна ли BPM на сие деяние.
Итак возьмем раздел Контрагенты.

В нем мы создали деталь - "Команда контрагента".
В этой детали находятся пользователи которые относятся к данному контрагенту.

Итак вопрос, каким образом можно ограничить количество полей/сущностей на карточке по условию, что пользователь не находится в команде контрагента?
Необходимо чтобы в карточке отображалось максимум 3-4 поля и 1 вкладка - Основная информация и самое главное, необходимо чтобы как только грузится карточка не было никаких задержек.

У кого какие есть представления по поводу данной проблемы, коллеги?

На данный момент скрытие происходит при вызове моей функции, и видимость основных перводоступных полей зависит от аттрибута.

        hideAccountCard: function(_item) {
                if (_item !== 1) {
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=1]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=2]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=3]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=4]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=5]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=6]").setStyle("display", "none");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=6]").setStyle("display", "none");
                        this.showInformationDialog("Вы не входите в команду контрагента!");
                } else {
                        his.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=1]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=2]").setStyle("display", "");
                        his.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=3]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=4]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=5]").setStyle("display", "");
                        this.Ext.select("#AccountPageV2TabsTabPanel-tabpanel-items li[data-item-index=6]").setStyle("display", "");
                                }
                        },

Нравится

11 комментариев

а чем вам фильтрация записей в детали-то не угодила? esq долго выполняется?

Просто от момента открытия карточки до времени скрытия 2-3 секунды.
Такой фриз клиента не устраивает.
Вот я и ищу другие выходы из ситуации.

Хммм... это вообще ненормально. У меня у одного клиента такое настроено, так изменение мнговенное почти. Фриз более полсекунды явно свидетельствует о наличии проблем технического свойства. Онсайт?

"Дмитрий Степанов" написал: У меня у одного клиента такое настроено, так изменение мнговенное почти

А может, вы настраивали еще, чтобы эти пользователи не могли эти поля вытащить в колонки реестра?

"Владимир Соколов" написал:
Дмитрий Степанов пишет:

У меня у одного клиента такое настроено, так изменение мнговенное почти

А может, вы настраивали еще, чтобы эти пользователи не могли эти поля вытащить в колонки реестра?


Нет, такой настройки пока не было, просто в методе где происходит скрытие не мало логики накручено. И то что через Ext скрывается буквально моментально, а вот по атрибутам страдает.

"Владимир Соколов" написал:
Дмитрий Степанов пишет:

У меня у одного клиента такое настроено, так изменение мнговенное почти

А может, вы настраивали еще, чтобы эти пользователи не могли эти поля вытащить в колонки реестра?

я отключал сам пункт меню с этой возможностью :)

"Дмитрий Степанов" написал:я отключал сам пункт меню с этой возможностью :)

Я с точки зрения безопасности данных. Всё равно у пользователей останется возможность отфильтровать по этим полям список...

"Владимир Соколов" написал:

Я с точки зрения безопасности данных. Всё равно у пользователей останется возможность отфильтровать по этим полям список...

Если изменить режим использования поля на уровне объекта на "Никогда", то после очистки кеша по полю нельзя будет отфильтровать и отобразить его в реестре раздела.

"Демьяник Алексей" написал:Если изменить режим использования поля на уровне объекта на "Никогда", то после очистки кеша по полю нельзя будет отфильтровать и отобразить его в реестре раздела.

Вопрос в комбинации доступа к записи и полям. То есть, если пользователь является ответственным по контрагенту, то он видит все поля. В противном случае - только название и код...
Так что, на уровне объекта это не решить

Касательно оригинального топика, если вы о задержке между отображением карточки со всеми полями, и моментом когда те которые необходимо скрыть, будут скрыты. То стоит пойти обратным путем, и изначально, в схеме страницы видимость полей прикрепить к атрибутам которые изначально false, а уже выполнив всю необходимую логику и проверки, делать поля видимыми, для тех, для кого они должны быть видимыми.
Но, возможно я не доконца понял сокрытие чего вас интересует. Полей на карточке, закладок на карточке, деталей на карточке, или строк в детали.

Максим Шевченко, кстати дельный совет.
Кажется это решит проблему, спасибо)

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

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

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

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