Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Левое соединение работает как Внутреннее
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
pablo
Код запроса:
ВЫБРАТЬ
    ВЫБОР
        КОГДА ЦСМ_АктОказанияУслуг.Номер >= "10000000000"
                И ЦСМ_АктОказанияУслуг.Номер <= "20000000000"
            ТОГДА "09" + ПОДСТРОКА(ЦСМ_АктОказанияУслуг.Номер, 8, 4)
        ИНАЧЕ ПОДСТРОКА(ЦСМ_АктОказанияУслуг.Номер, 6, 6)
    КОНЕЦ КАК НомерАкта,
    ЦСМ_АктОказанияУслуг.Номер,
    ЦСМ_АктОказанияУслуг.СуммаДокумента
ПОМЕСТИТЬ Акты
ИЗ
    Документ.ЦСМ_АктОказанияУслуг КАК ЦСМ_АктОказанияУслуг
ГДЕ
    (ПОДСТРОКА(ЦСМ_АктОказанияУслуг.Номер, 7, 1) = "9"
            ИЛИ ПОДСТРОКА(ЦСМ_АктОказанияУслуг.Номер, 1, 1) = "1")
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ЦСМ_АктОказанияУслуг.НомерАкта КАК НомерАкта,
    ЦСМ_АктОказанияУслуг.Номер КАК НомерПолный,
    ЦСМ_КлиентБанкАкты.НомерОтдела КАК НомерОтдела,
    ЦСМ_КлиентБанкАкты.НомерСчета КАК НомерСчета,
    ЦСМ_КлиентБанкАкты.НомерКарточкиПоБазе,
    ЦСМ_КлиентБанкАкты.НомерДоговора,
    ЦСМ_КлиентБанкАкты.Ссылка.Дата КАК ДатаОплаты,
    ЦСМ_КлиентБанкАкты.СуммаАктаПоБазе КАК СуммаАктаПоБазе,
    ЦСМ_АктОказанияУслуг.СуммаДокумента
ИЗ
    Акты КАК ЦСМ_АктОказанияУслуг
        [b]ЛЕВОЕ[/b] СОЕДИНЕНИЕ Документ.ЦСМ_КлиентБанк.Акты КАК ЦСМ_КлиентБанкАкты
        ПО (ЦСМ_АктОказанияУслуг.НомерАкта = ЦСМ_КлиентБанкАкты.НомерСчета
                ИЛИ ПОДСТРОКА(ЦСМ_АктОказанияУслуг.НомерАкта, 2, 5) = ЦСМ_КлиентБанкАкты.НомерСчета)
ГДЕ
    ЦСМ_КлиентБанкАкты.Ссылка.Дата >= &ДатаГода
    И (ЦСМ_КлиентБанкАкты.НомерСчета >= &НомерСчета
                И ЦСМ_КлиентБанкАкты.НомерСчета <= &НомерСчета2
            ИЛИ ЦСМ_КлиентБанкАкты.НомерСчета >= &НомерСчета3
                И ЦСМ_КлиентБанкАкты.НомерСчета <= &НомерСчета4)

УПОРЯДОЧИТЬ ПО
    НомерСчета

собственно, в результирующий запрос попадают не все записи из запроса Акты... В чем подвох?
Ziam
По моему ваше условия ГДЕ нужно добавить в Левое соединение.
Т.е. сделать вложенный запрос и использовать его вместо

Документ.ЦСМ_КлиентБанк.Акты КАК ЦСМ_КлиентБанкАкты
Vahman
Проблема вот в чем:
когда для строки таблицы ЦСМ_АктОказанияУслуг не находится соответствующая строка из таблицы ЦСМ_КлиентБанкАкты, все обращения к таблице ЦСМ_КлиентБанкАкты система представляет как NULL. Условие ГДЕ для таких строк выглядит вот так
ГДЕ
NULL >= &ДатаГода
    И (NULL >= &НомерСчета ..... и т. д.


Как следствие, не выводятся данные из ЦСМ_АктОказанияУслуг. То есть левое соединение работает как внутреннее.
Если перенести все условия по полям таблицы ЦСМ_КлиентБанкАкты из раздела ГДЕ в раздел условий связи таблиц, то все будет работать как нужно.
pablo
Спасибо всем. Типичная для меня ошибка.
Vofka
Цитата
Спасибо всем.

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