Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 03:40

Количество строк по отбору динамического списка и доступность элемента формы.

Автор oooo800, 05 мар 2022, 16:01

0 Пользователей и 1 гость просматривают эту тему.

oooo800

Платформа 8.3.19.1467, самописная конфигурация, УФ.
Справочник - "Номенклатура"; форма списка с элементами формы "таблица формы" с реквизитами формы "динамический список" =  "Дерево" и "Список".
Оба реквизиты ссылаются на одну и ту же основную таблицу "Справочник.Номенклатура", соответственно, у "Дерево" - отображение в виде дерева, у "Список" - отображение в виде иерархического списка.

В "Дерево" отображаются только группы, в "Список" только элементы, которые относятся к группе, на которой фокус на "Дерево" .
Спасибо добрым людям с этого форума, натолкнули на решение.
Делаю отбор динамического списка, правда не в форме, а в обработчике формы "ПриСозданииНаСервере"
   Отбор = Список.Отбор;
Отбор.Элементы.Очистить();

ГруппаОтбора = Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ГруппаОтбора.Представление = "Программный отбор";

ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Родитель");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;

ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;

и в обработчике элемента "Дерево" "ПриАктивизацииЯчейки"
Отбор = Список.Отбор.Элементы[0].Элементы[0];
Отбор.ПравоеЗначение = Элементы.Дерево.ТекущаяСтрока;
На что и натолкнули форумчане.
Но мне надо получить количество отобранных строк в "Список", при позиционировании на какой-то группе в "Дерево" .
И, если в "Списрк" их ноль - делать
Элементы.Список.Доступность = Ложьесли > 0,
Элементы.Список.Доступность = Истина
Подскажете оптимальный вариант в частности, и вариант вообще ?

Решил попробовать такой вариант:
В обработчике "ПриПолученииДанныхНаСервере"
получаю количество строк
Строки.Количество();
Хотел записать в реквизит формы, но из контекста &НаСервереБезКонтекста этого не получается записать.

Условное оформление пока не понимаю как применить ко всему элементу.



LexaK

oooo800, а в принципе зачем вам блокировать список, если в нем 0 элементов (по отбору по родителю из дерева)
и так ни чего нельзя сделать в списке

но если вы так любите все держать под строгим контролем, то в том же событии ПриАктивизации строки дерева,
добавьте одну команду и функцию проверки Родителя на наличие (именно) элементов, вот пример (свои имена реквизитов подставьте)
&НаКлиенте
Процедура ДеревоПриАктивизацииСтроки(Элемент)
лкОтбор = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Элементы[0];
лкОтбор.ПравоеЗначение = элементы.Дерево.ТекущаяСтрока;
Элементы.Список.Доступность = ПроверитьРодителя(элементы.Дерево.ТекущаяСтрока);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПроверитьРодителя(прРодитель)
//здесь написать запрос
Результат = Запрос.Выполнить();
Возврат Не Результат.Пустой();
КонецФункции
если помогло нажмите: Спасибо!

oooo800

Цитата: LexaK от 05 мар 2022, 16:54а в принципе зачем вам блокировать список, если в нем 0 элементов
Иначе, при позиционировании между "Дерево" и "Список" на одной строке - а по сути, пустая строка в списке = спозиционированной строке с фокусом на дереве, не срабатывает "ПриАктивизации..." и кнопки (нужные) не "прячутся".

Такой вариант, предложенный Вами, рассматривал, только &НаСервере, но хотелось бы минимизировать количество серверных вызовов.

Пока, временно, но думаю, оставить или нет, делаю, на &Клиенте так:
Элементы.Список.Обновить();и потом
Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда
... доступность = Истина;
Иначе
... доступность = ложь;
Причем это работает. В принципе, устраивает, только сильно видны "блимканья" заголовков таблицы формы списка, видать, при обновлении.
Ну и, так понимаю, все равно в "процессе" обновления идет серверный вызов.

Возможно из ПриПолученииДанныхНаСервере вызвать процедуру &НаСервере, в которую, в качестве параметра будет передаваться количество строк и в которой будет запись в реквизит формы ?

Похожие темы (5)

Рейтинг@Mail.ru

Поиск