dialog 程序 表控制

本文介绍了一个用于处理支出申请单的程序设计与实现过程,包括新增、修改、删除及打印等功能。程序通过SAP ABAP技术实现,涉及屏幕设计、数据处理、权限验证等多个方面。

http://wenku.baidu.com/view/2117e25077232f60ddcca17a.html     一直想做一个dialog 程序但是一直没有这个需求,一直没做而又知道有这么一个基础的东西心里总是堵得慌,反正这两天也有空,闲的没事就边学边做了一个

*&---------------------------------------------------------------------*
*& Report  Z_VST_APAPPLY
*& 支出申请单
*&---------------------------------------------------------------------*
*& 实现新增、修改、删除、打印等功能
*&
*&---------------------------------------------------------------------*
REPORT  zfi_007.
TABLES:bkpf,bseg,bsik,lfa1,skat,zapa_header,zapa_item,tcurr,bsak.

* 变量定义
DATA : smartform(30) TYPE c.
DATA fm_name TYPE c.
DATA: gv_fmname        TYPE rs38l_fnam,
      gs_control_param TYPE ssfctrlop,
      gs_output_option TYPE ssfcompop,
      gs_cresop        TYPE ssfcresop.
DATA: gv_formname  TYPE tdsfname.
DATA: lv_line  TYPE i VALUE 0.
CONSTANTS  gc_x  TYPE char1  VALUE 'X'.
DATA: tmp_belnr LIKE bsik-belnr.
DATA: number(3) TYPE c.
DATA: grop(8) TYPE c VALUE 'NO1'.

DATA: z_header TYPE zapa_header.
DATA: zapa_item1 TYPE zapa_item OCCURS 0 WITH HEADER LINE.

DATA: p_gjahr LIKE bsik-gjahr,
      p_bukrs LIKE t001-bukrs,
      p_lifnr LIKE bsik-lifnr,
      p_zfbdt LIKE bsik-zfbdt,
      p_belnr LIKE zapa_header-belnr.
CALL SCREEN 0100.

INITIALIZATION.

  WRITE :p_bukrs,/ p_lifnr,/ p_zfbdt,/ p_belnr .

***&SPWIZARD: DATA DECLARATION FOR TABLECONTROL 'Z_ITEM'
*&SPWIZARD: DEFINITION OF DDIC-TABLE

*功能码返回
  DATA: ok_code TYPE sy-ucomm,
        save_ok LIKE ok_code,
        mode TYPE c,
        i_num TYPE i.

START-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Module  FORM_INIT  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE form_init OUTPUT.

  LOOP AT SCREEN.
    IF screen-group1 = grop.
      screen-input = 1.
      MODIFY SCREEN.
    ELSE.
      screen-input = 0.
      MODIFY SCREEN.
    ENDIF.

  ENDLOOP.
  IF save_ok = 'SCH'.
    LOOP AT SCREEN.
      IF screen-group1 = 'NO3'.
        screen-input = 1.
        MODIFY SCREEN.

      ENDIF.
    ENDLOOP.
  ENDIF.

ENDMODULE.                 " FORM_INIT  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*定义状态栏,工具条,菜单 等
  SET PF-STATUS 'SAT1'.
  SET TITLEBAR '001'.

*将变量值输出至屏幕字段
ENDMODULE.                 " STATUS_0100  OUTPUT

*---------PAI输入后控制 退出事件,与屏幕逻辑流对应
MODULE cancel INPUT.
  LEAVE PROGRAM.
ENDMODULE.                    "CANCEL INPUT


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       PAI输入后控制  处理按钮事件
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  DATA: op(6) TYPE c.
  CLEAR ok_code.
  CASE save_ok .
    WHEN  'BACK1'.
      LEAVE TO SCREEN 0.
    WHEN 'SCH'.
      "检查权限
      PERFORM main.
      PERFORM get_old_data.
      PERFORM display_data.
    WHEN 'CREATE'.     "新增
      grop = 'NO2'.
      op = 'CREATE'.
      PERFORM get_new_data.
      PERFORM display_data.
    WHEN 'SAVE1'.      "保存        
      PERFORM save_data USING op .
    WHEN 'PRT'.
      PERFORM frm_set_parameter.
    WHEN 'CHG'.                "更改
      grop = 'NO2'.
      op = 'CHG'.
      PERFORM get_old_data.
      PERFORM display_data.
    WHEN 'DEL'.        "删除
      op = 'DEL'.
      PERFORM save_data USING op .
    WHEN 'EXIT'.     "退出
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_Z_QTY_BUKRS  text
*      -->P_Z_QTY_GJAHR  text
*      -->P_Z_QTY_BELNR  text
*----------------------------------------------------------------------*
FORM get_new_data .
*  data: wa_item type zapa_item.
  REFRESH  zapa_item1.
  CLEAR z_header.
*------抬头
  z_header-name = '支出申请单'.   "凭证名称
  SELECT MAX( zapa_header~belnr ) FROM zapa_header
    INTO tmp_belnr .
  IF   tmp_belnr <> '' AND tmp_belnr+1(6) = sy-datum(6).
    number = tmp_belnr+7(3) + 1.
    UNPACK number TO number.
    CONCATENATE 'B' sy-datum(6) number INTO z_header-belnr."会计凭证编号:B+年月+流水号
  ELSE.
    CONCATENATE 'B' sy-datum(6) '001' INTO z_header-belnr."会计凭证编号
  ENDIF.
  z_header-gjahr = sy-datum+0(4)."会计年度
  z_header-cpudt = sy-datum.     "请款日期-会计凭证输入日期
  z_header-cpudt1 = sy-datum.    "制表日期-会计凭证输入日期
  z_header-usnam = sy-uname.     "用户名

*货币码 付款方式
  SELECT SINGLE bsik~waers bsik~zlsch
    INTO (z_header-waers, z_header-zlsch )
    FROM bsik
     WHERE bukrs = p_bukrs "公司代码
     AND lifnr = p_lifnr"供应商
*     and waers <> 'CNY'
     AND blart <> 'KZ' "供应商付款
     AND blart <> 'AB'. "会计凭证
*汇率
  SELECT SINGLE tcurr~ukurs FROM tcurr INTO z_header-kursf
    WHERE  kurst ='M' AND  fcurr = z_header-waers AND tcurr ='CNY'.
  IF z_header-waers ='CNY'.
    z_header-kursf = 1.
  ENDIF.

*-------行项目 客户端 公司代码 凭证编号 会计年度 行项目数
  SELECT  bsik~mandt bsik~bukrs bsik~belnr bsik~gjahr bsik~buzei
*--供应商 会计凭证编号 会计凭证行项目数 过帐日期 基准日期 折扣天数
     bsik~lifnr bsik~belnr bsik~buzei bsik~budat bsik~zfbdt bsik~zbd1t
*--应付 已付 已申请 本次申请    本位币 文本
    bsik~wrbtr bsik~wrbtr bsik~wrbtr bsik~wrbtr bsik~dmbtr bsik~sgtxt
*--总帐科目编号   科目文本 成本中心   借方/贷方标识
    BSIK~HKONT BSIK~HKONT bsik~kostl bsik~shkzg
*     FROM bsik INTO CORRESPONDING FIELDS OF TABLE zapa_item1
     FROM bsik INTO TABLE zapa_item1
     WHERE bukrs = p_bukrs "公司代码
    " and gjahr = p_gjahr"会计年度
*     AND belnr IN p_belnr"会计凭证编号
     AND lifnr = p_lifnr"供应商
*     AND monat IN p_monat"会计期间
     AND blart <> 'KZ'  "供应商付款
     AND blart <> 'AB'. "会计凭证
*     and BSTAT = ''."凭证状态
  "判断正负


  IF sy-subrc <> 0.
    MESSAGE '无凭证被选择,请重新输入!' TYPE 'I'.
    grop = 'NO1'.
  ENDIF.
  SORT zapa_item1 BY budat .

  "权限检查
  LOOP AT zapa_item1.
    AUTHORITY-CHECK OBJECT 'M_MATE_BUK'
                    ID 'ACTVT'  DUMMY  " 作业
                    ID 'BUKRS'  FIELD p_bukrs.  " 公司代码
    IF sy-subrc NE 0.
      MESSAGE e002(zauthority).
    ENDIF.
  ENDLOOP.

  LOOP AT zapa_item1.

* remark by dutm 2012/3/23 10:40
    "进行判断
    IF zapa_item1-shkzg = 'S'.
      zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
      zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
      zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
      zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
    ENDIF.

    "凭证已付货币金额=冲账金额
    SELECT SUM( wrbtr ) FROM bsak INTO zapa_item1-wrbtrb
      WHERE rebzg = zapa_item1-xblnr
      AND   bukrs = zapa_item1-bukrs
      AND   lifnr = zapa_item1-lifnr
      AND   rebzj = zapa_item1-gjahr
      AND   rebzz = zapa_item1-belnr
      AND blart <> 'AB'. "与应付凭证相关的凭证,不为重置的凭证
*    zapa_item1-wrbtrb = 0.
    "凭证已申请货币金额=已经申请金额
    SELECT SUM( zapa_item~wrbtrd ) FROM zapa_item
      INTO zapa_item1-wrbtrc
       WHERE xblnr = zapa_item1-xblnr
         AND bukrs = zapa_item1-bukrs
         AND gjahr = zapa_item1-gjahr
         AND xbzei = zapa_item1-xbzei.

*本次支付金额
    zapa_item1-wrbtrd = zapa_item1-wrbtra - zapa_item1-wrbtrc.
*本位币金额
    IF zapa_item1-waers = 'JPY'.
      zapa_item1-dmbtr = zapa_item1-wrbtrd * z_header-kursf / 100.
    ELSE.
      zapa_item1-dmbtr = zapa_item1-wrbtrd * z_header-kursf .
    ENDIF.

    IF zapa_item1-shkzg = 'S'.
      zapa_item1-shkzg = ''.
    ELSE.
      zapa_item1-shkzg = ''.
    ENDIF.

*   txt50 LIKE skat-txt50,  "科目名称
    SELECT SINGLE skat~txt50 INTO zapa_item1-txt50
       FROM skat WHERE saknr = zapa_item1-saknr.

    zapa_item1-belnr = z_header-belnr."编号
    zapa_item1-buzei = sy-tabix.      "行项目数
*------抬头

    z_header-lifnr = zapa_item1-lifnr.      "供应商或债权人的帐号
    z_header-bukrs = zapa_item1-bukrs.      "公司代码

*货币码
    SELECT SINGLE bsik~waers
      INTO (zapa_item1-waers)
      FROM bsik
       WHERE bukrs = p_bukrs "公司代码
       AND lifnr = p_lifnr"供应商
*     and waers <> 'CNY'
       AND blart <> 'KZ' "供应商付款
       AND blart <> 'AB'. "会计凭证

    " by dutm 2011/3/22 22:14
    "关于币种为日元
    IF zapa_item1-waers = 'JPY'.
      zapa_item1-wrbtra = zapa_item1-wrbtra * 100.
      zapa_item1-wrbtrb = zapa_item1-wrbtrb * 100.
      zapa_item1-wrbtrc = zapa_item1-wrbtrc * 100.
      zapa_item1-wrbtrd = zapa_item1-wrbtrd * 100.
      MODIFY zapa_item1.
    ENDIF.
*2012-04-10
**项目文本 存储凭证号码
*    IF z_header-sgtxt = ''.
*      z_header-sgtxt =  zapa_item1-belnr  .
*    ELSE.
*      CONCATENATE z_header-sgtxt '|' zapa_item1-belnr INTO z_header-sgtxt .
*    ENDIF.

*到期日=  基准日期 + 折扣天数
    zapa_item1-zfbdt = zapa_item1-zfbdt + zapa_item1-zbd1t .

    MODIFY zapa_item1.
*到期日在输入日期后的,删掉
    IF ( p_zfbdt <> '00000000' AND zapa_item1-zfbdt > p_zfbdt )
      OR zapa_item1-wrbtrd = 0.
      DELETE zapa_item1.
      CLEAR zapa_item1.
    ENDIF.

*本次申请总金额

*    IF zapa_item1-shkzg = '借'.
*      z_header-twrbtr = z_header-twrbtr - zapa_item1-wrbtrd.
*    ELSE.
    z_header-twrbtr = z_header-twrbtr + zapa_item1-wrbtrd.
    "ENDIF.
    CLEAR zapa_item1.

  ENDLOOP.


*公司的名称
  SELECT SINGLE t001~butxt INTO (z_header-butxt)
    FROM t001 WHERE bukrs = z_header-bukrs .
*供应商名称 第一个电话号 传真号
  SELECT SINGLE lfa1~name1 lfa1~telf1 lfa1~telfx
    INTO (z_header-name1,z_header-telf1,z_header-telfx)
    FROM lfa1 WHERE lifnr = z_header-lifnr.
*联络人
  SELECT SINGLE knvk~namev knvk~name1
    INTO (z_header-namev, z_header-namev1)
    FROM knvk WHERE kunnr = z_header-lifnr.
  CONCATENATE z_header-namev z_header-name1 INTO z_header-namev.


ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_PARAMETER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_parameter .

* remark by dutm 2012/3/23 10:40
* 2011-8-4 解决打印汇总问题
*  LOOP AT zapa_item1.
*    IF zapa_item1-shkzg = '借'.
*      zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
*      zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
*      zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
*      zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
*      zapa_item1-dmbtr = 0 - zapa_item1-dmbtr.
*      MODIFY zapa_item1.
*    ENDIF.
*  ENDLOOP.

  IF z_header-waers = 'JPY'.
    z_header-twrbtr = z_header-twrbtr * 100.
  ENDIF.


  smartform = 'Z_VST_APAPPLY'.
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = smartform
    IMPORTING
      fm_name            = gv_fmname
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR gs_output_option.


  CALL FUNCTION gv_fmname
    EXPORTING
      control_parameters = gs_control_param
      output_options     = gs_output_option
      user_settings      = space
      zapa_header        = z_header
    TABLES
      zapa_item          = zapa_item1[]
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " FRM_SET_PARAMETER
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_display .
  CLEAR: gs_output_option.
  gs_output_option-tdimmed   = gc_x.                       "开启立即打印
  gs_output_option-tdnewid   = ' '.                        "新的打印设备付空
  gs_output_option-tddelete  = gc_x.                       "打印完后断开设置连接,清空打印内容缓存
  IF gs_cresop-tddest IS INITIAL.                          "判断打印输出设备是否存在
    gs_output_option-tddest = 'VS'.
  ELSE.
    gs_output_option-tddest = gs_cresop-tddest.            "当前打印输出设备付予打印控制
  ENDIF.
ENDFORM.                    " FRM_DISPLAY

*&---------------------------------------------------------------------*
*&      Form  GET_OLD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_old_data .
*  REFRESH  g_z_item_itab.
  REFRESH  zapa_item1.
  CLEAR  z_header.

  DATA: count TYPE i,
        s_where(200) TYPE c .

  IF p_belnr IS NOT INITIAL.
    SELECT SINGLE * FROM zapa_header
      INTO z_header
      WHERE bukrs = p_bukrs AND lifnr = p_lifnr
      AND ( belnr = p_belnr  ).
    IF sy-subrc <> 0.
      MESSAGE '查询单据不存在,请重新输入!' TYPE 'I'.
    ENDIF.


*读取表项目
    SELECT * FROM zapa_item
       INTO CORRESPONDING FIELDS
       OF   TABLE zapa_item1[] WHERE belnr = z_header-belnr.

  ELSE.
    SELECT COUNT(*) FROM zapa_header
    INTO count
    WHERE bukrs = p_bukrs AND lifnr = p_lifnr.
    IF count <> 1.
      MESSAGE '输入条件查出的单据不唯一,请重新输入!' TYPE 'I'.
    ELSE.

      SELECT SINGLE * FROM zapa_header
      INTO z_header
      WHERE bukrs = p_bukrs AND lifnr = p_lifnr.
*读取表项目

      SELECT * FROM zapa_item
       INTO CORRESPONDING FIELDS
       OF TABLE zapa_item1 WHERE belnr = z_header-belnr .

    ENDIF.

  ENDIF.

* BY DUTM 2012/3/22
  IF z_header-waers = 'JPY'.
    z_header-twrbtr = z_header-twrbtr * 100.
  ENDIF.

  LOOP AT zapa_item1.
    IF zapa_item1-waers = 'JPY'.
      zapa_item1-wrbtra = zapa_item1-wrbtra * 100.
      zapa_item1-wrbtrb = zapa_item1-wrbtrb * 100.
      zapa_item1-wrbtrc = zapa_item1-wrbtrc * 100.
      zapa_item1-wrbtrd = zapa_item1-wrbtrd * 100.
      MODIFY zapa_item1.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " GET_OLD_DATA

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       查询数据显示
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_data .

  IF z_header-waers = 'JPY'.
    z_header-twrbtr =  z_header-twrbtr / 100.
  ENDIF.

  zapa_header-mandt  = z_header-mandt .
  zapa_header-bukrs  = z_header-bukrs .
  zapa_header-belnr  = z_header-belnr .
  zapa_header-gjahr  = z_header-gjahr .
  zapa_header-butxt  = z_header-butxt .
  zapa_header-cpudt  = z_header-cpudt .
  zapa_header-cpudt1 = z_header-cpudt1.
  zapa_header-usnam  = z_header-usnam .
  zapa_header-lifnr  = z_header-lifnr .
  zapa_header-name1  = z_header-name1 .
  zapa_header-telf1  = z_header-telf1 .
  zapa_header-telfx  = z_header-telfx .
  zapa_header-namev  = z_header-namev .
  zapa_header-namev1  = z_header-namev1 .
  zapa_header-kursf  = z_header-kursf .
  zapa_header-zlsch  = z_header-zlsch .
  zapa_header-twrbtr = z_header-twrbtr.
  zapa_header-name   = z_header-name  .
  zapa_header-waers  = z_header-waers .
  "zapa_header-sgtxt  = z_header-sgtxt .
*2012/04/10
  " zapa_header-sgtxt  = ''.

*  WRITE:zapa_header-usnam, / zapa_header-cpudt1, / zapa_header-belnr ,
*   / zapa_header-cpudt,/ zapa_header-lifnr ,/ zapa_header-name1,
*   / zapa_header-telf1,/ zapa_header-telfx,
*   / zapa_header-namev,/ zapa_header-waers ,/ zapa_header-kursf.

  IF zapa_header-twrbtr < 0.
    MESSAGE w001(00) WITH '该供应商应付总额为负(' zapa_header-twrbtr '),请用FBL1N检查并纠正财务凭证的错误'.
*    CLEAR: zapa_header, z_header, zapa_item1[].
  ENDIF.


ENDFORM.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  SAVE_DATA
*&---------------------------------------------------------------------*
*       保存支出申请单
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM save_data USING op TYPE c.
  DATA:tmp_wrbtr LIKE bsik-wrbtr.
  DATA: flag(5) TYPE c.


  LOOP AT zapa_item1.
*  read table g_z_item_itab with table key XBLNR = zapa_item1-XBLNR INTO g_z_item_wa .
*
*    zapa_item1-XBLNR = g_z_item_wa-XBLNR.
*    zapa_item1-WRBTRD = g_z_item_wa-WRBTRD.
*    zapa_item1-SGTXT = g_z_item_wa-SGTXT.
*    zapa_item1-KOSTL = g_z_item_wa-KOSTL.

    tmp_wrbtr = zapa_item1-wrbtrc + zapa_item1-wrbtrd.
    IF  ABS( tmp_wrbtr ) > ABS( zapa_item1-wrbtra ).
      MESSAGE '申请金额不能大于应付金额减去已申请金额,请检查输入金额!' TYPE 'I'.
      save_ok = 'CREATE'.
      flag = 'false'.
      RETURN .

    ELSEIF SIGN( zapa_item1-wrbtra ) <> SIGN( tmp_wrbtr ).
      MESSAGE '输入有误!申请金额与应付金额的正负号应该一致。' TYPE 'I'.
      save_ok = 'CREATE'.
      flag = 'false'.
      RETURN .

    ELSE.
      flag = 'true'.

    ENDIF.
    CLEAR zapa_item1.
  ENDLOOP.

  IF flag = 'true'.
    IF op = 'CREATE'.
      LOOP AT zapa_item1.

* remark by dutm 2012/3/23 10:40
*        IF zapa_item1-shkzg = '借'.
*          zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
*          zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
*          zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
*          zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
*          zapa_item1-dmbtr = 0 - zapa_item1-dmbtr.
*          MODIFY zapa_item1.
*        ENDIF.

        " BY DUTM 2012/3/23
        IF zapa_item1-waers = 'JPY'.
          zapa_item1-wrbtra = zapa_item1-wrbtra / 100.
          zapa_item1-wrbtrb = zapa_item1-wrbtrb / 100.
          zapa_item1-wrbtrc = zapa_item1-wrbtrc / 100.
          zapa_item1-wrbtrd = zapa_item1-wrbtrd / 100.
          MODIFY zapa_item1.
        ENDIF.

        INSERT INTO zapa_item VALUES zapa_item1.
        CLEAR zapa_item1.
      ENDLOOP.

      IF zapa_header-waers = 'JPY'.
        zapa_header-twrbtr = zapa_header-twrbtr / 100.
      ENDIF.

      INSERT INTO zapa_header VALUES zapa_header.
      MESSAGE '保存支付申请单成功!' TYPE 'I'.

    ELSEIF  op = 'CHG'.
      LOOP AT zapa_item1.
        DELETE FROM zapa_item WHERE belnr = zapa_item1-belnr.
        CLEAR zapa_item1.
      ENDLOOP.
      DELETE FROM zapa_header WHERE belnr = zapa_header-belnr.

      LOOP AT zapa_item1.

* remark by dutm 2012/3/23 10:40
*        IF zapa_item1-shkzg = '借'.
*          zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
*          zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
*          zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
*          zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
*          zapa_item1-dmbtr = 0 - zapa_item1-dmbtr.
*          MODIFY zapa_item1.
*        ENDIF.

        " BY DUTM 2012/3/23
        IF zapa_item1-waers = 'JPY'.
          zapa_item1-wrbtra = zapa_item1-wrbtra / 100.
          zapa_item1-wrbtrb = zapa_item1-wrbtrb / 100.
          zapa_item1-wrbtrc = zapa_item1-wrbtrc / 100.
          zapa_item1-wrbtrd = zapa_item1-wrbtrd / 100.
          MODIFY zapa_item1.
        ENDIF.

        INSERT INTO zapa_item VALUES zapa_item1.
        CLEAR zapa_item1.
      ENDLOOP.

      IF zapa_header-waers = 'JPY'.
        zapa_header-twrbtr = zapa_header-twrbtr / 100.
      ENDIF.

      INSERT INTO zapa_header VALUES zapa_header.
      MESSAGE '修改支付申请单成功!' TYPE 'I'.


    ELSEIF op = 'DEL' .
      LOOP AT zapa_item1.
        DELETE FROM zapa_item WHERE belnr = zapa_item1-belnr.
        CLEAR zapa_item1.
      ENDLOOP.
      DELETE FROM zapa_header WHERE belnr = zapa_header-belnr.
      MESSAGE '删除支付申请单成功!' TYPE 'I'.

    ENDIF.
    CLEAR zapa_header.
    REFRESH  zapa_item1.
    grop = 'NO1'.
  ENDIF.
ENDFORM.                    " SAVE_DATA
*
*&SPWIZARD: DECLARATION OF TABLECONTROL 'Z_ITEM1' ITSELF
CONTROLS: z_item1 TYPE TABLEVIEW USING SCREEN 0100.

*&SPWIZARD: LINES OF TABLECONTROL 'Z_ITEM1'
DATA:     g_z_item1_lines  LIKE sy-loopc,
          rsdxx LIKE rsdxx.

*&SPWIZARD: OUTPUT MODULE FOR TC 'Z_ITEM1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE z_item1_change_tc_attr OUTPUT.
  DESCRIBE TABLE zapa_item1 LINES z_item1-lines.
ENDMODULE.                    "Z_ITEM1_CHANGE_TC_ATTR OUTPUT

*&SPWIZARD: OUTPUT MODULE FOR TC 'Z_ITEM1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE z_item1_get_lines OUTPUT.
  g_z_item1_lines = sy-loopc.

ENDMODULE.                    "Z_ITEM1_GET_LINES OUTPUT

*&SPWIZARD: INPUT MODULE FOR TC 'Z_ITEM1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE z_item1_modify INPUT.

* 在表格中插入行,要考虑的因素较多,最好要弹出一个对话框让用户选择合适的数据,
* 代码处理起来比较麻烦,暂时不实现。以后有空时再完善。

  WRITE:/ zapa_item1-bstat.

  IF zapa_item1-belnr = ''. "未初始化的行项目,主要针对新增行
    SELECT SINGLE
*    bsik~mandt bsik~bukrs bsik~belnr bsik~gjahr bsik~buzei
*--供应商 会计凭证编号 会计凭证行项目数 过帐日期 基准日期 折扣天数
      bsik~lifnr bsik~belnr bsik~buzei bsik~budat bsik~zfbdt bsik~zbd1t
*--应付 已付 已申请 本次申请    本位币 文本
      bsik~wrbtr bsik~wrbtr bsik~wrbtr bsik~wrbtr bsik~dmbtr "bsik~sgtxt
*--总帐科目编号  科目文本  成本中心   借方/贷方标识 货币种类
     BSIK~HKONT BSIK~HKONT bsik~kostl bsik~shkzg bsik~waers
       FROM bsik INTO (zapa_item1-lifnr, zapa_item1-belnr,
      zapa_item1-buzei, zapa_item1-budat,zapa_item1-zfbdt,zapa_item1-zbd1t,
      zapa_item1-wrbtra, zapa_item1-wrbtrb,
      zapa_item1-wrbtrc, zapa_item1-wrbtrd, zapa_item1-dmbtr,"zapa_item1-SGtxt,
      zapa_item1-saknr, zapa_item1-saknr, zapa_item1-kostl, zapa_item1-shkzg,zapa_item1-waers )
       WHERE belnr = zapa_item1-xblnr " 这个值不够准确,本还需要一个项目……
         AND bukrs = p_bukrs
         AND lifnr = p_lifnr
         AND blart <> 'KZ'
         AND blart <> 'AB'.

* remark by dutm 2012/3/23
    IF zapa_item1-shkzg = 'S'.
      zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
      zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
      zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
      zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
    ENDIF.

    IF zapa_item1-waers = 'JPY'.
      zapa_item1-wrbtra = zapa_item1-wrbtra * 100.
      zapa_item1-wrbtrb = zapa_item1-wrbtrb * 100.
      zapa_item1-wrbtrc = zapa_item1-wrbtrc * 100.
      zapa_item1-wrbtrd = zapa_item1-wrbtrd * 100.
    ENDIF.


*     and BSTAT = ''."凭证状态
    IF sy-subrc <> 0.
      MESSAGE '无凭证被选择,请重新输入!' TYPE 'I'.
      grop = 'NO2'.
    ELSE.
*-------行项目 客户端 公司代码 凭证编号 会计年度 行项目数
      zapa_item1-mandt = zapa_header-mandt.
      zapa_item1-bukrs = zapa_header-bukrs.
      zapa_item1-belnr = zapa_header-belnr.
      zapa_item1-gjahr = zapa_header-gjahr.
      zapa_item1-buzei = ''.
      zapa_item1-waers = zapa_header-waers.
      zapa_item1-lifnr = zapa_header-lifnr.
      zapa_item1-zfbdt = zapa_item1-zfbdt + zapa_item1-zbd1t.

      "凭证已付货币金额=冲账金额
*    zapa_item1-wrbtrb = 0.
      SELECT SUM( wrbtr ) FROM bsak INTO zapa_item1-wrbtrb
        WHERE rebzg = zapa_item1-xblnr
          AND bukrs = zapa_item1-bukrs
          AND lifnr = zapa_item1-lifnr
          AND rebzj = zapa_item1-gjahr
          AND rebzz = zapa_item1-belnr
          AND blart <> 'AB'.

      "凭证已申请货币金额=已经申请金额
      SELECT SUM( zapa_item~wrbtrd ) FROM zapa_item
        INTO zapa_item1-wrbtrc
         WHERE xblnr = zapa_item1-xblnr
           AND bukrs = zapa_item1-bukrs
           AND gjahr = zapa_item1-gjahr
           AND xbzei = zapa_item1-xbzei.

      zapa_item1-wrbtrd = zapa_item1-wrbtra - zapa_item1-wrbtrc.
      IF zapa_item1-shkzg = 'S'.
        zapa_item1-shkzg = ''.
      ELSE.
        zapa_item1-shkzg = ''.
      ENDIF.
*   txt50 LIKE skat-txt50,  "科目名称
      SELECT SINGLE skat~txt50 INTO zapa_item1-txt50
         FROM skat WHERE saknr = zapa_item1-saknr.
    ENDIF.
  ENDIF.

  MODIFY zapa_item1
    FROM zapa_item1
    INDEX z_item1-current_line.
*本次支付凭证货币总金额
  zapa_header-twrbtr = 0.
  LOOP AT zapa_item1.

** remark by dutm 2012/3/23 10:40
*    IF zapa_item1-shkzg = '借'.
*      zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
*      zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
*      zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
*      zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
*      zapa_item1-dmbtr = 0 - zapa_item1-dmbtr.
*      MODIFY zapa_item1.
*    ENDIF.

* ReMark by dutm 2011/3/22 22:14
*    "关于币种为日元
*    IF zapa_item1-waers = 'JPY'.
*      zapa_item1-wrbtra = zapa_item1-wrbtra * 100.
*      zapa_item1-wrbtrb = zapa_item1-wrbtrb * 100.
*      zapa_item1-wrbtrc = zapa_item1-wrbtrc * 100.
*      zapa_item1-wrbtrd = zapa_item1-wrbtrd * 100.
*      MODIFY zapa_item1.
*    ENDIF.

*本次申请总金额
*    IF zapa_item1-shkzg = '借'.
*      zapa_header-twrbtr = zapa_header-twrbtr - zapa_item1-wrbtrd.
*    ELSE.
    zapa_header-twrbtr = zapa_header-twrbtr + zapa_item1-wrbtrd.
    "ENDIF.
    CLEAR zapa_item1.
  ENDLOOP.

ENDMODULE.                    "Z_ITEM1_MODIFY INPUT

*&SPWIZARD: INPUT MODULE FOR TC 'Z_ITEM1'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE z_item1_user_command INPUT.

  ok_code = sy-ucomm.
  PERFORM user_ok_tc USING    'Z_ITEM1'
                              'ZAPA_ITEM1'
                              'BSTAT'"'ITEM_LINES'
                     CHANGING ok_code.
  sy-ucomm = ok_code.
ENDMODULE.                    "Z_ITEM1_USER_COMMAND INPUT

*----------------------------------------------------------------------*
*   INCLUDE TABLECONTROL_FORMS                                         *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  USER_OK_TC                                               *
*&---------------------------------------------------------------------*
FORM user_ok_tc USING    p_tc_name TYPE dynfnam
                         p_table_name
                         p_mark_name
                CHANGING p_ok      LIKE sy-ucomm.

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA: l_ok              TYPE sy-ucomm,
        l_offset          TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

*&SPWIZARD: Table control specific operations                          *
*&SPWIZARD: evaluate TC name and operations                            *
*  search p_ok for p_tc_name.
*  if sy-subrc <> 0.
*    exit.
*  endif.
*  l_offset = strlen( p_tc_name ) + 1.
*  l_ok = p_ok+l_offset.
  l_ok = p_ok.
*&SPWIZARD: execute general and TC specific operations                 *
  CASE l_ok.
    WHEN 'INSR'.                      "insert row
      PERFORM fcode_insert_row USING    p_tc_name
                                        p_table_name.
      CLEAR p_ok.

    WHEN 'DELE'.                      "delete row
      PERFORM fcode_delete_row USING    p_tc_name
                                        p_table_name
                                        p_mark_name.
      CLEAR p_ok.

    WHEN 'P--' OR                     "top of list
         'P-'  OR                     "previous page
         'P+'  OR                     "next page
         'P++'.                       "bottom of list
      PERFORM compute_scrolling_in_tc USING p_tc_name
                                            l_ok.
      CLEAR p_ok.
*     WHEN 'L--'.                       "total left
*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
*     WHEN 'L-'.                        "column left
*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
*     WHEN 'R+'.                        "column right
*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
*     WHEN 'R++'.                       "total right
*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
    WHEN 'MARK'.                      "mark all filled lines
      PERFORM fcode_tc_mark_lines USING p_tc_name
                                        p_table_name
                                        p_mark_name   .
      CLEAR p_ok.

    WHEN 'DMRK'.                      "demark all filled lines
      PERFORM fcode_tc_demark_lines USING p_tc_name
                                          p_table_name
                                          p_mark_name .
      CLEAR p_ok.

*     WHEN 'SASCEND'   OR
*          'SDESCEND'.                  "sort column
*       PERFORM FCODE_SORT_TC USING P_TC_NAME
*                                   l_ok.

  ENDCASE.

ENDFORM.                              " USER_OK_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_INSERT_ROW                                         *
*&---------------------------------------------------------------------*
FORM fcode_insert_row
              USING    p_tc_name           TYPE dynfnam
                       p_table_name             .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_lines_name       LIKE feld-name.
  DATA l_selline          LIKE sy-stepl.
  DATA l_lastline         TYPE i.
  DATA l_line             TYPE i.
  DATA l_table_name       LIKE feld-name.
  FIELD-SYMBOLS <tc>                 TYPE cxtab_control.
  FIELD-SYMBOLS <table>              TYPE STANDARD TABLE.
  FIELD-SYMBOLS <lines>              TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: get looplines of TableControl                              *
  CONCATENATE 'G_' p_tc_name '_LINES' INTO l_lines_name.
  ASSIGN (l_lines_name) TO <lines>.

*&SPWIZARD: get current line                                           *
  GET CURSOR LINE l_selline.
  IF sy-subrc <> 0.                   " append line to table
    l_selline = <tc>-lines + 1.
*&SPWIZARD: set top line                                               *
    IF l_selline > <lines>.
      <tc>-top_line = l_selline - <lines> + 1 .
    ELSE.
      <tc>-top_line = 1.
    ENDIF.
  ELSE.                               " insert line into table
    l_selline = <tc>-top_line + l_selline - 1.
    l_lastline = <tc>-top_line + <lines> - 1.
  ENDIF.
*&SPWIZARD: set new cursor line                                        *
  l_line = l_selline - <tc>-top_line + 1.

*&SPWIZARD: insert initial line                                        *
  INSERT INITIAL LINE INTO <table> INDEX l_selline.
  <tc>-lines = <tc>-lines + 1.
*&SPWIZARD: set cursor                                                 *
  SET CURSOR LINE l_line.

ENDFORM.                              " FCODE_INSERT_ROW

*&---------------------------------------------------------------------*
*&      Form  FCODE_DELETE_ROW                                         *
*&---------------------------------------------------------------------*
FORM fcode_delete_row
              USING    p_tc_name           TYPE dynfnam
                       p_table_name
                       p_mark_name   .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_table_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <wa>.
  FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: delete marked lines                                        *
  DESCRIBE TABLE <table> LINES <tc>-lines.

  LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
    ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.
    IF <mark_field> = 'X'.
      DELETE <table> INDEX syst-tabix.
      IF sy-subrc = 0.
        <tc>-lines = <tc>-lines - 1.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                              " FCODE_DELETE_ROW

*&---------------------------------------------------------------------*
*&      Form  COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*      -->P_OK       ok code
*----------------------------------------------------------------------*
FORM compute_scrolling_in_tc USING    p_tc_name
                                      p_ok.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_tc_new_top_line     TYPE i.
  DATA l_tc_name             LIKE feld-name.
  DATA l_tc_lines_name       LIKE feld-name.
  DATA l_tc_field_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <lines>      TYPE i.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.
*&SPWIZARD: get looplines of TableControl                              *
  CONCATENATE 'G_' p_tc_name '_LINES' INTO l_tc_lines_name.
  ASSIGN (l_tc_lines_name) TO <lines>.


*&SPWIZARD: is no line filled?                                         *
  IF <tc>-lines = 0.
*&SPWIZARD: yes, ...                                                   *
    l_tc_new_top_line = 1.
  ELSE.
*&SPWIZARD: no, ...                                                    *
    CALL FUNCTION 'SCROLLING_IN_TABLE'
         EXPORTING
              entry_act             = <tc>-top_line
              entry_from            = 1
              entry_to              = <tc>-lines
              last_page_full        = 'X'
              loops                 = <lines>
              ok_code               = p_ok
              overlapping           = 'X'
         IMPORTING
              entry_new             = l_tc_new_top_line
         EXCEPTIONS
*              NO_ENTRY_OR_PAGE_ACT  = 01
*              NO_ENTRY_TO           = 02
*              NO_OK_CODE_OR_PAGE_GO = 03
              OTHERS                = 0.
  ENDIF.

*&SPWIZARD: get actual tc and column                                   *
  GET CURSOR FIELD l_tc_field_name
             AREA  l_tc_name.

  IF syst-subrc = 0.
    IF l_tc_name = p_tc_name.
*&SPWIZARD: et actual column                                           *
      SET CURSOR FIELD l_tc_field_name LINE 1.
    ENDIF.
  ENDIF.

*&SPWIZARD: set the new top line                                       *
  <tc>-top_line = l_tc_new_top_line.


ENDFORM.                              " COMPUTE_SCROLLING_IN_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
*       marks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_mark_lines USING p_tc_name
                               p_table_name
                               p_mark_name.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
  DATA l_table_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <wa>.
  FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: mark all filled lines                                      *
  LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
    ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

    <mark_field> = 'X'.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
*       demarks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM fcode_tc_demark_lines USING p_tc_name
                                 p_table_name
                                 p_mark_name .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA l_table_name       LIKE feld-name.

  FIELD-SYMBOLS <tc>         TYPE cxtab_control.
  FIELD-SYMBOLS <table>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <wa>.
  FIELD-SYMBOLS <mark_field>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (p_tc_name) TO <tc>.

*&SPWIZARD: get the table, which belongs to the tc                     *
  CONCATENATE p_table_name '[]' INTO l_table_name. "table body
  ASSIGN (l_table_name) TO <table>.                "not headerline

*&SPWIZARD: demark all filled lines                                    *
  LOOP AT <table> ASSIGNING <wa>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
    ASSIGN COMPONENT p_mark_name OF STRUCTURE <wa> TO <mark_field>.

    <mark_field> = space.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*&      Module  GET_WAERS_SET_KURSF  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_waers_set_kursf  INPUT.
*汇率
  zapa_header-kursf = 0.
  WRITE:zapa_header-kursf.
  SELECT SINGLE tcurr~ukurs FROM tcurr INTO zapa_header-kursf
    WHERE  kurst ='M' AND  fcurr = zapa_header-waers AND tcurr ='CNY'.
  IF sy-subrc <> 0.
    IF zapa_header-waers = 'CNY'.
      zapa_header-kursf = 1.
    ELSE.
      MESSAGE '该币种汇率没有维护!' TYPE 'I'.
    ENDIF.
  ELSE.
*  zapa_header-kursf  = zapa_header-kursf .
    WRITE:zapa_header-kursf.
*本位币金额
    LOOP AT zapa_item1.
      IF zapa_item1-waers = 'JPY'.
        zapa_item1-dmbtr = zapa_item1-wrbtrd * zapa_header-kursf / 100.
      ELSE.
        zapa_item1-dmbtr = zapa_item1-wrbtrd * zapa_header-kursf.
      ENDIF.
      MODIFY zapa_item1 FROM zapa_item1.
      CLEAR zapa_item1.
    ENDLOOP.
  ENDIF.
*本次支付凭证货币总金额
  zapa_header-twrbtr = 0.
  LOOP AT zapa_item1.

* remark by dutm 2012/3/23 10:40
*    IF zapa_item1-shkzg = '借'.
*      zapa_item1-wrbtra = 0 - zapa_item1-wrbtra.
*      zapa_item1-wrbtrb = 0 - zapa_item1-wrbtrb.
*      zapa_item1-wrbtrc = 0 - zapa_item1-wrbtrc.
*      zapa_item1-wrbtrd = 0 - zapa_item1-wrbtrd.
*      zapa_item1-dmbtr = 0 - zapa_item1-dmbtr.
*      MODIFY zapa_item1.
*    ENDIF.

* ReMark by dutm 2011/3/22 22:14
*    "关于币种为日元
*    IF zapa_item1-waers = 'JPY'.
*      zapa_item1-wrbtra = zapa_item1-wrbtra * 100.
*      zapa_item1-wrbtrb = zapa_item1-wrbtrb * 100.
*      zapa_item1-wrbtrc = zapa_item1-wrbtrc * 100.
*      zapa_item1-wrbtrd = zapa_item1-wrbtrd * 100.
*      MODIFY zapa_item1.
*    ENDIF.
*本次申请总金额
*    IF zapa_item1-shkzg = '借'.
*      zapa_header-twrbtr = zapa_header-twrbtr - zapa_item1-wrbtrd.
*    ELSE.
    zapa_header-twrbtr = zapa_header-twrbtr + zapa_item1-wrbtrd.
*    ENDIF.
    CLEAR zapa_item1.
  ENDLOOP.
  grop = 'NO2'.
ENDMODULE.                 " GET_WAERS_SET_KURSF  INPUT
*&---------------------------------------------------------------------*
*&      Module  SET_KURSF  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_kursf INPUT.
  WRITE:zapa_header-kursf.
*本位币金额
  LOOP AT zapa_item1.
    IF zapa_item1-waers = 'JPY'.
      zapa_item1-dmbtr = zapa_item1-wrbtrd * zapa_header-kursf / 100.
    ELSE.
      zapa_item1-dmbtr = zapa_item1-wrbtrd * zapa_header-kursf.
    ENDIF.
    MODIFY zapa_item1 FROM zapa_item1.
    CLEAR zapa_item1.
  ENDLOOP.
*本次支付凭证货币总金额
*  zapa_header-twrbtr = 0.
*  loop at zapa_item1.
*    zapa_header-twrbtr = zapa_header-twrbtr + zapa_item1-wrbtrd.
*    clear zapa_item1.
*  endloop.
  grop = 'NO2'.

ENDMODULE.                 " SET_KURSF  INPUT
*&---------------------------------------------------------------------*
*&      Form  MAIN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM main .
  "权限检查

  AUTHORITY-CHECK OBJECT 'M_MATE_BUK'
                  ID 'ACTVT'  DUMMY  " 作业
                  ID 'BUKRS'  FIELD p_bukrs.  " 公司代码
  IF sy-subrc NE 0.
    MESSAGE e002(zauthority).
  ENDIF.

ENDFORM.                    " MAIN

 

转载于:https://www.cnblogs.com/charles-guo/archive/2013/05/27/3101480.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值