Имя: Пароль:
1C
1С v8
СКД связи наборов данных, опять...
0 1Сергей
 
05.06.13
14:30
Как я ненавижу СКД... Но, сейчас не об этом.

Есть схема компоновки данных о двух наборов данных (оба запросы, хотя это не важно). Первым Запросом получаю данные из документов (назовём их накладные) в несколько уровней:
- Поставщик
   - Документ
       - СтрокаДокумента
Вторым запросом мне нужно получить сумму оплаты по Документу. Почему два запроса? Потому, что накладная оплачивается полностью, а в выборке идёт детализация до строк документа. Т.е. если одним запросом, то он каждой строке найдёт документы оплаты. А мне надо только по документу в целом.

Теперь в чем загвоздка. В документе оплаты в реквизите ДокументОснование указывается Накладная или Заявка. Заявка же является основанием и для накладной тоже. Мне нужно соединять данные по двум условиям по ИЛИ. Чего эта СКД не может.

Как соединить Два набора данных по двум условиям с ИЛИ?

ЗЫ мисту гуглил, Хрусталёву читал
1 Ёпрст
 
05.06.13
14:32
Её не читать надо было а и..ь
2 1Сергей
 
05.06.13
14:33
(1) ты на восьмёрку так и не переехал?
3 1Сергей
 
05.06.13
14:43
Где же вы, защитники СКД?
4 Ёпрст
 
05.06.13
14:45
(2) да нет, почему, есть и 8.1 и 8.2
5 Ёпрст
 
05.06.13
14:46
с скд мало знаком, так.. примерчики только, лень мне
6 acsent
 
05.06.13
14:48
нужно объединение, а не соединение
7 ssh2006
 
05.06.13
14:48
(0)  С ходу:

[в реквизите ДокументОснование указывается Накладная или Заявка. ] - просто сделай в запросе одно поле через
выбор когда тогда
8 1Сергей
 
05.06.13
14:48
(7) в каком из?
9 fisher
 
05.06.13
14:48
Он, значит, СКД ненавидит.
А защитники ему, значит, помогать обязаны.
<ушел тупить на развлекательный ресурс>
10 Alpen906
 
05.06.13
14:49
Если я правильно понял, то во второй набор надо отобрать документы оплаты, у которых в документе основании стоит Накладная.
11 be-may
 
05.06.13
14:50
было бы все-таки намного лучше, если бы текст запроса был бы тоже перед глазами.  (просто исчезли бы вопросы типо (8) и люди бы тебе кодом писали..)
12 1Сергей
 
05.06.13
14:50
(10) да, или заявка, которая в накладной тоже стоит в документе основания
13 1Сергей
 
05.06.13
14:51
(11) вот я щас буду портянку на 100500 страниц вываливать. Оно вам нннада?
14 ssh2006
 
05.06.13
14:52
(8) во втором
15 Alpen906
 
05.06.13
14:53
КМК, Накладная во второй набор не должная попадать. Правильно говорят, запрос покажи
16 be-may
 
05.06.13
14:55
(13) фига се ты там понаписал..)

Я б выложила б. Или принтскрин или код.. Более предметный разговор получится.
Жалко буковок на форуме тебе что ли ?)
17 1Сергей
 
05.06.13
14:59
ну, ок. Выкинул немного:

ВЫБРАТЬ
   Накладные.Ссылка,
   Накладные.Автор,
   Накладные.ФормаОплаты,
   Накладные.Пассажир,
   ...
   Накладные.СуммаТотал КАК СуммаТотал,
   Накладные.ВидТуризма,
   Накладные.НомерБСО,
   Накладные.ТарифВВалюте КАК ТарифВВалюте,
   Накладные.Валюта,
   Накладные.ДокументОснование
ИЗ
   (ВЫБРАТЬ
       РеализацияТуристическихУслуг.Ссылка КАК Ссылка,
       РеализацияТуристическихУслуг.Автор КАК Автор,
       РеализацияТуристическихУслуг.ФормаОплаты КАК ФормаОплаты,
       РеализацияТуристическихУслугТурУслуги.Пассажир КАК Пассажир,
       ...
       РеализацияТуристическихУслугТурУслуги.Сумма КАК СуммаТотал,
       РеализацияТуристическихУслугТурУслуги.ВидТуризма КАК ВидТуризма,
       TAP_ДопУслуги.НомерБСО КАК НомерБСО,
       ВЫБОР
           КОГДА РеализацияТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Гостиница
               ТОГДА TAP_ГостиницаТарифы.ТарифПоставщикаВал + TAP_ГостиницаТарифы.РаннийЗаездТариф + TAP_ГостиницаТарифы.ПозднийВыездТариф
           КОГДА РеализацияТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_ДопУслуги
               ТОГДА TAP_ДопУслугиТарифы.ТарифВал
           КОГДА РеализацияТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Виза
               ТОГДА TAP_Виза.ТарифВал
           ИНАЧЕ 0
       КОНЕЦ КАК ТарифВВалюте,
       ВЫБОР
           КОГДА РеализацияТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Гостиница
               ТОГДА TAP_ГостиницаТарифы.ВалютаПоставщика
           КОГДА РеализацияТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_ДопУслуги
               ТОГДА TAP_ДопУслугиТарифы.ВалютаТарифа
           КОГДА РеализацияТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Виза
               ТОГДА TAP_Виза.ТарифВалюта
           ИНАЧЕ ""
       КОНЕЦ КАК Валюта,
       РеализацияТуристическихУслуг.ДокументОснование КАК ДокументОснование
   ИЗ
       Документ.РеализацияТуристическихУслуг.ТурУслуги КАК РеализацияТуристическихУслугТурУслуги
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТуристическихУслуг КАК РеализацияТуристическихУслуг
           ПО РеализацияТуристическихУслугТурУслуги.Ссылка = РеализацияТуристическихУслуг.Ссылка
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_ДопУслуги КАК TAP_ДопУслуги
               ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_ДопУслуги.Тарифы КАК TAP_ДопУслугиТарифы
               ПО TAP_ДопУслуги.Ссылка = TAP_ДопУслугиТарифы.Ссылка
                   И (TAP_ДопУслугиТарифы.НомерСтроки = 1)
           ПО РеализацияТуристическихУслугТурУслуги.Карточка = TAP_ДопУслуги.Ссылка
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_Виза КАК TAP_Виза
           ПО РеализацияТуристическихУслугТурУслуги.Карточка = TAP_Виза.Ссылка
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_Гостиница КАК TAP_Гостиница
               ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_Гостиница.Тарифы КАК TAP_ГостиницаТарифы
               ПО TAP_Гостиница.Ссылка = TAP_ГостиницаТарифы.Ссылка
                   И (TAP_ГостиницаТарифы.НомерСтроки = 1)
           ПО РеализацияТуристическихУслугТурУслуги.Карточка = TAP_Гостиница.Ссылка
   ГДЕ
       РеализацияТуристическихУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
       И РеализацияТуристическихУслуг.ПометкаУдаления = ЛОЖЬ
       И РеализацияТуристическихУслуг.Проведен = ИСТИНА
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ВозвратТуристическихУслуг.Ссылка,
       ВозвратТуристическихУслуг.Автор,
       ВозвратТуристическихУслуг.ФормаОплаты,
       ВозвратТуристическихУслугТурУслуги.Пассажир,
       ...
       ВозвратТуристическихУслугТурУслуги.Сумма,
       ВозвратТуристическихУслугТурУслуги.ВидТуризма,
       TAP_ДопУслуги.НомерБСО,
       ВЫБОР
           КОГДА ВозвратТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Гостиница
               ТОГДА TAP_ГостиницаТарифы.ТарифПоставщикаВал + TAP_ГостиницаТарифы.РаннийЗаездТариф + TAP_ГостиницаТарифы.ПозднийВыездТариф
           КОГДА ВозвратТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_ДопУслуги
               ТОГДА TAP_ДопУслугиТарифы.ТарифВал
           КОГДА ВозвратТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Виза
               ТОГДА TAP_Виза.ТарифВал
           ИНАЧЕ 0
       КОНЕЦ,
       ВЫБОР
           КОГДА ВозвратТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Гостиница
               ТОГДА TAP_ГостиницаТарифы.ВалютаПоставщика
           КОГДА ВозвратТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_ДопУслуги
               ТОГДА TAP_ДопУслугиТарифы.ВалютаТарифа
           КОГДА ВозвратТуристическихУслугТурУслуги.Карточка ССЫЛКА Документ.TAP_Виза
               ТОГДА TAP_Виза.ТарифВалюта
           ИНАЧЕ ""
       КОНЕЦ,
       ВозвратТуристическихУслуг.ДокументОснование
   ИЗ
       Документ.ВозвратТуристическихУслуг.ТурУслуги КАК ВозвратТуристическихУслугТурУслуги
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТуристическихУслуг КАК ВозвратТуристическихУслуг
           ПО ВозвратТуристическихУслугТурУслуги.Ссылка = ВозвратТуристическихУслуг.Ссылка
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_ДопУслуги КАК TAP_ДопУслуги
               ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_ДопУслуги.Тарифы КАК TAP_ДопУслугиТарифы
               ПО TAP_ДопУслуги.Ссылка = TAP_ДопУслугиТарифы.Ссылка
                   И (TAP_ДопУслугиТарифы.НомерСтроки = 2)
           ПО ВозвратТуристическихУслугТурУслуги.Карточка = TAP_ДопУслуги.Ссылка
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_Гостиница КАК TAP_Гостиница
               ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_Гостиница.Тарифы КАК TAP_ГостиницаТарифы
               ПО TAP_Гостиница.Ссылка = TAP_ГостиницаТарифы.Ссылка
                   И (TAP_ГостиницаТарифы.НомерСтроки = 2)
           ПО ВозвратТуристическихУслугТурУслуги.Карточка = TAP_Гостиница.Ссылка
           ЛЕВОЕ СОЕДИНЕНИЕ Документ.TAP_Виза КАК TAP_Виза
           ПО ВозвратТуристическихУслугТурУслуги.Карточка = TAP_Виза.Ссылка
   ГДЕ
       ВозвратТуристическихУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
       И ВозвратТуристическихУслуг.ПометкаУдаления = ЛОЖЬ
       И ВозвратТуристическихУслуг.Проведен = ИСТИНА) КАК Накладные
18 1Сергей
 
05.06.13
15:04
(14) Заявки может ведь не быть.
Вот ситуации, при которых документы считаются связаными:
1.
Накладная.ДокументОснование = Неопределено
ДокументОплаты.ДокументОснование = Накладная

2.
Накладная.ДокументОснование = Заявка
ДокументОплаты.ДокументОснование = Заявка

3.
Накладная.ДокументОснование = Заявка
ДокументОплаты.ДокументОснование = Накладная

Вот третий вариант всё портит. Если бы не он, можно было бы использовать ВЫБОР
19 1Сергей
 
05.06.13
15:06
(17) + Второй Запрос:

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

ВЫБРАТЬ
   ПлатежноеПоручениеИсходящее.ДокументОснование КАК ДокументОснование,
   ПлатежноеПоручениеИсходящее.Ссылка,
   ПлатежноеПоручениеИсходящее.Контрагент,
   ПлатежноеПоручениеИсходящее.СуммаДокумента
ИЗ
   Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
ГДЕ
   ПлатежноеПоручениеИсходящее.Проведен И
   (ПлатежноеПоручениеИсходящее.ДокументОснование ССЫЛКА Документ.TAP_Заявка
   ИЛИ ПлатежноеПоручениеИсходящее.ДокументОснование ССЫЛКА Документ.РеализацияТуристическихУслуг
   ИЛИ ПлатежноеПоручениеИсходящее.ДокументОснование ССЫЛКА Документ.ВозвратТуристическихУслуг)
20 1Сергей
 
05.06.13
15:14
О, появилася мысля. Сделать один запрос по шапкам накладным (без ТЧ), соединить с оплатами, а вторым набором уже соединять ТЧ с суммами
21 1Сергей
 
05.06.13
15:16
(20) + нет. не взлетит. мне нужно соединять по поставщику, а он в ТЧ
22 ssh2006
 
05.06.13
15:20
Если в ДокументОснование стоит накладная то ок, иначе ечерез соединение с накладными по заявке определяешь накладную. Тогда в поле будет только накладная
23 1Сергей
 
05.06.13
15:30
(22) ну, если предположить, что одна заявка - одна накладная, то возможно взлетит