Имя: Пароль:
1C
1С v8
v8: Помогите с запросом
0 r_i_n_i_k
 
11.01.12
18:02
есть 2 документа, необходимо написать такой запрос, что бы в итоговую таблицу попадали ТЧ из обоих документов.
так не помогает:

ВЫБРАТЬ
   РГ_СчетНаОплатуПолученныйТовары.Номенклатура КАК НоменклатураПлан,
   ЕСТЬNULL(РГ_СчетНаОплатуПолученныйТовары.Количество, 0) КАК КоличествоПлан,
   ПоступлениеТоваровУслугТовары.Номенклатура КАК НоменклатураФакт,
   ЕСТЬNULL(ПоступлениеТоваровУслугТовары.Количество, 0) КАК КоличествоФакт
ИЗ
   Документ.РГ_СчетНаОплатуПолученный.Товары КАК РГ_СчетНаОплатуПолученныйТовары
       ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
       ПО (РГ_СчетНаОплатуПолученныйТовары.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн)
ГДЕ
   ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн = &ДокОсн

подскажите пжл
1 Rie
 
11.01.12
18:04
(0) Как должны соединяться сами табличные части? По товару?
2 Nagaru
 
11.01.12
18:04
ну для начала приведи пример таличных частей и что в итоге тыхочешь получить, дальше будет видно что надо изменить в твоем запросе
3 АНДР
 
11.01.12
18:04
Объеденить (Union)
4 a_alenkin
 
11.01.12
18:06
Делаешь объединение - потом группируешь по номенклатуре, причем при объединении первый запрос - Количество, 0 - второй - 0, Количество
5 r_i_n_i_k
 
11.01.12
18:06
колонки в обеих ТЧ "Номенклатура", "Количество"
должны соединяться по товару

делал через объеденить, идут сперва строки по 1й ТЧ, затем по 2й ТЧ
6 a_alenkin
 
11.01.12
18:07
(5) потом группировка
7 Rie
 
11.01.12
18:07
(3), (4) Какие объединения, господа?
Возможно, ТС хочет знать, какой товар поступил, а какой - не поступил по оплаченному счёту. Или что-то в этом роде.
8 kotletka
 
11.01.12
18:07
РГ_СчетНаОплатуПолученныйТовары.Ссылка = ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн-это в где засунуть?
а про объединение -
не по номенклатуре надо объединять не?
9 r_i_n_i_k
 
11.01.12
18:08
(7) именно так
10 r_i_n_i_k
 
11.01.12
18:08
(8) есть полученный счет и ПТиУ, созданное на основани этого счета..
надо бы отчет, который порказывал отклонения
11 Rie
 
11.01.12
18:10
(5) Так и вставь соответствующее условие
ПО (РГ_СчетНаОплатуПолученныйТовары.Номенклатура=ПоступлениеТоваровУслугТовары.Номенклатура)
И (РГ_СчетНаОплатуПолученныйТовары.Ссылка=&ДокОсн) И (ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн=&ДокОсн)
12 Rie
 
11.01.12
18:10
+(11) А условие ГДЕ в таком случае вообще выкинь
13 a_alenkin
 
11.01.12
18:11
ВЫБРАТЬ
   ВложенныйЗапрос.Номенклатура,
   СУММА(ВложенныйЗапрос.КоличествоПлан) КАК КоличествоПлан,
   СУММА(ВложенныйЗапрос.КоличествоФакт) КАК КоличествоФакт
ИЗ
   (ВЫБРАТЬ
       СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
       СчетНаОплатуПокупателюТовары.Количество КАК КоличествоПлан,
       0 КАК КоличествоФакт
   ИЗ
       Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       РеализацияТоваровУслугТовары.Номенклатура,
       0,
       РеализацияТоваровУслугТовары.Количество
   ИЗ
       Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.Номенклатура
14 Rie
 
11.01.12
18:11
(13) Не нужно ему объединение с группировкой. Соединение всё само сделает.
15 Nagaru
 
11.01.12
18:12
(11) Но только при условии, что номенклатура не дублируется в табличной части. Иначе вложенный запрос с группировкой по номенклатуре нужно будет сделать.
16 Nagaru
 
11.01.12
18:12
+(15) Я бы сделал на всякий случай
17 r_i_n_i_k
 
11.01.12
18:12
(11)
в таком случае не попадают строки, когда в Счете есть товар, а в ПТиУ - нету, или наоборот
18 Aprobator
 
11.01.12
18:14
чудно как то все. Неужели это не в каких регистрах не контролируется, что запрос приходится по докам делать?
19 a_alenkin
 
11.01.12
18:15
(11) чо такое ДокОсн?
20 Rie
 
11.01.12
18:15
(15) Это да. Согласен.
21 a_alenkin
 
11.01.12
18:15
Структура подчиненности в  критериях отбора обычно хранится
22 Rie
 
11.01.12
18:16
(19) Спроси у ТС. У него в запросе такое поле имеется.
23 Rie
 
11.01.12
18:16
(17) При полном соединении?
24 r_i_n_i_k
 
11.01.12
18:18
(19) это Счет полученный, на основани которого введено поступление
25 r_i_n_i_k
 
11.01.12
18:18
сделал как в (13), выходят все Счет полученные и все поступления..так то правильно, только хотелось бы видеть в разрезе Счетов :)
26 Nagaru
 
11.01.12
18:19
(17) Ну тогда возможно условие

И (РГ_СчетНаОплатуПолученныйТовары.Ссылка=&ДокОсн) И (ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн=&ДокОсн)

придется заменить на

ГДЕ (РГ_СчетНаОплатуПолученныйТовары.Ссылка=&ДокОсн) ИЛИ (ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн=&ДокОсн)

вроде навскидку отработает, но скорость запроса будет отвратительная.

надо точно через веменные таблицы делать
27 Nagaru
 
11.01.12
18:21
Лень пистаь запрос, но суть следующая, сначала создаешь ВТ по Счету где ссылка = &Ссылка

потом создаешь ВТ, по поступлению, где Поступление.ДокОсн = &Ссылка

потом полное соединение этих двух таблиц по номенклатуре как оно у тебя сейчас и прописано

потом удаляешь обе ВТ.
28 r_i_n_i_k
 
11.01.12
18:23
сделал как в (11), исправил как в (26) - заработало, спасибо
29 Rie
 
11.01.12
18:23
(27) Можно не создавать ВТ, использовать подзапросы с ГДЕ нужное условие.
30 r_i_n_i_k
 
11.01.12
18:25
а теперь можно как то сделать, что бы не по конкретному Счету выводилась, а по всем Счетам?
31 kosts
 
11.01.12
18:26
(29) Рекомендуется наоборот делать ВТ
32 Rie
 
11.01.12
18:26
(30) Так у тебя и должно выводиться по тому счёту, который ты параметру ДокОсн присвоил.
33 r_i_n_i_k
 
11.01.12
18:26
(32) а если я не буду присваивать &ДокОсн, что бы он по всем счетам выводил, но с группировкой по счетам
34 Nagaru
 
11.01.12
18:36
(33) Так присваивать-то его всегда нужно, но если это будет пустая ссылка, то тогда нужно сделать следующее:

1. добавь поле ЕСТЬNULL(РГ_СчетНаОплатуПолученныйТовары.Ссылка, ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн), там всега будет выводиться ссылка на документ основание

2. сделай итоги по этому полю

3. условия в запросах по ВТ с
Где РГ_СчетНаОплатуПолученныйТовары.Ссылка = &Ссылка замени на

Где РГ_СчетНаОплатуПолученныйТовары.Ссылка = &Ссылка
  ИЛИ &Ссылка = Значение(Документ.РГ_СчетНаОплатуПолученныйТовары.ПустаяСсылка)
35 r_i_n_i_k
 
11.01.12
18:43
(34) не соображу :)
36 Rie
 
11.01.12
18:51
(34) Может, ему стоит просто условием
ГДЕ НЕ (ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн ЕСТЬ NULL)
убрать те поступления, которые не по счетам?
37 Nagaru
 
11.01.12
19:02
(35) Охххх

Выбрать
   РГ_СчетНаОплатуПолученныйТовары.Номенклатура КАК Номенклатура,
   Сумма(РГ_СчетНаОплатуПолученныйТовары.Количество) КАК Количество,
   РГ_СчетНаОплатуПолученныйТовары.Ссылка КАК Ссылка
Поместить ТаблицаПлан
ИЗ
   Документ.РГ_СчетНаОплатуПолученный.Товары КАК РГ_СчетНаОплатуПолученныйТовары
ГДЕ
   Документ.РГ_СчетНаОплатуПолученный.Ссылка = &ДокОсн
   ИЛИ &ДокОсн = Значение(Документ.РГ_СчетНаОплатуПолученный.ПустаяСсылка)
Сгруппировать ПО
   Ссылка,
   Номенклатура
;

///////////////////////////////////////////////////////////////////////////////
Выбрать
   ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
   Сумма(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
   ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн КАК Ссылка
Поместить ТаблицаФакт
ИЗ
   Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
   Документ.ПоступлениеТоваровУслугТовары.Ссылка.ДокОсн = &ДокОсн
   ИЛИ &ДокОсн = Значение(Документ.РГ_СчетНаОплатуПолученный.ПустаяСсылка)
Сгруппировать ПО
   Ссылка,
   Номенклатура
;

///////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ЕСТЬNULL(ТаблицаПлан.Ссылка, ТаблицаФакт.Ссылка) КАК Счет
   ТаблицаПлан.Номенклатура КАК НоменклатураПлан,
   ЕСТЬNULL(ТаблицаПлан.Количество, 0) КАК КоличествоПлан,
   ТаблицаФакт.Номенклатура КАК НоменклатураФакт,
   ЕСТЬNULL(ТаблицаФакт.Количество, 0) КАК КоличествоФакт
ИЗ
   ТаблицаПлан КАК ТаблицаПлан
       ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаФакт КАК ТаблицаФакт
       ПО (ТаблицаПлан.Номенклатура = ТаблицаФакт.Номенклатура
           И ТаблицаПлан.Ссылка = ТаблицаФакт.Ссылка)
ИТОГИ ПО
  Счет
38 Nagaru
 
11.01.12
19:03
+(37) Тут могут быть ошибки, писал от руки и по памяти, но основную суть я вроде как изобразил полностью.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн