Переключение на Главную Страницу Страницы: [1] 2 3 ... 5 ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос к ТЧ разных документов (число прочтений - 13127 )
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Запрос к ТЧ разных документов
06. Марта 2012 :: 10:48
Печать  
Здравствуйте. Подскажите новичку как правильно написать запрос к табличной части в разных документах. Я написал запрос к документу РеализацияТоваров, а если я хочу РеализацияТоваров, ПоступлениеТоваров, Списание и т.д. Подскажите пожалуйста. Спасибо

     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     ТекстЗапроса = "
     |SELECT
     |    $Док.Склад as [Склад $Справочник.МестаХранения],
     |    $ДокС.ТМЦ as [Товар $Справочник.Номенклатура],
     |    SUM($ДокС.Количество) as Количество
     |FROM
     |    $ДокументСтроки.РеализацияТоваров as ДокС
     |INNER JOIN
     |    $Документ.РеализацияТоваров as Док ON Док.IDDoc = ДокС.IDDoc AND
     |                                  $Док.Склад = :ВыбСклад1
     |INNER JOIN
     |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND
     |                       Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |                       Жур.Closed & 1 = 1
     |GROUP BY
     |    $Док.Склад, $ДокС.ТМЦ WITH ROLLUP";
     RS.УстановитьТекстовыйПараметр("ВыбСклад1", ВыбСклад);
     RS.УстановитьТекстовыйПараметр("НачДата", ВыбНачПериода);
     RS.УстановитьТекстовыйПараметр("КонДата", ВыбКонПериода);
     ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Запрос к ТЧ разных документов
Ответ #1 - 06. Марта 2012 :: 10:56
Печать  
через union вестимо
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #2 - 06. Марта 2012 :: 10:59
Печать  
А по подробней можно, небольшой пример. Заранее спс
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #3 - 06. Марта 2012 :: 11:04
Печать  
Eprst писал(а) 06. Марта 2012 :: 10:56:
через union вестимо

А по подробней можно, как испоьзовать в данном примере. Заранее спс
  
Наверх
 
IP записан
 
antoneus
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 16. Марта 2009
Пол: Мужской
Re: Запрос к ТЧ разных документов
Ответ #4 - 06. Марта 2012 :: 12:05
Печать  
а через coalesce не?

SELECT
     |    coalesce($Реализация.Склад, $Поступление.Склад) as [Склад $Справочник.МестаХранения],
....
     |FROM
     |    _1sjourn (nolock)
...
left join
...таблицы документов...
where iddocdef in ($ВидДокумента.РеализацияТоваров, ...) and ...условия...
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос к ТЧ разных документов
Ответ #5 - 07. Марта 2012 :: 01:28
Печать  
antoneus писал(а) 06. Марта 2012 :: 12:05:
а через coalesce не?
а подумать не?
если ты будешь джойнить разные доки друг к другу, то часть строк у тебя задублируется, а часть пропадет. Объяснять? или сам поймешь?
UNION же позволит в тех же полях получить данные из разных таблиц без пересечений, а объединением... как и следует из значения имени упомянутого оператора.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к ТЧ разных документов
Ответ #6 - 07. Марта 2012 :: 06:53
Печать  
Dmitry The Wing писал(а) 07. Марта 2012 :: 01:28:
Объяснять? или сам поймешь?

Объясни, конечно.  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос к ТЧ разных документов
Ответ #7 - 07. Марта 2012 :: 08:10
Печать  
Ivanych писал(а) 06. Марта 2012 :: 10:48:
Здравствуйте. Подскажите новичку как правильно написать запрос к табличной части в разных документах. Я написал запрос к документу РеализацияТоваров, а если я хочу РеализацияТоваров, ПоступлениеТоваров, Списание и т.д. Подскажите пожалуйста. Спасибо


Примерно так:
Код
Выбрать все
   ТекстЗапроса = "
   |SELECT
   |	TMP.Склад as [Склад $Справочник.МестаХранения],
   |    TMP.ТМЦ as [Товар $Справочник.Номенклатура],
   |    SUM(TMP.Количество) as Количество
   |FROM
   |(
   |SELECT
   |    $Док.Склад as [Склад],
   |    $ДокС.ТМЦ as [Товар],
   |    $ДокС.Количество as Количество
   |FROM
   |    $ДокументСтроки.РеализацияТоваров as ДокС
   |INNER JOIN
   |    $Документ.РеализацияТоваров as Док ON Док.IDDoc = ДокС.IDDoc AND
   |					    $Док.Склад = :ВыбСклад1
   |INNER JOIN
   |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND
   |			     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |			     Жур.Closed & 1 = 1
   |
   |UNION ALL
   |
   |SELECT
   |    $Док2.Склад as [Склад],
   |    $ДокС2.ТМЦ as [Товар],
   |    $ДокС.Количество as Количество
   |FROM
   |    $ДокументСтроки.ПоступлениеТоваров as ДокС2
   |INNER JOIN
   |    $Документ.ПоступлениеТоваров as Док2 ON Док2.IDDoc = ДокС2.IDDoc AND
   |					    $Док2.Склад = :ВыбСклад1
   |INNER JOIN
   |    _1SJourn as Жур ON Жур.IDDoc = ДокС2.IDDoc AND
   |			     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |			     Жур.Closed & 1 = 1
   |
   |UNION ALL
   |
   |SELECT
   |    $Док3.Склад as [Склад],
   |    $ДокС3.ТМЦ as [Товар],
   |    $ДокС.Количество as Количество
   |FROM
   |    $ДокументСтроки.Списание as ДокС3
   |INNER JOIN
   |    $Документ.Списание as Док3 ON Док3.IDDoc = ДокС3.IDDoc AND
   |					    $Док3.Склад = :ВыбСклад1
   |INNER JOIN
   |    _1SJourn as Жур ON Жур.IDDoc = ДокС3.IDDoc AND
   |			     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |			     Жур.Closed & 1 = 1
   |) AS TNP
   |GROUP BY
   |    TMP.Склад, TMP.ТМЦ WITH ROLLUP
   |";
 

  
Наверх
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #8 - 11. Марта 2012 :: 03:10
Печать  
Огромное спасибо.
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #9 - 11. Марта 2012 :: 05:35
Печать  
pvase писал(а) 07. Марта 2012 :: 08:10:
Ivanych писал(а) 06. Марта 2012 :: 10:48:
Здравствуйте. Подскажите новичку как правильно написать запрос к табличной части в разных документах. Я написал запрос к документу РеализацияТоваров, а если я хочу РеализацияТоваров, ПоступлениеТоваров, Списание и т.д. Подскажите пожалуйста. Спасибо


Примерно так:
Код
Выбрать все
   ТекстЗапроса = "
   |SELECT
   |	TMP.Склад as [Склад $Справочник.МестаХранения],
   |    TMP.ТМЦ as [Товар $Справочник.Номенклатура],
   |    SUM(TMP.Количество) as Количество
   |FROM
   |(
   |SELECT
   |    $Док.Склад as [Склад],
   |    $ДокС.ТМЦ as [Товар],
   |    $ДокС.Количество as Количество
   |FROM
   |    $ДокументСтроки.РеализацияТоваров as ДокС
   |INNER JOIN
   |    $Документ.РеализацияТоваров as Док ON Док.IDDoc = ДокС.IDDoc AND
   |					    $Док.Склад = :ВыбСклад1
   |INNER JOIN
   |    _1SJourn as Жур ON Жур.IDDoc = ДокС.IDDoc AND
   |			     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |			     Жур.Closed & 1 = 1
   |
   |UNION ALL
   |
   |SELECT
   |    $Док2.Склад as [Склад],
   |    $ДокС2.ТМЦ as [Товар],
   |    $ДокС.Количество as Количество
   |FROM
   |    $ДокументСтроки.ПоступлениеТоваров as ДокС2
   |INNER JOIN
   |    $Документ.ПоступлениеТоваров as Док2 ON Док2.IDDoc = ДокС2.IDDoc AND
   |					    $Док2.Склад = :ВыбСклад1
   |INNER JOIN
   |    _1SJourn as Жур ON Жур.IDDoc = ДокС2.IDDoc AND
   |			     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |			     Жур.Closed & 1 = 1
   |
   |UNION ALL
   |
   |SELECT
   |    $Док3.Склад as [Склад],
   |    $ДокС3.ТМЦ as [Товар],
   |    $ДокС.Количество as Количество
   |FROM
   |    $ДокументСтроки.Списание as ДокС3
   |INNER JOIN
   |    $Документ.Списание as Док3 ON Док3.IDDoc = ДокС3.IDDoc AND
   |					    $Док3.Склад = :ВыбСклад1
   |INNER JOIN
   |    _1SJourn as Жур ON Жур.IDDoc = ДокС3.IDDoc AND
   |			     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
   |			     Жур.Closed & 1 = 1
   |) AS TNP
   |GROUP BY
   |    TMP.Склад, TMP.ТМЦ WITH ROLLUP
   |";
 



Спасибо за пример. Очень помогло. А можно еще уточнить как использовать в прямых запросах
Если ВыбСклад.Выбран()=1 Тогда
ТекстЗапросаРеализация = ТекстЗапросаРеализация +"
|Условие(Склад = ВыбСклад);";
КонецЕсли;

  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Запрос к ТЧ разных документов
Ответ #10 - 11. Марта 2012 :: 05:40
Печать  
Код
Выбрать все
ТекстЗапроса = "
....

" + ?( ВыбСклад.Выбран()=1, "AND $Док.Склад = :ВыбСклад1", "") + "
... 

  
Наверх
wwwICQ  
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #11 - 11. Марта 2012 :: 05:55
Печать  
Anatol писал(а) 11. Марта 2012 :: 05:40:
Код
Выбрать все
ТекстЗапроса = "
....

" + ?( ВыбСклад.Выбран()=1, "AND $Док.Склад = :ВыбСклад1", "") + "
... 


Спасибо работает, а если выбсклад.этогруппа
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #12 - 11. Марта 2012 :: 05:56
Печать  
Ivanych писал(а) 11. Марта 2012 :: 05:55:
Anatol писал(а) 11. Марта 2012 :: 05:40:
Код
Выбрать все
ТекстЗапроса = "
....

" + ?( ВыбСклад.Выбран()=1, "AND $Док.Склад = :ВыбСклад1", "") + "
... 


Спасибо работает, а если выбсклад.этогруппа

Или список
  
Наверх
 
IP записан
 
antoneus
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 16. Марта 2009
Пол: Мужской
Re: Запрос к ТЧ разных документов
Ответ #13 - 11. Марта 2012 :: 06:05
Печать  
УложитьСписокОбъектов
  
Наверх
 
IP записан
 
Ivanych
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 50
Зарегистрирован: 21. Февраля 2012
Re: Запрос к ТЧ разных документов
Ответ #14 - 11. Марта 2012 :: 06:14
Печать  
antoneus писал(а) 11. Марта 2012 :: 06:05:
УложитьСписокОбъектов

Спасибо разобрался. Улыбка
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 5
ОтправитьПечать