Имя: Пароль:
1C
1С v8
Помогите плз с запросом...
0 WF72
 
03.12.12
11:20
Выбираю все регистраторы по аналитике контрагент-договор, у которых есть остатки на заданную дату. Но как только добавляю левое соединение, суммы остатков начинают множиться на количество регистраторов. Скажите плз, что не так в запросе?
Запрос.Текст =
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    Остатки.Субконто1 КАК Контрагент,
   |    Остатки.Субконто2 КАК Договор,
   |    Обороты.Регистратор КАК Рег,
   |    СУММА(Остатки.СуммаОстатокДт) КАК СКД,
   |    СУММА(Остатки.СуммаОстатокКт) КАК СКК
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.Остатки(&КонПериода, Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК Остатки
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(, &КонПериода, Регистратор, , , Организация = &Организация) КАК Обороты
   |        ПО Остатки.Субконто1 = Обороты.Субконто1
   |            И Остатки.Субконто2 = Обороты.Субконто2
   |            И Остатки.Счет = Обороты.Счет
   |
   |СГРУППИРОВАТЬ ПО
   |    Остатки.Субконто1,
   |    Остатки.Субконто2,
   |    Обороты.Регистратор
   |
   |УПОРЯДОЧИТЬ ПО
   |    Контрагент,
   |    Договор,
   |    Рег
   |ИТОГИ
   |    СУММА(СКД),
   |    СУММА(СКК)
   |ПО
   |    ОБЩИЕ,
   |    Контрагент,
   |    Договор
   |АВТОУПОРЯДОЧИВАНИЕ";
1 Maxus43
 
03.12.12
11:20
ОстаткиИОбороты есть табличка
2 Undefined vs NULL
 
03.12.12
11:21
"Выбираю все регистраторы по аналитике контрагент-договор, у которых есть остатки на заданную дату"
расшифруй
3 WF72
 
03.12.12
11:25
(1) То есть делать запрос сразу по регистру ОстаткиИОбороты? Но ведь выберется всё данные подряд (и остатки и обороты), а мне нужно только по контрагентам/договорам с остатками на заданную дату.

(2) Выбираем сначала только тех контрагентов, у которых есть остатки по заданным счетам на заданную дату. И для этих контрагентов нужно показать документы-регистраторы.
4 Maxus43
 
03.12.12
11:29
(3) ну поставь условие что Нач остаток <> 0. будет тоже самое
5 Ёпрст
 
03.12.12
11:29
(3) условием на остаток отрежешь лишнее потом
6 Undefined vs NULL
 
03.12.12
11:30
временная таблица спасет
7 Ёпрст
 
03.12.12
11:30
А в той поделке, что в (0) - нужно Объеденить Всё, а не левое соединение, если что
8 WF72
 
03.12.12
15:07
(4) Поменял запрос, но теперь почему-то светятся еще и данные, у которых нет конечных остатков... не все, а только некоторые. По оборотке у этих контрагентов конечных остатков нет, а в запрос тем не менее они попадают...
Запрос.Текст =
   "ВЫБРАТЬ
   |    ВыбРег.Субконто1 КАК Контрагент,
   |    ВыбРег.Субконто2 КАК Договор,
   |    ВыбРег.Регистратор КАК Регистратор,
   |    СУММА(ВыбРег.СуммаКонечныйОстатокДт) КАК СКД,
   |    СУММА(ВыбРег.СуммаКонечныйОстатокКт) КАК СКК
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, &КонПериода, Регистратор, , Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ВыбРег
   |ГДЕ
   |    ВыбРег.СуммаКонечныйОстаток <> 0
   |        И ВыбРег.СуммаНачальныйОстаток = 0
   |
   |СГРУППИРОВАТЬ ПО
   |    ВыбРег.Субконто1,
   |    ВыбРег.Субконто2,
   |    ВыбРег.Регистратор
   |
   |УПОРЯДОЧИТЬ ПО
   |    Контрагент,
   |    Договор,
   |    Регистратор
   |ИТОГИ
   |    СУММА(СКД),
   |    СУММА(СКК)
   |ПО
   |    ОБЩИЕ,
   |    Контрагент,
   |    Договор
   |АВТОУПОРЯДОЧИВАНИЕ";
9 WF72
 
04.12.12
10:40
(7) Попробовал вариант с Объединить всё. Так гораздо лучше! Но в запрос попадают и все контрагенты с оборотами (без конечного остатка), правда уже без сумм, что самое главное. Можно отфильтровать их при выводе, но хотелось бы сразу в запросе. Подскажи плз, что для этого поменять в запросе...
Запрос.Текст =
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    Остатки.Субконто1 КАК Контрагент,
   |    Остатки.Субконто2 КАК Договор,
   |    СУММА(Остатки.СуммаОстатокДт) КАК СКД,
   |    СУММА(Остатки.СуммаОстатокКт) КАК СКК,
   |    0 КАК Рег
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.Остатки(&КонПериода, Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК Остатки
   |
   |СГРУППИРОВАТЬ ПО
   |    Остатки.Субконто1,
   |    Остатки.Субконто2
   |
   |ОБЪЕДИНИТЬ
   |
   |ВЫБРАТЬ
   |    Обороты.Субконто1,
   |    Обороты.Субконто2,
   |    0,
   |    0,
   |    Обороты.Регистратор
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.Обороты(, &КонПериода, Регистратор, Счет В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация, , ) КАК Обороты
   |
   |СГРУППИРОВАТЬ ПО
   |    Обороты.Регистратор,
   |    Обороты.Субконто1,
   |    Обороты.Субконто2
   |
   |УПОРЯДОЧИТЬ ПО
   |    Контрагент,
   |    Договор,
   |    Рег
   |ИТОГИ
   |    СУММА(СКД),
   |    СУММА(СКК)
   |ПО
   |    ОБЩИЕ,
   |    Контрагент,
   |    Договор
   |АВТОУПОРЯДОЧИВАНИЕ";
10 Maxus43
 
04.12.12
10:42
(8) какое условие поставил, так и работает:

  |    ВыбРег.СуммаКонечныйОстаток <> 0
   |        И ВыбРег.СуммаНачальныйОстаток = 0

можешь помедитировать над тем что получается, и почему какие остатки показывает
11 Maxus43
 
04.12.12
10:43
>>светятся еще и данные, у которых нет конечных остатков
>>ВыбРег.СуммаКонечныйОстаток <> 0
ты это и сказал запросу делать
12 Maxus43
 
04.12.12
10:44
(11) + тьфу, т.е. показывет данные в случае
СуммаКонечныйОстаток = 0
И
СуммаНачальныйОстаток <> 0
13 Maxus43
 
04.12.12
10:45
не, пойду кофя пить, не проснулся
14 WF72
 
04.12.12
10:55
(13) :)
СуммаНачальныйОстаток = 0 это чтобы в запросе первой строкой по контрагенту не вылезали итоговые данные на конец периода, без регистратора, они не нужны.
СуммаКонечныйОстаток <> 0 это как раз для того, чтобы отсечь обороты без текущих остатков.
В этом запросе разобраться пока не смог, принялся за вариант с объединением.
15 WF72
 
04.12.12
10:56
получается, что условие СуммаКонечныйОстаток <> 0 почему-то работает криво...
16 Maxus43
 
04.12.12
10:57
(15) на всякий случай сделай  СУММА(ЕстьNull(ВыбРег.СуммаКонечныйОстатокДт,0)) КАК СКД
у СКК также
17 WF72
 
04.12.12
11:05
Сделал, ничего не поменялось. Получается, в СуммаКонечныйОстаток есть данные, хотя оборотка их не светит... 8-О
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший