Advertisement
Guest User

Untitled

a guest
Apr 19th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 6.06 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 ABS(DATEDIFF(
  48.                     DAY, ISNULL( MIN(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  49.                 )) < __m.shelf_life
  50.             AND ABS(DATEDIFF(
  51.                     DAY, ISNULL( MAX(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  52.                 )) < __m.shelf_life
  53.     ';
  54.     DECLARE @having_permanent nvarchar(1024) = '
  55.         HAVING count(m.lpn) < m.capacity
  56.             AND (sum(m.TOTAL_WEIGHT) + __m.TOTAL_WEIGHT) !> __m.MAXIMUM_WEIGHT
  57.             AND ABS(DATEDIFF(
  58.                     DAY, ISNULL( MIN(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  59.                 )) < __m.shelf_life
  60.             AND ABS(DATEDIFF(
  61.                     DAY, ISNULL( MAX(m.EXPIRATION_DATE), 0 ), __m.EXPIRATION_DATE
  62.                 )) < __m.shelf_life
  63.     ';
  64.  
  65.     DECLARE @sql nvarchar(max) = '
  66.     WITH
  67.        kc_lpn as (
  68.            SELECT LPN, ERP_PLANT, LAYOUT
  69.            FROM dbo.KC_LPN
  70.        ),
  71.        __li as (
  72.            SELECT li.LOGISTICS_UNIT as lpn, li.LOCATION,
  73.                li.ITEM, l.LOCATION_TYPE, li.COMPANY,
  74.                li.EXPIRATION_DATE, i.ITEM_CATEGORY10,
  75.                lt.HEIGHT, lt.MAXIMUM_WEIGHT, li.TOTAL_WEIGHT
  76.            FROM LOCATION_INVENTORY as li
  77.                JOIN LOCATION l on li.LOCATION = l.LOCATION
  78.                    AND l.ACTIVE = ''Y''
  79.                    AND l.MULTI_ITEM = ''N''
  80.                    AND l.LOCATION_CLASS != ''FROZEN''
  81.                JOIN LOCATION_TYPE as lt on l.LOCATION_TYPE = lt.LOCATION_TYPE
  82.                JOIN ITEM as i on li.ITEM = i.ITEM
  83.        ),
  84.        gen_shelf_life as (
  85.            SELECT gcd.USER1VALUE as location_type,
  86.                gcd.USER2VALUE as item_cat10, gcd.USER3VALUE as shelf_life
  87.            FROM GENERIC_CONFIG_DETAIL as gcd
  88.            WHERE RECORD_TYPE = ''KC_SHELF_LIFE_COMP''
  89.        ),
  90.        gen_loc_pallet_type as (
  91.            SELECT USER1VALUE as loc_type,
  92.                USER2VALUE as typ, USER3VALUE as capacity
  93.            FROM GENERIC_CONFIG_DETAIL
  94.            WHERE RECORD_TYPE = ''KC_LOCATION_PALLET_TYPE''
  95.        ),
  96.        gen_pallet_layout as (
  97.            SELECT IDENTIFIER as layout,
  98.                USER1VALUE as typ, USER4VALUE as height
  99.            FROM GENERIC_CONFIG_DETAIL
  100.            WHERE RECORD_TYPE = ''KC_PALLET_LAYOUT''
  101.        ),
  102.        li___gen_loc_pallet_type as (
  103.            SELECT __li.ITEM, __li.lpn,
  104.                g.capacity
  105.            FROM __li
  106.                JOIN (
  107.                    SELECT distinct g.loc_type, g.capacity
  108.                    FROM gen_loc_pallet_type as g
  109.                )g on __li.LOCATION_TYPE = g.loc_type
  110.        ),
  111.        kc_lpn___gen_pallet_layout___gen_log_pallet_type as(
  112.            SELECT k.LPN, k.ERP_PLANT,
  113.                k.LAYOUT, gpl.typ, gpl.height
  114.            FROM kc_lpn as k
  115.                JOIN gen_pallet_layout as gpl on k.LAYOUT = gpl.layout
  116.                JOIN gen_loc_pallet_type as glpt on gpl.typ = glpt.typ
  117.        ),
  118.        main as (
  119.            SELECT-- DISTINCT
  120.                l.lpn, l.ITEM, l.COMPANY, --l.LOCATION_TYPE
  121.                l.LOCATION,
  122.                l.EXPIRATION_DATE, l.HEIGHT, l.MAXIMUM_WEIGHT, l.TOTAL_WEIGHT,
  123.                O1.LAYOUT, O1.typ, O1.height as __height, O1.ERP_PLANT,
  124.                O2.capacity,
  125.                sl.item_cat10, sl.shelf_life
  126.  
  127.            FROM __li as l
  128.                JOIN kc_lpn___gen_pallet_layout___gen_log_pallet_type as O1
  129.                    ON l.lpn = O1.LPN
  130.                JOIN li___gen_loc_pallet_type as O2 ON l.lpn = O2.lpn
  131.                JOIN gen_shelf_life as sl ON l.LOCATION_TYPE = sl.location_type
  132.                    AND l.ITEM_CATEGORY10 = sl.item_cat10
  133.        ),
  134.        __main as (
  135.            SELECT DISTINCT *
  136.            FROM main
  137.            WHERE lpn = @lpn
  138.        ),
  139.        final as (
  140.            SELECT DISTINCT m.LOCATION
  141.            FROM main AS m
  142.                JOIN __main AS __m ON m.ITEM = __m.ITEM
  143.                    AND m.HEIGHT !< __m.__height
  144.                    AND m.COMPANY = __m.COMPANY
  145.                    AND m.ERP_PLANT = __m.ERP_PLANT
  146.                    AND m.typ = __m.typ
  147.            WHERE m.lpn != @lpn
  148.            GROUP BY m.capacity, m.LOCATION, __m.TOTAL_WEIGHT, __m.MAXIMUM_WEIGHT,
  149.                __m.EXPIRATION_DATE, __m.shelf_life
  150.             __HAVING
  151.        )
  152.        
  153.         SELECT *
  154.        FROM final ;
  155.     '
  156.  
  157.     IF @str = 'EXP_CAP'
  158.         SET @str = REPLACE(@str, '__HAVING', @having_exp_cap)
  159.  
  160.     ELSE IF @str = 'EXP_L'
  161.         SET @str = REPLACE(@str, '__HAVING', @having_exp_l)
  162.  
  163.     ELSE IF @str = 'PERMANENT'
  164.         SET @str = REPLACE(@str, '__HAVING', @having_permanent)
  165.        
  166.     ELSE
  167.         SET @str = REPLACE(@str, '__HAVING', @having_exp_classic);
  168.  
  169.    
  170.     INSERT @t
  171.         EXEC @str;
  172.  
  173.     RETURN
  174. END;
  175. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement