helpf.pro
Регистрация

v8.2 УП: СКД отбор группировки на форме

akamuza
05.07.2013 11:39Прочитано: 13565
Добрый день.

В СКД имеется отбор для группировки, вывожу его на табличное поле в форме.

Код 1C v 8.2 УП
 
ОтборНоменклатуры = КомпоновщикНастроек.Настройки.Структура[0].Колонки[0].Отбор;
ЭлементОтбор = ЭлементыФормы.ТаблицаОтбораНоменклатура;
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("ОтборКомпоновкиДанных"));
ЭлементОтбор.ТипЗначения = Новый ОписаниеТипов(МассивТипов);
ОтборНоменклатуры.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
ОтборНоменклатуры.ПредставлениеПользовательскойНастройки = "Номенклатура";
ЭлементОтбор.Значение = ОтборНоменклатуры;
ЭлементОтбор.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
ЭлементОтбор.СоздатьКолонки();


Все добавляется, но проблема в том, что при отображении элементов отбора на форме, каждый элемент задваивается, показывается в полном и обычном виде. На скриншоте видно, что я имею в виду

title


Не могу побороть. Может кто-то сталкивался?
Yandex
Возможно, вас также заинтересует
Реклама на портале
akamuza
05.07.2013 12:16Ответ № 1
Поборол так:

Код 1C v 8.2 УП
 
Для Каждого Колонка Из ЭлементОтбор.Колонки Цикл
Если Найти(Колонка.Имя, "Краткого") = 0 ИЛИ Найти(Колонка.Имя, "Локального") > 0 Тогда
Колонка.Видимость = Ложь;
КонецЕсли;
КонецЦикла;


Суть: после создания колонок, перебираю их и оставляю видимыми только нужные. Перед этим пересмотрел список колонок и определил закономерность, что нужно. Это колонки имеющие вхождение "Краткого", но при этом не должно быть вхождения "Локального".

Но как мне кажется - это костыль. Может есть более "правильное" решение?
E_Migachev
05.07.2013 14:07Ответ № 2
а зачем ты программно его добавляешь?, он уже есть 1 раз, + ты программно его добавил = 2 раза
akamuza
05.07.2013 14:37Ответ № 3
Посмотри по коду: я его просто вывожу на форму, а не создаю физически новый элемент
Mokey
05.07.2013 15:08Ответ № 4
Потому что дерево
akamuza
05.07.2013 15:17Ответ № 5
Без дерева - та же фигня, если вы о

ЭлементОтбор.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
E_Migachev
05.07.2013 16:09Ответ № 6
(3) akamuza, не въезжаююю, зачем его выводить? если он сам выводится? когда ты у Таб поля указываешь данные отбор
akamuza
05.07.2013 16:28Ответ № 7
(6) E_Migachev,
Он сам не выводится. Вывести в ТП можно только отбор для всего отчета.

А у меня есть еще и отбор для группировки, который методами интерфейса вывести нельзя.
То есть в реквизите Данные для ТП можно максимум указать КомпоновщикНастроек.Настройки.Отбор

А мне же нужно, чтобы отображался отбор именно для группировки, а это КомпоновщикНастроек.Настройки.Структура[0].Колонки[0].Отбор;

Поэтому приходится делать вручную. Иначе способа нету.

На скриншоте видно эту группировку title
E_Migachev
05.07.2013 19:48Ответ № 8
а выложи файл отчета, посмотрим
akamuza
05.07.2013 22:23Ответ № 9
Выложить смогу уже с понедельника, как на работу доберусь.
Но воспроизвести оч просто.

Создай выборку, к примеру, по справочнику. Добавь структуру отчета "таблица" и там группировку по строкам какаю-нибудь. И для этой группировки создай отбор.
То есть выбираешь группировку, внизу вместо "отчет" выбираешь название той группировки, а потом "Отбор", ну и создаешь отбор.

А теперь попробуй не используя программного кода вывести этот отбор на форму - никак не выйдет. Максимум выведешь отбор для всего отчета, но он пустой.
E_Migachev
08.07.2013 22:14Ответ № 10
(9) akamuza, Сделал по аналогии со следующим решением:
Настройка отчета СКД:
title

При открытии я получаю этот отбор и добавляю его в общие отборы, чтоб было все рядом и вместе
Код 1C v 8.х
 Процедура ПриОткрытии()

//Получим нужный на Отбор ССЫЛКА
ОтборНоменклатуры = КомпоновщикНастроек.Настройки.Структура[0].Строки[0].Отбор;

ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ЭлементОтбора, ОтборНоменклатуры.Элементы[0]);

КонецПроцедуры


Далее дописываю, что если при редактировании поля отбор изменили значение Ссылка, то его надо установить для нашего отбора
Код 1C v 8.х
 Процедура ТПОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ОтборНоменклатуры = КомпоновщикНастроек.Настройки.Структура[0].Строки[0].Отбор.Элементы[0];
//проверим, Редактировали нужный нам параметр или нет
Если Элемент.ТекущиеДанные.ЛевоеЗначение = ОтборНоменклатуры.ЛевоеЗначение Тогда
ОтборНоменклатуры.ПравоеЗначение = Элемент.ТекущиеДанные.ПравоеЗначение;
Элемент.ТекущиеДанные.Использование = Ложь; // Отключим этот отбор, чтоб не мешал
КонецЕсли;
КонецПроцедуры


Результат:
title

Файл обработки, будет работать везде где есть справочник номенклатура: Скачивать файлы может только зарегистрированный пользователь!
akamuza
15.07.2013 12:15Ответ № 11
Это не совсем то. В твоем случае получается, что Отбор группировки становится общим отбором по отчету. А в этом случае будут проблемы с работой отчета.

Дело в том, что в моем случае нужно, чтобы отбор сработал именно на группировку, а не на весь отчет. Поэтому необходимо ТЧ соединить именно с отбором группировки. Общего отбора я даже не использую..

Я твою обработку чуть подправил, внес свои куски кода посмотри.

ОбновитьОтборы() - процедура которая присоединяет к ТЧ именно отбор группировки.

УстановитьВидимостьКолонокОтбора (Колонки) - используется для настройки внешнего вида ТЧ. Попробуй закоментить вызов этой процедуры и увидишь то, с чего начинался мой вопрос: куча лишних полей в ТЧ.
Эти "лишние" поля я победил используя эту процедуру.

ПослеВосстановленияЗначений() - сделано потому, что после восстановления сохраненных значений, отборы группировки работают, но не отображаются на форме. Приходится обновлять ТЧ таким образом.


Скачивать файлы может только зарегистрированный пользователь!
Изменено 15.07.13 12:16:33
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.