Имя: Пароль:
1C
1С v8
ЛЕВОЕ или ВНУТРЕННЕЕ СОЕДИНЕНИЕ по условию
0 Lekh72
 
01.04.13
17:29
Подскажите, как по определенному логическому условию в коде записать тип соединения?

ВЫБРАТЬ
   Продажи.Организация,
   Продажи.Склад,
   Продажи.Контрагент,
   Продажи.Номенклатура,
   Продажи.ХарактеристикаНоменклатуры,
   Продажи.ХарактеристикаНоменклатуры.Поставщик КАК Поставщик,
   Продажи.ХарактеристикаНоменклатуры.ДоговорПоставки КАК ДоговорПоставки,
   Продажи.ДокументПродажи,
   Продажи.Количество КАК Количество,
   ЕСТЬNULL(Продажи.Сумма, 0) КАК СтоимостьБезНДС,
   ЕСТЬNULL(Продажи.СуммаНДС, 0) КАК СуммаНДС,
   ЕСТЬNULL(Продажи.Сумма, 0) + ЕСТЬNULL(Продажи.СуммаНДС, 0) КАК СтоимостьФакт,
   ЕСТЬNULL(Продажи.ХарактеристикаНоменклатуры.ЦенаУчетная, 0) * ЕСТЬNULL(Продажи.Количество, 0) КАК БухгСебестоимость,
   Продажи.ДокументПродажи.Дата КАК ДатаСделки,
   Продажи.ДокументПродажи.Ответственный КАК Ответственный,
   Продажи.Себестоимость КАК Себестоимость,
   ХарактеристикаНоменклатурыКомплектующие.Партия.Владелец КАК Комплектующие,
   ВЫБОР
       КОГДА ЕСТЬNULL(ХарактеристикаНоменклатурыКомплектующие.ВыходКомплектов, 0) = 0
           ТОГДА 0
       ИНАЧЕ ХарактеристикаНоменклатурыКомплектующие.РасходКомплектующих / ХарактеристикаНоменклатурыКомплектующие.ВыходКомплектов
   КОНЕЦ * ЕСТЬNULL(Продажи.Количество, 0) КАК КоличествоВКомплектах,
   НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ) КАК Поле1,
   ВложенныйЗапрос.Команда
ИЗ
   РегистрНакопления.Продажи КАК Продажи
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикаНоменклатуры.Комплектующие КАК ХарактеристикаНоменклатурыКомплектующие
       ПО Продажи.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатурыКомплектующие.Ссылка

Вот здесь нужно чтобы было или одно или другое соединение
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           СоставКоманд.Команда КАК Команда,
           СоставКоманд.Ответственный КАК Ответственный,
           СоставКоманд.Организация КАК Организация,
           СоставКоманд.ВКоманде КАК ВКоманде
       ИЗ
           РегистрСведений.СоставКоманд КАК СоставКоманд
       ГДЕ
           СоставКоманд.ВКоманде = ИСТИНА) КАК ВложенныйЗапрос
       ПО Продажи.Организация = ВложенныйЗапрос.Организация
           И Продажи.ДокументПродажи.Ответственный = ВложенныйЗапрос.Ответственный
{ХАРАКТЕРИСТИКИ
   ТИП(Справочник)
   ВИДЫХАРАКТЕРИСТИК ПланВидовХарактеристик.СвойстваОбъектов
   ПОЛЕКЛЮЧА Ссылка
   ПОЛЕИМЕНИ Наименование
   ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения
   ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ЗначенияСвойствОбъектов
   ПОЛЕОБЪЕКТА Объект
   ПОЛЕВИДА Свойство
   ПОЛЕЗНАЧЕНИЯ Значение }
{ХАРАКТЕРИСТИКИ
   ТИП(Справочник)
   ВИДЫХАРАКТЕРИСТИК Справочник.КатегорииОбъектов
   ПОЛЕКЛЮЧА Ссылка
   ПОЛЕИМЕНИ Наименование
   ПОЛЕТИПАЗНАЧЕНИЯ НазначениеКатегории
   ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.КатегорииОбъектов
   ПОЛЕОБЪЕКТА Объект
   ПОЛЕВИДА Категория }
1 vicof
 
01.04.13
17:30
ВЫБОР КОГДА?
2 fisher
 
01.04.13
17:33
Дык просто добавь в условие первого соединения И <ЛогическоеВыражение>, а в условие второго И НЕ <ЛогическоеВыражение>
3 Lekh72
 
01.04.13
17:33
Я думаю в этом же направлении. Только как это в коде должно выглядеть?
4 Maxus43
 
01.04.13
17:35
типа
Выбрать Когда поле1=1 Тогда т1.Поле2 = т2.Поле3 Иначе Истина Конец
5 fisher
 
01.04.13
17:36
Тьфу, туплю.
Если тебе надо просто или ЛЕВОЕ или ВНУТРЕННЕЕ, делай просто ЛЕВОЕ. А в условия на результат соединения добавь нужный отбор. ЛЕВОЕ с правильным отбором даст результат аналогичный ВНУТРЕННЕМУ.
6 fisher
 
01.04.13
17:38
Что-то типа
ГДЕ <ИстинаЕслиНадоЛевое> ИЛИ НЕ <ПолеПравогоНабора> ЕСТЬ NULL
7 Lekh72
 
01.04.13
17:43
(5) хорошая мысль!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс