【成都】增强使用总结

来源:互联网 发布:python subprocess 编辑:程序博客网 时间:2024/04/30 13:12


PPCO0007 保存生产订单时退出

*&---------------------------------------------------------------------**&  包含                ZXCO1U06*&---------------------------------------------------------------------**&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------**& 申请人:徐文*& 创 建 者:张晨宇*& 创建时间:2015.03.06*& 请 求 号: DEVK900084*& 程序说明:*& 用于指定生产订单增强,以控制生产订单定额变更权限,没有计划价格不允许下达,*& 创建生产订单时必须录入对应的公司间采购订单。*&*&---------------------------------------------------------------------**& 修改日志*&  修改日期     修改者    请求号            描述*&---------------------------------------------------------------------**IF sy-uname = 'HANDZCY'.*  BREAK-POINT.  "校验*---------------------------------增强1---------------------------------------**  增强 一 :没有计划价格不允许下达生产订单*  在生产订单下达时(涉及T-Code:CO01、CO02、CO40、COHV,可能的增强PPCO0021),*  根据“物料号 = MBEW-MATNR”和“工厂 = MBEW - BWKEY”找到“MBEW-STPRS 标准价”判断其是否大于零,*  如果不大于零则不允许下达生产订单,并报错:*  “物料号[MBEW-MATNR]在工厂[MBEW-BWKEY]下尚未维护标准价,不允许生产,请联系财务部门”  TYPES:BEGIN OF ty_mbew,          matnr TYPE mbew-matnr,          bwkey TYPE mbew-bwkey,          stprs TYPE mbew-stprs,        END OF ty_mbew.  DATA gw_mbew TYPE ty_mbew.  DATA gv_string TYPE string.  FIELD-SYMBOLS: <fs_afpo>.  CONSTANTS: lc_afpo(19) TYPE c VALUE '(SAPLCOB1)AFPO_BT[]'.  ASSIGN (lc_afpo) TO <fs_afpo>.  CHECK sy-subrc EQ 0.  DATA zebeln TYPE ebeln.  DATA zebelp TYPE ebelp.  IMPORT zebeln  FROM MEMORY  ID 'ZEBELN'.  IMPORT zebelp  FROM MEMORY  ID 'ZEBELP'.  SELECT SINGLE    matnr    bwkey    stprs   FROM mbew INTO gw_mbew WHERE matnr = header_imp-matnr AND bwkey = header_imp-werks.  IF sy-subrc NE 0 OR gw_mbew-stprs <= 0.    SEARCH header_imp-sttxt FOR 'REL'.    IF sy-subrc = 0.      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        EXPORTING          input  = gw_mbew-matnr        IMPORTING          output = gw_mbew-matnr.      CONCATENATE '物料号' gw_mbew-matnr '在工厂' header_imp-werks '下尚未维护标准价,不允许生产,请联系财务部门' INTO gv_string.      MESSAGE gv_string TYPE  'S' DISPLAY LIKE 'E'.      LEAVE TO SCREEN sy-dynnr.    ENDIF.  ENDIF.  CLEAR gv_string.  CLEAR gw_mbew.*---------------------------------增强1---------------------------------------**---------------------------------增强2---------------------------------------**增强 二 :针对生产订单做字段增强(公司间采购订单),并确保其被录*1.在T-Code:CO01、CO02、CO40中,订单类型AUFK-AUART:NF11~NF16、NF21~NF26、NF31~NF36,保存前校验“AFPO-ABLAD卸货点”和“AFPO-WEMPF收货方”,如果存在空值则不允许保存,并报错“尚未输入采购订单号”;*2.如果都不为空,继续校验是否存在“AFPO-ABLAD卸货点 = EKPO-EBELN采购凭证”和“AFPO-WEMPF收货方 = EKPO–EBELP行项目”,且“EKPO-LOEKZ删除标识”不等于“L”,且“EKKO-FRGZU审批状态 = X”的项目,如果不存在则报错“该采购订单行不存在或未被审批,请重新输入”;*3.如果存在,则继续校验“EKKO-BSART采购凭证类型”是否等于ZP12,如果不是则报错“该采购订单类型不符合要求,请重新输入”;*4.如果是则判断“EKPO-MATNR物料号”是否等于“AFPO-MATNR物料号”,如果是则转至第6步;*5.如果不是则检查“AFPO-MATNR物料号”是否包含在“EKPO-MATNR物料号”的BOM中(EKPO-MATNR物料号 = MAST-MATNR物料号,AUFK-WERKS工厂 = MAST- WERKS工厂),如果是则转至第6步,如果不是则报错“采购订单行物料与生产订单物料不对应”;*6.判断“EKPO-ELIKZ交货已完成”是否等于“X”,如果是则报错“该公司间采购订单行已交货完成不允许再分配生产订单”,如果不是,则根据采购订单号和行项目号将对应的文本写入生产订单文本中,如下图*7.修改“AFPO-ABLAD卸货点”描述为“公司间采购订单”和“AFPO-WEMPF收货方”描述为“行项目”,如果不能则在AFPO表中增强两个字段,在屏幕上显示以替换以上两个字段。*---------------------------------增强2---------------------------------------*  DATA :lv_errflag TYPE c.  DATA :lv_ebeln TYPE ekpo-ebeln.  DATA :lv_ebelp TYPE ekpo-ebelp.  DATA :lt_afpo_bt TYPE STANDARD TABLE OF afpob,        lw_afpo_bt LIKE LINE OF lt_afpo_bt.  DATA :lt_ekpo TYPE STANDARD TABLE OF ekpo,        lt_ekko TYPE STANDARD TABLE OF ekko,        lw_ekpo TYPE ekpo,        lw_ekko TYPE ekko.  DATA :lw_mast TYPE mast.  DATA: lt_stpo TYPE STANDARD TABLE OF stpo.  DATA: lw_stpo TYPE stpo.  CLEAR lt_afpo_bt.  CLEAR lw_afpo_bt.  CLEAR lv_errflag.  lt_afpo_bt = <fs_afpo>.  READ TABLE lt_afpo_bt INTO lw_afpo_bt INDEX 1.   CASE header_imp-auart.    WHEN 'NF11'.lv_errflag = '1'.    WHEN 'NF12'.lv_errflag = '1'.    WHEN 'NF13'.lv_errflag = '1'.    WHEN 'NF14'.lv_errflag = '1'.    WHEN 'NF15'.lv_errflag = '1'.    WHEN 'NF16'.lv_errflag = '1'.    WHEN 'NF21'.lv_errflag = '1'.    WHEN 'NF22'.lv_errflag = '1'.    WHEN 'NF23'.lv_errflag = '1'.    WHEN 'NF24'.lv_errflag = '1'.    WHEN 'NF25'.lv_errflag = '1'.    WHEN 'NF26'.lv_errflag = '1'.    WHEN 'NF31'.lv_errflag = '1'.    WHEN 'NF32'.lv_errflag = '1'.    WHEN 'NF33'.lv_errflag = '1'.    WHEN 'NF34'.lv_errflag = '1'.    WHEN 'NF35'.lv_errflag = '1'.    WHEN 'NF36'.lv_errflag = '1'.    WHEN OTHERS.  ENDCASE.  IF lv_errflag = '1'.    CLEAR lv_ebeln.    CLEAR lv_ebelp.    IF zebeln IS INITIAL OR zebelp IS INITIAL.      MESSAGE '尚未输入采购订单号' TYPE  'S' DISPLAY LIKE 'E'.      LEAVE TO SCREEN sy-dynnr.    ELSE.      lv_ebeln = zebeln.      lv_ebelp = zebelp.      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'        EXPORTING          input  = lv_ebeln        IMPORTING          output = lv_ebeln.      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'        EXPORTING          input  = lv_ebelp        IMPORTING          output = lv_ebelp.      SELECT SINGLE * FROM ekpo INTO lw_ekpo WHERE ebeln = lv_ebeln AND ebelp = lv_ebelp AND loekz NE 'L' .      IF sy-subrc = 0.        SELECT SINGLE * FROM ekko INTO lw_ekko WHERE ebeln = lv_ebeln AND frgzu = 'X'.        IF sy-subrc = 0.          IF lw_ekko-bsart = 'ZP12'."3.如果存在,则继续校验“EKKO-BSART采购凭证类型”是否等于ZP12,如果不是则报错“该采购订单类型不符合要求,请重新输入”;            IF lw_ekpo-matnr = lw_afpo_bt-matnr."4.如果是则判断“EKPO-MATNR物料号”是否等于“AFPO-MATNR物料号”,如果是则转至第6步;                "6.判断“EKPO-ELIKZ交货已完成”是否等于“X”,如果是则报错“该公司间采购订单行已交货完成不允许再分配生产订单”,如果不是,则根据采购订单号和行项目号将对应的文本写入生产订单文本中                    IF lw_ekpo-elikz = 'X'.                      MESSAGE '该公司间采购订单行已交货完成不允许再分配生产订单' TYPE  'S' DISPLAY LIKE 'E'.                      LEAVE TO SCREEN sy-dynnr.                    ENDIF.            ELSE.              SELECT SINGLE * FROM mast INTO lw_mast WHERE matnr = lw_ekpo-matnr AND werks = header_imp-werks AND stlan = '1'.              IF sy-subrc = 0.                SELECT * FROM stpo INTO CORRESPONDING FIELDS OF TABLE lt_stpo WHERE stlnr = lw_mast-stlnr.                IF sy-subrc = 0.                  READ TABLE lt_stpo INTO lw_stpo WITH KEY  idnrk = lw_afpo_bt-matnr.                  IF sy-subrc = 0.                    "6.判断“EKPO-ELIKZ交货已完成”是否等于“X”,如果是则报错“该公司间采购订单行已交货完成不允许再分配生产订单”,如果不是,则根据采购订单号和行项目号将对应的文本写入生产订单文本中                    IF lw_ekpo-elikz = 'X'.                      MESSAGE '该公司间采购订单行已交货完成不允许再分配生产订单' TYPE  'S' DISPLAY LIKE 'E'.                      LEAVE TO SCREEN sy-dynnr.                    ENDIF.                  ELSE.                    MESSAGE '采购订单行物料与生产订单物料不对应' TYPE  'S' DISPLAY LIKE 'E'.                    LEAVE TO SCREEN sy-dynnr.                  ENDIF.                ELSE.                  MESSAGE '采购订单行物料与生产订单物料不对应' TYPE  'S' DISPLAY LIKE 'E'.                  LEAVE TO SCREEN sy-dynnr.                ENDIF.              ELSE.                MESSAGE '采购订单行物料与生产订单物料不对应' TYPE  'S' DISPLAY LIKE 'E'.                LEAVE TO SCREEN sy-dynnr.              ENDIF.            ENDIF.            "根据采购订单号和行项目号将对应的文本写入生产订单文本中            DATA lv_name LIKE  thead-tdname.            DATA lt_data TYPE STANDARD TABLE OF tline.            DATA header LIKE thead.            CLEAR lv_name.            CONCATENATE lv_ebeln lv_ebelp INTO lv_name.            CALL FUNCTION 'READ_TEXT'   " 抬头备注              EXPORTING                client                  = sy-mandt                language                = '1'                id                      = 'F01'                name                    = lv_name                object                  = 'EKPO'              TABLES                lines                   = lt_data        " LIKE TLINE              EXCEPTIONS                id                      = 1                language                = 2                name                    = 3                not_found               = 4                object                  = 5                referenc_check          = 6                wrong_access_to_archive = 7                OTHERS                  = 8.            IF sy-subrc = 0.              header-tdobject = 'AUFK'.              CONCATENATE sy-mandt header_imp-aufnr INTO lv_name.              header-tdname = lv_name .              header-tdid = 'KOPF'.              header-tdspras  = sy-langu.              CALL FUNCTION 'SAVE_TEXT'                EXPORTING                  header = header                TABLES                  lines  = lt_data.              header_exp = header_imp.              header_exp-ltext = sy-langu.              CALL FUNCTION 'COMMIT_TEXT'                EXPORTING                  object   = 'AUFK'                  name     = lv_name                  id       = 'KOPF'                  language = '*'.            ELSE.              MESSAGE '读取采购订单长文本失败' TYPE  'S' DISPLAY LIKE 'E'.            ENDIF.          ELSE.            MESSAGE '该采购订单类型不符合要求,请重新输入' TYPE  'S' DISPLAY LIKE 'E'.            LEAVE TO SCREEN sy-dynnr.          ENDIF.        ELSE.          MESSAGE '该采购订单行不存在或未被审批,请重新输入' TYPE  'S' DISPLAY LIKE 'E'.          LEAVE TO SCREEN sy-dynnr.        ENDIF.      ELSE.        MESSAGE '该采购订单行不存在或未被审批,请重新输入' TYPE  'S' DISPLAY LIKE 'E'.        LEAVE TO SCREEN sy-dynnr.      ENDIF.    ENDIF.  ENDIF.*---------------------------------增强2---------------------------------------**ENDIF.


PPCO0012 生产订单:显示/更改订单抬头数据




写表出口:

DATA ZEBELN TYPE EBELN.DATA ZEBELP TYPE EBELP.IMport ZEBELN  FROM MEMORY  id 'ZEBELN'.IMport ZEBELP  FROM MEMORY  id 'ZEBELP'.  E_COCI_AUFK-ZZEBELN = ZEBELN.  E_COCI_AUFK-ZZEBELP = ZEBELP.

创建结构:CI_AUFK,该结构对应写表出口中E_COCI_AUFK结构,会自动保存进表AUFK中

 


屏幕PBO:

MODULE status_0100 OUTPUT.*  IF sy-uname = 'HANDZCY'.  DATA zebeln TYPE ebeln.  DATA zebelp TYPE ebelp.  DATA lw_aufk TYPE aufk.  DATA :lt_afpo_bt TYPE STANDARD TABLE OF afpob,        lw_afpo_bt LIKE LINE OF lt_afpo_bt.  FIELD-SYMBOLS: <fs_afpo>.  CONSTANTS: lc_afpo(19) TYPE c VALUE '(SAPLCOB1)AFPO_BT[]'.  ASSIGN (lc_afpo) TO <fs_afpo>.  lt_afpo_bt = <fs_afpo>.  READ TABLE lt_afpo_bt INTO lw_afpo_bt INDEX 1.    IMPORT zebeln  FROM MEMORY  ID 'ZEBELN'.    IMPORT zebelp  FROM MEMORY  ID 'ZEBELP'.    IF sy-subrc NE 0.      SELECT SINGLE * FROM aufk INTO lw_aufk WHERE aufnr = lw_afpo_bt-aufnr.      IF sy-subrc = 0.        zebeln = lw_aufk-zzebeln.        zebelp = lw_aufk-zzebelp.      ENDIF.    ENDIF.*  ENDIF.ENDMODULE.                 " STATUS_0100  OUTPUT


PAI

MODULE user_command_0100 INPUT.* IF SY-UNAME = 'HANDZCY'.    export ZEBELN  to memory id 'ZEBELN'.    export ZEBELP  to memory id 'ZEBELP'.* ENDIF.ENDMODULE.                 " USER_COMMAND_0100  INPUT



0 0
原创粉丝点击