当前位置: 首页 > news >正文

SAP SD交货单批导功能分享

一、功能逻辑

二、批导模板

三、功能代码

*&---------------------------------------------------------------------*
*& 程序名: ZRPSD_0001
*& 创建者(公司)/日期:*
*& 程序描述:
*&
*&---------------------------------------------------------------------*
*& 版本/修改者(公司)/日期//修改描述
*&
*&---------------------------------------------------------------------*
REPORT zrpsd_0001 MESSAGE-ID 00.

INCLUDE zrpsd_0001_top."变量定义

INCLUDE zrpsd_0001_f01."核心业务代码

INCLUDE zrpsd_0001_f02."响应事件的代码

INCLUDE zrpsd_0001_c01."Class Definition

INCLUDE zrpsd_0001_s01."ALV显示与控制

INITIALIZATION.
  PERFORM frm_init_screen.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.
  PERFORM frm_get_filepath CHANGING p_fpath.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      PERFORM frm_download_template USING 'ZRPSD_0001'.
  ENDCASE.

START-OF-SELECTION.

  PERFORM frm_upload_file USING p_fpath.

  PERFORM frm_check_data.

  PERFORM frm_process_data.

  PERFORM frm_show_alv USING gt_alv.

*&---------------------------------------------------------------------*
*& 包含               ZRPSD_0001_TOP
*&---------------------------------------------------------------------*
TABLES sscrfields.

* Switch for list display yes / no
DATA:gv_list_display TYPE sap_bool.
* Reference for container control
DATA:gr_cont TYPE REF TO cl_gui_custom_container.
* Reference for ALV instance
DATA:gr_alv TYPE REF TO cl_salv_table.
* Reference for error situations
DATA:gr_error TYPE REF TO cx_salv_error.

DATA:gs_functxt TYPE smp_dyntxt.

DATA:gt_excel TYPE TABLE OF zssd_batch_input_002,
     gs_excel TYPE zssd_batch_input_002.

DATA: lt_credit LIKE STANDARD TABLE OF zssd_input_025 WITH HEADER LINE.

DATA:gt_alv TYPE TABLE OF zssd_batch_input_001,
     gs_alv TYPE zssd_batch_input_001.

DATA: ls_color TYPE lvc_s_scol,
      lt_color TYPE lvc_t_scol.

SELECTION-SCREEN BEGIN OF BLOCK b_01 WITH FRAME TITLE TEXT-002.
  PARAMETERS:p_fpath TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b_01.

PARAMETERS p_typ1 AS CHECKBOX .

SELECTION-SCREEN:FUNCTION KEY 1.

*&---------------------------------------------------------------------*
*& 包含               ZRPSD_0001_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_INIT_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_init_screen .
  CLEAR:gs_functxt.
  gs_functxt-icon_id   = icon_export.
  gs_functxt-icon_text = TEXT-001.
  sscrfields-functxt_01 = gs_functxt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_get_filepath
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- P_FPATH
*&---------------------------------------------------------------------*
FORM frm_get_filepath  CHANGING c_path.
  FIELD-SYMBOLS:<fs_file_table> TYPE file_table.

  DATA:lt_file_table TYPE filetable,
       lv_rc         TYPE i.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    CHANGING
      file_table = lt_file_table
      rc         = lv_rc.
  IF lt_file_table IS INITIAL.
    MESSAGE s001 WITH TEXT-m01 DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.

  LOOP AT lt_file_table ASSIGNING <fs_file_table>.
    CONCATENATE c_path <fs_file_table>-filename INTO c_path.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_download_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_download_template USING u_template.
  DATA:lv_fname TYPE string,
       lv_title TYPE string,
       lv_path  TYPE string,
       lv_fpath TYPE string,
       lv_file  TYPE rlgrap-filename.

  DATA:ls_wdatb LIKE wwwdatatab.

  DATA:lv_subrc TYPE sy-subrc.

  lv_title =  '模板下载' .

  lv_fname = '交货单批量导入模板.xlsx'.

  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = lv_title
      default_extension    = 'xlsx'
      default_file_name    = lv_fname
*     INITIAL_DIRECTORY    = 'C:\'
      file_filter          = 'Excel文件(*.xls)|*.xls|全部文件 (*.*)|*.*|'
      prompt_on_overwrite  = 'X'
    CHANGING
      filename             = lv_fname
      path                 = lv_path
      fullpath             = lv_fpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF ls_wdatb
      WHERE srtf2 = 0
        AND relid = 'MI'
        AND objid = u_template.
    IF ls_wdatb IS INITIAL.
      MESSAGE e398(00) WITH '模板文件不存在!'.
    ELSE.
      lv_file = lv_fpath.
      IF lv_file IS NOT INITIAL.
        CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
          EXPORTING
            key         = ls_wdatb
            destination = lv_file
          IMPORTING
            rc          = lv_subrc.
        IF lv_subrc NE 0.
          MESSAGE e398(00) WITH '模板下载失败!'.
        ELSE.
          MESSAGE s398(00) WITH '下载成功'.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form pf_upload_file
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_FPATH
*&---------------------------------------------------------------------*
FORM frm_upload_file USING u_fpath TYPE rlgrap-filename.
  DATA:lt_alsmex_tabline TYPE TABLE OF zalsmex_tabline.

  DATA:lv_posex TYPE vbap-posex.
  DATA:lv_result TYPE string.

  FIELD-SYMBOLS:<fs_row_value> TYPE any.

  CLEAR:gt_excel.

  CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = u_fpath
      i_begin_col             = 1
      i_begin_row             = 6
      i_end_col               = 14
      i_end_row               = 9999
    TABLES
      intern                  = lt_alsmex_tabline
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.
  IF sy-subrc <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    MESSAGE '数据读取异常,请联系管理员' TYPE 'E'.
  ENDIF.

  IF lt_alsmex_tabline IS NOT INITIAL.
    TRY .
        LOOP AT lt_alsmex_tabline INTO DATA(gs_intern).
          AT NEW row.
            CLEAR:gs_excel.
            gs_excel-zindex = gs_intern-row.
          ENDAT.


          ASSIGN COMPONENT gs_intern-col OF STRUCTURE gs_excel TO <fs_row_value>.
          IF gs_intern-col  EQ 10.
            REPLACE ALL OCCURRENCES OF ',' IN gs_intern-value WITH space.
            CONDENSE gs_intern-value  NO-GAPS.
            <fs_row_value> = gs_intern-value.
          ELSE.
            <fs_row_value> = gs_intern-value.
          ENDIF.

          AT END OF row.
            IF gs_excel-vkorg EQ '1001' OR gs_excel-vkorg = '1101'.
              gs_excel-werks = '1001'.
            ELSEIF gs_excel-vkorg EQ '1002' OR gs_excel-vkorg = '1102'.
              gs_excel-werks = '1002'.
            ENDIF.

            IF p_typ1 = 'X'.
              DATA(tmp_bldat) = gs_excel-bldat .
            ELSE.
              tmp_bldat = '' .
            ENDIF.

            gs_excel-str = gs_excel-auart && gs_excel-vkorg &&
              gs_excel-kunnr && gs_excel-kondm && gs_excel-zcsperson &&
              gs_excel-kunwe && gs_excel-kvgr1 && gs_excel-lfdat &&
              gs_excel-matnr && gs_excel-bstkd && gs_excel-posex && tmp_bldat.
            CONDENSE gs_excel-str NO-GAPS. "str用于校验数据是否有重复行

            gs_excel-str1 = gs_excel-auart && gs_excel-vkorg && gs_excel-kunnr
              && gs_excel-kondm && gs_excel-zcsperson && gs_excel-werks && gs_excel-matnr
              && gs_excel-bstkd && gs_excel-posex.
            CONDENSE gs_excel-str1 NO-GAPS. "str1用于形成组合,方便分配未清交货数量

            gs_excel-str2 = gs_excel-auart && gs_excel-vkorg && gs_excel-kunnr
              && gs_excel-kondm && gs_excel-zcsperson && gs_excel-kunwe && gs_excel-kvgr1
              && gs_excel-lfdat  && gs_excel-werks  "&& gs_excel-bstkd&& gs_excel-posex
              && tmp_bldat .
*          && GS_EXCEL-MATNR
*          && GS_EXCEL-BSTKD && GS_EXCEL-POSEX.
            CONDENSE gs_excel-str2 NO-GAPS. "str2用于形成产生DN组合,同一组合产生一张DN

            CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
              EXPORTING
                input  = gs_excel-matnr
              IMPORTING
                output = gs_excel-matnr.

            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                input  = gs_excel-kunnr
              IMPORTING
                output = gs_excel-kunnr.

            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
              EXPORTING
                input  = gs_excel-kunwe
              IMPORTING
                output = gs_excel-kunwe.

            IF gs_excel-posex IS  NOT INITIAL.
              lv_posex  = gs_excel-posex.
              CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                EXPORTING
                  input  = lv_posex
                IMPORTING
                  output = gs_excel-posex.

            ENDIF.


            APPEND gs_excel TO gt_excel.
            CLEAR gs_excel.
          ENDAT.
        ENDLOOP.
      CATCH cx_root INTO DATA(lo_root) .
        CALL METHOD lo_root->if_message~get_text
          RECEIVING
            result = lv_result.
        "报错提示
        WRITE:/ '导入文件出现错误:' .
        WRITE:/ '内容行:' && gs_intern-row && ',' && lv_result && '请检查以下数据: '.
        ULINE.
        LOOP AT lt_alsmex_tabline INTO gs_intern WHERE row = gs_intern-row .
          WRITE:/ gs_intern-value .
        ENDLOOP.
    ENDTRY.
  ENDIF.

  SORT gt_excel ASCENDING BY str1.

  MOVE-CORRESPONDING gt_excel TO gt_alv.

  CLEAR:lt_alsmex_tabline.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_check_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_data .
  DATA:lv_msg       TYPE bapiret2-message,
       lv_ordqty_bu TYPE ordqty.

  DATA:lv_matnr TYPE mara-matnr.

  SELECT kunnr,vkorg,vtweg,spart INTO TABLE @DATA(lt_knvv) FROM knvv
    WHERE vtweg = '00'
      AND cassd = ''
    ORDER BY kunnr.

  IF gt_alv IS NOT INITIAL.
    SELECT matnr,vkorg,vtweg INTO TABLE @DATA(lt_mvke) FROM mvke
      FOR ALL ENTRIES IN @gt_alv
      WHERE matnr = @gt_alv-matnr
        AND vkorg = @gt_alv-vkorg
        AND vtweg = '00'.

    SELECT mara~matnr,maktx,meins INTO TABLE @DATA(lt_makt) FROM mara
      INNER JOIN makt ON makt~matnr = mara~matnr
        AND spras = @sy-langu
       FOR ALL ENTRIES IN @gt_alv
      WHERE mara~matnr = @gt_alv-matnr.

    SELECT kunnr,name1,name2 FROM kna1 INTO TABLE @DATA(lt_kna1)
      FOR ALL ENTRIES IN @gt_alv
      WHERE kunnr = @gt_alv-kunnr
        OR kunnr = @gt_alv-kunwe.

** MODIFY BY HELQ 20210819>>>

*    SELECT * INTO TABLE @DATA(lt_vbep_001) FROM zvsdvbep001
*      FOR ALL ENTRIES IN @gt_alv
*      WHERE kunnr = @gt_alv-kunnr
*        AND matnr = @gt_alv-matnr
*        AND bstkd = @gt_alv-bstkd.

    SELECT a~auart ,
          a~vkorg,
          a~kunnr,
          a~kondm,
          a~zcsperson,
          a~kunwe,
          a~kvgr1 ,
          a~lfdat,
          a~matnr,
          a~bstkd,
          a~posex,
          a900~kappl FROM    a900
*       FOR ALL ENTRIES IN @GT_ALV
          INNER JOIN @gt_alv AS  a ON a~vkorg = a900~vkorg
                                  AND a~kunnr = a900~kunnr
                                  AND a~kondm = a900~kondm
                                  AND a~matnr = a900~matnr
         INNER JOIN konp ON a900~knumh = konp~knumh
          WHERE a900~kappl = 'V'
            AND a900~kschl = 'ZPR0'
            AND vtweg = '00'
            AND loevm_ko  = ''
            AND auart IN ( 'ZOR1','ZOR5','ZOR6' )
            AND datab <= a~lfdat
            AND datbi >= a~lfdat
      INTO TABLE @DATA(lt_a900).

    SELECT a~auart ,
           a~vkorg,
           a~kunnr,
           a~kondm,
           a~zcsperson,
           a~kunwe,
           a~kvgr1 ,
           a~lfdat,
           a~matnr,
          

http://www.dtcms.com/a/525516.html

相关文章:

  • 网站栏目设计网站做哪块简单
  • 怎么给网站做二维码龙岗网站建设公司效果
  • 网站建设开题报告网站建站工具有哪些
  • 电话交换机软件3CX安全访问实践:屏蔽IP访问,仅允许域名访问
  • Linux系统中配置history命令显示时间、IP、账号和操作命令
  • springboot3 uuid 唯一标识入门与实战
  • P1041 [NOIP 2003 提高组] 传染病控制
  • 武进建设局网站和业务多一样的平台
  • eclipse可以做门户网站嘛公司建设网站的 计划书
  • Linux小课堂: 从IPv4到IPv6、主机名解析及网络接口管理
  • ant design vue使用date组件,判断要清空却失效的问题
  • 百度seo搜索百度推广优化技巧
  • 手机版网站建设方案福建建设工程信息网官网查询
  • 终结工艺数据分散管理:金仓数据库平替MongoDB,实现参数、配方、流程一体贯通
  • SAP 长文本弹窗函数 及控件使用
  • 常规同轴光源在工业视觉检测上的应用
  • 建设国家游戏网站免费创建音乐网站
  • 网站源码怎么做网站热点新闻事件及观点简单版
  • windows服务器mstsc远程桌面连接输入用户名后连接时自带拼接了本机计算机名称导致用户名一直错误,无法远程,使用.\用户名格式解决
  • 【Diffusion Model】奠基之作DDPM详解
  • 4a级景区网站建设方寸网站建设
  • 【图像超分】论文复现:轻量化超分 | SPAN的Pytorch源码复现,跑通源码进行训练、测试
  • 小红书小组件开发 最早踩坑版
  • 厚街外贸网站建设公司wordpress.org hosting
  • 现在网站用什么语言做最好WordPress整站下载器
  • 用最少数量的箭引爆气球--leetcode
  • Linux中网络初始化函数sock_init的实现
  • 数据结构——KMP算法
  • 湖北微网站建设报价我的手机网站
  • Spring集成WebSocket