Имя: Пароль:
1C
1С v8
v8: Не работает левое соединение! Все-таки работает
,
0 Mr_Best
 
10.01.12
04:43
Доброй ночи! А вернее доброго утро! Уже 5-тый час, а не могу справится с запросом. Выручайте!
Привожу в пример упрощенный вариант и описание всего что я с ним делал и где он не работал.
Вот запрос:
Запрос.Текст = "ВЫБРАТЬ
              |    КонтактныеДанные.Адрес КАК Адрес,
              |    КонтактныеДанные.Телефон,
              |    ВЫРАЗИТЬ(КонтактныеДанные.Контрагент КАК Справочник.Контрагенты) КАК Контрагент,
              |    ЗаказНаряд.Ссылка,
              |    ЗаказНаряд.Заказчик
              |ИЗ
              |    Документ.ЗаказНаряд КАК ЗаказНаряд
              |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
              |            КонтактнаяИнформацияАдрес.Представление КАК Адрес,
              |            ВЫРАЗИТЬ(КонтактнаяИнформацияАдрес.Объект КАК Справочник.Контрагенты) КАК Контрагент,
              |            КонтактнаяИнформацияТелефон.Представление КАК Телефон
              |        ИЗ
              |            РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияАдрес
              |                ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияТелефон
              |                ПО КонтактнаяИнформацияАдрес.Объект = КонтактнаяИнформацияТелефон.Объект
              |        ГДЕ
              |            КонтактнаяИнформацияАдрес.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
              |            И КонтактнаяИнформацияАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресПочтовый)
              |            И КонтактнаяИнформацияТелефон.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
              |            И КонтактнаяИнформацияТелефон.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонКонтактный)
              |            И КонтактнаяИнформацияАдрес.Объект ССЫЛКА Справочник.Контрагенты
              |            И КонтактнаяИнформацияТелефон.Объект ССЫЛКА Справочник.Контрагенты) КАК КонтактныеДанные
              |        ПО ЗаказНаряд.Заказчик.Код = КонтактныеДанные.Контрагент.Код";
             
Результат = Запрос.Выполнить().Выгрузить();
1 Mr_Best
 
10.01.12
04:46
В запросе соединяется таблица документа с виртуальной таблицей. Так вот, если соединение левое то контактноя информация пустая, если полное тоже пустая, если правое то все нормально! Вот только для решения задачи требуется именно левое соединение.
Мне больше неначто грешить как на то, что вот это КонтактнаяИнформацияАдрес.Объект составной тип данных, но и здесь я уже все перепробывал и не че не получается.
2 Mr_Best
 
10.01.12
04:54
Получается что к реквизиту "Заказчик" документа "ЗаказНаряд" нельзы привязать левым соединением таблицу "КонтактныеДанные" через поле Контрагент. Почему?
3 Mr_Best
 
10.01.12
04:56
Я пробывал и по коду и не покоду сравнивать, и как только не пробываал, все бестолку !
Уважаемые коллеги, если ктото сталкивался с такой ситуациеей поделитесь опытом, хотя бы предположениями ...
4 Дядя Васька
 
10.01.12
04:56
Так сделай наоборот, регистр сверху, документ во вложенном.
5 catena
 
10.01.12
06:08
У меня этот запрос работает. Видимо у тебя регистр не правильно заполнен.
6 Ненавижу 1С
 
гуру
10.01.12
06:12
эксперимент: слово ГДЕ замени на И
7 catena
 
10.01.12
06:18
Прикольно, по коду соединяет, а по объекту действительно нет :)

(0)В самом внутреннем запросе пропиши четко тип, тогда работает:

               ПОЛНОЕ СОЕДИНЕНИЕ (Выбрать
               КонтактнаяИнформацияТелефон.Представление,
               КонтактнаяИнформацияТелефон.Тип,
               КонтактнаяИнформацияТелефон.Вид,
               ВЫРАЗИТЬ(КонтактнаяИнформацияТелефон.Объект КАК Справочник.Контрагенты) как Контрагент
               из РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформацияТелефон) КАК КонтактнаяИнформацияТелефон
               ПО КонтактнаяИнформацияАдрес.Объект = КонтактнаяИнформацияТелефон.Контрагент
8 Nesh
 
10.01.12
06:31
все условия ГДЕ по левой таблице перенеси в условия соединения

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


как-то так!
Результат = Запрос.Выполнить().Выгрузить();
9 Mr_Best
 
10.01.12
11:46
Вечером попаду к клиентам, попробую ваши предложения и обязательно отпишусь.
10 Mr_Best
 
12.01.12
23:18
(6) Для Ненавижу 1С - браво! Эксперемент удался с первого раза!
11 hhhh
 
12.01.12
23:51
(10) ну знаешь, только большой юморист мог вот так скрестить ГДЕ и полное соединение.
12 Mr_Best
 
16.01.12
00:19
(11) и где здесь юмор?