前进、目标  

 目录基本如上:

   1.全局设置->表格接口->导入  添加参数: PTR_HEADER、PTR_ITEM TYPE C.

   2.全局设置->全局定义->全局数据 添加变量:ALL_HEADS TYPE TYP_HEADS、ALL_ITEMS TYPE TYP_ITEMS、HEAD_ROW TYPE TYP_HEAD 、ITEM_ROW TYPE TYP_ITEM、BLANK_ITEMS TYPE TYP_ITEMS 、BLANK_ROW TYPE  TYP_ITEM  、G_COUNT 、G_PAGESIZE、G_CURRLINE、G_CURRPAGE、G_TOTALPAGE、G_CUPAGE、G_TOTALLINE、G_TOTALCOUNT TYPE I 默认值除了 G_PAGESIZE 你自己输入 后面的都可以为0、C_HDMBTR 、C_SDMBTR、C_DETAILS、C_DATE、C_DATES、C_CUPAGE、C_TOTALPAGE、G_HDMBTR、G_SDMBTR TYPE STRING 。

   3.全局设置->全局定义->类型 添加类型:

    TYPES:BEGIN OF TYP_HEAD,
  BUKRS LIKE BKPF-BUKRS,"公司代码
  BUTXT LIKE T001-BUTXT,"公司名称
  BELNR LIKE BKPF-BELNR,"会计凭证号
  GJAHR LIKE BKPF-GJAHR,"会计年度
  BLDAT LIKE BKPF-BLDAT,"日期
  HDMBTR LIKE BSEG-DMBTR,"贷方总金额
  SDMBTR LIKE BSEG-DMBTR,"借方总金额
  USNAM LIKE BKPF-USNAM,"用户名
  SMONEY TYPE STRING,"大写钱
END OF TYP_HEAD.

TYPES:BEGIN OF TYP_ITEM,
  BUZEI LIKE BSEG-BUZEI,"行号
  BUKRS LIKE BSEG-BUKRS,"公司代码
  BELNR LIKE BSEG-BELNR,"会计凭证号
  GJAHR LIKE BSEG-GJAHR,"年度
  BSCHL LIKE BSEG-BSCHL,"记帐代码
  KOART LIKE BSEG-KOART,"科目类型
  HKONT LIKE BSEG-HKONT,"科目
  TXT20 LIKE SKAT-TXT20,"科目描述
  SHKZG LIKE BSEG-SHKZG,"借方 贷方
  HDMBTR LIKE BSEG-DMBTR,"贷方金额
  SDMBTR LIKE BSEG-DMBTR,"借方金额
  PSWSL LIKE BSEG-PSWSL,"货币
  DMBTR LIKE BSEG-DMBTR,"金额
  SGTXT LIKE BSEG-SGTXT,"项目文本
  PRCTR LIKE BSEG-PRCTR,"利润中心
  LIFNR LIKE BSEG-LIFNR,"供应商
  NAME1 LIKE LFA1-NAME1,"供应商描述
END OF TYP_ITEM.

TYPES:TYP_HEADS TYPE TYP_HEAD OCCURS 0.
TYPES:TYP_ITEMS TYPE TYP_ITEM OCCURS 0.

 4.全局设置->全局定义->初始化 输入参数:PTR_HEADER 、PTR_ITEM、ALL_HEADS、ALL_ITEMS、G_TOTALCOUNT, perform restore_buffer using  ptr_header changing all_heads.perform restore_buffer using  ptr_item changing all_items.
describe table all_items lines g_totalcount.

 5.全局设置->全局定义->格式化程序
 form Restore_buffer using typeid type changing type table.
  import from database indx(hk) id typeid.
endform.
FORM SPLIST_THREE USING VALUE(_STRALL) TYPE STRING VALUE(_STRCOLS) TYPE I
      CHANGING _STR1 TYPE STRING _STR2 TYPE STRING _STR3 TYPE STRING.
  CLEAR:_STR1,_STR2,_STR3.
  DATA:_STRLEN TYPE I.
  DATA:_POSI TYPE VALUE '0'.
  DATA:_POSILEN TYPE VALUE '0'.
  CONDENSE _STRALL NO-GAPS.
  _STRLEN = STRLEN( _STRALL ).
  IF _STRCOLS >= _STRLEN.
    _STR1 = _STRALL.
  ELSE.
    _STR1 = _STRALL+0(_STRCOLS).
  ENDIF.
  IF _STRLEN > _STRCOLS.
  _POSILEN = _STRLEN - _STRCOLS.
  IF _POSILEN >= _STRCOLS.
    _POSILEN = _STRCOLS.
  ENDIF.
  _STR2 = _STRALL+_STRCOLS(_POSILEN).
  IF _POSILEN >= _STRCOLS.
    _POSI = _STRCOLS * 2.
    _POSILEN = _STRLEN - _POSI.
    IF _POSILEN > 0.
    _STR3 = _STRALL+_POSI(_POSILEN).
    ENDIF.
  ENDIF.
ENDIF.
ENDFORM.

FORM CURCUTSTR USING VALUE(_DMBTR) TYPE P  CHANGING _RTN TYPE STRING.
  _DMBTR = ABS( _DMBTR ).
  DATA:_STR1 TYPE STRING,
       _STR2 TYPE STRING,
       _STR TYPE STRING,

       _LEN TYPE I,
       _BIT TYPE VALUE '3',
       _MOD TYPE I,
       _TIMES TYPE I,
       _POINT TYPE I.
  MOVE _DMBTR TO _STR.
  SPLIT _STR AT '.' INTO:_STR1 _STR2.
  _LEN = STRLEN( _STR1 ).
  IF _LEN > 0.
    IF _LEN > _BIT.
      _MOD = _LEN MOD _BIT.
      CLEAR:_POINT.
      IF _MOD > 0.

        _TIMES = _LEN DIV _BIT + 1.
        DO _TIMES TIMES.
          IF SY-INDEX = 1.
            CONCATENATE _RTN _STR1+0(_MOD) ',' INTO _RTN.
            _POINT = _POINT + _MOD.
          ELSEIF SY-INDEX = _TIMES.
            CONCATENATE _RTN _STR1+_POINT(_BIT) INTO _RTN.
            _POINT = _POINT + _BIT.
          ELSE.
            CONCATENATE _RTN _STR1+_POINT(_BIT) ',' INTO _RTN.
            _POINT = _POINT + _BIT.
          ENDIF.
        ENDDO.
      ELSE.
        _TIMES = _lEN DIV _BIT.
        DO _TIMES TIMES.
          IF SY-INDEX = _TIMES.
            CONCATENATE _RTN _STR1+_POINT(_BIT) INTO _RTN.
            _POINT = _POINT + _BIT.
          ELSE.
            CONCATENATE _RTN _STR1+_POINT(_BIT) ',' INTO _RTN.
            _POINT = _POINT + _BIT.
          ENDIF.
        ENDDO.
      ENDIF.
    ELSE.
      _RTN = _STR1.
*      表示不要进行分隔
    ENDIF.
  ELSE.
    _RTN = _STR1.
  ENDIF.
  CONCATENATE _RTN '.' _STR2 INTO _RTN.
ENDFORM.

 6.MAIN主窗口->循环采购凭证 数据 :ALL_HEADS 转至HEAD_ROW条件:BELNR=HEAD_ROW-BELNR

AND BUKRS=HEAD_ROW-BUKRS AND GJAHR=HEAD_ROW-GJAHR

 7.MAIN主窗口->初始化 G_COUNT = 0.G_CURRLINE = 0.G_CUPAGE = 0.

 8.MAIN主窗口->SUBLOOP1 新循环 2 数据ALL_ITEMS 转至ITEM_ROW  条件:BELNR=HEAD_ROW-BELNR

AND BUKRS=HEAD_ROW-BUKRS AND GJAHR=HEAD_ROW-GJAHR。

 9.MAIN主窗口->SUBLOOP1 新循环 2->CODE2 计算行 一般属性: G_COUNT = G_COUNT + 1.

 10.MAIN主窗口->循环采购凭证->CODE3 计算页数: G_TOTALPAGE = 0.DATA:_COUNT TYPE I._COUNT = G_COUNT MOD G_PAGESIZE.IF _COUNT = 0. G_TOTALPAGE = G_COUNT DIV G_PAGESIZE.
ELSE.G_TOTALPAGE = G_COUNT DIV G_PAGESIZE + 1.ENDIF.G_COUNT = 0."总页数清0.

11.CODE4 新程序行 3 : G_COUNT = G_COUNT  + 1.  G_CURRLINE = G_CURRLINE + 1.

12.CODE5 数据转换 :输入参数 ITEM_ROW、C_HDMBTR、C_SDMBTR、C_DETAILS、G_TOTALLINE、C_KEMU、C_KEMUDESC、C_GTXT1、C_GTXT2、C_GTXT3。

  DATA:_STRALL TYPE STRING,
     _STRALLTXT TYPE STRING.
DATA:_STRCOLS TYPE VALUE 20,
     _STRCOLS2 TYPE VALUE 25,


     _DMBTR TYPE DECIMALS 2.

CLEAR:C_HDMBTR,C_SDMBTR,C_DETAILS,C_KEMU,C_KEMUDESC,_STRALL,_STRALLTXT.


IF ITEM_ROW-HDMBTR > 0.
*  MOVE ITEM_ROW-HDMBTR TO C_HDMBTR.
  MOVE ITEM_ROW-HDMBTR TO _DMBTR.
  perform CURCUTSTR using _DMBTR CHANGING C_HDMBTR.
ENDIF.
IF ITEM_ROW-SDMBTR > 0.
*  MOVE ITEM_ROW-SDMBTR TO C_SDMBTR.
  MOVE ITEM_ROW-SDMBTR TO _DMBTR.
  perform CURCUTSTR using _DMBTR CHANGING C_SDMBTR.
ENDIF.

IF ITEM_ROW-LIFNR IS NOT INITIAL AND ITEM_ROW-LIFNR <> ''.
  ITEM_ROW-LIFNR = ITEM_ROW-LIFNR+5(5).
  CONCATENATE '/' ITEM_ROW-LIFNR '-' ITEM_ROW-NAME1 INTO C_DETAILS .
ENDIF.

CONCATENATE ITEM_ROW-HKONT '/' ITEM_ROW-TXT20  C_DETAILS INTO _STRALL.
MOVE ITEM_ROW-SGTXT TO _STRALLTXT.

CLEAR:C_DETAILS.
PERFORM SPLIST_THREE USING _STRALL _STRCOLS CHANGING C_KEMU C_KEMUDESC C_DETAILS.
PERFORM SPLIST_THREE USING _STRALLTXT _STRCOLS2 CHANGING C_GTXT1 C_GTXT2 C_GTXT3.

G_TOTALLINE = G_TOTALLINE + 1.

posted on 2011-11-16 17:23  前进、目标  阅读(3366)  评论(0)    收藏  举报