原理:先根据模型和查询条件取出数据,然后把金额设置为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. css 实现球里装水

    <template> <div class="container">     <div class="wave"></ ...

  2. style设置 三个 竖线隔得太近了,这个属性和值 设置让他们分开一点

    ||| // html letter-spacing: 0.2em; // css

  3. ElasticSearch 设置某个字段不分词

    先说结论:字段类型更改为 'keyword' elasticSearch官方文档中创建index代码如下 PUT /my_store { "mappings" : { " ...

  4. AcWing 165. 小猫爬山 DFS

    165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...

  5. 网络协议自动化逆向工具开山鼻祖discoverer 分析

    本文系原创,转载请说明出处:信安科研人 也可关注微信公众号:信安科研人 原论文发表在2007年的USENIX上,链接如下:https://www.usenix.org/legacy/event/sec ...

  6. 【mq】从零开始实现 mq-01-生产者、消费者启动

    MQ 是什么? MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构. 指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递--生产者产生 ...

  7. 字节跳动构建Data Catalog数据目录系统的实践(上)

    作为数据目录产品,Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解数的业务场景,并服务于数据开发和数据治理的产品体系.本文介绍了字节跳动 Data ...

  8. 代码源 每日一题 分割 洛谷 P6033合并果子

    ​ 题目链接:切割 - 题目 - Daimayuan Online Judge 数据加强版链接: [NOIP2004 提高组] 合并果子 加强版 - 洛谷 题目描述 有一个长度为 ∑ai 的木板,需要 ...

  9. SSH只能用于远程Linux主机?那说明你见识太小了!

    开源Linux 长按二维码加关注~ 今天小编为大家分享一篇关于SSH 的介绍和使用方法的文章.本文从SSH是什么出发,讲述了SSH的基本用法,之后在远程登录.端口转发等多种场景下进行独立的讲述,希望能 ...

  10. 不再空谈AI,从打造一台智能无人机开始

    对于大多数无人机爱好者来说,能自己从头开始组装一台无人机,之后加入AI算法,能够航拍,可以目标跟踪,是心中的梦想. 并且,亲自从零开始完成复杂系统,这是掌握核心技术的必经之路. 开课吧特邀北京航空航天 ...