BDC

*----------------------------------------------------------------------*
*   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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值