SEPCERP试点阶段技术书MMZMMF0006 现场移交单V1.docx
《SEPCERP试点阶段技术书MMZMMF0006 现场移交单V1.docx》由会员分享,可在线阅读,更多相关《SEPCERP试点阶段技术书MMZMMF0006 现场移交单V1.docx(15页珍藏版)》请在冰豆网上搜索。
SEPCERP试点阶段技术书MMZMMF0006现场移交单V1
四川省电力公司
企业资源管理(ERP)系统实施项目
技术设计说明书
第一部分:
基本信息
(生成新的版本后,以下内容要相应改动)
开发类型
增强接口单据报表
技术工具
EnhancementUserExitBAdI
DialogInteractivelist
ABAPOOFunctiongroup
RFCBAPIfunctionExecutiveProgram
BDCTableContentsModification
ServerfileLocalfile
SAPScriptSmartformsOutput-onlyList
模块
MM
开发机及集团
110
事务代码
ZMMF0006
程序ID
ZMMF0006
程序名称
现场移交单
功能设计者
朱大力
技术设计者
侯佳男
ABAP程序员
侯佳男
第二部分:
设计书维护记录
更新日期
更新人员
简要说明
2009-8-26
侯佳男
新建
第三部分:
技术方案描述
3.1业务需求描述
在仓库交接货物时,交接双方在打印单上签字;在配送货物到现场时,在事先打印好的移交单上签字确认。
3.2技术解决方案
1.根据选择画面的输入,从表PROJ,PRPS,EKKN,EKKO,EKPO,MAKT或预留表RESB中抽取开箱检验单等主数据,
通过ALV显示符合条件的数据清单,并将用户选择的清单行项目利用SmartForm查看打印预览或直接打印。
2.权限检查:
工厂权限对象:
M_BEST_EKO;字段:
EKORG
如果无上述权限,显示取消该条目。
3.3系统简单架构图
如果抽到数据为空或无权限
如果非空
Y/N
调用SmartForm失败
调用SmartForm成功
第四部分:
程序逻辑描述—将主要代码功能描述清楚,
1.输入TCODE:
ZMMF0006,出现如下屏幕
2.根据选择画面的输入,从表PROJ,PRPS,EKKN,EKKO,EKPO,MAKT或预留表RESB中抽取开箱检验单等主数据,通过ALV显示符合条件的数据清单,并将用户选择的清单行项目利用SmartForm查看打印预览或直接打印。
3.选择一行记录后点击详细信息按钮,调用编辑该条目的详细画面:
第五部分:
源程序----复杂性功能实现可贴主要功能代码部分
主要取数逻辑如下:
START-OF-SELECTION.
* 获取数据
PERFORM FRM_GET_DATA.
CHECK IT_DATA IS NOT INITIAL.
* 数据编辑
PERFORM FRM_EDIT_DATA.
END-OF-SELECTION.
CHECK IT_OUT IS NOT INITIAL.
* ALV展现及其打印
PERFORM FRM_DISPLAY_DATA.
*&---------------------------------------------------------------------*
*& Form FRM_INITIAL
*&---------------------------------------------------------------------*
* 初始化
*----------------------------------------------------------------------*
FORM FRM_INITIAL.
W_REPID = SY-REPID.
WA_OUT1-NO = 1.
WA_OUT2-NO = 2.
WA_OUT3-NO = 3.
WA_OUT4-NO = 4.
ENDFORM. " FRM_INITIAL
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
RW_BSART-SIGN = 'I'.
RW_BSART-OPTION = 'EQ'.
RW_BSART-LOW = 'ZM09'.
APPEND RW_BSART TO R_BSART.
RW_BSART-SIGN = 'I'.
RW_BSART-OPTION = 'BT'.
RW_BSART-LOW = 'ZM01'.
RW_BSART-HIGH = 'ZM07'.
APPEND RW_BSART TO R_BSART.
IF S_RSNUM-LOW IS INITIAL
AND S_RSNUM-HIGH IS INITIAL.
* 根据条件收索数据
IF P_EKORG IS NOT INITIAL.
SELECT PROJ~PSPID "项目定义
PROJ~PSPNR "项目定义 (内部)
PROJ~POST1 "PS:
短描述 (第一行文本)
PRPS~PSPHI "合适的项目的当前编号
EKKN~EBELN "采购凭证号
EKKN~EBELP "采购凭证的项目编号
EKPO~MENGE "数量
EKPO~MEINS "单位
EKPO~MATNR "物料号
EKKO~LIFNR "供应商帐户号
EKKO~EKORG "采购组织
LFA1~NAME1 "供应商名称
INTO CORRESPONDING FIELDS OF TABLE IT_DATA
FROM PROJ
INNER JOIN PRPS
ON PROJ~PSPNR = PRPS~PSPHI
INNER JOIN EKKN
ON PRPS~PSPNR = EKKN~PS_PSP_PNR
INNER JOIN EKPO
ON EKPO~EBELN = EKKN~EBELN
AND EKPO~EBELP = EKKN~EBELP
INNER JOIN EKKO
ON EKPO~EBELN = EKKO~EBELN
INNER JOIN LFA1
ON EKKO~LIFNR = LFA1~LIFNR
WHERE EKPO~LOEKZ <> 'L'
AND EKKO~FRGRL = ''
AND EKKO~EKORG = P_EKORG
AND EKKO~MEMORY <> 'X'
AND EKKO~EBELN IN S_EBELN
AND PROJ~PSPID IN S_PSPID "项目编码
AND EKPO~MATNR IN S_MATNR "物料编码
AND EKKO~BSART IN R_BSART. "采购凭证类型
ELSE.
SELECT PROJ~PSPID "项目定义
PROJ~PSPNR "项目定义 (内部)
PROJ~POST1 "PS:
短描述 (第一行文本)
PRPS~PSPHI "合适的项目的当前编号
EKKN~EBELN "采购凭证号
EKKN~EBELP "采购凭证的项目编号
EKPO~MENGE "数量
EKPO~MEINS "单位
EKPO~MATNR "物料号
EKKO~LIFNR "供应商帐户号
EKKO~EKORG "采购组织
LFA1~NAME1 "供应商名称
INTO CORRESPONDING FIELDS OF TABLE IT_DATA
FROM PROJ
INNER JOIN PRPS
ON PROJ~PSPNR = PRPS~PSPHI
INNER JOIN EKKN
ON PRPS~PSPNR = EKKN~PS_PSP_PNR
INNER JOIN EKPO
ON EKPO~EBELN = EKKN~EBELN
AND EKPO~EBELP = EKKN~EBELP
INNER JOIN EKKO
ON EKPO~EBELN = EKKO~EBELN
INNER JOIN LFA1
ON EKKO~LIFNR = LFA1~LIFNR
WHERE EKPO~LOEKZ <> 'L'
AND EKKO~FRGRL = ''
AND EKKO~MEMORY <> 'X'
AND EKKO~EBELN IN S_EBELN
AND PROJ~PSPID IN S_PSPID "项目编码
AND EKPO~MATNR IN S_MATNR "物料编码
AND EKKO~BSART IN R_BSART. "采购凭证类型
ENDIF.
IF S_PSPID-LOW IS INITIAL
AND S_PSPID-HIGH IS INITIAL.
IF P_EKORG IS NOT INITIAL.
SELECT EKPO~EBELN "采购凭证号
EKPO~EBELP "采购凭证的项目编号
EKPO~MENGE "数量
EKPO~MEINS "单位
EKPO~MATNR "物料号
EKKO~LIFNR "供应商帐户号
EKKO~EKORG "采购组织
LFA1~NAME1 "供应商名称
INTO CORRESPONDING FIELDS OF TABLE IT_DATA1
FROM EKPO
INNER JOIN EKKO
ON EKPO~EBELN = EKKO~EBELN
INNER JOIN LFA1
ON EKKO~LIFNR = LFA1~LIFNR
WHERE EKPO~LOEKZ <> 'L'
AND EKKO~FRGRL = ''
AND EKKO~MEMORY <> 'X'
AND EKKO~EKORG = P_EKORG
AND EKKO~EBELN IN S_EBELN
AND EKPO~MATNR IN S_MATNR "物料编码
AND EKKO~BSART IN R_BSART. "采购凭证类型
ELSE.
SELECT EKPO~EBELN "采购凭证号
EKPO~EBELP "采购凭证的项目编号
EKPO~MENGE "数量
EKPO~MEINS "单位
EKPO~MATNR "物料号
EKKO~LIFNR "供应商帐户号
EKKO~EKORG "采购组织
LFA1~NAME1 "供应商名称
INTO CORRESPONDING FIELDS OF TABLE IT_DATA1
FROM EKPO
INNER JOIN EKKO
ON EKPO~EBELN = EKKO~EBELN
INNER JOIN LFA1
ON EKKO~LIFNR = LFA1~LIFNR
WHERE EKPO~LOEKZ <> 'L'
AND EKKO~FRGRL = ''
AND EKKO~MEMORY <> 'X'
AND EKKO~EBELN IN S_EBELN
AND EKPO~MATNR IN S_MATNR "物料编码
AND EKKO~BSART IN R_BSART. "采购凭证类型
ENDIF.
LOOP AT IT_DATA1 INTO WA_DATA1.
READ TABLE IT_DATA INTO WA_DATA WITH KEY EBELN = WA_DATA1-EBELN
EBELP = WA_DATA1-EBELP.
IF SY-SUBRC = 0.
CONTINUE.
ELSE.
APPEND WA_DATA1 TO IT_DATA.
ENDIF.
ENDLOOP.
ENDIF.
IF IT_DATA IS INITIAL.
MESSAGE S000(ZMM01) WITH '没有找到相应的数据,请重新输入'.
EXIT.
ENDIF.
ELSE.
SELECT PSPEL
AUFNR
SOBKZ
MATNR
INTO TABLE IT_RESB
FROM RESB
WHERE RSNUM IN S_RSNUM.
IF SY-SUBRC <> 0.
MESSAGE S000(ZMM01) WITH '没有找到相应的数据,请重新输入'.
EXIT.
ENDIF.
SELECT PRPS~PSPNR "WBS 要素
PROJ~PSPID "项目编号
PROJ~POST1 "短描述 (第一行文本)
INTO TABLE IT_PRPS
FROM PRPS
INNER JOIN PROJ
ON PRPS~PSPHI = PROJ~PSPNR
FOR ALL ENTRIES IN IT_RESB
WHERE PRPS~PSPNR = IT_RESB-PSPEL.
SELECT AUFNR "订单号
KTEXT "工单描述
INTO TABLE IT_AUFK
FROM AUFK
FOR ALL ENTRIES IN IT_RESB
WHERE AUFNR = IT_RESB-AUFNR.
LOOP AT IT_RESB INTO WA_RESB.
WA_DATA-MATNR = WA_RESB-MATNR.
IF WA_RESB-SOBKZ = 'Q'.
READ TABLE IT_PRPS INTO WA_PRPS WITH KEY PSPNR = WA_RESB-PSPEL.
IF SY-SUBRC = 0.
WA_DATA-PSPID = WA_PRPS-PSPID.
WA_DATA-POST1 = WA_PRPS-POST1.
ENDIF.
ELSEIF WA_RESB-SOBKZ = ''.
READ TABLE IT_AUFK INTO WA_AUFK WITH KEY AUFNR = WA_RESB-AUFNR.
IF SY-SUBRC = 0.
WA_DATA-PSPID = WA_AUFK-AUFNR.
WA_DATA-POST1 = WA_AUFK-KTEXT.
ENDIF.
ENDIF.
APPEND WA_DATA TO IT_DATA.
ENDLOOP.
ENDIF.
* 查找物料说明
SELECT MATNR "项目编码
MAKTX "物料说明
INTO CORRESPONDING FIELDS OF TABLE IT_MAKT
FROM MAKT
FOR ALL ENTRIES IN IT_DATA
WHERE MATNR = IT_DATA-MATNR
AND SPRAS = SY-LANGU.
* 单位
SELECT EKPO~MATNR
EKPO~MEINS
T006A~MSEHI
T006A~SPRAS
T006A~MSEHL
INTO TABLE IT_MEINS
FROM EKPO
INNER JOIN T006A ON
EKPO~MEINS = T006A~MSEHI
FOR ALL ENTRIES IN IT_DATA
WHERE MATNR = IT_DATA-MATNR.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_EDIT_DATA
*&---------------------------------------------------------------------*
* 数据编辑
*-------------------------