Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 18.85 KB | None | 0 0
  1. IF (OBJECT_ID('tempdb..#logistic_rt') IS NOT NULL)
  2.   DROP TABLE #logistic_rt;
  3.  
  4. IF (OBJECT_ID('tempdb..#detailing_flights_a_day_trip') IS NOT NULL)
  5.   DROP TABLE #detailing_flights_a_day_trip;
  6.  
  7. IF (OBJECT_ID('tempdb..#detailing_flights_a_day_railway') IS NOT NULL)
  8.   DROP TABLE #detailing_flights_a_day_railway;
  9.  
  10. IF (OBJECT_ID('tempdb..#detailing_flights_a_day_zakaz_zt') IS NOT NULL)
  11.   DROP TABLE #detailing_flights_a_day_zakaz_zt;
  12.  
  13. IF (OBJECT_ID('tempdb..#detailing_flights_a_day_zakaz_lm') IS NOT NULL)
  14.   DROP TABLE #detailing_flights_a_day_zakaz_lm;
  15.  
  16. IF (OBJECT_ID('tempdb..#detailing_flights_a_day_zakaz') IS NOT NULL)
  17.   DROP TABLE #detailing_flights_a_day_zakaz;
  18.  
  19.  
  20. DECLARE @DATE datetime = '22.01.2019 00:00:00.000';
  21. DECLARE @filter_id INT = 1;
  22. DECLARE @warehouse_id INT = 4;
  23. DECLARE @todayStart datetime = @DATE;
  24. DECLARE @todayEnd datetime = DATEADD(HOUR, 8, DATEADD(DAY, 1, @DATE));
  25. DECLARE @todayEndCS datetime = DATEADD(DAY, 1, @DATE);
  26. DECLARE @notShippedDateStart datetime = DATEADD(MONTH, -1, @DATE);
  27.  
  28.  
  29. DECLARE @contractor_warehouse_id INT = (
  30.   CASE @warehouse_id
  31.     WHEN 0 THEN 14327
  32.     WHEN 1 THEN 14329
  33.     WHEN 2 THEN 14326
  34.     WHEN 3 THEN 14328
  35.     WHEN 4 THEN 18784
  36.     WHEN 5 THEN 19533
  37.     END
  38.   );
  39.  
  40. DECLARE @table_trip_id AS table_trip_id;
  41. INSERT INTO @table_trip_id
  42. SELECT tct.id
  43. FROM tc_trip tct
  44. WHERE tct.factory_id = 1
  45.   AND tct.TYPE <> 3
  46.   AND tct.TYPE <> 5
  47.   AND (
  48.     (
  49.           tct.date_load_plan_oper IS NOT NULL AND
  50.           (tct.date_load_plan_oper < @todayEnd AND tct.date_load_plan_oper >= @todayStart)
  51.         OR
  52.           tct.date_load_plan_oper IS NULL AND (tct.date_load_plan < @todayEndCS AND tct.date_load_plan >= @todayStart)
  53.       ) OR (
  54.       tct.date_come < @todayEnd AND tct.date_come > @todayStart
  55.       ) OR (
  56.         tct.date_shipped_fact IS NULL AND
  57.         (tct.date_load_plan_oper < @todayEnd AND tct.date_load_plan_oper >= @notShippedDateStart)
  58.       )
  59.     OR (tct.date_shipped_fact IS NULL AND (tct.date_come < @todayEnd AND tct.date_come >= @notShippedDateStart))
  60.   )
  61.  
  62.  
  63. SELECT a.trip_id,
  64.        a.warehouse_id,
  65.        a.pallet_id,
  66.        a.korob_count AS pallet_count,
  67.        a.p_brut      AS                               p_brut,
  68.        a.p_net       AS                               p_net,
  69.        a.city_order,
  70.        a.zh_id       AS                               zh_id,
  71.        a.material_id AS                               matertial_id
  72.        INTO #detailing_flights_a_day_zakaz_lm
  73. FROM (
  74.        SELECT tct.trip_id,
  75.               CASE
  76.                 WHEN zlw.contractor_id IS NOT NULL THEN 4 -- Логистический
  77.                 WHEN cmap.warehouse_id IN (14327) THEN 0 -- ЖМС
  78.                 WHEN cmap.warehouse_id IN (14329) THEN 1 -- СЧС
  79.                 WHEN cmap.warehouse_id IN (14326) THEN 2 -- СМС
  80.                 WHEN cmap.warehouse_id IN (14328) THEN 3 -- ТМ
  81.                 WHEN cmap.warehouse_id IN (19533) THEN 5 -- Аромат
  82.                 ELSE lcw.warehouse_id
  83.                 END                                                                 warehouse_id,
  84.               CASE WHEN zlw.contractor_id IS NOT NULL THEN -1 ELSE h.address_id END city_order,
  85.               lpp.pallet_id,
  86.               lm.kor * cmap.box_gross AS                                            p_brut,
  87.               lm.kor * cmap.box_net   AS                                            p_net,
  88.               lm.kor AS korob_count,
  89.               h.id                    AS                                            zh_id,
  90.               m.id                    AS                                            material_id
  91.        FROM loading_pallet_material lm
  92.               INNER JOIN loading_pallet lp ON lm.pallet_id = lp.id
  93.               INNER JOIN loading_palletz_pallet lpp ON lpp.pallet_id = lp.id
  94.               INNER JOIN loading_palletz_zakaz_hat pz ON pz.pallet_zakaz_id = lpp.pallet_zakaz_id
  95.  
  96.               JOIN co_material AS m ON m.id = lm.material_id
  97.               INNER JOIN co_material_attr_prod cmap ON lm.material_id = cmap.material_id
  98.               INNER JOIN zakaz_hat h ON h.id = pz.zakaz_id
  99.  
  100.               INNER JOIN co_material_attr_details det
  101.                          ON det.id = cmap.category AND det.material_attr_id = 21 AND det.factory_id = 1
  102.               LEFT JOIN loading_category_warehouse lcw ON lcw.category_id = det.id
  103.               INNER JOIN loading_palletz_transport pt ON pz.pallet_zakaz_id = pt.id
  104.               INNER JOIN tc_trip_zakaz tcz ON tcz.zakaz_hat_id = h.id
  105.               INNER JOIN @table_trip_id tct ON tct.trip_id = tcz.tc_trip_id
  106.               INNER JOIN dbo.co_contractor_attr_customer ca ON h.saleman_id = ca.distr_id
  107.               LEFT JOIN zakaz_logistic_warehouse zlw ON zlw.contractor_id = ca.contractor_id
  108.      ) a
  109. GROUP BY a.warehouse_id, a.korob_count, a.pallet_id, a.trip_id, a.city_order, a.p_net, a.p_brut, a.warehouse_id, city_order, p_brut, p_net, zh_id,
  110.          material_id
  111.  
  112.  
  113. SELECT b.trip_id,
  114.        b.warehouse_id,
  115.        0 AS pallet_id,
  116.        CASE WHEN b.pallet_count = 0 THEN 1 ELSE b.pallet_count END AS pallet_count,
  117.        b.p_brut,
  118.        b.p_net,
  119.        b.city_order,
  120.        b.zh_id,
  121.        b.material_id                                               AS material_id
  122.        INTO #detailing_flights_a_day_zakaz_zt
  123. FROM (
  124.        SELECT a.trip_id,
  125.               a.warehouse_id,
  126.               round(SUM(a.brut) / (
  127.                 CASE a.warehouse_id -- средний вес паллеты на складе (рассчитывалось вручную)
  128.                   WHEN 0 THEN 650
  129.                   WHEN 1 THEN 650
  130.                   WHEN 2 THEN 470
  131.                   WHEN 3 THEN 750
  132.                   WHEN 4 THEN 555
  133.                   WHEN 5 THEN 500
  134.                   END
  135.                 ), 0)       AS pallet_count,
  136.               a.brut        AS p_brut,
  137.               a.net         AS p_net,
  138.               a.city_order  AS city_order,
  139.               a.zh_id       AS zh_id,
  140.               a.material_id AS material_id
  141.        FROM (
  142.               SELECT tct.trip_id,
  143.                      CASE
  144.                        WHEN zlw.contractor_id IS NOT NULL THEN 4 -- Логистический
  145.                        WHEN cmap.warehouse_id IN (14327) THEN 0 -- ЖМС
  146.                        WHEN cmap.warehouse_id IN (14329) THEN 1 -- СЧС
  147.                        WHEN cmap.warehouse_id IN (14326) THEN 2 -- СМС
  148.                        WHEN cmap.warehouse_id IN (14328) THEN 3 -- ТМ
  149.                        WHEN cmap.warehouse_id IN (19533) THEN 5 -- Аромат
  150.                        ELSE lcw.warehouse_id
  151.                        END                                                                 warehouse_id,
  152.                      zt.kor * cmap.box_gross AS                                            brut,
  153.                      zt.kor * cmap.box_net   AS                                            net,
  154.                      CASE WHEN zlw.contractor_id IS NOT NULL THEN -1 ELSE h.address_id END city_order,
  155.                      h.id                    AS                                            zh_id,
  156.                      m.id                    AS                                            material_id
  157.               FROM @table_trip_id tct
  158.                      JOIN tc_trip_zakaz tcz ON tcz.tc_trip_id = tct.trip_id
  159.                      JOIN zakaz_hat h ON h.id = tcz.zakaz_hat_id
  160.                      JOIN zakaz_tab zt ON zt.id = h.id
  161.                      JOIN co_material m ON m.id = zt.material_id
  162.                      JOIN co_material_attr_prod_db cmap ON cmap.material_id = m.id
  163.                      JOIN co_material_attr_details det
  164.                           ON det.id = cmap.category AND det.material_attr_id = 21 AND det.factory_id = 1
  165.                      LEFT JOIN loading_category_warehouse lcw ON lcw.category_id = det.id
  166.                      LEFT JOIN loading_palletz_zakaz_hat lpzh ON lpzh.zakaz_id = tcz.zakaz_hat_id
  167.                      INNER JOIN dbo.co_contractor_attr_customer ccac ON h.saleman_id = ccac.distr_id
  168.                      LEFT JOIN zakaz_logistic_warehouse zlw ON zlw.contractor_id = ccac.contractor_id
  169.               WHERE lpzh.zakaz_id IS NULL -- не берём рейсы по которым уже есть карта погрузки
  170.             ) a
  171.        GROUP BY a.trip_id, a.warehouse_id, a.city_order, a.brut, a.net, zh_id, material_id
  172.      ) b
  173.  
  174. SELECT * INTO #detailing_flights_a_day_zakaz
  175. FROM (
  176.        SELECT *
  177.        FROM #detailing_flights_a_day_zakaz_lm
  178.        UNION
  179.        SELECT *
  180.        FROM #detailing_flights_a_day_zakaz_zt
  181.      ) a
  182.  
  183.  
  184. DECLARE @info_xml TABLE
  185.                   (
  186.                     trip_id        INT,
  187.                     zakaz_id       INT,
  188.                     saleman_name   VARCHAR(MAX),
  189.                     NAK_ID         VARCHAR(MAX),
  190.                     zayavka        INT,
  191.                     brut           FLOAT,
  192.                     net            FLOAT,
  193.                     korob_count    INT,
  194.                     consignee_name VARCHAR(MAX),
  195.                     shipping_id    VARCHAR(MAX),
  196.                     material_name  VARCHAR(MAX),
  197.                     box_name       VARCHAR(MAX),
  198.                     material_id    VARCHAR(MAX),
  199.                     box_id         VARCHAR(MAX),
  200.                     pogruz_name    VARCHAR(MAX),
  201.                     stack_name     VARCHAR(MAX)
  202.                   );
  203. INSERT INTO @info_xml
  204. SELECT tct.id,
  205.        zh.id,
  206.        cc.name,
  207.        o.NAK_ID,
  208.        zh.num,
  209.        z.p_brut         AS brut,
  210.        z.p_net          AS net,
  211.        zt.kor           AS korob_count,
  212.        cc2.name         AS consignee_name,
  213.        cmap.shipping_id AS shipping_id,
  214.        m.name           AS material_name,
  215.        box.box_name     AS box_name,
  216.        m.id             AS material_id,
  217.        box.box_id,
  218.        pogruz.pogruz_name,
  219.        ps.stack_name
  220. FROM tc_trip tct
  221.        LEFT JOIN loading_points_time lpt ON lpt.trip_id = tct.id AND lpt.point_id = @warehouse_id
  222.        INNER JOIN tc_trip_zakaz tctz ON tct.id = tctz.tc_trip_id
  223.        INNER JOIN zakaz_hat zh ON zh.id = tctz.zakaz_hat_id
  224.        LEFT JOIN zakaz_tab zt ON zt.id = zh.id
  225.        LEFT JOIN zakaz_order_id_arc o ON o.ZAKAZ_ID = zh.id
  226.        INNER JOIN co_contractor_attr_customer ccac ON ccac.distr_id = zh.saleman_id
  227.        INNER JOIN co_contractor cc ON cc.id = ccac.contractor_id
  228.        LEFT JOIN co_material m ON m.id = zt.material_id
  229.        LEFT JOIN co_material_attr_prod_db cmap ON cmap.material_id = m.id
  230.        INNER JOIN @table_trip_id tt ON tt.trip_id = tct.id
  231.        INNER JOIN #detailing_flights_a_day_zakaz z ON z.trip_id = tct.id AND z.zh_id = zh.id AND z.matertial_id = m.id
  232.        LEFT JOIN co_contractor_attr_customer ccac2 ON ccac2.distr_id = zh.consignee_id
  233.        LEFT JOIN co_contractor cc2 ON cc2.id = ccac2.contractor_id
  234.        LEFT JOIN ver_zaivka_prod vzp
  235.                  ON vzp.ver_id = zh.ver_id AND vzp.zaivka_id = zh.zaivka_id AND vzp.material_id = m.id
  236.        LEFT JOIN prod_pogruz pp
  237.                  ON pp.ver_id = vzp.ver_id AND pp.zaivka_id = vzp.zaivka_id AND pp.material_id = vzp.material_id
  238.        LEFT JOIN pogruz ON pogruz.pogruz_id = pp.pogruz_id
  239.        LEFT JOIN box ON box.box_id = pogruz.box_id
  240.        JOIN prod_stacking ps ON ps.stack_id = vzp.stack_id
  241. WHERE (@filter_id = 0)
  242.    OR (@filter_id = 1 AND lpt.end_load IS NOT NULL)
  243.    OR (@filter_id = 2 AND lpt.zakaz_ready IS NOT NULL AND lpt.end_load IS NULL)
  244.    OR (@filter_id = 3 AND lpt.start_load IS NOT NULL AND lpt.end_load IS NULL)
  245.    OR (@filter_id = 4 AND lpt.start_load IS NULL AND tct.date_come IS NOT NULL)
  246.    OR (@filter_id = 5 AND lpt.end_load IS NULL);
  247.  
  248.  
  249. SELECT * INTO #logistic_rt
  250. FROM [f_get_logistic_factory_route_by_trips](@table_trip_id)
  251.  
  252.  
  253. SELECT tct.id        trip_id,
  254.        rt.warehouse_id,
  255.        i2.saleman_name,
  256.        i2.consignee_name,
  257.        i2.zayavka AS zakaz_hat,
  258.        i2.NAK_ID,
  259.        i2.net,
  260.        i2.brut,
  261.        i2.shipping_id,
  262.        i2.material_name,
  263.        i2.korob_count,
  264.        i2.box_name,
  265.        i2.material_id,
  266.        i2.box_id,
  267.        i2.pogruz_name,
  268.        i2.stack_name
  269.        INTO #detailing_flights_a_day_trip
  270. FROM [nefco].[dbo].[tc_trip] tct
  271.        LEFT JOIN #logistic_rt rt ON rt.trip_id = tct.id
  272.        JOIN @info_xml i2 ON i2.trip_id = tct.id
  273. WHERE warehouse_id = @warehouse_id
  274.  
  275. GROUP BY tct.id,
  276.          warehouse_id,
  277.          saleman_name,
  278.          consignee_name,
  279.          zayavka,
  280.          NAK_ID,
  281.          net,
  282.          brut,
  283.          shipping_id,
  284.          material_name,
  285.          korob_count,
  286.          box_name,
  287.          material_id,
  288.          box_id,
  289.          pogruz_name,
  290.          stack_name
  291. ORDER BY trip_id, zakaz_hat
  292.  
  293.  
  294. SELECT a.trip_id,
  295.        a.warehouse_id,
  296.        a.saleman_name,
  297.        a.consignee_name,
  298.        a.zakaz_hat,
  299.        a.NAK_ID,
  300.        SUM(a.net)  net,
  301.        SUM(a.brut) brut,
  302.        a.shipping_id,
  303.        a.material_name,
  304.        a.korob_count,
  305.        a.box_name,
  306.        a.material_id,
  307.        a.box_id,
  308.        a.pogruz_name,
  309.        a.stack_name
  310.  
  311.        INTO #detailing_flights_a_day_railway
  312. FROM (
  313.        SELECT tct.id                             AS trip_id,
  314.               h.num                              AS zakaz_hat,
  315.               cmap.shipping_id                   AS shipping_id,
  316.               NAK_ID =
  317.               CAST(REPLACE(STUFF((
  318.                                    SELECT CASE
  319.                                             WHEN zoia.NAK_ID IS NOT NULL THEN (', ' + CAST(zoia.NAK_ID AS VARCHAR(11)))
  320.                                             ELSE '' END,
  321.                                           CASE
  322.                                             WHEN COUNT(*) > 1 THEN '(' + CONVERT(VARCHAR(MAX), COUNT(*)) + ')'
  323.                                             ELSE '' END
  324.                                    FROM zakaz_order_id_arc zoia
  325.                                    WHERE zoia.ZAKAZ_ID = h.id
  326.                                      AND zoia.warehouse_id = @contractor_warehouse_id
  327.                                    GROUP BY zoia.NAK_ID FOR
  328.                                      XML PATH ('')
  329.                                  ), 1, 1, ''), ' ,', ', ') AS VARCHAR(1000)
  330.                 ),
  331.               CASE
  332.                 WHEN zlw.contractor_id IS NOT NULL THEN 4 -- Логистический
  333.                 WHEN cmap.warehouse_id IN (14327) THEN 0 -- ЖМС
  334.                 WHEN cmap.warehouse_id IN (14329) THEN 1 -- СЧС
  335.                 WHEN cmap.warehouse_id IN (14326) THEN 2 -- СМС
  336.                 WHEN cmap.warehouse_id IN (14328) THEN 3 -- ТМ
  337.                 WHEN cmap.warehouse_id IN (19533) THEN 5 -- Аромат
  338.                 ELSE lcw.warehouse_id
  339.                 END                                 warehouse_id,
  340.               zt.kor * cmap.box_gross            AS brut,
  341.               zt.kor * cmap.box_net              AS net,
  342.  
  343.  
  344.               m.id                               AS material_id,
  345.               m.name                             AS material_name,
  346.               vzp.ver_id,
  347.               vzp.zaivka_id,
  348.               zt.kor                             AS korob_count,
  349.               ps.stack_name,
  350.               pp.pogruz_id,
  351.  
  352.               pogruz.pogruz_name,
  353.               pogruz.hkor_norma,                                   -- Кол-во коробов в высоту
  354.               pogruz.row_kor,                                      -- Кол-во коробов в ряду
  355.               pogruz.hkor_norma * pogruz.row_kor AS pallet_korobs, -- Кол-во коробов в паллете
  356.               box.box_id,
  357.               box.box_name,
  358.               cc.name                            AS saleman_name,
  359.               cc2.name                           AS consignee_name
  360.        FROM tc_trip_railways tct
  361.               JOIN tc_trip_railways_zakaz tcz ON tcz.tc_trip_railways_id = tct.id
  362.               JOIN loading_points_time_railways lpt ON lpt.tc_trip_railway_id = tct.id AND lpt.point_id = @warehouse_id
  363.               INNER JOIN zakaz_hat h ON h.id = tcz.zakaz_hat_id AND h.warehouse_id = @warehouse_id
  364.               JOIN zakaz_tab zt ON zt.id = h.id
  365.               JOIN co_material m ON m.id = zt.material_id
  366.               INNER JOIN co_material_attr_prod_db cmap ON cmap.material_id = m.id AND cmap.warehouse_id = @warehouse_id
  367.               JOIN co_material_attr_details det
  368.                    ON det.id = cmap.category AND det.material_attr_id = 21 AND det.factory_id = 1
  369.               LEFT JOIN loading_category_warehouse lcw ON lcw.category_id = det.id AND lcw.warehouse_id = @warehouse_id
  370.               INNER JOIN dbo.co_contractor_attr_customer ccac ON h.saleman_id = ccac.distr_id
  371.               LEFT JOIN zakaz_logistic_warehouse zlw ON zlw.contractor_id = ccac.contractor_id
  372.  
  373.               JOIN ver_zaivka_prod vzp
  374.                    ON vzp.ver_id = h.ver_id AND vzp.zaivka_id = h.zaivka_id AND vzp.material_id = m.id
  375.               JOIN prod_stacking ps ON ps.stack_id = vzp.stack_id
  376.               JOIN prod_pogruz pp
  377.                    ON pp.ver_id = vzp.ver_id AND pp.zaivka_id = vzp.zaivka_id AND pp.material_id = vzp.material_id
  378.               JOIN pogruz ON pogruz.pogruz_id = pp.pogruz_id
  379.               JOIN box ON box.box_id = pogruz.box_id
  380.               LEFT JOIN co_contractor cc ON cc.id = ccac.contractor_id
  381.               LEFT JOIN co_contractor_attr_customer ccac2 ON ccac2.distr_id = h.consignee_id
  382.               LEFT JOIN co_contractor cc2 ON cc2.id = ccac2.contractor_id
  383.        WHERE ((CAST(tct.date_load_plan AS DATE) = @DATE AND
  384.                (tct.transp_company IS NOT NULL AND tct.transp_company IS NULL)))
  385.           OR (CAST(tct.date_load_plan AS DATE) = DATEADD(DAY, -1, @DATE))
  386.           OR (CAST(tct.date_load_plan AS DATE) > DATEADD(DAY, -7, @DATE))
  387.          AND (tct.transp_company IS NOT NULL)
  388.          AND (tct.date_shipped IS NULL OR @DATE < @DATE)
  389.          AND (
  390.                  (@filter_id = 0)
  391.                  OR
  392.                  (@filter_id = 1 AND lpt.end_load IS NOT NULL)
  393.                  OR
  394.                  (@filter_id = 2 AND lpt.zakaz_ready IS NOT NULL AND lpt.end_load IS NULL)
  395.                  OR
  396.                  (@filter_id = 3 AND lpt.start_load IS NOT NULL AND lpt.end_load IS NULL)
  397.                  OR
  398.                  (@filter_id = 4 AND lpt.start_load IS NULL AND tct.date_shipped IS NULL AND tct.date_fact IS NOT NULL)
  399.                  OR
  400.                  (@filter_id = 5 AND lpt.end_load IS NULL)
  401.                )
  402.      ) a
  403. WHERE a.warehouse_id = @warehouse_id
  404. GROUP BY a.trip_id,
  405.          a.warehouse_id,
  406.          a.saleman_name,
  407.          a.consignee_name,
  408.          a.zakaz_hat,
  409.          a.NAK_ID,
  410.          net,
  411.          brut,
  412.          a.shipping_id,
  413.          a.material_name,
  414.          a.korob_count,
  415.          a.box_name,
  416.          a.material_id,
  417.          a.box_id,
  418.          a.pogruz_name,
  419.          a.stack_name
  420. ORDER BY trip_id, zakaz_hat
  421.  
  422.  
  423. SELECT *
  424. FROM #detailing_flights_a_day_trip
  425. UNION
  426. SELECT *
  427. FROM #detailing_flights_a_day_railway;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement