Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запрос к табличной части справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
vl185
УТ3. в Справочнике Партнеры есть табличная часть - КонтактнаяИнформация, в этой табличной части есть реквизит - Представление. В форма справочника этот реквизит имеет 1 строки - Адрес, телефон и емейл. Как в запросе получить значения только 1 строки - Адрес?

ВЫБРАТЬ
    Контрагенты.Ссылка КАК Ссылка1,
    ПартнерыКонтактнаяИнформация.Ссылка КАК Партнер,
    ПартнерыКонтактнаяИнформация.Ссылка.Родитель КАК Родитель,
    ПартнерыКонтактнаяИнформация.Представление
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
        ПО (Контрагенты.Партнер = ПартнерыКонтактнаяИнформация.Ссылка.Родитель)
logist
"ВЫБРАТЬ
|    КонтрагентыКонтактнаяИнформация.Представление,
|    КонтрагентыКонтактнаяИнформация.Ссылка
|ИЗ
|    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
|ГДЕ
|    КонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
|    И КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента)"
vl185
Спасибо огромное, подскажите, ещё, пожалуйста а как вывести в одну строку и адрес и телефон?
А то 2 строки получается и не сгрупировть никак upset.gif
"ВЫБРАТЬ
|    КонтрагентыКонтактнаяИнформация.Представление,
|    КонтрагентыКонтактнаяИнформация.Ссылка
|ИЗ
|    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
|ГДЕ
|    КонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
|    Или КонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)"



TipsyKID
Добрый день, как - то так :
ВЫБРАТЬ
    Адресс.Ссылка,
    (ВЫРАЗИТЬ(ЕСТЬNULL(Адресс.Представление, "") КАК СТРОКА(1023))) + (ВЫРАЗИТЬ(ЕСТЬNULL(Телефон.Представление, "") КАК СТРОКА(1023))) КАК АдрессТелефон
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК Адресс
        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК Телефон
        ПО Адресс.Ссылка = Телефон.Ссылка
ГДЕ
    Адресс.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
    И Телефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
vl185
Цитата(TipsyKID @ 25.06.14, 11:19) необходимо зарегистрироваться для просмотра ссылки
Добрый день, как - то так :

Я прошу прощения, я только учу запросы и дальше левого соединения ещё не продвинулся faceoff.gif В вашем запросе адрес и телефон попали в одну колонку, а мне надо в разных колонках но в одной строке. Спасибо.
TipsyKID
ВЫБРАТЬ
    Адресс.Ссылка,
    ЕстьNULL(Адресс.Представление,"") КАК Адресс,
    ЕстьNULL(Телефон.Представление,"") КАК Телефон
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК Адресс
        ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК Телефон
        ПО Адресс.Ссылка = Телефон.Ссылка
ГДЕ
    Адресс.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
    И Телефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
sava1
Объясните тупому - на кой там фулл джойн? чтобы табличку побольше получить?
Petre
Потомушо есть контакты только с телефоном или только с адресом.
TipsyKID
При полном соединении попадут контрагенты у которых информация заполнена частично, к примеру только телефон или только адресс, что мне кажется рациональным.
sava1
Т.е. вместо выборки в 10 000 записей мы лепим 100 000 и скармливаем серверу для отбора?
А может проще выбрать 10 000 с CASE WHEN и группировкой по контрагенту?
vl185
Цитата(TipsyKID @ 25.06.14, 11:56) необходимо зарегистрироваться для просмотра ссылки
При полном соединении попадут контрагенты у которых информация заполнена частично, к примеру только телефон или только адресс, что мне кажется рациональным.


А мне, вот как раз, надо было видеть у кого адреса и телефоны не заполнены.
TipsyKID
Цитата(sava1 @ 25.06.14, 12:20) необходимо зарегистрироваться для просмотра ссылки
Т.е. вместо выборки в 10 000 записей мы лепим 100 000 и скармливаем серверу для отбора?
А может проще выбрать 10 000 с CASE WHEN и группировкой по контрагенту?


Простите, я где - то пропустил в вопросе , требование об "оптимальности" и "простоте". Думаю задача стаяла сугубо для обучения и в отличии от Вас я предложил вариант запроса. На этом уважаемый "критикан" наш разговор окончен.
alex040269
Предложу такой запрос:
ВЫБРАТЬ Ссылка,МАКСИМУМ(Адрес),МАКСИМУМ(Телефон) ИЗ (
ВЫБРАТЬ
    Адресс.Ссылка,
    Адресс.Представление КАК Адрес,
    Null Как Телефон
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК Адресс
ГДЕ
    Адресс.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
    

ОБЪЕДИНИТЬ ВСЕ    
    
ВЫБРАТЬ
    Адресс.Ссылка,
    Null ,
    Адресс.Представление
ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК Адресс
    
    Телефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
  ) ВЗ
  
  СГРУППИРОВАТЬ ПО
  Ссылка

при условии, что у одного контрагента не более одного адреса и телефона
sava1
Цитата(alex040269 @ 25.06.14, 13:23) необходимо зарегистрироваться для просмотра ссылки
Предложу такой запрос:


Кстати - отработает в разы быстрее
Vofka
Во всех приведенных запросах ниже 3 поста есть недочет: если в системе будет больше 1 адреса или больше 1 телефона - то будет борода crazy.gif . В условии надо кроме типа указывать ещё вид, как изначально написал logist.
sava1
Человек же написал -
Цитата(TipsyKID @ 25.06.14, 12:25) необходимо зарегистрироваться для просмотра ссылки
Думаю задача стаяла сугубо для обучения

соответственно и решение - кривое, но действенное.
logist
Цитата(Vofka @ 25.06.14, 21:01) необходимо зарегистрироваться для просмотра ссылки
если в системе будет больше 1 адреса или больше 1 телефона

В УТ3, УТ11, УНФ, и вероятно всех конфигурациях написанных на БСП - не будет, подсистема контактной информации контрагента построена так, что для каждой пары Вид+Тип будет только одна запись.
Vofka
logist,
Цитата(logist @ 26.06.14, 19:03) необходимо зарегистрироваться для просмотра ссылки
Вид+Тип

А выше все только на тип условие ставят. И это не только в конфах на базе БСП сделано, так сделано и в конфигурациях прошлых поколений.
victor-o555
Здравствуйте!
запрос из поста 2 внутри функции, которая должна вернуть адрес контрагента
на входе функции переменная с наименованием контрагента - Объект
как сделать отбор по наименованию контрагента?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.