Guest User

Untitled

a guest
Jul 17th, 2024
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.51 KB | None | 0 0
  1. SELECT
  2.     sh.[gln]   
  3.     , sh.[franch_cheque_ref] AS [main_doc_ref]
  4.     , sl.[products_ref]
  5.     , sl.[size_ref]
  6.     , SUM(sl.[product_line_qty]) AS [sales_qty]
  7.     , SUM(sl.[retail_price] * sl.[product_line_qty]) AS [sales_retail_amount]
  8.     , SUM(ISNULL(sl.[discount_nomenclature_amount], 0)) AS [sales_md_amount]
  9.     , SUM(ISNULL(sl.[bonuses_spent_amount], 0)) AS [sales_loyalty_amount]
  10.     , SUM(sl.[product_line_amount]) AS [sales_fact_amount]
  11.     , SUM(ISNULL(sl.[unit_cost_franch] * sl.[product_line_qty], 0)) AS [sales_costs]
  12.     , 0 AS [returns_qty]
  13.     , 0 AS [returns_retail_amount]
  14.     , 0 AS [returns_md_amount]
  15.     , 0 AS [returns_loyalty_amount]
  16.     , 0 AS [returns_fact_amount]
  17.     , 0 AS [returns_costs]
  18. INTO #franch_sales_data
  19. FROM [TomBI].[dbo].[tbl_franch_sales_lines] AS sl
  20. JOIN [TomBI].[dbo].[tbl_franch_sales_headers] AS sh ON sl.[franch_cheque_ref] = sh.[franch_cheque_ref]
  21. LEFT JOIN [TomBI].[dbo].[tbl_products_gift_cards] AS pgc ON sl.[products_ref_fb] = pgc.[products_ref]
  22. WHERE sh.[franch_cheque_posted] = 1
  23.   AND sh.[franch_cheque_marked] = 0
  24.   AND sh.[franch_cheque_status_ref] IN (0xBFFAD8772E16574442B5749FF1771AEE      -- Архивный
  25.                                         , 0xA33EC418293B7D2D437BDA758499827E    -- Пробитый
  26.                                     )
  27.   AND pgc.[products_ref] IS NULL
  28.   AND sl.[franch_cheque_date] >= '2024-07-01'
  29.  
  30. GROUP BY
  31.     sh.[gln]   
  32.     , sh.[franch_cheque_ref]
  33.     , sl.[products_ref]
  34.     , sl.[size_ref]
  35.  
  36. UNION ALL
  37.  
  38. SELECT
  39.     sl.[header_return_gln] 
  40.     , sh.[franch_cheque_ref] AS [main_doc_ref]
  41.     , sl.[products_ref]
  42.     , sl.[size_ref]
  43.     , 0 AS [sales_qty]
  44.     , 0 AS [sales_retail_amount]
  45.     , 0 AS [sales_md_amount]
  46.     , 0 AS [sales_loyalty_amount]
  47.     , 0 AS [sales_fact_amount]
  48.     , 0 AS [sales_costs]
  49.     , SUM(sl.[return_product_line_qty] * ISNULL(sl.[return_retail_price], 0)) AS [returns_retail_amount]
  50.     , SUM(ISNULL(sl.[discount_nomenclature_amount], 0)) AS [returns_md_amount]
  51.     , SUM(ISNULL(sl.[bonuses_spent_amount], 0)) AS [returns_loyalty_amount]
  52.     , SUM(sl.[return_product_line_amount]) AS [returns_fact_amount]
  53.     , SUM(ISNULL(sl.[unit_cost_franch] * sl.[return_product_line_qty], 0)) AS [returns_costs]
  54. FROM [TomBI].[dbo].[tbl_franch_sales_lines] AS sl
  55. JOIN [TomBI].[dbo].[tbl_franch_sales_headers] AS sh ON sl.[franch_cheque_ref] = sh.[franch_cheque_ref]
  56. LEFT JOIN [TomBI].[dbo].[tbl_products_gift_cards] AS pgc ON sl.[products_ref_fb] = pgc.[products_ref]
  57. WHERE sl.[is_return] = 1
  58.   AND sh.[franch_cheque_posted] = 1
  59.   AND sh.[franch_cheque_marked] = 0
  60.   AND sh.[franch_cheque_status_ref] IN (0xBFFAD8772E16574442B5749FF1771AEE      -- Архивный
  61.                                         , 0xA33EC418293B7D2D437BDA758499827E    -- Пробитый
  62.                                     )
  63.   AND pgc.[products_ref] IS NULL
  64.   AND sl.[franch_return_date] >= '2024-07-01' -- возвраты относим на дату возврата, не зависимо от того, когда была продажа.
  65.   -- Уточните у заказчика: такую же логику надо сохранить или для целей CRM дашбордов надо возвраты относить на дату продажи, т.е. уменьшать продажу "задним" числом.
  66.   -- В каком-то CRM отчете именно так и делали и те чеки, по которым в результате получалась нулевая покупка не учитывали, т.к. они не дали эффект
  67.   -- В нашей стандартной отчетности относим по дате операции, как в этом скрипте.
  68. GROUP BY
  69.     sl.[header_return_gln] 
  70.     , sh.[franch_cheque_ref]
  71.     , sl.[products_ref]
  72.     , sl.[size_ref]
  73.     ;
  74.  
  75.  
  76.  
  77. -- Этот запрос корректирует сумму МД:
  78. SELECT  s.*
  79.         , CASE
  80.             WHEN s.[sales_retail_amount] - s.[sales_fact_amount] > 0
  81.             THEN
  82.                 CASE
  83.                     WHEN s.[sales_retail_amount] - s.[sales_fact_amount] >= s.[sales_md_amount]
  84.                     THEN s.[sales_md_amount]
  85.                     ELSE s.[sales_retail_amount] - s.[sales_fact_amount]
  86.                 END
  87.             ELSE 0
  88.           END AS [sales_markdown_amount]
  89.         , CASE
  90.             WHEN s.[returns_retail_amount] - s.[returns_fact_amount] > 0
  91.             THEN
  92.                 CASE
  93.                     WHEN s.[returns_retail_amount] - s.[returns_fact_amount] >= s.[returns_md_amount]  
  94.                     THEN s.[returns_md_amount]
  95.                     ELSE s.[returns_retail_amount] - s.[returns_fact_amount]
  96.                 END
  97.             ELSE 0
  98.           END AS [returns_markdown_amount]
  99. INTO #franch_md
  100. FROM #franch_sales_data AS s
  101. WHERE LEN([gln]) >= 13 -- так убираем ненужные записи. ИД реального магазина содержит 13 символов
  102. ;
Advertisement
Add Comment
Please, Sign In to add comment