Как получить нужные данные в рамках одного запроса

Автор SnakePlisskin, 06 августа 2025, 10:33

« назад - далее »

SnakePlisskin

Господа!
Как в рамках одного запроса, реализовать следующую задачу, к списку полученных документов, добавить поле которое бы отображало есть ли в базе документ ПКО у которого в реквизите ДокОснование есть ссылка на один из документов полученных ранее, я начал выносить получение исходного списка документов, в подзапрос, начались проблемы с типизацией, начали вылазить пустые записи в поле. Решил уточнить на форуме )

Собственно запрос получения доков такой

|SELECT
|  Жур.IDDoc as [ТекДок $Документ],
|  Жур.IDDocDef as ТекДок_вид,
|  (CAST(LEFT(Жур.Date_Time_IDDoc, 8) AS DateTime))  AS Дата,
|  $Реализация.СуммаВзаиморасчетов AS [Сумма]
|FROM
|_1SJOURN Жур With (NOLOCK)
|INNER JOIN
|$Документ.Реализация AS Реализация With (NOLOCK) ON Жур.IDDOC = Реализация.IDDOC
|WHERE
|Жур.ISMARK=0 AND
|Жур.$ОбщийРеквизит.Фирма = :Фирма
|AND Жур.date_time_iddoc between :НачДата and  :КонДата~

SnakePlisskin

Попробовал сделать вот так (на типизацию уже не ругается, но в поле ПКО нет данных, хотя для одного документа точно должно быть):

SELECT
  T1.ТекДок AS [Документ $Документ],
  T1.ТекДок_вид as Документ_вид,
  T1.Дата as Дата,
  T1.Сумма AS [Сумма $Число],
  T2.ТекДокПКО AS [ПКО],
  T2.ТекДокПКО_вид as Документ_вид_ПКО
FROM
(
SELECT
Жур.IDDoc as [ТекДок],
Жур.IDDocDef as ТекДок_вид,
(CAST(LEFT(Жур.Date_Time_IDDoc, 8) AS DateTime))  AS Дата,
$Реализация.СуммаВзаиморасчетов AS [Сумма]
FROM
_1SJOURN Жур With (NOLOCK)
INNER JOIN
$Документ.Реализация AS Реализация With (NOLOCK) ON Жур.IDDOC = Реализация.IDDOC
WHERE
Жур.ISMARK=0 AND
Жур.$ОбщийРеквизит.Фирма = :Фирма
AND $Реализация.Контрагент = :ВыбКонтрагент
AND Жур.date_time_iddoc between :НачДата and  :КонДата~
) T1
LEFT JOIN
(
SELECT
 Жур.IDDoc    AS [ТекДокПКО],
 Жур.IDDocDef AS ТекДокПКО_вид,
 $ПКО.ДокОснование AS ДокОснование
FROM
 _1SJOURN Жур With (NOLOCK)
INNER JOIN
 $Документ.ПКО AS ПКО With (NOLOCK) ON Жур.IDDOC = ПКО.IDDOC
) T2 ON T1.ТекДок = T2.ДокОснование

Злоп

ДокОснование - как задан в конфигураторе?

SnakePlisskin

Цитата: Злоп от 06 августа 2025, 18:17ДокОснование - как задан в конфигураторе?

Как реквизит - типа "Документ" без типа документа.

vladmenleo

Цитата: SnakePlisskin от 06 августа 2025, 12:55T2.ТекДокПКО AS [ПКО],
  T2.ТекДокПКО_вид as Документ_вид_ПКО
замени на
T2.ТекДокПКО AS [ПКО  $Документ],
T2.ТекДокПКО_вид as ПКО_вид

а в условии присоединения
) T2 ON T1.ТекДок = right(T2.ДокОснование, 9)

SnakePlisskin

Цитата: vladmenleo от 07 августа 2025, 11:06
Цитата: SnakePlisskin от 06 августа 2025, 12:55T2.ТекДокПКО AS [ПКО],
  T2.ТекДокПКО_вид as Документ_вид_ПКО
замени на
T2.ТекДокПКО AS [ПКО  $Документ],
T2.ТекДокПКО_вид as ПКО_вид

а в условии присоединения
) T2 ON T1.ТекДок = right(T2.ДокОснование, 9)

Да спасибо!

Злоп