Archivo

Posts Tagged ‘MIR7’

MRM_INVOICE_DOCUMENT_DELETE – Eliminar documento factura preliminar (MIR7)

Caso: se desea eliminar un documento factura registrado en forma preliminar.

Solución: manualmente se puede hacer mediante la MIR4 (presionando F7) o la MIR7, utilizando la opción Documento de factura-borrar.

Pero queremos verlo por código, para ello usamos la MRM_INVOICE_DOCUMENT_DELETE, del grupo de funciones MRME:

REPORT zprueba_abap.

DATA: wa_rbkp TYPE mrm_rbkpv,
lv_belnr TYPE re_belnr,
lv_gjahr TYPE gjahr.

lv_belnr = ‘5105691484’.
lv_gjahr = ‘2016’.

CLEAR wa_rbkp.
wa_rbkp-belnr = lv_belnr.
wa_rbkp-gjahr = lv_gjahr.

CALL FUNCTION ‘MRM_INVOICE_DOCUMENT_DELETE’
EXPORTING
i_rbkpv = wa_rbkp
* I_LOCK = ‘ ‘
* TABLES
* T_DRSEG =
* CHANGING
* CT_ERRPROT =
EXCEPTIONS
invoice_locked = 1
invoice_not_found = 2
OTHERS = 3.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

Link: http://www.se80.co.uk/sapfms/m/mrm_/mrm_invoice_document_delete.htm

Anuncio publicitario

SHD0 – Grisar campos INVFO-ZFBDT e INVFO-ZTERM en MIR7

Caso: Se desea grisar los campos INVFO-ZFBDT e INVFO-ZTERM en la MIR7.

Solución: crear variante de imagen, por la SHD0

1. Se desean grisar los campos siguientes en la MIR7:

2. Ingresamos a la SHD0 (también podemos hacerlo por la OLMRLIST, es similar):

3. Seleccionamos la imagen y presionamos el botón de copiar

La copiamos con un nombre que comience con Z, va a pedir Orden de Transporte.

4. Tomamos la variante copiada y presionamos “Modificar con procesamiento”

5. Nos llama a la MIR7, pasamos los campos obligatorios de la primera pantalla y vamos a la pestaña “Pago” en donde están nuestros campos

6. Nos aparecerán los campos normales. Grabamos y nos aparecerá una pantalla en donde marcamos los campos que queremos grisar. Presionamos Grabar y finalizar.

7. Ahora debemos crear una variante de transacción, para ello en la misma SHD0, vamos a la pestaña del medio, indicamos un nombre y presionamos modificar.

8. Al presionar modificar se desgrisan los campos de agregar, borrar y grabar. Agregamos la variante de imagen creada:

Grabamos al finalizar.

9. Nos queda el último paso, vamos a la primera pestaña de la SHD0, seleccionamos la variante de transacción y presionamos activar

Le damos OK al mensaje

10. Ingresamos a la MIR7 para probar el cambio en la pestaña de pago…¡los campos aparecen grisados!

Links:

315586 – MIRO: Creating and changing display variants

372776 – MIRO, MIR6: Display variants are not created or incorrect

GOS – Crear Anexo/URL en MIR7/MIRO

Caso: Se desea grabar una URL en documentos factura de la MIR7 o MIRO, utilizando la función del botón GOS (Generic Object Services).

Solución: obtenido del blog que indico abajo, definimos una función que contiene la lógica.

1. Ingresar a la SE37 y crear la función:

FUNCTION zbc_gos_create_url.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(I_OBJECTTYPE) LIKE  BORIDENT-OBJTYPE
*"     REFERENCE(I_OBJECTKEY) LIKE  BORIDENT-OBJKEY
*"     REFERENCE(I_URL) LIKE  SOLI-LINE
*"     REFERENCE(I_URLDES) LIKE  SOOD1-OBJDES
*"     REFERENCE(I_NOCOMMIT) TYPE  XFELD
*"  TABLES
*"      OT_RETURN STRUCTURE  BAPIRET2
*"----------------------------------------------------------------------
*
*local data definitions.
  DATA: l_owner         LIKE      soud-usrnam,
        l_folderid      LIKE      soodk,
        l_obj_id        LIKE      soodk,
        l_objdata       LIKE      sood1,
        lt_objcont      TYPE TABLE OF soli WITH HEADER LINE,
        lt_objhead      TYPE TABLE OF soli WITH HEADER LINE,
        l_object        LIKE     borident,
        l_reldoc        LIKE     borident,
        l_syst          LIKE     syst.
*-----------------------------------------------------------------------
*
*1.GET folder id.
  l_owner = sy-uname.
  CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
    EXPORTING
      owner                 = l_owner
      region                = 'B'
    IMPORTING
      folder_id             = l_folderid
    EXCEPTIONS
      communication_failure = 1
      owner_not_exist       = 2
      system_failure        = 3
      x_error               = 4
      OTHERS                = 5.
  IF sy-subrc <> 0.
    l_syst = syst.
    PERFORM collect_message USING ot_return l_syst '1.FolderRoot'.
    APPEND ot_return.
    EXIT.
  ENDIF.
 
*2. INSERT object
 
  l_objdata-objla     = sy-langu.
  l_objdata-objdes    = i_urldes.
  l_objdata-objsns    = 'O'.
 
  CONCATENATE '&KEY&' i_url INTO lt_objcont.
  APPEND lt_objcont.
 
  CALL FUNCTION 'SO_OBJECT_INSERT'
    EXPORTING
      folder_id                  = l_folderid
      object_type                = 'URL'
      object_hd_change           = l_objdata
      owner                      = l_owner
    IMPORTING
      object_id                  = l_obj_id
    TABLES
      objcont                    = lt_objcont
      objhead                    = lt_objhead
    EXCEPTIONS
      active_user_not_exist      = 1
      communication_failure      = 2
      component_not_available    = 3
      dl_name_exist              = 4
      folder_not_exist           = 5
      folder_no_authorization    = 6
      object_type_not_exist      = 7
      operation_no_authorization = 8
      owner_not_exist            = 9
      parameter_error            = 10
      substitute_not_active      = 11
      substitute_not_defined     = 12
      system_failure             = 13
      x_error                    = 14
      OTHERS                     = 15.
  IF sy-subrc <> 0.
    l_syst = syst.
    PERFORM collect_message USING ot_return l_syst '2.ObjectInsert'.
    APPEND ot_return.
    EXIT.
  ENDIF.
 
*3. CREATE binary relation
  l_object-objkey  = i_objectkey.
  l_object-objtype = i_objecttype.
 
  CONCATENATE l_folderid l_obj_id INTO l_reldoc-objkey.
  l_reldoc-objtype = 'MESSAGE'.
 
  CALL FUNCTION 'BINARY_RELATION_CREATE'
    EXPORTING
      obj_rolea      = l_object
      obj_roleb      = l_reldoc
      relationtype   = 'URL'
    EXCEPTIONS
      no_model       = 1
      internal_error = 2
      unknown        = 3
      OTHERS         = 4.
  IF sy-subrc <> 0.
    l_syst = syst.
    PERFORM collect_message USING ot_return l_syst
    '3.BinaryRelationCreate'.
    APPEND ot_return.
    EXIT.
  ENDIF.
 
*4. commit luw
*   all successful, sent success message.
 
  CLEAR: l_syst-msgid, l_syst-msgno.
  l_syst-msgty = 'S'.
  l_syst-msgv1 = 'Like creado OK'.
 
  PERFORM collect_message USING ot_return l_syst '4. URLLinkCreated'.
  APPEND ot_return.
  IF i_nocommit IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  ENDIF.
 
ENDFUNCTION.
  1. Creamos un include en el grupo de funciones donde creamos la función y agregamos la visualización del mensaje:
*----------------------------------------------------------------------*
***INCLUDE LZMM_FACT_PROVEEDORESF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  COLLECT_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
 FORM collect_message USING o_return LIKE bapiret2
                            i_syst LIKE syst
                            i_callpoint LIKE bapiret2-parameter.
*
   CLEAR o_return.
   o_return-type   = i_syst-msgty.
   IF i_syst-msgty IS INITIAL.
     o_return-type = 'E'.
     i_syst-msgty      = 'E'.
   ENDIF.
   o_return-id     = i_syst-msgid.
   o_return-number = i_syst-msgno.
   o_return-message_v1    = i_syst-msgv1.
   o_return-message_v2    = i_syst-msgv2.
   o_return-message_v3    = i_syst-msgv3.
   o_return-message_v4    = i_syst-msgv4.
 
   o_return-parameter = i_callpoint.
 
   MESSAGE ID i_syst-msgid TYPE i_syst-msgty NUMBER i_syst-msgno INTO
   o_return-message.
*
 ENDFORM.                    " collect_message
  1. Finalmente la llamada es:

 

*&---------------------------------------------------------------------*
*&      Form  CREAR_URL_ADJUNTA
*&---------------------------------------------------------------------*
*       Crea la URL para cada uno de los registros procesados
*----------------------------------------------------------------------*
FORM crear_url_adjunta.
 
  DATA: lv_objecttype   LIKE borident-objtype,
        lv_objectkey    LIKE borident-objkey,
        lv_url          LIKE soli-line,
        lv_urldes       LIKE sood1-objdes,
        lv_nocommit     TYPE xfeld,
        lt_return       LIKE bapiret2 OCCURS 0,
        l_url           TYPE smen_buffi-url.
 
* The object type is the same as you are used to in SWO1 (BKPF for FI documents, BUS2081 for incoming invoices (MIROs), BUS2012 for POs and so on.
* The object key is the full key of the object (For FI  documents, it is the document, company code and year)
* The URL is the actual URL that you wish to attach.
* The URL description is the name for the URL you see when you display attachments of the object.
* The last input parameter controls whether you wish to commit( blank) or not(X).
* Messages are returned in tables parameter OT_RETURN.
    lv_objecttype = 'BUS2081'.  
    CONCATENATE lv_belnr lv_gjahr INTO lv_objectkey.
    lv_url          = 'www.sap.com'. " URL
    CONCATENATE 'FACTURA #' lv_belnr lv_gjahr INTO lv_urldes SEPARATED BY space.
 
    lv_nocommit = space.
 
    CALL FUNCTION 'ZBC_GOS_CREATE_URL'
      EXPORTING
        i_objecttype = lv_objecttype
        i_objectkey  = lv_objectkey
        i_url        = lv_url
        i_urldes     = lv_urldes
        i_nocommit   = lv_nocommit
      TABLES
        ot_return    = lt_return.
 
ENDFORM.                    " CREAR_URL_ADJUNTA

4. En la MIR7, podemos ver el resultado del link agregado:

attc1c2c

attc1c2c

 

Fuente: http://subrc0.wordpress.com/2012/11/13/gos-adding-an-external-link-to-an-object/

BAPI_INCOMINGINVOICE_PARK – BAPI para la MIR7

Caso: se requiere encontrar una BAPI para crear un documento factura y grabarlo en la MIR7.

Solución: El siguiente programa es un ejemplo de como utilizar la BAPI_INCOMINGINVOICE_PARK; se debe tener en cuenta que difiere la forma de utilizarla, según si el pedido es de materiales o de servicios (está relacionado con el uso de los campos sheet_no y sheet_item):

REPORT  zprueba_bapi_mir7.
 
DATA: x_in_header LIKE bapi_incinv_create_header,
      i_in_item   LIKE bapi_incinv_create_item OCCURS 0 WITH HEADER LINE,
      lc_belnr    LIKE bapi_incinv_fld-inv_doc_no,
      lc_gjahr    LIKE bapi_incinv_fld-fisc_year,
      lw_ekko     TYPE ekko,
      d_msg(110),
      lw_ekpo     TYPE ekpo,
      i_return    LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
 
SELECT SINGLE * FROM ekko INTO lw_ekko
  WHERE ebeln = '0060000120'.
 
CHECK sy-subrc EQ 0.
x_in_header-invoice_ind   = 'X'.
x_in_header-doc_type      = 'K1'.             " Tipo de documento
x_in_header-pstng_date    = '20141028'.       " Fecha contabilización
x_in_header-doc_date      = '20141025'.       " Fecha documento
x_in_header-ref_doc_no    = '60000120'.       " Referencia
x_in_header-comp_code     = '1000'.           " Sociedad
x_in_header-currency      = lw_ekko-waers.    " Moneda
x_in_header-gross_amount  = '787500'.         " Monto
x_in_header-calc_tax_ind  = 'X'.              " Calcular impuestos
x_in_header-bus_area      = 'VAP'.            " División
x_in_header-pmnttrms      = lw_ekko-zterm.    " Cond. de pago
x_in_header-diff_inv      = lw_ekko-lifnr.    " Proveedor
 
i_in_item-invoice_doc_item = '000001'.        " #Ítem
i_in_item-po_number        = '0060000120'.    " Nro. Pedido SAP
i_in_item-po_item          = '00010'.         " Pos. Pedido SAP
i_in_item-sheet_no         = '1000000606'.    " Recepción
i_in_item-sheet_item       = '0000000010'.    " Posición
i_in_item-TAX_CODE         = 'C1'.            " Ind. Impuestos
APPEND i_in_item. CLEAR i_in_item.
 
CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
  EXPORTING
    headerdata       = x_in_header
  IMPORTING
    invoicedocnumber = lc_belnr
    fiscalyear       = lc_gjahr
  TABLES
    itemdata         = i_in_item
    return           = i_return.
 
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait = 'X'.
LOOP AT i_return.
  PERFORM f_message_prepare USING sy-langu
                                  i_return-id
                                  i_return-number
                                  i_return-message_v1
                                  i_return-message_v2
                                  i_return-message_v3
                                  i_return-message_v4
                         CHANGING d_msg.
  WRITE: / d_msg.
ENDLOOP.
IF NOT lc_belnr IS INITIAL.
  WRITE: / 'Doc :', lc_belnr.
  WRITE: / 'Año :', lc_gjahr.
ENDIF.
 
*&---------------------------------------------------------------------*
*&      Form  F_MESSAGE_PREPARE
*&--------------------------------------------------------------------
FORM f_message_prepare USING    p_langu
                                p_msgid
                                p_msgno
                                p_msgv1
                                p_msgv2
                                p_msgv3
                                p_msgv4
                       CHANGING p_msg.
 
  DATA: lc_char(3).
 
  WRITE p_msgno TO lc_char.
  CLEAR p_msg.
 
  CALL FUNCTION 'MESSAGE_PREPARE'
    EXPORTING
      language               = p_langu
      msg_id                 = p_msgid
      msg_no                 = lc_char
      msg_var1               = p_msgv1(50)
      msg_var2               = p_msgv2(50)
      msg_var3               = p_msgv3(50)
      msg_var4               = p_msgv4(50)
    IMPORTING
      msg_text               = p_msg
    EXCEPTIONS
      function_not_completed = 1
      message_not_found      = 2
      OTHERS                 = 3.
 
ENDFORM.                    " F_MESSAGE_PREPARE

MIR7-MIRO – INVFO-GSBER/División – valor por defecto

Caso: se busca que al crear un documento por la MIRO o MIR7, que traiga por defecto un valor para el campo DIVISIÓN (INVFO-GSBER).

Solución:

1. Para crear valores por defecto en los datos de cabecera, deberíamos implementar la BADI MRM_HEADER_DEFAULT, ingresando por la SE18, podemos ver de que se trata:

2. Por la SE19, la implementamos:

3. Usaremos el único método, el HEADER_DEFAULT_SET. En nuestro caso, como el campo DIVISIÓN no está en los parámetros de salida, debo actualizarlo mediante un FIELD-SYMBOL. Hacemos doble-click en el método:

4. Agregamos el código

FIELD-SYMBOLS: <fs_rbkpv> TYPE mrm_rbkpv.
DATA: c_rbkpv(15) TYPE c VALUE '(SAPLMR1M)RBKPV'.
 
CASE sy-tcode.
WHEN 'MIR7' OR 'MIRO'.
CHECK i_rbkpv-gsber IS INITIAL.
ASSIGN (c_rbkpv) TO <fs_rbkpv>.
<fs_rbkpv>-gsber = 'DIVISIÓN'.
 
ENDCASE.