记账凭证要打钩吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记账凭证要打钩吗?相关的知识,希望对你有一定的参考价值。

记账凭证要打钩吗?要打钩的话如何打勾呢?是记一行数字打一个勾吗?

填写几张凭证的时候不打勾,登记账簿的时候才打勾。
记账凭证,是会计专业术语,是财务会计部门根据原始凭证填制的会计凭证,记录经济业务的简要内容,确定会计分录,作为记账的依据。记账凭证又称入账凭证或记账凭证。是根据登记账簿的要求确定账户名称、记账方向、金额的记录。它是登记明细账和总账的基础
记账凭证是会计人员根据其经济业务内容,对经核实无误的原始凭证或汇总原始凭证进行分类整理,作为登记账簿依据的会计凭证。会计人员应当严格按照规定的格式和内容填写记账凭证。
拓展资料:
一、填制日期一般是会计人员填制记账凭证的日期。也可以根据管理需要填写经济业务发生日期或月末日期。比如差旅费报销要在记账凭证上填写报销日期的日期;在现金收付记账凭证上填写办理现金收付的日期;银行收款业务记账凭证一般按照财务会计部门收到银行回单或银行回单的盖章日期填写;当实际收款日期与银行盖章日期相差较大,或次月初收到上月银行收付凭证时,可按财务会计部门实际办理转账业务的日期填写;银行支付业务记账凭证一般在财务会计部门出具银行存款支付凭证之日或承诺之日填制;预提费用、分摊费用等转账业务记账凭证应于当月最后一日填制。
二、记账凭证的日期;在右上角填写制作收款凭证的顺序号;“摘要”应填写所记录的经济业务的简要说明;“信用账户”填写现金收入或银行存款对应的账户;“记账”是指凭证已在账簿上登记的标记,防止经济业务事项的重新记录或遗漏;“金额”是指经济业务事件的金额;凭证右侧的“XX附件”是指附在本记账凭证上的原始凭证数量;底部相关人员分别签字盖章,明确经济责任。
参考技术A 答:填写几张凭证的时候不打勾,登记账簿的时候才打勾,这样才知道哪些登记到账簿里去了,每登一个科目就在后面打一个勾本回答被提问者采纳

RE合同记账会计凭证

*&---------------------------------------------------------------------*
*& Title            : 不动产转租合同自动出成本                         *
*& Module           : RE                                               *
*& Author           : linxin                                           *
*& Create Date      : 11/11/2008                                       *
*& Program Type     : Report                                           *
*& SAP Release      : 4.6c                                             *
*& Description      : 不动产转租合同自动出成本                         *
*&                                                                     *
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*& 修改记录 :                                                          *
*& 日期        修改人           修改内容                               *
*& 2014/08/04  chenqy           取租赁合同时,排除类型为ZU80的         *
*&---------------------------------------------------------------------*

REPORT  zre_cost01 NO STANDARD PAGE HEADING
                LINE-SIZE 200 LINE-COUNT 30.

TYPE-POOLS: slis.

*-------------------------Table Definition-----------------------------*

TABLES:t001,bkpf,vicncn.

*-------------------------Internal Table Definition--------------------*

DATA: it_sort TYPE slis_t_sortinfo_alv  WITH HEADER LINE.
DATA: fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: gs_layout TYPE slis_layout_alv,
      i_events TYPE slis_t_event WITH HEADER LINE.
DATA: g_repid LIKE sy-repid.
DATA: msg(255) TYPE c.
DATA: v_lines TYPE i.

DATA: BEGIN OF i_out1 OCCURS 0,
        type(2) TYPE c,"A U AU
        zzht    LIKE   vicncn-recnnr,
        zlht    LIKE   vicncn-recnnr,
        zzmj    LIKE   vibdmeas-measvalue,"转租面积
        zlmj    LIKE   vibdmeas-measvalue,"租赁面积
        objnr   LIKE   vicncn-objnr,
        condtype LIKE vicdcond-condtype,
        dayfrom TYPE d,
        dayto TYPE d,
        condvalidfrom_zl LIKE vicdcond-condvalidfrom,
        condvalidto_zl LIKE vicdcond-condvalidto,
        gjahr   LIKE   bkpf-gjahr,
        monat   LIKE   bkpf-monat,
        bukrs   LIKE   vicncn-bukrs,
        recntxt LIKE   vicncn-recntxt,
        cost    LIKE   bseg-dmbtr,
      END OF i_out1.

DATA: BEGIN OF i_out2 OCCURS 0,
        type(2) TYPE c,"A U AU
        zzht    LIKE   vicncn-recnnr,
        zlht    LIKE   vicncn-recnnr,
        condtype LIKE vicdcond-condtype,
        dayfrom TYPE d,
        dayto TYPE d,
        condvalidfrom_zl LIKE vicdcond-condvalidfrom,
        condvalidto_zl LIKE vicdcond-condvalidto,
        gjahr   LIKE   bkpf-gjahr,
        monat   LIKE   bkpf-monat,
        bukrs   LIKE   vicncn-bukrs,
        kostl   LIKE   cobrb-kostl,
        recntxt LIKE   vicncn-recntxt,
        cost    LIKE   bseg-dmbtr,
      END OF i_out2.

DATA: BEGIN OF i_out3 OCCURS 0,
        bukrs   LIKE   vicncn-bukrs,
        gjahr   LIKE   bkpf-gjahr,
        monat   LIKE   bkpf-monat,
        zzht    LIKE   vicncn-recnnr,
        recntxt LIKE   vicncn-recntxt,
        kostl   LIKE   cobrb-kostl,
        cost    LIKE   bseg-dmbtr,
      END OF i_out3.
DATA: wa_out LIKE i_out3.
DATA: it_in LIKE i_out3 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF i_mon OCCURS 0,"月份
        monat LIKE   bkpf-monat,
      END OF i_mon.

DATA: BEGIN OF i_ym OCCURS 0,"年月
        ym(6) TYPE c,
      END OF i_ym.

DATA: BEGIN OF i_zzht OCCURS 0,"转租合同
        intreno LIKE   vibdro-intreno,
        bukrs   LIKE   vicncn-bukrs,
        recnnr  LIKE   vicncn-recnnr,
        recntxt LIKE   vicncn-recntxt,
        objnr   LIKE   vicncn-objnr,
      END OF i_zzht.

DATA: BEGIN OF i_ass1 OCCURS 0,"Object Assignment  IM
        objnrsrc   LIKE   vibdobjass-objnrsrc,
        objnrtrg   LIKE   vibdobjass-objnrtrg,
      END OF i_ass1.

DATA: BEGIN OF i_ro OCCURS 0,"Rental Object
        intreno LIKE   vibdro-intreno,
        objnr   LIKE   vibdro-objnr,
        bukrs   LIKE   vibdro-bukrs,
        swenr   LIKE   vibdro-swenr,
        sgenr   LIKE   vibdro-sgenr,
      END OF i_ro.

DATA: BEGIN OF i_bd OCCURS 0,"Building
        intreno LIKE vibdbu-intreno,
        objnr LIKE vibdbu-objnr,
        xgetxt  LIKE   vibdbu-xgetxt,
        bukrs   LIKE   vibdbu-bukrs,
        swenr   LIKE   vibdbu-swenr,
        sgenr   LIKE   vibdbu-sgenr,
      END OF i_bd.

DATA: BEGIN OF i_ass2 OCCURS 0,"Object Assignment  IB
        objnrsrc   LIKE   vibdobjass-objnrsrc,
        objnrtrg   LIKE   vibdobjass-objnrtrg,
      END OF i_ass2.

DATA: BEGIN OF i_zlht OCCURS 0,"租赁合同
        intreno LIKE   vicncn-intreno,
        bukrs   LIKE   vicncn-bukrs,
        recnnr  LIKE   vicncn-recnnr,
        recntxt LIKE   vicncn-recntxt,
        objnr   LIKE   vicncn-objnr,
      END OF i_zlht.

DATA: BEGIN OF i_mea1 OCCURS 0,"Measurement 转租合同
        intreno LIKE vibdmeas-intreno,
        validto LIKE vibdmeas-validto,
        validfrom LIKE vibdmeas-validfrom,
        meas    LIKE vibdmeas-meas,
        measvalue   LIKE   vibdmeas-measvalue,
      END OF i_mea1.
DATA: wa_mea1 LIKE STANDARD TABLE OF i_mea1 WITH HEADER LINE.

DATA: BEGIN OF i_mea2 OCCURS 0,"Measurement 租赁合同
        intreno LIKE vibdmeas-intreno,
        validto LIKE vibdmeas-validto,
        validfrom LIKE vibdmeas-validfrom,
        meas    LIKE vibdmeas-meas,
        measvalue   LIKE   vibdmeas-measvalue,
      END OF i_mea2.
DATA: wa_mea2 LIKE STANDARD TABLE OF i_mea2 WITH HEADER LINE.

DATA: BEGIN OF i_cobrb OCCURS 0,"结算规则cobrb
        objnr LIKE cobrb-objnr,
        gabja LIKE cobrb-gabja,
        gabpe LIKE cobrb-gabpe,
        gbisj LIKE cobrb-gbisj,
        gbisp LIKE cobrb-gbisp,
        prozs LIKE cobrb-prozs,"百分比
        perbz LIKE cobrb-perbz,
        bukrs LIKE cobrb-bukrs,
        kostl LIKE cobrb-kostl,
      END OF i_cobrb.

DATA: BEGIN OF i_condzz OCCURS 0,"条件(转租合同)
        intreno LIKE vicdcond-intreno,
        condtype LIKE vicdcond-condtype,
        condvalidfrom LIKE vicdcond-condvalidfrom,
        condvalidto LIKE vicdcond-condvalidto,
      END OF i_condzz.
DATA: wa_condzz LIKE i_condzz.

DATA: BEGIN OF i_condzl OCCURS 0,"条件(租赁合同)
        intreno LIKE vicdcond-intreno,
        condtype LIKE vicdcond-condtype,
        calcrule LIKE vicdcond-calcrule,"fomula
        termnorh LIKE vicdcond-termnorh,"Number of Frequency Term
        termnosr LIKE vicdcond-termnosr,"Number of Sales Term
        condvalidfrom LIKE vicdcond-condvalidfrom,
        condvalidto LIKE vicdcond-condvalidto,
        unitprice LIKE vicdcond-unitprice,
        monthcost LIKE  vicdcond-unitprice,"每月成本
END OF i_condzl.

DATA: BEGIN OF i_vitmrh OCCURS 0,
        intreno LIKE vitmrh-intreno,
        termtype LIKE vitmrh-termtype,
        termno LIKE vitmrh-termno,
        validfrom LIKE vitmrh-validfrom,
        frequency LIKE vitmrh-frequency,
        frequencyunit LIKE vitmrh-frequencyunit,
      END OF i_vitmrh.

DATA: BEGIN OF i_vicdcfpay OCCURS 0,
        intreno LIKE vicdcfpay-intreno,
        dbervon LIKE vicdcfpay-dbervon,
        dberbis LIKE vicdcfpay-dberbis,
        bnwhr LIKE vicdcfpay-bnwhr,
        atage LIKE vicdcfpay-atage,
        condtype LIKE vicdcfpay-condtype,
      END OF i_vicdcfpay.

*reporting rule相关
DATA: BEGIN OF i_visrtmsbrpi OCCURS 0,"Assignment of Reporting Rule to Sales Rule (Grading)
        intreno LIKE visrtmsbrpi-intreno,
        sbtermno LIKE visrtmsbrpi-sbtermno,
        rptermno LIKE visrtmsbrpi-rptermno,
        itemno LIKE visrtmsbrpi-itemno,
        rentpercent LIKE visrtmsbrpi-rentpercent,
      END OF i_visrtmsbrpi.
*
DATA: BEGIN OF i_visrtmrprh OCCURS 0,"Assignment of Frequency Rule to Reporting Rule
        intreno LIKE visrtmrprh-intreno,
        rptermno LIKE visrtmrprh-rptermno,
        rhythmtype LIKE visrtmrprh-rhythmtype,
        frequency LIKE visrtmrprh-frequency,
      END OF i_visrtmrprh.
*
DATA: BEGIN OF i_visrreport OCCURS 0,"Sales Report
        intreno LIKE visrreport-intreno,
        termno LIKE visrreport-termno,
        rhythmtype LIKE visrreport-rhythmtype,
        net_sales LIKE visrreport-net_sales,
        validfrom LIKE visrreport-validfrom,
        validto LIKE visrreport-validto,
        monthcost LIKE visrreport-net_sales,"每月成本
      END OF i_visrreport.

DATA: i_cost LIKE zre_cost01 OCCURS 0 WITH HEADER LINE.
DATA: wa_cost LIKE zre_cost01.

DATA: l_ym(6) TYPE c.
DATA: flag_exit TYPE c.
DATA: l_dbervon LIKE vicdcfpay-dbervon.
DATA: l_dberbis LIKE vicdcfpay-dberbis.
DATA: begin_day LIKE vicdcfpay-dbervon.
DATA: last_day LIKE vicdcfpay-dbervon.
DATA: all_day TYPE i.
DATA: i_status TYPE jstat OCCURS 0.
DATA: lin TYPE i .
DATA: v_tabix LIKE sy-tabix.
DATA: l_tabix LIKE sy-tabix.
DATA: l_monthcost1 LIKE vicdcond-unitprice.
DATA: l_monthcost2 LIKE vicdcond-unitprice.
DATA: l_monthcost3 LIKE vicdcond-unitprice.
DATA: l_monthcost LIKE vicdcond-unitprice.
DATA: day1 LIKE vibdmeas-validto.
DATA: day2 LIKE vibdmeas-validto.
DATA: day TYPE i.
DATA: day_ht TYPE i.
DATA: l_mear LIKE vibdmeas-measvalue.
DATA: v_char TYPE c.
DATA: l_bukrs LIKE bkpf-bukrs.
DATA: l_gjahr LIKE bkpf-gjahr.
DATA: l_monat LIKE bkpf-monat.
DATA: l_recnnr LIKE vicncn-recnnr.
DATA: gjahr LIKE bkpf-gjahr.
DATA: s_monat LIKE bkpf-monat.
DATA: l_ksrq(7) TYPE c.
DATA: v_ksrq(7) TYPE c.
DATA: v_jsrq(7) TYPE c.
DATA: BEGIN OF i_bukrs OCCURS 0,
        bukrs LIKE t001-bukrs,
      END OF i_bukrs.
RANGES: r_bukrs FOR t001-bukrs.

DATA: i_bkpf LIKE bkpf OCCURS 0 WITH HEADER LINE.
DATA: i_bseg LIKE bseg OCCURS 0 WITH HEADER LINE.
DATA: i_bkdf LIKE bkdf OCCURS 0 WITH HEADER LINE.
DATA: i_bsec LIKE bsec OCCURS 0 WITH HEADER LINE.
DATA: i_bsed LIKE bsed OCCURS 0 WITH HEADER LINE.
DATA: i_bset LIKE bset OCCURS 0 WITH HEADER LINE.

*-------------------------Selection Screen-----------------------------*

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_bukrs FOR t001-bukrs OBLIGATORY.
SELECT-OPTIONS s_zzht FOR vicncn-recnnr.
SELECT-OPTIONS s_zlht FOR vicncn-recnnr.
PARAMETERS: p_budat LIKE bkpf-budat OBLIGATORY.
PARAMETER p_cs AS CHECKBOX DEFAULT X.
SELECTION-SCREEN END   OF BLOCK block1.

*-------------------------Initialization-------------------------------*
INITIALIZATION.
  p_budat = sy-datum.

AT SELECTION-SCREEN.
  CLEAR i_bukrs.  REFRESH i_bukrs.
  CLEAR r_bukrs.  REFRESH r_bukrs.
  SELECT bukrs FROM t001 INTO CORRESPONDING FIELDS OF TABLE i_bukrs WHERE bukrs IN s_bukrs.
  IF i_bukrs[] IS INITIAL.
    MESSAGE e001(00) WITH 没有此公司代码,请检查输入!.
  ELSE.
    LOOP AT i_bukrs.
      AUTHORITY-CHECK OBJECT F_BKPF_BUK ID BUKRS FIELD i_bukrs-bukrs.
      IF sy-subrc = 0.
        r_bukrs-sign = I.
        r_bukrs-option = EQ.
        r_bukrs-low = i_bukrs-bukrs.
        APPEND r_bukrs.  CLEAR r_bukrs.
      ENDIF.
    ENDLOOP.
    IF r_bukrs[] IS INITIAL.
      MESSAGE e001(00) WITH 你没有操作此公司的权限!.
    ENDIF.
  ENDIF.

*--------------------------Start-of-Selection---------------------------*

START-OF-SELECTION.
  CLEAR: gjahr, s_monat.
  gjahr = p_budat+0(4).
  s_monat = p_budat+4(2).
  CLEAR flag_exit.
  PERFORM get_data.
  IF flag_exit = X.
    EXIT.
  ENDIF.
  PERFORM cal_cost.
  IF p_cs = X.
    PERFORM sub_output.
  ENDIF.
  IF p_cs = ‘‘.
    PERFORM process.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM get_data.
  DATA:flag(1) TYPE c.
  CLEAR: l_ym, l_dbervon, l_dberbis.
  l_ym+0(4) = gjahr.
  l_ym+4(2) = s_monat.
  l_dbervon+0(6) = l_ym.
  l_dbervon+6(2) = 01.
  CALL FUNCTION BKK_GET_MONTH_LASTDAY
    EXPORTING
      i_date = l_dbervon
    IMPORTING
      e_date = l_dberbis.

*取转租合同
  CLEAR i_zzht.  REFRESH i_zzht.

**** MODIFY BY lius AT 20111214 FOR 冒香香 BEGIN****
** 新添加的合同类型有‘ZO03’‘ZO04’‘ZO05’‘ZO40’‘ZO50’
*  SELECT intreno bukrs recnnr recntxt objnr INTO CORRESPONDING FIELDS OF TABLE i_zzht
*  FROM vicncn WHERE bukrs IN r_bukrs AND recnnr IN s_zzht AND recntype IN (‘ZO01‘,‘ZO02‘).
  SELECT intreno bukrs recnnr recntxt objnr
    INTO CORRESPONDING FIELDS OF TABLE i_zzht
    FROM vicncn
   WHERE bukrs IN r_bukrs
    AND recnnr IN s_zzht
****** MODIFY BY lius AT 20120326 FOR冒香香 BEGIN ****
** 增加新配置的合同类型:‘ZO60’(内部公司间办公区转租合同),‘ZO70’(内部公司间物流转租合同)
*    AND recntype IN (‘ZO01‘,‘ZO02‘,‘ZO03‘,‘ZO04‘,‘ZO05‘,‘ZO40‘,‘ZO50‘).
    AND recntype IN (ZO01,ZO02,ZO03,ZO04,ZO05,ZO40,ZO50,ZO60,ZO70).
****** MODIFY BY lius AT 20120326 FOR冒香香 END   ****

**** MODIFY BY lius AT 20111214 FOR 冒香香 END  ****

*将锁定的合同去掉
  LOOP AT i_zzht.
    CALL FUNCTION STATUS_READ
      EXPORTING
        objnr            = i_zzht-objnr
        only_active      = X
      TABLES
        status           = i_status
      EXCEPTIONS
        object_not_found = 1
        OTHERS           = 2.

    READ TABLE i_status TRANSPORTING NO FIELDS WITH KEY stat = I0119.   "激活
    IF sy-subrc EQ 0 .
      READ TABLE i_status TRANSPORTING NO FIELDS WITH KEY stat = I0064 . "主数据锁定
      IF sy-subrc EQ 0 .
        DELETE i_zzht.
      ELSE.
        READ TABLE i_status TRANSPORTING NO FIELDS WITH KEY stat = I0065 . "范围锁定
        IF sy-subrc EQ 0 .
          DELETE i_zzht.
        ENDIF.
      ENDIF.
    ELSE.
      DELETE i_zzht.
    ENDIF.
  ENDLOOP.

  DESCRIBE TABLE i_zzht LINES lin.
  IF lin < 1.
    flag_exit = X.
    WRITE:/10 无满足条件的转租合同!.
    EXIT.
  ENDIF.

*取转租合同条件
  SORT i_zzht BY intreno.
  CLEAR i_condzz.  REFRESH i_condzz.
  SELECT intreno condtype  condvalidfrom condvalidto INTO CORRESPONDING FIELDS OF TABLE i_condzz
  FROM vicdcond FOR ALL ENTRIES IN i_zzht WHERE intreno = i_zzht-intreno  AND conddelete = ‘‘.

*判断转租合同是否符合月份条件,去掉不符的,初步过滤
  LOOP AT i_zzht.
    CLEAR flag.
    LOOP AT i_condzz WHERE intreno = i_zzht-intreno.
      IF l_ym >= i_condzz-condvalidfrom+0(6) AND l_ym <= i_condzz-condvalidto+0(6).
        flag = X.
        EXIT.
      ENDIF.
    ENDLOOP.
    IF flag NE X.
      DELETE i_zzht.
    ENDIF.
  ENDLOOP.
  IF i_zzht[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足年度、月份条件的转租合同!.
    EXIT.
  ENDIF.

*取Object Assignment  IM
  SORT i_zzht BY objnr.
  CLEAR i_ass1.  REFRESH i_ass1.
  SELECT objnrsrc objnrtrg INTO CORRESPONDING FIELDS OF TABLE i_ass1 FROM vibdobjass
  FOR ALL ENTRIES IN i_zzht WHERE objnrsrc = i_zzht-objnr.
  SORT i_ass1 BY objnrtrg.
  LOOP AT i_ass1.
    IF i_ass1-objnrtrg+0(2) NE IM.
      DELETE i_ass1.
    ENDIF.
  ENDLOOP.
  IF i_ass1[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足条件的Object Assignment IM!.
    EXIT.
  ENDIF.

*取Rental Object
  CLEAR i_ro.  REFRESH i_ro.
  SELECT intreno objnr bukrs swenr sgenr INTO CORRESPONDING FIELDS OF TABLE i_ro
  FROM vibdro FOR ALL ENTRIES IN i_ass1 WHERE objnr = i_ass1-objnrtrg.
  IF i_ro[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足条件的Rental Object!.
    EXIT.
  ENDIF.
  SORT i_ro BY intreno.

*取转租面积
  CLEAR i_mea1.  REFRESH i_mea1.
  SELECT intreno validto validfrom meas measvalue INTO CORRESPONDING FIELDS OF TABLE i_mea1 FROM vibdmeas
  FOR ALL ENTRIES IN i_ro WHERE intreno = i_ro-intreno AND ( meas = Z001 OR meas = Z002 ).
  IF i_mea1[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足条件的转租合同Measurement!.
    EXIT.
  ELSE.
    CLEAR wa_mea1.  REFRESH wa_mea1.
    wa_mea1[] = i_mea1[].
  ENDIF.
  SORT i_ro BY bukrs swenr swenr.

*取Building
  CLEAR i_bd.  REFRESH i_bd.
  SELECT intreno objnr xgetxt bukrs swenr sgenr INTO CORRESPONDING FIELDS OF TABLE i_bd FROM vibdbu
  FOR ALL ENTRIES IN i_ro WHERE bukrs = i_ro-bukrs AND swenr =  i_ro-swenr AND sgenr = i_ro-sgenr.
  IF i_bd[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足条件的Building!.
    EXIT.
  ENDIF.
  SORT i_bd BY intreno.

*取租赁面积
  CLEAR i_mea2.  REFRESH i_mea2.
  SELECT intreno validto validfrom meas measvalue INTO CORRESPONDING FIELDS OF TABLE i_mea2 FROM vibdmeas
  FOR ALL ENTRIES IN i_bd WHERE intreno = i_bd-intreno AND ( meas = Z001 OR meas = Z002 ).
  IF i_mea2[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足条件的租赁合同Measurement!.
    EXIT.
  ELSE.
    CLEAR wa_mea2.  REFRESH wa_mea2.
    wa_mea2[] = i_mea2[].
  ENDIF.
  SORT i_bd BY objnr.

*取Object Assignment  IB
  CLEAR i_ass2.  REFRESH i_ass2.
  SELECT objnrsrc objnrtrg INTO CORRESPONDING FIELDS OF TABLE i_ass2 FROM vibdobjass
  FOR ALL ENTRIES IN i_bd WHERE objnrtrg = i_bd-objnr.
  IF i_ass2[] IS INITIAL.
    flag_exit = X.
    WRITE:/10 无满足条件的Object Assignment  IB!.
    EXIT.
  ENDIF.
  SORT i_ass2 BY objnrsrc.

*取租赁合同
  CLEAR i_zlht.  REFRESH i_zlht.
*** MODIFY BY CHENQY AT 20140804 FOR 冒香香 BEGIN ***
* 排除ZU80的合同
  "在根据规则(转租合同中的租赁对象取对应的建筑物,找出建筑物上所建立的合同)取租赁合同时(如下图),剔除合同类型(VICNCN-RECNTYPE)为ZU80的合同;
*  SELECT intreno bukrs recnnr recntxt objnr INTO CORRESPONDING FIELDS OF TABLE i_zlht FROM vicncn
*  FOR ALL ENTRIES IN i_ass2 WHERE objnr = i_ass2-objnrsrc AND recnnr IN s_zlht.
  SELECT intreno bukrs recnnr recntxt objnr
    INTO CORRESPONDING FIELDS OF TABLE i_zlht
    FROM vicncn
    FOR ALL ENTRIES IN i_ass2
    WHERE objnr = i_ass2-objnrsrc
      AND recnnr IN s_zlht
      AND recntype <> ZU80.
*** MODIFY BY CHENQY AT 20140804 FOR 冒香香 END ***

*将锁定的合同去掉
  LOOP AT i_zlht.
    CLEAR i_status[].
    CALL FUNCTION STATUS_READ
      EXPORTING
        objnr            = i_zlht-objnr
        only_active      = X
      TABLES
        status           = i_status
      EXCEPTIONS
        object_not_found = 1
        OTHERS           = 2.
    READ TABLE i_status TRANSPORTING NO FIELDS WITH KEY stat = I0119.   "激活
    IF sy-subrc EQ 0 .
      READ TABLE i_status TRANSPORTING NO FIELDS WITH KEY stat = I0064 . "主数据锁定
      IF sy-subrc EQ 0 .
        DELETE i_zlht.
      ELSE.
        READ TABLE i_status TRANSPORTING NO FIELDS WITH KEY stat = I0065 . "范围锁定
        IF sy-subrc EQ 0 .
          DELETE i_zlht.
        ENDIF.
      ENDIF.
    ELSE.
      DELETE i_zlht.
    ENDIF.
  ENDLOOP.

  DESCRIBE TABLE i_zlht LINES lin.
  IF lin < 1 .
    flag_exit = X.
    WRITE:/10 无满足条件的租赁合同!.
    EXIT.
  ENDIF.
  SORT i_zlht BY objnr.

*取租赁合同结算规则
  CLEAR i_cobrb.  REFRESH i_cobrb.
  SELECT objnr gabja gabpe gbisj gbisp prozs perbz bukrs kostl INTO CORRESPONDING FIELDS OF TABLE i_cobrb
  FROM cobrb FOR ALL ENTRIES IN i_zlht WHERE objnr = i_zlht-objnr.

*取租赁合同条件 fomula
  SORT i_zlht BY intreno.
  CLEAR i_condzl.  REFRESH i_condzl.
  SELECT intreno condtype calcrule termnorh termnosr condvalidfrom condvalidto unitprice
  INTO CORRESPONDING FIELDS OF TABLE i_condzl FROM vicdcond
  FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno AND conddelete = ‘‘.

*取期间天数
  CLEAR i_vicdcfpay.  REFRESH i_vicdcfpay.
  SELECT intreno dbervon dberbis bnwhr atage condtype FROM vicdcfpay INTO CORRESPONDING FIELDS OF TABLE i_vicdcfpay
  FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno
  AND ( ( dbervon <= l_dbervon AND dberbis >= l_dbervon ) OR ( dbervon <= l_dberbis AND dberbis >= l_dberbis ) ).

*Assignment of Reporting Rule to Sales Rule (Grading)
  CLEAR i_visrtmsbrpi.  REFRESH i_visrtmsbrpi.
  SELECT intreno sbtermno rptermno itemno rentpercent INTO CORRESPONDING FIELDS OF TABLE i_visrtmsbrpi
  FROM visrtmsbrpi FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno.

*Assignment of Frequency Rule to Reporting Rule
  CLEAR i_visrtmrprh.  REFRESH i_visrtmrprh.
  SELECT intreno rptermno rhythmtype frequency INTO CORRESPONDING FIELDS OF TABLE i_visrtmrprh
  FROM visrtmrprh FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno.

*Sales Report
  CLEAR i_visrreport.  REFRESH i_visrreport.
  SELECT intreno termno rhythmtype net_sales validfrom validto FROM visrreport
  INTO CORRESPONDING FIELDS OF TABLE i_visrreport
  FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno.
ENDFORM.                    "GET_DATA

*&---------------------------------------------------------------------*
*&      Form  cal_cost
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM cal_cost.
  DATA:flag(1) TYPE c.
*U 计算月成本
  SORT i_visrtmsbrpi BY intreno rptermno.
  LOOP AT i_visrreport.
    READ TABLE i_visrtmsbrpi WITH KEY intreno = i_visrreport-intreno rptermno = i_visrreport-termno.
    IF sy-subrc EQ 0.
      i_visrreport-monthcost = i_visrreport-net_sales * i_visrtmsbrpi-rentpercent / 100.
    ENDIF.
    MODIFY i_visrreport.
  ENDLOOP.
*A 计算月成本
  SORT i_vicdcfpay BY intreno.
  LOOP AT i_condzl WHERE calcrule = A.
    CLEAR l_monthcost.
    IF i_condzl-condvalidfrom+0(6) <= l_ym AND i_condzl-condvalidto+0(6) >= l_ym.
      LOOP AT i_vicdcfpay WHERE intreno = i_condzl-intreno AND condtype = i_condzl-condtype.
        CLEAR: begin_day, last_day, all_day, l_monthcost1, l_monthcost2, l_monthcost3.
        IF i_vicdcfpay-dbervon >= i_condzl-condvalidfrom AND i_vicdcfpay-dberbis <= i_condzl-condvalidto.
          IF i_vicdcfpay-atage <> 0.
            IF l_ym = i_vicdcfpay-dbervon+0(6) AND l_ym < i_vicdcfpay-dberbis+0(6).
              begin_day = i_vicdcfpay-dbervon.
              CALL FUNCTION BKK_GET_MONTH_LASTDAY
                EXPORTING
                  i_date = begin_day
                IMPORTING
                  e_date = last_day.
              all_day = last_day - begin_day + 1.
              l_monthcost1 = i_vicdcfpay-bnwhr * all_day / i_vicdcfpay-atage.
              l_monthcost = l_monthcost + l_monthcost1.
            ELSEIF l_ym = i_vicdcfpay-dberbis+0(6) AND l_ym >= i_vicdcfpay-dbervon+0(6).
              begin_day+0(6) = l_ym.
              begin_day+6(2) = 01.
              last_day = i_vicdcfpay-dberbis.
              all_day = last_day - begin_day + 1.
              l_monthcost2 = i_vicdcfpay-bnwhr * all_day / i_vicdcfpay-atage.
              l_monthcost = l_monthcost + l_monthcost2.
            ELSEIF l_ym > i_vicdcfpay-dbervon+0(6) AND l_ym < i_vicdcfpay-dberbis+0(6).
              begin_day+0(6) = l_ym.
              begin_day+6(2) = 01.
              CALL FUNCTION BKK_GET_MONTH_LASTDAY
                EXPORTING
                  i_date = begin_day
                IMPORTING
                  e_date = last_day.
              all_day = last_day - begin_day + 1.
              l_monthcost3 = i_vicdcfpay-bnwhr * all_day / i_vicdcfpay-atage.
              l_monthcost = l_monthcost + l_monthcost3.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.
    i_condzl-monthcost = l_monthcost.
    MODIFY i_condzl.
  ENDLOOP.

*计算每个合同的成本(分月)
*计算类别有A U AU 3类
*这里,假定condtionvalidfrom 和condtionvalidto 不会是同一年月的
  DATA:l_ac TYPE i.
  DATA:l_uc TYPE i.
  DATA:lastd TYPE d.
  DATA:days TYPE i.
  DATA:daym TYPE i."月份的天数
  DATA:daycost LIKE vicdcond-unitprice.
  DATA:dayfrom TYPE d.
  DATA:dayto TYPE d.
  SORT i_ass1 BY objnrsrc.
  SORT i_ro BY objnr.
  SORT i_bd BY bukrs swenr sgenr.
  SORT i_ass2 BY objnrtrg.
  SORT i_zlht BY objnr.
  SORT i_condzz BY intreno condvalidfrom.
  SORT i_condzl BY intreno condvalidfrom.
  SORT i_mea1 BY intreno.
  SORT wa_mea1 BY intreno validfrom.
  SORT i_mea2 BY intreno.
  SORT wa_mea2 BY intreno validfrom.
  SORT i_visrtmsbrpi BY intreno sbtermno.
  SORT i_visrreport BY intreno termno validfrom validto.
  SORT i_visrtmrprh BY intreno rptermno rhythmtype.

  LOOP AT i_zzht.
    CLEAR i_out1.
*计算 dayfrom,dayto
    CLEAR:dayfrom,dayto.
    SORT i_condzz BY condvalidfrom.
    LOOP AT i_condzz WHERE intreno = i_zzht-intreno.
      CLEAR: v_tabix, l_tabix, wa_condzz.
      v_tabix = sy-tabix.
      l_tabix = v_tabix + 1.
      IF i_condzz-condvalidfrom+0(6) = l_ym AND l_ym < i_condzz-condvalidto+0(6).
        IF dayfrom IS INITIAL.
          dayfrom = i_condzz-condvalidfrom.
        ENDIF.
        IF dayto IS INITIAL.
          dayto = i_condzz-condvalidto.
        ENDIF.
        READ TABLE i_condzz INTO wa_condzz INDEX l_tabix.
        IF sy-subrc = 0.
          IF i_condzz-condvalidto+0(6) = wa_condzz-condvalidfrom+0(6).
            dayto = i_condzz-condvalidto.
            CONTINUE.
          ENDIF.
        ENDIF.
      ELSEIF i_condzz-condvalidto+0(6) = l_ym AND l_ym > i_condzz-condvalidfrom+0(6).
        IF dayfrom IS INITIAL.
          dayfrom = i_condzz-condvalidfrom.
        ENDIF.
        IF dayto IS INITIAL.
          dayto = i_condzz-condvalidto.
        ENDIF.
        READ TABLE i_condzz INTO wa_condzz INDEX l_tabix.
        IF sy-subrc = 0.
          IF i_condzz-condvalidto+0(6) = wa_condzz-condvalidfrom+0(6).
            dayto = i_condzz-condvalidto.
            CONTINUE.
          ENDIF.
        ENDIF.
      ELSEIF i_condzz-condvalidfrom+0(6) < l_ym AND l_ym < i_condzz-condvalidto+0(6).
        IF dayfrom IS INITIAL.
          dayfrom = i_condzz-condvalidfrom.
        ENDIF.
        IF dayto IS INITIAL.
          dayto = i_condzz-condvalidto.
        ENDIF.
        READ TABLE i_condzz INTO wa_condzz INDEX l_tabix.
        IF sy-subrc = 0.
          IF i_condzz-condvalidto+0(6) = wa_condzz-condvalidfrom+0(6).
            dayto = i_condzz-condvalidto.
            CONTINUE.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDLOOP.
    IF dayfrom IS INITIAL OR dayto IS INITIAL.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
    i_out1-dayfrom = dayfrom.i_out1-dayto = dayto.
    SORT i_condzz BY intreno.
    READ TABLE i_condzz WITH KEY intreno = i_zzht-intreno.
    IF sy-subrc NE 0.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
    READ TABLE i_ass1 WITH KEY objnrsrc = i_zzht-objnr.
    IF sy-subrc NE 0.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
    READ TABLE i_ro WITH KEY objnr = i_ass1-objnrtrg.
    IF sy-subrc NE 0.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
    READ TABLE i_mea1 WITH KEY intreno = i_ro-intreno.
    IF sy-subrc NE 0.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
*取租赁面积
    CLEAR: l_mear, day_ht.
    LOOP AT wa_mea1 WHERE intreno = i_ro-intreno.
      CLEAR: day1, day2, day.
      IF l_ym = wa_mea1-validfrom+0(6) AND l_ym < wa_mea1-validto+0(6).
        day1 = wa_mea1-validfrom.
        CALL FUNCTION BKK_GET_MONTH_LASTDAY
          EXPORTING
            i_date = day1
          IMPORTING
            e_date = day2.
        day = day2 - day1 + 1.
      ELSEIF l_ym = wa_mea1-validto+0(6) AND l_ym > wa_mea1-validfrom+0(6).
        day1+0(6) = l_ym.
        day1+6(2) = 01.
        day2 = wa_mea1-validto.
        day = day2 - day1 + 1.
      ELSEIF l_ym > wa_mea1-validfrom+0(6) AND l_ym < wa_mea1-validto+0(6).
        day1+0(6) = l_ym.
        day1+6(2) = 01.
        CALL FUNCTION BKK_GET_MONTH_LASTDAY
          EXPORTING
            i_date = day1
          IMPORTING
            e_date = day2.
        day = day2 - day1 + 1.
      ENDIF.
      IF day > day_ht.
        day_ht = day.
        l_mear = wa_mea1-measvalue.
      ENDIF.
      CLEAR wa_mea1.
    ENDLOOP.
    i_out1-zzmj = l_mear.
    READ TABLE i_bd WITH KEY bukrs = i_ro-bukrs swenr = i_ro-swenr sgenr = i_ro-sgenr.
    IF sy-subrc NE 0.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
    READ TABLE i_mea2 WITH KEY intreno = i_bd-intreno.
    IF sy-subrc NE 0.
      CLEAR i_zzht.
      CONTINUE.
    ENDIF.
*取转租面积
    CLEAR: l_mear, day_ht.
    LOOP AT wa_mea2 WHERE intreno = i_bd-intreno.
      CLEAR: day1, day2, day.
      IF l_ym = wa_mea2-validfrom+0(6) AND l_ym < wa_mea2-validto+0(6).
        day1 = wa_mea2-validfrom.
        CALL FUNCTION BKK_GET_MONTH_LASTDAY
          EXPORTING
            i_date = day1
          IMPORTING
            e_date = day2.
        day = day2 - day1 + 1.
      ELSEIF l_ym = wa_mea2-validto+0(6) AND l_ym > wa_mea2-validfrom+0(6).
        day1+0(6) = l_ym.
        day1+6(2) = 01.
        day2 = wa_mea2-validto.
        day = day2 - day1 + 1.
      ELSEIF l_ym > wa_mea2-validfrom+0(6) AND l_ym < wa_mea2-validto+0(6).
        day1+0(6) = l_ym.
        day1+6(2) = 01.
        CALL FUNCTION BKK_GET_MONTH_LASTDAY
          EXPORTING
            i_date = day1
          IMPORTING
            e_date = day2.
        day = day2 - day1 + 1.
      ENDIF.
      IF day > day_ht.
        day_ht = day.
        l_mear = wa_mea2-measvalue.
      ENDIF.
      CLEAR wa_mea2.
    ENDLOOP.
    i_out1-zlmj = l_mear.
    i_out1-recntxt = i_zzht-recntxt.
    LOOP AT i_ass2 WHERE  objnrtrg = i_bd-objnr.
      READ TABLE i_zlht WITH KEY objnr = i_ass2-objnrsrc.
      IF sy-subrc NE 0.
        CONTINUE.
      ENDIF.
      i_out1-zzht = i_zzht-recnnr.
      i_out1-zlht = i_zlht-recnnr.
      i_out1-objnr = i_zlht-objnr.
      i_out1-bukrs = i_zlht-bukrs.
      i_out1-gjahr = gjahr.
      CLEAR: l_ac, l_uc.
      LOOP AT i_condzl WHERE intreno = i_zlht-intreno.
        IF i_condzl-calcrule = A.l_ac = l_ac + 1.ENDIF.
        IF i_condzl-calcrule = U.l_uc = l_uc + 1.ENDIF.
      ENDLOOP.
      IF l_ac > 0 AND l_uc = 0.i_out1-type = A.ENDIF.
      IF l_uc > 0 AND l_ac = 0.i_out1-type = U.ENDIF.
      IF l_uc > 0 AND l_ac > 0.i_out1-type = AU.ENDIF.
      IF i_out1-type = AU.
        DATA:l_u LIKE visrreport-net_sales.
        DATA:l_a LIKE i_condzl-unitprice.
        DATA:l_flag1(1) TYPE c.
        DATA:l_flag2(1) TYPE c.
        i_out1-monat = l_ym+4(2).
        CLEAR:l_u,l_a,l_flag1,l_flag2.
        LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = U.
          READ TABLE i_visrtmsbrpi WITH KEY intreno = i_zlht-intreno sbtermno = i_condzl-termnosr.
          IF sy-subrc NE 0.
            CONTINUE.
          ENDIF.
          CLEAR i_visrreport.
          LOOP AT i_visrreport WHERE intreno = i_zlht-intreno AND termno = i_visrtmsbrpi-rptermno AND validfrom+0(6) <= l_ym AND validto+0(6) >= l_ym.
            EXIT.
          ENDLOOP.
          IF i_visrreport IS INITIAL.
            CONTINUE.
          ENDIF.
          IF l_ym EQ i_visrreport-validto+0(6).
            l_flag1 = X.
            l_u = i_visrreport-monthcost.
          ENDIF.
        ENDLOOP.
        IF l_flag1 EQ X.
          i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
          i_out1-condvalidto_zl = i_condzl-condvalidto.
          READ TABLE i_visrtmrprh WITH KEY intreno = i_visrreport-intreno rptermno = i_visrreport-termno
                                                                          rhythmtype = i_visrreport-rhythmtype.
          IF sy-subrc NE 0.
            CONTINUE.
          ENDIF.
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = A.
            l_a = l_a + i_condzl-unitprice.  "i_condzl-monthcost * i_visrtmrprh-frequency.
          ENDLOOP.
          IF l_a > l_u.
            CONTINUE.
          ENDIF.
          i_out1-cost = l_u - l_a.
          i_out1-condtype = i_condzl-condtype.
          APPEND i_out1.
        ENDIF.
      ENDIF.

      IF i_out1-type = A OR i_out1-type = AU.
        i_out1-monat = l_ym+4(2).
        IF l_ym = dayfrom+0(6).
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = A.
            i_out1-condtype = i_condzl-condtype.
            i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
            i_out1-condvalidto_zl = i_condzl-condvalidto.
            lastd = sy-datum.
            lastd+0(6) = l_ym.
            CALL FUNCTION LAST_DAY_OF_MONTHS
              EXPORTING
                day_in            = lastd
              IMPORTING
                last_day_of_month = lastd
              EXCEPTIONS
                day_in_no_date    = 1
                OTHERS            = 2.
            daym = lastd+6(2)."月份的天数
            days = lastd - dayfrom + 1."天数计算
            daycost = i_condzl-monthcost / daym.
            i_out1-cost = days * daycost.
            APPEND i_out1.
          ENDLOOP.
        ENDIF.
        IF l_ym = dayto+0(6).
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = A.
            i_out1-condtype = i_condzl-condtype.
            i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
            i_out1-condvalidto_zl = i_condzl-condvalidto.
            lastd = sy-datum.
            lastd+0(6) = l_ym.
            CALL FUNCTION LAST_DAY_OF_MONTHS
              EXPORTING
                day_in            = lastd
              IMPORTING
                last_day_of_month = lastd
              EXCEPTIONS
                day_in_no_date    = 1
                OTHERS            = 2.
            daym = lastd+6(2)."月份的天数
            days = dayto+6(2)."天数计算
            daycost = i_condzl-monthcost / daym.
            i_out1-cost = days * daycost.
            APPEND i_out1.
          ENDLOOP.
        ENDIF.
        IF l_ym > dayfrom+0(6) AND l_ym < dayto+0(6).
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = A.
            i_out1-condtype = i_condzl-condtype.
            i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
            i_out1-condvalidto_zl = i_condzl-condvalidto.
            i_out1-cost = i_condzl-monthcost.
            APPEND i_out1.
          ENDLOOP.
        ENDIF.
      ENDIF."TYPE A

      IF i_out1-type = U.
        i_out1-monat = l_ym+4(2).
        IF l_ym = dayfrom+0(6).
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = U.
            IF i_condzl-condtype NE Z290 AND i_condzl-condtype NE Z900.
              CONTINUE.
            ENDIF.
            READ TABLE i_visrtmsbrpi WITH KEY intreno = i_zlht-intreno sbtermno = i_condzl-termnosr.
            IF sy-subrc NE 0.
              CONTINUE.
            ENDIF.
            CLEAR i_visrreport.
            LOOP AT i_visrreport WHERE intreno = i_zlht-intreno AND termno = i_visrtmsbrpi-rptermno AND validfrom+0(6) <= l_ym AND validto+0(6) >= l_ym.
              EXIT.
            ENDLOOP.
            IF i_visrreport IS INITIAL.
              CONTINUE.
            ENDIF.
            i_out1-condtype = i_condzl-condtype.
            i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
            i_out1-condvalidto_zl = i_condzl-condvalidto.
            lastd = sy-datum.
            lastd+0(6) = l_ym.
            CALL FUNCTION LAST_DAY_OF_MONTHS
              EXPORTING
                day_in            = lastd
              IMPORTING
                last_day_of_month = lastd
              EXCEPTIONS
                day_in_no_date    = 1
                OTHERS            = 2.
            daym = lastd+6(2)."月份的天数
            days = lastd - dayfrom + 1."天数计算
            daycost = i_visrreport-monthcost / daym.
            i_out1-cost = days * daycost.
            APPEND i_out1.
          ENDLOOP.
        ENDIF.
        IF l_ym = dayto+0(6).
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = U.
            IF i_condzl-condtype NE Z290 AND i_condzl-condtype NE Z900.
              CONTINUE.
            ENDIF.
            READ TABLE i_visrtmsbrpi WITH KEY intreno = i_zlht-intreno sbtermno = i_condzl-termnosr.
            IF sy-subrc NE 0.
              CONTINUE.
            ENDIF.
            CLEAR i_visrreport.
            LOOP AT i_visrreport WHERE intreno = i_zlht-intreno AND termno = i_visrtmsbrpi-rptermno AND validfrom+0(6) <= l_ym AND validto+0(6) >= l_ym.
              EXIT.
            ENDLOOP.
            IF i_visrreport IS INITIAL.
              CONTINUE.
            ENDIF.
            i_out1-condtype = i_condzl-condtype.
            i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
            i_out1-condvalidto_zl = i_condzl-condvalidto.
            lastd = sy-datum.
            lastd+0(6) = l_ym.
            CALL FUNCTION LAST_DAY_OF_MONTHS
              EXPORTING
                day_in            = lastd
              IMPORTING
                last_day_of_month = lastd
              EXCEPTIONS
                day_in_no_date    = 1
                OTHERS            = 2.
            daym = lastd+6(2)."月份的天数
            days = dayto+6(2)."天数计算
            daycost = i_visrreport-monthcost / daym.
            i_out1-cost = days * daycost.
            APPEND i_out1.
          ENDLOOP.
        ENDIF.
        IF l_ym > dayfrom+0(6) AND l_ym < dayto+0(6).
          LOOP AT i_condzl WHERE intreno = i_zlht-intreno AND condvalidfrom+0(6) <= l_ym AND condvalidto+0(6) >= l_ym AND calcrule = U.
            IF i_condzl-condtype NE Z290 AND i_condzl-condtype NE Z900.
              CONTINUE.
            ENDIF.
            READ TABLE i_visrtmsbrpi WITH KEY intreno = i_zlht-intreno sbtermno = i_condzl-termnosr.
            IF sy-subrc NE 0.
              CONTINUE.
            ENDIF.
            CLEAR i_visrreport.
            LOOP AT i_visrreport WHERE intreno = i_zlht-intreno AND termno = i_visrtmsbrpi-rptermno AND validfrom+0(6) <= l_ym AND validto+0(6) >= l_ym.
              EXIT.
            ENDLOOP.
            IF i_visrreport IS INITIAL.
              CONTINUE.
            ENDIF.
            i_out1-condtype = i_condzl-condtype.
            i_out1-condvalidfrom_zl = i_condzl-condvalidfrom.
            i_out1-condvalidto_zl = i_condzl-condvalidto.
            i_out1-cost = i_visrreport-monthcost.
            APPEND i_out1.
          ENDLOOP.
        ENDIF.
      ENDIF."TYPE U
    ENDLOOP.                                                "ASS2
  ENDLOOP."ZZHT

*分摊-成本中心
*面积
  DATA:l_cost LIKE i_out2-cost.
  DATA: v_flag TYPE c.
  DATA: v_kostl TYPE kostl.
  LOOP AT i_out1.
    CLEAR l_cost.
    MOVE-CORRESPONDING i_out1 TO i_out2.
    IF i_out1-zlmj EQ 0.
      CONTINUE.
    ENDIF.
    IF i_out1-zlmj NE 0.
      l_cost = i_out1-cost / i_out1-zlmj * i_out1-zzmj.
    ENDIF.
    CLEAR: v_flag, v_kostl, l_ksrq.
    CONCATENATE p_budat+0(4) 0 p_budat+4(2) INTO l_ksrq.
    LOOP AT i_cobrb WHERE objnr = i_out1-objnr.
      IF i_cobrb-gabja = 0000 AND i_cobrb-gbisj = 0000.
        IF i_cobrb-kostl+4(1) = Y.
          v_flag = X.
          v_kostl = i_cobrb-kostl.
          EXIT.
        ENDIF.
      ELSE.
        CLEAR: v_ksrq, v_jsrq.
        CONCATENATE i_cobrb-gabja i_cobrb-gabpe INTO v_ksrq.
        CONCATENATE i_cobrb-gbisj i_cobrb-gbisp INTO v_jsrq.
        IF ( v_ksrq = 0000000 AND l_ksrq <= v_jsrq ) OR ( v_jsrq = 0000000 AND v_ksrq <= l_ksrq ).
        ELSE.
          DELETE i_cobrb.
          CLEAR i_cobrb.
          CONTINUE.
        ENDIF.
        IF i_cobrb-kostl+4(1) = Y.
          v_flag = X.
          v_kostl = i_cobrb-kostl.
          EXIT.
        ENDIF.
      ENDIF.
    ENDLOOP.
    IF v_flag = X.
      i_out2-kostl = v_kostl.
      i_out2-cost = l_cost.
      COLLECT i_out2.
    ELSE.
      LOOP AT i_cobrb WHERE objnr = i_out1-objnr.
        i_out2-kostl = i_cobrb-kostl.
        i_out2-cost = l_cost * i_cobrb-prozs / 100.
        COLLECT i_out2.
      ENDLOOP.
    ENDIF.
  ENDLOOP.

  LOOP AT i_out2.
    MOVE-CORRESPONDING i_out2 TO i_out3.
    COLLECT i_out3.
  ENDLOOP.
  SORT i_out3 BY bukrs gjahr monat zzht.
ENDFORM.                    "cal_cost

*&---------------------------------------------------------------------*
*&      Form  sub_output
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*

FORM sub_output.
  g_repid = sy-repid.
  REFRESH fieldcat[].

  fieldcat-fieldname    = BUKRS.
  fieldcat-ref_tabname = BKPF.
  APPEND fieldcat.
  CLEAR fieldcat.

  fieldcat-fieldname    = GJAHR.
  fieldcat-ref_tabname = BKPF.
  APPEND fieldcat.
  CLEAR fieldcat.

  fieldcat-fieldname    = MONAT.
  fieldcat-ref_tabname = BKPF.
  APPEND fieldcat.
  CLEAR fieldcat.

  fieldcat-fieldname    = ZZHT.
  fieldcat-reptext_ddic = 合同号.
  APPEND fieldcat.
  CLEAR fieldcat.

  fieldcat-fieldname    = KOSTL.
  fieldcat-ref_tabname = BSEG.
  APPEND fieldcat.
  CLEAR fieldcat.

  fieldcat-fieldname    = COST.
  fieldcat-reptext_ddic = 金额.
  APPEND fieldcat.
  CLEAR fieldcat.

  gs_layout-coltab_fieldname  = COLOR_CELL.
  gs_layout-zebra             = X.
  gs_layout-colwidth_optimize = X.

  CALL FUNCTION REUSE_ALV_GRID_DISPLAY
    EXPORTING
      i_callback_program = g_repid
      is_layout          = gs_layout
      it_fieldcat        = fieldcat[]
      i_save             = A
    TABLES
      t_outtab           = i_out3
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  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.                    "sub_output

*&---------------------------------------------------------------------*
*&      Form  process
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM process.
  DELETE i_out3 WHERE cost = 0.
  SORT i_out3 BY bukrs gjahr monat zzht.
  LOOP AT i_out3 INTO wa_out.
    CLEAR wa_cost.
    SELECT SINGLE * FROM zre_cost01 INTO wa_cost WHERE bukrs = wa_out-bukrs AND kostl = wa_out-kostl AND recnnr = wa_out-zzht
                                                   AND gjahr = wa_out-gjahr AND monat = wa_out-monat AND status = S.
    IF sy-subrc = 0.
      WRITE: /10 wa_out-bukrs, wa_out-gjahr, wa_out-monat, wa_out-zzht, wa_out-kostl, 已出成本,无需重复执行!.
      CLEAR wa_out.
      CONTINUE.
    ENDIF.

    CLEAR: v_char, l_bukrs, l_gjahr, l_monat, l_recnnr.
    AT END OF zzht.
      v_char = X.
      l_bukrs = wa_out-bukrs.
      l_gjahr = wa_out-gjahr.
      l_monat = wa_out-monat.
      l_recnnr = wa_out-zzht.
    ENDAT.

    IF v_char = ‘‘.
      CONTINUE.
    ELSE.
      CLEAR it_in.  REFRESH it_in.
      LOOP AT i_out3 INTO wa_out WHERE bukrs = l_bukrs AND gjahr = l_gjahr AND monat = l_monat AND zzht = l_recnnr.
        MOVE-CORRESPONDING wa_out TO it_in.
        APPEND it_in.
        CLEAR: wa_out, it_in.
      ENDLOOP.
      PERFORM fb01 TABLES it_in.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "SAVE

*&---------------------------------------------------------------------*
*&      Form  FB01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM fb01 TABLES it_in STRUCTURE i_out3.
  DATA: error_flag(1) TYPE c.
  DATA: c1(20) TYPE c.
  DATA: c2(20) TYPE c.
  DATA: c3(20) TYPE c.
  DATA: belnr_ou LIKE bkpf-belnr.
  DATA: bukrs_ou LIKE bkpf-bukrs.
  DATA: gjahr_ou LIKE bkpf-bukrs.
  DATA: documentheader LIKE bapiache09.
  DATA: accountgl LIKE bapiacgl09 OCCURS 0 WITH HEADER LINE.
  DATA: currencyamount LIKE bapiaccr09 OCCURS 0 WITH HEADER LINE.
  DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
  DATA: realestate LIKE bapiacre09 OCCURS 0 WITH HEADER LINE.
  DATA: l_currency LIKE bapiaccr09-currency.
****** ADD BY MENGJW 20130815 FOR 黄秀娟 BEGIN ******
  DATA:lt_criteria           TYPE STANDARD TABLE OF bapiackec9,
       ls_criteria           TYPE bapiackec9.
  DATA:BEGIN OF gs_vicncn,
       objnr LIKE vicncn-objnr,
       END OF gs_vicncn,
       gt_vicncn LIKE STANDARD TABLE OF gs_vicncn.
  DATA:BEGIN OF gs_cobrb,
       paobjnr LIKE cobrb-paobjnr,
       gabja LIKE cobrb-gabja,
       gabpe LIKE cobrb-gabpe,
       gbisj LIKE cobrb-gbisj,
       gbisp LIKE cobrb-gbisp,
       END OF gs_cobrb,
       gt_cobrb LIKE STANDARD TABLE OF gs_cobrb.
  DATA:lv_kmvkbu LIKE ce4snjt_acct-kmvkbu.
  DATA:lv_paobjnr LIKE cobrb-paobjnr.
****** ADD BY MENGJW 20130815 FOR 黄秀娟  END  ******

  DATA:l_line TYPE i.
  DATA:l_budat  LIKE bkpf-budat.
  DATA:l_total  LIKE bseg-dmbtr.
  DATA:l_recntxt LIKE vicncn-recntxt.
  DATA:l_sgtxt LIKE bseg-sgtxt.
  l_budat = sy-datum.
  LOOP AT it_in.
    l_total = l_total + it_in-cost.
  ENDLOOP.
  READ TABLE it_in INDEX 1.
  l_budat+0(4) = it_in-gjahr.
  l_budat+4(2) = it_in-monat.
  CALL FUNCTION LAST_DAY_OF_MONTHS
    EXPORTING
      day_in            = l_budat
    IMPORTING
      last_day_of_month = l_budat
    EXCEPTIONS
      day_in_no_date    = 1
      OTHERS            = 2.

  CLEAR: documentheader, accountgl, currencyamount, return, realestate, wa_cost, i_cost.
  REFRESH: accountgl, currencyamount, return, realestate, i_cost.
****** ADD BY MENGJW 20130815 FOR 黄秀娟 BEGIN ******
  CLEAR:lt_criteria,ls_criteria,lv_paobjnr.
****** ADD BY MENGJW 20130815 FOR 黄秀娟  END  ******
  documentheader-bus_act = RFBU.
  documentheader-username   = sy-uname.
  documentheader-header_txt = 不动产转租合同自动成本.
  documentheader-comp_code  = it_in-bukrs.
  documentheader-doc_date   = sy-datum.
  documentheader-pstng_date = l_budat.
  documentheader-doc_type   = TZ.
  CLEAR l_currency.
  SELECT SINGLE waers FROM t001 INTO l_currency WHERE bukrs = it_in-bukrs.

*取行项目文本
  CLEAR: l_recntxt, l_sgtxt.
  l_recntxt = it_in-recntxt.
  SEARCH l_recntxt  FOR 转租合同 IN CHARACTER MODE.
  IF sy-subrc EQ 0 AND sy-fdpos GT 0.
    l_recntxt = l_recntxt(sy-fdpos).
  ENDIF.
  CONCATENATE gjahr  s_monat  l_recntxt 转租成本 INTO l_sgtxt.

*借: 5405090110 其他业务成本-租赁费
  l_line = l_line + 1.
  accountgl-itemno_acc = l_line.
  accountgl-gl_account = 5405090110.
  accountgl-comp_code  = it_in-bukrs.
  accountgl-alloc_nmbr = it_in-zzht.
  accountgl-item_text  = l_sgtxt.
  accountgl-pstng_date = l_budat.
  accountgl-doc_type   = TZ.
  APPEND accountgl.
*
  currencyamount-itemno_acc = l_line.
  currencyamount-currency   = l_currency.
  currencyamount-amt_doccur = l_total.
  APPEND currencyamount.
  CLEAR accountgl.CLEAR currencyamount.
*
****** MODIFY BY MENGJW 20130815 FOR 黄秀娟 BEGIN ******
**将不动产合同号写入不动产对象中
*  realestate-itemno_acc  = l_line.
*  realestate-contract_no = l_recnnr.
*  APPEND realestate.  CLEAR realestate.
  SELECT objnr
  FROM vicncn
  INTO CORRESPONDING FIELDS OF TABLE gt_vicncn
  WHERE  recnnr = it_in-zzht.

  IF gt_vicncn IS NOT INITIAL.
    SELECT paobjnr gabja gabpe gbisj gbisp
    FROM cobrb
    INTO CORRESPONDING FIELDS OF TABLE gt_cobrb
    FOR ALL ENTRIES IN gt_vicncn
    WHERE objnr = gt_vicncn-objnr.
  ENDIF.
  LOOP AT gt_cobrb INTO gs_cobrb.
    IF gs_cobrb-gbisj = 0000.
      gs_cobrb-gbisj = 9999.
    ENDIF.
    IF gs_cobrb-gbisp = 000.
      gs_cobrb-gbisp = 012.
    ENDIF.
    IF gs_cobrb-gabja <= p_budat+0(4) AND gs_cobrb-gabpe+1(2) <= p_budat+4(2)
    AND gs_cobrb-gbisj >= p_budat+0(4) AND gs_cobrb-gbisp+1(2) >= p_budat+4(2).
      lv_paobjnr = gs_cobrb-paobjnr.
    ENDIF.
  ENDLOOP.
  SELECT SINGLE kmvkbu
  FROM ce4snjt_acct
  INTO lv_kmvkbu
  WHERE aktbo = X
  AND paobjnr = lv_paobjnr
  AND pasubnr = 1.

  ls_criteria-itemno_acc = l_line.
  ls_criteria-fieldname = KMVKBU.
  ls_criteria-character = lv_kmvkbu.
  APPEND ls_criteria TO lt_criteria.
  CLEAR:ls_criteria.
*  ls_criteria-itemno_acc = l_line.
*  ls_criteria-fieldname = ‘PAOBJNR‘.
*  ls_criteria-character = gs_cobrb-paobjnr.
*  APPEND ls_criteria TO lt_criteria.
*  CLEAR:ls_criteria.
****** MODIFY BY MENGJW 20130815 FOR 黄秀娟  END  ******
*贷: 5501280000 租赁费 – 成本中心1
  LOOP AT it_in.
    l_line = l_line + 1.
    accountgl-itemno_acc = l_line.
    accountgl-costcenter = it_in-kostl.
    accountgl-gl_account = 5501280000.
    accountgl-comp_code  = it_in-bukrs.
    accountgl-alloc_nmbr = it_in-zzht.
    accountgl-item_text  = l_sgtxt.
    accountgl-pstng_date = l_budat.
    accountgl-doc_type    = TZ.
    APPEND accountgl.
*
    currencyamount-itemno_acc = l_line.
    currencyamount-currency   = l_currency.
    currencyamount-amt_doccur = - it_in-cost.
    APPEND currencyamount.
    CLEAR accountgl.CLEAR currencyamount.
  ENDLOOP.
*
  CALL FUNCTION BAPI_ACC_DOCUMENT_POST
    EXPORTING
      documentheader = documentheader
    TABLES
      accountgl      = accountgl
      currencyamount = currencyamount
      return         = return
      realestate     = realestate
****** ADD BY MENGJW 20130816 FOR 黄秀娟 BEGIN ******
      criteria       = lt_criteria
****** ADD BY MENGJW 20130816 FOR 黄秀娟  END  ******
    EXCEPTIONS
      OTHERS         = 1.
  IF sy-subrc <> 0.
    CALL FUNCTION BAPI_TRANSACTION_ROLLBACK
      IMPORTING
        return = return.
  ELSE.
    LOOP AT return.
      IF NOT return IS INITIAL.
        IF return-type = A OR return-type = E.
          CONCATENATE msg ~ return-message   INTO msg.
          error_flag = X.
        ENDIF.
      ENDIF.
    ENDLOOP.
    IF error_flag = X.
      LOOP AT it_in.
        wa_cost-bukrs = it_in-bukrs.
        wa_cost-kostl = it_in-kostl.
        wa_cost-recnnr = it_in-zzht.
        wa_cost-gjahr = it_in-gjahr.
        wa_cost-monat = it_in-monat.
        wa_cost-wrbtr = it_in-cost.
        wa_cost-waers = l_currency.
        wa_cost-bukrs_ou = ‘‘.
        wa_cost-belnr_ou = ‘‘.
        wa_cost-gjahr_ou = ‘‘.
        wa_cost-status = E.
        wa_cost-error = msg.
        APPEND wa_cost TO i_cost.
        WRITE:/10 it_in-bukrs,it_in-monat,it_in-kostl,it_in-cost,msg+0(100).
      ENDLOOP.
      CALL FUNCTION BAPI_TRANSACTION_ROLLBACK
        IMPORTING
          return = return.

    ELSE.
      LOOP AT return WHERE type = S.
        SPLIT return-message AT space INTO c1  c2  c3.
        belnr_ou = c3+0(10).
        bukrs_ou = c3+10(4).
        gjahr_ou = c3+14(4).
        LOOP AT it_in.
          wa_cost-bukrs = it_in-bukrs.
          wa_cost-kostl = it_in-kostl.
          wa_cost-recnnr = it_in-zzht.
          wa_cost-gjahr = it_in-gjahr.
          wa_cost-monat = it_in-monat.
          wa_cost-wrbtr = it_in-cost.
          wa_cost-waers = l_currency.
          wa_cost-bukrs_ou = bukrs_ou.
          wa_cost-belnr_ou = belnr_ou.
          wa_cost-gjahr_ou = gjahr_ou.
          wa_cost-status = S.
          wa_cost-error = ‘‘.
          APPEND wa_cost TO i_cost.
          WRITE:/10 it_in-bukrs,it_in-monat,it_in-kostl,it_in-cost,belnr_ou,bukrs_ou,gjahr_ou.
        ENDLOOP.
        EXIT.
      ENDLOOP.
      CALL FUNCTION BAPI_TRANSACTION_COMMIT
        EXPORTING
          wait = X.
*将合同号放入凭证内
*      DO 100 TIMES.
*        CLEAR i_bkpf.  REFRESH i_bkpf.
*        SELECT * FROM bkpf INTO CORRESPONDING FIELDS OF TABLE i_bkpf WHERE bukrs = bukrs_ou AND belnr = belnr_ou AND gjahr = gjahr_ou.
*        IF i_bkpf[] IS NOT INITIAL.
*          EXIT.
*        ELSE.
*          WAIT UP TO 1 SECONDS.
*        ENDIF.
*      ENDDO.
*      CLEAR: i_bseg, i_bkdf, i_bsec, i_bsed, i_bset.
*      REFRESH: i_bseg, i_bkdf, i_bsec, i_bsed, i_bset.
*      SELECT * FROM bseg INTO CORRESPONDING FIELDS OF TABLE i_bseg WHERE bukrs = bukrs_ou AND belnr = belnr_ou AND gjahr = gjahr_ou.
*      IF i_bseg[] IS NOT INITIAL.
*        LOOP AT i_bseg WHERE hkont = ‘5405090110‘.
*          i_bseg-vertn = l_recnnr.
*          SELECT SINGLE imkey FROM vicncn INTO i_bseg-imkey WHERE recnnr = l_recnnr.
*          MODIFY i_bseg.  CLEAR i_bseg.
*        ENDLOOP.
*        CALL FUNCTION ‘CHANGE_DOCUMENT‘
*          TABLES
*            t_bkdf = i_bkdf
*            t_bkpf = i_bkpf
*            t_bsec = i_bsec
*            t_bsed = i_bsed
*            t_bseg = i_bseg
*            t_bset = i_bset.
*        IF sy-subrc = 0.
*          CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT‘
*            EXPORTING
*              wait = ‘X‘.
*        ELSE.
*          CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK‘.
*        ENDIF.
*      ENDIF.
    ENDIF.
  ENDIF.
  IF i_cost[] IS NOT INITIAL.
    MODIFY zre_cost01 FROM TABLE i_cost[].
    IF sy-subrc = 0.
      COMMIT WORK AND WAIT.
    ELSE.
      ROLLBACK WORK.
    ENDIF.
  ENDIF.
ENDFORM.                                                    "f-02

 

以上是关于记账凭证要打钩吗?的主要内容,如果未能解决你的问题,请参考以下文章

金蝶kis记账王录入凭证的几个技巧

一个公司每月是否需要做账报账?具体的流程是怎么样的。请您说明下。

SAP如何给凭证批量编号

SAP FICO里凭证快速记账的方式都有哪些?

sap发货过账生成的记账凭证是

sap打印凭证制单人怎么修改