ZDQT005-销售订单批导
学习:
excle 上传内表的两种方法,-推荐使用:TEXT_CONVERT_SAP
1. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' "要进行行列转换 限制1W行,
ALSM_TABLE 支持Excel 打开情况下进行导入,
ALSM_TABLE 将Excel 另存为 【文本文件-制表符分隔的txt】同样可以导入,
2.TEXT_CONVERT_SAP 无需行列转换,按内表定义顺序导入内表列,效率更高,
需要关闭Excel 才能导入,否则报错;
?没有测试存为txt 是否可行,
*&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 = 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.
一、需求
*&1.详细功能描述 电器事业部存在电商销售,客户在电商平台下单后,渠道部下载客户订单, 在SAP创建销售订单,物流再配送给客户。 *&2.一致性检查: 客户订单号码 必输, 客户代码 客户名称,地址不为空时,可以为空 客户名称 客户代码为空是,必须输入 送货地址 客户代码为空是,必须输入 SAP销售订单类型 必输,且有效 销售组织 必输,且有效 销售部门 必输,且有效 商品编码 必输,且有效 商品名称 销售数量 必输,且有效 销售单位 必输,且有效 单价 必输,且有效 币种 如果为空,默认为CNY 价格单位 如果为空,默认为销售单位 交货日期 必输,且有效 发货地点 必输,且有效 *&3.操作步骤: 1.选中上传的文件后(屏幕1),运行。 程序上传数据文件,并检查数据的有效性; 如果数据有效性检查不通过,输出相应的行项目和错误信息。 2.数据有效性检查通过,按ALV格式输出 (屏幕2), 如果是测试运行,生成销售订单按钮不可用。 3.点全选按钮,选中数据行,再点生成销售订单按钮, 系统批量创建订单, 一张客户订单号码生成一张销售订单, 创建完毕后输出创建的SAP销售订单号码。 创建销售订单的时候: 销售渠道默认为: 40 产品组 默认为: 10 如果在输入数据中没有客户编号:按销售组织,销售渠道,产品组从KNVV里找默认的零售的 客户代码作为客户代码,地址以客户导入的地址为准。 4.下载输出的的数据。 1.确认导入格式, 那些字段,字段对应的表 2.ALV要显示哪些信息 3.创建SO 参数 你现在出去吗, 我过去问下你,
二、实现
*********************************************************************** * Title : ZDQT005 * * Application : DQ * * Subject : 销售订单批量导入 * * Requested by : 黄青桂 * * Execution : Online when required * * Ref no: : DQ-049 * * Author : CX * * Req Date : 20140928 * *********************************************************************** * 销售订单导入 * *********************************************************************** * 设计主要逻辑与原理说明 * *********************************************************************** *1.上载数据:用户通过EXCEL上载数据到系统, * *2.数据有效性检查,ALV格式输出,有效性检查有问题在ALV错误原因列 * * 显示, * *3.(屏幕2), * * (1)如果测试运行,则生产销售订单按钮不可用,导入过程做有效性检查, * * 并对ok的POS单号test创建SO * * (2)如果是正式运行,生成销售订单按钮可用,点击按钮, * * 系统批量创建订单,根据一张客户订单号码生成一张销售订单,创建完毕后 * * 输出创建的SAP销售订单号码。 * * * *4(补充).这个程序只考虑零售客户, * *********************************************************************** *********************************************************************** * MODIFICATIONS (latest entry at the top) * * ------------------------------------------------------------------- * * REL DATE NAME (COMPANY) DESCRIPTION TASK-NO * * --- ---- ---- --------- ----------- ------- * * 001 * *********************************************************************** REPORT ZDQT005 NO STANDARD PAGE HEADING MESSAGE-ID Z_DQ1. *&---------------------------------------------------------------------* *& 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(1), ICON TYPE C, "图标 SEL TYPE C, LIN(08) TYPE N, " LIKE SY-TABIX, REASON(500), 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(1), ICON TYPE C, "图标 REASON(500), 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(80). 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 0 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-001. 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-002. PARAMETERS:P_TEST RADIOBUTTON GROUP RAD1 DEFAULT 'X', P_EXCUTE RADIOBUTTON GROUP RAD1. SELECTION-SCREEN FUNCTION KEY 1. SELECTION-SCREEN : END OF BLOCK B2. *&------------------------------------------------------------------* *& INITIALIZATION *&------------------------------------------------------------------* INITIALIZATION. *&初始化 PERFORM FRM_INIT_FILED. 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. *&------------------------------------------------------------------* *& AT SELECTION-SCREEN *&------------------------------------------------------------------* AT SELECTION-SCREEN. *&权限检查: PERFORM FRM_CHECK_AUTHOR. *&excel 模板处理 PERFORM FRM_DOWN_EXCEL. *&------------------------------------------------------------------* *& START-OF-SELECTION *&------------------------------------------------------------------* START-OF-SELECTION. *&获取上载数据: PERFORM FRM_GET_DATA. *&测试运行BAPI test IF P_TEST EQ 'X'. PERFORM FRM_TEST_CHECK. ENDIF. *&显示导入信息 PERFORM FRM_ALV_OUT. *&------------------------------------------------------------------* *& END-OF-SELECTION *&------------------------------------------------------------------* END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form FRM_INIT_FILED *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_INIT_FILED . SSCRFIELDS-FUNCTXT_01 = '下载EXCEL模板'. C_ECOL = 16. G_FILE = 'ZDQT005'. G_NAME = '\电器采销售订单导入模板.XLS'. ENDFORM. " FRM_INIT_FILED *&---------------------------------------------------------------------* *& 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 E003 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 = 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. *&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 = 1. WA_UP-REASON = '客户订单号码必输!'. ELSE. SELECT SINGLE * FROM VBAK WHERE BSTNK = WA_UP-BSTNK. IF SY-SUBRC = 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. 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 = 1. 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 = 1. CONCATENATE '订单类型必输!' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&订单类型检查 SELECT SINGLE * FROM TVAK WHERE AUART = WA_UP-AUART. IF SY-SUBRC NE 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. CONCATENATE '销售组织必输!' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&销售组织检查 SELECT SINGLE * FROM TVKO WHERE VKORG = WA_UP-VKORG. IF SY-SUBRC NE 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. CONCATENATE '销售部门必输!' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&销售部门检查 SELECT SINGLE * FROM TVBUR WHERE VKBUR = WA_UP-VKBUR. IF SY-SUBRC NE 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. CONCATENATE '商品编码必输!' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&商品检查 SELECT SINGLE * FROM MARA WHERE MATNR = WA_UP-MATNR. IF SY-SUBRC NE 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. 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 = 1. CONCATENATE '数量包含无效字符' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&数量检查 IF WA_UP-KWMENG <= 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. 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 = 1. 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 = 1. 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 = 1. CONCATENATE '交货日期必输!' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&日期栏位格式检查 CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY' EXPORTING DATE = WA_UP-VDATU EXCEPTIONS PLAUSIBILITY_CHECK_FAILED = 1 OTHERS = 2. IF SY-SUBRC <> 0. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. 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 = 1. CONCATENATE '发货地点必输!' ' /' WA_UP-REASON INTO WA_UP-REASON. ELSE. *&地点检查 SELECT SINGLE * FROM T001W WHERE WERKS = WA_UP-WERKS. IF SY-SUBRC = 0. ELSE. WA_UP-FLAG = 'E'. WA_UP-ICON = 1. CONCATENATE '地点不存在' ' /' WA_UP-REASON INTO WA_UP-REASON. ENDIF. ENDIF. *&S3.1产品组 默认为: 10 WA_UP-SPART = 10. *&S3.2销售渠道默认为: 40 WA_UP-VTWEG = 40. *&----------------------------- *&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 0. MESSAGE E001 WITH '没有任何数据!'. ELSE. MESSAGE S003 WITH '导入数据' G_LIN '条!'. ENDIF. ENDFORM. " FRM_GET_DATA *&---------------------------------------------------------------------* *& Form FRM_ALV_OUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_ALV_OUT . DATA: LV_COL TYPE I. DATA: LV_LINES TYPE I. DATA: LV_GRID_TITLE TYPE LVC_TITLE. DEFINE MAR_ADD_FIELDCAT0. CLEAR WA_FIELDCAT. LV_COL = LV_COL + 1. WA_FIELDCAT-FIELDNAME = &1. WA_FIELDCAT-SELTEXT_L = &2. WA_FIELDCAT-COL_POS = LV_COL. WA_FIELDCAT-KEY = &3. WA_FIELDCAT-JUST = &4. WA_FIELDCAT-OUTPUTLEN = &5. WA_FIELDCAT-NO_OUT = &6. WA_FIELDCAT-EDIT = &7. WA_FIELDCAT-NO_ZERO = &8. WA_FIELDCAT-EMPHASIZE = &9. *WA_FIELDCAT-DO_SUM = &8. *WA_FIELDCAT-NO_ZERO = &9. *WA_FIELDCAT-EDIT_MASK = &10. *WA_FIELDCAT-EMPHASIZE = &10. APPEND WA_FIELDCAT TO GT_FIELDCAT. END-OF-DEFINITION. *&设定输出格式: CLEAR GS_LAYOUT. MOVE: 'X' TO GS_LAYOUT-ZEBRA, 'X' TO GS_LAYOUT-COLWIDTH_OPTIMIZE, 'X' TO GS_LAYOUT-DETAIL_POPUP. GS_LAYOUT-BOX_FIELDNAME = 'SEL'. GS_LAYOUT-LIGHTS_FIELDNAME = 'ICON'. GS_LAYOUT-INFO_FIELDNAME = 'ROWCOLOR'. CLEAR:WA_FIELDCAT,GT_FIELDCAT[]. MAR_ADD_FIELDCAT0 : 'BSTNK' '客户订单号码' 'X' '' '10' '' '' '' 'C110' , 'KUNNR' '客户代码' '' '' '10' '' '' '' '' , 'NAME1' '客户名称' '' '' '' '' '' '' '', 'STREET' '送货地址' '' '' '' '' '' '' '' , 'AUART' '订单类型' '' '' '' '' '' '' '' , 'VKORG' '销售组织' '' '' '' '' '' '' '' , 'VKBUR' '销售部门' '' '' '' '' '' '' '' , 'MATNR' '商品编码' '' '' '18' '' '' 'X' '' , 'MAKTX' '商品名称' '' '' '' '' '' '' '' , 'KWMENG' '销售数量' '' '' '' '' '' '' '' , 'VRKME' '销售单位' '' '' '' '' '' '' '' , 'KBETR' '单价' '' '' '' '' '' '' '' , 'WAERK' '币种' '' '' '' '' '' '' '' , 'KMEIN' '价格单位' '' '' '' '' '' '' '' , 'VDATU' '交货日期' '' '' '' '' '' '' '' , 'WERKS' '发货地点' '' '' '' '' '' '' '' , 'FLAG' '状态' '' '' '' '' '' '' 'C311' , 'VBELN' '销售订单' '' '' '' '' '' '' '', 'REASON' '状态说明' '' '' '' '' '' '' '' . * 'LINE' '序号' '' '' '10' '' '' '' '' , * LV_LINES = LINES( GT_EKKO[] ). * MESSAGE S013 WITH '符合检索条件的数据有:' LV_LINES '条'. *&调用ALV函数输出: CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = SY-CPROG I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' "设定菜单栏 I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "设定对应菜单项及相应事件功能:如双击、保存等 IS_LAYOUT = GS_LAYOUT "输出布局设置 IT_FIELDCAT = GT_FIELDCAT "输出字段列信息内表 I_SAVE = 'A' TABLES T_OUTTAB = GT_UP. "需显示的数据内表 ENDFORM. " FRM_ALV_OUT *&--------------------------------------------------------------------* *& 界面功能按钮的定义 *&--------------------------------------------------------------------* FORM SET_PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB. DATA: FCODE TYPE TABLE OF SY-UCOMM. IF P_TEST EQ 'X'. APPEND 'CSO' TO FCODE. SET PF-STATUS '0100' EXCLUDING FCODE. ELSE. SET PF-STATUS '0100'. ENDIF. ENDFORM. "set_pf_status *&---------------------------------------------------------------------* *& FORM USER_COMMAND *&---------------------------------------------------------------------* * 菜单项功能键触发事件 *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM USER_COMMAND USING RF_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. RS_SELFIELD-REFRESH = 'X'. CASE RF_UCOMM. WHEN '&F03' OR '&F12' OR '&F15'. LEAVE TO SCREEN 0. WHEN '&ALL'. WA_UP-SEL = 'X'. MODIFY GT_UP FROM WA_UP TRANSPORTING SEL WHERE SEL EQ ''. WHEN '&SAL'. WA_UP-SEL = ''. MODIFY GT_UP FROM WA_UP TRANSPORTING SEL WHERE SEL EQ 'X'. WHEN 'CSO'. *&CREATE SO PERFORM FRM_SO_CREATE . WHEN OTHERS. ENDCASE. ENDFORM. "USER_COMMAND *&---------------------------------------------------------------------* *& Form FRM_SO_CREATE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_SO_CREATE . *&S1.检查选中的数据是否ok * READ TABLE GT_UP INTO WA_UP WITH KEY SEL = 'X' FLAG = 'E'. * IF SY-SUBRC EQ 0. * MESSAGE E003 WITH '选中的数据还存在错误,请先检查!'. * STOP. * ENDIF. CLEAR:R_BSTNK[]. *&S2.据选择获取待创建的订单编号 LOOP AT GT_UP INTO WA_UP WHERE SEL EQ 'X' AND REASON EQ ''. R_BSTNK-SIGN = 'I'. R_BSTNK-OPTION = 'EQ'. R_BSTNK-LOW = WA_UP-BSTNK. COLLECT R_BSTNK. CLEAR R_BSTNK. ENDLOOP. IF R_BSTNK[] IS INITIAL. MESSAGE E003 WITH '请选择可操作的数据!'. STOP. ELSE. *CLEAR:GT_HEAD[]. GT_HEAD[] = GT_HA[]. DELETE GT_HEAD WHERE BSTNK NOT IN R_BSTNK. ENDIF. *&S3.检查选中的客户订单项目是否全ok LOOP AT GT_HEAD INTO WA_HEAD. READ TABLE GT_UP INTO WA_UP WITH KEY BSTNK = WA_HEAD-BSTNK FLAG = 'E'. IF SY-SUBRC EQ 0. MESSAGE E003 WITH '客户订单' WA_HEAD-BSTNK '还存在错误项目!'. STOP. ENDIF. ENDLOOP. *&S4.根据订单抬头数据create so. PERFORM FRM_FOR_SO. *&返回信息显示明细 LOOP AT GT_HEAD INTO WA_HEAD. 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. *AND WERKS = WA_HEAD-WERKS. *G_LIN = G_LIN + 1. 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 VBELN FLAG ICON REASON. ENDLOOP. ENDLOOP. *&S5.刷新ALV,显示创建结果, *&1)成功 ICON GREEN,显示so num *&2)失败 ICON RED, 显示bapi返回信息 PERFORM FRM_ALV_OUT. ENDFORM. " FRM_SO_CREATE *&---------------------------------------------------------------------* *& Form FRM_LOG_PROC *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_LOG_PROC . ENDFORM. " FRM_LOG_PROC *&---------------------------------------------------------------------* *& 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 '000010'. 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 0. *&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 / 10."价格 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[]. *BREAK CXIANG. *&test 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 0. IF P_EXCUTE EQ 'X'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. WA_HEAD-ICON = 3. ENDIF. G_SLIN = G_SLIN + 1. 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 + 1. IF P_EXCUTE EQ 'X'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF. WA_HEAD-FLAG = 'E'. WA_HEAD-ICON = 1. 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 *&---------------------------------------------------------------------* *& Form FRM_FOR_SO *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_FOR_SO . DATA:BEGIN OF LT_BSTNR OCCURS 0, 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_TEST_CHECK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM FRM_TEST_CHECK . *&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_CHECK
post SAP-Garson
原文链接:https://www.cnblogs.com/rainysblog/p/4153826.html文章来自于网络,如果侵犯了您的权益,请联系站长删除!