Имя: Пароль:
1C
1С v8
СКД передача в параметр списка значений
0 Pivas15
 
13.01.17
13:38
Доброго времени суток! Столкнулся со следующей ситуацией, на платформе 8.2.19.83 для конфигурации УПП необходимо написать некий отчет на скд, в нем пользователь выбирает контрагента и период и получает определённые данные, тут все понятно, но теперь когда пользователю необходимо ввести несколько контрагентов, как поступать? По идее при настройке, в скд во вкладке параметры мы ставим галочку в поле "доступен список значений", заполняем значениями и тут платформа ругается что мы сравниваем либо строки неограниченной длинны либо несовместимые типы, тут все верно, ведь у параметра тип изначально стоит "СправочникСсылка.Контрагенты", как обойти данную ситуацию и позволить заполнение параметра контрагент, списком значений с целью получить данные по каждому значению в списке?
1 Cool_Profi
 
13.01.17
13:40
Запрос поменяй
2 Pivas15
 
13.01.17
13:46
(1) Логично что надо менять запрос, но что именно? Выставить другой тип у параметра?
3 SergTheGreat
 
13.01.17
13:55
(0) Вариант для программиста - поставить у параметра галку "доступен список", и пользователю для выбора конкретного контрагента нужно будет добавлять в список единственное значение.
Вариант для пользователя - заменить в СКД параметр на отбор. Соответственно пользователь сможет указывать как одно значение, так и список. А вот программисту придется переработать запрос :-)
4 mistеr
 
13.01.17
14:07
(2) Сначала покажи, как в запросе используется параметр.
5 Pivas15
 
13.01.17
14:08
(4) Сам текст запроса:
ВЫБРАТЬ
    Контрагенты.Ссылка КАК Контрагент,
    ВЫБОР
        КОГДА КонтактныеЛицаКонтрагентов.РольКонтактногоЛица = &РольКонтактногоЛица
                И КонтактныеЛицаКонтрагентов.ПометкаУдаления = ЛОЖЬ
            ТОГДА КонтактныеЛицаКонтрагентов.Ссылка
    КОНЕЦ КАК КонтактноеЛицо,
    ВЫБОР
        КОГДА _СтатусДистрибутиваСрезПоследних.СтатусОбслуживания = ИСТИНА
            ТОГДА _СтатусДистрибутиваСрезПоследних.Дистрибутив
        ИНАЧЕ NULL
    КОНЕЦ КАК Дистрибутив,
    ВЫБОР
        КОГДА _УсловияДоговора.Дата МЕЖДУ &ПериодНачало И &Период
            ТОГДА _УсловияДоговора.СуммаЗаГод
        ИНАЧЕ NULL
    КОНЕЦ КАК СуммаЗаГод,
    ВЫБОР
        КОГДА _УсловияДоговора.Дата МЕЖДУ &ПериодНачало И &Период
            ТОГДА _УсловияДоговора.Ссылка
        ИНАЧЕ NULL
    КОНЕЦ КАК Документ
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
        ПО Контрагенты.Ссылка = КонтактныеЛицаКонтрагентов.Владелец
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений._СтатусДистрибутива.СрезПоследних КАК _СтатусДистрибутиваСрезПоследних
        ПО Контрагенты.Ссылка = _СтатусДистрибутиваСрезПоследних.Контрагент
        ЛЕВОЕ СОЕДИНЕНИЕ Документ._УсловияДоговора КАК _УсловияДоговора
        ПО Контрагенты.Ссылка = _УсловияДоговора.Контрагент
ГДЕ
    Контрагенты.Ссылка = &Контрагент

СГРУППИРОВАТЬ ПО
    Контрагенты.Ссылка,
    ВЫБОР
        КОГДА КонтактныеЛицаКонтрагентов.РольКонтактногоЛица = &РольКонтактногоЛица
                И КонтактныеЛицаКонтрагентов.ПометкаУдаления = ЛОЖЬ
            ТОГДА КонтактныеЛицаКонтрагентов.Ссылка
    КОНЕЦ,
    ВЫБОР
        КОГДА _УсловияДоговора.Дата МЕЖДУ &ПериодНачало И &Период
            ТОГДА _УсловияДоговора.СуммаЗаГод
        ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
        КОГДА _УсловияДоговора.Дата МЕЖДУ &ПериодНачало И &Период
            ТОГДА _УсловияДоговора.Ссылка
        ИНАЧЕ NULL
    КОНЕЦ,
    ВЫБОР
        КОГДА _СтатусДистрибутиваСрезПоследних.СтатусОбслуживания = ИСТИНА
            ТОГДА _СтатусДистрибутиваСрезПоследних.Дистрибутив
        ИНАЧЕ NULL
    КОНЕЦ
6 serg-lom89
 
13.01.17
14:13
ГДЕ
    Контрагенты.Ссылка = &Контрагент

тут надо ставить другое условие если не ошибаюсь
7 serg-lom89
 
13.01.17
14:13
в иерархии(&Контрагент)
8 Pivas15
 
13.01.17
14:23
(7) К сожалению не получилось.
9 Pivas15
 
13.01.17
14:30
(3) Собственно замена параметра на отбор работает, а все таки можно данную задачу решить именно через параметр? И попутно вопрос какая разница в производительности у отбора и параметра?
10 serg-lom89
 
13.01.17
14:33
(9) с параметром быстрее он сразу налаживается,а отбор сразу результат выполняется ,а затем отбор налаживается.(если  память не изменяет)
11 Pivas15
 
13.01.17
14:34
(10) Ага, получается параметр отрабатывает в момент выполнения запроса, а отбор натягивается уже на результаты работы запроса... Тогда да, параметр быстрее выходит... Надо ещё замерить... Спасибо ))
12 SergTheGreat
 
13.01.17
15:23
(10) Не совсем так. Если отбор установлен для какой-либо части СКД, то он действительно будет накладываться на результат выборки СУБД. Если же отбор установлен на верхнем уровне "Отчет", то он будет добавлен в запрос, отправляемый к СУБД, наравне с параметрами.
13 Pivas15
 
13.01.17
15:30
(12) Это же отлично! Получается не надо мудрить с параметрами в надежде выиграть по времени лишнюю секунду.
14 FIXXXL
 
13.01.17
17:25
(13) отправь свои параметры на закладку Компановка в запросе и не люби мозги :)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан