ABAP DEMO so批量导入
- *&---------------------------------------------------------------------*
- *& Report YDEMO_015
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT YDEMO_015.
- *&---------------------------------------------------------------------*
- *& TOP
- *&---------------------------------------------------------------------*
- "相关表引用声明
- TABLES:VBAK, VBAP,
- EKKO, EKPO,
- EKET, MEAN,
- MARA, MAKT,
- MARD, MARC,
- EORD, LFA1,
- EINA, T023T,
- T001W,T001L,
- KNA1, TVKO,
- TVKOV,TVAK,
- TVBUR.
- TABLES:SSCRFIELDS.
- *----------------------------------------------------------------------
- * Internal table
- *----------------------------------------------------------------------
- *&EXCEL上传数据结构
- TYPES:BEGIN OF TY_UP,
- BSTNK LIKE VBAK-BSTNK, "客户订单号码
- KUNNR LIKE VBAK-KUNNR, "客户代码
- NAME1 LIKE KNA1-NAME1, "客户名称1
- STREET LIKE ADRC-STREET,"送货地址(KNA1-ADRNR->ADRC)
- AUART LIKE VBAK-AUART, "SAP销售订单类型
- VKORG LIKE VBAK-VKORG, "销售组织
- VKBUR LIKE VBAK-VKBUR, "销售部门
- MATNR LIKE VBAP-MATNR, "商品编码
- MAKTX LIKE MAKT-MAKTX, "商品名称
- KWMENG LIKE VBAP-KWMENG,"销售数量
- VRKME LIKE VBAP-VRKME, "销售单位
- KBETR LIKE KONV-KBETR, "单价
- WAERK LIKE VBAP-WAERK, "币种
- KMEIN LIKE VBAP-KMEIN, "EKPO-PEINH, "价格单位
- VDATU LIKE VBAK-VDATU, "交货日期
- WERKS LIKE VBAP-WERKS, "发货地点
- VTWEG LIKE VBAK-VTWEG, "分销渠道
- SPART LIKE VBAK-SPART, "产品组
- VBELN LIKE VBAK-VBELN,
- FLAG(),
- ICON TYPE C, "图标
- SEL TYPE C,
- LIN() TYPE N, "LIKE SY-TABIX,
- REASON(),
- END OF TY_UP.
- TYPES:BEGIN OF TY_HA, "EXCEL上传数据结构
- BSTNK LIKE VBAK-BSTNK, "客户订单号码
- KUNNR LIKE VBAK-KUNNR, "客户
- NAME1 LIKE KNA1-NAME1, "客户名称1
- STREET LIKE ADRC-STREET,"送货地址(KNA1-ADRNR->ADRC)
- AUART LIKE VBAK-AUART, "SAP销售订单类型
- VKORG LIKE VBAK-VKORG, "销售组织
- VKBUR LIKE VBAK-VKBUR, "销售部门
- VTWEG LIKE VBAK-VTWEG, "销售渠道
- SPART LIKE VBAK-SPART, "产品组
- VDATU LIKE VBAK-VDATU, "交货日期
- VBELN LIKE VBAK-VBELN,
- FLAG(),
- ICON TYPE C, "图标
- REASON(),
- LIN TYPE SY-TABIX,
- SEL TYPE C,
- END OF TY_HA.
- DATA:GT_UP TYPE STANDARD TABLE OF TY_UP,
- WA_UP TYPE TY_UP,
- *&so抬头数据
- GT_HA TYPE STANDARD TABLE OF TY_HA,
- WA_HA TYPE TY_HA,
- *&比对重复记录
- GT_UPE TYPE STANDARD TABLE OF TY_HA,
- WA_UPE TYPE TY_HA,
- *&创建so
- GT_HEAD TYPE STANDARD TABLE OF TY_HA WITH HEADER LINE,
- WA_HEAD TYPE TY_HA,
- LT_HEAD LIKE TABLE OF GT_HEAD,
- GT_ITAB LIKE STANDARD TABLE OF ALSMEX_TABLINE WITH HEADER LINE,
- G_TABIX LIKE SY-TABIX.
- * GT_TVAK LIKE TVAK OCCURS 0 WITH HEADER LINE,
- FIELD-SYMBOLS : <FS> TYPE ANY.
- *----------------------------------------------------------------------
- * Variants
- *----------------------------------------------------------------------
- DATA: G_LIN TYPE I,
- G_SLIN TYPE I,
- G_FLIN TYPE I,
- G_TEXT().
- DATA: C_ECOL TYPE I ,
- G_FILE TYPE CHAR20,
- G_NAME TYPE CHAR40.
- DATA:L_VBELN LIKE BAPIVBELN-VBELN.
- DATA:WA_HEADER TYPE BAPISDHD1, "
- WA_HEADERX TYPE BAPISDHD1X, "
- WA_PARTNER TYPE BAPIPARNR, "
- WA_ITEM TYPE BAPISDITM,
- WA_ITEMX TYPE BAPISDITMX,
- WA_COND TYPE BAPICOND,
- WA_CONDX TYPE BAPICONDX,
- WA_SCH TYPE BAPISCHDL,
- WA_BAPE TYPE BAPE_VBAK,
- WA_EX TYPE BAPIPAREX,
- WA_TEXT TYPE BAPISDTEXT,
- LT_PART TYPE STANDARD TABLE OF BAPIPARNR,
- LT_ITEM TYPE STANDARD TABLE OF BAPISDITM,
- LT_ITEMX TYPE STANDARD TABLE OF BAPISDITMX,
- LT_SCH TYPE STANDARD TABLE OF BAPISCHDL,
- LT_SCHX TYPE STANDARD TABLE OF BAPISCHDLX,
- L_RETURN LIKE BAPIRET2 OCCURS WITH HEADER LINE,
- LT_COND TYPE STANDARD TABLE OF BAPICOND,
- LT_CONDX TYPE STANDARD TABLE OF BAPICONDX,
- LT_TEXT LIKE STANDARD TABLE OF BAPISDTEXT,
- LT_EX TYPE STANDARD TABLE OF BAPIPAREX.
- *---------------------------------------------------------------------*
- * Data parameters for alv report use
- *---------------------------------------------------------------------*
- DATA: G_PROGRAM TYPE SY-REPID,
- GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
- GS_LAYOUT1 TYPE SLIS_LAYOUT_ALV,
- GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
- GS_FIELDCAT LIKE LINE OF GT_FIELDCAT,
- GT_FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV,
- GS_FIELDCAT1 LIKE LINE OF GT_FIELDCAT,
- WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
- WA_FIELDCAT1 TYPE SLIS_FIELDCAT_ALV,
- IT_EVENTS TYPE SLIS_T_EVENT WITH HEADER LINE,
- GT_EVENT TYPE SLIS_T_EVENT,
- WA_EVENT TYPE SLIS_ALV_EVENT.
- DATA: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
- DATA: GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
- VALUE 'ALV_TOP_OF_PAGE'.
- RANGES:R_BSTNK FOR VBAK-BSTNK."客户订单号码
- ************************************************************************
- * Select Screen *
- ************************************************************************
- SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-.
- PARAMETERS:P_FNAME LIKE RLGRAP-FILENAME MEMORY ID M01. "OBLIGATORY.TYPE STRING
- SELECTION-SCREEN END OF BLOCK BLK1.
- SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-.
- PARAMETERS:P_TEST RADIOBUTTON GROUP RAD1 DEFAULT 'X',
- P_EXCUTE RADIOBUTTON GROUP RAD1.
- SELECTION-SCREEN FUNCTION KEY .
- SELECTION-SCREEN : END OF BLOCK B2.
- *&------------------------------------------------------------------*
- *& INITIALIZATION
- *&------------------------------------------------------------------*
- INITIALIZATION.
- PERFORM FRM_INIT_FIELD.
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
- CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
- EXPORTING
- MASK = '*.xls'
- STATIC = 'X'
- CHANGING
- FILE_NAME = P_FNAME.
- IF SY-SUBRC <> .
- * Implement suitable error handling here
- ENDIF.
- AT SELECTION-SCREEN.
- PERFORM FRM_CHECK_AUTHOR.
- PERFORM FRM_DOWN_EXCEL.
- START-OF-SELECTION.
- PERFORM FRM_GET_DATA.
- *&test run
- IF P_TEST EQ 'X'.
- PERFORM FRM_TEST_RUN.
- ENDIF.
- *&---------------------------------------------------------------------*
- *& Form FRM_INIT_FIELD
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_INIT_FIELD .
- SSCRFIELDS-FUNCTXT_01 = '下载EXCEL模板'.
- C_ECOL = .
- G_FILE = 'ZDQT005'.
- G_NAME = '\电器采销售订单导入模板.XLS'.
- ENDFORM. " FRM_INIT_FIELD
- *&---------------------------------------------------------------------*
- *& Form FRM_CHECK_AUTHOR
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_CHECK_AUTHOR .
- ENDFORM. " FRM_CHECK_AUTHOR
- *&---------------------------------------------------------------------*
- *& Form FRM_DOWN_EXCEL
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_DOWN_EXCEL .
- DATA:LW_PATH TYPE STRING.
- DATA:L_FORMKEY LIKE WWWDATATAB,
- L_FILE TYPE CHAR20,
- L_PATH TYPE LOCALFILE,
- L_TYPE TYPE FILEFORMAT,
- L_NAME TYPE CHAR40.
- IF SSCRFIELDS-UCOMM = 'FC01'.
- *&S1.选择文件路径
- * CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
- * EXPORTING
- * MASK = '*.xls'
- * STATIC = 'X'
- * CHANGING
- * FILE_NAME = P_FNAME.
- * IF SY-SUBRC <> 0.
- * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
- * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
- * ENDIF.
- * L_TYPE = 'XLS'.
- *&S2.下载文件
- CONCATENATE 'MI' G_FILE INTO L_FORMKEY.
- * CONCATENATE P_FNAME G_NAME INTO L_PATH.
- CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
- EXPORTING
- KEY = L_FORMKEY
- DESTINATION = L_PATH
- CHANGING
- TEMP = L_PATH.
- ELSE.
- IF P_FNAME IS INITIAL.
- MESSAGE E001() WITH '请输入文件路径!'.
- STOP.
- ENDIF.
- ENDIF.
- ENDFORM. " FRM_DOWN_EXCEL
- *&---------------------------------------------------------------------*
- *& Form FRM_GET_DATA
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_GET_DATA .
- *&一致性检查:
- DATA:L_INDEX TYPE I,
- LR_OREF TYPE REF TO CX_ROOT,
- LV_TEXT TYPE STRING.
- DATA:LT_RAW TYPE TRUXS_T_TEXT_DATA.
- CLEAR:GT_UP[],GT_HA[],
- WA_UP, WA_HEAD,
- GT_ITAB[], GT_ITAB.
- *&S1.读取上传excel到内表
- * ( CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' )"要进行行列转换 限制1W行,
- * ( CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' )"直接转换到目标内表
- CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
- EXPORTING
- * I_FIELD_SEPERATOR =
- I_LINE_HEADER = 'X'
- I_TAB_RAW_DATA = LT_RAW
- I_FILENAME = P_FNAME
- TABLES
- I_TAB_CONVERTED_DATA = GT_UP
- EXCEPTIONS
- CONVERSION_FAILED =
- OTHERS = .
- IF SY-SUBRC <> .
- MESSAGE ID SY-MSGID
- TYPE SY-MSGTY
- NUMBER SY-MSGNO
- WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
- ENDIF.
- *&S2.内表单元格检查
- LOOP AT GT_UP INTO WA_UP.
- G_TABIX = SY-TABIX.
- WA_UP-LIN = SY-INDEX.
- *&2.1客户订单号码
- IF WA_UP-BSTNK IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- WA_UP-REASON = '客户订单号码必输!'.
- ELSE.
- SELECT SINGLE *
- FROM VBAK
- WHERE BSTNK = WA_UP-BSTNK.
- IF SY-SUBRC = .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '客户订单:' WA_UP-BSTNK '已导入' ' /' WA_UP-REASON INTO
- WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&S2.1.1栏位格式转换
- CONDENSE WA_UP-KUNNR NO-GAPS.
- CONDENSE WA_UP-MATNR NO-GAPS.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- INPUT = WA_UP-KUNNR
- IMPORTING
- OUTPUT = WA_UP-KUNNR.
- CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
- EXPORTING
- INPUT = WA_UP-MATNR
- IMPORTING
- OUTPUT = WA_UP-MATNR.
- *&2.2客户代码检查
- IF WA_UP-KUNNR IS NOT INITIAL.
- SELECT SINGLE *
- FROM KNA1
- WHERE KUNNR = WA_UP-KUNNR.
- IF SY-SUBRC NE .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '客户代码错误' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ELSE.
- *& KNVV里找默认的零售的客户代码
- SELECT SINGLE KUNNR
- INTO WA_UP-KUNNR
- FROM KNVV
- WHERE VKORG EQ WA_UP-VKORG
- AND VTWEG EQ WA_UP-VTWEG
- AND SPART EQ WA_UP-SPART.
- IF SY-SUBRC NE .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '找不到默认零售客户,请检查!' ' /' WA_UP-REASON INTO
- WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.3客户名称
- IF WA_UP-KUNNR IS INITIAL.
- IF WA_UP-NAME1 IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '客户名称必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.4送货地址
- IF WA_UP-KUNNR IS INITIAL.
- IF WA_UP-STREET IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '送货地址必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.5订单类型
- IF WA_UP-AUART IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '订单类型必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&订单类型检查
- SELECT SINGLE *
- FROM TVAK
- WHERE AUART = WA_UP-AUART.
- IF SY-SUBRC NE .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '订单类型错误' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.6销售组织
- IF WA_UP-VKORG IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '销售组织必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&销售组织检查
- SELECT SINGLE *
- FROM TVKO
- WHERE VKORG = WA_UP-VKORG.
- IF SY-SUBRC NE .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '销售组织错误' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.7销售部门
- IF WA_UP-VKBUR IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '销售部门必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&销售部门检查
- SELECT SINGLE *
- FROM TVBUR
- WHERE VKBUR = WA_UP-VKBUR.
- IF SY-SUBRC NE .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '销售部门错误' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.8商品编码
- IF WA_UP-MATNR IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '商品编码必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&商品检查
- SELECT SINGLE *
- FROM MARA
- WHERE MATNR = WA_UP-MATNR.
- IF SY-SUBRC NE .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '商品不存在' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.9商品名称
- *&S2.10销售数量
- CLEAR LV_TEXT.
- TRY.
- IF WA_UP-KWMENG IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '销售数量必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- CATCH CX_SY_CONVERSION_ERROR INTO LR_OREF.
- LV_TEXT = LR_OREF->GET_TEXT( ).
- ENDTRY.
- IF LV_TEXT IS NOT INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '数量包含无效字符' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&数量检查
- IF WA_UP-KWMENG <= .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '数量不能小于0' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.11销售单位
- IF WA_UP-VRKME IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '销售单位必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- *&2.12单价必输
- CLEAR LV_TEXT.
- TRY.
- IF WA_UP-KBETR IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '单价必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- CATCH CX_SY_CONVERSION_ERROR INTO LR_OREF.
- LV_TEXT = LR_OREF->GET_TEXT( ).
- ENDTRY.
- IF LV_TEXT IS NOT INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '单价包含无效字符' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- *&2.13币种(如果为空,默认为CNY)
- IF WA_UP-WAERK IS INITIAL.
- WA_UP-WAERK = 'CNY'.
- ENDIF.
- *&2.14价格单位(如果为空,默认为销售单位)
- IF WA_UP-KMEIN IS INITIAL.
- WA_UP-KMEIN = WA_UP-VRKME.
- ENDIF.
- *&2.15交货日期
- IF WA_UP-VDATU IS INITIAL.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '交货日期必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&日期栏位格式检查
- CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
- EXPORTING
- DATE = WA_UP-VDATU
- EXCEPTIONS
- PLAUSIBILITY_CHECK_FAILED =
- OTHERS = .
- IF SY-SUBRC <> .
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '日期栏位格式不对' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&2.16发货地点
- IF WA_UP-WERKS IS INITIAL.
- * WA_UP-REASON = '发货地点必输!'.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '发货地点必输!' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ELSE.
- *&地点检查
- SELECT SINGLE *
- FROM T001W
- WHERE WERKS = WA_UP-WERKS.
- IF SY-SUBRC = .
- ELSE.
- WA_UP-FLAG = 'E'. WA_UP-ICON = .
- CONCATENATE '地点不存在' ' /' WA_UP-REASON INTO WA_UP-REASON.
- ENDIF.
- ENDIF.
- *&S3.1产品组 默认为: 10
- WA_UP-SPART = .
- *&S3.2销售渠道默认为: 40
- WA_UP-VTWEG = .
- *&-----------------------------
- *&S3.4抬头栏位检查
- * PERFORM FRM_PROC_CHECK.
- *&S3.5ITEM信息检查
- * PERFORM FRM_ITEM_CHECK.
- *&S3.6判断是否有条目重
- * (允许重复)
- *&4.error log
- IF WA_UP-FLAG NE 'E'.
- WA_UP-FLAG = 'S'.
- * WA_UP-ICON = 2.
- ELSE.
- *&取得错误数据
- R_BSTNK-SIGN = 'I'.
- R_BSTNK-OPTION = 'EQ'.
- R_BSTNK-LOW = WA_UP-BSTNK.
- COLLECT R_BSTNK.
- CLEAR R_BSTNK.
- ENDIF.
- *&4.1excel栏位赋值内表
- MODIFY GT_UP FROM WA_UP INDEX G_TABIX.
- MOVE-CORRESPONDING WA_UP TO WA_HA.
- *&4.2赋值GT_HA.
- CLEAR:WA_HA-FLAG, WA_HA-REASON, WA_HA-ICON.
- **&A.判断重复:
- * READ TABLE GT_UPE INTO WA_UPE WITH KEY BSTNK = WA_HA-BSTNK
- * AUART = WA_HA-AUART
- * KUNNR = WA_HA-KUNNR
- * VKORG = WA_HA-VKORG
- * VKBUR = WA_HA-VKBUR.
- * IF SY-SUBRC EQ 0.
- * G_TABIX = SY-TABIX.
- * WA_UP-FLAG = 'E'. WA_UP-ICON = 1.
- * CONCATENATE '采购订单号' WA_UPE-BSTNK '有重复' '/' WA_HA-REASON INTO WA_HA-REASON.
- * MODIFY GT_HA FROM WA_HA INDEX G_TABIX.
- * ENDIF.
- COLLECT WA_HA INTO GT_HA.
- *&clear 变量:
- CLEAR:WA_UP, WA_HEAD.
- *&Q1.判断内表是否重复
- GT_UPE[] = GT_HA[].
- ENDLOOP.
- SORT GT_HA BY BSTNK KUNNR AUART VKORG VKBUR.
- *&A1.判断重复(客户订单)
- * LOOP AT GT_HEAD.
- * AT NEW BSTNK.
- * WA_HEAD-LIN = 1.
- * CONTINUE.
- * ENDAT.
- * WA_HEAD-LIN = WA_HEAD-LIN + 1.
- ** AT END OF BSTNK.
- ** WA_HEAD-LIN = WA_HEAD-LIN + 1.
- ** ENDAT.
- * IF WA_HEAD-LIN LT 1.
- * CONCATENATE '客户订单号:' GT_HEAD-BSTNK '出现重复,请检查!' INTO WA_HEAD-REASON.
- * ENDIF.
- * MODIFY GT_HEAD FROM WA_HEAD TRANSPORTING LIN REASON.
- * CLEAR GT_HEAD.
- * ENDLOOP.
- * DATA:G_DAY TYPE D.
- * GET TIME. "STAMP FIELD G_DAY.
- * LOOP AT GT_HEAD WHERE LIN LT 1.
- * LOOP AT GT_UP INTO WA_UP WHERE BSTNK EQ GT_HEAD-BSTNK
- * AND AUART EQ GT_HEAD-AUART
- * AND KUNNR EQ GT_HEAD-KUNNR
- * AND VKORG EQ GT_HEAD-VKORG.
- * CONCATENATE WA_HEAD-REASON '/' WA_UP-REASON INTO WA_UP-REASON.
- * WA_UP-FLAG = 'E'. WA_UP-ICON = 1.
- * MODIFY GT_UP FROM WA_UP TRANSPORTING FLAG ICON REASON.
- * CLEAR WA_UP.
- *
- * ENDLOOP.
- *
- * ENDLOOP.
- CLEAR:GT_UPE[].
- SORT GT_UP BY BSTNK KUNNR AUART VKORG VKBUR MATNR.
- *&S3.
- G_LIN = LINES( GT_UP[] ).
- IF G_LIN EQ .
- MESSAGE E001() WITH '没有任何数据!'.
- ELSE.
- MESSAGE S001() WITH '导入数据' G_LIN '条!'.
- ENDIF.
- ENDFORM. " FRM_GET_DATA
- *&---------------------------------------------------------------------*
- *& Form FRM_TEST_RUN
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_TEST_RUN .
- *&S4对于ok的客户订单号 test CHECK
- *&C1.获取ok的客户订单号
- *CLEAR: GT_HEAD[].
- GT_HEAD[] = GT_HA[].
- IF R_BSTNK[] IS NOT INITIAL.
- DELETE GT_HEAD WHERE BSTNK IN R_BSTNK.
- ENDIF.
- *&C2.
- PERFORM FRM_FOR_SO.
- *&C3.返回信息显示明细
- LOOP AT GT_HEAD INTO WA_HEAD WHERE FLAG = 'E'.
- LOOP AT GT_UP INTO WA_UP WHERE AUART = WA_HEAD-AUART
- AND VKORG = WA_HEAD-VKORG
- AND VTWEG = WA_HEAD-VTWEG
- AND KUNNR = WA_HEAD-KUNNR
- AND BSTNK = WA_HEAD-BSTNK
- AND VKBUR = WA_HEAD-VKBUR .
- WA_UP-VBELN = WA_HEAD-VBELN.
- WA_UP-FLAG = WA_HEAD-FLAG.
- WA_UP-ICON = WA_HEAD-ICON.
- WA_UP-REASON = WA_HEAD-REASON.
- *CONCATENATE WA_UP-REASON '-' WA_UP-REASON INTO WA_UP-REASON.
- MODIFY GT_UP FROM WA_UP TRANSPORTING FLAG ICON REASON.
- ENDLOOP.
- ENDLOOP.
- ENDFORM. " FRM_TEST_RUN
- *&---------------------------------------------------------------------*
- *& Form FRM_FOR_SO
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_FOR_SO .
- DATA:BEGIN OF LT_BSTNR OCCURS ,
- VBELN LIKE VBAK-VBELN,
- END OF LT_BSTNR.
- *&A.判断客户订单号是否重复
- LOOP AT GT_HEAD INTO WA_HEAD.
- CLEAR:LT_ITEM[],WA_HEADER,
- LT_SCH[], LT_EX[].
- *&1HEAD参数设置
- PERFORM FRM_SET_HEAD.
- *&2ITEM参数设置
- PERFORM FRM_SET_ITEM.
- *&3BAPI创建so
- PERFORM FRM_CALL_BAPI.
- ENDLOOP.
- ENDFORM. " FRM_FOR_SO
- *&---------------------------------------------------------------------*
- *& Form FRM_SET_HEAD
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_SET_HEAD .
- CLEAR:WA_HEADER,WA_HEADERX.
- *&H1.抬头必输
- WA_HEADER-PURCH_NO_C = WA_HEAD-BSTNK."客户订单号码
- WA_HEADER-DOC_TYPE = WA_HEAD-AUART."订单类型
- WA_HEADER-SALES_ORG = WA_HEAD-VKORG."销售组织
- WA_HEADER-SALES_OFF = WA_HEAD-VKBUR."销售部门
- WA_HEADER-DISTR_CHAN = WA_HEAD-VTWEG."分销渠道
- WA_HEADER-DIVISION = WA_HEAD-SPART."产品组
- WA_HEADER-REQ_DATE_H = WA_HEAD-VDATU."请求交货日期
- *WA_HEADER-PO_METHOD = WA_HEAD-BSARK."客户采购订单类型
- *WA_HEADER-REF_1 = WA_HEAD-BSTNK."参考
- WA_HEADERX-PURCH_NO_C = WA_HEAD-BSTNK."客户订单号码
- WA_HEADERX-DOC_TYPE = 'X'."订单类型
- WA_HEADERX-SALES_ORG = 'X'."销售组织
- WA_HEADERX-SALES_OFF = 'X'."销售部门
- WA_HEADERX-DISTR_CHAN = 'X'."分销渠道
- WA_HEADERX-DIVISION = 'X'."产品组
- WA_HEADERX-REQ_DATE_H = 'X'."请求交货日期
- *WA_HEADERX-PO_METHOD = 'X'."客户采购订单类型
- *WA_HEADERX-REF_1 = 'X'."参考
- *&H2.Partners(?一次性客户处理是否有差别(一次性客户有无标识))
- CLEAR: WA_PARTNER, LT_PART[].
- *&通讯字段: SD单据合作伙伴:WWW(WA_PARTNER)
- * AG-售达方
- * WE-送达方
- *'RG'-付款方
- *'RE'-开票方
- WA_PARTNER-PARTN_ROLE = 'AG'. "售达方
- WA_PARTNER-PARTN_NUMB = WA_HEAD-KUNNR.
- *&"一次性客户
- READ TABLE GT_UP INTO WA_UP WITH KEY AUART = WA_HEAD-AUART
- VKORG = WA_HEAD-VKORG
- VTWEG = WA_HEAD-VTWEG
- KUNNR = WA_HEAD-KUNNR
- BSTNK = WA_HEAD-BSTNK
- VKBUR = WA_HEAD-VKBUR.
- IF WA_UP-NAME1 IS NOT INITIAL.
- WA_PARTNER-NAME = WA_UP-NAME1. "名称
- WA_PARTNER-STREET = WA_UP-STREET."地址
- ENDIF.
- WA_PARTNER-COUNTRY = 'CN'.
- WA_PARTNER-LANGU = SY-LANGU.
- APPEND WA_PARTNER TO LT_PART.
- CLEAR WA_PARTNER.
- *&H4.送达方
- IF WA_UP-KUNNR IS NOT INITIAL.
- CLEAR WA_PARTNER.
- WA_PARTNER-PARTN_ROLE = 'WE'. "送达方
- WA_PARTNER-PARTN_NUMB = WA_HEAD-KUNNR. "客户
- WA_PARTNER-NAME = WA_HEAD-NAME1. "名称
- WA_PARTNER-STREET = WA_HEAD-STREET."地址
- WA_PARTNER-COUNTRY = 'CN'.
- APPEND WA_PARTNER TO LT_PART.
- CLEAR WA_PARTNER.
- ENDIF.
- *&ADD.
- * "RG 付款方
- * WA_PARTNER-PARTN_ROLE = 'RG'.
- * WA_PARTNER-PARTN_NUMB = WA_HEAD-KUNNR.
- ** IF UP_HEAD-NAME1_RG IS NOT INITIAL. "一次性客户
- ** WA_PARTNER-NAME = UP_HEAD-NAME1_RG.
- ** WA_PARTNER-COUNTRY = 'CN'.
- ** ENDIF.
- * APPEND WA_PARTNER TO LT_PART.
- * CLEAR WA_PARTNER.
- *&订单条件的通讯字段
- CLEAR:LT_COND[], LT_COND,
- LT_CONDX[],LT_CONDX.
- **&抬头赋值定价条件类型---条件ZPB0不允许作为抬头条件
- * LOOP AT GT_UP INTO WA_UP WHERE BSTNK = WA_HEAD-BSTNK
- * AND KUNNR = WA_HEAD-KUNNR
- * AND AUART = WA_HEAD-AUART
- * AND VKORG = WA_HEAD-VKORG
- * AND VKBUR = WA_HEAD-VKBUR
- * AND VDATU = WA_HEAD-VDATU.
- **AND VTWEG = WA_HEAD-VTWEG
- **&H3定价控制
- * IF NOT WA_UP-KBETR IS INITIAL.
- * WA_COND-COND_TYPE = 'ZPB0'. "定价条件
- * WA_COND-COND_VALUE = WA_UP-KBETR."价格
- * WA_COND-CURRENCY = WA_UP-WAERK."货币或%\
- ** WA_COND-COND_P_UNT = 1."条件定价单位
- * APPEND WA_COND TO LT_COND.
- * CLEAR WA_COND.
- *
- * WA_CONDX-COND_TYPE = 'ZPB0'."定价条件
- * WA_CONDX-COND_VALUE = 'X'. "价格
- * WA_CONDX-CURRENCY = 'X'. "货币或%
- ** WA_CONDX-UPDATEFLAG = 'U'.
- * APPEND WA_CONDX TO LT_CONDX.
- * CLEAR: WA_CONDX.
- * ENDIF.
- * ENDLOOP.
- EXIT.
- ENDFORM. " FRM_SET_HEAD
- *&---------------------------------------------------------------------*
- *& Form FRM_SET_ITEM
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_SET_ITEM .
- DATA: L_POSNR LIKE VBAP-POSNR,
- L_LP LIKE VBAP-POSNR VALUE ''.
- CLEAR:LT_ITEM[],
- LT_SCH[].
- * LT_COND[].
- *&item 参数赋值
- LOOP AT GT_UP INTO WA_UP WHERE BSTNK = WA_HEAD-BSTNK
- AND KUNNR = WA_HEAD-KUNNR
- AND AUART = WA_HEAD-AUART
- AND VKORG = WA_HEAD-VKORG
- AND VKBUR = WA_HEAD-VKBUR
- AND VDATU = WA_HEAD-VDATU.
- READ TABLE LT_ITEM INTO WA_ITEM WITH KEY MATERIAL = WA_UP-MATNR.
- IF SY-SUBRC NE .
- *&i1.line赋值
- ADD L_LP TO L_POSNR.
- CLEAR WA_ITEM.
- WA_ITEM-ITM_NUMBER = L_POSNR.
- WA_ITEM-MATERIAL = WA_UP-MATNR. "商品
- WA_ITEM-SALES_UNIT = WA_UP-VRKME. "计量单位
- WA_ITEM-PLANT = WA_UP-WERKS. "工厂
- *& WA_ITEM-STORE_LOC = WA_SO-LGORT. "库存地
- APPEND WA_ITEM TO LT_ITEM.
- *&i2.计划行数据
- CLEAR WA_SCH.
- WA_SCH-ITM_NUMBER = L_POSNR.
- WA_SCH-REQ_QTY = WA_UP-KWMENG."数量
- *WA_SCH-REQ_DATE = WA_UP-VDATU. "计划行日期
- APPEND WA_SCH TO LT_SCH.
- *&i3.订单条件的通讯字段
- CLEAR: WA_COND.
- WA_COND-ITM_NUMBER = L_POSNR.
- WA_COND-COND_TYPE = 'ZPB0'. "定价条件
- *&->ADD(解决价格扩大十倍问题)
- WA_COND-COND_VALUE = WA_UP-KBETR / ."价格
- WA_COND-COND_UNIT = WA_UP-KMEIN."条件单位
- *WA_COND-COND_P_UNT = WA_UP-KMEIN. "条件定价单位
- *WA_COND-CURRENCY = LS_COND-KOEIN."货币或%
- WA_CONDX-UPDATEFLAG = 'I'.
- WA_CONDX-COND_TYPE = 'ZPB0'."定价条件
- WA_CONDX-COND_VALUE = 'X'. "价格
- WA_CONDX-COND_UNIT = 'X'."条件单位
- * WA_CONDX-CURRENCY = 'X'. "货币或%
- * APPEND WA_CONDX TO LT_CONDX.
- APPEND WA_COND TO LT_COND.
- ENDIF.
- ENDLOOP.
- ENDFORM. " FRM_SET_ITEM
- *&---------------------------------------------------------------------*
- *& Form FRM_CALL_BAPI
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM FRM_CALL_BAPI .
- *&只需创建正常SO,
- DATA:L_TEST LIKE BAPIFLAG-BAPIFLAG.
- CLEAR :L_VBELN,
- L_RETURN[],
- L_TEST,
- L_RETURN[].
- IF P_TEST EQ 'X'.
- L_TEST = 'X'.
- ENDIF.
- *&正常SO:C,调用BAPI_SALESORDER_CREATEFROMDAT2
- CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
- EXPORTING
- ORDER_HEADER_IN = WA_HEADER
- TESTRUN = L_TEST
- IMPORTING
- SALESDOCUMENT = L_VBELN
- TABLES
- RETURN = L_RETURN
- ORDER_ITEMS_IN = LT_ITEM
- ORDER_PARTNERS = LT_PART
- ORDER_SCHEDULES_IN = LT_SCH
- ORDER_CONDITIONS_IN = LT_COND
- ORDER_CONDITIONS_INX = LT_CONDX
- ORDER_TEXT = LT_TEXT
- EXTENSIONIN = LT_EX.
- READ TABLE L_RETURN WITH KEY TYPE = 'E'.
- IF SY-SUBRC NE .
- IF P_EXCUTE EQ 'X'.
- CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
- WA_HEAD-ICON = .
- ENDIF.
- G_SLIN = G_SLIN + .
- WA_HEAD-VBELN = L_VBELN.
- WA_HEAD-FLAG = 'S'.
- CONCATENATE '销售订单:' L_VBELN '成功创建' INTO WA_HEAD-REASON.
- MODIFY GT_HEAD FROM WA_HEAD TRANSPORTING VBELN FLAG ICON REASON.
- *&Q3.TEST.
- ELSE.
- G_FLIN = G_FLIN + .
- IF P_EXCUTE EQ 'X'.
- CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
- ENDIF.
- WA_HEAD-FLAG = 'E'.
- WA_HEAD-ICON = .
- READ TABLE L_RETURN WITH KEY TYPE = 'E'.
- WA_HEAD-REASON = L_RETURN-MESSAGE.
- MODIFY GT_HEAD FROM WA_HEAD TRANSPORTING FLAG ICON REASON.
- ENDIF.
- ENDFORM. " FRM_CALL_BAPI
ABAP DEMO so批量导入的更多相关文章
- 【ABAP系列】SAP ABAP 用BAPI批量导入物料的质量视图
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP 用BAPI批量导入 ...
- 订餐系统之Excel批量导入
批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...
- java实现文件批量导入导出实例(兼容xls,xlsx)
1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...
- .Net之Nopi Excel数据导出和批量导入功能
一.介绍NPOI和编写demo的原因 1.Npoi是什么: 它是一个专门用于读写Microsoft Office二进制和OOXML文件格式的.NET库,我们使用它能够轻松的实现对应数据的导入,导出功能 ...
- .net core利用MySqlBulkLoader大数据批量导入MySQL
最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- Java实现Excel数据批量导入数据库
Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...
- neo4j批量导入neo4j-import
neo4j数据批量导入 1 neo4j基本参数 1.1 启动与关闭: 1.2 neo4j-admin的参数:控制内存 1.2.1 memrec 是查看参考内存设置 1.2.2 指定缓存–pagecac ...
- Elasticsearch —— bulk批量导入数据
在使用Elasticsearch的时候,一定会遇到这种场景--希望批量的导入数据,而不是一条一条的手动导入.那么此时,就一定会需要bulk命令! 更多内容参考我整理的Elk教程 bulk批量导入 批量 ...
随机推荐
- css cursor效果图
效果图: <!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <meta charset=& ...
- drf框架 - 请求模块 | 渲染模块
Postman接口工具 官方 https://www.getpostman.com/ get请求,携带参数采用Paramspost等请求,提交数据包可以采用三种方式:form-date.urlenc ...
- Map的常用实现类及Entry的用法
public static void main(String[] args) { //map 键值对 json格式根据你的键名来获取对应的值 //特点 :无序.以键值对的形式添加元素,键不 ...
- Linux shell - 按时间和文件大小排序显示文件
在工作中有这样的情况,需要显示所有的文件,按照时间先后或者文件大小先后排序显示 命令:ls 1.按时间排序显示文件 1 test@> ll -rt 2.按文件大小排序显示文件(文件大小单位:k, ...
- YAML_04 用user模块添加用户,并修改密码
ansible]# vim user.yml --- - hosts: cache remote_user: root vars: username: lisi tasks: ...
- BZOJ 4332: JSOI2012 分零食 FFT+分治
好题好题~ #include <bits/stdc++.h> #define N 50020 #define ll long long #define setIO(s) freopen(s ...
- 2019.11.11 模拟赛 T2 乘积求和
昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...
- [luogu 3803]【模板】多项式乘法
传送门 FFT #include<bits/stdc++.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #de ...
- HDU 6208 The Dominator of Strings ——(青岛网络赛,AC自动机)
最长的才可能成为答案,那么除了最长的以外全部insert到自动机里,再拿最长的去match,如果match完以后cnt全被清空了,那么这个最长串就是答案.事实上方便起见这个最长串一起丢进去也无妨,而且 ...
- ubuntu之路——day5(今天看了浅层神经网络的数学推导过程)
1.初始化 2.前向传播 导数比较好理解 3.反向传播 全符号积分的推导看得我头有点晕 最后唤起我依稀的线代回忆 感谢吴恩达老师的反向传播讲解,第一遍看的有点晕,然后仔细看了一下又找了个B站的推导就懂 ...