原理:先根据模型和查询条件取出数据,然后把金额设置为0,再写回CUBE.

1.获取数据并清空金额

*&---------------------------------------------------------------------*
*& Form CLEAR_BPC_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> S_ENTITY 公司代码
*& --> P_YEAR 年度
*& --> P_MONTH 月份
*& --> P_CAT
*&---------------------------------------------------------------------*
FORM frm_clear_bpc_data USING p_gt_input_entity LIKE gt_input_entity
p_p_year LIKE p_year
p_p_month LIKE p_month
p_p_cat LIKE p_cat
CHANGING
p_t_bpc_data TYPE ANY TABLE . DATA: lt_axis_base TYPE ujo_t_query_dim, "每行是一个维度上的一组成员
lt_axis TYPE ujo_t_query_dim, "每行是一个维度上的一组成员
ls_axis_t TYPE ujo_t_members, "成员表 lt_cv_base TYPE TABLE OF ujk_s_cv, "BPC Script Logic Current View
lt_cv_final TYPE TABLE OF ujk_s_cv, "BPC Script Logic Current View
lt_cv_pkg LIKE TABLE OF lt_cv_base,
ls_cv LIKE LINE OF lt_cv_base,
lr_bpc_data TYPE REF TO data. FIELD-SYMBOLS <ft_pkg_data> TYPE ANY TABLE.
CREATE DATA lr_bpc_data LIKE p_t_bpc_data.
ASSIGN lr_bpc_data->* TO <ft_pkg_data>. * 准备不变的条件
CLEAR ls_cv.
LOOP AT p_gt_input_entity INTO DATA(lv_entity).
ls_cv-dimension = 'ENTITY'.
APPEND lv_entity TO ls_cv-member.
ENDLOOP.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'CATEGORY'.
APPEND s_veson-low TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'TIME'.
APPEND s_erdat-low TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'AUDITTRAIL'.
APPEND 'INPUTM' TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备不变的条件
CLEAR ls_cv.
ls_cv-dimension = 'SCOPE'.
APPEND 'S_NONE' TO ls_cv-member.
APPEND ls_cv TO lt_cv_base. * 准备变化的条件
lt_cv_final = lt_cv_base. CLEAR ls_cv.
ls_cv-dimension = 'CATEGORY'.
APPEND p_p_cat TO ls_cv-member.
APPEND ls_cv TO lt_cv_final.
APPEND lt_cv_final TO lt_cv_pkg. "执行查询
TRY.
cl_ujk_model=>get_dim_list(
EXPORTING
i_appset_id = gco_appset_id
i_appl_id = gco_appl_id
i_with_measures = abap_false
IMPORTING
et_admin_dim_list = DATA(lt_dim_list)
). DATA: lt_range TYPE uj0_t_sel,
ls_range LIKE LINE OF lt_range. DATA(lo_query) = cl_ujo_query_factory=>get_query_adapter(
i_appset_id = gco_appset_id
i_appl_id = gco_appl_id ). LOOP AT lt_cv_pkg INTO DATA(lt_cv).
"转换查询条件
CLEAR:ls_range, lt_range[].
LOOP AT lt_cv INTO ls_cv.
ls_range-sign = 'I'.
ls_range-option = 'EQ'.
ls_range-dimension = ls_cv-dimension.
LOOP AT ls_cv-member INTO DATA(lv_member).
ls_range-low = lv_member.
APPEND ls_range TO lt_range.
ENDLOOP.
ENDLOOP. lo_query->run_rsdri_query(
EXPORTING
it_dim_name = lt_dim_list " BPC: Dimension List
it_range = lt_range " BPC: Selection condition
if_check_security = abap_true " BPC: Generic indicator
IMPORTING
et_data = <ft_pkg_data>
). INSERT LINES OF <ft_pkg_data> INTO TABLE p_t_bpc_data.
SORT p_t_bpc_data.
DELETE ADJACENT DUPLICATES FROM p_t_bpc_data. LOOP AT p_t_bpc_data ASSIGNING FIELD-SYMBOL(<fs_bpc_data>).
ASSIGN COMPONENT 'SIGNEDDATA' OF STRUCTURE <fs_bpc_data> TO FIELD-SYMBOL(<fv_signeddata>).
CHECK sy-subrc = 0.
<fv_signeddata> = 0.
ENDLOOP.
ENDLOOP.
CATCH cx_root INTO DATA(lr_exception).
MESSAGE |查询需要覆盖的BPC数据时报错{ lr_exception->get_longtext( ) },请联系管理员| TYPE 'E'.
ENDTRY.
ENDFORM.

2. 写回CUBE

*&---------------------------------------------------------------------*
*& Form frm_write_into_bpc
*&---------------------------------------------------------------------*
*& text 写入BPC
*&---------------------------------------------------------------------*
*&      -->
*&---------------------------------------------------------------------*
FORM frm_write_into_bpc USING it_tab TYPE ANY TABLE
                               i_proc TYPE char1.

  CLEAR: gt_message.
  DATA: lo_ujo         TYPE REF TO if_ujo_write_back,
        l_str          TYPE string,
        ls_wb_param    TYPE if_ujo_write_back=>gs_wb_param,
        ls_wb_status   TYPE ujo_s_wb_status,
        ls_work_status TYPE ujr_s_work_status,
        ls_audit       TYPE ujr_s_update_audit,
        lt_message     TYPE uj0_t_message,
        lr_data        TYPE REF TO data.

  FIELD-SYMBOLS: <lt_error_records> TYPE ANY TABLE.

  CREATE DATA lr_data LIKE it_tab.
  ASSIGN lr_data->* TO <lt_error_records>.

  CALL METHOD cl_ujo_wb_factory=>create_write_back
    RECEIVING
      ro_write_back = lo_ujo.

  ls_wb_param = cl_ujo_wb_factory=>default_wb_param( ).
  ls_wb_param-bypass_security = abap_true.

  TRY.
      CALL METHOD lo_ujo->write_back
        EXPORTING
          i_appset_id      = gco_appset_id
          i_appl_id        = gco_appl_id
          is_wb_param      = ls_wb_param
*         it_records       = <fs_t_data>
          it_records       = it_tab
        IMPORTING
          es_wb_status     = ls_wb_status
          et_error_records = <lt_error_records>
          et_message       = gt_message.

      cl_ujk_logger=>log( '提交记录: ' && ls_wb_status-nr_submit && '条, ' && '成功记录: ' && ls_wb_status-nr_success && '条' ).

      IF gt_message IS NOT INITIAL.
        CALL SCREEN 400 STARTING AT 2 2 ENDING AT 120 30.
      ELSE.
        IF i_proc = gco_update.
          MESSAGE s008.
        ENDIF.
      ENDIF.

    CATCH cx_ujo_write_back cx_uj_static_check  INTO DATA(lo_write).
      l_str = lo_write->get_text( ).
      MESSAGE l_str TYPE 'S' DISPLAY LIKE 'E'.
  ENDTRY.

ENDFORM.

SAP BPC 清除CUBE 中的数据的更多相关文章

  1. SSAS中CUBE行权限数据级权限控制

    去年做了一个数据仓库的项目,其中涉及到了CUBE数据级权限的控制.在网上找这方面的资料,找到一个[BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制.根据这个大牛的思 ...

  2. JAVA整合Redis使用redisTemplate清除库中的所有键值对数据

    JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...

  3. SAP CRM 通过调试观察CL_CRM_BOL_ENTITY中的数据

    这个(BOL里面)最重要的类值得一看. BOL中的每条记录都会在CL_CRM_BOL_ENTIT中表示.至今,我们已经写过一些事件处理器,并且我们已经直接或间接的通过这个类工作.在业务场景中,我们也许 ...

  4. SAP SMARTFORMS-基于内存方式在report程序中传递数据到smartforms显示

    一.准备工作 1.新建include程序 1> include程序名字:ZDD_INC_0104 2> ZDD_INC_0104  程序中的内容为 2.使用T-CODE :SE11新建两个 ...

  5. SAP BPC方案介绍

    refer to http://sapper.blog.sohu.com/166039991.html SAP/BPC简介: 全面预算管理是联系公司战略目标与日常运营的重要纽带,它上到战略层面.下到执 ...

  6. SSAS中事实表中的数据如果因为一对多或多对多关系复制了多份,在维度上聚合的时候还是只算一份

    SSAS事实表中的数据,有时候会因为一对多或多对多关系发生复制变成多份,如下图所示: 图1 我们可以从上面图片中看到,在这个例子中,有三个事实表Fact_People_Money(此表用字段Money ...

  7. WPF中的数据验证

    数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...

  8. C#-WinForm-ListView-表格式展示数据、如何将数据库中的数据展示到ListView中、如何对选中的项进行修改

    在展示数据库中不知道数量的数据时怎么展示最好呢?--表格 ListView - 表格形式展示数据 ListView 常用属性 HeaderStyle - "详细信息"视图中列标头的 ...

  9. LINQ-to-SQL那点事~LINQ-to-SQL中的数据缓存与应对

    回到目录 这个文章写的有点滞后了,呵呵,因为总想把之前不确定的东西确定了之后,再写这篇,之前的LINQ-to-SQL那点事,请点这里. LINQ-to-SQL中的数据缓存与应对 Linq-to-SQL ...

随机推荐

  1. mysql HikariCP连接池配置

    #连接池配置 #最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size spring.datasource.hikari.minimum ...

  2. springboot jar包方式部署

    打好jar包后上传到 linux 执行命令 java -jar /root/vhr-web-0.0.1-SNAPSHOT.jar > /root/log.txt & 1.java -ja ...

  3. layui下拉框渲染问题,以及回显问题

    最近实习公司给的新人练手项目用的layui,layui之前自己也接触过但是也就是用了用table组件,没有用过layer弹层这些东西,所以就了解了一下. 首先遇到的一个问题就是下拉框没有样式,然后加样 ...

  4. IDEA小技巧:Markdown里的命令行可以直接运行了

    作为一名开发者,相信大部分人都喜欢用Markdown来写文章和写文档. 如果你经常用开源项目或者自己维护开源项目,肯定对于项目下的README文件也相当熟悉了吧,通常我们会在这里介绍项目的功能.如何使 ...

  5. Istio实践(3)- 路由控制及多应用部署(netcore&springboot)

    前言:接上一篇istio应用部署及服务间调用,本文介绍通过构建.netcore与springboot简单服务应用,实现服务间调用及相关路由控制等 1..netcore代码介绍及应用部署 新建.netc ...

  6. Antd Modal 可拖拽移动

    一 目标: 实现antd Modal 弹窗或者其他弹窗的点击标题进行拖拽的效果 二 准备及思录: 1.使用antd  Modal 组件,要想改变位置需要改变Modal style 的left 和top ...

  7. python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结

    除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...

  8. py文件加密打包成exe文件

    python的py.pyc.pyo.pyd文件区别 py是源文件: pyc是源文件编译后的文件: pyo是源文件优化编译后的文件: pyd是其他语言写的python库: 为什么选用Cpython .p ...

  9. Ubuntu 16.4安装1050ti显卡驱动问题及解决

    不得不说,ubuntu上安装nvidia驱动坑是真的多!!! 本来在之前已经安装好了,从 显卡驱动到cuda再到cudnn去不没问题,就已一次推送而来的显卡驱动更新,把我的环境全部弄坏,为了吸取教训, ...

  10. ngx-lua实现高级限流方式一

    基于POST请求体中的某个参数限流 背景 电商平台有活动,活动涉及优惠券的抢券,优惠券系统对大并发支持略差,为了保护整体系统平稳,因此在入口Nginx层对抢券接口做了一层限流. 完整实现如下: lua ...