生产订单批导

TYPE-POOLS SLIS,ICON,TRUXS .



TYPES:
  BEGIN OF TY_ALV,
    BOX       TYPE C,
    PLNBEZ    TYPE AFKO-PLNBEZ"物料
    MAKTX     TYPE MAKT-MAKTX,   "物料描述
    WERKS     TYPE AUFK-WERKS"工厂
    AUART     TYPE AUFK-AUART"订单类型
    GAMNG     TYPE AFKO-GAMNG"总数量
    MEINS     TYPE MARA-MEINS,  "基本单位
    VERID     TYPE AFPO-VERID"生产版本
    ZBC001    TYPE AUFK-ZBC001"排产日期
    ZBC002    TYPE AUFK-ZBC002"班次
    ZBC003    TYPE AUFK-ZBC003"排产人员
    MESS(200TYPE C,
    AUFNR     TYPE AUFK-AUFNR"订单
    ZJIANCHA  TYPE C,
  END OF TY_ALV.
DATA GT_ALV TYPE TABLE OF TY_ALV,
       GS_ALV LIKE LINE OF GT_ALV.
DATA GT_ALV2 TYPE TABLE OF TY_ALV,
       GS_ALV2 LIKE LINE OF GT_ALV2.
TYPES:
  BEGIN OF TY_UPLOAD,
    PLNBEZ TYPE AFKO-PLNBEZ"物料
    WERKS  TYPE AUFK-WERKS"工厂
    AUART  TYPE AUFK-AUART"订单类型
    GAMNG  TYPE STRING"总数量
*    GAMNG  TYPE AFKO-GAMNG, "总数量
    VERID  TYPE AFPO-VERID"生产版本
    ZBC001 TYPE AUFK-ZBC001"排产日期
    ZBC002 TYPE AUFK-ZBC002"班次
    ZBC003 TYPE AUFK-ZBC003"排产人员
    AUFNR  TYPE AUFK-AUFNR"订单
  END OF TY_UPLOAD.
DATA GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
       GS_UPLOAD LIKE LINE OF GT_UPLOAD.


DATA GT_BDCDATA TYPE TABLE OF BDCDATA WITH HEADER LINE"BDC执行内表
DATA GT_MSGTAB TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE "BDC返回信息表

TYPESBEGIN OF TY_MESSAGE,
         MESSAGE(100TYPE C,
         ZTYPE        TYPE C,
       END OF TY_MESSAGE.
DATA:GT_MES TYPE TABLE OF TY_MESSAGE,
     GS_MES TYPE TY_MESSAGE.

TYPES :
  BEGIN OF TY_MARC,
    MATNR TYPE MARC-MATNR,
    WERKS TYPE MARC-WERKS,
  END OF TY_MARC.
DATA GT_MARC TYPE TABLE OF TY_MARC,
       GS_MARC LIKE LINE OF GT_MARC.

TYPES :
  BEGIN OF TY_MAKT,
    MATNR TYPE MAKT-MATNR,
    MAKTX TYPE MAKT-MAKTX,
  END OF TY_MAKT.
DATA GT_MAKT TYPE TABLE OF TY_MAKT,
       GS_MAKT LIKE LINE OF GT_MAKT.


TYPES :
  BEGIN OF TY_MARA,
    MATNR TYPE MARA-MATNR,
    MEINS TYPE MARA-MEINS,
  END OF TY_MARA.
DATA GT_MARA TYPE TABLE OF TY_MARA,
       GS_MARA LIKE LINE OF GT_MARA.








*&---定义ALV显示的字段列及其描述等属性
DATAGT_FIELDCAT TYPE TABLE OF LVC_S_FCAT,
      GS_FIELDCAT TYPE LVC_S_FCAT,
      GS_LAYOUT   TYPE LVC_S_LAYO,
      G_REPID     LIKE SY-REPID VALUE SY-REPID.

*----------------------------------------------------------------------*
*---------------------------------选择屏幕-----------------------------*
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_PATH  LIKE RLGRAP-FILENAME,         "文件路径
           RB_UP   TYPE C RADIOBUTTON GROUP GRP1,
           RB_DOWN TYPE C RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.


*---------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PATH.    "P_PATH创建搜索帮助
  PERFORM FRM_BROWSER_FILE.         "选择屏幕获取本地EXCEL

START-OF-SELECTION.
  IF RB_UP 'X'.
    IF P_PATH IS INITIAL .
      MESSAGE '上传文件路径不能为空TYPE 'S' DISPLAY LIKE 'E' .
      LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
    ENDIF.

    PERFORM FRM_UP_EXCEL.       "上传Excel数据
    PERFORM FRM_CHK_DATA.       "检查数据
    PERFORM FRM_LAYOUT.
    PERFORM FRM_FIELDCAT.
    PERFORM FRM_DISPLAY.
  ELSEIF RB_DOWN 'X'.
    PERFORM FRM_DOWN_EXCEL.
  ENDIF.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_BROWSER_FILE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_BROWSER_FILE .
  DATALV_RC   TYPE I,
        LV_USER TYPE I,
        LT_FILE TYPE FILETABLE,
        LS_FILE TYPE FILE_TABLE.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    
EXPORTING
      WINDOW_TITLE            '选择文件'
      FILE_FILTER             'EXCEL文件(*.XLSX)|*.XLS|*.XLSX|全部文件 (*.*)|*.*|'
    CHANGING
      FILE_TABLE              LT_FILE
      RC                      
LV_RC
      USER_ACTION             
LV_USER
    
EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED 1
      CNTL_ERROR              2
      ERROR_NO_GUI            3
      NOT_SUPPORTED_BY_GUI    4
      OTHERS                  5.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    CHECK LV_RC 1
      AND LV_USER <> 9.
    READ TABLE LT_FILE INTO LS_FILE INDEX 1.
    P_PATH LS_FILE-FILENAME.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GV_FULLPATH
*&---------------------------------------------------------------------*
FORM FRM_DOWN_EXCEL .

*&---变量定义
  DATA:LV_TEXT       TYPE STRING,                   "MESSAGE
       LV_FILENAME   TYPE STRING,                   "DOWNLOAD FILE NAME
       LV_PATH       TYPE STRING,                   "DOWNLOAD FILE PATH
       LV_FUNCTXT    TYPE SMP_DYNTXT,               "MENU NAME
       LV_FILEPATH   TYPE RLGRAP-FILENAME VALUE 'C'"FILE PATCH
       LV_TITLE      TYPE STRING ,                  "TITLE
       LV_TITLE_NAME TYPE STRING,                   "TITLE NAME
       LV_MOD(20),                                  "MODEL
       LV_FULLPATH   TYPE STRING,                   "FULL PATH
       LV_OBJECT     TYPE WWWDATATAB,               "OBJECT NAME
       LV_RC         TYPE SY-SUBRC.                 "RETURN CODE

* SMWO 模板名称
  LV_MOD 'ZPPB_142'"XXX下载文件名
调用OS 操作系统对话框
  LV_TITLE      '模板下载'.
  LV_TITLE_NAME '生产订单'.
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    
EXPORTING
      WINDOW_TITLE      LV_TITLE      保存'
      DEFAULT_FILE_NAME LV_TITLE_NAME 发票预制导入模板
    CHANGING
      FILENAME          LV_FILENAME
      PATH              
LV_PATH
      FULLPATH          
LV_FULLPATH.
操作系统文件路径
  CONCATENATE LV_PATH
  LV_FILENAME
  
'.XLS'
  INTO LV_FILEPATH.
* OS长度控制/下载模板
  IF STRLENLV_FILEPATH <> 4.
查询模板.
    SELECT SINGLE RELID
    OBJID
    
FROM WWWDATA
    
INTO CORRESPONDING FIELDS OF LV_OBJECT
    
WHERE SRTF2 '0'
    AND OBJID LV_MOD.    "SMW0里对象名称
    IF SY-SUBRC <> OR LV_OBJECT-OBJID SPACE .
      CONCATENATE TEXT-021"'模板文件:'
      LV_MOD
      
TEXT-022"'不存在,请用SMW0进行加载.'
      INTO LV_TEXT.
      MESSAGE LV_TEXT TYPE 'E'.
      STOP.
    ENDIF.
下载模板
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        KEY         LV_OBJECT
        DESTINATION 
LV_FILEPATH
      
IMPORTING
        RC          LV_RC.
    IF LV_RC <> 0.
      CONCATENATE '模板文件:LV_MOD  '下载失败,请与开发人员联系.'"''下载失败,请与开发人员联系.'
      INTO LV_TEXT.
      MESSAGE LV_TEXT TYPE 'E'.
      STOP.
    ENDIF.
* '已下载'
    MESSAGE '已下载TYPE 'S'.
  ELSE.
* '已取消下载'
    MESSAGE '已取消下载TYPE 'S'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UP_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_UP_EXCEL .

  DATALT_FILENAME TYPE RLGRAP-FILENAME,   "路径
        LT_DATA     TYPE TRUXS_T_TEXT_DATA.

  LT_FILENAME P_PATH.   "路径
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    = 'X'
      I_LINE_HEADER        'X'
      I_TAB_RAW_DATA       LT_DATA
      I_FILENAME           
LT_FILENAME
    
TABLES
      I_TAB_CONVERTED_DATA GT_UPLOAD
    
EXCEPTIONS
      CONVERSION_FAILED    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_CHK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHK_DATA .
  LOOP AT GT_UPLOAD INTO GS_UPLOAD.
    MOVE-CORRESPONDING GS_UPLOAD TO GS_ALV.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT        GS_ALV-PLNBEZ
      
IMPORTING
        OUTPUT       GS_ALV-PLNBEZ
      
EXCEPTIONS
        LENGTH_ERROR 1
        OTHERS       2.
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.

    APPEND GS_ALV TO GT_ALV.
    CLEAR GS_UPLOAD.
  ENDLOOP.

IF GT_ALV IS NOT INITIAL.
  SELECT
       MATNR
       WERKS
       
INTO CORRESPONDING FIELDS OF TABLE GT_MARC
       
FROM MARC
       
FOR ALL ENTRIES IN GT_ALV
       
WHERE WERKS GT_ALV-WERKS
       
AND   MATNR GT_ALV-PLNBEZ.

   SELECT
      MAKTX
      MATNR
      
INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
      
FROM
      MAKT
     
FOR ALL ENTRIES IN GT_ALV
      
WHERE MATNR GT_ALV-PLNBEZ
      
AND SPRAS SY-LANGU.

    SELECT
      MEINS
      MATNR
      
INTO CORRESPONDING FIELDS OF TABLE GT_MARA
      
FROM
      MARA
     
FOR ALL ENTRIES IN GT_ALV
      
WHERE MATNR GT_ALV-PLNBEZ.
ENDIF.

LOOP AT GT_ALV INTO GS_ALV.
  READ TABLE GT_MARC  INTO GS_MARC WITH KEY  MATNR GS_ALV-PLNBEZ   WERKS GS_ALV-WERKS.
     IF SY-SUBRC <> 0.
       GS_ALV-MESS '物料不存在'.
      ENDIF.
  READ TABLE GT_MAKT INTO GS_MAKT WITH KEY  MATNR GS_ALV-PLNBEZ.
    IF SY-SUBRC 0.
      GS_ALV-MAKTX  GS_MAKT-MAKTX.
    ENDIF.

  READ TABLE GT_MARA INTO GS_MARA WITH KEY MATNR GS_ALV-PLNBEZ.
    IF SY-SUBRC 0.
      GS_ALV-MEINS GS_MARA-MEINS.
    ENDIF.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        INPUT         GS_ALV-PLNBEZ
     
IMPORTING
       OUTPUT        GS_ALV-PLNBEZ   .

  MODIFY GT_ALV FROM GS_ALV.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_LAYOUT .
  GS_LAYOUT-ZEBRA 'X'.
  GS_LAYOUT-CWIDTH_OPT 'X'.
  GS_LAYOUT-BOX_FNAME  'BOX'.   " ALV 左侧选择框
  GS_LAYOUT-SEL_MODE 'A'.
ENDFORM.

FORM FRM_FIELDCAT .

*  CLEAR GS_FIELDCAT.
*  GS_FIELDCAT-FIELDNAME = 'BOX'.
*  GS_FIELDCAT-COLTEXT = '选择'.
*  GS_FIELDCAT-OUTPUTLEN = 10.
*  GS_FIELDCAT-EDIT = 'X'.
*  GS_FIELDCAT-CHECKBOX = 'X'.
*  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'AUFNR'.
  GS_FIELDCAT-COLTEXT '订单'.
*  GS_FIELDCAT-CONVEXIT = 'ALPHA'.
  GS_FIELDCAT-OUTPUTLEN 10.
  GS_FIELDCAT-NO_ZERO  'X'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'PLNBEZ'.
  GS_FIELDCAT-COLTEXT '物料'.
*  GS_FIELDCAT-CONVEXIT = 'MATN1'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'MAKTX'.
  GS_FIELDCAT-COLTEXT '物料描述'.
*  GS_FIELDCAT-CONVEXIT = 'MATN1'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'WERKS'.
  GS_FIELDCAT-COLTEXT '工厂'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'AUART'.
  GS_FIELDCAT-COLTEXT '订单类型'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'GAMNG'.
  GS_FIELDCAT-COLTEXT '总数量'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'MEINS'.
  GS_FIELDCAT-COLTEXT '基本单位'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'VERID'.
  GS_FIELDCAT-COLTEXT '生产版本'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'ZBC001'.
  GS_FIELDCAT-COLTEXT '排产日期'.
  GS_FIELDCAT-OUTPUTLEN 10.
  GS_FIELDCAT-NO_ZERO   'X'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'ZBC002'.
  GS_FIELDCAT-COLTEXT '班次'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'ZBC003'.
  GS_FIELDCAT-COLTEXT '排产人员'.
  GS_FIELDCAT-OUTPUTLEN 10.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME 'MESS'.
  GS_FIELDCAT-COLTEXT '信息'.
  GS_FIELDCAT-OUTPUTLEN 200.
  APPEND GS_FIELDCAT TO GT_FIELDCAT .



ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
      IS_LAYOUT_LVC            GS_LAYOUT
      IT_FIELDCAT_LVC          
GT_FIELDCAT
    
TABLES
      T_OUTTAB                 GT_ALV
    
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 SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

  SET PF-STATUS 'STATUS'.

ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
                        RS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAGV_GRID TYPE REF TO CL_GUI_ALV_GRID .

*--------------------刷新-------------------*
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID GV_GRID.

  CALL METHOD GV_GRID->CHECK_CHANGED_DATA.

  CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY.

  RS_SELFIELD-REFRESH 'X'.

  CASE R_UCOMM.
    WHEN 'ZSAVE'.
      PERFORM FRM_DEAL_DATE.
      PERFORM FRM_CHECK_DATE.
      PERFORM FRM_BDC.
  ENDCASE.

  CALL METHOD GV_GRID->REFRESH_TABLE_DISPLAY.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_BDC .

  LOOP AT GT_ALV INTO GS_ALV WHERE BOX 'X'
                              AND   MESS IS NOT INITIAL.
  ENDLOOP.
  IF SY-SUBRC 0.
    MESSAGE '不能选中错误数据导入'  TYPE 'E'.
  ENDIF.
  CLEAR GS_ALV.
  LOOP AT GT_ALV INTO GS_ALV WHERE BOX 'X' AND ZJIANCHA <> 'X'.

    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0100'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ENTK'.
    PERFORM BDC_FIELD       USING 'CAUFVD-MATNR'
                                  GS_ALV-PLNBEZ.             "物料
    PERFORM BDC_FIELD       USING 'CAUFVD-WERKS'
                                  GS_ALV-WERKS.              "工厂
    PERFORM BDC_FIELD       USING 'AUFPAR-PP_AUFART'
                                  GS_ALV-AUART.              "订单类型

    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=SLAP'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'CAUFVD-GLTRP'.
    PERFORM BDC_FIELD       USING 'CAUFVD-GAMNG'
                                  GS_ALV-GAMNG.               "总数量

    PERFORM BDC_FIELD       USING 'CAUFVD-GLTRP'
                                  GS_ALV-ZBC001.               "排产日期
    PERFORM BDC_FIELD       USING 'CAUFVD-GSTRP'
                                  GS_ALV-ZBC001.               "排产日期


    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=STAK'.
    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0131'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=ENT1'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'RC62F-PROD_VERS'.         "生产版本
    PERFORM BDC_FIELD       USING 'RC62F-VER_SEL'
                                     'X'.    "生产版本
    PERFORM BDC_FIELD       USING 'RC62F-PROD_VERS'
                                  GS_ALV-VERID.         "生产版本


    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=+COI'.

    PERFORM BDC_DYNPRO      USING 'SAPLCOKO1' '0115'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'
                                  '=BU'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'
                                  'ZCAUFVD-ZBC003'.

    PERFORM BDC_FIELD       USING 'ZCAUFVD-ZBC001'
                                  GS_ALV-ZBC001.              "排产日期
    PERFORM BDC_FIELD       USING 'ZCAUFVD-ZBC002'
                                  GS_ALV-ZBC002.              "班次
    PERFORM BDC_FIELD       USING 'ZCAUFVD-ZBC003'
                                  GS_ALV-ZBC003.              "排产人员

    CALL TRANSACTION 'CO01' USING GT_BDCDATA
                                
MODE 'N'
                                MESSAGES INTO GT_MSGTAB
                                
UPDATE 'S'.




    LOOP AT GT_MSGTAB."获取MESSAGE
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          MSGID               GT_MSGTAB-MSGID
          MSGNR               
GT_MSGTAB-MSGNR
          MSGV1               
GT_MSGTAB-MSGV1
          MSGV2               
GT_MSGTAB-MSGV2
          MSGV3               
GT_MSGTAB-MSGV3
          MSGV4               
GT_MSGTAB-MSGV4
        
IMPORTING
          MESSAGE_TEXT_OUTPUT GS_MES.

      IF GT_MSGTAB-MSGTYP 'S' AND  GT_MSGTAB-MSGID 'CO' AND GT_MSGTAB-MSGV1 <> ''.
*        IF SY-SUBRC = 0.
          GS_ALV-AUFNR GT_MSGTAB-MSGV1.
          GS_ALV-ZJIANCHA 'X'.
*        ENDIF.
         ELSE.
           GS_ALV-AUFNR ''.
           GS_ALV-ZJIANCHA 'X'.
      ENDIF.
    CLEARGT_BDCDATA[] .
    ENDLOOP.
    GS_ALV-MESS GS_MES-MESSAGE.
    MODIFY GT_ALV FROM GS_ALV TRANSPORTING AUFNR MESS ZJIANCHA.

    CLEARGT_BDCDATA[] ,GS_ALV.
  ENDLOOP.
ENDFORM.


*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-PROGRAM  PROGRAM.
  GT_BDCDATA-DYNPRO   DYNPRO.
  GT_BDCDATA-DYNBEGIN 'X'.
  APPEND GT_BDCDATA.
ENDFORM.
*----------------------------------------------------------------------*
*        INSERT FIELD                                                  *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
*  IF FVAL <> NODATA.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-FNAM FNAM.
  GT_BDCDATA-FVAL FVAL.
  SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
  APPEND GT_BDCDATA.
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DEAL_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DEAL_DATE .
  CLEAR GT_ALV2,GS_ALV2.
  LOOP AT GT_ALV INTO GS_ALV WHERE  BOX 'X'.
    MOVE-CORRESPONDING GS_ALV TO  GS_ALV2.
    APPEND GS_ALV2 TO GT_ALV2.
  ENDLOOP.
  IF GT_ALV2  IS INITIAL.
    MESSAGE '请选择数据再保存TYPE 'S'  DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATE .
  SORT GT_ALV BY BOX ZJIANCHA.
  READ TABLE GT_ALV INTO GS_ALV WITH KEY BOX 'X'   ZJIANCHA 'X'.
  IF SY-SUBRC 0.
    MESSAGE '这条数据已经创建过,请重新选择TYPE 'E'.
    EXIT.
  ENDIF.
ENDFORM.

 

 

    1. 需要注意的要点

上传的接收内表数量类型定义STRING,不然导入的时候当数量小于1的时候会扩大倍数

TYPES:
  BEGIN OF TY_UPLOAD,
    PLNBEZ TYPE AFKO-PLNBEZ"物料
    WERKS  TYPE AUFK-WERKS"工厂
    AUART  TYPE AUFK-AUART"订单类型
    GAMNG  TYPE STRING"总数量
*    GAMNG  TYPE AFKO-GAMNG, "总数量
    VERID  TYPE AFPO-VERID"生产版本
    ZBC001 TYPE AUFK-ZBC001"排产日期
    ZBC002 TYPE AUFK-ZBC002"班次
    ZBC003 TYPE AUFK-ZBC003"排产人员
    AUFNR  TYPE AUFK-AUFNR"订单
  END OF TY_UPLOAD.
DATA GT_UPLOAD TYPE TABLE OF TY_UPLOAD,
       GS_UPLOAD LIKE LINE OF GT_UPLOAD.

 

 

1.3.2 BDC录屏之后的FORM BDC_FIELD USING FNAM FVAL. 要删除前导空格

 SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.

FORM BDC_FIELD USING FNAM FVAL.
*  IF FVAL <> NODATA.
  CLEAR GT_BDCDATA.
  GT_BDCDATA-FNAM FNAM.
  GT_BDCDATA-FVAL FVAL.
  SHIFT GT_BDCDATA-FVAL LEFT DELETING LEADING SPACE.
  APPEND GT_BDCDATA.
*  ENDIF.
ENDFORM.

 

 

<think>嗯,用户想了解SAP销售订单价格条件的完整例子。首先,我需要确认用户对SAP的熟悉程度,可能是一个需要处理量定价的业务人员或顾问。用户可能遇到了需要大量维护销售订单价格条件的情况,手动操作太费时间,所以想用功能提高效率。 接下来,我应该回忆SAP中常用的工具,比如LSMW、BDC或者最新的Migration Cockpit。用户需要的是完整例子,所以步骤要详细,包括准备工作、数据准备、配置条件表、工具操作以及后续检查。 需要注意用户提到的价格条件,这可能涉及到条件技术,所以需要解释条件类型、条件表等概念。可能还需要提到VK11维护条件记录,但的话是通过LSMW或其他工具入。 用户可能容易出错的点包括数据格式、条件表的关键字段是否正确,以及权限问题。在例子中要提醒这些注意事项,比如确保公司代码、销售组织等字段正确,避免数据错误。 另外,是否需要区分不同的条件类型,比如PR00还是折扣类型?例子中使用PR00作为示例比较合适,因为它是标准价格条件。数据文件的结构要明确,包括必要的字段如销售组织、分销渠道、物料号等。 可能还需要说明测试的重要性,先在测试环境执行,避免影响生产系统。最后,确认结果是否成功,检查VA03或条件记录VK13。 还要考虑用户是否了解LSMW的结构,比如项目、子项目、步骤等,所以在步骤里需要简要说明。同时,是否需要启用会话,执行后查看日志,这些都是关键点。 总的来说,回答需要结构清晰,分步骤说明,确保用户能跟着操作。同时提醒常见错误和检查点,确保用户操作顺利。可能需要补充参考资料或注意事项,比如权限、数据备份等,但用户要求完整例子,所以重点放在流程上。</think>以下是一个完整的SAP销售订单价格条件示例,基于LSMW(Legacy System Migration Workbench)工具实现: --- ### **一、业务背景** 需要为500个物料量维护销售订单标准价格条件(如PR00),覆盖多个销售组织/分销渠道。 --- ### **二、前期准备** 1. **配置检查** - 确认条件类型PR00已配置(事务代码:V/06) - 检查条件表(事务代码:V/03)如AXXX是否存在适用组合(销售组织+分销渠道+物料) 2. **模板准备** - 下载LSMW模板文件:SE16N → 表`PRICING_CONDITION`结构 - 关键字段: ``` COND_TYPE(条件类型) | COND_TABLE(条件表) | APPL(应用:V) SALES_ORG | DISTR_CHAN | MATERIAL | COND_P_UNT(定价单位) COND_UNIT(单位) | COND_VALUE(价格值) | VALID_FROM(有效期起) ``` --- ### **三、数据文件示例(CSV格式)** ```csv COND_TYPE;COND_TABLE;APPL;SALES_ORG;DISTR_CHAN;MATERIAL;COND_P_UNT;COND_UNIT;COND_VALUE;VALID_FROM PR00;AXXX;V;1000;10;MAT001;1;PC;25.50;20240101 PR00;AXXX;V;1000;10;MAT002;1;PC;18.75;20240101 ...(共500行数据) ``` --- ### **四、LSMW操作步骤** 1. **创建项目** - 事务代码LSMW → 创建项目`ZPRICE_IMPORT`、子项目`PR00`、对象`PRICING` 2. **定义源结构** - 选择"从文件入" → 匹配CSV文件字段与SAP字段映射 3. **设置转换规则** - 数值字段(如COND_VALUE)需指定格式转换 - 日期字段VALID_FROM用`YYYYMMDD`格式转换 4. **指定目标数据** - 选择标准量输入程序`RV16ACOND_MASS`(条件记录维护程序) 5. **执行入** - 上传CSV文件 → 显示转换后的数据 → 模拟测试 - 确认无误后执行实际入(需授权) --- ### **五、关键检查点** 1. **日志分析** - 查看LSMW执行日志,确认500条记录无错误(绿色状态) 2. **数据验证** - 事务代码VK13 → 输入条件类型PR00+物料,验证价格是否生效 - 事务代码VA03 → 创建测试销售订单验证价格带出 --- ### **六、常见问题处理** | 问题现象 | 原因 | 解决方案 | |---------|------|---------| | 价格未生效 | 条件表组合未覆盖指定销售渠道 | 检查条件表AXXX的字段组合 | | 单位转换错误 | COND_P_UNT与物料主数据单位不匹配 | 检查物料主数据MM03中的单位 | | 有效期冲突 | 新价格与历史有效期重叠 | 使用VK14调整旧价格有效期 | --- ### **注意事项** 1. 必须先在测试系统验证 2. 价格主数据建议使用`VK11`单条维护测试后再 3. 若需覆盖历史价格,需先使用`VK14`终止旧条件记录 需要进一步了解具体配置细节或异常处理场景可告知具体需求方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值