2026/2/12 8:44:15
网站建设
项目流程
网站后台组成,河北省招标投标公共服务平台,副标题wordpress,无棣做网站1书接上回在第一篇《关于在财务月结的标准事务码中获取执行结果的增强》中#xff0c;介绍了在KSS2/CON2/KSII中获取执行完结果的增强斌将军#xff0c;公众号#xff1a;斌将军关于在财务月结的标准事务码中获取执行结果的增强本篇文章继续介绍获取财务月结标准事务代码执行…1书接上回在第一篇《关于在财务月结的标准事务码中获取执行结果的增强》中介绍了在KSS2/CON2/KSII中获取执行完结果的增强斌将军公众号斌将军关于在财务月结的标准事务码中获取执行结果的增强本篇文章继续介绍获取财务月结标准事务代码执行结果的增强和相关处理。2KKAO2.1多服务器调用此处需要勾选后台处理后在对应的弹框中输入作业和服务器组因此不能使用submit需要用BDC录屏调用事务代码但因为通过标准后台作业执行不能通过常规手段获取执行结果也不能ABAP内存抛数据因为不在同一个External Session中所以需要找增强通过SAP内存进行传值仍然是在调用前先抛内存执行完BDC后等待后台作业执行结束--------------------斌将军--------------------REFRESH gt_messtab[]. CALL TRANSACTION KKAO USING gt_bdcdata MODE gv_ctumode UPDATE gv_updmode MESSAGES INTO gt_messtab. 等待KKAO标准后台作业结束 CLEAR:lv_exit. DO. WAIT UP TO 1 SECONDS. 查找作业执行状态 CLEAR:ls_tbtco. SELECT SINGLE status strtdate strttime enddate endtime FROM tbtco INTO ls_tbtco WHERE jobname lv_name. AND jobcount lv_number. R 活动的运行中 Y 就绪的 P 已调度的 S 已释放 A 已取消出错终止 F 已完成结束 Z Released/Susp.(无中文) IF ls_tbtco-status A OR ls_tbtco-status F. EXIT. ENDIF. ENDDO. --------------------斌将军--------------------2.2ALV相同的原理在ALV输出前将内表抛内存之后在主程序中获取ALV内存结果--------------------斌将军-------------------- 获取ALV内存传值 DELETE FROM SHARED BUFFER indx(aa) ID ZKKAO. IMPORT t_auftlst[] FROM SHARED BUFFER indx(aa) ID ZNEFI_KKAO_ALV. DELETE FROM SHARED BUFFER indx(aa) ID ZNEFI_KKAO_ALV. --------------------斌将军--------------------2.3MESSAGE消息获取仍然是在CM_F_INFO中3CKMVFM3.1默认显示值流监控器不能通过BDC的方式进行调用录屏时无法进入下层的ALV界面所以需要使用SUBMIT。而执行结果中需要默认“货币/评估”为集团货币“查看”为FM物料清单这样主程序才能通过cl_salv_bs_runtime_infoget_data_ref获取对应的ALV数据。因此需要对这两处做默认值增强其中集团货币直接修改值即可但是物料清单在标准代码中是获取了内存值所以索性直接用SET PARAMETER覆盖内存中的值让后续获取到的值为物料清单3.2后台处理标准代码中如果后台执行CKMVFM则直接跳过了ALV的显示导致无法获取ALV的值。而CKMVFM中后台运算结果和ALV展示的数据又经过了复杂的逻辑运算两者不相同所以最好的方式还是要获取ALV展示的内表数据。此处没有找到更加丝滑的解决办法只能在标准逻辑中插入一段代码将ALV展示前的用于计算的子例程拷贝过来获取最终要展示在ALV中的内表数据并抛内存给主程序。主程序中如果是后台执行调用CKMVFM则通过接内存方式获取ALV数据如果是前台调用则直接通过cl_salv_bs_runtime_infoget_data_ref获取ALV数据4CKMLCP4.1创建成本核算运行前台创建时点击创建按钮填入成本核算运行期间以及工厂ECC中也可以调用函数CKML_RUN_ADMIN_INTERFACE--------------------斌将军--------------------DATA:lv_runtype TYPE ckmlrunperiod-run_type, lv_grahr TYPE ckmlrunperiod-gjahr, lv_poper TYPE ckmlrunperiod-poper. lv_grahr gv_year. lv_poper gv_mon. CALL FUNCTION CKML_RUN_ADMIN_INTERFACE EXPORTING werks p_werks 工厂 run_type p_run 成本核算运行 last_day p_bldat gjahr lv_grahr poper lv_poper. DO 5 TIMES. SELECT SINGLE run_type FROM ckmlrunperiod INTO lv_runtype WHERE run_type p_run AND last_day p_bldat AND gjahr gv_year AND poper gv_mon. IF lv_runtype IS NOT INITIAL. MESSAGE s005 WITH 成本运行创建. EXIT. ENDIF. ENDDO. IF lv_runtype IS INITIAL. MESSAGE s006 WITH 成本运行创建. ENDIF.--------------------斌将军--------------------4.2调用步骤不同版本对应的流程步骤ECC对应的程序--------------------斌将军--------------------选择saprckmlmv_run_basic_list确定顺序saprckmlmv_run_create_steps单级处理确定saprckma_run_settle多级处理确定saprckmlmv_run_mlevel_settle消耗的重新评估vnb_revaluate_sl_consumption过帐清算saprckma_run_close标记物料价格saprckm_prmt_run_type--------------------斌将军--------------------S4对应的程序--------------------斌将军--------------------选择fcml4h_selection准备fcml4h_preprocessor结算fcml4h_settlement过账关账fcml4h_post_closing--------------------斌将军--------------------以上步骤的执行显示界面均可通过cl_salv_bs_runtime_infoget_data_ref方式获取ALV数据4.3MESSAGE各个步骤执行的结果可以在函数中通过抛内存的方式获取到4.4解锁4.4.1CKMLCP解锁在执行单级、多级处理确定和过账清算前需要先点击界面上的锁进行解锁操作可以复制标准解锁代码进行处理--------------------斌将军--------------------FORM frm_allow_pd. DATA:lt_run_va_with_period TYPE ckml_run_t_valarea_with_period, lf_run_va_with_period LIKE LINE OF lt_run_va_with_period, lt_va_with_period TYPE ckml_t_va_with_period, lf_va_with_period LIKE LINE OF lt_va_with_period, l_abrerl TYPE ml_abrerl, l_abserl TYPE ml_abserl. DATA:ip_runid TYPE ckmlrunperiod-run_id, ip_allow_pd TYPE boole_d, allow Price Determ. ip_allow_pc TYPE boole_d, lv_bwkey TYPE bwkey,评估范围 lv_bdatj TYPE bdatj,记帐日期 YYYY lv_poper TYPE poper.记帐期间. ip_allow_pd X.单级处理确定和多级处理确定中的锁* ip_allow_pc X.过帐清算 查询成本运行的ID SELECT SINGLE run_id成本核算运行编号 FROM ckmlrunperiod INTO ip_runid WHERE run_type p_run. IF sy-subrc NE 0. MESSAGE 未找到对应成本核算运行编号不能解锁 TYPE E. ENDIF.---------------------------------调用标准解锁逻辑------------------------------------- 获取成本运行的数据 CALL FUNCTION CKML_RUN_VALAREAS_GET EXPORTING i_run_id ip_runid* I_RUN_TYPE * I_LAST_DAY * I_POPER * I_GJAHR i_appl IMPORTING et_valareas lt_run_va_with_period* EXCEPTIONS* RUN_NOT_EXISTENT 1* OTHERS 2 .* convert interfaces LOOP AT lt_run_va_with_period INTO lf_run_va_with_period. lf_va_with_period-bwkey lf_run_va_with_period-bwkey. lf_va_with_period-bdatj lf_run_va_with_period-gjahr. lf_va_with_period-poper lf_run_va_with_period-poper. APPEND lf_va_with_period TO lt_va_with_period. ENDLOOP.* check if already allowed CALL FUNCTION CKML_ORG_M_FOR_MULTIPLE_VA_GET EXPORTING it_va_with_period lt_va_with_period IMPORTING e_abrerl l_abrerl e_abserl l_abserl. IF ( NOT ip_allow_pd IS INITIAL ) AND ( NOT l_abrerl IS INITIAL ). PD already allowed MESSAGE s834(c). EXIT. ELSE. do nothing ENDIF. IF ( NOT ip_allow_pc IS INITIAL ) AND ( NOT l_abserl IS INITIAL ). PC already allowed MESSAGE s835(c). EXIT. ELSEIF ( NOT ip_allow_pc IS INITIAL ) AND ( l_abrerl IS INITIAL ). PD not yet allowd MESSAGE e836(c). ENDIF.* Check authority LOOP AT lt_va_with_period INTO lf_va_with_period. AUTHORITY-CHECK OBJECT K_ML_VA ID ACTVT FIELD 45 ID BWKEY FIELD lf_va_with_period-bwkey. IF sy-subrc 0. MESSAGE e813(c) WITH lf_va_with_period-bwkey. ENDIF. ENDLOOP. LOOP AT lt_va_with_period INTO lf_va_with_period. CALL FUNCTION CKML_ORG_MEASURE_ALLOW EXPORTING i_allow_price_determination ip_allow_pd i_allow_post_closing ip_allow_pc i_bwkey lf_va_with_period-bwkey i_poper lf_va_with_period-poper i_bdatj lf_va_with_period-bdatj EXCEPTIONS* NO_AUTHORITY 1 already_allowed 0* FIRST_ALLOW_PRICE_DETERM 3* OTHERS 4 . IF sy-subrc EQ 0. COMMIT WORK AND WAIT. ENDIF. ENDLOOP.ENDFORM. --------------------斌将军--------------------在以上代码中通过成本运行查询到对应的ID执行标准解锁的校验逻辑最终在函数CKML_ORG_MEASURE_ALLOW中实现解锁。其中单级、多级处理确定同属于i_allow_price_determination参数控制简称为PD锁两个步骤同时解锁。过账清算属于i_allow_post_closing参数控制简称为PC锁。函数CKML_ORG_MEASURE_ALLOW最终在表CKMLO中新增和修改对应的锁字段效果如下4.4.2CK40N解锁在执行标记动作时需要先进行解锁解锁的方式略有不同。需要点击对应公司代码保存成本核算变式之后会在表FVMKLD中插入一条数据(S4)ECC版本会在FVMK表中插入数据模拟系统标准的处理代码在自定义逻辑中加入解锁功能参考代码如下FORM frm_allow_marking. DATA:f_tck01 TYPE tck01, f_tck03 TYPE tck03, p_bukrs TYPE fvmk-bukrs, p_zukper TYPE fvmk-poper, p_zukges TYPE fvmk-bdatj, bewertungsvariante TYPE tck05-bwvar, kalkulationsversion TYPE keko-tvers, p_buper TYPE mbew-pprdz, p_gjahr TYPE mbew-pdatz, p_rldnr TYPE fins_ledger,* kalkulationsversion TYPE ck_tvers VALUE 01,* kalkulationsvariante TYPE ck_klvar VALUE PPC1, p_klvar TYPE tck03-klvar VALUE PPC1. 检查是否已经解锁 CALL FUNCTION CK_F_TCK03_HIERARCHY_READING EXPORTING p_klvar p_klvar IMPORTING f_tck03 f_tck03 f_tck01 f_tck01 EXCEPTIONS OTHERS 0. IF f_tck03 IS INITIAL. MESSAGE s487(ck) RAISING error_occured.* Bitte geben Sie eine vorhandene Kalkulationsvariante ein f_tck01-valuation 0. ENDIF.*get representative ledger if parallel accounting is not active IF NOT cl_fml_toggleget_instance( )-is_ml_full_parall_actg_active( ). p_rldnr cl_org_measure_serviceget_default_ml_ledger( EXPORTING iv_bukrs p_bukrs iv_valutyp f_tck01-valuation iv_valusubtyp f_tck01-valusubtyp ). ENDIF. p_bukrs p_werks. p_gjahr p_zukges p_ersda0(4). p_buper p_zukper p_ersda4(2). CALL FUNCTION CK_F_FVMKLD_READ EXPORTING p_bukrs p_bukrs p_bdatj p_zukges p_poper p_zukper p_rldnr p_rldnr p_valuation f_tck01-valuation p_valusubtyp f_tck01-valusubtyp IMPORTING ev_bwvar bewertungsvariante EXCEPTIONS not_found 1 OTHERS 2. IF sy-subrc 0.* MESSAGE e185(ck) WITH p_zukper p_zukges p_bukrs* RAISING error_occured. RETURN.已经解锁就返回 ENDIF. 解锁* organisatorische Maßnahme durchführen... CALL FUNCTION CK_F_ALLOW_MARKING EXPORTING p_bukrs p_bukrs p_zukper p_buper p_zukges p_gjahr p_klvar PPC1 p_tvers 01 p_rldnr EXCEPTIONS error_occured 01. IF sy-subrc EQ 0. MESSAGE s796(ck).** Die Vormerkerlaubnis wurde erteilt...**** Die Werte Kalkulationsversion und Bewertungsariante muessen** zurueckgeliefert werden, damit das ALV-TOOL die neu gesetzten Werte** anzeigen kann...* CALL FUNCTION CK_F_TCK03_HIERARCHY_READING* EXPORTING* P_KLVAR KALKULATIONSVARIANTE* IMPORTING* F_TCK03 F_TCK03.** BEWERTUNGSVARIANTE F_TCK03-BWVAR. ELSE. MESSAGE ID sy-msgid TYPE S NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.* Bewertungsvariante wird initial zurückgeliefert, was bedeutet,* dass kein Update auf der Ausgabetabelle stattfindet... ENDIF.ENDFORM.上述代码查询对应的成本核算运行是否已经解锁如果解锁就退出没有就最终调用函数CK_F_ALLOW_MARKING解锁。—— 希望本篇文章对您有所帮助 ——