Имя: Пароль:
1C
1C 7.7
v7: Получить автора документа основания в ПЗ
, ,
0 monsterZE
 
04.10.12
17:06
сабж, не выходит каменный цветок. =\
автор - общий реквизит без отбора.
у документа есть реквизит ДокОсн - "Документ"
ограничим его одним типом.
пишу:
...
   |   ДокСчет.$ОбщийРеквизит.Автор as [АвторДокОсн $Справочник.Сотрудники]
...
   |FROM
   |    _1SJourn as Жур (NOLOCK)
   |INNER JOIN
   |    $Документ.РасходнаяНал as Док ON Док.IDDoc = Жур.IDDoc
   |LEFT JOIN
   |    $Документ.Счет as ДокСчет ON ДокСчет.IDDoc = $Док.ДокОсн
1 monsterZE
 
04.10.12
17:07
возвращает пустоту в АвторДокОсн
2 Попытка1С
 
04.10.12
17:08
селект Жур.$ОбщийРеквизит.Автор as [АвторДокОсн $Справочник.Сотрудники]
3 Попытка1С
 
04.10.12
17:08
У тебя же общий реквизит не в документе а в журнале, на то он и общий
4 monsterZE
 
04.10.12
17:19
(3) хм.. чет я не допераю.. =) реквизит то общий, но он мне нужен из разных документов в одной строке..
вот рабочий запрос..
   |SELECT
   |    $Док.Вид as [ВидР $Перечисление.ВидРасходной],
   |    $Док.ДокОсн as [ДокОсн $Документ],
   |    Док.$ОбщийРеквизит.Автор as [Автор $Справочник.Сотрудники],
   |    $ДокС.Товар as [Товар $Справочник.Товары],
   |    SUM($ДокС.Сумма) as СуммаТовара,
   |    SUM($ДокС.Количество * $ДокС.Коэффициент) as Количество,
   |   субАвтор = CASE LTRIM(CAST (Док.$ОбщийРеквизит.Основание AS Char(2)))
   |   WHEN 'К(' THEN RTRIM(CAST (Док.$ОбщийРеквизит.Основание AS Char(100)))
   |    WHEN 'к(' THEN RTRIM(CAST (Док.$ОбщийРеквизит.Основание AS Char(100)))
   |   ELSE ''
   |    END
   |FROM
   |    _1SJourn as Жур (NOLOCK)
   |INNER JOIN
   |    $Документ.РасходнаяНал as Док ON Док.IDDoc = Жур.IDDoc
   |INNER JOIN
   |    $ДокументСтроки.РасходнаяНал as ДокС ON ДокС.IDDoc = Жур.IDDoc
   |    AND $ДокС.Товар IN (SELECT Val FROM #ГруппаТ)";
   
   Запрос.УложитьСписокОбъектов(СписокЭлементовВЗапрос, "#ГруппаТ","Товары");    
   
   // отбор по категории
   Если ВыбКатТов<>Перечисление.КатНом.Без_Отбора Тогда
       ТекстЗапроса = ТекстЗапроса + "
       |INNER JOIN
       |    $Справочник.Товары as Товар ON $ДокС.Товар = Товар.ID AND $Товар.КатНом=:ВыбКатТов";
       Запрос.УстановитьТекстовыйПараметр("ВыбКатТов", ВыбКатТов);
   КонецЕсли;
   
   ТекстЗапроса = ТекстЗапроса + "
   |WHERE
   |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
   |    AND Жур.IDDocDef = $ВидДокумента.РасходнаяНал
   |   AND Жур.Closed & 1 = 1
   |GROUP BY
   |    Док.$ОбщийРеквизит.Автор, $ДокС.Товар, $Док.Вид, $Док.ДокОсн,
   |   CASE LTRIM(CAST (Док.$ОбщийРеквизит.Основание AS Char(2)))
   |   WHEN 'К(' THEN RTRIM(CAST (Док.$ОбщийРеквизит.Основание AS Char(100)))
   |    WHEN 'к(' THEN RTRIM(CAST (Док.$ОбщийРеквизит.Основание AS Char(100)))
   |   ELSE ''
   |    END
   |ORDER BY
   |    Док.$ОбщийРеквизит.Автор";
5 monsterZE
 
04.10.12
17:23
(3) Реквизит без отбора!
6 Попытка1С
 
04.10.12
17:31
Если у тебя галка отбор не стоит то реквизит в шапке дока находится..
Отбор то не поставить?
7 monsterZE
 
04.10.12
17:34
(6) ну пока если без "поставить отбор"?
в документе реквизит типа Документ - это ссылка на документ? вот такое условие вобще верно?
ON ДокСчет.IDDoc = $Док.ДокОсн
8 Mikeware
 
04.10.12
17:35
Геморно без отбора.
9 Mikeware
 
04.10.12
17:36
(7) ДокОсн - Типа документ, ид  13значный
10 Попытка1С
 
04.10.12
17:36
(7) Да это ссылка.
11 Попытка1С
 
04.10.12
17:39
До 9 знаков обрезай.
12 monsterZE
 
04.10.12
17:46
(11)
|LEFT JOIN
   |    $Документ.Счет as ДокСчет ON ДокСчет.IDDoc = LEFT($Док.ДокОсн,9)
13 monsterZE
 
04.10.12
17:46
все равно пусто..
не туда нажал епрст. =)
14 monsterZE
 
04.10.12
17:47
ладно, хрен с ним.. прост разобраться хотелось =)
15 Mikeware
 
04.10.12
17:48
(12) не лефт, а райт
16 monsterZE
 
04.10.12
17:55
(15) мля =)
17 monsterZE
 
04.10.12
17:56
пойду посплю.. =)
18 monsterZE
 
04.10.12
18:04
есть контакт =) вроде.. проверю завтра
19 monsterZE
 
05.10.12
16:22
все работает как должно.
еще пару вопросов:
как правильно описать типизацию параметра CASE?
т.е. например элемент справочника, как его привести к as $Справочник.ХХХ ?
и еще, если в столбце типизированном под справочник CASE вернт 'ХХХ'
на что-нить повлияет или, лучше в отдельный стлобец этот 'ХХХ' писать?
20 Mikeware
 
05.10.12
16:22
(19) чиво?
21 monsterZE
 
05.10.12
16:24
Есть доки с пустым "Автором", надо их выделить.. а то влияют на сбор статистики в +
=)
   |    ДокОснАвтор = CASE ДокСчет.$ОбщийРеквизит.Автор
   |    WHEN $ПустойИД THEN 'Автозагрузка'
   |    ELSE ДокСчет.$ОбщийРеквизит.Автор
   |    END AS $Справочник.Сотрудники,
22 Mikeware
 
05.10.12
16:30
(21) ты уж определись, либо у тебя агрегатный тип, либо строка...
Либо выводи наименование, либо заводи пользователя Автозагрузка.
23 monsterZE
 
05.10.12
16:33
(22) ясно, вобщем отдельный столбик =)
24 Mikeware
 
05.10.12
16:37
(22) ну, тоже вариант...
25 monsterZE
 
05.10.12
16:42
(24) ну на пока..
можно было бы, конечно без этой @#$ обойтись, создав соответ. "сотрудника", поправив обработки и проставить его в уже загруженных документах..
быстрее пока так
   |    Автозагрузка = CASE ДокСчет.$ОбщийРеквизит.Автор
   |    WHEN $ПустойИД THEN 1 ELSE 0 END,
26 Mikeware
 
05.10.12
16:45
(25)
   |    ДокОснАвтор = CASE ДокСчет.$ОбщийРеквизит.Автор
   |    WHEN $ПустойИД THEN :ЮзверьАвтозагрузка
   |    ELSE ДокСчет.$ОбщийРеквизит.Автор
   |    END AS $Справочник.Сотрудники,
Или лефитджойнь с спрПользователи, и
isnull(спрПользователи.id, :ЮзверьАвтозагрузка)
27 monsterZE
 
05.10.12
17:32
(26) Ага, спс!
Независимо от того, куда вы едете — это в гору и против ветра!