Имя: Пароль:
1C
1C 7.7
v7: Как в прямом запросе получить реквизит ?
0 zenon46
 
10.12.19
17:09
Доброго вечера, всем!
Есть вот такой запрос :

SELECT
Журнал.IDDoc    AS [ТекДок $Документ],
Журнал.IDDocDef AS ТекДок_вид,
coalesce($Реализация.Контрагент,$ЗаявкаПокупателя.Контрагент,$КоммПредложение.Контрагент,$СтрокаВыпискиПриход.Контрагент) AS [Контрагент $Справочник.Контрагенты],
ISNULL($ЗаявкаПокупателя.СуммаВзаиморасчетов,0)     AS [СумСчетов $Число],
ISNULL($КоммПредложение.СуммаВзаиморасчетов,0)      AS [СумКомПредлож $Число],
ISNULL($Реализация.СуммаВзаиморасчетов,0)           AS [СумОтгруз $Число],
ISNULL($СтрокаВыпискиПриход.СуммаВзаиморасчетов,0)  AS [СумОплат $Число]
FROM
_1SJOURN AS Журнал With (NOLOCK)
LEFT JOIN
$Документ.Реализация AS Реализация With (NOLOCK) ON Журнал.IDDOC = Реализация.IDDOC AND $Реализация.ТипЦен <> :ТипНулевой
LEFT JOIN
$Документ.ЗаявкаПокупателя AS ЗаявкаПокупателя With (NOLOCK) ON Журнал.IDDOC = ЗаявкаПокупателя.IDDOC AND $ЗаявкаПокупателя.ТипЦен <> :ТипНулевой
LEFT JOIN
$Документ.КоммПредложение AS КоммПредложение With (NOLOCK) ON Журнал.IDDOC = КоммПредложение.IDDOC
LEFT JOIN
$Документ.СтрокаВыпискиПриход AS СтрокаВыпискиПриход With (NOLOCK) ON Журнал.IDDOC = СтрокаВыпискиПриход.IDDOC
WHERE
  (Журнал.ISMARK=0) AND
  (Журнал.iddocdef=$ВидДокумента.Реализация OR Журнал.iddocdef=   $ВидДокумента.ЗаявкаПокупателя OR Журнал.iddocdef=$ВидДокумента.КоммПредложение OR     Журнал.iddocdef=$ВидДокумента.СтрокаВыпискиПриход) AND
  (Журнал.date_time_iddoc between :НачДата and  :КонДата~) AND
  (Журнал.$ОбщийРеквизит.Фирма = :ФирмаЗ)


В "черном" запросе было получение еще одного реквизита "ВашМенеджер" - $Справочник.Проекты. Вопрос, как добавить в прямой получение этого реквизита ?

|Менедж = Документ.Реализация.ТекущийДокумент.Контрагент.ВашМенеджер,
|      Документ.КоммПредложение.ТекущийДокумент.Контрагент.ВашМенеджер,
|      Документ.ЗаявкаПокупателя.ТекущийДокумент.Контрагент.ВашМенеджер,    
|         Документ.СтрокаВыпискиПриход.ТекущийДокумент.Контрагент.ВашМенеджер;
1 hhhh
 
10.12.19
17:13
(0) вроде уже спрашивали это. Поищи по темам сегодня и вчера.
2 1Сергей
 
10.12.19
17:26
По аналогии сделай
как
coalesce($Реализация.Контрагент,$ЗаявкаПокупателя.Контрагент,$КоммПредложение.Контрагент,$СтрокаВыпискиПриход.Контрагент) AS [Контрагент $Справочник.Контрагенты],
3 Djelf
 
10.12.19
17:37
(2) Видимо так не получится. "ВашМенеджер" это скорее всего справочник Сотрудники.
(0) Это еще 4 LEFT JOIN с coalesce к $Справочник.Сотрудники по ВашМенеджер.
4 Djelf
 
10.12.19
17:51
+(3) Ну можно и один JOIN, но запрос нужно обернуть в подзапрос.
5 zenon46
 
10.12.19
18:39
(3) да, "ВашМенеджер" это реквизит справочника Контрагенты, типа Справочник.Проекты, вот я и не пойму как через две "точки" до него добраться
6 zenon46
 
10.12.19
20:28
Попробовал для одного вида документа, на выходе поле ВашМенеджер пустое :

SELECT
   Журнал.IDDoc    AS [ТекДок $Документ],
   Журнал.IDDocDef AS ТекДок_вид,
   $Реализация.Контрагент AS [Контрагент $Справочник.Контрагенты],
   ISNULL($Реализация.СуммаВзаиморасчетов,0) AS [СумОтгруз $Число],
   Проекты.ID AS [ВашМенеджер $Справочник.Проекты]
FROM
_1SJOURN AS Журнал With (NOLOCK)
LEFT JOIN
  $Документ.Реализация AS Реализация With (NOLOCK) ON Реализация.IDDOC = Журнал.IDDOC AND $Реализация.ТипЦен <> :ТипНулевой
LEFT JOIN
$Справочник.Контрагенты AS Контр With (NOLOCK) ON Контр.ID = $Реализация.Контрагент
LEFT JOIN
$Справочник.Проекты AS Проекты With (NOLOCK) ON Проекты.ID =   $Справочник.Контрагенты.ВашМенеджер
WHERE
  (Журнал.ISMARK=0) AND
  (Журнал.iddocdef=$ВидДокумента.Реализация) AND
  (Журнал.date_time_iddoc between :НачДата and  :КонДата~) AND
  (Журнал.$ОбщийРеквизит.Фирма = :ФирмаЗ)
7 zenon46
 
10.12.19
21:29
"ВашМенеджер" - оказался периодическим реквизитом, я в метаданные не смотрел, у меня был только "черный" запрос, а ему на периодичность в принципе пофиг, он сам каким-то образом это дело вытаскивает.
8 zenon46
 
11.12.19
09:20
Сделал так все равно поле ВашМенеджер пустое:

SELECT
   Журнал.IDDoc    AS [ТекДок $Документ],
   Журнал.IDDocDef AS ТекДок_вид,
   $Реализация.Контрагент AS [Контрагент $Справочник.Контрагенты],
   ISNULL($Реализация.СуммаВзаиморасчетов,0) AS [СумОтгруз $Число],
   Проекты.ID AS [ВашМенеджер $Справочник.Проекты]
FROM
_1SJOURN AS Журнал With (NOLOCK)
LEFT JOIN
  $Документ.Реализация AS Реализация With (NOLOCK) ON Реализация.IDDOC = Журнал.IDDOC AND $Реализация.ТипЦен <> :ТипНулевой
LEFT JOIN
$Справочник.Контрагенты AS Контр With (NOLOCK) ON Контр.ID = $Реализация.Контрагент
LEFT JOIN
$Справочник.Проекты AS Проекты With (NOLOCK) ON Проекты.ID = ($ПоследнееЗначение.Контрагенты.ВашМенеджер(Проекты.ID,:КонДата))
WHERE
  (Журнал.ISMARK=0) AND
  (Журнал.iddocdef=$ВидДокумента.Реализация) AND
  (Журнал.date_time_iddoc between :НачДата and  :КонДата~) AND
  (Журнал.$ОбщийРеквизит.Фирма = :ФирмаЗ)
9 dk
 
11.12.19
09:31
$Справочник.Проекты AS Проекты With (NOLOCK) ON Проекты.ID = ($ПоследнееЗначение.Контрагенты.ВашМенеджер(Контр.ID,:КонДата))
10 dk
 
11.12.19
09:32
смотри какой тип передаешь в последнее значение
11 dk
 
11.12.19
09:34
можно соединение с контрагентами вообще убрать - ибо лишнее
$Справочник.Проекты AS Проекты With (NOLOCK) ON Проекты.ID = ($ПоследнееЗначение.Контрагенты.ВашМенеджер($Реализация.Контрагент,:КонДата))
12 dk
 
11.12.19
09:37
и соединение с проектами тут тоже не нужно )
13 zenon46
 
11.12.19
09:39
(9) да спасибо, не обратил внимание. так рабоатет.
Программист всегда исправляет последнюю ошибку.