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

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 18 янв 2012.

  1. lira89

    lira89 Well-Known Member

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

    Вложения:

  2. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    У меня есть несколько вопросиков:
    1) КоличествоЗакладок я так понимаю это количество документов, которые я хочу, чтобы отображались как закладки. А как подсчитать это количество, если это общий журнал и мне нужно только два вида документов?
    2)
    Здесь "ОтборПоВиду" что в нем храниться и где должно присваиваться значение этому отбору? Для чего здесь нужен Админ.Код и что за реквизит Админ, может вы имели ввиду ФакультетАдмин, т.е. код факультета использовать?
    Здесь я так понимаю вы имели ввиду УстановитьОтбор("ФакультетАдмин", ОтборПоВиду));?
    PS: извиняюсь за множество вопросов, просто хочется разобраться в этом вопросе)))
     
  4. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Давайте еще раз:

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

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

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

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

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

    vbs Well-Known Member

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

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Спасибо большое за помощь. Ситуация прояснилась)

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

    Дайнеко Well-Known Member
    1C Team

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

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

Поделиться этой страницей