|
v7: Не получается добавить поле в прямой запрос | ☑ | ||
---|---|---|---|---|
0
zenon46
09.12.19
✎
20:34
|
Доброго вечера!
Есть прямой запрос, получения остатков и поступлений по дням, не получается добавить Поле, в идеале поле "контрагент" из документа Поступления, но и саму ссылку на документ не получается добавить. Текст запроса ниже, что касаемо документа или контрагента убрал, этот запрос полностью рабочий : |SET NOCOUNT ON |; |IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id('tempdb..#Период')) | DROP TABLE #Период |; |CREATE TABLE #Период (val char(9) PRIMARY KEY) |; |DECLARE @НачДата as DATETIME |SET @НачДата = '"+МетаДата.ПолучитьСтрИзДаты(НачДатаПрод)+"' |DECLARE @КонДата as DATETIME |SET @КонДата = '"+МетаДата.ПолучитьСтрИзДаты(КонДатаПрод)+"' |WHILE @НачДата <= @КонДата |BEGIN |INSERT INTO #Период VALUES (CONVERT(char(8), @НачДата, 112)) |SET @НачДата = dateadd(DAY, 1, @НачДата) |END |; |IF EXISTS(SELECT * FROM tempdb..sysobjects WHERE id = object_id('tempdb..#Итоги')) | DROP TABLE #Итоги |; |CREATE TABLE #Итоги (Дата char(8), Товар char(9), Остаток int, Оборот int, Поступление int) |; |CREATE INDEX DateItem ON #Итоги (Товар,Дата) |; |INSERT INTO #Итоги (Дата,Товар,Остаток,Оборот,Поступление) |SELECT | ДатыТовары.Дата as [Дата $Дата], | ДатыТовары.Товар as [Товар $Справочник.Номенклатура], | SUM(ДатыТовары.Остаток) as [Остаток $Число], | SUM(ДатыТовары.Оборот) as [Оборот $Число], | SUM(ДатыТовары.Поступление) as [Поступление $Число] |FROM | (SELECT | #Период.val as [Дата], | #TempTable.val as [Товар], | 0 as [Остаток], | 0 as [Оборот], | 0 as [Поступление] | FROM | #Период CROSS JOIN #TempTable |UNION ALL | SELECT | :НачДата, | Остатки.Номенклатура, | Остатки.КоличествоОстаток, | 0, | 0 |FROM | $РегистрОстатки.ОстаткиТМЦ(:НачДата,,Фирма = :ВыбФирма AND Номенклатура IN (SELECT val FROM #TempTable),(Номенклатура),(Количество)) as Остатки |UNION ALL | SELECT | SUBSTRING(Обороты.Date_Time_Iddoc,1,8) AS [Дата], | $Обороты.Номенклатура AS [Товар], | 0 AS [Остаток], | SUM(CASE WHEN Обороты.DEBKRED = 0 THEN $Обороты.Количество ELSE $Обороты.Количество * (-1) END) AS [Оборот], | SUM(CASE WHEN Обороты.IDDOCDEF = $ВидДокумента.ПоступлениеТМЦ_Склад THEN $Обороты.Количество ELSE 0 END) AS [Поступление] | FROM | $Регистр.ОстаткиТМЦ as Обороты | WHERE | Обороты.Date_Time_Iddoc between :НачДата AND :КонДата~ AND | $Обороты.Номенклатура IN (SELECT val FROM #TempTable) AND | $Обороты.Фирма = :ВыбФирма | GROUP BY | SUBSTRING(Обороты.Date_Time_Iddoc, 1, 8), $Обороты.Номенклатура, Обороты.IDDoc | ) as ДатыТовары |GROUP BY | ДатыТовары.Дата, ДатыТовары.Товар |; |DROP TABLE #Период |; |DECLARE @CurrentMove as int |DECLARE @CurrentQty as int |DECLARE @NextQty as int |DECLARE @CurrentItem as char(9) |DECLARE @LastItem as char(9) |SET @LastItem = '' | |DECLARE cur CURSOR LOCAL FORWARD_ONLY FOR |SELECT Оборот,Товар,Остаток |FROM #Итоги |ORDER BY Товар,Дата |FOR UPDATE | |OPEN cur |FETCH NEXT FROM cur INTO @CurrentMove, @CurrentItem, @CurrentQty |WHILE @@FETCH_STATUS = 0 |BEGIN | IF NOT @LastItem = @CurrentItem | BEGIN | SET @NextQty = @CurrentQty + @CurrentMove | SET @LastItem = @CurrentItem | END | ELSE | BEGIN | UPDATE #Итоги | SET Остаток = @NextQty | WHERE CURRENT OF cur | SET @NextQty = @NextQty + @CurrentMove | END |FETCH NEXT FROM cur INTO @CurrentMove, @CurrentItem, @CurrentQty |END |; |CLOSE cur |; |deallocate cur |; |SELECT | Товары.CODE as [Код $Строка], | Итоги.Товар as [Номенклатура $Справочник.Номенклатура], | Итоги.Остаток as [Остаток $Число], | Итоги.Поступление as [Поступление $Число], | Итоги.Дата as [Дата $Дата] |FROM | #Итоги as Итоги | JOIN $Справочник.Номенклатура as Товары ON Итоги.Товар = Товары.ID |ORDER BY | Итоги.Дата, Товары.DESCR, Товары.ID |; |DROP TABLE #Итоги |; |SET NOCOUNT OFF |"; |
|||
1
Franchiser
гуру
09.12.19
✎
21:40
|
Контрагента в Итоги?
|
|||
2
zenon46
09.12.19
✎
21:58
|
(1) ну скорей сюда надо добавить as ДатыТовары, Контрагента из Документа ПоступлениеТМЦ_Склад
|
|||
3
mikecool
09.12.19
✎
23:22
|
(2) остатки тмц в разрезе контрагентов?
|
|||
4
zenon46
10.12.19
✎
07:19
|
Вопрос снимаю, т.к. изначально выбрал не правильный путь, получения данных.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |