gifts2017

Отображение только "своих" элементов в форме списка подчиненного справочника при отключении иерархии

Опубликовал Юрий (1с2с) в раздел Программирование - Практика программирования

В форме списка подчиненного справочника при отключении иерархии отображается весь его состав.

В некоторых случаях это неудобно...

Предлагается следующий вариант решения:

в модуле формы списка подчиненного справочника добавить две предопределенные процедуры следующего содержания:

 

//***********************************
Процедура ПриСменеИерархии(Способ)
      УстановитьОтбор(,);
      Если Способ = 0 Тогда
            ТекВладелец = ТекущийЭлемент().Владелец;
            Список = СоздатьОбъект("СписокЗначений");
            Спр = СоздатьОбъект("Справочник." + Вид());
            Спр.ИспользоватьВладельца(ТекВладелец);
            Спр.ВыбратьЭлементы();
            Пока Спр.ПолучитьЭлемент() = 1 Цикл
                  Список.ДобавитьЗначение(Спр.ТекущийЭлемент());
            КонецЦикла;
            ИспользоватьСписокЭлементов(Список);
      Иначе
            ИспользоватьСписокЭлементов();
      КонецЕсли;
КонецПроцедуры

//***********************************
Процедура ПриВыбореВладельца(Элемент)
      УстановитьОтбор(,);
      ИерархическийСписок(1); 
      ИспользоватьСписокЭлементов();
КонецПроцедуры

 

можно ещё в процедуре ПриОткрытии() добавить:

ИерархическийСписок(1);

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Андрей К. (Andzhej) 05.03.11 16:29
Еще можно запретить отключать иерархию в подчиненном справочнике.

Процедура ПриСменеИерархии(Способ)
      УстановитьОтбор(,);
      Если Способ = 1 Тогда
         СтатусВозврата(0);
     .....
...Показать Скрыть
2. Епрст (Ёпрст) 06.03.11 09:59
Вся поделка заменяется 1 строчкой кода:
ИерархическийСписок(1,0);
3. Юрий (1с2с) 06.03.11 14:27
(1), (2) не равноценно..., задача состояла именно в том, чтобы не запретить, а отобразить...
4. Сергей Белоус (seakuban) 06.03.11 14:34
Нормально решение. Варианция использования не всем известного метода ИспользоватьСписокЭлементов(). Конечно при использовании такого метода стоит иметь в виду что ИспользоватьСписокЭлементов() - это нединамический фильтр и соответсвенно обновления списка элементов (если во время того когда на экране висит эта форма в справочнике другой пользователь создает элемент) не произойдет
5. Сергей Белоус (seakuban) 06.03.11 14:37
+4 Ну и еще так...к слову. Если автор надумает использовать метод ИспользоватьСписокЭлементов() для других целей - например фильтр по аналогам, по остаткам (в форме подбора к примеру) то следует иметь в виду что по элементам отфильтрованным этим фильтром интерактивный поиск работает медленно. Возможно потому что в этом случае для поиска движок 1С не может использовать индексы
6. Андрей К. (Andzhej) 07.03.11 00:05
У меня была задача, сортировать + отфильтровать список товаров по нескольким реквизитам сразу, приходилось использовать ИспользоватьСписокЭлементов(), т.к. 1С 7.7 стандартно сортирует/фильтрует только по одному реквизиту.
Прикол в том, что после использования метода ИспользоватьСписокЭлементов("список"), возвратится к динамичеким системным фильтрам невозвожно. Пришлось переоткрывать для этого форму.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа