*&---------------------------------------------------------------------*
*& Report ZOSD0022 *
*& *
*&---------------------------------------------------------------------*
*& Date: 2008-06-19
*& Author: vista
*& Description: Display report for Broadcom EDI
*& Request: DEVK924850 [DS080608]
*-----------------------------------------------------------------------
* Change History:
* ===============
* Task# Date By Description
* DS080608 2008.11.14 wei_zhu 1.For lot number field remove all
* character that include and after “$” sign
* 2.Add logic to check if the lot number
* has been transacted before. If already
* remove from report.
* Transport Request :DEVK925259
*-----------------------------------------------------------------------
REPORT ZOSD0022 .
TABLES: VBAK,VBAP,AUFK,SYST.
TYPE-POOLS: SLIS.
DATA: C_VENDOR_CODE(20) TYPE C.
DATA: BEGIN OF ITAB OCCURS 0,
FILE(6) TYPE C,
FILE1(6) TYPE C , "Trading partner's contact person
FILE2(23) TYPE C, "Trading partner's email (vendor code)
FILE3(12) TYPE C, "Trading partner's fax (Start run program time)
FILE4(13) TYPE C, "Trading partner's contact number
FILE5(13) TYPE C, "Information Sender
FILE6(33) TYPE C, "Trading partner's DUNS( LOT NUMBER)
FILE7(5) TYPE C, "NA
FILE8(5) TYPE C, "Contract Manufacturer
FILE9(5) TYPE C, "NA
FILE10(13) TYPE C, "create date of report
FILE11(23) TYPE C, "YYYYMMDDTHHMMSS_BOM
FILE12(13) TYPE C, "Broacom contact Person
FILE13(13) TYPE C, "Broadcom Contact Person email
FILE14(13) TYPE C, "Broadcom Contact Person fax
FILE15(13) TYPE C, "Broadcom Contact number
FILE16(13) TYPE C, "Information Receiver
FILE17(13) TYPE C, "Broadcom DUNS
FILE18(13) TYPE C, "Manufacturer
END OF ITAB.
DATA: BEGIN OF TIMI OCCURS 0,
PO_NUMBER(15) TYPE C,
LOT_NUMBER(30) TYPE C,
END OF TIMI.
DATA: BEGIN OF T_CODE OCCURS 0,
MFGORDERNAME(30),
C_VENDOR_CODE(20) TYPE C,
END OF T_CODE.
DATA: G_SVFILE LIKE RLGRAP-FILENAME.
DATA:G_FLAG.
DATA: FILENAME(33) TYPE C.
DATA: DATE1(25) TYPE C.
DATA: DATE2(30) TYPE C.
DATA: DATE(12) TYPE C.
CONCATENATE '"' SY-DATUM 'Z' '"' ',' INTO DATE.
CONCATENATE '"' SY-DATUM 'T' SY-UZEIT '.000Z' '"' ',' INTO DATE1.
CONCATENATE '"' SY-DATUM 'T' SY-UZEIT '_BOM' '_ASAT' '"' ',' INTO DATE2.
*&---------------------------------------------------------------------*
*& S E L E C T I O N S C R E E N *
*&---------------------------------------------------------------------*
SELECT-OPTIONS: P_WERKS FOR VBAP-WERKS NO-DISPLAY DEFAULT '3100'.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000.
PARAMETERS: P_BUDAT LIKE MKPF-BUDAT DEFAULT SY-DATUM,
P_TIME LIKE SY-UZEIT DEFAULT '001500'.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_BUDAT1 LIKE MKPF-BUDAT DEFAULT SY-DATUM,
P_TIME1 LIKE SY-UZEIT DEFAULT '001500'.
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_SVPATH LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK B3.
*----------------------------------------------------------------------*
* Macro Definition *
*----------------------------------------------------------------------*
* Get SQL Query result
DEFINE IMI_FETCH_DATA.
TRY.
EXEC SQL.
FETCH NEXT &3 INTO :&1
ENDEXEC.
CATCH CX_SY_NATIVE_SQL_ERROR.
&2 = '99'.
ENDTRY.
IF &2 NE 99.
&2 = SY-SUBRC.
ENDIF.
END-OF-DEFINITION.
* Close SQL Cursor
DEFINE IMI_CLOSE_CURSOR.
TRY.
EXEC SQL.
CLOSE &1
ENDEXEC.
CATCH CX_SY_NATIVE_SQL_ERROR.
&2 = '99'.
ENDTRY.
IF &2 NE 99.
&2 = SY-SUBRC.
ENDIF.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
*----------------------------------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM GETDATA.
PERFORM CHECK_VENDOR_CODE.
END-OF-SELECTION.
LOOP AT ITAB.
FILENAME = ITAB-FILE6.
REPLACE '"' IN FILENAME WITH ''.
REPLACE ',' IN FILENAME WITH ''.
REPLACE '"' IN FILENAME WITH ''.
CONDENSE FILENAME.
PERFORM DOWNLOAD_FILE_TO_SERVER1 USING P_SVPATH.
ENDLOOP.
*----------------------------------------------------------------------*
* END-OF-SELECTION *
*----------------------------------------------------------------------*
*&--------------------------------------------------------------------*
*& Form Getdata
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM GETDATA.
PERFORM GET_IMI_INFO.
PERFORM GET_VENDOR_CODE.
ENDFORM. "GETDATA
*&--------------------------------------------------------------------*
*& Form GET_MES_WIP_INFO
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM GET_IMI_INFO.
DATA: L_DBCONNAME LIKE DBCON-CON_NAME.
DATA: L_AUFNR LIKE AUFK-AUFNR.
DATA: L_SUBRC LIKE SY-SUBRC.
DATA: L_DBOPEN LIKE SY-SUBRC.
DATA: L_DBCON(10) VALUE 'HKIMI_DG'.
MOVE L_DBCON TO L_DBCONNAME.
PERFORM CHECK_DBCON USING P_WERKS-LOW
CHANGING L_DBCONNAME
L_SUBRC.
PERFORM CONNECT_DBCON USING L_DBCONNAME
CHANGING L_SUBRC.
L_DBOPEN = L_SUBRC.
IF L_DBOPEN = 0.
* Retrieve info for Po Number in IMI
CLEAR L_SUBRC.
L_AUFNR = TIMI-PO_NUMBER.
SHIFT L_AUFNR LEFT DELETING LEADING '0'.
PERFORM IMI_DATA USING L_AUFNR
CHANGING L_SUBRC.
DO.
CLEAR TIMI.
IMI_FETCH_DATA TIMI L_SUBRC C11A.
IF L_SUBRC = 0.
APPEND TIMI.
ELSE.
EXIT.
ENDIF.
ENDDO.
IMI_CLOSE_CURSOR C11A L_SUBRC.
* Disconnect from IMI database
PERFORM DISCONNECT_DBCON USING L_DBCONNAME
CHANGING L_SUBRC.
ENDIF.
ENDFORM. "GET_MES_WIP_INFO
*&--------------------------------------------------------------------*
*& Form CHECK_DBCON
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_PLANT text
* -->P_DBCONNAMEtext
* -->P_SUBRC text
*---------------------------------------------------------------------*
FORM CHECK_DBCON USING P_PLANT
CHANGING P_DBCONNAME
P_SUBRC.
TABLES:DBCON.
CLEAR DBCON.
SELECT SINGLE * FROM DBCON
WHERE CON_NAME = P_DBCONNAME.
IF SY-SUBRC NE 0.
MESSAGE E398(00)
WITH 'DB Connection ' P_DBCONNAME
'has not been set up.'
'Please check table DBCON.'.
P_SUBRC = SY-SUBRC.
CLEAR P_DBCONNAME.
ELSE.
P_SUBRC = SY-SUBRC.
ENDIF.
ENDFORM. " check_dbcon
*&--------------------------------------------------------------------*
*& Form CONNECT_DBCON
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->P_DBCONNAMEtext
* -->P_SUBRC text
*---------------------------------------------------------------------*
FORM CONNECT_DBCON USING P_DBCONNAME LIKE DBCON-CON_NAME
CHANGING P_SUBRC.
TRY.
EXEC SQL.
CONNECT TO :p_dbconname
ENDEXEC.
EXEC SQL.
SET CONNECTION :p_dbconname
ENDEXEC.
CATCH CX_SY_NATIVE_SQL_ERROR.
P_SUBRC = '99'.
ENDTRY.
ENDFORM. " connect_dbcon
*&--------------------------------------------------------------------*
*& Form IMI_DATA
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->L_AUFNR text
* -->L_SUBRC text
*---------------------------------------------------------------------*
FORM IMI_DATA USING L_AUFNR
CHANGING P_SUBRC.
* DATA:L_DATE_TIME(28) TYPE C.
*
* DATA: L_DATE(10),
* L_TIME1 TYPE T,
* L_TIME2(8).
* CONCATENATE P_BUDAT(4) '-' P_BUDAT+4(2) '-' P_BUDAT+6(2) INTO L_DATE
*.
* L_TIME1 = SY-UZEIT - P_TIME.
* CONCATENATE L_TIME1(2) ':' L_TIME1+2(2) ':' L_TIME1+4(2) INTO L_TIME2
*.
* CONCATENATE L_DATE L_TIME2 INTO L_DATE_TIME SEPARATED BY SPACE.
*Start vista "DEVK925074
DATA: L_FROM_DATE(19),
L_END_DATE(19),
L_DATE1(10),
L_TIME1(8),
L_DATE2(10),
L_TIME2(8).
CONCATENATE P_BUDAT(4) '-' P_BUDAT+4(2) '-' P_BUDAT+6(2) INTO L_DATE1.
CONCATENATE P_TIME(2) ':' P_TIME+2(2) ':' P_TIME+4(2) INTO L_TIME1.
CONCATENATE L_DATE1 L_TIME1 INTO L_FROM_DATE SEPARATED BY SPACE.
CONCATENATE P_BUDAT1(4) '-' P_BUDAT1+4(2) '-' P_BUDAT1+6(2) INTO
L_DATE2.
CONCATENATE P_TIME1(2) ':' P_TIME1+2(2) ':' P_TIME1+4(2) INTO L_TIME2.
CONCATENATE L_DATE2 L_TIME2 INTO L_END_DATE SEPARATED BY SPACE.
*End vista "DEVK925074
CLEAR P_SUBRC.
TRY.
EXEC SQL.
OPEN C11A FOR
*DEVK925259 -->
* select distinct mfgorder, lot from SpecialInfo
* where customer='10030'
* and lastupdate between :L_FROM_DATE
* and :L_END_DATE
*DEVK925259 <--
select distinct mfgorder, Lot=Case charindex('$',lot)
when 0 then
lot
else
substring(lot,0,charindex('$',lot))
end
from SpecialInfo
where customer='10030'
and lastupdate between :L_FROM_DATE and :L_END_DATE
and lot not in
(select distinct lot=Case charindex('$',lot)
when 0 then
lot
else
substring(lot,0,charindex('$',lot))
end
from SpecialInfo
where customer='10030'
and lastupdate < :L_FROM_DATE """(變量前必須加 : 號)
and lot<>'')
ENDEXEC.
P_SUBRC = SY-SUBRC.
CATCH CX_SY_NATIVE_SQL_ERROR.
P_SUBRC = '99'.
ENDTRY.
ENDFORM. "CONNECT_DBCON
*&---------------------------------------------------------------------*
*& Form DISCONNECT_DBCON
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_DBCONNAME text
* <--P_L_SUBRC text
*----------------------------------------------------------------------*
FORM DISCONNECT_DBCON USING P_DBCONNAME LIKE DBCON-CON_NAME
CHANGING P_SUBRC.
TRY.
EXEC SQL.
DISCONNECT :p_dbconname
ENDEXEC.
CATCH CX_SY_NATIVE_SQL_ERROR.
P_SUBRC = '99'.
ENDTRY.
ENDFORM. " connect_dbcon
*&--------------------------------------------------------------------*
*& Form GET_VENDOR_CODE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM GET_VENDOR_CODE.
DATA: L_DBCONNAME LIKE DBCON-CON_NAME.
DATA: L_AUFNR LIKE AUFK-AUFNR.
DATA: L_SUBRC LIKE SY-SUBRC.
DATA: L_DBOPEN LIKE SY-SUBRC.
DATA: L_DBCON(10) VALUE 'DGMDDB'.
MOVE L_DBCON TO L_DBCONNAME.
PERFORM CHECK_DBCON USING P_WERKS-LOW
CHANGING L_DBCONNAME
L_SUBRC.
PERFORM CONNECT_DBCON USING L_DBCONNAME
CHANGING L_SUBRC.
L_DBOPEN = L_SUBRC.
IF L_DBOPEN = 0.
* RETRIEVE INFO FOR Vendor Code IN MES
LOOP AT TIMI.
L_AUFNR = TIMI-PO_NUMBER.
SHIFT L_AUFNR LEFT DELETING LEADING '0'.
CLEAR L_SUBRC.
PERFORM MES_GET_VENDOR_CODE USING L_AUFNR
CHANGING L_SUBRC.
DO.
CLEAR T_CODE.
IMI_FETCH_DATA T_CODE L_SUBRC C11A.
IF L_SUBRC = 0.
APPEND T_CODE.
ELSE.
EXIT.
ENDIF.
ENDDO.
IMI_CLOSE_CURSOR C11A L_SUBRC.
ENDLOOP.
* Disconnect from IMI database
PERFORM DISCONNECT_DBCON USING L_DBCONNAME
CHANGING L_SUBRC.
ENDIF.
ENDFORM. "GET_VENDOR_CODE
*&--------------------------------------------------------------------*
*& Form MES_GET_VENDOR_CODE
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->L_AUFNR text
* -->L_SUBRC text
*---------------------------------------------------------------------*
FORM MES_GET_VENDOR_CODE USING L_AUFNR
CHANGING P_SUBRC.
CLEAR P_SUBRC.
TRY.
EXEC SQL.
OPEN C11A FOR
SELECT distinct MfgOrder.mfgordername,
isnull(MaterialVendorCode.Description,'') as SubstrateVendorCode
FROM MfgOrderMaterialListItem with(nolock)
LEFT OUTER JOIN MfgOrder with(nolock) ON
MfgOrderMaterialListItem.mfgorderid = MfgOrder.mfgorderid
LEFT OUTER JOIN ProductBase with(nolock) ON
MfgOrderMaterialListItem.ProductBaseId = ProductBase.ProductBaseId
LEFT OUTER JOIN Product with(nolock) ON
MfgOrderMaterialListItem.ProductBaseId = Product.ProductBaseId
LEFT OUTER JOIN ProductType with(nolock) ON
Product.ProductTypeId = ProductType.ProductTypeId
LEFT OUTER JOIN MaterialVendorCode with(nolock) on
MfgOrderMaterialListItem.vendorname =
MaterialVendorCode.MaterialVendorCodeName
WHERE MfgOrder.MfgOrderName= :L_AUFNR """(變量前必須加 : 號)
and ProductTypeName = 'SUBS'
ENDEXEC.
P_SUBRC = SY-SUBRC.
CATCH CX_SY_NATIVE_SQL_ERROR.
P_SUBRC = '99'.
ENDTRY.
ENDFORM. "MES_GET_VENDOR_CODE
*&--------------------------------------------------------------------*
*& Form check_vendor_code
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM CHECK_VENDOR_CODE.
LOOP AT T_CODE.
* ITAB-FILE2 = T_CODE-C_VENDOR_CODE.
CONCATENATE '"' T_CODE-C_VENDOR_CODE '"' ',' INTO ITAB-FILE2.
READ TABLE TIMI WITH KEY PO_NUMBER = T_CODE-MFGORDERNAME.
IF SY-SUBRC = 0.
CONCATENATE '"' TIMI-LOT_NUMBER '"' ',' INTO ITAB-FILE6.
ENDIF.
ITAB-FILE = 'DET,'.
ITAB-FILE1 = '"Add",'.
ITAB-FILE3 = DATE.
ITAB-FILE4 = '"Substrate",'.
ITAB-FILE5 = '"Add",'.
ITAB-FILE7 = '"NA"'.
APPEND ITAB.
CLEAR ITAB.
ENDLOOP.
READ TABLE ITAB WITH KEY FILE2 = ''.
IF SY-SUBRC = 0.
G_FLAG = 'X'.
ENDIF.
ENDFORM. "check_vendor_code
*&--------------------------------------------------------------------*
*& Form DOWNLOAD_FILE_TO_SERVER
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM DOWNLOAD_FILE_TO_SERVER1 USING P_SVPATH.
FIELD-SYMBOLS: <FS>.
DATA: L_FIELD(200) TYPE C,
L_STRING(3000) TYPE C.
DATA:P_SUBRC LIKE SY-SUBRC.
P_SUBRC = 1.
TRY.
CONCATENATE P_SVPATH FILENAME '_' SY-DATUM SY-UZEIT '.CSV'
* 'ZOSD0022_VenCode' SY-DATUM SY-UZEIT '.CSV'
INTO G_SVFILE.
OPEN DATASET G_SVFILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF SY-SUBRC = 0.
CONCATENATE 'HDR,'
'"Jenny Nip",'
'"[email protected]",'
'"86-769-85642129",'
'"86-769-85647788",'
'"Information Sender",'
'"197051014",'
'"Semiconductor Manufacturing",'
'"Contract Manufacturer",'
'"NA",'
* 'create date of report(YYYYMMDDZ)'
* '(YYYYMMDDTHHMMSS_BOM)'
DATE1
DATE2
'"BC Lee",'
'"[email protected]",'
'"65-6668-4715",'
'"65-6668-4877",'
'"Information Receiver",'
'"799870605",'
'"Manufacturer"'
INTO L_STRING.
* SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
TRANSFER L_STRING TO G_SVFILE.
* LOOP AT ITAB WHERE FILE2 <> ''.
CLEAR L_STRING.
DO.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE ITAB TO <FS>.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
WRITE <FS> TO L_FIELD.
CONDENSE L_FIELD.
IF SY-INDEX = 1.
L_STRING = L_FIELD.
ELSE.
CONCATENATE L_STRING L_FIELD INTO L_STRING.
* SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
ENDIF.
ENDDO.
TRANSFER L_STRING TO G_SVFILE.
* ENDLOOP.
CLOSE DATASET G_SVFILE.
WRITE:/ 'Export is successful.'.
WRITE:/ 'Temporary file created on server:', G_SVFILE.
P_SUBRC = 0.
ELSE.
WRITE:/ 'Export is failed.'.
ENDIF.
CATCH CX_ROOT.
WRITE:/ 'Temporary file writing error on server.'.
ENDTRY.
ENDFORM. "DOWNLOAD_FILE_TO_SERVER