Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Полное соединение табличных частей документов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
HNKOVAN
Я начинающий погромист, не судите строго. :-)
А с SQL столкнулся вчера в первый раз.
Искать ответ в интернете уже нету сил, нигде ясного ответа не нашёл.
Возникла необходимость проверить фактическое выполнение заказов. Для этого слепил в конструкторе запрос с "полным соединением" табличных частей документов ЗаказПокупателя и РеализацияТоваровУслуг по полям Номенклатура и Контрагент.
Но почему-то в результате выполнения запроса отсутствуют данные о тех позициях номенклатуры заказов, которые совсем не были выполнены (их нет в табличной части документа РеализацияТоваровУслуг). Но это же ПОЛНОЕ соединение? Что я делаю не так? От безысходности пробовал ПРАВОЕ, ЛЕВОЕ - вожделенные "NULLи" не появляются. :-)

ВЫБРАТЬ
        ЗаказПокупателяТовары.Ссылка.Номер,
        ЗаказПокупателяТовары.Ссылка.Дата,
        ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки,
        ЗаказПокупателяТовары.Ссылка.Контрагент,
        ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Ссылка.Контрагент),
        ЗаказПокупателяТовары.Номенклатура,
        ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура),        
        ЗаказПокупателяТовары.Количество КАК Количество,      
        РеализацияТоваровУслугТовары.Ссылка.Номер КАК Номер1,
        РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата1,
        РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент1,
        ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Ссылка.Контрагент) КАК КонтрагентПредставление1,
        РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура1,
        ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Номенклатура) КАК НоменклатураПредставление1,
        РеализацияТоваровУслугТовары.Количество КАК Количество1

ИЗ
        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
                ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент = ЗаказПокупателяТовары.Ссылка.Контрагент
                        И РеализацияТоваровУслугТовары.Номенклатура = ЗаказПокупателяТовары.Номенклатура

ГДЕ
        РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач
        И РеализацияТоваровУслугТовары.Ссылка.Дата < &ДатаКон
        И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки >= &ДатаНач
        И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаКон



 i 

Правила, п.12
 


На другом форуме говорят, что у меня получилось ВНУТРЕННЕЕ соединение. Действительно, результат запроса так и выглядел.
Даже предложили рабочий вариант (пока не пробовал, сейчас нет возможности). Но разжевывать "для чайника" не хотят. А мне всё ещё не понятно, в чём суть исправления. Ну да ладно, буду вникать глубже и тщательнее. Спасибо им за советы - есть уже над чем поразмыслить.

ВЫБРАТЬ
    ЗаказПокупателяТовары.Ссылка.Номер,
    ЗаказПокупателяТовары.Ссылка.Дата,
    ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки,
    ЗаказПокупателяТовары.Ссылка.Контрагент,
    ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Ссылка.Контрагент),
    ЗаказПокупателяТовары.Номенклатура,
    ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура),
    ЗаказПокупателяТовары.Количество КАК Количество,
    РеализацияТоваровУслугТовары.Ссылка.Номер КАК Номер1,
     РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата1,
    РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент1,
    ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Ссылка.Контрагент) КАК КонтрагентПредставление1,
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура1,
    ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Номенклатура) КАК НоменклатураПредставление1,
    РеализацияТоваровУслугТовары.Количество КАК Количество1
ИЗ
    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ПО РеализацияТоваровУслугТовары.Ссылка.Контрагент = ЗаказПокупателяТовары.Ссылка.Контрагент
            И РеализацияТоваровУслугТовары.Номенклатура = ЗаказПокупателяТовары.Номенклатура
            И (РеализацияТоваровУслугТовары.Ссылка.Дата >= &ДатаНач)
            И (РеализацияТоваровУслугТовары.Ссылка.Дата < &ДатаКон)
ГДЕ
    ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки >= &ДатаНач
    И ЗаказПокупателяТовары.Ссылка.ДатаОтгрузки < &ДатаКон
Vofka
Цитата(HNKOVAN @ 18.03.14, 16:12) необходимо зарегистрироваться для просмотра ссылки
Но разжевывать "для чайника" не хотят. А мне всё ещё не понятно, в чём суть исправления

Соединения по другим полям.
HNKOVAN
Цитата(Vofka @ 18.03.14, 16:36) необходимо зарегистрироваться для просмотра ссылки
Соединения по другим полям.


Контрагент и Номенклатура было и осталось же. Не?
Petre
Цитата(HNKOVAN @ 18.03.14, 16:12) необходимо зарегистрироваться для просмотра ссылки
На другом форуме говорят, что у меня получилось ВНУТРЕННЕЕ соединение.

Проблема вашего запроса в конструкции "ГДЕ". Либо перенесите условия в конструкцию соединения "ПО", либо измените условия так, чтобы они предусматривали наличие NULL в полях.
HNKOVAN
Цитата(Petre @ 18.03.14, 17:05) необходимо зарегистрироваться для просмотра ссылки
Проблема вашего запроса в конструкции "ГДЕ". Либо перенесите условия в конструкцию соединения "ПО", либо измените условия так, чтобы они предусматривали наличие NULL в полях.


!!!!!
Спасибо! Это очень похоже на правду, и толково, и понятно.
Спасибо ещё раз.

Цитата(Petre @ 18.03.14, 17:05) необходимо зарегистрироваться для просмотра ссылки
Проблема вашего запроса в конструкции "ГДЕ". Либо перенесите условия в конструкцию соединения "ПО", либо измените условия так, чтобы они предусматривали наличие NULL в полях.


Похоже, важно понимать приоритет, т.е. последовательность обработки сервером текста запроса. А я этого совершенно не понимаю.
Выходит "ГДЕ" применяется уже к результату соединения, да?
Petre
Цитата(HNKOVAN @ 18.03.14, 17:41) необходимо зарегистрироваться для просмотра ссылки
Выходит "ГДЕ" применяется уже к результату соединения, да?

Да.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.