• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы lira89
  • Дата начала
L

lira89

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

Вложения

  • Безымянный.JPG
    Безымянный.JPG
    35 КБ · Просмотры: 602
Д

Дайнеко

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

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

lira89

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

Дайнеко

Давайте еще раз:

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

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

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

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

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

vbs

Здорово !
Разовью идею для общего случая. Добавим Общий Реквизит типа, например,
АФ (код автора+код фирмы) и, как описано выше, получим отбор по сложному фильтру
 
L

lira89

Спасибо большое за помощь. Ситуация прояснилась)

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

Дайнеко

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!