8.х Фильтр документов

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Семен Сосницкий, 10 ноя 2014.

  1. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Добрый день, господа и дамы. Есть вопрос. Стоит следующая задача: есть некий документ, в котором есть, например какой-то реквизит с булевым типом данных. Ну в общем прямо скажу, чтобы не запутаться - документ это некая заявка, реквизит - "согласование главного инженера". После согласования главного инженера заявка попадает на согласование к директору. И вот задача стоит следующая - нужно, чтобы в списке документов у директора отображались только те заявки, которые уже согласованы с главным инженером. Реально ли это реализовать? То есть процесс я себе представляю следующим образом - при запуске система смотрит имя пользователя (это уже реализовано), и если имя "Директор", то она выводит в списке заявок только те, в которых булевой переменной "согласование главного инженера" стоит "истина". Но вот как можно вообще реализовать этот фильтр?
    Последнее редактирование: 10 ноя 2014
  2. saha25
    Offline

    saha25 Опытный в 1С

    Регистрация:
    30 окт 2007
    Сообщения:
    95
    Симпатии:
    3
    Баллы:
    29
    В отборе списка документов установить "согласование главного инженера" = Истина, вопрос собственно какой код нужно написать? Примерно такой:
    Код:
            ЭО=Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
            ЭО.Использование=Истина;
            ЭО.ПравоеЗначение=Истина;
            ЭО.ЛевоеЗначение= Новый ПолеКомпоновкиДанных("Согласовано");
    
    где Список - имя реквизита, который отображает список документов, "Согласовано" - имя вашего поля, которое отвечает за галку "Согласовано"
    Последнее редактирование: 10 ноя 2014
  3. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    saha25, благодарю! А где этот код должен писаться, в каком модуле?
  4. saha25
    Offline

    saha25 Опытный в 1С

    Регистрация:
    30 окт 2007
    Сообщения:
    95
    Симпатии:
    3
    Баллы:
    29
    Да, я не уточнил режим работы 1С, этот код для управляемых форм. Писать нужно в форму списка документа в процедуру "ПриСозданиинаСервере"
  5. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое!
  6. saha25
    Offline

    saha25 Опытный в 1С

    Регистрация:
    30 окт 2007
    Сообщения:
    95
    Симпатии:
    3
    Баллы:
    29
    Если режим работы обычный, то код такой:
    Код:
        ЭО=ДокументСписок.Отбор.Найти("Согласовано");
    ЭО.ВидСравнения=ВидСравнения.Равно;
    ЭО.Использование=Истина;
    ЭО.Значение=Истина;
    
    Писать в форму списка документа в процедуру "ПриОткрытии"
  7. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Ругается на 1 строчку: Метод объекта не обнаружен (Найти)
  8. Dragnir
    Offline

    Dragnir Новичок в 1С

    Регистрация:
    22 окт 2014
    Сообщения:
    39
    Симпатии:
    8
    Баллы:
    4
    Может конечно не в тему... Но для решения таких задач разработчики платформы придумали механизм бизнес-процессов.
    Классная штука ;)
  9. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    Чего вы тут кодите? Всё уже написано.
    "Все действия" - "Настроить список" - вкладка "Отбор"
  10. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Он не запоминает отбор и так придется делать каждый раз, что директору вряд ли понравится.
  11. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Плюс нужно чтобы было условие "или" между значениями реквизитов, а если сделать все встроенным отбором, то он будет работать через "и".
  12. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Разобрался с программным отбором, но как я понял, это не совсем то, что мне нужно. Мне необходима фильтрация по двум булевым переменным - если одна равна истине ИЛИ другая равна истине, то документ нужно вывести в форму списка. Но как это реализовать?
  13. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Динамическим списком, в запросе необходимое условие, и все. Или форма обычная ?
  14. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Подскажите, в чем ошибка?
    Код:
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
       
        ГруппаОтбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
        ГруппаОтбора.Использование = Истина;
        ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
        ГруппаОтбора.Представление = "Программный отбор";
       
    
        ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.Родитель = ГруппаОтбора;
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СогласованиеДиректораПоПроизводству");
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.Использование = Истина;
        ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
        ЭлементОтбора.ПравоеЗначение = Истина;
        ЭлементОтбора.Представление = "Программный отбор";
    
        ЭлементОтбора2 = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора2.Родитель = ГруппаОтбора;
        ЭлементОтбора2.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СогласованиеГлавногоИнженера");
        ЭлементОтбора2.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора2.Использование = Истина;
        ЭлементОтбора2.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
        ЭлементОтбора2.ПравоеЗначение = Истина;
        ЭлементОтбора2.Представление = "Программный отбор";
    КонецПроцедуры
    
    Ошибка: Поле объекта недоступно для записи (Родитель).
  15. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    А вы понимаете что такое в отборе родитель ?
  16. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Все, разобрался, родитель вообще не нужен.
    --- Объединение сообщений, 24 ноя 2014 ---
    Если честно - нет. Не могли бы объяснить?

    А так, нужно было только поправить
    Код:
     ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    на
    Код:
    ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    
    и все заработало.
  17. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    В условии можно создавать несколько групп условий.
  18. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    То есть сыном группы может быть только группа, а элемент отбора - нет?
  19. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Вы изначально группу не создавали :), вот и родителя нет.
  20. TopicStarter Overlay
    Семен Сосницкий
    Offline

    Семен Сосницкий Опытный в 1С

    Регистрация:
    21 июл 2014
    Сообщения:
    163
    Симпатии:
    0
    Баллы:
    26
    Что-то я совсем запутался. Как не создавал? А вот это что?
    Код:
    ГруппаОтбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    --- Объединение сообщений, 24 ноя 2014 ---
    И еще вопросик, допустим мне нужно будет эту фильтрацию сбросить по нажатии какой-либо кнопки, как это делается?
    Код:
    Для Каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
          Если ЭлементОтбора.Представление = "Программный отбор" Тогда
             Список.Отбор.Элементы.Удалить(ЭлементОтбора);
    
          КонецЕсли;
    
    Так пойдет?
    Последнее редактирование: 24 ноя 2014

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