SD-自动扩充销售视图(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZSDR008
*&---------------------------------------------------------------------*
*& Author                  :  NathanSun
*& Create Date        :  2019-10-06
*& Program Type     :  Report
*& Description         :  自动扩充销售视图
*&---------------------------------------------------------------------*
REPORT ZSDR008.

TABLES:MARC,MARA,MVKE.

TYPE-POOLS:SLIS,T001W,ICON.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

TYPESBEGIN OF GTS_DATA .
TYPESMATNR TYPE  MARC-MATNR.                      "物料
    INCLUDE STRUCTURE ZTSD_ST01.
TYPESMESSAGE TYPE  BAPI_MSG.                      "消息
TYPESMTYPE   TYPE  BAPI_MTYPE.                    "消息类型
TYPESEND OF GTS_DATA.

DATAGT_ALV    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_ALV_A  TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_ALV_B  TYPE TABLE OF GTS_DATA WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONSS_MATNR  FOR   MARC-MATNR     MODIF ID MXY .                          "物料
SELECT-OPTIONSS_WERKS  FOR   MARC-WERKS     MODIF ID MXY .                          "工厂
SELECT-OPTIONSS_MTART  FOR   MARA-MTART     MODIF ID MXY .                          "物料类型
SELECT-OPTIONSS_ERSDA  FOR   MARA-ERSDA     MODIF ID MXY .                          "创建日期
SELECT-OPTIONSS_VKORG  FOR   MVKE-VKORG     MODIF ID MXY .                          "销售组织
SELECT-OPTIONSS_VTWEG  FOR   MVKE-VTWEG     MODIF ID MXY .                          "分销渠道
SELECTION-SCREEN END OF BLOCK B2.

*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
数据声明
  DATACLIDAINP           LIKE  BAPI_MARA_GA"客户端层次物料数据
        CLIDAOUT           LIKE  BAPI_MARA,    "客户端层次物料数据
        CLIDAOUTX          LIKE  BAPI_MARAX,   "BAPI_MARA 的复选框结构
        HEADDATA           LIKE  BAPIMATHEAD,  "带有控制信息的表头段
        RETURN             LIKE  BAPIRET2,     "返回参数
        CLIENTDATA         TYPE  BAPI_MARA,
        CLIENTDATAX        TYPE  BAPI_MARAX,
        PLANTDATA          TYPE  BAPI_MARC,
        PLANTDATAX         TYPE  BAPI_MARCX,
        SALESDATA          TYPE  BAPI_MVKE,
        SALESDATAX         TYPE  BAPI_MVKEX,
        TAXCLASSIFICATIONS LIKE  BAPI_MLAN OCCURS WITH HEADER LINE,
        RETURNMES          LIKE  BAPI_MATRETURN2 OCCURS WITH HEADER LINE.

  DATA GT_ZTSD_ST01 TYPE TABLE OF ZTSD_ST01 WITH HEADER LINE .
  CLEAR GT_ALV[].
  SELECT
    MARC~MATNR
    MARC
~WERKS
    MARA
~MTART
    TVKWZ
~VKORG
    TVKWZ
~VTWEG
    
INTO CORRESPONDING FIELDS OF TABLE GT_ALV[]
    
FROM MARC
    INNER 
JOIN MARA   ON MARC~MATNR MARA~MATNR
    INNER 
JOIN TVKWZ  ON MARC~WERKS TVKWZ~WERKS
    
WHERE MARC~MATNR  IN S_MATNR
      
AND MARC~WERKS  IN S_WERKS
      
AND MARA~MTART  IN S_MTART
      
AND MARA~ERSDA  IN S_ERSDA
      
AND TVKWZ~VKORG IN S_VKORG
      
AND TVKWZ~VTWEG IN S_VTWEG
      
.

  LOOP AT GT_ALV.
    SELECT SINGLE MATNR,VKORG,VTWEG INTO @DATA(LV_MVKEFROM MVKE
      
WHERE MATNR @GT_ALV-MATNR
        
AND VKORG @GT_ALV-VKORG
        
AND VTWEG @GT_ALV-VTWEG
        
.
    IF SY-SUBRC 0.
      DELETE GT_ALV.
    ELSE .
      CLEAR GT_ZTSD_ST01[] .
      SELECT INTO CORRESPONDING FIELDS OF TABLE GT_ZTSD_ST01[]  FROM ZTSD_ST01
        
WHERE WERKS GT_ALV-WERKS
        
.
      CLEAR GT_ZTSD_ST01 .
      READ TABLE GT_ZTSD_ST01 WITH KEY MTART GT_ALV-MTART .
      IF SY-SUBRC 0.
        DELETE GT_ZTSD_ST01[] WHERE MTART <> GT_ALV-MTART .
      ELSE .
        DELETE GT_ZTSD_ST01[] WHERE MTART IS NOT INITIAL  .
      ENDIF.

      READ TABLE GT_ZTSD_ST01 WITH KEY VKORG GT_ALV-VKORG .
      IF SY-SUBRC 0.
        DELETE GT_ZTSD_ST01[] WHERE VKORG <> GT_ALV-VKORG .
      ELSE .
        DELETE GT_ZTSD_ST01[] WHERE VKORG IS NOT INITIAL  .
      ENDIF.

      READ TABLE GT_ZTSD_ST01 WITH KEY VTWEG GT_ALV-VTWEG .
      IF SY-SUBRC 0.
        DELETE GT_ZTSD_ST01[] WHERE VTWEG <> GT_ALV-VTWEG .
      ELSE .
        DELETE GT_ZTSD_ST01[] WHERE VTWEG IS NOT INITIAL  .
      ENDIF.
      IF GT_ZTSD_ST01 IS INITIAL .
        READ TABLE GT_ZTSD_ST01 INDEX .
      ENDIF.

      IF GT_ZTSD_ST01 IS NOT INITIAL.
        GT_ALV-SPART      GT_ZTSD_ST01-SPART .
        GT_ALV-DWERK      GT_ZTSD_ST01-DWERK .
        GT_ALV-TAXKM_HK   GT_ZTSD_ST01-TAXKM_HK .
        GT_ALV-TAXKM_CN   GT_ZTSD_ST01-TAXKM_CN .
        GT_ALV-KTGRM      GT_ZTSD_ST01-KTGRM .
        GT_ALV-MTVFP      GT_ZTSD_ST01-MTVFP .
        GT_ALV-MTPOS      GT_ZTSD_ST01-MTPOS .
        GT_ALV-MTPOS_MARA GT_ZTSD_ST01-MTPOS_MARA .
        GT_ALV-TRAGR      GT_ZTSD_ST01-TRAGR .
        GT_ALV-LADGR      GT_ZTSD_ST01-LADGR .

* Header segment with control information
        HEADDATA-MATERIAL      GT_ALV-MATNR.      "物料
        HEADDATA-MATL_TYPE     GT_ALV-MTART.      "物料类型
        HEADDATA-SALES_VIEW    'X'.               "销售视图

* Client-specific material data
        CLEAR CLIENTDATA .
        CLIENTDATA-DIVISION    GT_ALV-SPART.      "产品组
        CLIENTDATA-ITEM_CAT    GT_ALV-MTPOS_MARA"普通项目类别组
        CLIENTDATA-TRANS_GRP   GT_ALV-TRAGR.      "运输组
        CLEAR CLIENTDATAX .
        CLIENTDATAX-DIVISION   'X'.               "产品组
        CLIENTDATAX-ITEM_CAT   'X'.               "普通项目类别组
        CLIENTDATAX-TRANS_GRP  'X'.               "运输组

* Plant-specific material data
        CLEAR PLANTDATA .
        PLANTDATA-AVAILCHECK    GT_ALV-MTVFP.     "可用性检查
        PLANTDATA-LOADINGGRP    GT_ALV-LADGR.     "装载组
        CLEAR PLANTDATAX .
        PLANTDATAX-AVAILCHECK   'X'.              "可用性检查
        PLANTDATAX-LOADINGGRP   'X'.              "装载组

* Sales data
        CLEAR SALESDATA .
        SALESDATA-SALES_ORG    GT_ALV-VKORG.      "销售组织
        SALESDATA-DISTR_CHAN   GT_ALV-VTWEG.      "分销渠道
        SALESDATA-DELYG_PLNT   GT_ALV-DWERK.      "交货工厂
        SALESDATA-ITEM_CAT     GT_ALV-MTPOS.      "来自物料主文件的项目类别组
        SALESDATA-ACCT_ASSGT   GT_ALV-KTGRM.      "该物料的科目设置组
        CLEAR SALESDATAX .
        SALESDATAX-SALES_ORG   GT_ALV-VKORG.      "销售组织
        SALESDATAX-DISTR_CHAN  GT_ALV-VTWEG.      "销售组织
        SALESDATAX-DELYG_PLNT  'X'.               "交货工厂
        SALESDATAX-ITEM_CAT    'X'.               "来自物料主文件的项目类别组
        SALESDATAX-ACCT_ASSGT  'X'.               "该物料的科目设置组

* Tax classifications
        CLEAR TAXCLASSIFICATIONS[] .
        TAXCLASSIFICATIONS-DEPCOUNTRY 'HK'.
        TAXCLASSIFICATIONS-TAX_TYPE_1 'MWST'.
        TAXCLASSIFICATIONS-TAXCLASS_1 GT_ALV-TAXKM_HK.
        APPEND TAXCLASSIFICATIONS.
        CLEAR TAXCLASSIFICATIONS.

        TAXCLASSIFICATIONS-DEPCOUNTRY 'CN'.
        TAXCLASSIFICATIONS-TAX_TYPE_1 'MWST'.
        TAXCLASSIFICATIONS-TAXCLASS_1 GT_ALV-TAXKM_CN.
        APPEND TAXCLASSIFICATIONS.
        CLEAR TAXCLASSIFICATIONS.

        CLEAR RETURNMES[].
        CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
          EXPORTING
            HEADDATA           HEADDATA
            CLIENTDATA         
CLIENTDATA
            CLIENTDATAX        
CLIENTDATAX
            PLANTDATA          
PLANTDATA
            PLANTDATAX         
PLANTDATAX
            SALESDATA          
SALESDATA
            SALESDATAX         
SALESDATAX
          
IMPORTING
            RETURN             RETURN
          TABLES
            TAXCLASSIFICATIONS TAXCLASSIFICATIONS[]
            RETURNMESSAGES     
RETURNMES[].

        DELETE RETURNMES[] WHERE TYPE <> 'E' .

        IF RETURNMES[] IS NOT INITIAL.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          SORT RETURNMES[] BY MESSAGE .
          DELETE ADJACENT DUPLICATES FROM RETURNMES[] COMPARING MESSAGE.
          LOOP AT RETURNMES.
            GT_ALV-MESSAGE GT_ALV-MESSAGE && ';' && RETURNMES-MESSAGE.
            GT_ALV-MTYPE   'E'.
            CLEAR RETURNMES .
          ENDLOOP.
        ELSE .
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              WAIT 'X'.
          GT_ALV-MESSAGE '操作成功!.
          GT_ALV-MTYPE   'S'.
        ENDIF.

      ELSE .
        GT_ALV-MESSAGE '配置表无相关数据!.
        GT_ALV-MTYPE   'E'.
      ENDIF.

      MODIFY GT_ALV.
    ENDIF.

    CLEAR GT_ALV.
    CLEAR LV_MVKE.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  S_LAYOUT-COLTAB_FIELDNAME 'CELLCOLOR'"单元格颜色内表字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_SAVE                   'A'
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_ALV[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-SELTEXT_L &2.

    IF WA_FIELDCAT-FIELDNAME =  'CKBOX' .
      WA_FIELDCAT-CHECKBOX 'X'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME =  'MENGE_T' .
      WA_FIELDCAT-REF_TABNAME 'AUFM'.
      WA_FIELDCAT-REF_FIELDNAME 'MENGE'.
      WA_FIELDCAT-OUTPUTLEN '13'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME =  'LGORT_T' .
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME 'PLNBEZ'
       OR WA_FIELDCAT-FIELDNAME 'MATNR'
       OR WA_FIELDCAT-FIELDNAME 'MATNRT'
      .
      WA_FIELDCAT-REF_TABNAME 'MARA'.
      WA_FIELDCAT-REF_FIELDNAME 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'ARKTX' OR WA_FIELDCAT-FIELDNAME 'WAKTX' .
      WA_FIELDCAT-REF_TABNAME 'VBAP'.
      WA_FIELDCAT-REF_FIELDNAME 'ARKTX'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'AUFNR' .
      WA_FIELDCAT-REF_TABNAME 'AUFK'.
      WA_FIELDCAT-REF_FIELDNAME 'AUFNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'BLDAT'
       OR WA_FIELDCAT-FIELDNAME 'BUDAT'
      .
      WA_FIELDCAT-REF_TABNAME 'MATDOC'.
      WA_FIELDCAT-REF_FIELDNAME 'BLDAT'.
*      WA_FIELDCAT-EDIT = 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'MESSAGE' .
      WA_FIELDCAT-OUTPUTLEN '100'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'TYPBO'
     OR WA_FIELDCAT-FIELDNAME 'TYPAI'
      .
      WA_FIELDCAT-ICON 'X'.
      WA_FIELDCAT-OUTPUTLEN '13'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.

  FILL_FIELD :
     'MATNR'       '物料',
     'WERKS'       '工厂',
     'MTART'       '物料类型',
     'VKORG'       '销售组织',
     'VTWEG'       '分销渠道',
     'SPART'       '产品组',
     'DWERK'       '交货工厂',
     'TAXKM_HK'    '物料的税分类_HK',
     'TAXKM_CN'    '物料的税分类_CN',
     'KTGRM'       '科目设置组',
     'MTVFP'       '可用性检查',
     'MTPOS'       '项目类别组',
     'MTPOS_MARA'  '普通项目类别组',
     'TRAGR'       '运输组',
     'LADGR'       '装载组',
     'MTYPE'       '消息类型',
     'MESSAGE'     '消息'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN1'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'ALL'.

  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.

START-OF-SELECTION.

  PERFORM FOM_GETDATA.
  PERFORM FRM_DISPLAY.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: So-PMI扩充情感词典程序是一种用于增强情感词典的方法,它能够自动地从大规模的文本数据中,通过词语的共现频率,计算出词语之间的关联程度,以此来补充情感词典中的缺陷。 该程序的主要思路是以“so-pmi”(Simpson overlap Pointwise Mutual Information)算法为基础,通过计算文本中情感词汇与其他词语之间的共现频率和相关性,然后通过加强相关性强的词内在的情感色彩,进而增强情感词典的效力。 该程序的应用场景非常广泛,包括社交媒体等大量文本数据的情感分析,以及服务于广告等领域的情感定位,通过不断更新和完善情感词典,寻找出最能反映用户情感的词汇,为营销者提供更加精准的关键词。 在实际应用中,拥有一个完善的情感词典对于情感分析的准确性和效率都非常重要,而So-PMI扩充情感词典程序就为这一问题提供了一种新的解决方案。通过该程序的不断优化和迭代,将确保情感词典的不断完善和更新,为用户提供更加精准、高效、全面的情感分析服务。 ### 回答2: So-PMI是基于点互信息(PMI)算法的情感词典扩充程序,用于识别文本中的情感极性(正面或负面),并且可以将其扩充到新的词汇当中。 该程序的工作原理是分析单词之间在语料库中出现的频率,计算出它们之间的PMI值。如果某个词汇与正面评价或负面评价词汇的PMI值比其他一般词汇高,那么该词汇很有可能与情感极性相关。由此,程序可以通过PMI计算的方式来标记新的情感词。 扩充了情感词典之后,So-PMI程序可以更好地理解文本的情感含义,并提供更准确的情感分析。除了文本分析,So-PMI还可以应用于情感识别、舆情分析、社会媒体分析等多个领域。 总之,so-PMI扩充情感词典程序是一种有效的情感分析工具,可以提高文本情感分析的准确性和覆盖面,具有广泛的应用前景。 ### 回答3: So-PMI是一种基于情感词典的自然语言处理技术,其主要应用于对文本情感分析和情感分类。在传统的情感分析方法中,情感词典是关键的组成部分,通过词典中预先定义好的情感词进行情感评估。然而,传统的方法只考虑了单一的情感极性,难以识别多义词的不同情感,也无法识别出带有强烈或微弱情感的词语。特别是在面对语言的多样性和情感隐含的情况下,传统方法可能会遇到困难。 So-PMI方法则通过一种基于单词对之间PMI(点互信息)的计算方法,对情感词典进行扩展和更新。它利用论坛和新闻社交媒体的文本数据,将同一单词和情感词的共现频率和单独出现频率相比较,并计算单词与情感词间的PMI指标。这种方法解决了传统情感词典中存在的单一情感词问题,同时区分不同的极性和强度。因此,So-PMI扩充的情感词典更加准确和全面,更适用于不同场景下的情感分析。 总之,So-PMI扩充情感词典程序是一种基于单词对之间PMI的计算方法,能够有效改善传统情感分析方法的不足,提高情感分析的准确性和细粒度,并且已经在自然语言处理领域得到了广泛应用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值