์์ง ํ์ดํ๋ผ์ธ โ 3์ด ์์ ์กฐ๋ฆฝ
์ญํ : ๊ฐ๋
๋์ ๋ ์: ์ด์ ๋ด๋น ยท ๋ถ์๊ฐ ยท ๊ฐ๋ฐ์
์ ํ ์กฐ๊ฑด: ์ํคํ ์ฒ ๋จผ์ ์ฝ๊ธฐ ๊ถ์ฅ
๐บ ๊ด๊ณ๋ ๋ฐ๋ก ๊ฐ๊ธฐ โ ย ยทย ์ด ํ์ด์ง๋ SQLยท์ปฌ๋ผ ๊ธฐ์ค. 6ํ ์ด๋ธ ์๋ธ๊ทธ๋ํ ํ์์ ๊ด๊ณ๋ ํ์ด์ง ํ ํ๋ฉด์์.
MSSQL RTEGMS_BARCODE_UNION ์ dbo.SP_SUPPLY_REPORT ์ ์ฅ ํ๋ก์์ ๊ฐ ๊ณต๊ธ๋ด์ญ๋ณด๊ณ ์์ง 3์ด ์์
์ ๋ง๋๋ ๊ณผ์ . ์ด ํ์ด์ง๋ โB์ด ์ผ๋ จ๋ฒํธโยทโC์ด ๋ฌถ์๋ฒํธโ ๊ฐ ์ด๋์์ ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๋์ง์ ์ง์คํ๋ค.
์์คํ ๊ฒฝ๊ณยท์ธ๋ถ ์ฐ๊ฒฐยทํต๊ณ๋ ์ํคํ ์ฒ ์ฐธ๊ณ .
TL;DR
SP_SUPPLY_REPORT @GUBUN='S'ํธ์ถ ํ ๋ฒ์ ์ค์๊ฐ SELECT ๋ก ์กฐ๋ฆฝ. ๊ฒฐ๊ณผ๋ ์ด๋์๋ ์ ์ฅ๋์ง ์๋๋ค.- A์ด =
ROW_NO, B์ด =BARCODE์์SUBSTRING, C์ด = ๋ ํฌ์ฅ ํ ์ด๋ธ์MAPPING_GS1_BARCODECASE ์กฐ๋ฆฝ, D/E์ด = ๋น ๋ฌธ์์ด. - ์ฌ๋ฃ ํ ์ด๋ธ 5๊ฐ + ๊ฐ์ง ์ฌ๋ณธ 1๊ฐ = ์ด 6๊ฐ ํ ์ด๋ธ์ JOIN. ๋ค๋ฅธ ์บ์ ๊ฒฝ๋ก๋ ์์.
๐ โถ ์์ง ์๋ธ๊ทธ๋ํ ํ ํ๋ฉด ์ด๊ธฐ โ ยท ๊ด๊ณ๋ ํ๋ธ ยท ์ฐธ์กฐ ํ ์ด๋ธ ์์ธ
์ฝ๋ ๋ฒ
- ๋ ธ๋ ์: 14 (SP ๊ฐ ์ง์ ์ฐธ์กฐํ๋ 6 + ์ฃผ๋ณ ํ๋ธ 7 + Oracle ์์ฒ 1).
- ์ฃ์ง: ์ค์ 14 (FK 5 ยท Strong 5 ยท Weak 4) โ ์ค์ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ๋ ผ๋ฆฌ ์ฐ๊ฒฐ ๋ชจ๋ ํฌํจ.
- ์นดํ ๊ณ ๋ฆฌ ์: ๊ฐ์ฌ(_AT)ยท๋ฐฑ์ ์ฑ๊ฒฉ ๋ ธ๋๋ ์ฐํ ํค, ์ธ๋ถ(Oracle) ๋ ์ธ๊ณฝ ์ ์ ๋๋. ๋๋จธ์ง๋ ๊ณตํต ํค.
ํต์ฌ ํ๋ธ
GD_ITEM_ISSUEโ ์ถ๊ณ ํค๋.ITEM_ISSUE_ID๋ก HISTORYยทRETURN_GOODS ์ 1:N,DESPATCH_ORDER_NO๋กGD_CUST_ISSUE์ ํ์ .GD_ITEM_ISSUE_HISTORYโ ๋ฑ๊ฐ BARCODE ๋ณด๊ด.MARKING_ORDER.PUBLISH_GS1_128์์ ๋ฐํ๋ ๊ฐ์ด ๋ณต์ฌ๋จ.GD_PACKING_RESULT_ITEMโGD_PACKING_RESULT_PACKโ ๋ฑ๊ฐโ์ค๋ฐ์คโ๋๋ฐ์ค SSCC ์ฒด์ธ,ITEM_STOCK_ID๋กGD_ITEM_STOCK๊ณต์ .SUPPLY_REPORTโ ๊ฐ์ง 21์ด ๋ก์ปฌ ์ฌ๋ณธ(OracleOPENQUERY๋ณต์ ).
1. 3์ด ์์ ์ด ๋งคํ
| ์ด | ์ด๋ฆ | ์กฐ๋ฆฝ ๊ท์น | ์์ฒ ์ปฌ๋ผ |
|---|---|---|---|
| A | ์ฐ๋ฒ | AA.ROW_NO | SUPPLY_REPORT.ROW_NO |
| B | ์ผ๋ จ๋ฒํธ | BARCODE ์์ '21' ๋ค 20์๋ฆฌ SUBSTRING | GD_ITEM_ISSUE_HISTORY.BARCODE ยท RETURN_GOODS.BARCODE |
| C | ๋ฌถ์๋ฒํธ | (00)x[/(00)y] ๋๋ (01)g(21)s[/(01)g(21)s] | GD_PACKING_RESULT_ITEM.MAPPING_GS1_BARCODE ยท GD_PACKING_RESULT_PACK.MAPPING_GS1_BARCODE |
| D | RFID tag ์ฝ๋ | '' ๊ณ ์ | โ |
| E | ๋น๊ณ | '' ๊ณ ์ | โ |
2. ์ฐธ์กฐ ํ ์ด๋ธ 6๊ฐ + FK
MARKING_ORDER.PUBLISH_GS1_128 โโ(๋ณต์ฌ)โโโถ GD_ITEM_ISSUE_HISTORY.BARCODE
โ ITEM_ISSUE_ID (FK)
โผ
GD_ITEM_ISSUE (์ถ๊ณ ํค๋)
โ ๋๋ RETURN_GOODS (๋ฐํ, ๊ฐ์ FK)
โ
BARCODE = GS1_BOX_BARCODE_NO โ
โผ โ
GD_PACKING_RESULT_ITEM โโ MAPPING_GS1_BARCODE โโถ GD_PACKING_RESULT_PACK
(๋ฑ๊ฐโ์ค๋ฐ์ค) (์ค๋ฐ์คโ๋๋ฐ์ค, ๊ฐ์ SSCC ์ฒด์ธ)
SUPPLY_REPORT (๊ฐ์ง ์ฌ๋ณธ) โโ ORDER_NO/ORDER_SEQ ๋ก GD_ITEM_ISSUE ์ ์กฐ์ธSUPPLY_REPORT๋ง SP ๊ฐINSERTํ๋ค (๊ฐ์ง 21์ด ์ ์ฅ). ๋๋จธ์ง 5๊ฐ๋ SELECT ์ ์ฉ.- ๋ฑ๊ฐ BARCODE ์ ๋ฐํ ์์ฒ์
MARKING_ORDER.PUBLISH_GS1_128โ ๋ฐํ ํ ์ถ๊ณ ์GD_ITEM_ISSUE_HISTORY.BARCODE๋ก ๋ณต์ฌ๋๋ฉฐ ๋ ์ปฌ๋ผ ๊ฐ์ ์ค์ธก์ ๋ฌธ์์ด ๋์ผ.
3. ํ๋ก์์ ์๊ทธ๋์ฒ
EXEC dbo.SP_SUPPLY_REPORT
@GUBUN nvarchar(20), -- 'ERP' = ๊ฐ์ง ๋ณต์ , 'S' = ์์ง ์กฐํ
@search_date nvarchar(20), -- DELIV_DATE, 'YYYYMMDD'
@message nvarchar(1000) OUTPUT;4. ํต์ฌ SQL
4-1. ๊ฐ์ง ๋ณต์ โ @GUBUN='ERP' (๋ณธ๋ฌธ 63~77ํ)
-- Oracle UNION_ERP.SUPPLY_REPORT 21์ด โ MSSQL dbo.SUPPLY_REPORT ๋ก ๋ ์ง ๋จ์ ๋ณต์
EXEC ('INSERT INTO #SUPPLY_REPORT_TEMP (...) SELECT ..., SALES_CODE AS CUST_CD, ITEM_CODE AS ITEM_CD
FROM OPENQUERY(UNION_ERP, ''SELECT ROW_NUMBER() OVER (ORDER BY ORDER_NO,ORDER_SEQ) AS ROW_NO,
SUPPLIER_BISNO, ..., SALES_CODE, ITEM_CODE
FROM SUPPLY_REPORT WHERE DELIV_DATE = <search_date>'')')
DELETE SUPPLY_REPORT WHERE DELIV_DATE = @search_date
INSERT INTO SUPPLY_REPORT SELECT * FROM #SUPPLY_REPORT_TEMP4-2. ์์ง ์กฐ๋ฆฝ โ @GUBUN='S' (๋ณธ๋ฌธ 207~235ํ)
SELECT
AA.ROW_NO, -- A
RTRIM(SUBSTRING(BB.BARCODE, CHARINDEX('21', BB.BARCODE)+3, 20)) -- B
AS SERIAL_NO,
CASE WHEN SUBSTRING(CC.MAPPING_GS1_BARCODE,1,2)='00' THEN -- C
'(00)'+SUBSTRING(CC.MAPPING_GS1_BARCODE,3,18)
+ CASE WHEN ISNULL(DD.MAPPING_GS1_BARCODE,'')='' THEN ''
ELSE '/(00)'+SUBSTRING(DD.MAPPING_GS1_BARCODE,3,18) END
WHEN SUBSTRING(CC.MAPPING_GS1_BARCODE,1,2)='01' THEN
'(01)'+SUBSTRING(CC.MAPPING_GS1_BARCODE,3,14)
+'(21)'+SUBSTRING(CC.MAPPING_GS1_BARCODE,19,LEN(CC.MAPPING_GS1_BARCODE)-18)
+ CASE WHEN ISNULL(DD.MAPPING_GS1_BARCODE,'')='' THEN ''
ELSE '/(01)'+SUBSTRING(DD.MAPPING_GS1_BARCODE,3,14)
+'(21)'+SUBSTRING(DD.MAPPING_GS1_BARCODE,19,LEN(DD.MAPPING_GS1_BARCODE)-18) END
END AS PACKING_NO,
'' AS RFID_CODE, '' AS REMARK,
BB.DESPATCH_ORDER_NO, BB.ORDER_SEQ
FROM SUPPLY_REPORT AA
INNER JOIN (
SELECT DESPATCH_ORDER_NO, ORDER_SEQ, BARCODE
FROM GD_ITEM_ISSUE A INNER JOIN GD_ITEM_ISSUE_HISTORY B ON A.ITEM_ISSUE_ID=B.ITEM_ISSUE_ID
WHERE B.BARCODE LIKE '%21%'
UNION ALL
SELECT DESPATCH_ORDER_NO, ORDER_SEQ, BARCODE
FROM GD_ITEM_ISSUE A INNER JOIN RETURN_GOODS B ON A.ITEM_ISSUE_ID=B.ITEM_ISSUE_ID
WHERE B.BARCODE LIKE '%21%'
) BB ON AA.ORDER_NO=BB.DESPATCH_ORDER_NO AND AA.ORDER_SEQ=BB.ORDER_SEQ
LEFT JOIN GD_PACKING_RESULT_ITEM CC ON BB.BARCODE = CC.GS1_BOX_BARCODE_NO
LEFT JOIN GD_PACKING_RESULT_PACK DD ON CC.MAPPING_GS1_BARCODE = DD.GS1_BOX_BARCODE_NO
WHERE AA.DELIV_DATE = @search_date
ORDER BY ROW_NO์ฝ๋ ๋ฒ
BARCODE LIKE '%21%': GS1-128 AI(21) SN ํฌํจ ๋ฑ๊ฐ๋ง. ์ค์ธก 20๋ง ์ํ ์ผ์น์จ 99.9% (์์ GTIN-13 170๊ฑด๋ง ์ ์ธ โ ์ด ๊ฒฝ์ฐ SN ์๋ ๋ ๊ฑฐ์).- B์ด SN:
'21'์์น +3 ๋ถํฐ 20์๋ฆฌ (FNC1\x1D๊ตฌ๋ถ์ ๋ค). - C์ด ๋ฌถ์๋ฒํธ: CC prefix
00โ(00)x[/(00)y](SSCC ํฌ๋งท),01โ(01)g(21)s[/(01)g(21)s](GTIN+SN). DD NULL ์ด๋ฉด/์์ด 1๋จ.
5. ์ ์ฅ ์ฌ๋ถ ยท ์ฑ๋ฅ
| ๋ฐ์ดํฐ | MSSQL ์ ์ฅ | ๋น๊ณ |
|---|---|---|
| ๊ฐ์ง 21์ด | O โ SUPPLY_REPORT | Oracle ๋ณต์ ๋ณธ, ๋ ์ง ๋จ์ DELETE+INSERT |
| ์์ง AยทBยทC์ด | X | @GUBUN='S' ํธ์ถ๋ง๋ค SELECT ๋ก ์ค์๊ฐ ์กฐ๋ฆฝ |
| ๋ฑ๊ฐ BARCODE | O โ GD_ITEM_ISSUE_HISTORY / RETURN_GOODS | ๋ฐํ ์์ฒ MARKING_ORDER.PUBLISH_GS1_128 |
| ๋ฐ์ค ๋งคํ | O โ GD_PACKING_RESULT_ITEM/PACK | MAPPING_GS1_BARCODE ์ฒด์ธ |
์ฌ์กฐํ๊ฐ ๋น ๋ฅธ ์ด์ ๋ ๊ฐ์ง ์ฌ๋ณธ์ด MSSQL ์ ์ด๋ฏธ ์๊ธฐ ๋๋ฌธ. ์์ง ์กฐ๋ฆฝ์ ์ ๊ทยท์ฌ์กฐํ ๋ชจ๋ ๋์ผํ๊ฒ ์ค์๊ฐ ์ํ.
6. ์ค ์ํ (2026-04-23 ์ค์ธก)
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์ ํ๋ฒํธ | 20260423-0039 |
| ๊ฑฐ๋ ๊ตฌ๋ถ | 11 (์ ์๋งค์ถ โ common.GD301) |
ITEM_ISSUE_ID | 892220 |
| ๋ฑ๊ฐ BARCODE | 010880665502133717290111102603\x1D212603000000007249 |
| GTIN(01) / EXP(17) / LOT(10) / SN(21) | 08806655021337 / 290111 / 2603 / 2603000000007249 |
์ค๋ฐ์ค SSCC (CC.MAPPING_GS1_BARCODE) | 00188066550010319025 |
๋๋ฐ์ค SSCC (DD.MAPPING_GS1_BARCODE) | 00288066550000362441 |
| ์์ง B์ด | 2603000000007249 |
| ์์ง C์ด | (00)188066550010319025/(00)288066550000362441 |
์ฌํ SQL
EXEC dbo.SP_SUPPLY_REPORT @GUBUN='S', @search_date='20260423', @message=NULL;
-- ๋ฑ๊ฐ BARCODE ํ๋๋ก ๋ฐ์ค ์ฒด์ธ ์ญ์ถ์
DECLARE @bc nvarchar(300) =
'010880665502133717290111102603' + CHAR(29) + '212603000000007249';
SELECT
LEFT(ci.MAPPING_GS1_BARCODE,30) AS ์ค๋ฐ์ค_SSCC,
ci.MAPPING_BOX_TYPE AS ์ค๋ฐ์ค_TYPE,
pk.BOX_TYPE AS ์ค๋ฐ์ค_์์ _TYPE,
LEFT(pk.MAPPING_GS1_BARCODE,30) AS ๋๋ฐ์ค_SSCC,
pk.MAPPING_BOX_TYPE AS ๋๋ฐ์ค_TYPE
FROM dbo.GD_PACKING_RESULT_ITEM ci
LEFT JOIN dbo.GD_PACKING_RESULT_PACK pk
ON pk.GS1_BOX_BARCODE_NO = ci.MAPPING_GS1_BARCODE
WHERE ci.GS1_BOX_BARCODE_NO = @bc;๊ทผ๊ฑฐ: dbo.SP_SUPPLY_REPORT ๋ณธ๋ฌธ + DMV ์ฐธ์กฐ ๋ชฉ๋ก + FK + ๋ฐ์ฝ๋ ํฌ๋งท 20๋ง ์ํ + ์ค ์ํ 1๊ฑด (2026-04-23).
๊ด๋ จ ๋ฌธ์
๊ฒ์ ํค์๋: ์์ง ํ์ดํ๋ผ์ธ, supply report, pipeline, ์กฐ๋ฆฝ, assembly, SP_SUPPLY_REPORT, ๋ฌถ์๋ฒํธ, PACKING_NO