*----------------------------------------------------------------------*
* INCLUDE ZBDCINCL *
*----------------------------------------------------------------------*
TABLES: USR01, *USR01, "User master record (runtime data
USR02, *USR02. "Logon data
DATA: BEGIN OF BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA: BDCMSGE LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE."BC message
DATA: BEGIN OF LEN, "data length type
N2(4) TYPE C VALUE 'N2', "2 bytes numeric
N3(4) TYPE C VALUE 'N3', "3 bytes numeric
N4(4) TYPE C VALUE 'N4', "4 bytes numeric
N5(5) TYPE C VALUE 'N5', "5 bytes numeric
N6(4) TYPE C VALUE 'N6', "6 bytes numeric
N8(4) TYPE C VALUE 'N8', "8 bytes numeric
N10(4) TYPE C VALUE 'N10', "10 bytes numeric
C4(4) TYPE C VALUE 'C4', "4 bytes char
C8(4) TYPE C VALUE 'C8', "8 bytes char
C10(4) TYPE C VALUE 'C10', "10 bytes char
C20(4) TYPE C VALUE 'C20', "20 bytes char
C50(4) TYPE C VALUE 'C50', "50 bytes char
END OF LEN.
DATA: BEGIN OF WAERS, "currency key
TWD(3) TYPE C VALUE 'TWD',
USD(3) TYPE C VALUE 'USD',
END OF WAERS.
DATA: BEGIN OF S_UINFO,
BNAME LIKE USR01-BNAME,
DATFM LIKE USR01-DATFM,
DCPFM LIKE USR01-DCPFM,
END OF S_UINFO.
DEFINE MAKE_NUMC.
MOVE FVAL TO BDCDATA-FVAL(&1).
SHIFT BDCDATA-FVAL(&1) RIGHT DELETING TRAILING ' '.
TRANSLATE BDCDATA-FVAL(&1) USING ' 0'.
END-OF-DEFINITION.
*
DEFINE MAKE_CHAR.
MOVE FVAL TO BDCDATA-FVAL(&1).
END-OF-DEFINITION.
*
DEFINE MAKE_WAERS.
WRITE FVAL TO BDCDATA-FVAL LEFT-JUSTIFIED
CURRENCY &1.
END-OF-DEFINITION.
*----------------------------------------------------------------------*
* end batchinput session *
*----------------------------------------------------------------------*
FORM CLOSE_GROUP.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.
*----------------------------------------------------------------------*
* Start new transaction *
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = TCODE
* POST_LOCAL = NOVBLOCAL
* PRINTING = NOPRINT
TABLES
DYNPROTAB = BDCDATA
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
ENDFORM.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL P_IND.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
* bdcdata-fval = fval.
CASE P_IND. "process data via different method....
WHEN 'P'.
WRITE FVAL TO BDCDATA-FVAL LEFT-JUSTIFIED.
WHEN 'N'.
WRITE FVAL TO BDCDATA-FVAL LEFT-JUSTIFIED.
WHEN 'D'. "Convert date format for user
IF NOT FVAL IS INITIAL.
PERFORM BDC_DATE USING FVAL BDCDATA-FVAL.
ENDIF.
WHEN 'L'. "move to left
MOVE FVAL TO BDCDATA-FVAL.
SHIFT BDCDATA-FVAL LEFT DELETING LEADING ' '.
WHEN 'M'. "For material, Inventec only 12 character
WRITE FVAL TO BDCDATA-FVAL LEFT-JUSTIFIED.
IF BDCDATA-FVAL(6) = '000000'.
SHIFT BDCDATA-FVAL LEFT BY 6 PLACES.
ENDIF.
WHEN LEN-N2. "Convert number to 2 byte
MAKE_NUMC 2.
WHEN LEN-N3. "Convert number to 3 byte
MAKE_NUMC 3.
WHEN LEN-N4. "Convert number to 4 byte
MAKE_NUMC 4.
WHEN LEN-N6. "Convert number to 6 byte
MAKE_NUMC 6.
WHEN LEN-N8. "Convert number to 8 byte
MAKE_NUMC 8.
WHEN LEN-N10. "Convert number to 10 byte
MAKE_NUMC 10.
WHEN LEN-C4. "Convert text to 4 byte
MAKE_CHAR 4.
WHEN LEN-C8. "Convert text to 8 byte
MAKE_CHAR 8.
WHEN LEN-C10. "Convert text to 10 byte
MAKE_CHAR 10.
WHEN LEN-C20. "Convert text to 20 byte
MAKE_CHAR 20.
WHEN LEN-C50. "Convert text to 50 byte
MAKE_CHAR 50.
WHEN WAERS-TWD. "Convert amount value TWD
MAKE_WAERS WAERS-TWD.
WHEN WAERS-USD. "Convert amount value USD
MAKE_WAERS WAERS-USD.
WHEN OTHERS.
MOVE FVAL TO BDCDATA-FVAL.
ENDCASE.
APPEND BDCDATA.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BDC_DATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FVAL text *
* -->P_BDCDATA-FVAL text *
*----------------------------------------------------------------------*
FORM BDC_DATE USING P_IN_DATE
CHANGING P_OUT_DATE.
DATA: BEGIN OF S_ODATE,
YEAR(4) TYPE C,
MONTH(2) TYPE C,
DAY(2) TYPE C,
END OF S_ODATE.
DATA: NDATE(10) TYPE C.
S_ODATE = P_IN_DATE.
CASE S_UINFO-DATFM.
WHEN '1'.
CONCATENATE S_ODATE-DAY '.'
S_ODATE-MONTH '.'
S_ODATE-YEAR INTO NDATE.
WHEN '2'.
CONCATENATE S_ODATE-MONTH '/'
S_ODATE-DAY '/'
S_ODATE-YEAR INTO NDATE.
WHEN '3'.
CONCATENATE S_ODATE-MONTH '-'
S_ODATE-DAY '-'
S_ODATE-YEAR INTO NDATE.
WHEN '4'.
CONCATENATE S_ODATE-YEAR '.'
S_ODATE-MONTH '.'
S_ODATE-DAY INTO NDATE.
WHEN '5'.
CONCATENATE S_ODATE-YEAR '/'
S_ODATE-MONTH '/'
S_ODATE-DAY INTO NDATE.
WHEN OTHERS.
NDATE = P_IN_DATE.
ENDCASE.
P_OUT_DATE = NDATE.
ENDFORM. " BDC_DATE
*
FORM SELECT_USER_INFO USING P_BNAME.
CLEAR: S_UINFO.
SELECT SINGLE * FROM USR01 WHERE BNAME = P_BNAME.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING USR01 TO S_UINFO.
ENDIF.
ENDFORM. " SELECT_USER_INFO
*&---------------------------------------------------------------------*
*& Form SELECT_SUER_INFO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SY_BNAME text *
*----------------------------------------------------------------------*
FORM SELECT_SUER_INFO USING P_BNAME.
CLEAR: S_UINFO.
SELECT SINGLE * FROM USR01 WHERE BNAME = P_BNAME.
IF SY-SUBRC = 0.
MOVE-CORRESPONDING USR01 TO S_UINFO.
ENDIF.
ENDFORM. " SELECT_SUER_INFO