User Exit Me51n

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • ballan
    Senior Member
    • oct
    • 671

    #16
    Para los pedidos dispones de la badi ME_PROCESS_PO_CUST en lugar de la ME_PROCESS_REQ_CUST que es para solicitudes de pedido

    El funcionamiento es exactamente el mismo en las dos badis solo que evidentemente una te proporcionara informacion de la EBAN y la otra de la EKKO/EKPO

    Comentario

    • Paola79
      Member
      • oct
      • 62

      #17
      Gracias BALLAN tengo una duda el ls_items de que tipo lo creo¿?...

      Saludos

      Comentario

      • ballan
        Senior Member
        • oct
        • 671

        #18
        La cabecera seria de tipo MEPOHEADER y la posicion del tipo MEPOITEM

        De todas formas para poder saber eso yo hago lo siguiente:

        Haciendo un resumen muy superficial una BADI es una INTERFAZ que se puede ver a traves de la transaccion SE24 (si miramos la definicion de la badi a traves de la SE18 veremos que la badi ME_PROCESS_PO_CUST tiene definida la interfaz IF_EX_ME_PROCESS_PO_CUST)

        Si miramos la IF_EX_ME_PROCESS_PO_CUST en la SE24 veremos todos los metodos de la badi, al ser una interfaz solo vienen las definiciones y los parametros de los metodos DENTRO NO TIENE CODIGO

        Si nos vamos al metodo PROCESS_ITEM por ejemplo veremos que como parametro recibe el parametro IM_ITEM cuyo tipo es otra interfaz IF_PURCHASE_ORDER_ITEM_MM si vamos a ver esa interfaz por la SE24 veremos que en dicha interfaz existe un metodo llamado GET_DATA que si miramos los parametros veremos que devuelve una estructura del tipo MEPOITEM

        Bueno no se si he aclarado algo o lo he liado mas pero espero que se me entienda

        Comentario

        • Paola79
          Member
          • oct
          • 62

          #19
          Le he puesto el BREAK para ver si me para donde quiero yo porque el chequeo que quiero es que si el importe es superior a 3.000 que de error...

          Muchas gracias

          Comentario

          • Paola79
            Member
            • oct
            • 62

            #20
            Muchas gracias BALLAR, me ah quedado claro, porque yo y las badis no nos llevabamos hasta ahora pero el problema como te he expuesto anteriormente no me para el break donde quiero.

            Un saludo

            Comentario

            • ballan
              Senior Member
              • oct
              • 671

              #21
              A ver ni balla ni ballar es ballan :P

              Si quieres chequear si el pedido tiene mas de 3000 euros y dar un mensaje

              Implementa la badi que te he dicho y utiliza el metodo check, en este metodo se para cuando pulsas el boton verificar del pedido o bien cuando le das al boton de grabacion primero verifica y luego graba

              El codigo seria algo por el estilo

              data: lt_items type PURCHASE_ORDER_ITEMS.

              data: lt_item like line of lt_items,
              ls_po_item type mepoitem.

              data: lv_importe type mepoitem-menge.

              clear: lv_importe.

              lt_items = im_header->get_items( ).

              loop at lt_items into ls_item.

              ls_po_item = ls_item->get_data( ).

              add ls_po_item-menge to lv_importe.

              endloop.

              if lv_importe > 3000.

              mmpur_message ... aqui iria el mensaje
              ch_failed = 'X'.

              endif.

              Comentario

              • Paola79
                Member
                • oct
                • 62

                #22
                No me para en ningun lado el break que puede ser he revisado que este todo activado y es correcto... Pero no para... Para ver cual es el dato del precio...



                Me podrias dar una pistilla...

                Muchas gracias y siento ser tan pesada...

                Comentario

                • Paola79
                  Member
                  • oct
                  • 62

                  #23
                  Perdon por lo del nombre. Ya esta...

                  Un saludo ygraicas

                  Comentario

                  • Paola79
                    Member
                    • oct
                    • 62

                    #24
                    Hola buenas tardes,

                    Ya me funciona la validación correctamente, desde hace ya días, el consultor ha echo pruebas, y le salta en el resto de tipo de pedidos, y solo queremos que salga en un determinado tipo de pedidos.

                    La validación la estoy haciendo en las items, ya que es ahi que el importe no sea superior a 3000, pero ahi no tengo la clase de pedido, que en mi caso será tipo de pedido SD, ya que se encuentra este dato en la cabecera (header).

                    Mi pregunta es: ¿Cómo puedo pasar el tipo de pedido en la BADI a las posiciones para que solo me salga en ese tipo de pedido?

                    Muchas gracias

                    Comentario

                    • torrescano
                      Member
                      • may
                      • 57

                      #25
                      buen dia Ballan.

                      vi tus post's, resulta q tengo q hacer una validacion en la ME51N en la solicitud de pedido con imputacion a un centro de costo.

                      implemente la bdai ME_PROCESS_REQ_CUST en el metodo CHECK,
                      tengo el siguiente codigo:

                      METHOD if_ex_me_process_req_cust~check.
                      break vandrade.
                      DATA: lt_items TYPE mmpur_requisition_items.
                      DATA: ls_item LIKE LINE OF lt_items.
                      DATA: ls_pr_item TYPE mereq_item.
                      DATA: ls_po_item TYPE mepoitem.

                      lt_items = im_header->get_items( ).

                      LOOP AT lt_items INTO ls_item.

                      ls_po_item = im_item->get_data( ).

                      IF ls_po_item-kostl NE '223'. "este es mi CeCo
                      *mensaje
                      ENDIF.
                      ENDLOOP.
                      ENDMETHOD.

                      bueno pues resulta q no puedo activar el metodo pues me dice el sigueinte error.

                      Clase ZCL_IM_ME_PROCESS_REQ_CUST,Método IF_EX_ME_PROCESS_REQ_CUST~CHECK
                      The field "IM_ITEM" is unknown, but there is a field with the similar
                      name "LS_ITEM" . . . .

                      si me pudieras orientar por favor, muchas gracias, saludos.
                      Saludos amigos SAPeros

                      Comentario

                      • torrescano
                        Member
                        • may
                        • 57

                        #26
                        saludos foro. pos aki de nuevo, ya resolvi mi problema.

                        pues resulto q el metodo fue process_account.

                        aki le sdejo el codigo por si alguien le sirrviera.

                        METHOD if_ex_me_process_req_cust~process_account.

                        DATA: ls_item TYPE mepoitem,
                        ls_exkn TYPE exkn.
                        DATA: v_kostl TYPE kostl.

                        break vandrade.

                        ls_item = im_account->get_exknx( ).

                        ls_exkn = im_account->get_exkn( ).

                        CHECK NOT ls_exkn-kostl IS INITIAL.

                        * MOVE: ls_exkn-kostl TO v_kostl.

                        AUTHORITY-CHECK OBJECT 'Z_MM_CECO' "'K_CSKS'
                        ID 'ACTVT' FIELD '03'
                        ID 'KOSTL' FIELD ls_exkn-kostl.

                        IF sy-subrc NE 0.
                        MESSAGE 'Verificar Centro de Costo' TYPE 'E'.
                        ENDIF.


                        ENDMETHOD.
                        Saludos amigos SAPeros

                        Comentario

                        Trabajando...