原理:先根据模型和查询条件取出数据,然后把金额设置为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. ajax - xhr level2新特性 json等众多内容

    1. 今天的内容其实挺多的,我们慢慢来说.首先第一个是xhr的基本使用,什么是xhr? XMLHTTPRequest是浏览器提供的js对象,可以请求服务器上的数据资源,包括我们前面一直用的jq里面的三 ...

  2. Java的源码执行(建议结合Javase语法学习来加深印象)

    一.源码执行时的先后顺序: 父类的静态属性和静态块(按照声明顺序) 本类的静态属性和静态块(按照声明顺序) main方法 父类的成员属性和成员块(按照声明顺序) 父类构造器 本类成员属性和块(按照声明 ...

  3. hashMap、ConcurrentHashMap、hashTable、TreeMap、LinkedHashMap用法区别详解

    Java集合中设计了一个接口Java.util.Map,它实现类中hashMap.hashTable.TreeMap.ConcurrentHashMap.LinkedHashMap. Map类型的集合 ...

  4. 完爆Docker!推荐你看下这个....

    现如今,互联网行业的每个人都知道数据的价值,很多人也为此学了一堆的数据分析工具,但面对问题,还是不知道如何去分析. 我们在奔向升职加薪的路上,总会遇到这些问题: 面对数据问题,没有思路,怎么办? 面对 ...

  5. 全网显示 IP 归属地,这背后的技术你知道吗?

    为了进一步规范国内的网络舆论,国家规定了各互联网平台都需要显示 IP 归属地信息.微博.抖音.公众号等多个平台纷纷上线了 IP 归属地功能,这标志着国内言论的进一步规范化.但互联网平台商们是怎么通过 ...

  6. Python学习4(字典的内存分布)

    1.字典:是python数据类型之一,字典通过花括号来包含数据项,字典的每个元素由2个部分组成,键:值,字典是根据键来找对应的值. data = {"name": "Et ...

  7. Erdos-Renyi随机图的生成方式及其特性

    1 随机图生成简介 1.1 \(G_{np}\)和\(G_{nm}\) 以下是我学习<CS224W:Machine Learning With Graphs>[1]中随机图生成部分的笔记, ...

  8. nginx反向代理获取用户真实ip

    nginx做反向代理时,默认的配置后端获取到的ip都是来自于nginx,如何转发用户的真实ip到后端程序呢?如是是java后端,用request.getRemoteAddr();获取到的是nginx的 ...

  9. 113_Power Pivot 销售订单之重复购买率及购买间隔天数相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 在论坛中看到朋友在提复购率(重复购买率)等相关问题,今天把结果贴出来. 问题原贴:计算订单中的老顾客复购率 感谢 ...

  10. 自动化测试报告(allure/html)

    pytest有两种生成测试报告的方法(html和allure),今天就给大家一一介绍下 html 一.pytest-html基本语法 1.安装:pip install pytest-html 2.查看 ...