Имя: Пароль:
1C
1C 7.7
v7: Подсчет количества строк в документах SQL
,
0 Lacoster
 
02.10.13
10:27
Всем привет! Нашим работягам платят бабки за количество набитых строк в документ. Нужно сделать отчет. Вот я на скуле набросал. Весь смысл в том что хочу все реализовать в скуле, циклом пробежать по документам всегда успею.
|SELECT
|    Жур.IDDoc as [Док $Документ],
|    Жур.IDDocDef as [Док_вид $ВидДокумента],
|     Жур.$ОбщийРеквизит.Автор [Автор $Справочник.Пользователи],
|        (select Max(ДокС.LINENO_) as КолС from $ДокументСтроки.Док_вид ДокС) Строк
|
|FROM
|    _1SJourn as Жур
|WHERE
|    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
|and Жур.IsMark=0
|and Жур.Closed & 1 = 1
|and Жур.$ОбщийРеквизит.Автор in (Select val from #СписокАвторов)

А вопрос в том что запрос этот не работает. ДокуметСтроки ждет параметр с названием документа. Как мне ему передать?
1 viktor_vv
 
02.10.13
10:37
|Select
|Count() as КолСтрок
|FROM
|    _1SJourn as Жур
|    Left join $ДокументСтроки.ВидДокументаТвоего as ДокСтрокиТвой 0n Жур.IDDOC = ДокСтрокиТвой.IDDOC

|Group by Жур.IDDoc , Жур.$ОбщийРеквизит.Автор
2 viktor_vv
 
02.10.13
10:38
И в

Where
   Жур.IDDOCDEF = $ВидДокумента.ТвойВидДокумента
3 viktor_vv
 
02.10.13
10:39
А есл по нескольким видам документов, то объединяй несколько селектов.
4 Lacoster
 
02.10.13
10:39
(1) у меня в журнале разные виды доков. В этом вся и херня.
5 Lacoster
 
02.10.13
10:40
(3) это понятно. Мне лениво писать кучу селектов, хочу автоматику. Да и не известно, вдруг сегодня этот автор заполнит другой документ, а селекта на этот док нет. Не получит свои бабки
6 Mikeware
 
02.10.13
10:40
(4) ну и цепляй разные. в чем проблемы?
7 viktor_vv
 
02.10.13
10:41
Select

inion all

select

Потом сверху обернешь еще одним селектом и сгруппируешь
(5) Формируй запрос динамически через метаданные.
8 Mikeware
 
02.10.13
10:41
(5) и что тебе мешает построить запрос динамически (кроме религии)?
9 Lacoster
 
02.10.13
10:42
(8) мозг. Не умею
10 viktor_vv
 
02.10.13
10:44
(7)+ Или кучу left join , вместо inion.
11 Lacoster
 
02.10.13
10:45
(10) да я же говорю. Вдруг завтра скажут автору заполнять ещё документы, а этого дока не будет в перечне селектов, получается он оне получит бабки. Да и править каждый раз отчет придется
12 viktor_vv
 
02.10.13
10:49
(11) см (8) и (7) :).
13 viktor_vv
 
02.10.13
10:51
(12)+ Если не все доки нужны, сделай настроечный справочник, где перчисли виды документов для отчета, по нему и формируй текст запроса.
14 Злой Бобр
 
02.10.13
10:51
(11) Зачем править? Перечень видов документов вытягивай в список с пометками через метаданные. Пусть отмечают нужные и вперед.
15 Lacoster
 
02.10.13
10:52
(12) как мне динамически запрос делать? Из моего запроса выловить необходимые мне виды доков и подставлять в шаблон запроса?
16 Lacoster
 
02.10.13
10:53
(14) не получится отмечать нужные. Начальник не заморачивается о том кто какие доки правит
17 Злой Бобр
 
02.10.13
10:57
(16) Ты даешь инструмент. А пользоваться им или нет - это уже не твои проблемы. Пусть хоть с потолка цыфру берут, никто ж невозражает.
Делай все в точности как написано в ТЗ.
18 viktor_vv
 
02.10.13
11:03
(15) Не надо вылавливать, сам запрос формируй по всем документам.

    Текстзапроса = "";
    Для i = 1 по Метаданные.Документ() Цикл
        Если Метаданные.Документ(i).РеквизитТабличнойЧасти() = 0 Тогда
            // исключим документы без табличной части
            Продолжить ;
        КонецЕсли ;    
        
        ВидДок = Метаданные.Документ(i).Идентификатор ;
        
        /// А тут уже формируй кусок запроса с подставновкой вида документа
        ТекстЗапроса = Текстзапроса + ЧеУТебяТамПолучится ;
    КонецЦикла;
19 Злой Бобр
 
02.10.13
11:05
(18) Запрос в цикле. Просто прелестно. Иди сам засунь пальцы в дверной проем.
20 Mikeware
 
02.10.13
11:06
(18) опередил
(19) где ты видишь "запрос в цикле"?
21 Злой Бобр
 
02.10.13
11:08
(20) Ну пока в (18) такое и вижу.
22 Salimbek
 
02.10.13
11:09
(21) Ты там видишь Выполнение запроса? Я вижу только формирование текста...
23 viktor_vv
 
02.10.13
11:11
(19) Какой-то ты агрессивный :). Нету там запроса в цикле.
24 Lacoster
 
02.10.13
11:14
(18) идею понял. Текст запроса в цикле заипенить и потом выполнить....ща подумаю
25 Злой Бобр
 
02.10.13
11:22
(23) Да, я такой. Если б там небыло вначале
Текстзапроса = "";
то я б и не спорил.
26 viktor_vv
 
02.10.13
11:25
(25) Ну так инициализировал переменную для текста запроса.
27 Mikeware
 
02.10.13
12:09
(25) ты забыл анекдот про буратино?
28 antoneus
 
02.10.13
13:34
Целесообразнее не по метаданным бежать, а вытащить список видов введенных доков из журнала

select distinct iddocdef [ВидДокумента $ВидДокумента] from _1sjourn (nolock)

из из него уже лепить текст запроса.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.