Advertisement
Guest User

Untitled

a guest
Apr 19th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.62 KB | None | 0 0
  1. USE ILS
  2. GO
  3.  
  4. IF OBJECT_ID('dbo.KC_CONSOLIDATE_EXP_CAP', 'TF') IS NOT NULL
  5.     DROP FUNCTION dbo.KC_CONSOLIDATE_EXP_CAP
  6. GO
  7. CREATE FUNCTION dbo.KC_CONSOLIDATE_EXP_CAP (
  8.       @lpn nvarchar(32)
  9.     , @str varchar(8) = ''
  10. )
  11.  
  12. /*  Author : Michael Knyazev
  13.     Create Date: -
  14.     Modify: Lestat Kim
  15.     Modify date: 19-04-2017
  16.     Assignment: Consolidate - Exclude differing lots - EpirationDate
  17.     Description: Консолидация по ОСГ только для безразмерной ячейки
  18.     Example: select * from dbo.KC_CONSOLIDATE_EXP_CAP ('LPN14032017')
  19. */
  20.  
  21. RETURNS @t TABLE (LOCATION nvarchar(25))
  22. AS
  23. BEGIN
  24.     DECLARE @having_exp_classic nvarchar(1024) = '
  25.         HAVING count(m.lpn) < m.capacity
  26.             AND (sum(m.TOTAL_WEIGHT) + __m.TOTAL_WEIGHT) !> __m.MAXIMUM_WEIGHT
  27.             AND ABS(DATEDIFF(
  28.                     DAY, ISNULL( MIN(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  29.                 )) < __m.shelf_life
  30.             AND ABS(DATEDIFF(
  31.                     DAY, ISNULL( MAX(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  32.                 )) < __m.shelf_life
  33.     ';
  34.     DECLARE @having_exp_cap nvarchar(1024) = '
  35.         HAVING count(m.lpn) < m.capacity
  36.             AND (sum(m.TOTAL_WEIGHT) + __m.TOTAL_WEIGHT) !> __m.MAXIMUM_WEIGHT
  37.             AND ABS(DATEDIFF(
  38.                     DAY, ISNULL( MIN(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  39.                 )) < __m.shelf_life
  40.             AND ABS(DATEDIFF(
  41.                     DAY, ISNULL( MAX(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  42.                 )) < __m.shelf_life
  43.     ';
  44.     DECLARE @having_exp_l nvarchar(1024) = '
  45.         HAVING count(m.lpn) < m.capacity
  46.             AND (sum(m.TOTAL_WEIGHT) + __m.TOTAL_WEIGHT) !> __m.MAXIMUM_WEIGHT
  47.             AND (sum(m.LENGTH) + __m.LENGTH) !>m.DEPTH
  48.             AND ABS(DATEDIFF(
  49.                     DAY, ISNULL( MIN(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  50.                 )) < __m.shelf_life
  51.             AND ABS(DATEDIFF(
  52.                     DAY, ISNULL( MAX(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  53.                 )) < __m.shelf_life
  54.     ';
  55.     DECLARE @having_permanent nvarchar(1024) = '
  56.         HAVING count(m.lpn) < m.capacity
  57.             AND (sum(m.TOTAL_WEIGHT) + __m.TOTAL_WEIGHT) !> __m.MAXIMUM_WEIGHT
  58.             AND (sum(m.LENGTH) + __m.LENGTH) !>m.DEPTH
  59.             AND ABS(DATEDIFF(
  60.                     DAY, ISNULL( MIN(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  61.                 )) < __m.shelf_life
  62.             AND ABS(DATEDIFF(
  63.                     DAY, ISNULL( MAX(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  64.                 )) < __m.shelf_life
  65.     ';
  66.  
  67.     DECLARE @sql nvarchar(max) = '
  68.     WITH
  69.        kc_lpn as (
  70.            SELECT LPN, ERP_PLANT, LAYOUT
  71.            FROM dbo.KC_LPN
  72.        ),
  73.        __li as (
  74.            SELECT li.LOGISTICS_UNIT as lpn, li.LOCATION,
  75.                li.ITEM, l.LOCATION_TYPE, li.COMPANY,
  76.                li.EXPIRATION_DATE, i.ITEM_CATEGORY10,
  77.                lt.HEIGHT, lt.MAXIMUM_WEIGHT, li.TOTAL_WEIGHT
  78.            FROM LOCATION_INVENTORY as li
  79.                JOIN LOCATION l on li.LOCATION = l.LOCATION
  80.                    AND l.ACTIVE = ''Y''
  81.                    AND l.MULTI_ITEM = ''N''
  82.                    AND l.LOCATION_CLASS != ''FROZEN''
  83.                JOIN LOCATION_TYPE as lt on l.LOCATION_TYPE = lt.LOCATION_TYPE
  84.                JOIN ITEM as i on li.ITEM = i.ITEM
  85.        ),
  86.        gen_shelf_life as (
  87.            SELECT gcd.USER1VALUE as location_type,
  88.                gcd.USER2VALUE as item_cat10, gcd.USER3VALUE as shelf_life
  89.            FROM GENERIC_CONFIG_DETAIL as gcd
  90.            WHERE RECORD_TYPE = ''KC_SHELF_LIFE_COMP''
  91.        ),
  92.        gen_loc_pallet_type as (
  93.            SELECT USER1VALUE as loc_type,
  94.                USER2VALUE as typ, USER3VALUE as capacity
  95.            FROM GENERIC_CONFIG_DETAIL
  96.            WHERE RECORD_TYPE = ''KC_LOCATION_PALLET_TYPE''
  97.        ),
  98.        gen_pallet_layout as (
  99.            SELECT IDENTIFIER as layout,
  100.                USER1VALUE as typ, USER4VALUE as height
  101.            FROM GENERIC_CONFIG_DETAIL
  102.            WHERE RECORD_TYPE = ''KC_PALLET_LAYOUT''
  103.        ),
  104.        li___gen_loc_pallet_type as (
  105.            SELECT __li.ITEM, __li.lpn,
  106.                g.capacity
  107.            FROM __li
  108.                JOIN (
  109.                    SELECT distinct g.loc_type, g.capacity
  110.                    FROM gen_loc_pallet_type as g
  111.                )g on __li.LOCATION_TYPE = g.loc_type
  112.        ),
  113.        kc_lpn___gen_pallet_layout___gen_log_pallet_type as(
  114.            SELECT k.LPN, k.ERP_PLANT,
  115.                k.LAYOUT, gpl.typ, gpl.height
  116.            FROM kc_lpn as k
  117.                JOIN gen_pallet_layout as gpl on k.LAYOUT = gpl.layout
  118.                JOIN gen_loc_pallet_type as glpt on gpl.typ = glpt.typ
  119.        ),
  120.         gcd_depth as (
  121.            SELECT USER1VALUE as loc_type,
  122.                USER2VALUE as DEPTH
  123.            FROM GENERIC_CONFIG_DETAIL
  124.            WHERE RECORD_TYPE = ''KC_DEPTH''
  125.        ),
  126.         cont as (
  127.            SELECT LENGTH as LENGTH,
  128.               CONTAINER_TYPE as PALLET_TYPE
  129.            FROM CONTAINER_TYPE
  130.        ),
  131.  
  132.        main as (
  133.            SELECT-- DISTINCT
  134.                l.lpn, l.ITEM, l.COMPANY, --l.LOCATION_TYPE
  135.                l.LOCATION,
  136.                l.EXPIRATION_DATE, l.HEIGHT, l.MAXIMUM_WEIGHT, l.TOTAL_WEIGHT,
  137.                O1.LAYOUT, O1.typ, O1.height as __height, O1.ERP_PLANT,
  138.                O2.capacity,
  139.                sl.item_cat10, sl.shelf_life,
  140.                 GD.depth,
  141.                 CONT.LENGTH
  142.  
  143.            FROM __li as l
  144.                JOIN kc_lpn___gen_pallet_layout___gen_log_pallet_type as O1
  145.                    ON l.lpn = O1.LPN
  146.                JOIN li___gen_loc_pallet_type as O2 ON l.lpn = O2.lpn
  147.                JOIN gen_shelf_life as sl ON l.LOCATION_TYPE = sl.location_type
  148.                    AND l.ITEM_CATEGORY10 = sl.item_cat10
  149.                 JOIN gcd_depth as GD on l.LOCATION_TYPE = GD.loc_type
  150.                 JOIN cont as CONT on 01.typ=CONT.PALLET_TYPE
  151.        ),
  152.        __main as (
  153.            SELECT DISTINCT *
  154.            FROM main
  155.            WHERE lpn = @lpn
  156.        ),
  157.        final as (
  158.            SELECT DISTINCT m.LOCATION
  159.            FROM main AS m
  160.                JOIN __main AS __m ON m.ITEM = __m.ITEM
  161.                    AND m.HEIGHT !< __m.__height
  162.                    AND m.COMPANY = __m.COMPANY
  163.                    AND m.ERP_PLANT = __m.ERP_PLANT
  164.                    AND m.typ = __m.typ
  165.            WHERE m.lpn != @lpn
  166.            GROUP BY m.capacity, m.LOCATION, __m.TOTAL_WEIGHT, __m.MAXIMUM_WEIGHT,
  167.                __m.EXPIRATION_DATE, __m.shelf_life
  168.             __HAVING
  169.        )
  170.        
  171.         SELECT *
  172.        FROM final ;
  173.     '
  174.  
  175.     IF @str = 'EXP_CAP'
  176.         SET @str = REPLACE(@str, '__HAVING', @having_exp_cap)
  177.  
  178.     ELSE IF @str = 'EXP_L'
  179.         SET @str = REPLACE(@str, '__HAVING', @having_exp_l)
  180.  
  181.     ELSE IF @str = 'PERMANENT'
  182.         SET @str = REPLACE(@str, '__HAVING', @having_permanent)
  183.        
  184.     ELSE
  185.         SET @str = REPLACE(@str, '__HAVING', @having_exp_classic);
  186.  
  187.    
  188.     INSERT @t
  189.         EXEC @str;
  190.  
  191.     RETURN
  192. END;
  193. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement