Имя: Пароль:
1C
 
Соединение таблиц в запросе по условию
0 Shmidt
 
21.05.15
16:53
Доброго времени суток. Такой вопрос:
Пишу запрос, соединяю 2 таблицы: ТЧДокумента и РС. Есть 3 условия связи По дате, по смене и по номенклатуре. Дата и Смена присутсвуют в обеих таблицах всегда, а вот Номенклатура в ТЧ есть всегда, а в РС может и не быть. Цель такая: выбираем все записи из ТЧДокумента и ищем В РС записи удовлетворяющие По дате и Смене. Если у записи в РС Номенклатура не заполнена, тогда запись действительна для всей номенклатуры ТЧДокумента, иначе только для конкретной номенклатуры. Как реализовать, чтобы Связь №3 работала только при условии, что В РС Номенклатура <> NULL?
1 ДенисЧ
 
21.05.15
16:55
И ВЫБОР КОГДА РС.Номенклатура ЕСТЬ NULL ТОГДА ИСтина ИНАЧЕ Рс.Номенклатура = ТЧ.Номенклатура КОНЕЦ
2 DirecTwiX
 
21.05.15
16:59
Выбор будет медленнее или быстрее?
И (РС.Номенклатура ЕСТЬ NULL ИЛИ Рс.Номенклатура = ТЧ.Номенклатура)
3 Shmidt
 
21.05.15
16:59
(1) Я так пробовал, не взлетело. Рс.Номенклатура = ТЧ.Номенклатура выполняется, а РС.Номенклатура ЕСТЬ NULL ТОГДА ИСтина нет. Может там не NULL значение...
4 Shmidt
 
21.05.15
17:06
Тоесть не подставляется значение из записи РС с пустой Номенклатурой, хотя Дата и Смена совпадают (((
5 Shmidt
 
21.05.15
17:06
Уже по-всякому вертел ((
6 Бубка Гоп
 
21.05.15
17:07
(5) покажи текст запроса, где соединяешь
7 Shmidt
 
21.05.15
17:07
(6) ВЫБРАТЬ
    ОтчетМастераСменыВыпуск.Ссылка.Смена,
    ОтчетМастераСменыВыпуск.Номенклатура,
    ОтчетМастераСменыВыпуск.Количество,
    АНМ_ПланПроизводительностиЛинии.КоличествоПродукции,
    АНМ_ПланПроизводительностиЛинии.Номенклатура КАК Номенклатура1
ИЗ
    Документ.ОтчетМастераСмены.Выпуск КАК ОтчетМастераСменыВыпуск
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_ПланПроизводительностиЛинии КАК АНМ_ПланПроизводительностиЛинии
        ПО (НАЧАЛОПЕРИОДА(ОтчетМастераСменыВыпуск.Ссылка.Дата, МЕСЯЦ) = НАЧАЛОПЕРИОДА(АНМ_ПланПроизводительностиЛинии.Период, МЕСЯЦ))
            И ОтчетМастераСменыВыпуск.Ссылка.Смена = АНМ_ПланПроизводительностиЛинии.Смена
            И ОтчетМастераСменыВыпуск.Номенклатура = АНМ_ПланПроизводительностиЛинии.Номенклатура
8 Shmidt
 
21.05.15
17:09
Вот это злополучная связь:
И ОтчетМастераСменыВыпуск.Номенклатура = АНМ_ПланПроизводительностиЛинии.Номенклатура
9 leonidkorolev
 
21.05.15
17:22
Мне кажется, что в момент когда идёт вычисление условий нулов ещё нет, там же просто перебор всех комбинаций и проверка условий. А в комбинациях не может же быть нулов.
Предлагаю сделать два левых соединения. С двумя и с тремя условиями. Потом в выводимых полях уже проверять на нул вариант с тремя условиями и выводить с результа соединения с двумя условиями.
10 leonidkorolev
 
21.05.15
17:26
ну вот что-то типа этого
(писал в блокноте могут быть ошибки)

ВЫБРАТЬ
    ОтчетМастераСменыВыпуск.Ссылка.Смена,
    ОтчетМастераСменыВыпуск.Номенклатура,
    ОтчетМастераСменыВыпуск.Количество,
    isnull(АНМ_ПланПроизводительностиЛинии3условия.КоличествоПродукции,АНМ_ПланПроизводительностиЛинии3условия.КоличествоПродукции2условия)
ИЗ
    Документ.ОтчетМастераСмены.Выпуск КАК ОтчетМастераСменыВыпуск
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_ПланПроизводительностиЛинии КАК АНМ_ПланПроизводительностиЛинии2условия
        ПО (НАЧАЛОПЕРИОДА(ОтчетМастераСменыВыпуск.Ссылка.Дата, МЕСЯЦ) = НАЧАЛОПЕРИОДА(АНМ_ПланПроизводительностиЛинии2условия.Период, МЕСЯЦ))
            И ОтчетМастераСменыВыпуск.Ссылка.Смена = АНМ_ПланПроизводительностиЛинии2условия.Смена
           ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АНМ_ПланПроизводительностиЛинии КАК АНМ_ПланПроизводительностиЛинии3условия
        ПО (НАЧАЛОПЕРИОДА(ОтчетМастераСменыВыпуск.Ссылка.Дата, МЕСЯЦ) = НАЧАЛОПЕРИОДА(АНМ_ПланПроизводительностиЛинии3условия.Период, МЕСЯЦ))
            И ОтчетМастераСменыВыпуск.Ссылка.Смена = АНМ_ПланПроизводительностиЛинии3условия.Смена
            И ОтчетМастераСменыВыпуск.Номенклатура = АНМ_ПланПроизводительностиЛинии3условия.Номенклатура
11 D_E_S_131
 
21.05.15
17:29
Предлагаю сделать 2 подзапроса. В 1-м сделать условие на равенство по Номенклатуре, а во 2-м без этого условия. так же добавить поле "Приоритет". Для 1-го подзапроса установить Приоритет = 1, а для 2-го "2".
12 ssh2006
 
21.05.15
17:53
(0) можно выбрать две таблицы РС и двалевых соед с ТЧ. Первую соединять по условию дата смена пустая номенклатура, вторую - дата смена номенклатура
и дальше выбор/когда/тогда
13 Бубка Гоп
 
21.05.15
17:56
(7) имхо, провреку по номенклатуре надо бы попробовать вынести из соединения в условие