Имя: Пароль:
1C
1С v8
Передача в запрос параметра для отображения в динамическом списке
0 Bilkinbill
 
11.10.18
12:11
Всем привет!
Есть запрос, одним из полем которого (Ознакомление) определяется открывался ли документ пользователем (запись в регистре сведений).
Необходимо в динамическом списке документов в соответствующем поле выводить запись "Прочитано" или "не прочитано".

Вопрос: В процедуре ПриОткрытии() пишу:
СписокДокументыДляСогласования.Параметры.УстановитьЗначениеПараметра("Пользователь",ПараметрыСеанса.КанцТекущееДолжностноеЛицо);
СписокДокументыДляСогласования.Параметры.УстановитьЗначениеПараметра("ЭтотДок",ТекСтр(Элементы.СписокДокументыДляСогласования.ТекущиеяДанные));

Но в динам.списке в колонке "Ознакомление" пишется неверная запись (из регистра)...Что я делаю не так?


ВЫБРАТЬ РАЗЛИЧНЫЕ
    Канц_РКК.Ссылка КАК Ссылка,
    Канц_РКК.ВидДокумента КАК ВидДокумента,
    Канц_РККМаршрут.Получатель КАК Получатель,
    Канц_РККСогласование.ДолжностноеЛицо КАК ДолжностноеЛицо,
    Канц_РКК.СтатусСогласования КАК СтатусСогласования,
    Канц_РККСогласование.Решение КАК Решение,
    ВложенныйЗапрос.Ознакомление КАК Ознакомление
ИЗ
    Документ.Канц_РКК КАК Канц_РКК
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Канц_РКК.Маршрут КАК Канц_РККМаршрут
        ПО Канц_РКК.Ссылка = Канц_РККМаршрут.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Канц_РКК.Согласование КАК Канц_РККСогласование
        ПО Канц_РКК.Ссылка = Канц_РККСогласование.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВЫБОР
                КОГДА Канц_ОзнакомлениеСДокументами.ДолжностноеЛицо <> &Пользователь
                        И Канц_ОзнакомлениеСДокументами.Документ = &ЭтотДок
                    ТОГДА "Не прочитано"
                ИНАЧЕ "прочитано"
            КОНЕЦ КАК Ознакомление,
            Канц_ОзнакомлениеСДокументами.Документ КАК Документ
        ИЗ
            РегистрСведений.Канц_ОзнакомлениеСДокументами КАК Канц_ОзнакомлениеСДокументами) КАК ВложенныйЗапрос
        ПО Канц_РКК.Ссылка = ВложенныйЗапрос.Документ.Ссылка
ГДЕ
    (Канц_РККМаршрут.Получатель = &Пользователь
            ИЛИ Канц_РККСогласование.ДолжностноеЛицо = &Пользователь)
1 Bilkinbill
 
11.10.18
12:13
(1)  В процедуре ПриОткрытии() пишу:
СписокДокументыДляСогласования.Параметры.УстановитьЗначениеПараметра("Пользователь",ПараметрыСеанса.КанцТекущееДолжностноеЛицо);
СписокДокументыДляСогласования.Параметры.УстановитьЗначениеПараметра("ЭтотДок",Элементы.СписокДокументыДляСогласования.ТекущиеДанные));
2 hhhh
 
11.10.18
12:15
(1) ну Элементы.СписокДокументыДляСогласования.ТекущиеДанные - это не документ. Почему вы это в ЭтотДок пихаете?
3 Bilkinbill
 
11.10.18
12:17
(2) Пробовал Элементы.СписокДокументыДляСогласования.ТекущиеДанные.ссылка
Ошибка
4 hhhh
 
11.10.18
12:19
(3) значит забыли колонку "Ссылка" добавить в этот список.
5 aleks_default
 
11.10.18
12:20
Зачем вам вообще нужен ЭтотДок? Нужно просто соединить список документов с записями регистров по ссылке и вывести поле Ознакомление - все.
6 catena
 
11.10.18
12:27
Параметр запроса - из строки результата запроса? Это не серьезно.
7 Bilkinbill
 
11.10.18
16:30
(5) в этом случае (если убрать условие по ЭтомуДоку) возникает ошибка "Обнаружено дублирование ключевых значений в колонках Ссылка"....если кончено запрос корректный

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Канц_РКК.Ссылка КАК Ссылка,
    Канц_РКК.ВидДокумента КАК ВидДокумента,
    Канц_РКК.ВидДокумента.Родитель КАК ВидДокументаРодитель,
    Канц_РККМаршрут.Получатель КАК Получатель,
    Канц_РККСогласование.ДолжностноеЛицо КАК ДолжностноеЛицо,
    Канц_РКК.СтатусСогласования КАК СтатусСогласования,
    Канц_РККСогласование.Решение КАК Решение,
    ВложенныйЗапрос.Ознакомление КАК Ознакомление
ИЗ
    Документ.Канц_РКК КАК Канц_РКК
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Канц_РКК.Маршрут КАК Канц_РККМаршрут
        ПО Канц_РКК.Ссылка = Канц_РККМаршрут.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.Канц_РКК.Согласование КАК Канц_РККСогласование
        ПО Канц_РКК.Ссылка = Канц_РККСогласование.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ВЫБОР
                КОГДА Канц_ОзнакомлениеСДокументами.ДолжностноеЛицо <> &Пользователь
                    ТОГДА "Не прочитано"
                ИНАЧЕ "прочитано"
            КОНЕЦ КАК Ознакомление,
            Канц_ОзнакомлениеСДокументами.Документ КАК Документ
        ИЗ
            РегистрСведений.Канц_ОзнакомлениеСДокументами КАК Канц_ОзнакомлениеСДокументами) КАК ВложенныйЗапрос
        ПО Канц_РКК.Ссылка = ВложенныйЗапрос.Документ.Ссылка
ГДЕ
    (Канц_РККМаршрут.Получатель = &Пользователь
            ИЛИ Канц_РККСогласование.ДолжностноеЛицо = &Пользователь)
8 Bilkinbill
 
11.10.18
16:31
(4) не забыл
9 Bilkinbill
 
11.10.18
16:32
(6) предложите более серьезное решение
10 catena
 
12.10.18
08:04
(7)Условием связи на левое соединение. Дублирование записей - это уже другой вопрос, смотрите, из-за каких значений дублируется и какие связи нужно добавить
11 Bilkinbill
 
12.10.18
09:33
(10) дублируется полем ссылка видимо..т.к. без условия с ЭтотДок появляются 2 записи...условие связи по полю ссылка на документ из дух таблиц
12 catena
 
12.10.18
09:43
(11)Вопрос не в том, ЧТО дублируется, а в том ИЗ-ЗА ЧЕГО. Значит у вас один документ встречается в регистре ознакомления несколько раз. Определитесь, какой из этих разов вам нужен.
13 Bilkinbill
 
12.10.18
09:57
(12) естественно несколько раз.....в регистре сведений записываются записи в Измерения Документ и пользователь..один документ могут открывать разные пользователи
14 catena
 
12.10.18
10:03
(13)Ну так выбирайте только по текущему пользователю, а свое прочитано/непрочитано вынесите в основные поля
Выбор когда ВложенныйЗапрос.Документ естьNULL тогда "Непрочитано" иначе "Прочитано" конец
15 Bilkinbill
 
12.10.18
10:36
(14) спасибо...всё работает....
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn