Фильтры На Журнал Документов 1с77

lira89

Well-Known Member
12.03.2010
154
0
#1
Здравствуйте. Есть вопрос по фильрации общего журнала. Есть Графа отбора "ФакультетДляОтбора" которая включает два разных документа. Есть общий журнал, в котором стоит отбор по этой графе (ФакультетАдмин - элемент формы, по которому фильтруют данные):
Код:
Если ФакультетАдмин.Выбран()>0 Тогда
УстановитьОтбор("ФакультетДляОтбора", ФакультетАдмин);
ФакультетАдминДляОтбора = ФакультетАдмин;
Иначе
УстановитьОтбор("");
КонецЕсли;
Но возникла такая ситуация, что в данный общий журнал надо добавить закладки и на каждой закладке фильтровать не только по факультету, но и по виду документа, т.е. на каждой вкладке виден документ определенного вида. Вид см. на рисунке.
Насколько я понимаю дважды УстановитьОтбор использовать нельзя. Может кто подскажет, как можно решить этот вопрос штатными средствами 1С без ВК и т.п.?
 

Вложения

Дайнеко

Well-Known Member
19.11.2009
951
0
#2
Я делал. Но трудно это. Можно решить только с таким условие: набор закладок фиксированн.
Тогда
1. закладки создаются не ЗакладкиОтбора(), а вручную
Код:
		ЗакладкиОтбора("", 1);
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.УдалитьВсе();
Для ТекНом = 1 По КоличествоЗакладок Цикл
Форма.Закладки.ДобавитьЗначение(ИмяЗакладки);
КонецЦикла;
где ИмяЗакладки например = Вид()

2. Потом
// Дополнительно отбор
Если ФакультетАдмин.Выбран() = 1 Тогда
УстановитьОтбор("ФакультетАдмин", Формат(Админ.Код, "Ч(0)5.0") +
Форма.Закладки.Получить(ОтборПоВиду));
Иначе
УстановитьОтбор("Факультет", ОтборПоВиду));
КонецЕсли;
 

lira89

Well-Known Member
12.03.2010
154
0
#3
У меня есть несколько вопросиков:
1) КоличествоЗакладок я так понимаю это количество документов, которые я хочу, чтобы отображались как закладки. А как подсчитать это количество, если это общий журнал и мне нужно только два вида документов?
2)
// Дополнительно отбор
Если ФакультетАдмин.Выбран() = 1 Тогда
УстановитьОтбор("ФакультетАдмин", Формат(Админ.Код, "Ч(0)5.0") +
Форма.Закладки.Получить(ОтборПоВиду));
Здесь "ОтборПоВиду" что в нем храниться и где должно присваиваться значение этому отбору? Для чего здесь нужен Админ.Код и что за реквизит Админ, может вы имели ввиду ФакультетАдмин, т.е. код факультета использовать?
Иначе
УстановитьОтбор("Факультет", ОтборПоВиду));
КонецЕсли;
Здесь я так понимаю вы имели ввиду УстановитьОтбор("ФакультетАдмин", ОтборПоВиду));?
PS: извиняюсь за множество вопросов, просто хочется разобраться в этом вопросе)))
 

Дайнеко

Well-Known Member
19.11.2009
951
0
#4
Давайте еще раз:

* Краеугольный момент:
- В обоих документах создать Реквизит строка тип Строка который содержит буковки скомбинированные от
<БуковкаДокумента>+ Администратор.Код. И процедурой ПриЗаписи() их заполнять. Например: А001, Б003
- Создать в конф-ре Отбор "ФакультетАдмин" завязанный на этот реквизит. параметр "Отбирать пустные" - нет галочки

* При Открытии() Создали 2 закладки фиксированные.
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.УдалитьВсе();
Форма.Закладки.ДобавитьЗначение("ВидДокаА", "Его красивое название");
Форма.Закладки.ДобавитьЗначение("ВидДокаБ", "Его красивое название");

* Создаем ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки). В ней
ВидДока = "";
Форма.Закладки.ПолучитьЗначение(НомерЗакладки, ВидДока);
ВидДока - получил значение вида дока. Например "ВидДокаА".
Программа устанавливает нужный отбор по виду дока. Это если не мешает Админ.
УстановитьОтбор(ОтборПоВиду);

А из-за него усложняем этот фрагмент:
Если Админ.Выбран() = 1 Тогда
ПоЧемОтбирать = Лев(ВидДока, 1) + Администратор.Код;
УстановитьОтбор("ФакультетАдмин", ПоЧемОтбирать);
Иначе
УстановитьОтбор(ОтборПоВиду);
КонецЕсли;

* А дальше совершенствуем:
- выделить этот фрагмент в отдельную процедуру и также вызывать после выбора Админ
- Не забыть вызвать при открытии.
- Отреагировать на изменение пользователем интервала:
Процедура ПриУстановкеИнтервала(ДатаНач,ДатаКон)
УстановитьИнтервал(ДатаНач, ДатаКон);
ВводВидОтбора();
КонецПроцедуры
 

vbs

Well-Known Member
18.02.2007
1 708
3
#5
Здорово !
Разовью идею для общего случая. Добавим Общий Реквизит типа, например,
АФ (код автора+код фирмы) и, как описано выше, получим отбор по сложному фильтру
 

lira89

Well-Known Member
12.03.2010
154
0
#6
Спасибо большое за помощь. Ситуация прояснилась)

Только вот одно замечание:
При Открытии() Создали 2 закладки фиксированные.
Форма.ИспользоватьЗакладки(1);
Форма.Закладки.УдалитьВсе();
Форма.Закладки.ДобавитьЗначение("ВидДокаА", "Его красивое название");
Форма.Закладки.ДобавитьЗначение("ВидДокаБ", "Его красивое название");
* Создаем ПриВыбореЗакладки(НомерЗакладки, ЗначениеЗакладки). В ней
ВидДока = "";
Форма.Закладки.ПолучитьЗначение(НомерЗакладки, ВидДока);
ВидДока - получил значение вида дока. Например "ВидДокаА".
Форма.Закладки.ПолучитьЗначение(НомерЗакладки, ВидДока); - возвращает в ВидДока не "ВидДокаА", а "Его красивое название". Т.е. если назвать закладку совсем по-другому, чем называется сам документ, то фильтр не сработает (теряем первую букву), потому что ВидДока - "идентификатор переменной, в которой возвращается символьное представление получаемого значения". В такой ситуации я так понимаю, надо еще учитывать, как правильно назвать закладку, чтобы получить нужные символы для отбора.
 

Дайнеко

Well-Known Member
19.11.2009
951
0
#7
Таки, Да! Дядя неправильно написал параметры. Ну што тут скажишь?
Форма.Закладки.ПолучитьЗначение(НомерЗакладки, ВидДока);
Согласно описанию метода "ПолучитьЗначение()" во второй параметр заполнит представление.

Не будем дурить себе в голову! Напишем так:
ВидДока = Форма.Закладки.ПолучитьЗначение(НомерЗакладки,);