创建物料批次特性详解编程语言

这是做零售的项目用到的,已经很久没用了。。。找出来记录一下:(我自己是宁愿用自建表也不用批次)

TABLE:MCH1:批量(如果批次管理多工厂)

           AUSP:特征值

           CABN:特征

           INOB:在内部编号和对象之间的链接

创建批次特性:创建物料和批次之间的关系,然后给批次创建属性

修改批次特性:查询出批次特性,然后更新

FUNCTION Z_MM000_BATCH_CREATE. 
*"---------------------------------------------------------------------- 
*"*"本地接口: 
*"  IMPORTING 
*"     REFERENCE(I_ZDJLSHC) TYPE  ZMMEDJLSHC OPTIONAL 
*"     REFERENCE(I_DJLX) TYPE  ZMMEDJLX OPTIONAL 
*"     REFERENCE(I_ZMMT0003) TYPE  ZMMT0003 
*"  TABLES 
*"      T_ZMMT0004 STRUCTURE  ZMMT0004 OPTIONAL 
*"      T_RETURN STRUCTURE  BAPIRET2 OPTIONAL 
*"---------------------------------------------------------------------- 
DATA:S_RETURN     TYPE BAPIRET2, 
S_ZMMT0004   TYPE ZMMT0004, 
LV_CHAR01(1) TYPE C. 
DATA:GT_MCH1 TYPE TABLE OF MCH1, 
GS_MCH1 TYPE          MCH1. 
"输入参数检查 
IF I_ZDJLSHC IS NOT INITIAL. 
SELECT * INTO CORRESPONDING FIELDS OF TABLE T_ZMMT0004 
FROM ZMMT0004 WHERE ZDJLSHC = I_ZDJLSHC. 
ENDIF. 
IF T_ZMMT0004[] IS INITIAL. 
S_RETURN-TYPE = 'E'. 
S_RETURN-ID = 'ZMESG'. 
S_RETURN-NUMBER = '081'. 
S_RETURN-MESSAGE_V1 = '参数缺失,或参数不正确'. 
APPEND S_RETURN TO T_RETURN. 
EXIT. 
ELSE. 
SELECT MATNR CHARG INTO CORRESPONDING FIELDS OF TABLE GT_MCH1 
FROM MCH1 FOR ALL ENTRIES IN T_ZMMT0004 
WHERE MATNR = T_ZMMT0004-ZGSKH 
AND   CHARG = T_ZMMT0004-CHARG. 
DELETE GT_MCH1 WHERE CHARG IS INITIAL. 
IF GT_MCH1[] IS NOT INITIAL. 
SORT GT_MCH1[] BY CHARG. 
ENDIF. 
PERFORM PRM_GET_FIELD_ATT."提前或许ZMMS0004结构字段 
ENDIF. 
* 检查批次特性是否被锁 
PERFORM FRM_CHECK_CL02_LOCK CHANGING LS_RETURN. 
IF LS_RETURN IS NOT INITIAL. 
APPEND LS_RETURN TO T_RETURN. 
CHECK LS_RETURN-TYPE NE 'E'. 
ENDIF. 
SELECT SINGLE ZPCSM INTO LV_CHAR01 FROM ZMMT0070 WHERE ZDJLX = I_ZMMT0003-ZDJLX. 
LOOP AT T_ZMMT0004 INTO S_ZMMT0004. 
IF S_ZMMT0004-CHARG IS INITIAL."批号存在检查 
PERFORM PRM_GENERATE_BATCH USING LV_CHAR01 CHANGING S_ZMMT0004-CHARG. 
ENDIF. 
READ TABLE GT_MCH1 INTO GS_MCH1 WITH KEY CHARG = S_ZMMT0004-CHARG BINARY SEARCH. 
IF SY-SUBRC <> 0."物料批次关联检查 
CLEAR:LS_RETURN. 
PERFORM PRM_GENERATE_MC USING S_ZMMT0004-CHARG S_ZMMT0004-ZGSKH CHANGING LS_RETURN. 
IF LS_RETURN IS NOT INITIAL. 
APPEND LS_RETURN TO T_RETURN. 
ENDIF. 
ENDIF. 
MODIFY T_ZMMT0004 FROM S_ZMMT0004."更新结果 
ENDLOOP. 
LOOP AT T_ZMMT0004 INTO S_ZMMT0004. 
CLEAR:LT_ALLOC_NUM[],LS_ALLOC_NUM,LT_ALLOC_CHAR[],LS_ALLOC_CHAR,LT_ALLOC_CURR[],LS_ALLOC_CURR,LS_RETURN. 
PERFORM PRM_SET_BATCH_ATT USING S_ZMMT0004 I_ZMMT0003 CHANGING LS_RETURN. 
IF LS_RETURN IS NOT INITIAL. 
APPEND LS_RETURN TO T_RETURN. 
ENDIF. 
ENDLOOP. 
ENDFUNCTION.
FORM FRM_CHECK_CL02_LOCK  CHANGING P_RETURN STRUCTURE BAPIRET2. 
DATA : IT_LOCKS TYPE TABLE OF SEQG3 WITH HEADER LINE, 
LV_KEYS  TYPE          SEQG3-GARG. 
CALL FUNCTION 'ENQUE_READ' 
EXPORTING 
GCLIENT = SY-MANDT 
GNAME   = 'KSSKX' 
*     GARG    = LV_KEYS 
*     GUNAME  = SY-UNAME 
TABLES 
ENQ     = IT_LOCKS. 
LOOP AT IT_LOCKS WHERE GMODE = 'E'  AND GTARG CS '023Z_CLASS_BATCH'. 
P_RETURN-TYPE = 'E'. 
P_RETURN-ID = 'ZMESG'. 
P_RETURN-NUMBER = '081'. 
P_RETURN-MESSAGE_V1 = '批次被锁定'. 
ENDLOOP. 
ENDFORM.                    " FRM_CHECK_CL02_LOCK
FORM PRM_GENERATE_BATCH  USING    P_CHAR01 
CHANGING P_CHARG. 
DATA:C_CHAR09(9) TYPE C. 
CLEAR:C_CHAR09,LV_LOCK. 
LV_LOCK = 'E'. 
WHILE LV_LOCK IS NOT INITIAL. 
CALL FUNCTION 'NUMBER_RANGE_ENQUEUE' 
EXPORTING 
OBJECT           = 'Z_R_BATCH' 
EXCEPTIONS 
FOREIGN_LOCK     = 1 
OBJECT_NOT_FOUND = 2 
SYSTEM_FAILURE   = 3 
OTHERS           = 4. 
IF SY-SUBRC = 0. 
CALL FUNCTION 'NUMBER_GET_NEXT' 
EXPORTING 
NR_RANGE_NR             = '01' 
OBJECT                  = 'Z_R_BATCH' 
IMPORTING 
NUMBER                  = C_CHAR09 
EXCEPTIONS 
INTERVAL_NOT_FOUND      = 1 
NUMBER_RANGE_NOT_INTERN = 2 
OBJECT_NOT_FOUND        = 3 
QUANTITY_IS_0           = 4 
QUANTITY_IS_NOT_1       = 5 
INTERVAL_OVERFLOW       = 6 
BUFFER_OVERFLOW         = 7 
OTHERS                  = 8. 
CALL FUNCTION 'NUMBER_RANGE_DEQUEUE' 
EXPORTING 
OBJECT           = 'Z_R_BATCH' 
EXCEPTIONS 
OBJECT_NOT_FOUND = 1 
OTHERS           = 2. 
CONCATENATE P_CHAR01 C_CHAR09 INTO P_CHARG. 
CLEAR LV_LOCK. 
ENDIF. 
ENDWHILE. 
ENDFORM.                    " PRM_GENERATE_BATCH
FORM PRM_GENERATE_MC  USING    P_S_ZMMT0004_CHARG 
P_S_ZMMT0004_ZGSKH 
CHANGING P_LS_RETURN STRUCTURE BAPIRET2. 
DATA:LV_BATCH TYPE CHARG_D. 
* Call BAPI 产生物料批次号码 
LS_BATCHCONTROLFIELDS-CLASS_NUM  = 'Z_CLASS_BATCH'. 
LS_BATCHCONTROLFIELDS-DOCLASSIFY = 'X'. 
CALL FUNCTION 'BAPI_BATCH_CREATE' 
EXPORTING 
MATERIAL           = P_S_ZMMT0004_ZGSKH 
BATCH              = P_S_ZMMT0004_CHARG 
BATCHCONTROLFIELDS = LS_BATCHCONTROLFIELDS 
IMPORTING 
BATCH              = LV_BATCH 
TABLES 
RETURN             = LT_RETURN. 
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'. 
IF SY-SUBRC = 0. 
MOVE-CORRESPONDING LS_RETURN TO P_LS_RETURN. 
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 
ELSE. 
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 
*      EXPORTING 
*        WAIT = 'X'. 
ENDIF. 
ENDFORM.                    " PRM_GENERATE_MC
FORM PRM_SET_BATCH_ATT  USING    P_ZMMS0004 STRUCTURE ZMMT0004 
P_ZMMT0003  STRUCTURE ZMMT0003 
CHANGING P_RETURN    STRUCTURE BAPIRET2. 
DATA:LS_ZMMS0004 TYPE ZMMS0004. 
CLEAR:LS_ZMMS0004. 
MOVE-CORRESPONDING P_ZMMS0004 TO LS_ZMMS0004. 
LS_ZMMS0004-ZZSPCH2 = P_ZMMS0004-ZZSPCH1. "主石批次号2 
LS_ZMMS0004-ZZSSL2 = P_ZMMS0004-ZZSSL1. "主石数量1 
LS_ZMMS0004-ZZSZL2 = P_ZMMS0004-ZZSZL1. "主石重量1 
LS_ZMMS0004-ZZSDJ2 = P_ZMMS0004-ZZSDJ1. "主石单价1 
LS_ZMMS0004-ZZSCB2 = P_ZMMS0004-ZZSCB1. "主石成本1 
LS_ZMMS0004-ZGJJCZSH = P_ZMMS0004-ZGJZSH. "国际证书号 
LS_ZMMS0004-ZXSDD    = P_ZMMT0003-VBELN. "销售订单 
LS_ZMMS0004-ZSCCKJ   = P_ZMMS0004-ZSJCB."市场参考价 
LS_ZMMS0004-ZCSSCCKJ = P_ZMMS0004-ZSJCB."初始市场参考价 
LS_ZMMS0004-ZPJSL1   = P_ZMMS0004-ZMENGE1. "配件数量1 
LS_ZMMS0004-ZPJSL2   = P_ZMMS0004-ZMENGE2. "配件数量2 
LS_ZMMS0004-ZJBGF    = P_ZMMS0004-ZJGF. "基本工费 
LS_ZMMS0004-ZXSLX    = P_ZMMT0003-AUART. "销售类型 
LS_ZMMS0004-ZJCS     = P_ZMMS0004-ZJCS.    "成色 
LS_ZMMS0004-ZGJJCJD  = P_ZMMS0004-ZGJJD. "国际净度 
LS_ZMMS0004-ZGJJCYS  = P_ZMMS0004-ZGJSD. "国际色度 
LS_ZMMS0004-ZGJJCQG  = P_ZMMS0004-ZGJQG. "国际切工 
LOOP AT LT_FIELD INTO LS_FIELD WHERE FIELDNAME NE 'ZDJBTHB'. 
CASE LS_FIELD-DATATYPE. 
WHEN 'CHAR'. 
LV_TYPE = '1'. 
WHEN 'DEC' OR 'QUAN'. 
LV_TYPE = '2'. 
WHEN 'CURR'. 
LV_TYPE = '3'. 
WHEN OTHERS. 
... 
ENDCASE. 
CLEAR LV_FIELD. 
CONCATENATE 'Z_' LS_FIELD-FIELDNAME INTO LV_FIELD. 
ASSIGN COMPONENT LS_FIELD-FIELDNAME OF STRUCTURE LS_ZMMS0004 TO <FS_VALUE>. 
IF SY-SUBRC EQ 0. 
APPEND_ALLOC_VALUE LV_TYPE LV_FIELD <FS_VALUE>. 
UNASSIGN <FS_VALUE>. 
ENDIF. 
ENDLOOP. 
READ TABLE LT_ALLOC_CHAR INTO LS_ALLOC_CHAR WITH KEY CHARACT = 'Z_ZHPBM'. 
IF SY-SUBRC EQ 0. 
LS_ALLOC_CHAR-VALUE_CHAR = P_ZMMS0004-CHARG. 
LS_ALLOC_CHAR-VALUE_NEUTRAL = P_ZMMS0004-CHARG. 
MODIFY LT_ALLOC_CHAR FROM LS_ALLOC_CHAR INDEX SY-TABIX. 
ELSE. 
LS_ALLOC_CHAR-CHARACT = 'Z_ZHPBM'. 
LS_ALLOC_CHAR-VALUE_CHAR = P_ZMMS0004-CHARG. 
LS_ALLOC_CHAR-VALUE_NEUTRAL = P_ZMMS0004-CHARG. 
APPEND LS_ALLOC_CHAR TO LT_ALLOC_CHAR. 
ENDIF. 
* 更新物料的批次属性值 
CLEAR LV_KEY. 
LV_KEY+0(18) = P_ZMMS0004-ZGSKH. 
LV_KEY+18(10) = P_ZMMS0004-CHARG. 
*--------------------TUS-CHARG-BEGIN---------------------------------* 
* Update material class 
CALL FUNCTION 'BAPI_OBJCL_CHANGE' 
EXPORTING 
OBJECTKEY          = LV_KEY 
OBJECTTABLE        = LV_TABLE 
CLASSNUM           = LV_CLASS 
CLASSTYPE          = LV_CLASS_TYPE 
STATUS             = '1' 
KEYDATE            = SY-DATUM 
IMPORTING 
CLASSIF_STATUS     = LV_STATUS 
TABLES 
ALLOCVALUESNUMNEW  = LT_ALLOC_NUM 
ALLOCVALUESCHARNEW = LT_ALLOC_CHAR 
ALLOCVALUESCURRNEW = LT_ALLOC_CURR 
RETURN             = LT_RETURN. 
*--------------------TUS-CHARG-END-----------------------------------* 
READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'. 
IF SY-SUBRC = 0. 
MOVE-CORRESPONDING LS_RETURN TO P_RETURN. 
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 
ELSE. 
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 
EXPORTING 
WAIT = 'X'. 
ENDIF. 
ENDFORM.                    " PRM_SET_BATCH_ATT

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18612.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论