heshao2005 发表于 2015-9-18 12:55:45

SAP 会计凭证打印smartforms设计



  目录基本如上:
  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 TYPETYP_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 usingptr_header changing all_heads.perform restore_buffer usingptr_item changing all_items.
describe table all_items lines g_totalcount.
5.全局设置->全局定义->格式化程序
form Restore_buffer using typeid type c changing t type table.
import t 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 I VALUE '0'.
DATA:_POSILEN TYPE I 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 PCHANGING _RTN TYPE STRING.
_DMBTR = ABS( _DMBTR ).
DATA:_STR1 TYPE STRING,
       _STR2 TYPE STRING,
       _STR TYPE STRING,
       _LEN TYPE I,
       _BIT TYPE I 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 I VALUE 20,
   _STRCOLS2 TYPE I VALUE 25,

   _DMBTR TYPE P 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-TXT20C_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.
页: [1]
查看完整版本: SAP 会计凭证打印smartforms设计