Имя: Пароль:
1C
1C 7.7
v7: Сумма по колонке в прямом запросе.
0 Eeakie
 
15.05.14
01:50
Извиняюсь за тупость, но как в прямом запросе посчитать сумму колонки в документе (аналогично Док.Итог(<Колонка>))?.

select
   Док.iddoc as Документ,
   ??? as Сумма
from <...>
where <...>
group by <...>
1 Eeakie
 
15.05.14
01:58
Обычное sum($Документ.Сумма) дает результат, но в некоторых случаях неверный. Как такое может быть?
2 SiAl-chel
 
15.05.14
02:16
(+1) По IDDOC группируешь?
3 ivsher
 
15.05.14
11:35
А зачем считать сумму? Если в конфигураторе для данного реквизита стоит признак "Итог по колонке", то получить итог можно из шапки документа.
4 Eeakie
 
15.05.14
11:46
(2) Да.
(3) Получать суммы при переборе довольно таки долго. Много документов обрабатывается. А я как раз оптимизацией занимаюсь сейчас.
5 Дык ё
 
15.05.14
11:50
(1) ошибка в запросе

(3) +1
6 Eeakie
 
15.05.14
11:59
(5) Может я не так понимаю. Как в запросе получить итог из шапки?
7 Mikeware
 
15.05.14
12:01
(6) Ну помотри на таблицу шапки.
8 Eeakie
 
15.05.14
12:03
(7) Какую еще таблицу шапки?
9 Попытка1С
 
15.05.14
12:05
$Док.СуммаДокумента
10 ДенисЧ
 
15.05.14
12:05
(8) DH*
11 Попытка1С
 
15.05.14
12:05
Селект соответственно не с ДокументСтроки а с Документ
12 Матадор
 
15.05.14
12:08
(0) Придется учить SQL :)
Смотри в сторону GROUP BY <****> WITH ROLLUP
13 Eeakie
 
15.05.14
12:09
(12) Я этим и занимаюсь :)
14 Матадор
 
15.05.14
12:11
(0) Хотя конечно, если тебе только итог по колонке табличной части документа нужен, то тогда проще действительно в шапку документа смотреть, если конечно у тебя стоит галочка "итог по колонке" в свойствах таб части.
15 Eeakie
 
15.05.14
12:14
(14) Да, галка стоит. Только я вот не совсем понимаю, что значит это "смотреть в шапку документа". В SQL только начал углубляться... пока только элементарные запросы получается делать.
16 DmitrO
 
15.05.14
12:16
(15) везет же людям, впереди столько интересного :)
17 ДенисЧ
 
15.05.14
12:17
(15) Может, ты для начала свой запрос покажешь, чтобы мы тут практической телепатологией не занимались?
18 Eeakie
 
15.05.14
12:17
О, взлетело. Просто добавил в group by $Документ.Сумма и в селекте убрал sum($Документ.Сумма).
19 Eeakie
 
15.05.14
12:20
(17) Сильно хреново сделан запрос?

|select Заявка.iddoc [Заявка $Документ.Заявка]
|    , Журнал.docno Номер
|    , cast(left(Журнал.date_time_iddoc, 8) as datetime) Дата
|    , substring(Журнал.date_time_iddoc, 9, 6) Время
|    , Журнал.closed & 1 Проведен
|    , $Заявка.Автор [Автор $Справочник.Сотрудники1]
|    , $Заявка.Клиент [Клиент $Справочник.Клиенты]
|    , sum(Бухгалтерия.РезервТовараОстаток) Бухгалтерия
|    , sum(Склад.КоличествоОстаток) Склад
|    , sum(Шайба.ОстатокТовараОстаток) Шайба
|    , $Заявка.Сумма Сумма
|    , $Заявка.НДС НДС
|from $Документ.Заявка as Заявка with (nolock)
|    inner join
|        _1sjourn Журнал with (nolock) on Журнал.iddoc = Заявка.iddoc
|    left join
|        $РегистрОстатки.Заявки(,, Фирма = :ТекущаяФирма) as Бухгалтерия on Бухгалтерия.ПоСчету = Заявка.iddoc
|    left join
|        $РегистрОстатки.Ожидания(,, Фирма = :Центролаб) as Склад on Склад.Заявка = Заявка.iddoc
|    left join
|        $РегистрОстатки.ОстаткиТоваровОбщ(,, Фирма = :Центролаб) as Шайба on Шайба.Заявка = Заявка.iddoc
|where
|    Журнал.date_time_iddoc between :НачДата and :КонДата~
|    and $Заявка.Фирма = :ТекущаяФирма";
|    and Шайба.ОстатокТовараОстаток <> 0";
|    and $Заявка.Автор in (select val from #Авторы)";
|group by
|    Заявка.iddoc,
|    Журнал.docno,
|    cast(left(Журнал.date_time_iddoc, 8) as datetime),
|    substring(Журнал.date_time_iddoc, 9, 6),
|    Журнал.closed & 1,
|    $Заявка.Автор,
|    $Заявка.Клиент,
|    $Заявка.Сумма,
|    $Заявка.НДС";
20 Ёпрст
 
15.05.14
12:23
>>> group by $Документ.Сумма

это нездоровый диагноз
21 Ёпрст
 
15.05.14
12:25
ну и в Этом запросе вот это всё

|from $Документ.Заявка as Заявка with (nolock)
|    inner join
|        _1sjourn Журнал with (nolock) on Журнал.iddoc = Заявка.iddoc

вообще лишнее, при условии
and Шайба.ОстатокТовараОстаток <> 0";
22 Eeakie
 
15.05.14
12:28
(20) Согласен. Никогда так и не делал, но в данном случае так отрабатывает правильно.
(21) Почему лишнее? Как это связано вообще? Разные данные же получаю. Журнал только для фильтра по периоду и признака проведенности.
23 Eeakie
 
15.05.14
12:32
Я вообще считаю, что такие данные как Номер, Дата, Время, Проведенность получать глупо в запросе. Но скорость увеличивается прилично, если брать их напрямую с запроса, а не с итоговой ТЗ.
24 Eeakie
 
15.05.14
12:32
+(23) Из документа в итоговой ТЗ.
25 Eeakie
 
15.05.14
12:38
(21) Действительно лишнее... Просто там 3 почти одинаковых варианта получения данных и "Шайба.ОстатокТовараОстаток <> 0" отрабатывает только при одном из них. Скопировал немного неправильно.
26 trad
 
15.05.14
12:43
|select Заявка.iddoc [Заявка $Документ.Заявка]
|    , Журнал.docno Номер
|    , cast(left(Журнал.date_time_iddoc, 8) as datetime) Дата
|    , substring(Журнал.date_time_iddoc, 9, 6) Время
|    , Журнал.closed & 1 Проведен
|    , $Заявка.Автор [Автор $Справочник.Сотрудники1]
|    , $Заявка.Клиент [Клиент $Справочник.Клиенты]
|    , Бухгалтерия.РезервТовараОстаток Бухгалтерия
|    , Склад.КоличествоОстаток Склад
|    , Шайба.ОстатокТовараОстаток Шайба
|    , $Заявка.Сумма Сумма
|    , $Заявка.НДС НДС
|from $Документ.Заявка as Заявка with (nolock)
|    inner join
|        _1sjourn Журнал with (nolock) on Журнал.iddoc = Заявка.iddoc
|    left join
|        $РегистрОстатки.Заявки(,, Фирма = :ТекущаяФирма, ПоСчету, РезервТовара) as Бухгалтерия on Бухгалтерия.ПоСчету = Заявка.iddoc
|    left join
|        $РегистрОстатки.Ожидания(,, Фирма = :Центролаб, Заявка, Количество) as Склад on Склад.Заявка = Заявка.iddoc
|    left join
|        $РегистрОстатки.ОстаткиТоваровОбщ(,, Фирма = :Центролаб, Заявка, ОстатокТовара) as Шайба on Шайба.Заявка = Заявка.iddoc
|where
|    Журнал.date_time_iddoc between :НачДата and :КонДата~
|    and Журнал.iddocdef = $ВидДокумента.Заявка
|    and $Заявка.Фирма = :ТекущаяФирма
|    and Шайба.ОстатокТовараОстаток <> 0
|    and $Заявка.Автор in (select val from #Авторы)
27 Eeakie
 
15.05.14
12:51
(26) Из-за того, что были не указаны нужные измерения и ресурсы всё... Не подумал бы...
28 Eeakie
 
15.05.14
12:54
(26) and Журнал.iddocdef = $ВидДокумента.Заявка как-то влияет на скорость отбора? Потому что на результат никак.
29 Eeakie
 
15.05.14
12:56
Всем спасибо.
30 Mikeware
 
15.05.14
12:59
(23)естественно, увеличивается. Ты ж не лащишьк каждому объекту
31 trad
 
15.05.14
13:08
(28) ... и домашним заданием будет изучение планов выполнения запросов с этим условием и без
32 Ёпрст
 
15.05.14
13:21
(22) подумай.
33 Ёпрст
 
15.05.14
13:21
что ты накладываешь этим условием.
34 Ёпрст
 
15.05.14
13:22
Грубо - в результате запроса будет только те заказы, что есть на остатке в регистре шайбы..
Нафига там запрос по документам - хз.
35 Ёпрст
 
15.05.14
13:22
Ну разве что, реквизиты дока вытащить - только запрос нужно переписать будет.
36 Eeakie
 
15.05.14
13:26
(30),(31) Усвоил :)
(32)-(35) Уже понял. Всё переписал.

Надо работать над логикой...
Спасибо.
37 Eeakie
 
15.05.14
13:53
$Заявка.Автор in (select val from #Авторы)
Запрос.УложитьСписокОбъектов(СписокЭлементов, "#Авторы");

Если СписокЭлементов пуст, то фильтр отключится?
38 Ёпрст
 
15.05.14
13:57
(37) конечно нет
:)
39 trad
 
15.05.14
13:59
(37) нет, не отключится
40 Eeakie
 
15.05.14
13:59
(38) А жаль :)
41 Eeakie
 
15.05.14
15:31
$РегистрОстатки.Ожидания(,, Фирма = :Центролаб, Заявка, Количество) as Склад on Склад.Заявка = Заявка.iddoc

Ничего не дает, потому что тип измерения "Заявка" в регистре просто <Документ>, а не <Документ.Заявка>. Как можно это победить?
42 trad
 
15.05.14
15:35
on Склад.Заявка = $ВидДокумента36.Заявка + Заявка.iddoc
43 Eeakie
 
15.05.14
15:37
(42) Взлетело, спасибо. Но что это? Где почитать?
44 Ёпрст
 
15.05.14
15:42
45 ivsher
 
15.05.14
15:42
46 Eeakie
 
15.05.14
15:56
(44) ооо, буду разбираться...
(45) ага, врубился.