Имя: Пароль:
1C
1С v8
Как одним запросом получить значение телефона и адреса из рег. КонтактаяИнфо?
0 Boudybuilder
 
16.03.13
21:07
Все мои знания о языке запросов коту под хвост , раз я не могу справиться с такой легкой задачей. Или может быть сегодня не мой день.
Надо из регистра КонтактнаяИнформация получить и номер телефона контрагента и его адрес. Я уже всяко ставил условия , соединял по разному две таблицы , и не получается. Дело в том , что если нет значения в одной из таблиц ,то результат пустой. На ЕСТЬТЬNULL не срабатывает... :(
Как правильно делать?

Вот мой запрос ...

ВЫБРАТЬ
   КонтактнаяИнформация.Представление,
   КонтактнаяИнформация.Вид
ПОМЕСТИТЬ Контакты
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
   КонтактнаяИнформация.Объект = &Объект
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Тел.Представление КАК Тел,
   Тел.Вид,
   Адр.Представление КАК Адр,
   Адр.Вид КАК Вид1
ИЗ
   Контакты КАК Адр,
   Контакты КАК Тел
ГДЕ
   Адр.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)
   И Тел.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента)
1 Oleg_Kag
 
16.03.13
21:10
А почему "И" в Где?
2 H A D G E H O G s
 
16.03.13
21:11
3 Boudybuilder
 
16.03.13
21:19
(1) А что там должно быть?
4 shuhard
 
16.03.13
21:23
(0) Объединить все не предлагать ?
5 kotletka
 
16.03.13
21:23
(3)одной вт извлекай телефон, др адрес (либо выбор тогда когда), а ты в одной таблице накладываешь условие что и адрес и телефон одновременно д.б, ты такие адреса встречал, два в одном?
6 H A D G E H O G s
 
модератор
16.03.13
21:24
ВЫБРАТЬ
   КонтактнаяИнформация.Объект,
   МАКСИМУМ(ВЫБОР
           КОГДА КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)
               ТОГДА ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(999))
       КОНЕЦ) КАК Адрес,
   МАКСИМУМ(ВЫБОР
           КОГДА КонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента)
               ТОГДА ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(100))
       КОНЕЦ) КАК Телефон
ИЗ
   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
   КонтактнаяИнформация.Объект = &Объект

СГРУППИРОВАТЬ ПО
   КонтактнаяИнформация.Объект
7 kotletka
 
16.03.13
21:25
(6)с подписью вышел чтобы до тс дошло быстрей? :)
8 H A D G E H O G s
 
16.03.13
21:27
(7) Бес попутал.
9 Фокусник
 
16.03.13
21:28
(0) запрос к справочнику Контрагентов с отбором по ссылке, к нему 2 левых соединения к регистру сведений контактной информации, в связях отбор по виду контактной информации.
10 H A D G E H O G s
 
16.03.13
21:29
(9) Как вы вообще бухгалтеров и методистов то понимаете...
11 Фокусник
 
16.03.13
21:31
(10) а что? :)
12 kotletka
 
16.03.13
21:32
(10)тебя опять бес попутал, не как он их понимает надо спросить, а как они его понимают
13 Фокусник
 
16.03.13
21:34
(12) а я сейчас вроде программисту писал, причем здесь бухи? ;)
14 H A D G E H O G s
 
16.03.13
21:36
(11) Ему телефон и адрес нужен отдельными колонками в 1-ой строке.
15 Фокусник
 
16.03.13
21:38
(14) верно: одно левое соединение даст адрес (в первой колонке), второе - телефон (во второй колонке). Всегда так делаю. ИМХО, явный отбор будет быстрее, чем "максимум".
16 H A D G E H O G s
 
16.03.13
21:40
(15) Нет.
17 H A D G E H O G s
 
16.03.13
21:41
(15) Не ищите проблему там, где ее нет.
В (0) явно указана задача.

И тупо поиск по таблице КИ будет быстрее, чем поиск по справочнику, потом 2 раза поиск по КИ.
18 Фокусник
 
16.03.13
21:45
(17) Вот так:

ВЫБРАТЬ
   Контрагенты.Ссылка КАК Контрагент,
   КИ_ФактическийАдрес.Представление КАК ФактическийАдрес,
   КИ_Телефон.Представление КАК Телефон
ИЗ
   Справочник.Контрагенты КАК Контрагенты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_ФактическийАдрес
       ПО Контрагенты.Ссылка = КИ_ФактическийАдрес.Объект
           И (КИ_ФактическийАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента))
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ_Телефон
       ПО (КИ_Телефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтрагента))
           И (Контрагенты.Ссылка = КИ_Телефон.Объект)
ГДЕ
   Контрагенты.Ссылка = &Ссылка
19 Фокусник
 
16.03.13
21:52
(17) Я не кодер, чтобы решать ТОЛЬКО задачу, которую "мне поставили", я смотрю шире всегда ;)

Обычно одним запросом нужно получить всё: и наименование, и телефоны, адреса и т.д.

Давай-ка через твой вариант выведи контрагента, его наименование, основной договор, ИНН, адреса и телефон, если у него НЕТ адреса И телефона? ;)
20 Boudybuilder
 
17.03.13
00:21
(17) Это действительно быстро. (18) Легче. ;)
Спасибо  , что откликнулись и так широко раскрыли тему. За это у вас будут отличные выходные и ясная голова в понедельник с утра... ;)
21 Сниф
 
17.03.13
00:41
(20) кому уходит приз или приз не уходит?
22 Сниф
 
17.03.13
00:43
(20) сорри, не та ветка) сейчас модно призы раздавать .
23 polymorph
 
17.03.13
02:09
(18) у этого запроса есть большой подводный камень. если есть тип контактной информации электронная почта и он заполнен то тогда этот контрагент отфильтруется совсем. запрос вернется пустым.
24 polymorph
 
17.03.13
02:24
+(23) точнее даже если у контрагента будет заполнен только телефон или только адрес в выборку он не попадет.
25 Boudybuilder
 
17.03.13
03:18
(24) Видимо одним запросом никак...
26 sergus_dixi
 
17.03.13
03:52
ик - а почему такой выаод? в (18) вполне работоспосоьный запрос для старта
27 sergus_dixi
 
17.03.13
03:52
а в (24) откровенный бред по отношению к (18)
28 sergus_dixi
 
17.03.13
03:54
(24) человек похоже не умеет запросы читать наглухо - его вывод БСК
29 Klesk
 
17.03.13
05:02
ЗаказКлиента.Менеджер.КонтактнаяИнформация.Получить(0).АдресЭП
это почта, адрес таким же образом, 5 утря - лень думать