Имя: Пароль:
1C
1С v8
Ограничение отбора ДС по нескольким параметрам
0 Юзер123
 
01.09.23
10:35
Доброго времени.
Есть Список документов Требование накладная.
Для пользователей с ограниченными правами там установлен программно отбор по ответственному.

    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ответственный");
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = Пользователи.ТекущийПользователь();

Сейчас поставили задачу добавить в список накладных еще документы где ЦФО получатель.ФизЛицо -  ФизЛицо текущего пользователя.

И тут встал вопрос.
Первый отбор исключает второй.

Делаю через изменение запроса ДС. С Объединением.

1 часть с отбором по ответственному
2 часть с отбором по физ лицу.

Делаю все это в процедуре ПриСозданииНаСервере

Запрос полностью скопирован из Типового запроса ДС.
И в Конструкторе запроса все хорошо.  К Документам где ответственный текущий пользователь добавляются документы где Физ лицо текущего пользователя совпадает с ФизЛицом ЦФО получателя.

Но ДС под пользователем формируется криво.  Не так как Типовой.
Пропадает 1 столбец..

Состояние Внутр. ЭДО

Типовой запрос
ВЫБРАТЬ
    ДокументТребованиеНакладная0315006.Ссылка,
    ДокументТребованиеНакладная0315006.ВерсияДанных,
    ДокументТребованиеНакладная0315006.ПометкаУдаления,
    ДокументТребованиеНакладная0315006.Номер,
    ДокументТребованиеНакладная0315006.Дата,
    ДокументТребованиеНакладная0315006.Проведен,
    ДокументТребованиеНакладная0315006.Организация,
    ДокументТребованиеНакладная0315006.ИФО,
    ДокументТребованиеНакладная0315006.ПодразделениеОтправитель,
    ДокументТребованиеНакладная0315006.ЦМООтправитель,
    ДокументТребованиеНакладная0315006.Комментарий,
    ДокументТребованиеНакладная0315006.ЦМОПолучатель,
    ДокументТребованиеНакладная0315006.ПодразделениеПолучатель,
    ДокументТребованиеНакладная0315006.КорСчет,
    ДокументТребованиеНакладная0315006.ВидПеремещения,
    ДокументТребованиеНакладная0315006.МоментВремени,
    ДокументТребованиеНакладная0315006.СчетУчета,
    ДокументТребованиеНакладная0315006.ИдентификаторПечатнойФормы КАК ИдентификаторПечатнойФормы,
    ДокументТребованиеНакладная0315006.ПредставлениеПечатнойФормы КАК ПредставлениеПечатнойФормы,
    ОперацииДокументов.СуммаОперации,
    ОперацииДокументов.Операция,
    ВЫБОР
        КОГДА ОперацииДокументов.ЕстьПроводки ЕСТЬ NULL
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ОперацияНеВыбрана)
        КОГДА НЕ ОперацииДокументов.ЕстьПроводки
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиОтсутствуют)
        КОГДА ЕСТЬNULL(ОперацииДокументов.ДокументСторнирован, ЛОЖЬ) = ИСТИНА
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ДокументСторнирован)
        КОГДА ЕСТЬNULL(ОперацииДокументов.РучнаяКорректировка, ЛОЖЬ) = ИСТИНА
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиИзмененыВручную)
        КОГДА ЕСТЬNULL(ОперацииДокументов.ИсправлениеОшибки, ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ПустаяСсылка)) В (ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаПрошлогоГода), ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаРанееПрошлогоГода))
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ИсправлениеОшибки)
        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиСформированы)
    КОНЕЦ КАК СостояниеОперации,
    ВЫБОР
        КОГДА ОперацииДокументов.ЕстьПроводки ЕСТЬ NULL
            ТОГДА 0
        КОГДА НЕ ОперацииДокументов.ЕстьПроводки
            ТОГДА 1
        КОГДА ЕСТЬNULL(ОперацииДокументов.ДокументСторнирован, ЛОЖЬ) = ИСТИНА
            ТОГДА 4
        КОГДА ЕСТЬNULL(ОперацииДокументов.РучнаяКорректировка, ЛОЖЬ) = ИСТИНА
            ТОГДА 3
        КОГДА ЕСТЬNULL(ОперацииДокументов.ИсправлениеОшибки, ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ПустаяСсылка)) В (ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаПрошлогоГода), ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаРанееПрошлогоГода))
            ТОГДА 5
        ИНАЧЕ 2
    КОНЕЦ КАК СостояниеОперацииКод,
    ДокументТребованиеНакладная0315006.Ответственный,
    ВЫБОР
        КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
            ТОГДА 0
        КОГДА НаличиеФайлов.ЕстьФайлы
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК ЕстьФайлы,
    СостоянияЭД.ПредставлениеСостояния КАК СостояниеЭДО,
    NULL КАК СостояниеОригиналаПервичногоДокумента,
    ИСТИНА КАК ОбщееСостояние,
    0 КАК СостояниеОригиналПолучен
ИЗ
    Документ.ТребованиеНакладная0315006 КАК ДокументТребованиеНакладная0315006
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭД
        ПО (СостоянияЭД.СсылкаНаОбъект = ДокументТребованиеНакладная0315006.Ссылка)}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОперацииДокументов КАК ОперацииДокументов
        ПО ДокументТребованиеНакладная0315006.Ссылка = ОперацииДокументов.Документ}
        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
        ПО ДокументТребованиеНакладная0315006.Ссылка = НаличиеФайлов.ОбъектСФайлами}



Мой запрос

    Список.Отбор.Элементы.Очистить();
    
    Список.ТекстЗапроса = "ВЫБРАТЬ
                          |    ДокументТребованиеНакладная0315006.Ссылка КАК Ссылка,
                          |    ДокументТребованиеНакладная0315006.ВерсияДанных КАК ВерсияДанных,
                          |    ДокументТребованиеНакладная0315006.ПометкаУдаления КАК ПометкаУдаления,
                          |    ДокументТребованиеНакладная0315006.Номер КАК Номер,
                          |    ДокументТребованиеНакладная0315006.Дата КАК Дата,
                          |    ДокументТребованиеНакладная0315006.Проведен КАК Проведен,
                          |    ДокументТребованиеНакладная0315006.Организация КАК Организация,
                          |    ДокументТребованиеНакладная0315006.ИФО КАК ИФО,
                          |    ДокументТребованиеНакладная0315006.ПодразделениеОтправитель КАК ПодразделениеОтправитель,
                          |    ДокументТребованиеНакладная0315006.ЦМООтправитель КАК ЦМООтправитель,
                          |    ВЫРАЗИТЬ(ДокументТребованиеНакладная0315006.Комментарий КАК СТРОКА(250)) КАК Комментарий,
                          |    ДокументТребованиеНакладная0315006.ЦМОПолучатель КАК ЦМОПолучатель,
                          |    ДокументТребованиеНакладная0315006.ПодразделениеПолучатель КАК ПодразделениеПолучатель,
                          |    ДокументТребованиеНакладная0315006.КорСчет КАК КорСчет,
                          |    ДокументТребованиеНакладная0315006.ВидПеремещения КАК ВидПеремещения,
                          |    ДокументТребованиеНакладная0315006.МоментВремени КАК МоментВремени,
                          |    ДокументТребованиеНакладная0315006.СчетУчета КАК СчетУчета,
                          |    ДокументТребованиеНакладная0315006.ИдентификаторПечатнойФормы КАК ИдентификаторПечатнойФормы,
                          |    ДокументТребованиеНакладная0315006.ПредставлениеПечатнойФормы КАК ПредставлениеПечатнойФормы,
                          |    ОперацииДокументов.СуммаОперации КАК СуммаОперации,
                          |    ОперацииДокументов.Операция КАК Операция,
                          |    ВЫБОР
                          |        КОГДА ОперацииДокументов.ЕстьПроводки ЕСТЬ NULL
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ОперацияНеВыбрана)
                          |        КОГДА НЕ ОперацииДокументов.ЕстьПроводки
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиОтсутствуют)
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ДокументСторнирован, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ДокументСторнирован)
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.РучнаяКорректировка, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиИзмененыВручную)
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ИсправлениеОшибки, ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ПустаяСсылка)) В (ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаПрошлогоГода), ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаРанееПрошлогоГода))
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ИсправлениеОшибки)
                          |        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиСформированы)
                          |    КОНЕЦ КАК СостояниеОперации,
                          |    ВЫБОР
                          |        КОГДА ОперацииДокументов.ЕстьПроводки ЕСТЬ NULL
                          |            ТОГДА 0
                          |        КОГДА НЕ ОперацииДокументов.ЕстьПроводки
                          |            ТОГДА 1
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ДокументСторнирован, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА 4
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.РучнаяКорректировка, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА 3
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ИсправлениеОшибки, ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ПустаяСсылка)) В (ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаПрошлогоГода), ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаРанееПрошлогоГода))
                          |            ТОГДА 5
                          |        ИНАЧЕ 2
                          |    КОНЕЦ КАК СостояниеОперацииКод,
                          |    ДокументТребованиеНакладная0315006.Ответственный КАК Ответственный,
                          |    ВЫБОР
                          |        КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
                          |            ТОГДА 0
                          |        КОГДА НаличиеФайлов.ЕстьФайлы
                          |            ТОГДА 1
                          |        ИНАЧЕ 0
                          |    КОНЕЦ КАК ЕстьФайлы,
                          |    СостоянияЭД.ПредставлениеСостояния КАК СостояниеЭДО,
                          |    NULL КАК СостояниеОригиналаПервичногоДокумента,
                          |    ИСТИНА КАК ОбщееСостояние,
                          |    0 КАК СостояниеОригиналПолучен
                          |ИЗ
                          |    Документ.ТребованиеНакладная0315006 КАК ДокументТребованиеНакладная0315006
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭД
                          |        ПО (СостоянияЭД.СсылкаНаОбъект = ДокументТребованиеНакладная0315006.Ссылка)
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОперацииДокументов КАК ОперацииДокументов
                          |        ПО ДокументТребованиеНакладная0315006.Ссылка = ОперацииДокументов.Документ
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
                          |        ПО ДокументТребованиеНакладная0315006.Ссылка = НаличиеФайлов.ОбъектСФайлами
                          |ГДЕ
                          |    ДокументТребованиеНакладная0315006.Ответственный = &ТекущийПользователь
                          |
                          |ОБЪЕДИНИТЬ
                          |
                          |ВЫБРАТЬ
                          |    ДокументТребованиеНакладная0315006.Ссылка,
                          |    ДокументТребованиеНакладная0315006.ВерсияДанных,
                          |    ДокументТребованиеНакладная0315006.ПометкаУдаления,
                          |    ДокументТребованиеНакладная0315006.Номер,
                          |    ДокументТребованиеНакладная0315006.Дата,
                          |    ДокументТребованиеНакладная0315006.Проведен,
                          |    ДокументТребованиеНакладная0315006.Организация,
                          |    ДокументТребованиеНакладная0315006.ИФО,
                          |    ДокументТребованиеНакладная0315006.ПодразделениеОтправитель,
                          |    ДокументТребованиеНакладная0315006.ЦМООтправитель,
                          |    ВЫРАЗИТЬ(ДокументТребованиеНакладная0315006.Комментарий КАК СТРОКА(250)),
                          |    ДокументТребованиеНакладная0315006.ЦМОПолучатель,
                          |    ДокументТребованиеНакладная0315006.ПодразделениеПолучатель,
                          |    ДокументТребованиеНакладная0315006.КорСчет,
                          |    ДокументТребованиеНакладная0315006.ВидПеремещения,
                          |    ДокументТребованиеНакладная0315006.МоментВремени,
                          |    ДокументТребованиеНакладная0315006.СчетУчета,
                          |    ДокументТребованиеНакладная0315006.ИдентификаторПечатнойФормы,
                          |    ДокументТребованиеНакладная0315006.ПредставлениеПечатнойФормы,
                          |    ОперацииДокументов.СуммаОперации,
                          |    ОперацииДокументов.Операция,
                          |    ВЫБОР
                          |        КОГДА ОперацииДокументов.ЕстьПроводки ЕСТЬ NULL
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ОперацияНеВыбрана)
                          |        КОГДА НЕ ОперацииДокументов.ЕстьПроводки
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиОтсутствуют)
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ДокументСторнирован, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ДокументСторнирован)
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.РучнаяКорректировка, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиИзмененыВручную)
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ИсправлениеОшибки, ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ПустаяСсылка)) В (ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаПрошлогоГода), ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаРанееПрошлогоГода))
                          |            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ИсправлениеОшибки)
                          |        ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СостоянияОперацииДокумента.ПроводкиСформированы)
                          |    КОНЕЦ,
                          |    ВЫБОР
                          |        КОГДА ОперацииДокументов.ЕстьПроводки ЕСТЬ NULL
                          |            ТОГДА 0
                          |        КОГДА НЕ ОперацииДокументов.ЕстьПроводки
                          |            ТОГДА 1
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ДокументСторнирован, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА 4
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.РучнаяКорректировка, ЛОЖЬ) = ИСТИНА
                          |            ТОГДА 3
                          |        КОГДА ЕСТЬNULL(ОперацииДокументов.ИсправлениеОшибки, ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ПустаяСсылка)) В (ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаПрошлогоГода), ЗНАЧЕНИЕ(Перечисление.ПорядокИсправленияОшибокПрошлыхЛет.ОшибкаРанееПрошлогоГода))
                          |            ТОГДА 5
                          |        ИНАЧЕ 2
                          |    КОНЕЦ,
                          |    ДокументТребованиеНакладная0315006.Ответственный,
                          |    ВЫБОР
                          |        КОГДА НаличиеФайлов.ЕстьФайлы ЕСТЬ NULL
                          |            ТОГДА 0
                          |        КОГДА НаличиеФайлов.ЕстьФайлы
                          |            ТОГДА 1
                          |        ИНАЧЕ 0
                          |    КОНЕЦ,
                          |    СостоянияЭД.ПредставлениеСостояния,
                          |    NULL,
                          |    ИСТИНА,
                          |    0
                          |ИЗ
                          |    Документ.ТребованиеНакладная0315006 КАК ДокументТребованиеНакладная0315006
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПоОбъектамУчетаЭДО КАК СостоянияЭД
                          |        ПО (СостоянияЭД.СсылкаНаОбъект = ДокументТребованиеНакладная0315006.Ссылка)
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОперацииДокументов КАК ОперацииДокументов
                          |        ПО ДокументТребованиеНакладная0315006.Ссылка = ОперацииДокументов.Документ
                          |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
                          |        ПО ДокументТребованиеНакладная0315006.Ссылка = НаличиеФайлов.ОбъектСФайлами
                          |ГДЕ
                          |    ДокументТребованиеНакладная0315006.ЦМОПолучатель.Сотрудник.Контрагент.ЮридическоеФизическоеЛицо = &ФизЛицоТекПользователя";
    


БГУ Конфа..
1 Юзер123
 
01.09.23
13:42
Апь.  Сейчас при формировании выдает ошибку.  Под другим пользователем с ограниченными правами.
2 Юзер123
 
01.09.23
14:45
Основная таблица динамического списка задана неверно.

Вот такая сейчас ошибка.

    СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();    
    СвойстваСписка.ТекстЗапроса = ТекстЗапроса;
    СвойстваСписка.ОсновнаяТаблица = Список.ОсновнаяТаблица;
    СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;  
    
    ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);          
    ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ТекущийПользователь", Пользователи.ТекущийПользователь());    
    ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(Список, "ФизЛицоТекПользователя", Пользователи.ТекущийПользователь().ФизическоеЛицо);
3 Юзер123
 
01.09.23
14:48
СвойстваСписка.ОсновнаяТаблица = "";

Сделал так. взлетело.
4 Юзер123
 
01.09.23
17:04
(3)  а нет.. не взлетело.  Список выводится, но он не активный.  т.е. нельзя в документ зайти.
5 Юзер123
 
01.09.23
19:05
Разобрался) пятницо.. После моих переделок Основная таблица из итогового запроса улетела. . .
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.