zoukankan      html  css  js  c++  java
  • BW里转换简单常用ABAP

      用户查看的是当时的物料折让,那你必然要给物料加个时间,才好区分。总是以现在最新的物料状态查看历史数据会出现问题。当时这个物料是折让的,现在不折让了。数据会有问题。加个DSO。做一个时间记录。读取系统时间,上数的时候做为判断。3月份上数就是取3月份。当时的物料状态

      在结束例程里写。字段赋予常量方可生效。

      感觉写的十分混乱来梳理一下

    1 这是一个判断季度的语句。而且全是过程,基本没有对象

    *取物料上数的系统时间的月份判断季度
    loop at RESULT_PACKAGE ASSIGNING <RESULT_FIELDS> . l_date = sy-datum+4(4).. l_date1 = sy-datum+4(2). year = sy-datum+0(4). if l_date = 12. l_year = year + 1. endif. IF '0321' <= l_date AND l_date <= '0620'. CONCATENATE year '2' INTO <RESULT_FIELDS>-CALQUARTER. ELSEIF '0621' <= l_date AND l_date <= '0920'. CONCATENATE year '3' INTO <RESULT_FIELDS>-CALQUARTER.. ELSEIF '0921' <= l_date AND l_date <= '1220'. CONCATENATE year '4' INTO <RESULT_FIELDS>-CALQUARTER.. ELSEIF l_date <= '0320'. CONCATENATE year '1' INTO <RESULT_FIELDS>-CALQUARTER.. ELSE. CONCATENATE l_year '1' INTO <RESULT_FIELDS>-CALQUARTER.. ENDIF. endloop.

    销售上数, 判断销售季度。,取是否折让字段,

    这ABAP写不太出来,需要多实践。

    2  读取字符是否折让重新分配

    *读取需要字段从表/BIC/AZCZJTO2600 。分配至内表 IT_ZCZJTO26
    * INTO CORRESPONDING FIELDS OF TABLE 自动匹配相应的字段
    SELECT MATERIAL CALQUARTER /BIC/ZSFZR FROM /BIC/AZCZJTO2600
      INTO CORRESPONDING FIELDS OF TABLE IT_ZCZJTO26 FOR ALL ENTRIES IN
      RESULT_PACKAGE
      WHERE MATERIAL = RESULT_PACKAGE-/BIC/ZMATERIAL  AND  CALQUARTER =
      RESULT_PACKAGE-CALQUARTER.
    *循环将内表里IT_ZCZJTO26 分配给工作区 WA_ZCZJTO26 。做了分配
     LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS> .
        READ TABLE IT_ZCZJTO26 INTO WA_ZCZJTO26
        WITH KEY MATERIAL = <RESULT_FIELDS>-/BIC/ZMATERIAL CALQUARTER =
        <RESULT_FIELDS>-CALQUARTER.
    *执行成功 ,结果是否折让等于工作区 WA_ZCZJTO26-/BIC/ZSFZR.,是/BIC/AZCZJTO2600 里的字段。
        IF sy-subrc = 0.
          <RESULT_FIELDS>-/BIC/ZSFZR = WA_ZCZJTO26-/BIC/ZSFZR.  
        ENDIF.
     ENDLOOP.

    3 读取字符,服务店代码。 由于两个值不一样,前面有很多前导零。调用alpha添加零--数值会添加,文字不会。

    data: g_/BIC/ZSAPGKDM type /BIC/PZ0FWDDM-/BIC/ZSAPGKDM.
    loop at RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>  .*读取服务店代码,由于两个值不一样,前面有很多前导零。调用alpha添加零,数值会添加,文字不会
    *多了一段这个,写的其实很乱。
    clear g_/BIC/ZSAPGKDM. g_/BIC/ZSAPGKDM = <RESULT_FIELDS>-/BIC/ZCUSTOMER. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = g_/BIC/ZSAPGKDM IMPORTING OUTPUT = g_/BIC/ZSAPGKDM. *取数赋值,这么写方便很多。简洁很多。 SELECT SINGLE /BIC/Z0FWDDM FROM /BIC/PZ0FWDDM INTO <RESULT_FIELDS>-/BIC/Z0FWDDM WHERE /BIC/ZSAPGKDM = g_/BIC/ZSAPGKDM. endloop.

     比较2 与3 ,3 会更简便很多。 但是2 方式更严谨一点。

    最终的代码:

      

    *定义一个操作字段类型
    data: l_date type String,
          year type String,
          l_year type string,
          l_date1 type String.
    
    *定义一个内表 IT_ZCZJTO26 ,工作区 WA_ZCZJTO26
    DATA:IT_ZCZJTO26 TYPE STANDARD TABLE OF /BIC/AZCZJTO2600,
         WA_ZCZJTO26 TYPE /BIC/AZCZJTO2600.
    
    data: g_/BIC/ZSAPGKDM type /BIC/PZ0FWDDM-/BIC/ZSAPGKDM.
    
    *循环这个RESULT_PACKAGE,分配<RESULT_FIELDS>,判断季度
    loop at RESULT_PACKAGE ASSIGNING <RESULT_FIELDS>  .
    
        l_date = <RESULT_FIELDS>-PSTNG_DATE+4(4).
        l_date1 = <RESULT_FIELDS>-PSTNG_DATE+4(2).
        year = <RESULT_FIELDS>-PSTNG_DATE+0(4).
    
        if l_date = 12.
          l_year = year + 1.
        endif.
        IF '0321' <= l_date AND l_date <= '0620'.
        CONCATENATE year '2' INTO <RESULT_FIELDS>-CALQUARTER.
          ELSEIF '0621' <= l_date AND l_date <= '0920'.
        CONCATENATE year '3' INTO <RESULT_FIELDS>-CALQUARTER..
          ELSEIF '0921' <= l_date AND l_date <= '1220'.
        CONCATENATE year '4' INTO <RESULT_FIELDS>-CALQUARTER..
        ELSEIF  l_date <= '0320'.
           CONCATENATE year '1' INTO <RESULT_FIELDS>-CALQUARTER..
          ELSE.
           CONCATENATE l_year '1' INTO <RESULT_FIELDS>-CALQUARTER..
        ENDIF.
    
    *读取服务店代码
      clear g_/BIC/ZSAPGKDM.
      g_/BIC/ZSAPGKDM = <RESULT_FIELDS>-/BIC/ZCUSTOMER.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          INPUT         = g_/BIC/ZSAPGKDM
        IMPORTING
          OUTPUT        = g_/BIC/ZSAPGKDM.
    
    SELECT SINGLE /BIC/Z0FWDDM FROM  /BIC/PZ0FWDDM
      INTO  <RESULT_FIELDS>-/BIC/Z0FWDDM
      WHERE /BIC/ZSAPGKDM = g_/BIC/ZSAPGKDM.
    endloop.
    
    *读取需要字段从表/BIC/AZCZJTO2600 。分配至内表 IT_ZCZJTO26
    * INTO CORRESPONDING FIELDS OF TABLE 自动匹配相应的字段
    SELECT MATERIAL CALQUARTER /BIC/ZSFZR FROM /BIC/AZCZJTO2600
      INTO CORRESPONDING FIELDS OF TABLE IT_ZCZJTO26 FOR ALL ENTRIES IN
      RESULT_PACKAGE
      WHERE MATERIAL = RESULT_PACKAGE-/BIC/ZMATERIAL  AND  CALQUARTER =
      RESULT_PACKAGE-CALQUARTER.
    
    *循环将内表里IT_ZCZJTO26 分配给工作区 WA_ZCZJTO26 。做了分配
     LOOP AT RESULT_PACKAGE ASSIGNING <RESULT_FIELDS> .
        READ TABLE IT_ZCZJTO26 INTO WA_ZCZJTO26
        WITH KEY MATERIAL = <RESULT_FIELDS>-/BIC/ZMATERIAL CALQUARTER =
        <RESULT_FIELDS>-CALQUARTER.
    *执行成功 ,结果是否折让等于工作区 WA_ZCZJTO26-/BIC/ZSFZR.,是/BIC/AZCZJTO2600 里的字段。
        IF sy-subrc = 0.
          <RESULT_FIELDS>-/BIC/ZSFZR = WA_ZCZJTO26-/BIC/ZSFZR.
        ENDIF.
     ENDLOOP.
  • 相关阅读:
    XAF中实现Combox属性编辑(官方)
    XAF 支持多数据库
    XAF 如何使用复合主键和复合外键
    如何禁止双击ListView记录显示DetailView?
    XAF中主从列表模式下获取当前主对象实例
    使用一个非持久字段PersistentAlias
    XAF 如何将文件存储在文件系统中而不是数据库中
    XAF中如何制作弹出窗体选择数据到ListView列表
    XAF 如何用其他线程更新对象
    XPO中 聚合函数的使用(Count,Max,Sum,Min)
  • 原文地址:https://www.cnblogs.com/sakura3/p/8508349.html
Copyright © 2011-2022 走看看