美文网首页sap abap
2020-06-04 migo 收货过账后更新mseg 里面的批

2020-06-04 migo 收货过账后更新mseg 里面的批

作者: 风口得猪会飞 | 来源:发表于2020-10-27 11:46 被阅读0次

    业务要求migo产生批次后 再进行该凭证得批次更新 ,难度很大

    前台操作时migo收获操作

    DATA:lv_mblnr TYPE mblnr,     lv_mjahr TYPE mjahr.*     ls_mkpf  TYPE mkpf,*     lt_mseg  TYPE TABLE OF mseg.DATA: g_classname  TYPE rzlli_apcl,   "Server Group Name      g_applserver TYPE rzllitab-applserver. "RFC Serve Group

    DATA : gname   LIKE seqg3-gname VALUE 'MKPF',       garg    LIKE  seqg3-garg,       raw_enq LIKE  seqg7 OCCURS 0 WITH HEADER LINE,       guname  LIKE  seqg3-guname.

    CALL 'C_SAPGPARAM'         ID 'NAME'  FIELD 'rdisp/myname'         ID 'VALUE'  FIELD g_applserver.SELECT SINGLE classname

                FROM   rzllitab

                INTO   g_classname   "Server Group Name           WHERE   applserver = g_applserver

                 AND   grouptype = 'S'.   "S:服务器组,空:登陆组

    READ TABLE doc_head_tab INTO DATA(ls_bkpf) INDEX 1.CHECK ls_bkpf-awkey IS NOT INITIAL.CLEAR:lv_mblnr,lv_mjahr.

    lv_mblnr

     = ls_bkpf-awkey+0(10).

    lv_mjahr

     = ls_bkpf-awkey+10(4).

    IF sy-tcode = 'MIGO'.  CALL FUNCTION 'ZFM_MM_CREATE_BATCH_DEST' STARTING NEW TASK lv_mblnr

        DESTINATION IN GROUP g_classname

        PERFORMING frm_batch_upload ON END OF TASK    EXPORTING      iv_mblnr = lv_mblnr

          iv_mjahr = lv_mjahr.ENDIF.

    FORM frm_batch_upload USING lv_mblnr.  RECEIVE RESULTS FROM FUNCTION 'ZFM_MM_CREATE_BATCH_DEST'.ENDFORM.

    Rfc内容

    FUNCTION zfm_mm_create_batch_dest.*"----------------------------------------------------------------------*"*"本地接口:*"  IMPORTING*"     VALUE(IV_MBLNR) TYPE  MBLNR OPTIONAL*"     VALUE(IV_MJAHR) TYPE  MJAHR OPTIONAL*"----------------------------------------------------------------------  DATA:iv_matnr  TYPE matnr,       iv_werks  TYPE werks_d,       iv_charg  TYPE charg_d,       e_objek   TYPE cuobn,       e_obtab   TYPE tabelle,       e_klart   TYPE klassenart,       e_class   TYPE klasse_d,       lt_num    TYPE TABLE OF bapi1003_alloc_values_num,       lt_char   TYPE TABLE OF bapi1003_alloc_values_char,       lt_curr   TYPE TABLE OF bapi1003_alloc_values_curr,       it_mseg   TYPE TABLE OF mseg,       is_mkpf   TYPE mkpf,       lt_return TYPE TABLE OF bapiret2.

      CLEAR:is_mkpf,it_mseg[].  DO 10 TIMES.    SELECT SINGLE * INTO CORRESPONDING FIELDS OF is_mkpf FROM mkpf WHERE mblnr = iv_mblnr AND mjahr = iv_mjahr.    IF sy-subrc = 0.      EXIT.    ELSE.      WAIT UP TO 1 SECONDS.    ENDIF.  ENDDO.

      IF is_mkpf IS  INITIAL.    EXIT.  ENDIF.

      SELECT * INTO CORRESPONDING FIELDS OF TABLE it_mseg FROM mseg WHERE mblnr = iv_mblnr AND mjahr = iv_mjahr.

    *       ls_catt   TYPE bapibatchatt.  "产地 生产厂家编码 生产产家  SELECT FROM ekpo AS a

      INNER JOIN ztcqm002 AS b

      ON a~werks = b~werks AND     a~matnr = b~matnr AND     a~idnlf = b~zid

      FIELDS  a~ebeln,a~ebelp,a~matnr,a~idnlf,  b~zid,b~zscsmc,b~zchandi

      FOR ALL ENTRIES IN @it_mseg[]

      WHERE ebeln = @it_mseg-ebeln

        AND ebelp = @it_mseg-ebelp

        AND zdel = ''   INTO TABLE @DATA(lt_ekpo).  SORT lt_ekpo BY ebeln ebelp matnr.  DELETE ADJACENT DUPLICATES FROM lt_ekpo COMPARING ebeln ebelp matnr.* 上市许可持有人:证书类型Z032* 第二类医疗器械经营备案凭证:证书类型Z015* 医疗器械经营许可证:证书类型Z017  SELECT FROM ztgsp_lic_mas AS a

        INNER JOIN t001k AS b

        ON a~bukrs = b~bukrs

        INNER JOIN ztgsp_bukrs AS c    ON a~bukrs = c~bukrs

        FIELDS    a~zzlicid,b~bwkey AS werks,a~bukrs,a~matnr,a~zzholder,a~zzlictyp,a~zzlicno

        FOR ALL ENTRIES IN @it_mseg

        WHERE matnr = @it_mseg-matnr

          AND zzlictyp IN ('Z032','Z015','Z017')      AND zzvalto > @sy-datum

          AND b~bwkey = @it_mseg-werks

         INTO TABLE @DATA(lt_lic_mas).  SORT lt_lic_mas BY werks matnr zzlictyp.  DELETE ADJACENT DUPLICATES FROM lt_lic_mas COMPARING werks matnr zzlictyp.*注册证/备案号取数逻辑:  SELECT FROM ztmm_master_bas

        FIELDS    matnr,    zzcba

        FOR ALL ENTRIES IN @it_mseg

        WHERE matnr = @it_mseg-matnr

        INTO TABLE @DATA(lt_master_bas).  SORT lt_master_bas BY matnr.  LOOP AT it_mseg ASSIGNING FIELD-SYMBOL(<fs_mseg>) WHERE bwart = '101'                                                      AND  kzbew = 'B' AND charg IS NOT INITIAL.    CLEAR:       iv_matnr,       iv_werks,       iv_charg,       e_objek,       e_obtab,       e_klart,       e_class,*       ls_catt,       lt_num[],       lt_char[],       lt_curr[],       lt_return[].    iv_matnr = <fs_mseg>-matnr.    iv_werks = <fs_mseg>-werks.    iv_charg = <fs_mseg>-charg.    CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'      EXPORTING        i_matnr = iv_matnr

            i_charg = iv_charg

            i_werks = iv_werks

          IMPORTING        e_objek = e_objek

            e_obtab = e_obtab

            e_klart = e_klart

            e_class = e_class.    CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'      EXPORTING*       OBJECTKEY       =        objecttable     = e_obtab

            classnum        = e_class

            classtype       = e_klart

    *       KEYDATE         = SY-DATUM*       UNVALUATED_CHARS       = ' '*       LANGUAGE        = SY-LANGU        objectkey_long  = e_objek

    * IMPORTING*       STATUS          =*       STANDARDCLASS   =      TABLES        allocvaluesnum  = lt_num

            allocvalueschar = lt_char

            allocvaluescurr = lt_curr

            return          = lt_return.    READ TABLE lt_ekpo ASSIGNING FIELD-SYMBOL(<fs_ekpo>) WITH KEY ebeln = <fs_mseg>-ebeln

                                                                      ebelp = <fs_mseg>-ebelp

                                                                      matnr = <fs_mseg>-matnr

                                                                      BINARY SEARCH.    IF sy-subrc = 0.      IF e_class = 'Z_BATCH01'.        " 生产厂家编号        IF <fs_ekpo>-zid IS NOT INITIAL.          READ TABLE lt_char ASSIGNING FIELD-SYMBOL(<fs_char>) WITH KEY charact = 'Z_DATA21'.          IF sy-subrc = 0.            <fs_char>-value_char     = <fs_ekpo>-zid.            <fs_char>-value_neutral  = <fs_ekpo>-zid.          ELSE.            APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.            <fs_char>-charact        = 'Z_DATA21'.            <fs_char>-value_char     = <fs_ekpo>-zid.            <fs_char>-value_neutral  = <fs_ekpo>-zid.          ENDIF.        ENDIF.        "生产厂家        IF <fs_ekpo>-zscsmc IS NOT INITIAL.          IF <fs_char> IS ASSIGNED.            UNASSIGN <fs_char>.          ENDIF.          READ TABLE lt_char ASSIGNING <fs_char> WITH KEY charact = 'Z_DATA05'.          IF sy-subrc = 0.            <fs_char>-value_char     = <fs_ekpo>-zscsmc.            <fs_char>-value_neutral  = <fs_ekpo>-zscsmc.          ELSE.            APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.            <fs_char>-charact        = 'Z_DATA05'.            <fs_char>-value_char     = <fs_ekpo>-zscsmc.            <fs_char>-value_neutral  = <fs_ekpo>-zscsmc.          ENDIF.        ENDIF.        "产地        IF <fs_ekpo>-zchandi IS NOT INITIAL.          IF <fs_char> IS ASSIGNED.            UNASSIGN <fs_char>.          ENDIF.          READ TABLE lt_char ASSIGNING <fs_char> WITH KEY charact = 'Z_DATA23'.          IF sy-subrc = 0.            <fs_char>-value_char     = <fs_ekpo>-zchandi.            <fs_char>-value_neutral  = <fs_ekpo>-zchandi.          ELSE.            APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.            <fs_char>-charact        = 'Z_DATA23'.            <fs_char>-value_char     = <fs_ekpo>-zchandi.            <fs_char>-value_neutral  = <fs_ekpo>-zchandi.          ENDIF.        ENDIF.      ENDIF.    ENDIF.    IF e_class = 'Z_BATCH03'.      READ TABLE lt_lic_mas ASSIGNING FIELD-SYMBOL(<fs_lic_mas>) WITH KEY werks = <fs_mseg>-werks"4.2.6  上市许可持有人                                                                          matnr = <fs_mseg>-matnr

                                                                              zzlictyp = 'Z032'                                                                          BINARY SEARCH.      IF sy-subrc = 0.        READ TABLE lt_char ASSIGNING <fs_char> WITH KEY charact = 'Z_DATA43'.        IF sy-subrc = 0.          <fs_char>-value_char     = <fs_lic_mas>-zzlicno.          <fs_char>-value_neutral  = <fs_lic_mas>-zzlicno.        ELSE.          APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.          <fs_char>-charact        = 'Z_DATA43'.          <fs_char>-value_char     = <fs_lic_mas>-zzlicno.          <fs_char>-value_neutral  = <fs_lic_mas>-zzlicno.        ENDIF.      ENDIF.      READ TABLE lt_lic_mas ASSIGNING <fs_lic_mas> WITH KEY werks    = <fs_mseg>-werks

                                                                matnr    = <fs_mseg>-matnr

                                                                zzlictyp = 'Z015'                                                            BINARY SEARCH.      IF sy-subrc = 0.        READ TABLE lt_char ASSIGNING <fs_char> WITH KEY charact = 'Z_DATA45'."4.2.8  医疗器械经营许可证        IF sy-subrc = 0.          <fs_char>-value_char     = <fs_lic_mas>-zzlicno.          <fs_char>-value_neutral  = <fs_lic_mas>-zzlicno.        ELSE.          APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.          <fs_char>-charact        = 'Z_DATA45'.          <fs_char>-value_char     = <fs_lic_mas>-zzlicno.          <fs_char>-value_neutral  = <fs_lic_mas>-zzlicno.        ENDIF.      ENDIF.      READ TABLE lt_lic_mas ASSIGNING <fs_lic_mas> WITH KEY werks    = <fs_mseg>-werks

                                                                matnr    = <fs_mseg>-matnr

                                                                zzlictyp = 'Z017'                                                            BINARY SEARCH.      IF sy-subrc = 0.        READ TABLE lt_char ASSIGNING <fs_char> WITH KEY charact = 'Z_DATA46'."4.2.8  医疗器械经营许可证        IF sy-subrc = 0.          <fs_char>-value_char     = <fs_lic_mas>-zzlicno.          <fs_char>-value_neutral  = <fs_lic_mas>-zzlicno.        ELSE.          APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.          <fs_char>-charact        = 'Z_DATA46'.          <fs_char>-value_char     = <fs_lic_mas>-zzlicno.          <fs_char>-value_neutral  = <fs_lic_mas>-zzlicno.        ENDIF.      ENDIF.      READ TABLE lt_master_bas ASSIGNING FIELD-SYMBOL(<fs_master_bas>) WITH KEY matnr = <fs_mseg>-matnr BINARY SEARCH.      IF sy-subrc = 0.        READ TABLE lt_char ASSIGNING <fs_char> WITH KEY charact = 'Z_DATA44'.        IF sy-subrc = 0.          <fs_char>-value_char     = <fs_master_bas>-zzcba.          <fs_char>-value_neutral  = <fs_master_bas>-zzcba.        ELSE.          APPEND INITIAL LINE TO lt_char ASSIGNING <fs_char>.          <fs_char>-charact        = 'Z_DATA44'.          <fs_char>-value_char     = <fs_master_bas>-zzcba.          <fs_char>-value_neutral  = <fs_master_bas>-zzcba.        ENDIF.      ENDIF.    ENDIF.    CALL FUNCTION 'BAPI_OBJCL_CHANGE' "对特性值进行一次更改      EXPORTING*       OBJECTKEY          = E_OBJEK        objecttable        = e_obtab

            classnum           = e_class

            classtype          = e_klart

            objectkey_long     = e_objek

    *      IMPORTING*       CLASSIF_STATUS     = V_STATUS      TABLES        allocvaluesnumnew  = lt_num

            allocvaluescharnew = lt_char

            allocvaluescurrnew = lt_curr

            return             = lt_return

          EXCEPTIONS        OTHERS             = 01.

        DATA:lv_check TYPE c.    CLEAR:lv_check.    LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<lfs_rettab>) WHERE type CA 'AEX'.      ROLLBACK WORK.      lv_check = 'X'.      EXIT.    ENDLOOP.

        IF lv_check = ''.      COMMIT WORK .    ENDIF.  ENDLOOP.ENDFUNCTION.

    相关文章

      网友评论

        本文标题:2020-06-04 migo 收货过账后更新mseg 里面的批

        本文链接:https://www.haomeiwen.com/subject/wbrgzhtx.html