*&---------------------------------------------------------------------*
*& 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 HEADINGLINE-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 AUzzht    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 AUzzht    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  IMobjnrsrc   LIKE   vibdobjass-objnrsrc,objnrtrg   LIKE   vibdobjass-objnrtrg,END OF i_ass1.DATA: BEGIN OF i_ro OCCURS 0,"Rental Objectintreno 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,"Buildingintreno 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  IBobjnrsrc   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,"结算规则cobrbobjnr 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,"fomulatermnorh LIKE vicdcond-termnorh,"Number of Frequency Termtermnosr LIKE vicdcond-termnosr,"Number of Sales Termcondvalidfrom 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 Ruleintreno 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 Reportintreno 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'EXPORTINGi_date = l_dbervonIMPORTINGe_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 objnrINTO CORRESPONDING FIELDS OF TABLE i_zzhtFROM vicncnWHERE bukrs IN r_bukrsAND 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'EXPORTINGobjnr            = i_zzht-objnronly_active      = 'X'TABLESstatus           = i_statusEXCEPTIONSobject_not_found = 1OTHERS           = 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_condzzFROM 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  IMSORT i_zzht BY objnr.CLEAR i_ass1.  REFRESH i_ass1.SELECT objnrsrc objnrtrg INTO CORRESPONDING FIELDS OF TABLE i_ass1 FROM vibdobjassFOR 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 ObjectCLEAR i_ro.  REFRESH i_ro.SELECT intreno objnr bukrs swenr sgenr INTO CORRESPONDING FIELDS OF TABLE i_roFROM 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 vibdmeasFOR 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.*取BuildingCLEAR i_bd.  REFRESH i_bd.SELECT intreno objnr xgetxt bukrs swenr sgenr INTO CORRESPONDING FIELDS OF TABLE i_bd FROM vibdbuFOR 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 vibdmeasFOR 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  IBCLEAR i_ass2.  REFRESH i_ass2.SELECT objnrsrc objnrtrg INTO CORRESPONDING FIELDS OF TABLE i_ass2 FROM vibdobjassFOR 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 objnrINTO CORRESPONDING FIELDS OF TABLE i_zlhtFROM vicncnFOR ALL ENTRIES IN i_ass2WHERE objnr = i_ass2-objnrsrcAND recnnr IN s_zlhtAND recntype <> 'ZU80'.
*** MODIFY BY CHENQY AT 20140804 FOR 冒香香 END ****将锁定的合同去掉LOOP AT i_zlht.CLEAR i_status[].CALL FUNCTION 'STATUS_READ'EXPORTINGobjnr            = i_zlht-objnronly_active      = 'X'TABLESstatus           = i_statusEXCEPTIONSobject_not_found = 1OTHERS           = 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_cobrbFROM cobrb FOR ALL ENTRIES IN i_zlht WHERE objnr = i_zlht-objnr.*取租赁合同条件 fomulaSORT i_zlht BY intreno.CLEAR i_condzl.  REFRESH i_condzl.SELECT intreno condtype calcrule termnorh termnosr condvalidfrom condvalidto unitpriceINTO CORRESPONDING FIELDS OF TABLE i_condzl FROM vicdcondFOR 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_vicdcfpayFOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intrenoAND ( ( 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_visrtmsbrpiFROM visrtmsbrpi FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno.*Assignment of Frequency Rule to Reporting RuleCLEAR i_visrtmrprh.  REFRESH i_visrtmrprh.SELECT intreno rptermno rhythmtype frequency INTO CORRESPONDING FIELDS OF TABLE i_visrtmrprhFROM visrtmrprh FOR ALL ENTRIES IN i_zlht WHERE intreno = i_zlht-intreno.*Sales ReportCLEAR i_visrreport.  REFRESH i_visrreport.SELECT intreno termno rhythmtype net_sales validfrom validto FROM visrreportINTO CORRESPONDING FIELDS OF TABLE i_visrreportFOR 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'EXPORTINGi_date = begin_dayIMPORTINGe_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'EXPORTINGi_date = begin_dayIMPORTINGe_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,daytoCLEAR: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'EXPORTINGi_date = day1IMPORTINGe_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'EXPORTINGi_date = day1IMPORTINGe_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'EXPORTINGi_date = day1IMPORTINGe_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'EXPORTINGi_date = day1IMPORTINGe_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-termnorhythmtype = 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'EXPORTINGday_in            = lastdIMPORTINGlast_day_of_month = lastdEXCEPTIONSday_in_no_date    = 1OTHERS            = 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'EXPORTINGday_in            = lastdIMPORTINGlast_day_of_month = lastdEXCEPTIONSday_in_no_date    = 1OTHERS            = 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 AIF 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'EXPORTINGday_in            = lastdIMPORTINGlast_day_of_month = lastdEXCEPTIONSday_in_no_date    = 1OTHERS            = 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'EXPORTINGday_in            = lastdIMPORTINGlast_day_of_month = lastdEXCEPTIONSday_in_no_date    = 1OTHERS            = 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 UENDLOOP.                                                "ASS2ENDLOOP."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'EXPORTINGi_callback_program = g_repidis_layout          = gs_layoutit_fieldcat        = fieldcat[]i_save             = 'A'TABLESt_outtab           = i_out3EXCEPTIONSprogram_error      = 1OTHERS             = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH 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-zzhtAND 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'EXPORTINGday_in            = l_budatIMPORTINGlast_day_of_month = l_budatEXCEPTIONSday_in_no_date    = 1OTHERS            = 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 objnrFROM vicncnINTO CORRESPONDING FIELDS OF TABLE gt_vicncnWHERE  recnnr = it_in-zzht.IF gt_vicncn IS NOT INITIAL.SELECT paobjnr gabja gabpe gbisj gbispFROM cobrbINTO CORRESPONDING FIELDS OF TABLE gt_cobrbFOR ALL ENTRIES IN gt_vicncnWHERE 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 kmvkbuFROM ce4snjt_acctINTO lv_kmvkbuWHERE aktbo = 'X'AND paobjnr = lv_paobjnrAND 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 租赁费 – 成本中心1LOOP 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'EXPORTINGdocumentheader = documentheaderTABLESaccountgl      = accountglcurrencyamount = currencyamountreturn         = returnrealestate     = realestate
****** ADD BY MENGJW 20130816 FOR 黄秀娟 BEGIN ******criteria       = lt_criteria
****** ADD BY MENGJW 20130816 FOR 黄秀娟  END  ******EXCEPTIONSOTHERS         = 1.IF sy-subrc <> 0.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'IMPORTINGreturn = 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'IMPORTINGreturn = 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'EXPORTINGwait = '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

转载于:https://www.cnblogs.com/rainysblog/p/8537289.html

RE合同记账会计凭证相关推荐

  1. SAP寄售业务会计凭证的分配码原理分析

    本文需要大家在了解寄售基础流程的情况下才能更好的理解.在标准寄售业务中,物料通过移动类型411上线后,产生物料凭证,并基于后台相关配置自动产生记账会计凭证.记账到一个与标准采购相类似的寄售GR/IR中 ...

  2. FIAA固定资产【05资产购置】

    1.1    资产购置(加作者微信ficodk索取完整无水印pdf版) 本章介绍资产购置的相关方法,可以使用固定资产模块或后勤模块的相关事务码执行购置. ?        固定资产模块:通过手工过账会 ...

  3. SAP中会计凭证红蓝冲相关分析测试笔记续(手工反记账红冲)

    关于会计凭证的红冲蓝冲,上篇文章中做过分析和测试.后期又有一些新的认知.记录下来.因为当时做完冲销后就产生一个念头.如果万一做错了,比如应该做红冲,做成了蓝冲怎么办?当时头脑中产生的第一个解决方案是能 ...

  4. python自动化:uiautomation、pyautogui操作会计记账系统(6):打印会计凭证

    python自动化:uiautomation.pyautogui操作会计记账系统(6):打印会计凭证 #coding=utf-8 #Beijia print account document打印会计凭 ...

  5. 2.会计基础--(复式记账、会计凭证与账簿)

    目录 第三章 复式记账 1.复式记账的原理 2.借贷记账法 2.1 借贷记账法下的账户结构 2.2 借贷记账法的记账规则 3.编制会计分录 3.1 账户的对应关系 3.2 会计分录 4.借贷记账法试算 ...

  6. 会计基础-会计科目+会计账户+复式记账+会计分录+会计凭证

    文章目录 会计科目 会计账户 定义 规则 复式记账 会计分录 定义 组成部分 编制步骤 会计凭证 凭证分类 原始凭证 记账凭证 会计科目 会计账户 定义 规则 复式记账 会计分录 定义 组成部分 编制 ...

  7. SAP FI 系列 (019) - 会计凭证的冲销和反记账

    对做错的会计凭证,SAP 并不提供常规的删除操作,需要通过冲销 (reversal) 的方式来消除数据影响.对会计凭证的冲销,财务有红字冲销和蓝字冲销的概念.假设我们做了一张会计凭证,需要冲销,下图展 ...

  8. 有反记账标记的FI会计凭证分录数据存储(BSEG、ACDOCA)在ECC和S4中的变化

    文章目录 一.反记账介绍和业务数据转换规则 1.1 反记账介绍 1.2 业务数据转换规则 二.ECC和S4中的数据存储 2.1 S4中新增数据存储表ACDOCA 2.2 BSEG和ACDOCA关联字段 ...

  9. python编写会计凭证金蝶_如何编制记账凭证?

    编制记账凭证要注意什么呢?会计日常进行财务收支编写要符合规范,如果一家企业的业务量非常大,那么设置多名会计一起编制记账凭证,这些会计要按照统一格式与措辞进行凭证编制,这样能满足会计账簿的一致性原则. ...

最新文章

  1. 必看,经典sql面试题(学生表_课程表_成绩表_教师表)
  2. python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
  3. 2019秋第二周学习总结
  4. 递归第一弹:初步理解
  5. (转)生产者/消费者问题的多种Java实现方式 (待整理)
  6. LInux 下安装 python notebook 及指向路径,运行计时,炫酷的深蓝午夜主题,本地登陆远程服务器
  7. 《面向对象分析与设计》一第2章 什么是面向对象分析
  8. flask jinja2 如何遍历新闻列表
  9. 狼人杀c语言,微赛狼人杀正式版C位出道
  10. angularjs中使用ng-repeat渲染最后一个li的时候设置不同样式
  11. 语音输入常见六大误区 你中招几条?
  12. 在 IE 中使用 Windows 窗体控件
  13. Wireshark-Mac下找不到本地网卡
  14. 网上开零食店3个月销100万的传奇创业
  15. 双线性函数的紧凑超平面散列(Compact Hyperplane Hashing with Bilinear Functions)阅读笔记
  16. 计算机英语面试翻译,英语面试问题及回答带翻译
  17. 明尼苏达大学双城分校计算机科学,明尼苏达大学双城分校计算机专业研究生需要满足哪些条件?...
  18. SolidWorks参数化设计中Excel的应用
  19. 【数据库系统原理】第四章 高级数据库模型:统一建模语言UML、对象定义语言ODL
  20. Java IDE漫谈(一)

热门文章

  1. Qt模仿Boss直聘的竞争力分析器
  2. wmi 计算机应用程序,WMI 提供程序宿主程序 (Wmiprvse.exe) 已安装 NLB 功能的基于 Windows Server 2008 的计算机上可能会崩溃...
  3. GL、GLU、GLUT
  4. mysql中的汉字怎么转换_Mysql中文汉字转拼音的实现(每个汉字转换全拼)
  5. 三星android获取root权限,三星S9 G9600 9.0 root教程_获取安卓9.0系统的root权限的方法...
  6. java 设计连连看_如何用JAVA 编写一个连连看游戏全程设计
  7. 三维比例导引 matlab,三维比例导引律(源程序)
  8. 人力资源管理的现状及发展趋势
  9. 夫妻之间赠与房产,没过户前可以反悔
  10. 《Braid》碎片式台词