销售合同批量导入

事务代码:VA41,输入抬头信息:合同类型、销售组织、分销渠道、产品组、销售办事处、销售组。

 

输入售达方、客户参考、客户参考日期、描述、合同开始日期、合同结束日期、行项目号、物料、目标值和业务员。

 

 

输入附加数据B内的信息:

 

实际业务中需要导入大量的销售合同数据,因此需要使用BAPI批量导入功能位置。可使用BAPI:BAPI_CONTRACT_CREATEFROMDATA批量导入。

1、使用BAPI:BAPI_CONTRACT_CREATEFROMDATA时,可以通过extensionin参数给自定义的参数赋值。

 

2、在表vbak中找到需要增强的字段,同时添加需要增强的字段分别APPEND到这四个结构中:BAPE_VBAK、BAPE_VBAKX、VBAKKOZ、VBAKKOZX。

 

 

 

 

3、将需要增强的字段写入到extensionin中,代码参见技术实现。

BAPI参数声明

 

需要传入的数据数据:

抬头数据:

 

 

附加数据B的数据:

 

导入BAPI

通过事务代码VA43,通过生成的合同号查询导入信息。

REPORT zsdb_024.

TABLES:sscrfields.
*----------------------------------------------------------------------*
* 定义内表
*----------------------------------------------------------------------*
DATA:BEGIN OF gt_input OCCURS 0,
       htnum(10)     TYPE c,           "手工合同编号
       auart         TYPE vbak-auart,  "合同类型
       vkorg         TYPE vbak-vkorg,  "销售组织
       vtweg         TYPE vbak-vtweg,  "分销渠道
       spart         TYPE vbak-spart,  "产品组
       vkbur         TYPE vbak-vkbur,  "销售部门
       vkgrp         TYPE vbak-vkgrp,  "销售组
       kunnr         TYPE vbak-kunnr,  "客户编码
       kname(70)     TYPE c,           "客户名称
       bstkd         TYPE vbkd-bstkd,  "CD合同编号
       bstdk         TYPE string,  "合同签署日期
*       bstdk         TYPE vbkd-bstdk,  "合同签署日期
       ktext         TYPE vbak-ktext,  "合同描述
       guebg         TYPE string,  "合同开始日期
*       guebg         TYPE vbak-guebg,  "合同开始日期
       gueen         TYPE string,  "合同结束日期
*       gueen         TYPE vbak-gueen,  "合同结束日期
       zwert         TYPE vbap-zwert,  "合同金额(目标值)
       zyfwtr        TYPE vbak-zyfwtr, "预收款金额/元(1)
       zyfpre        TYPE vbak-zyfpre, "预收款占比(1)
       zyfdat        TYPE string, "预收款到期日(1)
*       zyfdat        TYPE vbak-zyfdat, "预收款到期日(1)
       zyfyq         TYPE vbak-zyfyq,  "预收款已清(1)
       zjdwtr        TYPE vbak-zjdwtr, "进度款金额/元(2)
       zjdpre        TYPE vbak-zjdpre, "进度款占比(2)
       zjddat        TYPE string, "进度款到期日(2)
*       zjddat        TYPE vbak-zjddat, "进度款到期日(2)
       zjdyq         TYPE vbak-zjdyq,  "进度款已清(2)
       zfhwtr        TYPE vbak-zfhwtr, "发货款金额/元(3)
       zfhpre        TYPE vbak-zfhpre, "发货款占比(3)
       zfhdat        TYPE string, "发货款到期日(3)
*       zfhdat        TYPE vbak-zfhdat, "发货款到期日(3)
       zfhyq         TYPE vbak-zfhyq,  "发货款已清(3)
       zdhwtr        TYPE vbak-zdhwtr, "到货款金额/元(4)
       zdhpre        TYPE vbak-zdhpre, "到货款占比(4)
       zdhdat        TYPE string, "到货款到期日(4)
*       zdhdat        TYPE vbak-zdhdat, "到货款到期日(4)
       zdhyq         TYPE vbak-zdhyq,  "到货款已清(4)
       ztswtr        TYPE vbak-ztswtr, "安装款金额/元(5)
       ztspre        TYPE vbak-ztspre, "安装款占比(5)
       ztsdat        TYPE string, "安装款到期日(5)
*       ztsdat        TYPE vbak-ztsdat, "安装款到期日(5)
       ztsyq         TYPE vbak-ztsyq,  "安装款已清(5)
       zzbwtr        TYPE vbak-zzbwtr, "质保金金额(6)
       zzbpre        TYPE vbak-zzbpre, "质保金占比(6)
       zzbdat        TYPE string, "质保款到期日(6)
*       zzbdat        TYPE vbak-zzbdat, "质保款到期日(6)
       zzbyq         TYPE vbak-zzbyq,  "质保款已清(6)
       lifnr         TYPE vbpa-lifnr,  "业务员(工号)
       yname(70)     TYPE c,           "业务员名称
       posnr         TYPE vbap-posnr,  "行项目号
       matnr         TYPE vbap-matnr,  "物料编码
       arktx         TYPE vbap-arktx,  "物料描述

       status(20)    TYPE c,           "导入是否成功状态
       checkmeg(100) TYPE c,           "检查结果
       message(100)  TYPE c,           "处理信息
       gv_pernr      TYPE zppt001-pernr, "员工编号
       znum          TYPE vbap-zwert,
     END OF gt_input.

"只有全为“S”的才能导入
TYPES: BEGIN OF ty_check,
         flag TYPE c, "标记
       END OF ty_check.
DATA: gt_check TYPE TABLE OF ty_check,
      gw_check TYPE ty_check.

TYPES: BEGIN OF ty_pernr,
         gv_pernr(10) TYPE c, "员工编号
       END OF ty_pernr.
DATA: gt_pernr TYPE TABLE OF ty_pernr,
      gw_pernr TYPE ty_pernr.

*----------------------------------------------------------------------*
*  定义alv数据对象
*----------------------------------------------------------------------*
DATA: t_fieldcat TYPE slis_t_fieldcat_alv,
      w_fieldcat TYPE slis_fieldcat_alv,
      w_layout   TYPE slis_layout_alv.

*----------------------------------------------------------------------*
*  定义选择屏幕
*----------------------------------------------------------------------*
SELECTION-SCREEN: FUNCTION KEY 1.
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME TITLE text001.
PARAMETERS: p_file TYPE rlgrap-filename  MODIF ID mg1 MEMORY ID zfpath.      "文件路径
SELECTION-SCREEN END OF BLOCK blk.

INITIALIZATION.
  PERFORM frm_screen_ini."初始化屏幕

AT SELECTION-SCREEN.
* 屏幕检查
  PERFORM screen_check.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM fm_file_help.


START-OF-SELECTION.
  PERFORM frm_upload_data."上载数据

  PERFORM frm_check_data."校验数据

  PERFORM frm_display_alv."ALV显示

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  SCREEN_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM screen_check .
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM fm_save_template.
      CLEAR sscrfields-ucomm.
    WHEN OTHERS.
      IF p_file IS INITIAL.
        MESSAGE e001(00) WITH '请输入文件路径'.
      ENDIF.
  ENDCASE.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FM_SAVE_TEMPLATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fm_save_template .
  DATA: lv_filename TYPE string,
        lv_path     TYPE string,
        lv_fullpath TYPE string.

  DATA: lw_template TYPE wwwdatatab.
  DATA: lv_des      TYPE rlgrap-filename.
  DATA: lv_rc TYPE sy-subrc.

  DATA: application TYPE ole2_object,
        workbook    TYPE ole2_object,
        sheet       TYPE ole2_object.

  "选择保存路径
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title              = '请选择模板保存路径'
      default_extension         = 'xls'
      default_file_name         = '销售合同批量导入模板'
*     with_encoding             =
*     prompt_on_overwrite       = 'X'
    CHANGING
      filename                  = lv_filename
      path                      = lv_path
      fullpath                  = lv_fullpath
*     user_action               =
*     file_encoding             =
    EXCEPTIONS
      cntl_error                = 1
      error_no_gui              = 2
      not_supported_by_gui      = 3
      invalid_default_file_name = 4
      OTHERS                    = 5.
  IF lv_filename IS NOT INITIAL.
    CLEAR lw_template.
    SELECT SINGLE relid objid
      INTO CORRESPONDING FIELDS OF lw_template
      FROM wwwdata
     WHERE relid = 'MI'
       AND objid = 'ZSDB_024'
       AND srtf2 = 0.
    IF sy-subrc NE 0.
      MESSAGE e001(00) WITH '模板文件ZSDB_024不存在'.
    ENDIF.

    "模板下载
    lv_des = lv_fullpath.
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lw_template
        destination = lv_des
      IMPORTING
        rc          = lv_rc.
    IF lv_rc NE 0.
      MESSAGE e001(00) WITH '模板文件:下载失败,请与相关人员联系'.
    ENDIF.

    "打开模板文件
    CREATE OBJECT application 'EXCEL.APPLICATION'.
    IF sy-subrc NE 0.
      MESSAGE e001(00) WITH '不能创建EXCEL对象'.
    ENDIF.

    CALL METHOD OF application 'WORKBOOKS' = workbook.
    CALL METHOD OF workbook 'OPEN'
      EXPORTING
        #1 = lv_des.
    CALL METHOD OF application 'WORKSHEETS' = sheet
      EXPORTING
        #1 = 1.
    GET PROPERTY OF application 'ACTIVESHEET' = sheet.
    SET PROPERTY OF application 'VISIBLE' = 1.

    FREE: sheet, workbook, application.

    CALL METHOD OF workbook 'CLOSE'.
    CALL METHOD OF application 'QUIT'.
  ENDIF.
ENDFORM. " FM_SAVE_TEMPLATE

*&---------------------------------------------------------------------*
*&      Form  FM_FILE_HELP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fm_file_help .
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      file_name = p_file.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_SCREEN_INI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_screen_ini .
  sscrfields-functxt_01 = '模板下载'.           "模板下载
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_upload_data .
  DATA:lv_filename  TYPE rlgrap-filename.
  DATA:lv_raw_data  TYPE truxs_t_text_data.
  DATA:lv_len  TYPE i.
  DATA:g_subrc TYPE sy-subrc.
  DATA:indata TYPE zalsmex_tabline OCCURS 0 WITH HEADER LINE.
  DATA:ls_i TYPE i.
  FIELD-SYMBOLS <f>.
  DATA: lv_column TYPE i.
  DATA: l_oref TYPE REF TO cx_root.
  CLEAR:lv_filename,g_subrc.

  "如果文件路径超过128位,则报错提示:文件路径过长
  lv_len = strlen( p_file ).
  IF lv_len > 128.
    g_subrc = 4.
    MESSAGE TEXT-004 TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  lv_filename = p_file.

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = lv_filename
      i_begin_col             = '1'
      i_begin_row             = '3'
      i_end_col               = '44'
      i_end_row               = '9999'
    TABLES
      intern                  = indata
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc <> 0.
    g_subrc = 4.
    MESSAGE 'Read File Error!' TYPE 'S' DISPLAY LIKE 'E'.
  ELSE.
    SORT indata BY row col.

    LOOP AT indata.
      ls_i = indata-col.
      ASSIGN COMPONENT ls_i OF STRUCTURE gt_input TO <f>.
      TRY.
          <f> = indata-value.
        CATCH cx_sy_conversion_no_number INTO l_oref.
          TRANSLATE indata-value USING ', '.
          CONDENSE indata-value NO-GAPS.
          <f> = indata-value.
      ENDTRY.
*      <f> = indata-value.
      AT END OF row.
        APPEND gt_input.
        CLEAR gt_input.
      ENDAT.
    ENDLOOP.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_data .
  DATA: l_num1     TYPE vbap-zwert,
        l_num2     TYPE vbak-zyfpre,
        l_num3     TYPE vbap-zwert,
        l_data1    TYPE sy-datum,
        l_data2(6) TYPE c,
        l_data3(6) TYPE c.
  CLEAR: l_num1,l_num2,l_num3.
  DATA: l_msg1(20)  TYPE c,l_msg2(20)  TYPE c,
        l_msg3(20)  TYPE c,l_msg4(20)  TYPE c,
        l_msg5(20)  TYPE c,l_msg6(20)  TYPE c,
        l_msg7(20)  TYPE c,l_msg8(20)  TYPE c,
        l_msg9(20)  TYPE c,l_msg10(20) TYPE c,
        l_msg11(20) TYPE c,l_msg12(20) TYPE c,
        l_msg13(20) TYPE c,l_msg14(20) TYPE c,
        l_msg15(20) TYPE c,l_msg16(20) TYPE c,
        l_msg17(20) TYPE c,l_msg18(20) TYPE c,
        l_msg19(20) TYPE c,l_msg20(20) TYPE c,
        l_msg21(20) TYPE c.

  "加前导0
  LOOP AT gt_input.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = gt_input-kunnr
      IMPORTING
        output = gt_input-kunnr.

    IF gt_input-lifnr IS NOT INITIAL.
      CALL FUNCTION 'ZHR_GET_PERNR'
        EXPORTING
          i_old_pernr = gt_input-lifnr
        IMPORTING
          pernr       = gt_input-gv_pernr.
    ENDIF.

    gw_pernr-gv_pernr = gt_input-gv_pernr.
    APPEND gw_pernr TO gt_pernr.
    MODIFY gt_input.
    CLEAR: gt_input,gw_pernr.
  ENDLOOP.

  SELECT kunnr,name1,name2
    FROM kna1
    INTO TABLE @DATA(lt_kna1)
    FOR ALL ENTRIES IN @gt_input
    WHERE kunnr = @gt_input-kunnr.
  SORT lt_kna1 BY kunnr.

  SELECT lifnr,name1,name2
    FROM lfa1
    INTO TABLE @DATA(lt_lfa1)
    FOR ALL ENTRIES IN @gt_pernr
    WHERE lifnr = @gt_pernr-gv_pernr.
  SORT lt_lfa1 BY lifnr.

  SORT gt_input BY htnum.
  LOOP AT gt_input.
    l_num3 = l_num3 + gt_input-zwert.
    AT END OF htnum.
*      gt_input-znum = l_num3.
*      MODIFY gt_input.
      LOOP AT gt_input INTO DATA(lw_msg) WHERE htnum = gt_input-htnum.
        lw_msg-znum = l_num3.
        MODIFY gt_input FROM lw_msg.
      ENDLOOP.
      CLEAR l_num3.
    ENDAT.
  ENDLOOP.

  LOOP AT gt_input.
    READ TABLE lt_kna1 INTO DATA(lw_kna1) WITH KEY kunnr = gt_input-kunnr BINARY SEARCH.
    IF sy-subrc = 0.
      CONCATENATE lw_kna1-name1 lw_kna1-name2 INTO gt_input-kname.
    ENDIF.
    READ TABLE lt_lfa1 INTO DATA(lw_lfa1) WITH KEY lifnr = gt_input-lifnr BINARY SEARCH.
    IF sy-subrc = 0.
      CONCATENATE lw_lfa1-name1 lw_lfa1-name2 INTO gt_input-yname.
    ENDIF.
    "导入数据校验
    IF gt_input-auart = 'ZWK2'.
      l_num1 = gt_input-zyfwtr + gt_input-zjdwtr + gt_input-zfhwtr +
            gt_input-zdhwtr + gt_input-ztswtr + gt_input-zzbwtr.

      IF l_num1 <> gt_input-znum.
        gt_input-status = icon_led_red.
        gw_check-flag   = 'E'.
        gt_input-checkmeg = '金额加总必须等于合同金额!'.
      ENDIF.
      CLEAR l_num1.
      l_num2 = gt_input-zyfpre + gt_input-zjdpre + gt_input-zfhpre +
             gt_input-zdhpre + gt_input-ztspre + gt_input-zzbpre.
      IF l_num2 <> 1.
        gt_input-status = icon_led_red.
        gw_check-flag   = 'E'.
        l_msg1 = '占比加总必须等于1!'.
        CONCATENATE gt_input-checkmeg '/' l_msg1 INTO gt_input-checkmeg.
      ENDIF.
      CLEAR l_num2.

      IF gt_input-zwert IS INITIAL.
        gt_input-status = icon_led_red.
        gw_check-flag   = 'E'.
        l_msg15 = '请输入合同金额(目标值)'.
        CONCATENATE gt_input-checkmeg '/' l_msg15 INTO gt_input-checkmeg.
      ENDIF.

      IF gt_input-zyfwtr IS INITIAL.
        gt_input-status = icon_led_red.
        l_msg17 = '请输入预收款金额/元(1)'.
        gw_check-flag   = 'E'.
        CONCATENATE gt_input-checkmeg '/' l_msg17 INTO gt_input-checkmeg.
      ENDIF.
      IF gt_input-zyfpre IS INITIAL.
        gt_input-status = icon_led_red.
        gw_check-flag   = 'E'.
        l_msg18 = '请输入预收款占比(1)'.
        CONCATENATE gt_input-checkmeg '/' l_msg18 INTO gt_input-checkmeg.
      ENDIF.
      IF gt_input-zyfdat IS INITIAL.
        gt_input-status = icon_led_red.
        l_msg19 = '请输入预收款到期日(1)'.
        gw_check-flag   = 'E'.
        CONCATENATE gt_input-checkmeg '/' l_msg19 INTO gt_input-checkmeg.
      ENDIF.
    ENDIF.

    "必填输入校验
    IF gt_input-htnum IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg2 = '请输入手工合同编号'.
      CONCATENATE gt_input-checkmeg '/' l_msg2 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-auart IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg3 = '请输入合同类型'.
      CONCATENATE gt_input-checkmeg '/' l_msg3 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-vkorg IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg4 = '请输入销售组织'.
      CONCATENATE gt_input-checkmeg '/' l_msg4 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-vtweg IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg5 = '请输入分销渠道'.
      CONCATENATE gt_input-checkmeg '/' l_msg5 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-spart IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg6 = '请输入产品组'.
      CONCATENATE gt_input-checkmeg '/' l_msg6 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-vkgrp IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg7 = '请输入销售部门'.
      CONCATENATE gt_input-checkmeg '/' l_msg7 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-vkbur IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg8 = '请输入销售组'.
      CONCATENATE gt_input-checkmeg '/' l_msg8 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-kunnr IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg9 = '请输入客户编码'.
      CONCATENATE gt_input-checkmeg '/' l_msg9 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-bstkd IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg10 = '请输入CD合同编号'.
      CONCATENATE gt_input-checkmeg '/' l_msg10 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-bstdk IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg11 = '请输入合同签署日期'.
      CONCATENATE gt_input-checkmeg '/' l_msg11 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-ktext IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg12 = '请输入合同描述'.
      CONCATENATE gt_input-checkmeg '/' l_msg12 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-guebg IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg13 = '请输入合同开始日期'.
      CONCATENATE gt_input-checkmeg '/' l_msg13 INTO gt_input-checkmeg.
    ENDIF.
    IF gt_input-gueen IS INITIAL.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg14 = '请输入合同结束日期'.
      CONCATENATE gt_input-checkmeg '/' l_msg14 INTO gt_input-checkmeg.
    ENDIF.

*    IF gt_input-zyfwtr IS INITIAL.
*      gt_input-status = icon_led_red.
*      gw_check-flag   = 'E'.
*      l_msg16 = '请输入预收款金额/元(1)'.
*      CONCATENATE gt_input-checkmeg '/' l_msg16 INTO gt_input-checkmeg.
*    ENDIF.


    PERFORM frm_convert_date USING gt_input-gueen CHANGING l_data1.
    l_data2 = l_data1+0(6).
    l_data3 = sy-datum+0(6).
    DATA(l_data4) = l_data3 + 1.
    IF l_data2 <= l_data4.
      gt_input-status = icon_led_red.
      gw_check-flag   = 'E'.
      l_msg20 = '输入日期的月份不能小于下个月的月份'.
      CONCATENATE gt_input-checkmeg '/' l_msg20 INTO gt_input-checkmeg.
    ENDIF.


*    IF gt_input-zyfyq IS INITIAL.
*      gt_input-status = icon_led_red.
*      gw_check-flag   = 'E'.
*      l_msg20 = '请输入预收款已清(1)'.
*      CONCATENATE gt_input-checkmeg '/' l_msg20 INTO gt_input-checkmeg.
*    ENDIF.

    IF gw_check-flag <> 'E'.
      gt_input-status = icon_led_green.
*      gt_input-checkmeg = '数据正确!'.
    ENDIF.

    MODIFY gt_input.
    APPEND gw_check TO gt_check.
    CLEAR: gt_input,gw_check.
    CLEAR: l_msg1,l_msg2,l_msg3,l_msg4,l_msg5,l_msg6,l_msg7,l_msg8,l_msg9,
           l_msg10,l_msg11,l_msg12,l_msg13,l_msg14,l_msg15,l_msg16,l_msg17,
           l_msg18,l_msg19,l_msg20,l_data1,l_data2,l_data3.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  PERFORM frm_fill_fieldcat.
  PERFORM frm_alv_layout.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_buffer_active          = 'X'
      i_callback_program       = sy-repid
      is_layout                = w_layout
      it_fieldcat              = t_fieldcat
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
    TABLES
      t_outtab                 = gt_input
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_FILL_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fill_fieldcat .
  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'STATUS'.
  w_fieldcat-seltext_m = '指示灯'.
  w_fieldcat-icon      = 'X'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'CHECKMEG'.
  w_fieldcat-seltext_m = '检查结果'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'MESSAGE'.
  w_fieldcat-seltext_m = '处理信息'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'HTNUM'.
  w_fieldcat-seltext_m = '手工合同编号'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'AUART'.
  w_fieldcat-seltext_m = '合同类型'.
  APPEND w_fieldcat TO t_fieldcat.


  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'VKORG'.
  w_fieldcat-seltext_m = '销售组织'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'VTWEG'.
  w_fieldcat-seltext_m = '分销渠道'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'SPART'.
  w_fieldcat-seltext_m = '产品组'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'VKGRP'.
  w_fieldcat-seltext_m = '销售部门'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'VKBUR'.
  w_fieldcat-seltext_m = '销售组'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'KUNNR'.
  w_fieldcat-seltext_m = '客户编码'.
  w_fieldcat-no_zero   = 'X'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'KNAME'.
  w_fieldcat-seltext_m = '客户名称'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'BSTKD'.
  w_fieldcat-seltext_m = 'CD合同编号'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname     = 'BSTDK'.
  w_fieldcat-seltext_m     = '合同签署日期'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'KTEXT'.
  w_fieldcat-seltext_m = '合同描述'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'GUEBG'.
  w_fieldcat-seltext_m = '合同开始日期'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'GUEEN'.
  w_fieldcat-seltext_m = '合同结束日期'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZWERT'.
  w_fieldcat-seltext_m = '合同金额(目标值)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZNUM'.
  w_fieldcat-seltext_m = '金额基准值'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZYFWTR'.
  w_fieldcat-seltext_m = '预收款金额/元(1)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZYFPRE'.
  w_fieldcat-seltext_m = '预收款占比(1)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZYFDAT'.
  w_fieldcat-seltext_m = '预收款到期日(1)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZYFYQ'.
  w_fieldcat-seltext_m = '预收款已清(1)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZJDWTR'.
  w_fieldcat-seltext_m = '进度款金额/元(2)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZJDPRE'.
  w_fieldcat-seltext_m = '进度款占比(2)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZJDDAT'.
  w_fieldcat-seltext_m = '进度款到期日(2)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZJDYQ'.
  w_fieldcat-seltext_m = '进度款已清(2)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZFHWTR'.
  w_fieldcat-seltext_m = '发货款金额/元(3)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZFHPRE'.
  w_fieldcat-seltext_m = '发货款占比(3)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZFHDAT'.
  w_fieldcat-seltext_m = '发货款到期日(3)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZFHYQ'.
  w_fieldcat-seltext_m = '发货款已清(3)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZDHWTR'.
  w_fieldcat-seltext_m = '到货款金额/元(4)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZDHPRE'.
  w_fieldcat-seltext_m = '到货款占比(4)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZDHDAT'.
  w_fieldcat-seltext_m = '到货款到期日(4)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZDHYQ'.
  w_fieldcat-seltext_m = '到货款已清(4)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZTSWTR'.
  w_fieldcat-seltext_m = '安装款金额/元(5)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZTSPRE'.
  w_fieldcat-seltext_m = '安装款占比(5)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZTSDAT'.
  w_fieldcat-seltext_m = '安装款到期日(5)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZTSYQ'.
  w_fieldcat-seltext_m = '安装款已清(5)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZZBWTR'.
  w_fieldcat-seltext_m = '质保金金额(6)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZZBPRE'.
  w_fieldcat-seltext_m = '质保金占比(6)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZZBDAT'.
  w_fieldcat-seltext_m = '质保款到期日(6)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ZZBYQ'.
  w_fieldcat-seltext_m = '质保款已清(6)'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'LIFNR'.
  w_fieldcat-seltext_m = '业务员(工号)'.
  w_fieldcat-no_zero   = 'X'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'YNAME'.
  w_fieldcat-seltext_m = '业务员名称'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'POSNR'.
  w_fieldcat-seltext_m = '行项目号'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'MATNR'.
  w_fieldcat-seltext_m = '物料编码'.
  w_fieldcat-no_zero   = 'X'.
  APPEND w_fieldcat TO t_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'ARKTX'.
  w_fieldcat-seltext_m = '物料描述'.
  APPEND w_fieldcat TO t_fieldcat.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_ALV_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_alv_layout .
  w_layout-colwidth_optimize = 'X'.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form SET_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STANDARD'.
ENDFORM.

FORM user_command USING r_ucomm     LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA: l_werks TYPE t320-werks,
        l_lgort TYPE t320-lgort.
  DATA: l_text_question TYPE string,
        l_answer        TYPE char1.


  CASE r_ucomm.
    WHEN '&SAVE'.
      PERFORM frm_call_bapi."调用BAPI

      CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
        IMPORTING
          e_grid = lr_grid.
      CALL METHOD lr_grid->check_changed_data.

      rs_selfield-refresh    = 'X'.
      rs_selfield-col_stable = 'X'.
      rs_selfield-row_stable = 'X'.

  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CALL_BAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_call_bapi .
  DATA: l_line  TYPE i.
  DATA: header_in     TYPE TABLE OF bapisdhd1  WITH HEADER LINE,
        header_inx    TYPE TABLE OF bapisdhd1x WITH HEADER LINE,
        partners      TYPE TABLE OF bapiparnr  WITH HEADER LINE,
        items_in      TYPE TABLE OF bapisditm  WITH HEADER LINE,
        items_inx     TYPE TABLE OF bapisditmx WITH HEADER LINE,
        data_in       TYPE TABLE OF bapictr    WITH HEADER LINE,
        data_inx      TYPE TABLE OF bapictrx   WITH HEADER LINE,
        gt_bapiparex  TYPE TABLE OF bapiparex,
        gs_bapiparex  TYPE bapiparex,
        gt_bapiparexx TYPE TABLE OF bapiparex,
        gs_bapiparexx TYPE bapiparex,
*        extensionin TYPE TABLE OF bapiparex  WITH HEADER LINE,
*        extensionex TYPE TABLE OF bapiparex  WITH HEADER LINE,
        return        TYPE TABLE OF bapiret2   WITH HEADER LINE.

  DATA: gs_zbape_vbak  TYPE bape_vbak,
        gs_zbape_vbakx TYPE bape_vbakx.

  "加前导0
  LOOP AT gt_input.
*    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*      EXPORTING
*        input  = gt_input-kunnr
*      IMPORTING
*        output = gt_input-kunnr.
*
*    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
*      EXPORTING
*        input  = gt_input-lifnr
*      IMPORTING
*        output = gt_input-lifnr.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = gt_input-matnr
      IMPORTING
        output = gt_input-matnr.

    MODIFY gt_input.
    CLEAR gt_input.
  ENDLOOP.

  "取客户名称、业务员名称、物料描述
  IF gt_input[] IS NOT INITIAL.

    SELECT matnr,maktx
      FROM makt
      INTO TABLE @DATA(lt_makt)
      FOR ALL ENTRIES IN @gt_input
      WHERE matnr = @gt_input-matnr.
    SORT lt_makt BY matnr.
  ENDIF.

  "存在错误的数据不能导入
  SORT gt_check BY flag.
  DELETE ADJACENT DUPLICATES FROM gt_check COMPARING flag.
  LOOP AT gt_check INTO DATA(lw_check) WHERE flag = 'E'.
    MESSAGE '导入的数据存在错误,请检查数据!' TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDLOOP.

  "导入数据
  LOOP AT gt_input.
    l_line = l_line + 1.

    AT NEW htnum.
      READ TABLE gt_input INDEX l_line.

      "header_in
      header_in-doc_type    = gt_input-auart. "合同类型
      header_in-sales_org   = gt_input-vkorg. "销售组织
      header_in-distr_chan  = gt_input-vtweg. "分销渠道
      header_in-division    = gt_input-spart. "产品组
      header_in-sales_grp   = gt_input-vkgrp. "销售组
      header_in-sales_off   = gt_input-vkbur. "销售部门
      PERFORM frm_convert_date USING gt_input-bstdk CHANGING header_in-purch_date."合同签署日期
*      header_in-purch_date  = gt_input-bstdk.
      header_in-purch_no_c  = gt_input-bstkd. "CD合同编号
      header_in-pp_search   = gt_input-ktext. "合同描述
      APPEND header_in.
      "header_inx
      header_inx-doc_type    = 'X'. "合同类型
      header_inx-sales_org   = 'X'. "销售组织
      header_inx-distr_chan  = 'X'. "分销渠道
      header_inx-division    = 'X'. "产品组
      header_inx-sales_grp   = 'X'. "销售组
      header_inx-sales_off   = 'X'. "销售部门
      header_inx-purch_date  = 'X'. "合同签署日期
      header_inx-purch_no_c  = 'X'. "CD合同编号
      header_inx-pp_search   = 'X'. "合同描述
      APPEND header_inx.

      "partners
      partners-partn_role = 'AG'.
      partners-partn_numb = |{ gt_input-kunnr ALPHA = IN }|."客户编码
      APPEND partners.

      "partners
      partners-partn_role = 'Y1'.
*      partners-partn_numb = gt_input-gv_pernr."业务员(工号)
      partners-partn_numb = |{ gt_input-gv_pernr  ALPHA = IN }|."业务员(工号)
*      IF gt_input-lifnr IS NOT INITIAL.
*        CALL FUNCTION 'ZHR_GET_PERNR'
*          EXPORTING
*            i_old_pernr = gt_input-lifnr
*          IMPORTING
*            pernr       = partners-partn_numb.
*      ENDIF.

      APPEND partners.

      "data_in
      data_in-itm_number = ''.
      PERFORM frm_convert_date USING gt_input-guebg CHANGING data_in-con_st_dat.
*      data_in-con_st_dat = gt_input-guebg. "合同开始日期
      PERFORM frm_convert_date USING gt_input-gueen CHANGING data_in-con_en_dat.
*      data_in-con_en_dat = gt_input-gueen. "合同结束日期
      APPEND data_in.
      "data_inx
      data_inx-itm_number = ''.
      data_inx-con_st_dat = 'X'. "合同开始日期
      data_inx-con_en_dat = 'X'. "合同结束日期
      APPEND data_inx.
    ENDAT.

    "items_in
    items_in-itm_number    = gt_input-posnr. "行项目
    items_in-target_val    = gt_input-zwert. "合同金额(目标值)
*    items_in-material_long = gt_input-matnr. "物料编码
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = gt_input-matnr
      IMPORTING
        output = items_in-material_long.
    IF gt_input-arktx IS NOT INITIAL.
      items_in-short_text  = gt_input-arktx. "物料描述
    ELSE.
      READ TABLE lt_makt INTO DATA(lw_makt) WITH KEY matnr = gt_input-matnr BINARY SEARCH.
      IF sy-subrc = 0.
        items_in-short_text = lw_makt-maktx. "物料描述
      ENDIF.
    ENDIF.
    APPEND items_in.
    "items_inx
    items_inx-itm_number    = gt_input-posnr. "行项目
    items_inx-target_val    = 'X'. "合同金额(目标值)
    items_inx-material_long = 'X'. "物料编码
    items_inx-short_text    = 'X'. "物料描述
    APPEND items_inx.

    gs_zbape_vbak-zyfwtr   = gt_input-zyfwtr.
    gs_zbape_vbak-zyfpre   = gt_input-zyfpre.
*    gs_zbape_vbak-zyfdat   = gt_input-zyfdat.
    PERFORM frm_convert_date USING gt_input-zyfdat CHANGING gs_zbape_vbak-zyfdat.
    gs_zbape_vbak-zjdwtr   = gt_input-zjdwtr.
    gs_zbape_vbak-zjdpre   = gt_input-zjdpre.
*    gs_zbape_vbak-zjddat   = gt_input-zjddat.
    PERFORM frm_convert_date USING gt_input-zjddat CHANGING gs_zbape_vbak-zjddat.
    gs_zbape_vbak-zfhwtr   = gt_input-zfhwtr.
    gs_zbape_vbak-zfhpre   = gt_input-zfhpre.
*    gs_zbape_vbak-zfhdat   = gt_input-zfhdat.
    PERFORM frm_convert_date USING gt_input-zfhdat CHANGING gs_zbape_vbak-zfhdat.
    gs_zbape_vbak-zdhwtr   = gt_input-zdhwtr.
    gs_zbape_vbak-zdhpre   = gt_input-zdhpre.
*    gs_zbape_vbak-zdhdat   = gt_input-zdhdat.
    PERFORM frm_convert_date USING gt_input-zdhdat CHANGING gs_zbape_vbak-zdhdat.
    gs_zbape_vbak-ztswtr   = gt_input-ztswtr.
    gs_zbape_vbak-ztspre   = gt_input-ztspre.
*    gs_zbape_vbak-ztsdat   = gt_input-ztsdat.
    PERFORM frm_convert_date USING gt_input-ztsdat CHANGING gs_zbape_vbak-ztsdat.
    gs_zbape_vbak-zzbwtr   = gt_input-zzbwtr.
    gs_zbape_vbak-zzbpre   = gt_input-zzbpre.
*    gs_zbape_vbak-zzbdat   = gt_input-zzbdat.
    PERFORM frm_convert_date USING gt_input-zzbdat CHANGING gs_zbape_vbak-zzbdat.
    gs_zbape_vbak-zyfyq    = gt_input-zyfyq.
    gs_zbape_vbak-zjdyq    = gt_input-zjdyq.
    gs_zbape_vbak-zfhyq    = gt_input-zfhyq.
    gs_zbape_vbak-zdhyq    = gt_input-zdhyq.
    gs_zbape_vbak-ztsyq    = gt_input-ztsyq.
    gs_zbape_vbak-zzbyq    = gt_input-zzbyq.
    gs_bapiparex-structure  = 'BAPE_VBAK'.
    CALL METHOD cl_abap_container_utilities=>fill_container_c
      EXPORTING
        im_value     = gs_zbape_vbak
      IMPORTING
        ex_container = gs_bapiparex-valuepart1.
*    gs_bapiparex-valuepart1 = gs_zbape_vbak.
    APPEND gs_bapiparex TO gt_bapiparex.
    CLEAR: gs_zbape_vbak,gs_bapiparex.

    gs_zbape_vbakx-zyfwtr   = 'X'.
    gs_zbape_vbakx-zyfpre   = 'X'.
    gs_zbape_vbakx-zyfdat   = 'X'.
    gs_zbape_vbakx-zjdwtr   = 'X'.
    gs_zbape_vbakx-zjdpre   = 'X'.
    gs_zbape_vbakx-zjddat   = 'X'.
    gs_zbape_vbakx-zfhwtr   = 'X'.
    gs_zbape_vbakx-zfhpre   = 'X'.
    gs_zbape_vbakx-zfhdat   = 'X'.
    gs_zbape_vbakx-zdhwtr   = 'X'.
    gs_zbape_vbakx-zdhpre   = 'X'.
    gs_zbape_vbakx-zdhdat   = 'X'.
    gs_zbape_vbakx-ztswtr   = 'X'.
    gs_zbape_vbakx-ztspre   = 'X'.
    gs_zbape_vbakx-ztsdat   = 'X'.
    gs_zbape_vbakx-zzbwtr   = 'X'.
    gs_zbape_vbakx-zzbpre   = 'X'.
    gs_zbape_vbakx-zzbdat   = 'X'.
    gs_zbape_vbakx-zyfyq    = 'X'.
    gs_zbape_vbakx-zjdyq    = 'X'.
    gs_zbape_vbakx-zfhyq    = 'X'.
    gs_zbape_vbakx-zdhyq    = 'X'.
    gs_zbape_vbakx-ztsyq    = 'X'.
    gs_zbape_vbakx-zzbyq    = 'X'.
    gs_bapiparexx-structure   = 'BAPE_VBAKX'.
*    CALL METHOD cl_abap_container_utilities=>fill_container_c
*      EXPORTING
*        im_value     = gs_zbape_vbakx
*      IMPORTING
*        ex_container = gs_bapiparexx-valuepart1.
    gs_bapiparexx-valuepart1  = gs_zbape_vbakx.
    APPEND gs_bapiparexx TO gt_bapiparexx.
    CLEAR: gs_zbape_vbakx,gs_bapiparexx.

    AT END OF htnum.
      READ TABLE gt_input INDEX l_line.

      CALL FUNCTION 'BAPI_CONTRACT_CREATEFROMDATA'
        EXPORTING
          contract_header_in  = header_in
          contract_header_inx = header_inx
        TABLES
          return              = return
          contract_items_in   = items_in
          contract_items_inx  = items_inx
          contract_partners   = partners
          contract_data_in    = data_in
          contract_data_inx   = data_inx
          extensionin         = gt_bapiparex
          extensionex         = gt_bapiparexx.

      LOOP AT return.
        IF return-type = 'E' OR return-type = 'A'.
          gt_input-status = icon_led_red.
          CONCATENATE gt_input-message return-message INTO gt_input-message SEPARATED BY '/'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        ENDIF.
        IF return-type = 'S'.
          gt_input-status = icon_led_green.
          gt_input-message = return-message.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .

          WAIT UP TO '0.1' SECONDS.
        ENDIF.
      ENDLOOP.

      LOOP AT gt_input INTO DATA(lw_msg) WHERE htnum = gt_input-htnum.
        lw_msg-status = gt_input-status.
        lw_msg-message = gt_input-message.
        MODIFY gt_input FROM lw_msg.
      ENDLOOP.
      CLEAR: gt_bapiparex,gt_bapiparexx.
      REFRESH:header_in,header_inx,partners,data_in,data_inx,items_in,items_inx,return.
    ENDAT.
  ENDLOOP.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CONVERT_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GT_INPUT_BSTDK
*&      <-- HEADER_IN_PURCH_DATE
*&---------------------------------------------------------------------*
FORM frm_convert_date  USING    p_char
                       CHANGING p_date.
  SPLIT p_char AT '/' INTO:DATA(l_char1) DATA(l_char2) DATA(l_char3).
  IF strlen( l_char2 ) = 1.
    CONCATENATE '0' l_char2 INTO l_char2.
  ENDIF.
  IF strlen( l_char3 ) = 1.
    CONCATENATE '0' l_char3 INTO l_char3.
  ENDIF.
  CONCATENATE l_char1 l_char2 l_char3 INTO p_date.
ENDFORM.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件简介: 办公管理软件,适用于企业费用报销管理、企业合同管理、企业项目管理维护、财务管理(非财务核算软件)。 软件适用范围: 1 费用报销频繁,还处在手工提交报销单、需要现场审批的企业 2 合同还处在纸张和Excel的方式,维护起来困难,需要进行合同管理的企业 3 有公司项目需要跟进、维护、管理的企业 4 财务工作还处在手工阶段的企业 软件特点: 费用报销管理特点: 1、线上报销。避免了线下人工递交报销单,在领导办公室之间来回跑动折腾。 2、移动审批。有效的解决异地审批难的问题。 3、图表统计分析。帮助企业高层即时了解到企业、部门、个人费用开支情况。 4、搜索查询。可根据条件设定,直接查询费用报销明细。 5、提醒功能。费用报销单审批进度提醒、审批、待审批提醒。 6、会计凭证。系统连接财务处理,费用报销后会自动生成相应的会计凭证。 7、自定义审批流程、费用种类等。 合同管理特点: 1、电子存档。所有合同都以加密的形式储存在阿里云服务器上,调阅十分方便。 2、批量导入。大数量合同可以通过批量导入方式进行导入,节省大量人工成本。 3、销售、采购类合同线上提交审批。 4、手机移动审批。通过手机随时随地进行完成审批 5、合同执行跟踪。合同的执行进展和付款计划、实际收款情况. 6、客商管理。包括客户、供应商、产品物料的信息编辑、增加、删除等。 7、提醒功能。相关合同的审批、待审批提醒、收付款提醒等。 8、搜索查询。可根据条件设定,直接查询合同明细。 9、图表统计分析。提供销售、采购合同图表统计分析。 10、自定义合同审批流程、合同模板等。 项目管理特点: 1、项目计划、实施、维护。 2、项目执行跟踪。 3、项目查询、搜索。 4、项目费用图表统计分析。 财务管理特点: 1、对费用报销、合同、项目进行审核管理。 2、发票签收、开票及收款确认、查询。 3、出纳支付确认和已支付、借款查询。 4、会计凭证自动生成、下载、查询。 5、财务图表统计与分析,包括企业流水,销售业绩,部门、员工相关财务报表等。 常见问题: 财物无忧和金蝶、用友等财务软件有什么区别? 金蝶、用友等财务软件属于专业人士用的专业财务核算软件。 1、财物无忧不是专业财务核算软件,侧重于财务过程管理和流程控制; 2、财物无忧使用人员除了专业财务人员,普通员工也可使用等。 财物无忧的费用报销管理一般OA系统中的费用报销管理模块有什么区别? 一般OA系统中的费用报销只是一个简单表单递交,报销种类简单,审核流程受系统 限定,不能自定义。 1、财物无忧报销种类多,还可以随时编辑、添加报销种类; 2、报销审批流程可根据组织制程自定义,不受软件系统限定; 3、与财务对接,并生成相应的会计凭证; 4、提供图表统计分析。 哪些人可以使用财物无忧? 财物无忧使用对象包括:企业老板、财务人员、一般员工,不同使用的对象所分配权限 也会不同,所能进行的事项也会不一样。 更新日志 版本 4.1 1 增加全屏截图功能 2 提高程序稳定性,减少出错几率
PHP客户关系管理OACRM商品进销存销售管理合同订单库存财务管理跟单源码 源码介绍: 系统安装环境:linux + php + mysql 店主独自修改修复版本,不要拿别家几十块的烂大街BUG版本来比价格,一分钱一分货 2021年5月29日修复更新: 1、修复数据导入BUG问题 2、修改支持linux系统环境下无错安装 3、修复财务管理数据删除报错BUG 更多Saas版OA系统、进销存系统请咨询店主! 2019.11.15修复了增加客户,没有提示必要字段提示 2019.11.15修复增加正常手机号码的判断 2019.11.15修复增加员工帐号添加到20个后底下看不到的错误 2019.11.15修复不能上传pdf附件的错误 2019.4.1修复合同新增到款编辑功能 2019.3.30新增客户档案跟单记录 2019.3.29修复客户基本档案订单模块订单金额显示 2019.3.28新增客户资料导入功能 2018.10.7修复更新了 1.修复了员工删除之后,依然在聊天工具列表 2.修复了财务管理费用搜索,筛选 收入和支出问题。 2018.09.27修复更新了 1.创建客户资料,自动创建默认联系人。 2.修复当设置员工管理范围的时候,只能看到自己的客户。 看不到自己管理范围其他员工的客户。 跟单,订单,合同,售后,费用。 3.修复了通知栏目,跟单和合同无法直接点开。 4.修复了商品库存管理,添加订单自动减库存。 2018.0816修复更新了 1. 客户、跟单、订单、合同、费用等导出。直接导出excel 2.修复了批量删除和转移 自动回到登录页。
软件简介: 企业合同管理是深圳友为软件有限公司(www.uvsoft.com.cn)开发出来的用于企业合同管理的免费 SaaS移动办公管理软件,是一款成熟通用的产品,目前已成功应用在各行业中。 如果贵司的合同管理还处在纸质或excel管理方式上,建议您试用下本产品,将带给您不一样的管理体验 。 软件功能: 企业合同管理 1、电子存档。所有合同都以加密的形式储存在阿里云服务器上,调阅十分方便。 2、批量导入。大数量合同可以通过批量导入方式进行导入,节省大量人工成本。 3、销售、采购类合同线上提交审批。 4、手机移动审批。通过手机随时随地进行完成审批 5、合同执行跟踪。合同的执行进展和付款计划、实际收款情况. 6、客商管理。包括客户、供应商、产品物料的信息编辑、增加、删除等。 7、提醒功能。相关合同的审批、待审批提醒、收付款提醒等。 8、搜索查询。可根据条件设定,直接查询合同明细。 9、图表统计分析。提供销售、采购合同图表统计分析。 10、自定义合同审批流程、合同模板等。 常见问题: 软件使用安全吗? 1 阿里云安全保护 企业云与阿里云合作,使用阿里云盾系统为企业云提供阿里巴巴平台级的安全保障,阻止来自外部的安全 威胁; 2 软硬件安全措施 盾硬件加密,银行级别帐户安全保护,保证您的帐户安全; 密码加密传输与存储,防止窃取;密码采用不可逆加密算法,无法破解; 3 友为安全管理规范 友为软件执行严格的安全管理规范,阻止来自内部的安全威胁; 仅CTO具备平台升级维护操作权限; 平台用户名和密码都进行安全处理; 安装最安全的操作系统中间件软件,采用最安全的语言开发; 4 客户数据保密协议 与客户签订安全保密协议,由于青虹云平台的问题导致数据泄密,云平台赔偿损失; 你们有技术支持吗? 我们有相应的售后人员提供技术服务,如果使用者在软件的使用过程中出现什么疑问,可以选择拨打官网 热线,之后我们会有相应的技术人员为您服务。 更新日志 版本 2.1 1 增加全屏截图功能 2 提高程序稳定性,减少出错几率
Neo4j批量导入是指将大批量数据快速导入到Neo4j数据库中的操作。有几种方法可以实现批量导入,其中最常用的是使用load csv和neo4j-admin import工具。load csv是一种在线导入方式,不需要停止Neo4j的运行,支持增量导入数据,使用的是cypher语言。而neo4j-admin import则需要生成一个新的数据库文件,并且需要重启Neo4j,不支持增量导入,但是导入速度非常快,可能比load csv快100倍以上。 如果使用neo4j-admin import进行批量导入,可以按照以下步骤进行操作: 1. 准备好要导入的数据文件,格式为CSV。可以使用命令行工具进入Neo4j的安装目录,并执行以下指令进行导入: 如果使用load csv进行批量导入,可以按照以下步骤进行操作: 1. 准备好要导入的数据文件,格式为CSV。 2. 在Neo4j的cypher shell中,可以执行类似以下的cypher语句进行导入: LOAD CSV WITH HEADERS FROM "file:///data.csv" AS row CREATE (:Node {property: row.property}) [2] 总之,根据不同的需求和情况,可以选择合适的方法进行Neo4j批量导入。如果需要快速导入大量数据,可以使用neo4j-admin import工具;如果需要在线导入并支持增量导入,可以使用load csv方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [neo4j︱neo4j批量导入neo4j-import (五)](https://blog.csdn.net/sinat_26917383/article/details/82424508)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Neo4j笔记(三)Neo4j批量导入数据](https://blog.csdn.net/haveanybody/article/details/90518235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Neo4j批量导入](https://download.csdn.net/download/qingxincao/10513243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值