Имя: Пароль:
1C
1С v8
Выборка двух видов контактной информации в одном запросе
0 LivingStar
 
08.08.13
06:10
Имеется запрос, в него передается список выбранных групп. Важно учесть чтобы выбирался адрес контрагента если выбранна группа с контрагентами и адрес торговых точек, если указанны группы с торговыми точками. Вид выборки контактной информации задаю в соединении. Как учесть выборку адресов контрагентов и адресов торговых точек?

И (КонтактнаяИнформация.Вид.Код = ""000000010"") - адрес контрагента
И (КонтактнаяИнформация.Вид.Код = ""000000042"")- адрес торговой точки

        |ВЫБРАТЬ
        |    Контрагенты.Ссылка,
        |    Контрагенты.Наименование КАК Наименование,
        |    ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100)) КАК Адрес
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |        ПО Контрагенты.Ссылка = КонтактнаяИнформация.Объект
        |            И (КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес))
        |            И (КонтактнаяИнформация.Вид.Код = ""000000010"") // Юридический адрес контрагента
        |ГДЕ
        |    Контрагенты.Ссылка В ИЕРАРХИИ(&ГруппыКонтрагентов)
        |    И Контрагенты.ЭтоГруппа = ЛОЖЬ
        |
        |УПОРЯДОЧИТЬ ПО
        |    Наименование";
1 LivingStar
 
08.08.13
06:20
Торговые точки в справочнике контрагенты значатся с постфиксом ТТ и имеют вид адреса "Адрес торговой точки".
Контрагенты в справочнике контрагенты значатся без постфикса ТТ и имеют вид адреса "Юридический адрес контрагента".
2 AndyD
 
08.08.13
12:39
как-то так наверно

ВЫБРАТЬ
    Контрагенты.Ссылка,
    ВЫБОР
        КОГДА Контрагенты.Наименование ПОДОБНО "%ТТ"
            ТОГДА адрес2.Представление
        ИНАЧЕ адрес1.Представление
    КОНЕЦ КАК Адрес
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК адрес2
        ПО (адрес2.Объект = Контрагенты.Ссылка)
            И (адрес2.Вид = &Вид2)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК адрес1
        ПО (адрес1.Объект = Контрагенты.Ссылка)
            И (адрес1.Вид = &Вид1)
ГДЕ
    Контрагенты.Ссылка В ИЕРАРХИИ(&Объект)
3 cw014
 
08.08.13
12:45
А он упорно использует ГДЕ при левом соединении
4 LivingStar
 
09.08.13
05:35
(2) В вашем запросе выборка осуществляется по переданной в параметр группе контрагентов, но у них у всех отсутствует поле адрес. Как у контрагентов с видом контактной информации "Юридический адрес контрагента", так и с видом контактной информации "Адрес торговой точки".
5 LivingStar
 
09.08.13
05:41
Тут немного по другому, поменял местами адрес1 и адрес2, видимо просто опечатка было, но вот адреса в выборке все же нет ((( А вообще интересный запрос, разбираюсь далее...

ВЫБРАТЬ
    Контрагенты.Ссылка,
    ВЫБОР
        КОГДА Контрагенты.Наименование ПОДОБНО "%ТТ%"
            ТОГДА адрес1.Представление
        ИНАЧЕ адрес2.Представление
    КОНЕЦ КАК Адрес
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК адрес2
        ПО (адрес2.Объект = Контрагенты.Ссылка)
            И (адрес2.Вид = &Вид2)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК адрес1
        ПО (адрес1.Объект = Контрагенты.Ссылка)
            И (адрес1.Вид = &Вид1)
ГДЕ
    Контрагенты.Ссылка В ИЕРАРХИИ(&Объект)
6 LivingStar
 
09.08.13
05:53
Извиняюсь стало выбирать... Не тот параметр передавал по торговой точке!!!
7 LivingStar
 
09.08.13
06:29
(2) спасибо!