zoukankan      html  css  js  c++  java
  • 采购信息记录批导bapi

    可以批导创建及修改信息记录的主数据。而且可以对条件中的时间段及其数量等级中的金额进行批导及修改。可以根据自己的实际需求进行修改。这就很棒,就很nice!!!

    *********************代码功能*************************************
    *(1) 批量创建信息记录
    *(2) 批量修改信息记录及创建信息记录的有效期间和数量等级
    **********************************************************************
    
    REPORT zmmr_me11_12 NO STANDARD PAGE HEADING.
    TYPE-POOLS:truxs,icon.
    TABLES:eina,sscrfields.
    
    DATA:BEGIN OF it_fname OCCURS 0,
      name TYPE char255,
    END OF it_fname.
    
    DATA:bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.  "用来存储屏幕字段参数值,传递录屏参数
    DATA:messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.  "记录执行BDC过程中产生的消息
    DATA:result_mesg TYPE TABLE OF string WITH HEADER LINE.  "结果信息
    
    DATA: ti_bapicondct LIKE STANDARD TABLE OF bapicondct WITH HEADER LINE ,
          ti_bapicondhd LIKE STANDARD TABLE OF bapicondhd WITH HEADER LINE ,
          ti_bapicondit LIKE STANDARD TABLE OF bapicondit WITH HEADER LINE ,
          ti_bapicondqs LIKE STANDARD TABLE OF bapicondqs WITH HEADER LINE ,
          ti_bapicondvs LIKE STANDARD TABLE OF bapicondvs WITH HEADER LINE,
          bapiret2 LIKE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
          to_bapiknumhs LIKE STANDARD TABLE OF bapiknumhs WITH HEADER LINE,
          to_mem_initial LIKE STANDARD TABLE OF cnd_mem_initial WITH HEADER LINE,
          ls_a017 TYPE a017.
    
    DATA text2 TYPE text1_007s. "附加税值名
    DATA p TYPE i.
    
    TYPES:BEGIN OF ty_tab1,
      flag TYPE c,                "记录标识
      wx TYPE c,                  "是否外协
      eina_mahn1 TYPE mahn1,      "CLX
      eina_urztp TYPE urztp,      "价格执行方式
      eina_urzzt TYPE urzzt,      "编号
      eine_norbm TYPE norbm,      "标准数量
      eine_mwskz TYPE mwskz,      "税代码
      eine_netpr TYPE iprei,      "净价、含税价
      eine_peinh TYPE epein,      "价格单位
      eine_waers TYPE waers,      "净价货币
      eine_angnr TYPE angnr,      "报价/目标价
    *  rm06i_ltex1 TYPE ltext,     "记录信息文本
      rv13a_datab TYPE kodatab,   "有效时间从
      rv13a_datbi TYPE kodatbi,   "有效时间到
    *  konp_konwa TYPE konwa,      "PB00比率单位(货币或百分数)
      konp_kschl2 TYPE kscha,                                   "条件类型2
      konm_kbetr2 TYPE konp-kbetr,                              "条件金额2
      konp_konwa2 TYPE konwa,        "ZVA1比率单位(货币或百分数)
      eina_lifnr TYPE elifn,      "供应商
      eina_matnr  TYPE matnr,     "材料
      eine_ekorg TYPE ekorg,      "采购组织
      eine_werks TYPE ewerk,      "工厂
      konm_kstbm TYPE kstbm,                                   "条件等级数量
      konm_kbetr TYPE konp-kbetr,                                "条件金额
    END OF ty_tab1.
    DATA:gt_tab1 TYPE TABLE OF ty_tab1,
         wa_tab1 TYPE ty_tab1.
    DATA:gt_tab2 TYPE TABLE OF  ty_tab1,
          wa_tab2 TYPE ty_tab1,
          temp_tab TYPE TABLE OF ty_tab1 WITH HEADER LINE.
    
    TYPES:BEGIN OF numb_levels,
      flag TYPE c,                "记录标识
      eina_lifnr TYPE elifn,      "供应商
      eina_matnr  TYPE matnr,     "材料
      eine_ekorg TYPE ekorg,      "采购组织
      eine_werks TYPE ewerk,      "工厂
      konm_kstbm TYPE kstbm,     "条件等级数量
      konm_kbetr TYPE kbetr,     "条件金额
      rv13a_datab TYPE kodatab,   "有效时间从
      rv13a_datbi TYPE kodatbi,   "有效时间到
    END OF numb_levels.
    DATA:gt_nl TYPE TABLE OF numb_levels,
         wa_nl TYPE numb_levels,
         gt_nl2 TYPE TABLE OF numb_levels,
         wa_nl2 TYPE numb_levels.
    
    DATA: aplfzc(3) TYPE c,     "计划交货天数
          normbc(16) TYPE c ,   "标准数量
          netprcx(14) TYPE c,    "净价  GYP
          netprc TYPE iprei,    "净价
          peinhc(5) TYPE c,     "条件定价单位
          lv_bprme TYPE bprme.  "条件单位
    
    SELECTION-SCREEN BEGIN OF BLOCK blk_001 WITH FRAME TITLE text-001 .
    PARAMETERS:p_file LIKE rlgrap-filename.
    SELECTION-SCREEN END OF BLOCK blk_001.
    
    SELECTION-SCREEN FUNCTION KEY 1. "应用工具栏增加按钮
    
    INITIALIZATION.
      WRITE icon_change_text AS ICON TO sscrfields-functxt_01+0(4).
      sscrfields-functxt_01+4(*) = '下载模板'."分配字符位置
    
    AT SELECTION-SCREEN.
      PERFORM dl_template.   "模板下载
    
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file  .
      PERFORM open.
    
    START-OF-SELECTION.
      PERFORM upload_file1.
      PERFORM process_file.
      IF NOT gt_tab1 IS INITIAL.
        PERFORM create_me11.
      ENDIF.
      IF NOT gt_tab2 IS INITIAL.
        PERFORM update_me12.
      ENDIF.
    
    END-OF-SELECTION.
      PERFORM result_message.   "显示执行结果
    
    *&---------------------------------------------------------------------*
    *&      Form  PROCESS_FILE1
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM process_file.
      LOOP AT gt_tab1 INTO wa_tab1 WHERE flag = 'X'.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_tab1-eina_matnr
          IMPORTING
            output = wa_tab1-eina_matnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_tab1-eina_lifnr
          IMPORTING
            output = wa_tab1-eina_lifnr.
        SELECT SINGLE eina~infnr INTO eina-infnr  FROM eina INNER JOIN eine  ON eina~infnr = eine~infnr
          WHERE eina~matnr = wa_tab1-eina_matnr AND eina~lifnr = wa_tab1-eina_lifnr
            AND eine~werks = wa_tab1-eine_werks AND eine~ekorg = wa_tab1-eine_ekorg. "判断该数据是否已近创建
        IF sy-subrc <> 0.
          MOVE-CORRESPONDING wa_tab1 TO wa_nl.
          APPEND wa_nl TO gt_nl.
        ELSE.
          MOVE-CORRESPONDING wa_tab1 TO wa_nl2.
          APPEND wa_nl2 TO gt_nl2.
        ENDIF.
      ENDLOOP.
    
      MOVE gt_tab1 TO temp_tab[].
      CLEAR:gt_tab1[],gt_tab1.
    
      LOOP AT gt_nl INTO wa_nl.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = wa_nl-eina_matnr
          IMPORTING
            output = wa_nl-eina_matnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = wa_nl-eina_lifnr
          IMPORTING
            output = wa_nl-eina_lifnr.
        LOOP AT temp_tab WHERE eina_matnr = wa_nl-eina_matnr AND eina_lifnr = wa_nl-eina_lifnr
            AND eine_werks = wa_nl-eine_werks AND eine_ekorg = wa_nl-eine_ekorg.
          MOVE-CORRESPONDING temp_tab TO wa_tab1.
          APPEND wa_tab1 TO gt_tab1.
        ENDLOOP.
      ENDLOOP.
    
      LOOP AT gt_nl2 INTO wa_nl2.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = wa_nl2-eina_matnr
          IMPORTING
            output = wa_nl2-eina_matnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  = wa_nl2-eina_lifnr
          IMPORTING
            output = wa_nl2-eina_lifnr.
        LOOP AT temp_tab WHERE eina_matnr = wa_nl2-eina_matnr AND eina_lifnr = wa_nl2-eina_lifnr
            AND eine_werks = wa_nl2-eine_werks AND eine_ekorg = wa_nl2-eine_ekorg.
          MOVE-CORRESPONDING temp_tab TO wa_tab2.
          APPEND wa_tab2 TO gt_tab2.
        ENDLOOP.
      ENDLOOP.
      CLEAR:temp_tab[],temp_tab.
    ENDFORM.                    " PROCESS_FILE1
    *&---------------------------------------------------------------------*
    *&      Form  create_me11
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM create_me11.
      LOOP AT gt_tab1 INTO wa_tab1 WHERE flag = 'X'.
        CLEAR: aplfzc,normbc,netprc,netprcx,peinhc.
        aplfzc = wa_tab1-eina_mahn1.
        normbc = wa_tab1-eine_norbm.
        netprc = wa_tab1-eine_netpr. "净价
        peinhc = wa_tab1-eine_peinh.
        CONDENSE aplfzc NO-GAPS.
        CONDENSE normbc NO-GAPS.
        CONDENSE netprcx NO-GAPS.  "GYP
        CONDENSE peinhc NO-GAPS.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_tab1-eina_matnr
          IMPORTING
            output = wa_tab1-eina_matnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_tab1-eina_lifnr
          IMPORTING
            output = wa_tab1-eina_lifnr.
    
        SELECT SINGLE waers FROM lfm1 INTO wa_tab1-eine_waers WHERE lifnr = wa_tab1-eina_lifnr AND ekorg = wa_tab1-eine_ekorg.
    
        IF wa_tab1-eine_waers = 'USD'.
          wa_tab1-eine_mwskz = 'J0'.
        ELSEIF wa_tab1-eine_waers = 'CNY'.
          wa_tab1-eine_mwskz = 'J6'.
        ENDIF.
    
        SELECT SINGLE t007s~text1 INTO text2 FROM t007s WHERE t007s~mwskz = wa_tab1-eine_mwskz AND t007s~spras = sy-langu AND t007s~kalsm = 'TAXCN'.  "附加税值名
        IF text2+1(1) = '%'.
          p = text2+0(1).
        ELSE.
          p = text2+0(2).
        ENDIF.
    
        netprc = netprc / ( 1 + ( p / 100 ) ).  "增值税
        netprcx = netprc.
    *    netprc = netprc * ( 1 + ( p / 100 ) ).  "增值税  GYP
        CONDENSE netprcx NO-GAPS.  "gyp
    
        CLEAR: bdcdata,bdcdata[] .
        PERFORM bdc_dynpro      USING 'SAPMM06I'    '0100'.
        PERFORM bdc_field       USING 'BDC_CURSOR'  'EINE-WERKS'.
        PERFORM bdc_field       USING 'BDC_OKCODE'  '/00'.
        PERFORM bdc_field       USING 'EINA-LIFNR'  wa_tab1-eina_lifnr."供应商
        PERFORM bdc_field       USING 'EINA-MATNR'  wa_tab1-eina_matnr. "材料
        PERFORM bdc_field       USING 'EINE-EKORG'  wa_tab1-eine_ekorg. "采购组织
        PERFORM bdc_field       USING 'EINE-WERKS'  wa_tab1-eine_werks. "工厂
        IF wa_tab1-wx = 'X'.
          PERFORM bdc_field       USING 'RM06I-LOHNB'            'X'.
        ELSE.
          PERFORM bdc_field       USING 'RM06I-NORMB'            'X'.
        ENDIF.
    
        PERFORM bdc_dynpro      USING 'SAPMM06I'    '0101'.
        PERFORM bdc_field       USING 'BDC_CURSOR'  'EINA-URZZT'.
        PERFORM bdc_field       USING 'BDC_OKCODE'  '/00'.
        PERFORM bdc_field       USING 'EINA-MAHN1'  aplfzc.    "CLX
        PERFORM bdc_field       USING 'EINA-URZTP'  wa_tab1-eina_urztp.    "价格执行方式
        PERFORM bdc_field       USING 'EINA-URZZT'  wa_tab1-eina_urzzt.    "编号
    
        PERFORM bdc_dynpro      USING 'SAPMM06I'      '0102'.
        PERFORM bdc_field       USING 'BDC_CURSOR'    'EINE-MWSKZ'.
        PERFORM bdc_field       USING 'BDC_OKCODE'    '=KO'.  "/00
        PERFORM bdc_field       USING 'EINE-NORBM'    normbc.  "标准数量
        PERFORM bdc_field       USING 'EINE-MWSKZ'    wa_tab1-eine_mwskz. "税代码
        PERFORM bdc_field       USING 'EINE-NETPR'    netprcx.    "净价
        PERFORM bdc_field       USING 'EINE-WAERS'    wa_tab1-eine_waers.    "净价货币
    
        PERFORM bdc_dynpro      USING 'SAPMV13A'      '0201'.
        PERFORM bdc_field       USING 'BDC_CURSOR'    'RV13A-DATBI'.
        PERFORM bdc_field       USING 'BDC_OKCODE'    '=BACK'.
        PERFORM bdc_field       USING 'RV13A-DATAB'    wa_tab1-rv13a_datab. "开始时间
        PERFORM bdc_field       USING 'RV13A-DATBI'    wa_tab1-rv13a_datbi. "结束时间
        PERFORM bdc_field       USING 'KONP-KPEIN(01)' peinhc.             "单位
    
        PERFORM bdc_dynpro      USING 'SAPMM06I'      '0102'.
        PERFORM bdc_field       USING 'BDC_CURSOR'    'EINE-APLFZ'.
        PERFORM bdc_field       USING 'BDC_OKCODE'    '/00'.  "/00
        PERFORM bdc_field       USING 'EINE-NORBM'    normbc.  "标准数量
        PERFORM bdc_field       USING 'EINE-MWSKZ'    wa_tab1-eine_mwskz. "税代码
        PERFORM bdc_field       USING 'EINE-NETPR'    netprcx.    "净价
    
        PERFORM bdc_dynpro      USING 'SAPMM06I'        '0105'.
        PERFORM bdc_field       USING 'BDC_CURSOR'      'EINE-ANGNR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'      '/00'.
        PERFORM bdc_field       USING 'EINE-ANGNR'       wa_tab1-eine_angnr.  "报价
    
        PERFORM bdc_dynpro      USING 'SAPMM06I'        '0103'.
        PERFORM bdc_field       USING 'BDC_CURSOR'      'RM06I-LTEX1(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'      '=BU'.
    *    PERFORM bdc_field       USING 'RM06I-LTEX1(01)' wa_tab1-rm06i_ltex1.  "记录信息
    
        CALL TRANSACTION 'ME11' USING bdcdata MODE 'A' UPDATE 'S' MESSAGES INTO messtab.
        READ TABLE messtab WITH KEY msgtyp = 'E'.
        IF sy-subrc = 0.
          LOOP AT messtab WHERE msgtyp = 'E'.
            CALL FUNCTION 'MESSAGE_TEXT_BUILD'  "消息编号及变量使用函数转换为消息内容输出
            EXPORTING
              msgid                    = messtab-msgid
              msgnr                    = messtab-msgnr
              msgv1                     = messtab-msgv1
              msgv2                     = messtab-msgv2
              msgv3                     = messtab-msgv3
              msgv4                     = messtab-msgv4
            IMPORTING
              message_text_output       = result_mesg.
          ENDLOOP.
          CONCATENATE  '物料' wa_tab1-eina_matnr  '' result_mesg INTO result_mesg.
          APPEND result_mesg.
          CLEAR result_mesg.
        ELSE.
          PERFORM condition USING wa_tab1.
        ENDIF.
    
      ENDLOOP.
    ENDFORM.                    "create_me11
    
    
    *&---------------------------------------------------------------------*
    *&      Form  CONDITION
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_wa_tab1  text
    *----------------------------------------------------------------------*
    FORM condition  USING  value(lt_tab) TYPE ty_tab1.
      DATA num TYPE n LENGTH 4.   "数量等级行号
      CLEAR:ti_bapicondct[],ti_bapicondct,ti_bapicondhd[],ti_bapicondhd,ti_bapicondit[],ti_bapicondit,ti_bapicondqs[],ti_bapicondqs,lv_bprme.
      DATA esokzc TYPE c.
      IF lt_tab-wx = 'X'.
        esokzc = '3'.
      ELSE.
        esokzc = '0'.
      ENDIF.
      SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_a017
      FROM a017 WHERE  kschl = 'PB00'   "条件类型             "kappl = 'M' "应用:M采购
      AND lifnr = lt_tab-eina_lifnr     "供应商帐户号
      AND matnr = lt_tab-eina_matnr     "物料
      AND ekorg = lt_tab-eine_ekorg     "采购组织
      AND werks = lt_tab-eine_werks     "工厂
      AND esokz = esokzc.                    "采购信息记录分类-(0:标准   3:分包合同)
      CLEAR esokzc.
    
      SELECT SINGLE kmein INTO lv_bprme FROM konp WHERE knumh = ls_a017-knumh.      "konp:条件(项目)      kmein:条件单位
    
      ti_bapicondct-operation = '004' . "004修改  _009创建
      ti_bapicondct-cond_usage = 'A'.   "条件表用途:定价
      ti_bapicondct-table_no = '017' .  "条件表
      ti_bapicondct-applicatio = 'M' .
      ti_bapicondct-cond_type = 'PB00' .
      ti_bapicondct-valid_to = lt_tab-rv13a_datbi.    "条件记录有效截止日期
      ti_bapicondct-valid_from = lt_tab-rv13a_datab. "条件记录有效起始日
      ti_bapicondct-cond_no = ls_a017-knumh . "条件记录号
      APPEND ti_bapicondct .
      CLEAR ti_bapicondct .
    
    *KONH的BAPI结构----条件( 抬头 )
      ti_bapicondhd-operation = '004' .
      ti_bapicondhd-cond_no = ls_a017-knumh . "条件记录号
      ti_bapicondhd-created_by = sy-uname.    "创建对象的人员名称
      ti_bapicondhd-creat_date = sy-datum.    "记录的创建日期
      ti_bapicondhd-cond_usage = 'A' .
      ti_bapicondhd-table_no = ' 017' .
      ti_bapicondhd-applicatio = 'M' .
      ti_bapicondhd-cond_type = ' PB00' .
      ti_bapicondhd-valid_from = lt_tab-rv13a_datbi.
      ti_bapicondhd-valid_to = lt_tab-rv13a_datab.
      APPEND ti_bapicondhd.
      CLEAR ti_bapicondhd.
    
    *KONP的BAPI结构
      ti_bapicondit-operation = '004' .
      ti_bapicondit-cond_no = ls_a017-knumh.
      ti_bapicondit-cond_count = '01' .           "条件的序列号
      ti_bapicondit-applicatio = 'M' .
      ti_bapicondit-cond_type = 'PB00' .
      ti_bapicondit-scaletype = 'A' .
      ti_bapicondit-scalebasin = 'C' .            "等级基值指示符,数量规模
      ti_bapicondit-scale_qty = 1 .               "条件等级数量
      ti_bapicondit-calctypcon = 'C' .            "条件计算类型--- C:数量  A:百分比
      ti_bapicondit-cond_value = lt_tab-eine_netpr.          "BAPIs 的货币金额(带有 9 个小数位)-净价
      ti_bapicondit-condcurr = lt_tab-eine_waers. "比率单位(货币或百分数):CNY
      ti_bapicondit-cond_p_unt = peinhc.          "条件定价单位(单位=1)
      ti_bapicondit-cond_unit = lv_bprme.         "条件单位(EA)
      ti_bapicondit-condcurren = lt_tab-eine_waers.
      ti_bapicondit-unitmeasur = lv_bprme.         "条件等级计量单位
      APPEND ti_bapicondit.
      CLEAR ti_bapicondit.
    
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = lt_tab-eina_lifnr
        IMPORTING
          output = lt_tab-eina_lifnr.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = lt_tab-eina_matnr
        IMPORTING
          output = lt_tab-eina_matnr.
    *PB00--->设置等级数量
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = lt_tab-eina_matnr
        IMPORTING
          output = lt_tab-eina_matnr.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = lt_tab-eina_lifnr
        IMPORTING
          output = lt_tab-eina_lifnr.
    
      LOOP AT gt_tab1 INTO wa_tab1 WHERE konm_kbetr > 0 AND eina_lifnr = lt_tab-eina_lifnr AND eina_matnr = lt_tab-eina_matnr
          AND eine_ekorg = lt_tab-eine_ekorg AND eine_werks = lt_tab-eine_werks. "数量等级金额>0
        num = num + 1.
        ti_bapicondqs-operation = '004' .
        ti_bapicondqs-cond_no = ls_a017-knumh.
        ti_bapicondqs-cond_count = '01' .
        ti_bapicondqs-line_no = num.
        ti_bapicondqs-scale_qty = wa_tab1-konm_kstbm.   "条件等级数量
        ti_bapicondqs-cond_unit = lv_bprme.           "条件单位
        ti_bapicondqs-currency = wa_tab1-konm_kbetr.    "BAPIs 的货币金额(带有 9 个小数位)
        ti_bapicondqs-condcurr = lt_tab-eine_waers.   "比率单位(货币或百分数)
        APPEND ti_bapicondqs .
        CLEAR ti_bapicondqs .
      ENDLOOP.
      CLEAR num.
    
      IF lt_tab-eine_waers = 'CNY'.
    *如果货币单位为CNY,添加ZVA1类型
        ti_bapicondit-operation = '004' .
        ti_bapicondit-cond_no = ls_a017-knumh.
        ti_bapicondit-cond_count = '02'.                        "条件的序列号
        ti_bapicondit-applicatio = 'M'.
        ti_bapicondit-cond_type = 'ZVA1'.                       "类型2:ZVA1
        ti_bapicondit-scaletype = 'A'.                          "A基础等级
        ti_bapicondit-scalebasin = 'C' .                        "等级基值指示符,数量规模
        ti_bapicondit-scale_qty = '2'.                          "条件等级数量
        ti_bapicondit-calctypcon = 'A' .                        "条件计算类型--- C:数量  A:百分比
        IF lt_tab-konm_kbetr2 <> 0 OR lt_tab-konm_kbetr2 <> ''.
          ti_bapicondit-cond_value = lt_tab-konm_kbetr2.        "BAPIs 的货币金额(带有 9 个小数位)-(-5%)konm_kbetr2
        ENDIF.
        ti_bapicondit-condcurr = lt_tab-konp_konwa2.            "比率单位(货币或百分数):CNY
        ti_bapicondit-cond_unit = lt_tab-konp_konwa2.           "条件单位
        ti_bapicondit-cond_unit = lv_bprme.
        ti_bapicondit-unitmeasur = lv_bprme.                    "条件等级计量单位
        APPEND ti_bapicondit.
        CLEAR ti_bapicondit.
    *ZVA1--->设置等级数量
        LOOP AT gt_tab1 INTO wa_tab1 WHERE konm_kbetr > 0 AND eina_lifnr = lt_tab-eina_lifnr AND eina_matnr = lt_tab-eina_matnr
         AND eine_ekorg = lt_tab-eine_ekorg AND eine_werks = lt_tab-eine_werks. "数量等级金额>0
          num = num + 1.
          ti_bapicondqs-operation = '004' .
          ti_bapicondqs-cond_no = ls_a017-knumh.
          ti_bapicondqs-cond_count = '02' .
          ti_bapicondqs-line_no = num.
          ti_bapicondqs-scale_qty = wa_tab1-konm_kstbm. "条件等级数量
          ti_bapicondqs-cond_unit = lv_bprme.           "条件单位
          ti_bapicondqs-currency = wa_tab1-konm_kbetr.  "BAPIs 的货币金额(带有 9 个小数位)
          ti_bapicondqs-condcurr = lt_tab-konp_konwa2.   "比率单位(货币或百分数)
          APPEND ti_bapicondqs .
          CLEAR ti_bapicondqs .
        ENDLOOP.
        CLEAR num.
      ENDIF.
    
      CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
        TABLES
          ti_bapicondct  = ti_bapicondct
          ti_bapicondhd  = ti_bapicondhd
          ti_bapicondit  = ti_bapicondit
          ti_bapicondqs  = ti_bapicondqs
          ti_bapicondvs  = ti_bapicondvs
          to_bapiret2    = bapiret2
          to_bapiknumhs  = to_bapiknumhs
          to_mem_initial = to_mem_initial
        EXCEPTIONS
          update_error   = 1
          OTHERS         = 2.
      IF sy-subrc = 0.
        DATA gv_infnr TYPE infnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = lt_tab-eina_lifnr
          IMPORTING
            output = lt_tab-eina_lifnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = lt_tab-eina_matnr
          IMPORTING
            output = lt_tab-eina_matnr.
        SELECT SINGLE infnr INTO gv_infnr FROM eina WHERE matnr = lt_tab-eina_matnr AND lifnr = lt_tab-eina_lifnr.
        CONCATENATE gv_infnr ' 信息记录已创建!' INTO result_mesg.
        APPEND result_mesg.
        CLEAR result_mesg.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        CONCATENATE lt_tab-eina_matnr '操作错误!' INTO result_mesg.
        APPEND result_mesg.
        CLEAR:gv_infnr,result_mesg.
      ENDIF.
    ENDFORM.                    " CONDITION
    *&---------------------------------------------------------------------*
    *&      Form  UPDATE_ME12
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM update_me12.
      LOOP AT gt_tab2 INTO wa_tab2 WHERE flag = 'X'.
        CLEAR: aplfzc,normbc,netprc,netprcx,peinhc.
        peinhc = wa_tab2-eine_peinh.
        CONDENSE peinhc NO-GAPS.
    
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_tab2-eina_matnr
          IMPORTING
            output = wa_tab2-eina_matnr.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            input  = wa_tab2-eina_lifnr
          IMPORTING
            output = wa_tab2-eina_lifnr.
    
        netprc = wa_tab2-eine_netpr.
        netprcx = netprc.
        CONDENSE netprcx NO-GAPS. "GYP
    
        CLEAR bdcdata[].
        PERFORM bdc_dynpro      USING 'SAPMM06I' '0100'.
        PERFORM bdc_field       USING 'BDC_CURSOR'          'EINE-WERKS'.
        PERFORM bdc_field       USING 'BDC_OKCODE'          '/00'.
        PERFORM bdc_field       USING 'EINA-LIFNR'          wa_tab2-eina_lifnr.
        PERFORM bdc_field       USING 'EINA-MATNR'          wa_tab2-eina_matnr.
        PERFORM bdc_field       USING 'EINE-EKORG'          wa_tab2-eine_ekorg.
        PERFORM bdc_field       USING 'EINE-WERKS'          wa_tab2-eine_werks.
        IF wa_tab2-wx = 'X'.
          PERFORM bdc_field       USING 'RM06I-LOHNB'            'X'.
        ELSE.
          PERFORM bdc_field       USING 'RM06I-NORMB'            'X'.
        ENDIF.
    
        PERFORM bdc_dynpro      USING 'SAPMM06I' '0101'.
        PERFORM bdc_field       USING 'BDC_CURSOR'          'EINA-URZTP'.
        PERFORM bdc_field       USING 'BDC_OKCODE'          '/00'.
        PERFORM bdc_field       USING 'EINA-URZTP'          ''.
        PERFORM bdc_field       USING 'EINA-URZTP'          wa_tab2-eina_urztp.
    
        PERFORM bdc_dynpro      USING 'SAPMM06I' '0102'.
        PERFORM bdc_field       USING 'BDC_CURSOR'          'EINE-MWSKZ'.
        PERFORM bdc_field       USING 'BDC_OKCODE'          '/00'.
        PERFORM bdc_field       USING 'EINE-MWSKZ'          wa_tab2-eine_mwskz.
    
        PERFORM bdc_dynpro      USING 'SAPMM06I' '0105'.
        PERFORM bdc_field       USING 'BDC_CURSOR'          'EINE-ANGNR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'          '=KO'.
        PERFORM bdc_field       USING 'EINE-ANGNR'          wa_tab2-eine_angnr.
    
        PERFORM bdc_dynpro      USING 'SAPLV14A' '0102'.
        PERFORM bdc_field       USING 'BDC_CURSOR'          'VAKE-DATAB(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'          '=NEWD'.
    
        PERFORM bdc_dynpro      USING 'SAPMV13A' '0201'.
        PERFORM bdc_field       USING 'BDC_CURSOR'          'KONP-KBETR(01)'.
        PERFORM bdc_field       USING 'BDC_OKCODE'          '=SICH'.
        PERFORM bdc_field       USING 'RV13A-DATAB'          wa_tab2-rv13a_datab.
        PERFORM bdc_field       USING 'RV13A-DATBI'          wa_tab2-rv13a_datbi.
        PERFORM bdc_field       USING 'KONP-KBETR(01)'       netprcx.
    
        CALL TRANSACTION 'ME12' USING bdcdata
              MODE   'N'
              UPDATE 'S'
              MESSAGES INTO messtab.
        READ TABLE messtab WITH KEY msgtyp = 'E'.
        IF sy-subrc = 0.
          LOOP AT messtab WHERE msgtyp = 'E'.
            CALL FUNCTION 'MESSAGE_TEXT_BUILD'  "消息编号及变量使用函数转换为消息内容输出
            EXPORTING
              msgid                    = messtab-msgid
              msgnr                    = messtab-msgnr
              msgv1                     = messtab-msgv1
              msgv2                     = messtab-msgv2
              msgv3                     = messtab-msgv3
              msgv4                     = messtab-msgv4
            IMPORTING
              message_text_output       = result_mesg.
          ENDLOOP.
          CONCATENATE '物料' wa_tab2-eina_matnr ':' result_mesg INTO result_mesg.
          APPEND result_mesg.
          CLEAR result_mesg.
        ELSE.
          PERFORM condition2 USING wa_tab2.  "更新数量等级
        ENDIF.
      ENDLOOP.
    ENDFORM.                    "UPDATE_ME12
    
    *&---------------------------------------------------------------------*
    *&      Form  condition2
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->LT_TAB     text
    *----------------------------------------------------------------------*
    FORM condition2  USING  value(lt_tab) TYPE ty_tab1.
      DATA num TYPE n LENGTH 4.   "数量等级行号
      CLEAR:ti_bapicondct[],ti_bapicondct,ti_bapicondhd[],ti_bapicondhd,ti_bapicondit[],ti_bapicondit,ti_bapicondqs[],ti_bapicondqs,lv_bprme,num.
      DATA esokzc TYPE c.
      IF lt_tab-wx = 'X'.
        esokzc = '3'.
      ELSE.
        esokzc = '0'.
      ENDIF.
    
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = lt_tab-eina_matnr
        IMPORTING
          output = lt_tab-eina_matnr.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = lt_tab-eina_lifnr
        IMPORTING
          output = lt_tab-eina_lifnr.
      SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_a017
      FROM a017 WHERE  kschl = 'PB00'   "条件类型
      AND lifnr = lt_tab-eina_lifnr     "供应商帐户号
      AND matnr = lt_tab-eina_matnr     "物料
      AND ekorg = lt_tab-eine_ekorg     "采购组织
      AND werks = lt_tab-eine_werks     "工厂
      AND datab = lt_tab-rv13a_datab     "起始时间
      AND datbi = lt_tab-rv13a_datbi     "截止时间
      AND esokz = esokzc.               "采购信息记录分类-(0:标准   3:分包合同)
      CLEAR esokzc.
    
      SELECT SINGLE kmein INTO lv_bprme  FROM konp WHERE knumh = ls_a017-knumh.      "konp:条件(项目)      kmein:
    
      ti_bapicondct-operation = '004' . "004修改  _009创建
      ti_bapicondct-cond_usage = 'A'.   "条件表用途:定价
      ti_bapicondct-table_no = '017' .  "条件表
      ti_bapicondct-applicatio = 'M' .
      ti_bapicondct-cond_type = 'PB00' .
      ti_bapicondct-valid_from = lt_tab-rv13a_datab. "条件记录有效起始日
      ti_bapicondct-valid_to = lt_tab-rv13a_datbi.    "条件记录有效截止日期
      ti_bapicondct-cond_no = ls_a017-knumh . "条件记录号
      APPEND ti_bapicondct .
      CLEAR ti_bapicondct .
    
    *KONH的BAPI结构----条件( 抬头 )
      ti_bapicondhd-operation = '004' .
      ti_bapicondhd-cond_no = ls_a017-knumh . "条件记录号
      ti_bapicondhd-created_by = sy-uname.    "创建对象的人员名称
      ti_bapicondhd-creat_date = sy-datum.    "记录的创建日期
      ti_bapicondhd-cond_usage = 'A' .
      ti_bapicondhd-table_no = ' 017' .
      ti_bapicondhd-applicatio = 'M' .
      ti_bapicondhd-cond_type = ' PB00' .
      ti_bapicondhd-valid_from = lt_tab-rv13a_datab.
      ti_bapicondhd-valid_to = lt_tab-rv13a_datbi.
      APPEND ti_bapicondhd .
      CLEAR ti_bapicondhd .
    
    *KONP的BAPI结构
      ti_bapicondit-operation = '004' .
      ti_bapicondit-cond_no = ls_a017-knumh.
      ti_bapicondit-cond_count = '01' .           "条件的序列号
      ti_bapicondit-applicatio = 'M' .
      ti_bapicondit-cond_type = 'PB00' .
      ti_bapicondit-scaletype = 'A' .
      ti_bapicondit-scalebasin = 'C' .            "等级基值指示符,数量规模
      ti_bapicondit-scale_qty = 1 .               "条件等级数量
      ti_bapicondit-calctypcon = 'C' .            "条件计算类型--- C:数量  A:百分比
      ti_bapicondit-cond_value = netprcx.          "BAPIs 的货币金额(带有 9 个小数位)-净价
      ti_bapicondit-condcurr = lt_tab-eine_waers. "比率单位(货币或百分数):CNY
      ti_bapicondit-cond_p_unt = peinhc.          "条件定价单位(单位=1)
      ti_bapicondit-cond_unit = lv_bprme.         "条件单位
      ti_bapicondit-condcurren = lt_tab-eine_waers.
      ti_bapicondit-unitmeasur = lv_bprme.         "条件等级计量单位
      APPEND ti_bapicondit.
      CLEAR ti_bapicondit.
    *PB00--->设置等级数量
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = lt_tab-eina_matnr
        IMPORTING
          output = lt_tab-eina_matnr.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          input  = lt_tab-eina_lifnr
        IMPORTING
          output = lt_tab-eina_lifnr.
      LOOP AT gt_tab2 INTO wa_tab2 WHERE  konm_kbetr > 0 AND eina_lifnr = lt_tab-eina_lifnr AND eina_matnr = lt_tab-eina_matnr
          AND eine_ekorg = lt_tab-eine_ekorg AND eine_werks = lt_tab-eine_werks. "数量等级金额>0
        num = num + 1.
        ti_bapicondqs-operation = '004' .
        ti_bapicondqs-cond_no = ls_a017-knumh.
        ti_bapicondqs-cond_count = '01' .
        ti_bapicondqs-line_no = num.
        ti_bapicondqs-scale_qty = wa_tab2-konm_kstbm.   "条件等级数量
        ti_bapicondqs-cond_unit = lv_bprme.           "条件单位
        ti_bapicondqs-currency = wa_tab2-konm_kbetr.    "BAPIs 的货币金额(带有 9 个小数位)
        ti_bapicondqs-condcurr = lt_tab-eine_waers.   "比率单位(货币或百分数)
        APPEND ti_bapicondqs .
        CLEAR ti_bapicondqs .
      ENDLOOP.
      CLEAR num.
    
      IF lt_tab-eine_waers = 'CNY'.
    *如果货币单位为CNY,添加ZVA1类型
        ti_bapicondit-operation = '004' .
        ti_bapicondit-cond_no = ls_a017-knumh.
        ti_bapicondit-cond_count = '02'.                        "条件的序列号
        ti_bapicondit-applicatio = 'M'.
        ti_bapicondit-cond_type = lt_tab-konp_kschl2.           "进项税扣除ZVA1
        ti_bapicondit-scaletype = 'A'.                          "A基础等级
        ti_bapicondit-scalebasin = 'C' .                        "等级基值指示符,数量规模
        ti_bapicondit-scale_qty = '2'.                          "条件等级数量
        ti_bapicondit-calctypcon = 'A' .                        "条件计算类型--- C:数量  A:百分比
        IF lt_tab-konm_kbetr2 <> 0 OR lt_tab-konm_kbetr2 <> ''.
          ti_bapicondit-cond_value = lt_tab-konm_kbetr2.        "BAPIs 的货币金额(带有 9 个小数位)-(-5%)konm_kbetr2
        ENDIF.
        ti_bapicondit-condcurr = lt_tab-konp_konwa2.            "比率单位(货币或百分数):CNY
        ti_bapicondit-cond_unit = lt_tab-konp_konwa2.           "条件单位
        ti_bapicondit-cond_unit = lv_bprme.
        ti_bapicondit-unitmeasur = lv_bprme.                    "条件等级计量单位
        APPEND ti_bapicondit.
        CLEAR ti_bapicondit.
    *ZVA1--->设置等级数量
        LOOP AT gt_tab2 INTO wa_tab2 WHERE  konm_kbetr > 0 AND eina_lifnr = lt_tab-eina_lifnr AND eina_matnr = lt_tab-eina_matnr
            AND eine_ekorg = lt_tab-eine_ekorg AND eine_werks = lt_tab-eine_werks. "数量等级金额>0
          num = num + 1.
          ti_bapicondqs-operation = '004' .
          ti_bapicondqs-cond_no = ls_a017-knumh.
          ti_bapicondqs-cond_count = '02' .
          ti_bapicondqs-line_no = num.
          ti_bapicondqs-scale_qty = wa_tab2-konm_kstbm.   "条件等级数量
          ti_bapicondqs-cond_unit = lv_bprme.           "条件单位
          ti_bapicondqs-currency = wa_tab2-konm_kbetr.    "BAPIs 的货币金额(带有 9 个小数位)
          ti_bapicondqs-condcurr = lt_tab-konp_konwa2.  "比率单位(货币或百分数)
          APPEND ti_bapicondqs .
          CLEAR ti_bapicondqs .
        ENDLOOP.
        CLEAR num.
      ENDIF.
      CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
        TABLES
          ti_bapicondct  = ti_bapicondct
          ti_bapicondhd  = ti_bapicondhd
          ti_bapicondit  = ti_bapicondit
          ti_bapicondqs  = ti_bapicondqs
          ti_bapicondvs  = ti_bapicondvs
          to_bapiret2    = bapiret2
          to_bapiknumhs  = to_bapiknumhs
          to_mem_initial = to_mem_initial
        EXCEPTIONS
          update_error   = 1
          OTHERS         = 2.
      IF sy-subrc = 0.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'  "消息编号及变量使用函数转换为消息内容输出
           EXPORTING
             msgid                    = messtab-msgid
             msgnr                    = messtab-msgnr
             msgv1                     = messtab-msgv1
             msgv2                     = messtab-msgv2
             msgv3                     = messtab-msgv3
             msgv4                     = messtab-msgv4
           IMPORTING
             message_text_output       = result_mesg.
        CONCATENATE '物料' lt_tab-eina_matnr ' 更改并创建有效期 ' lt_tab-rv13a_datab '-' lt_tab-rv13a_datbi   INTO result_mesg.
        APPEND result_mesg.
        CLEAR result_mesg.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        CONCATENATE '物料' lt_tab-eina_matnr '操作错误!' INTO result_mesg.
        APPEND result_mesg.
        CLEAR result_mesg.
      ENDIF.
    ENDFORM.                    " CONDITION
    *&---------------------------------------------------------------------*
    *&      Form  bdc_dynpro
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->VALUE(PROGRAM)  text
    *      -->VALUE(DYNPRO)   text
    *----------------------------------------------------------------------*
    FORM bdc_dynpro USING value(program) value(dynpro).
      CLEAR bdcdata.
      bdcdata-program  = program.
      bdcdata-dynpro   = dynpro.
      bdcdata-dynbegin = 'X'.
      APPEND bdcdata.
    ENDFORM.                    "BDC_DYNPRO
    
    *&---------------------------------------------------------------------*
    *&      Form  bdc_field
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->VALUE(FNAM)  text
    *      -->VALUE(FVAL)  text
    *----------------------------------------------------------------------*
    FORM bdc_field USING value(fnam) value(fval).
      CLEAR bdcdata.
      bdcdata-fnam = fnam.
      bdcdata-fval = fval.
      APPEND bdcdata.
    ENDFORM.                    "bdc_field
    *&---------------------------------------------------------------------*
    *&      Form  OPEN
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM open .
      CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
        EXPORTING
          program_name  = syst-repid
          dynpro_number = syst-dynnr
          mask          = '*.xlsx,*.xls'
          static        = 'X'
        CHANGING
          file_name     = p_file.
    ENDFORM.                    " OPEN
    
    *&---------------------------------------------------------------------*
    *&      Form  upload_file
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM upload_file1.
      DATA: it_raw_data TYPE truxs_t_text_data.
      FIELD-SYMBOLS <fs> TYPE ty_tab1.
      FIELD-SYMBOLS:<fw>.
      DATA: i_excel TYPE TABLE OF zalsmex_tabline,"表格结构。"
            w_excel TYPE zalsmex_tabline.
      DATA:num_col TYPE i.
      REFRESH: gt_tab1.
      "调用此函数,将Excel中的内容以类似坐标的形式存储到I_excel内表中。"
      CALL FUNCTION 'ZZALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          filename                = p_file
          i_begin_col             = 1
          i_begin_row             = 1
          i_end_col               = 30       "控制传入字段个数
          i_end_row               = 5000
        TABLES
          intern                  = i_excel
        EXCEPTIONS
          inconsistent_parameters = 1
          upload_ole              = 2
          OTHERS                  = 3.
      DELETE i_excel WHERE row = 1.        "删除第一行文本抬头。
      IF i_excel IS INITIAL.
        CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
          EXPORTING
            diagnosetext1 = '数据错误'
            textline1     = 'Excel表格中没有内容!'
            titel         = '提示'.
        RETURN.
      ENDIF.
      SORT i_excel BY row col.
    
      LOOP AT i_excel INTO w_excel.
        num_col = w_excel-col.
        ASSIGN COMPONENT  num_col  OF STRUCTURE wa_tab1 TO <fw>.
        <fw> = w_excel-value.
        AT END OF row.
          APPEND wa_tab1 TO gt_tab1.
          CLEAR:wa_tab1.
        ENDAT.
        CLEAR:w_excel.
      ENDLOOP.
    ENDFORM.                    " UPLOAD_FILE
    
    *&---------------------------------------------------------------------*
    *&      Form  result_message
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM result_message.
      CLEAR: aplfzc,normbc,netprc,netprcx,peinhc.
      CLEAR:ti_bapicondct[],ti_bapicondct,ti_bapicondhd[],ti_bapicondhd,ti_bapicondit[],ti_bapicondit,ti_bapicondqs[],ti_bapicondqs,lv_bprme.
      LOOP AT result_mesg.
        WRITE: / result_mesg.
      ENDLOOP.
    ENDFORM.                    "sub_output_result
    *&---------------------------------------------------------------------*
    *&      Form  DOWNLOAD_TEMPLATE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM dl_template.
      CASE sscrfields-ucomm.
        WHEN 'FC01'.
          PERFORM download_template. "创建
      ENDCASE.
    ENDFORM.                    " DOWNLOAD_TEMPLATE
    *&---------------------------------------------------------------------*
    *&      Form  DOWNLOAD_TEMPLATE1
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM download_template.
      DATA lv_file LIKE rlgrap-filename.
      DATA lv_string TYPE string.
    
      CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
      EXPORTING
    *     PROGRAM_NAME        = SYST-REPID
    *     DYNPRO_NUMBER       = SYST-DYNNR
    *     field_name          = lv_string
        static              = 'X'
        mask                = ',EXCEL,*.xls.'
    *     FILEOPERATION       = 'R'
    *     PATH                =
      CHANGING
        file_name           = lv_file.
      CLEAR wa_tab1.
      wa_tab1-flag = 'X'.                 "记录标识
      wa_tab1-wx = ''.                    "是否外协
      wa_tab1-eina_mahn1 = '20'.          "CLX
      wa_tab1-eina_urztp = '1'.           "价格执行方式
      wa_tab1-eina_urzzt = '111'.         "编号
      wa_tab1-eine_norbm = '10'.          "标准数量
      wa_tab1-eine_mwskz = 'J6'.          "税代码
      wa_tab1-eine_netpr = '10'.          "净价
      wa_tab1-eine_waers = 'CNY'.         "净价货币
      wa_tab1-eine_angnr = '10'.          "报价
      wa_tab1-eine_peinh = '1'.           "价格单位
    *  wa_tab1-rm06i_ltex1 = '信息文本'.   "记录信息文本
      wa_tab1-rv13a_datab = '20190901'.   "有效时间从
      wa_tab1-rv13a_datbi = '20190910'.   "有效时间到
    *  wa_tab1-konp_konwa = 'CNY'.         "PB00比率单位(货币或百分数)
      wa_tab1-konp_kschl2 = 'ZVA1'.                             "条件类型2
      wa_tab1-konm_kbetr2 = '-5'.                               "条件金额2
      wa_tab1-konp_konwa2 = '%'.          "ZVA1比率单位(货币或百分数)
      wa_tab1-eina_lifnr = '101472'.      "供应商
      wa_tab1-eina_matnr  = 'YCL*'.       "材料
      wa_tab1-eine_ekorg = '1000'.        "采购组织
      wa_tab1-eine_werks = '7888'.        "工厂
      wa_tab1-konm_kstbm = '1000'.        "条件等级数量
      wa_tab1-konm_kbetr = '10'.          "条件金额
      APPEND wa_tab1 TO gt_tab1.
      CLEAR wa_tab1.
      wa_tab1-eina_lifnr = '101472'.      "供应商
      wa_tab1-eina_matnr  = 'YCL*'.       "材料
      wa_tab1-eine_ekorg = '1000'.        "采购组织
      wa_tab1-eine_werks = '7888'.        "工厂
      wa_tab1-konm_kstbm = '2000'.        "条件等级数量
      wa_tab1-konm_kbetr = '9'.          "条件金额
      APPEND wa_tab1 TO gt_tab1.
      CLEAR wa_tab1.
      wa_tab1-eina_lifnr = '101472'.      "供应商
      wa_tab1-eina_matnr  = 'YCL*'.       "材料
      wa_tab1-eine_ekorg = '1000'.        "采购组织
      wa_tab1-eine_werks = '7888'.        "工厂
      wa_tab1-konm_kstbm = '1000'.        "条件等级数量
      wa_tab1-konm_kbetr = '-5'.          "条件金额
      APPEND wa_tab1 TO gt_tab1.
      CLEAR wa_tab1.
      wa_tab1-eina_lifnr = '101472'.      "供应商
      wa_tab1-eina_matnr  = 'YCL*'.       "材料
      wa_tab1-eine_ekorg = '1000'.        "采购组织
      wa_tab1-eine_werks = '7888'.        "工厂
      wa_tab1-konm_kstbm = '2000'.        "条件等级数量
      wa_tab1-konm_kbetr = '-4'.          "条件金额
      APPEND wa_tab1 TO gt_tab1.
      CLEAR wa_tab1.
    
      IF it_fname IS INITIAL.
        PERFORM append_filename USING:'新记录标识',
              '是否外协',
              'CLX',
              '价格执行方式',
              '编号',
              '标准数量',
              '税代码',
              '含税价',
              '价格单位',
              '货币',
              '目标价', "报价
    *          '记录信息文本',
              '开始时间(8位数字)',
              '结束时间(8位数字)',
    *          'PB00单位',
              '条件类型2',
              '金额2',
              '单位2',
              '供应商',
              '物料',
              '采购组织',
              '工厂',
              '条件等级数量',
              '条件金额'.
      ENDIF.
      lv_string = lv_file.
      CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
    *         BIN_FILESIZE                    =
        filename                        = lv_string
    *    filetype                       = 'DBF'
          filetype                        = 'DAT'
        append                       = 'X'
        write_field_separator           = 'X'
    *    codepage                        = '8400'   "指定写文件时用的字符集
      TABLES
        data_tab                        = gt_tab1
        fieldnames                      = it_fname[].
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO result_mesg
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        APPEND result_mesg.
        CLEAR result_mesg.
      ENDIF.
      CLEAR: wa_tab1,gt_tab1,it_fname[].
    ENDFORM.                    " DOWNLOAD_TEMPLATE1
    *&---------------------------------------------------------------------*
    *&      Form  append_filename
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->P_NAME     text
    *----------------------------------------------------------------------*
    FORM append_filename USING p_name .
      it_fname-name = p_name.
      APPEND it_fname.
      CLEAR it_fname.
    ENDFORM.                    "append_filename

    对于时间段及其数量等级的创建及修改也是在网上各种找资料,不过对于这个BAPI_PRICES_CONDITIONS函数还是没有很好的理解。

    abap菜鸟,记录学习笔记。才疏学浅,如有错误,请直接在评论区留言。
  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/freeandeasy/p/11810272.html
Copyright © 2011-2022 走看看