transform.Bilanzsalden_kumuliert.sql 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. SET QUOTED_IDENTIFIER ON
  2. GO
  3. SET ANSI_NULLS ON
  4. GO
  5. CREATE VIEW [transform].[Bilanzsalden_kumuliert] AS
  6. -- Bilanzsalden_kumuliert
  7. WITH
  8. "Config_Jahreswechsel"
  9. -- In welchem Monat startet das Geschäftsjahr?
  10. AS (SELECT *
  11. , iif([Monat] >= 7, 1, 0) AS [Offset1]
  12. , iif([Monat] >= 7, 0, -1) AS [Offset2]
  13. FROM (VALUES (1, 1)
  14. , (2, 1)
  15. , (3, 1)
  16. , (4, 1)
  17. , (5, 1)
  18. , (6, 1)
  19. , (7, 1)) AS [T1] ([Client_DB], [Monat]))
  20. , "Sachkonto_Salden_Bilanzkonten"
  21. -- Für alle weiteren Berechnungen sind nur Bilanzkonten interessant
  22. AS (SELECT [T1].[Client_DB]
  23. , [T1].[Branch Code]
  24. , [T1].[G_L Account No_] AS [Sachkontonr_]
  25. , month([T1].[Posting Date]) AS [Monat]
  26. , year([T1].[Posting Date]) AS [Jahr]
  27. , year([T1].[Posting Date]) * 100 + month([T1].[Posting Date]) AS [Periode]
  28. , [T1].[Posting Date] AS [Buchungsdatum]
  29. , convert(decimal(18, 2), [T1].[Amount]) AS [Betrag]
  30. FROM [xtract].[G_L_Entry_Salden] [T1]
  31. INNER JOIN [xtract].[G_L_Account] [T2] ON [T1].[Client_DB] = [T2].[Client_DB] AND [T1].[G_L Account No_] = [T2].[No_]
  32. WHERE [T2].[Income_Balance] = '1')
  33. , [Buchungsperiode_alle]
  34. -- alle Buchungsperioden
  35. AS (SELECT DISTINCT [Periode]
  36. , [Jahr]
  37. , [Monat]
  38. FROM [Sachkonto_Salden_Bilanzkonten])
  39. , [Sachkonto_alle]
  40. -- Liste aller bebuchten Bilanzkonten
  41. AS (SELECT DISTINCT [Client_DB]
  42. , [Branch Code]
  43. , [Sachkontonr_]
  44. FROM [Sachkonto_Salden_Bilanzkonten])
  45. , [Sachkonto_Salden_Null]
  46. -- Kreuzprodukt über alle Bilanzkonten und alle Perioden
  47. AS (SELECT [T1].[Client_DB]
  48. , [T1].[Branch Code]
  49. , [T1].[Sachkontonr_]
  50. , [T2].[Monat]
  51. , [T2].[Jahr]
  52. , [T2].[Periode]
  53. , 0.0 AS [Betrag]
  54. FROM [Sachkonto_alle] [T1]
  55. CROSS JOIN [Buchungsperiode_alle] [T2])
  56. , [Sachkonto_Salden_aufgefuellt]
  57. -- Kombination aus dem Kreuzprodukt von oben mit den tatsächlichen Buchungswerten, um eine vollständige Liste aller Konten und Buchungsperioden zu erhalten
  58. AS (SELECT [T1].[Client_DB]
  59. , [T1].[Branch Code]
  60. , [T1].[Sachkontonr_]
  61. , [T1].[Monat]
  62. , [T1].[Jahr]
  63. , [T1].[Periode]
  64. , isnull([T2].[Betrag], [T1].[Betrag]) AS [Betrag]
  65. FROM [Sachkonto_Salden_Null] [T1]
  66. LEFT JOIN [Sachkonto_Salden_Bilanzkonten] [T2] ON [T1].[Client_DB] = [T2].[Client_DB] AND T1.[Branch Code] = T2.[Branch Code] AND [T1].[Sachkontonr_] = [T2].[Sachkontonr_] AND [T1].[Periode] = [T2].[Periode])
  67. , [Sachkonto_Salden_Details]
  68. -- Berechnung Geschäftsjahr (Mandant 1, 6, 7 ab Januar, Mandant 9 ab September)
  69. -- Berechnung Eröffnungsbuchung, falls Feld Origin = 0
  70. AS (SELECT [T1].*
  71. , iif([T1].[Monat] >= [T2].[Monat], [T1].[Jahr] + [T2].[Offset1], [T1].[Jahr] + [T2].[Offset2]) AS [Geschaeftsjahr]
  72. , 0.0 AS [EB]
  73. , [Betrag] AS [Saldo_ohne_EB]
  74. FROM [Sachkonto_Salden_aufgefuellt] [T1]
  75. INNER JOIN [Config_Jahreswechsel] [T2] ON [T1].[Client_DB] = [T2].[Client_DB])
  76. , "EB_berechnet"
  77. -- Summe über das Vorjahr (Geschäftsjahr)
  78. AS (SELECT [Client_DB]
  79. , [Branch Code]
  80. , [Geschaeftsjahr]
  81. , min([Periode]) + 100 AS [Periode]
  82. , [Sachkontonr_]
  83. , sum([Betrag]) AS [EB_berechnet]
  84. FROM [Sachkonto_Salden_Details]
  85. GROUP BY [Client_DB]
  86. , [Branch Code]
  87. , [Geschaeftsjahr]
  88. , [Sachkontonr_])
  89. , [EB_berechnet_seit_Anbeginn]
  90. -- Summe über das Vorjahr (Geschäftsjahr) ab dem 1. Monat des Geschäftsjahrs
  91. AS (SELECT [Client_DB]
  92. , [Branch Code]
  93. , [Geschaeftsjahr]
  94. , [Periode]
  95. , [Sachkontonr_]
  96. , [EB_berechnet] AS [EB_berechnet_ein_Jahr]
  97. , sum([EB_berechnet]) OVER (
  98. PARTITION BY [Client_DB], [Branch Code], [Sachkontonr_]
  99. ORDER BY [Geschaeftsjahr]
  100. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  101. ) AS [EB_berechnet]
  102. FROM [EB_berechnet])
  103. , [Sachkonto_Salden_Summe]
  104. -- Gruppierung/Summierung nach Periode, um Konto und Periode eindeutig zu haben.
  105. AS (SELECT [Client_DB]
  106. , [Branch Code]
  107. , [Sachkontonr_]
  108. , [Geschaeftsjahr]
  109. , [Periode]
  110. , sum([EB]) AS [EB]
  111. , sum([Saldo_ohne_EB]) AS [Saldo_ohne_EB]
  112. , sum([Betrag]) AS [Saldo]
  113. FROM [Sachkonto_Salden_Details]
  114. GROUP BY [Client_DB]
  115. , [Branch Code]
  116. , [Sachkontonr_]
  117. , [Geschaeftsjahr]
  118. , [Periode])
  119. , [Sachkonto_Salden_EB_berechnet]
  120. -- Join mit dem berechneten EB über Buchungsperiode und Kontonummer
  121. AS (SELECT [T1].*
  122. , isnull([T2].[EB_berechnet], 0.0) AS [EB_berechnet]
  123. , [T1].[Saldo_ohne_EB] + isnull([T2].[EB_berechnet], 0.0) AS [Saldo_berechnet]
  124. FROM [Sachkonto_Salden_Summe] [T1]
  125. LEFT JOIN [EB_berechnet_seit_Anbeginn] [T2] ON [T1].[Client_DB] = [T2].[Client_DB] AND T1.[Branch Code] = T2.[Branch Code]
  126. AND [T1].[Periode] = [T2].[Periode]
  127. AND [T1].[Sachkontonr_] = [T2].[Sachkontonr_])
  128. , [Sachkonto_Salden_EB_Prio]
  129. -- Falls der EB fehlt, wird der berechnete Saldo verwendet
  130. AS (SELECT [T1].*
  131. , [T1].[Saldo_berechnet] AS [Saldo_kombiniert]
  132. FROM [Sachkonto_Salden_EB_berechnet] [T1])
  133. , [Sachkonto_Salden_kumuliert]
  134. -- Kumulierter Saldo ab dem 1. Monat des Geschäftsjahrs
  135. AS (SELECT *
  136. , eomonth(datefromparts([Periode] / 100, [Periode] % 100, 1)) AS [Buchungsdatum]
  137. , sum([Saldo]) OVER (PARTITION BY [Client_DB], [Branch Code], [Sachkontonr_], [Geschaeftsjahr] ORDER BY [Periode]) AS [Saldo_kumuliert_gebucht]
  138. , sum([Saldo_kombiniert]) OVER (PARTITION BY [Client_DB], [Branch Code], [Sachkontonr_], [Geschaeftsjahr] ORDER BY [Periode]) AS [Saldo_kumuliert]
  139. FROM [Sachkonto_Salden_EB_Prio])
  140. , [Sachkonto_Aktiva_Passiva]
  141. -- Bei Konten, die mit 0 oder 1 beginnen, wird abhängig vom Saldo ein "_A" oder "_P" angehängt
  142. AS (SELECT *
  143. , CASE
  144. WHEN left([Sachkontonr_], 1) NOT IN ('0', '1') THEN [Sachkontonr_]
  145. WHEN [Saldo_kumuliert] >= 0 THEN [Sachkontonr_] + '_A'
  146. ELSE [Sachkontonr_] + '_P'
  147. END AS [Konto_Bilanz]
  148. FROM [Sachkonto_Salden_kumuliert])
  149. , [Sachkonto_Aktiva_Passiva_SKR51]
  150. -- Acct_Nr mit Kostenrechnungsmerkmalen für Join mit SKR51_Uebersetzung.csv
  151. AS (SELECT *
  152. , '00-00-' + [Konto_Bilanz] + '-00-00-00' AS [Acct_Nr]
  153. FROM [Sachkonto_Aktiva_Passiva])
  154. SELECT [Client_DB]
  155. , [Branch Code]
  156. , [Sachkontonr_]
  157. , [Geschaeftsjahr]
  158. , [Periode]
  159. , [Buchungsdatum]
  160. --, [EB]
  161. , [EB_berechnet]
  162. , [Saldo_ohne_EB]
  163. --, [Saldo_kumuliert_gebucht]
  164. --, [Saldo_kombiniert]
  165. --, [Saldo]
  166. --, [Saldo_berechnet]
  167. , [Saldo_kumuliert]
  168. , [Konto_Bilanz]
  169. FROM [Sachkonto_Aktiva_Passiva]
  170. GO
  171. SET QUOTED_IDENTIFIER OFF
  172. GO
  173. SET ANSI_NULLS OFF
  174. GO
  175. GO