ITPub博客

首页 > Linux操作系统 > Linux操作系统 > abap 把一个内表所有字符都写在一行上

abap 把一个内表所有字符都写在一行上

原创 Linux操作系统 作者:heart_smile 时间:2010-03-11 08:47:11 0 删除 编辑

把所以字符都写在一行上:

做法很简单,就是用一个内表,一个长字段(255),
然后确定每一个字段的长度,及起止,结束位置就行了。

TYPES: BEGIN OF IT_TAB_SQL,
           SQL(180) TYPE C,
  END OF IT_TAB_SQL.
  DATA GI_TAB_SQL TYPE IT_TAB_SQL OCCURS 0 WITH HEADER LINE.

   DATA:IT_POS_NEW LIKE RFPOSXEXT OCCURS 0 WITH HEADER LINE,
        IT_POS_POSITIVE LIKE RFPOSXEXT OCCURS 0 WITH HEADER LINE,
        IT_POS_NEGATIVE LIKE RFPOSXEXT OCCURS 0 WITH HEADER LINE,
        GV_NUM TYPE I,
        GV_NUMC(6) TYPE C,
        GV_AMOUNTC(17) TYPE C,
        GV_POSITIVE_NUM TYPE I, " Number of invoice
        GV_NEGATIVE_NUM TYPE I,
        GV_POSITIVE_BWWRT_SUM LIKE IT_POS_POSITIVE-BWWRT, "Sum of all invoice
        GV_NEGATIVE_BWWRT_SUM LIKE IT_POS_POSITIVE-BWWRT,
        GV_POSITIVE_NUMC(5) TYPE C, " Number of invoice
        GV_NEGATIVE_NUMC(5) TYPE C.

   CLEAR:GV_NUM,GV_NUMC,GV_AMOUNTC,GV_POSITIVE_NUM,GV_NEGATIVE_NUM,GV_POSITIVE_BWWRT_SUM,GV_POSITIVE_BWWRT_SUM,
         GV_POSITIVE_NUMC,GV_NEGATIVE_NUMC.

REFRESH:IT_POS_NEW.

   APPEND LINES OF IT_POS TO IT_POS_NEW.

   "SORT IT_POS_NEW BY BELNR UMSKZ BWWRT.

   DELETE IT_POS_NEW WHERE BELNR+0(2) <> '71'.
   DELETE IT_POS_NEW WHERE UMSKZ IS NOT INITIAL.

   APPEND LINES OF IT_POS_NEW TO IT_POS_POSITIVE.
   APPEND LINES OF IT_POS_NEW TO IT_POS_NEGATIVE.

   DELETE IT_POS_POSITIVE WHERE  BWWRT < 0 .
   DELETE IT_POS_NEGATIVE WHERE  BWWRT >= 0 .

 

   DESCRIBE TABLE IT_POS_POSITIVE LINES GV_POSITIVE_NUM. " Number of invoice
   DESCRIBE TABLE IT_POS_NEGATIVE LINES GV_NEGATIVE_NUM.

   CLEAR: GV_POSITIVE_BWWRT_SUM,GV_POSITIVE_BWWRT_SUM.

   LOOP AT IT_POS_POSITIVE.
     GV_POSITIVE_BWWRT_SUM = GV_POSITIVE_BWWRT_SUM + IT_POS_POSITIVE-BWWRT.
   ENDLOOP.
   LOOP AT IT_POS_NEGATIVE.
     GV_NEGATIVE_BWWRT_SUM = GV_NEGATIVE_BWWRT_SUM + IT_POS_NEGATIVE-BWWRT.
   ENDLOOP.

*   数值要补空格,金额字段不用补空格,会自动补上去的
*   PERFORM. FRM_BLANK_NUM USING GV_POSITIVE_NUM CHANGING GV_POSITIVE_NUMC.
*   PERFORM. FRM_BLANK_NUM USING GV_NEGATIVE_NUM CHANGING GV_NEGATIVE_NUMC.


   "-------添加 FILE HEADER 数据---------------START----

   GI_TAB_SQL-SQL+0(2)          = '01'.
   GI_TAB_SQL-SQL+2(8)          = '00316950'.
   GI_TAB_SQL-SQL+10(30)        = 'TERRAILLON SAS'.
   GI_TAB_SQL-SQL+40(30)        = 'BNP PARIBAS FACTOR'.
   GI_TAB_SQL-SQL+70(8)         = SY-DATUM.
   GI_TAB_SQL-SQL+78(2)         = 'AT'.
   GI_TAB_SQL-SQL+80(94)        = ''.
   GI_TAB_SQL-SQL+174(6)        = '000001'.
   APPEND GI_TAB_SQL.

   GV_NUM = 1.
   "-------添加 FILE HEADER 数据------------END----

   "----开始添加 正数 TABLE ------start-----

     "----table head------
     GV_NUM = GV_NUM + 1.
     CLEAR: GV_NUMC,GV_AMOUNTC.
     PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.
     GI_TAB_SQL-SQL+0(2)          = '20'.
     GI_TAB_SQL-SQL+2(8)          = '00316950'.
     GI_TAB_SQL-SQL+10(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+18(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+26(2)         = 'FR'.
     GI_TAB_SQL-SQL+28(3)         = 'EUR'.
     GI_TAB_SQL-SQL+31(1)         = '2'.
     GI_TAB_SQL-SQL+32(142)       = ''.
     GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
     APPEND GI_TAB_SQL.

   LOOP AT IT_POS_POSITIVE.

     CLEAR: GV_NUMC,GV_AMOUNTC.
     "----table dody---------
     GV_NUM = GV_NUM + 1.
     CLEAR: GV_NUMC,GV_AMOUNTC.
     PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.

     PERFORM. FRM_AMOUNT_0 USING IT_POS_POSITIVE-BWWRT CHANGING GV_AMOUNTC.

     "ZBD1T
     GI_TAB_SQL-SQL+0(2)          = '25'.
     GI_TAB_SQL-SQL+2(8)          = '00316950'.
     GI_TAB_SQL-SQL+10(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+18(9)         = ''.
     GI_TAB_SQL-SQL+27(24)        = IT_POS_POSITIVE-KONTO.
     GI_TAB_SQL-SQL+51(27)        = IT_POS_POSITIVE-VBELN. "XBLNR.
     GI_TAB_SQL-SQL+78(17)        = GV_AMOUNTC.
     GI_TAB_SQL-SQL+95(8)         = IT_POS_POSITIVE-BLDAT.
     GI_TAB_SQL-SQL+103(8)        = IT_POS_POSITIVE-FAEDT.
     GI_TAB_SQL-SQL+111(1)        = '3'.
     GI_TAB_SQL-SQL+112(30)       = ''.
     GI_TAB_SQL-SQL+142(14)       = ''.
     GI_TAB_SQL-SQL+156(3)        = ''.
     GI_TAB_SQL-SQL+159(15)       = ''.
     GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
     APPEND GI_TAB_SQL.
     CLEAR GV_AMOUNTC.


   ENDLOOP.

     "--------table end-----
     GV_NUM = GV_NUM + 1.

     CLEAR: GV_NUMC,GV_AMOUNTC.

    PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.
    PERFORM. FRM_ZEROR_NUM5 USING GV_POSITIVE_NUM CHANGING GV_POSITIVE_NUMC.
    PERFORM. FRM_AMOUNT_0 USING GV_POSITIVE_BWWRT_SUM CHANGING GV_AMOUNTC.

     GI_TAB_SQL-SQL+0(2)          = '29'.
     GI_TAB_SQL-SQL+2(8)          = '00316950'.
     GI_TAB_SQL-SQL+10(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+18(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+26(2)        = 'FR'.
     GI_TAB_SQL-SQL+28(3)        = 'EUR'.
     GI_TAB_SQL-SQL+31(1)        = '2'.
     GI_TAB_SQL-SQL+32(9)         = ''.
     GI_TAB_SQL-SQL+41(5)        = GV_POSITIVE_NUMC.  "Number of invoice  数值要补空格,金额字段不用补空格,会自动补上去的
     GI_TAB_SQL-SQL+46(4)        = ''.
     GI_TAB_SQL-SQL+50(17)       = GV_AMOUNTC.  "Sum of all invoice
     GI_TAB_SQL-SQL+67(107)       = ''.
     GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
     APPEND GI_TAB_SQL.
     CLEAR GV_AMOUNTC.

   "----开始添加 正数 TABLE ------end-------


   "----开始添加  负数 TABLE ------start-----
   CLEAR: GV_NUMC,GV_AMOUNTC.

     GV_NUM = GV_NUM + 1.
     CLEAR: GV_NUMC,GV_AMOUNTC.
     PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.

     "----table head------
     GI_TAB_SQL-SQL+0(2)          = '30'.
     GI_TAB_SQL-SQL+2(8)          = '00316950'.
     GI_TAB_SQL-SQL+10(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+18(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+26(2)         = 'FR'.
     GI_TAB_SQL-SQL+28(3)         = 'EUR'.
     GI_TAB_SQL-SQL+31(1)         = '2'.
     GI_TAB_SQL-SQL+32(142)       = ''.
     GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
     APPEND GI_TAB_SQL.


   LOOP AT IT_POS_NEGATIVE.

     "----table dody---------
     GV_NUM = GV_NUM + 1.
     CLEAR: GV_NUMC,GV_AMOUNTC.
     PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.

     PERFORM. FRM_AMOUNT_0 USING IT_POS_NEGATIVE-BWWRT CHANGING GV_AMOUNTC.

     GI_TAB_SQL-SQL+0(2)          = '35'.
     GI_TAB_SQL-SQL+2(8)          = '00316950'.
     GI_TAB_SQL-SQL+10(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+18(9)         = ''.
     GI_TAB_SQL-SQL+27(24)        = IT_POS_NEGATIVE-KONTO.
     GI_TAB_SQL-SQL+51(27)        = IT_POS_NEGATIVE-VBELN. "XBLNR.
     GI_TAB_SQL-SQL+78(17)        = GV_AMOUNTC.
     GI_TAB_SQL-SQL+95(8)         = IT_POS_NEGATIVE-BLDAT.
     GI_TAB_SQL-SQL+103(8)        = IT_POS_NEGATIVE-FAEDT.
     GI_TAB_SQL-SQL+111(27)       = ''.
     GI_TAB_SQL-SQL+138(15)       = ''.
     GI_TAB_SQL-SQL+153(14)       = ''.
     GI_TAB_SQL-SQL+167(3)        = ''.
     GI_TAB_SQL-SQL+170(4)        = ''.
     GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
     APPEND GI_TAB_SQL.
     CLEAR GV_AMOUNTC.


   ENDLOOP.

   "--------table end-----
     GV_NUM = GV_NUM + 1.

    CLEAR:GV_NUMC, GV_AMOUNTC.

    PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.
    PERFORM. FRM_ZEROR_NUM5 USING GV_NEGATIVE_NUM CHANGING GV_NEGATIVE_NUMC.
    PERFORM. FRM_AMOUNT_0 USING GV_NEGATIVE_BWWRT_SUM CHANGING GV_AMOUNTC.

     GI_TAB_SQL-SQL+0(2)          = '39'.
     GI_TAB_SQL-SQL+2(8)          = '00316950'.
     GI_TAB_SQL-SQL+10(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+18(8)         = SY-DATUM.
     GI_TAB_SQL-SQL+26(2)        = 'FR'.
     GI_TAB_SQL-SQL+28(3)        = 'EUR'.
     GI_TAB_SQL-SQL+31(1)        = '2'.
     GI_TAB_SQL-SQL+32(9)         = ''.
     GI_TAB_SQL-SQL+41(5)        = GV_NEGATIVE_NUMC.  "Number of invoice  数值要补空格,金额字段不用补空格,会自动补上去的
     GI_TAB_SQL-SQL+46(4)        = ''.
     GI_TAB_SQL-SQL+50(17)       = GV_AMOUNTC.  "Sum of all invoice
     GI_TAB_SQL-SQL+67(107)       = ''.
     GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
     APPEND GI_TAB_SQL.
     CLEAR GV_AMOUNTC.

   "----开始添加  负数 TABLE ------end------


   "-------添加 FILE  END 数据---------------START----
   CLEAR: GV_NUMC.
   GV_NUM = GV_NUM + 1.
   PERFORM. FRM_ZEROR_NUM USING GV_NUM CHANGING GV_NUMC.

   GI_TAB_SQL-SQL+0(2)          = '98'.
   GI_TAB_SQL-SQL+2(8)          = '00316950'.
   GI_TAB_SQL-SQL+10(30)        = 'TERRAILLON SAS'.
   GI_TAB_SQL-SQL+40(30)        = 'BNP PARIBAS FACTOR'.
   GI_TAB_SQL-SQL+70(8)         = SY-DATUM.
   GI_TAB_SQL-SQL+78(96)        = ''.
   GI_TAB_SQL-SQL+174(6)        = GV_NUMC.
   APPEND GI_TAB_SQL.


FORM. FRM_ZEROR_NUM USING ZNUM TYPE I CHANGING ZNUMC TYPE CHAR6.
*   DATA: NUMC1 TYPE CHAR1,
*         NUMC2 TYPE CHAR2,
*         NUMC3 TYPE CHAR3,
*         NUMC4 TYPE CHAR4,
*         NUMC5 TYPE CHAR5.

   ZNUMC = ZNUM.

   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'   "before the number 0 to fill the field
     EXPORTING
       INPUT  = ZNUMC
     IMPORTING
       UTPUT = ZNUMC.

*   CLEAR:NUMC1,NUMC2,NUMC3,NUMC4,NUMC5.

*   IF ZNUM < 10.
*     NUMC1 = ZNUM.
*     CONCATENATE '00000' NUMC1 INTO ZNUMC.
*   ELSEIF ZNUM >= 10 AND ZNUM < 100.
*     NUMC2 = ZNUM.
*     CONCATENATE '0000' NUMC2 INTO ZNUMC.
*   ELSEIF ZNUM >= 100 AND ZNUM < 1000.
*     NUMC3 = ZNUM.
*     CONCATENATE '000' NUMC3 INTO ZNUMC.
*   ELSEIF ZNUM >= 1000 AND ZNUM < 10000.
*     NUMC4 = ZNUM.
*     CONCATENATE '00' NUMC4 INTO ZNUMC.
*   ELSEIF ZNUM >= 10000 AND ZNUM < 100000.
*     NUMC1 = ZNUM.
*     CONCATENATE '0' NUMC5 INTO ZNUMC.
*   ELSEIF ZNUM >= 100000.
*     ZNUMC = ZNUM.
*   ENDIF.

 ENDFORM.                    "FRM_ZEROR_NUM

FORM. FRM_ZEROR_NUM5 USING ZNUM TYPE I CHANGING ZNUMC TYPE CHAR5.

   ZNUMC = ZNUM.

   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'   "before the number 0 to fill the field
     EXPORTING
       INPUT  = ZNUMC
     IMPORTING
       UTPUT = ZNUMC.


 ENDFORM.                    "FRM_ZEROR_NUM

*&---------------------------------------------------------------------*
*&      Form  FRM_AMOUNT_0
*&---------------------------------------------------------------------*
*       在数值前补0
*----------------------------------------------------------------------*
*      -->GVBWWRT    text
*      -->AMOUNTC    text
*----------------------------------------------------------------------*
 FORM. FRM_AMOUNT_0 USING GVBWWRT LIKE RFPOSXEXT-BWWRT CHANGING AMOUNTC TYPE CHAR17.

   DATA: GV_AMOUNT(17) TYPE C.

   DATA: HEADER_STR1 TYPE STRING,
         HEADER_STR2 TYPE STRING.

   CLEAR: AMOUNTC,HEADER_STR1,HEADER_STR2.

   AMOUNTC = GVBWWRT.

   "no sign
   SEARCH AMOUNTC FOR '-' .
   IF SY-SUBRC = 0.
     REPLACE  '-' WITH '' INTO AMOUNTC.
   ENDIF.
   "no decimal separator
   SEARCH AMOUNTC FOR '...' .
   IF SY-SUBRC = 0.
     REPLACE  '.' WITH '' INTO AMOUNTC.
     CONDENSE AMOUNTC.
     SPLIT AMOUNTC AT '' INTO HEADER_STR1 HEADER_STR2.
     CONCATENATE HEADER_STR1 HEADER_STR2 INTO AMOUNTC.
     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'   "before the number 0 to fill the field
       EXPORTING
         INPUT  = AMOUNTC
       IMPORTING
         UTPUT = AMOUNTC.
   ENDIF.


 ENDFORM.                    "FRM_AMOUNT_0

*&---------------------------------------------------------------------*
*&      Form  FRM_ZEROR_NUM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->ZNUM       text
*      -->ZNUMC      text
*----------------------------------------------------------------------*
 FORM. FRM_BLANK_NUM USING ZNUM TYPE I CHANGING ZNUMC TYPE CHAR5.
   DATA: NUMC1 TYPE CHAR1,
         NUMC2 TYPE CHAR2,
         NUMC3 TYPE CHAR3,
         NUMC4 TYPE CHAR4,
         NUMC5 TYPE CHAR5,
         ZLEN  TYPE I.

   NUMC5 = ZNUM.
   CONDENSE NUMC5.

   ZLEN = STRLEN( NUMC5 ).

   CLEAR NUMC5.

   CLEAR:NUMC1,NUMC2,NUMC3,NUMC4,NUMC5.

   IF ZLEN = 1.
     NUMC1 = ZNUM.
     CONCATENATE '    ' NUMC1 INTO ZNUMC  SEPARATED BY '    '.
   ELSEIF ZLEN = 2.
     NUMC2 = ZNUM.
     CONCATENATE '   ' NUMC2 INTO ZNUMC SEPARATED BY '   '.
   ELSEIF ZLEN = 3 .
     NUMC3 = ZNUM.
     CONCATENATE '  ' NUMC3 INTO ZNUMC SEPARATED BY '  '.
   ELSEIF ZLEN = 4.
     NUMC4 = ZNUM.
     CONCATENATE ' ' NUMC4 INTO ZNUMC SEPARATED BY ' '.
   ELSEIF ZNUM = 5 .
     ZNUMC = ZNUM.
   ENDIF.

 ENDFORM.                    "FRM_ZEROR_NUM

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10339719/viewspace-629189/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: IDOC开发资料
请登录后发表评论 登录
全部评论

注册时间:2008-11-15

  • 博文量
    32
  • 访问量
    73118