Archivo

Posts Tagged ‘MIRO’

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

Anuncio publicitario

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.

Crear sustituciones – GGB1

Caso: se busca crear una sustitución para el campo BKPF-XBLNR (campo referencia) en la MIRO para que si el valor ingresado es numérico, se quiten los ceros a la izquierda de éste.

1. Ingresamos a la transacción GGB1.

Allí vamos a «Contabilidad financiera» – «Cabecera documento» (ya que allí está el campo a sustituir) y presionamos el botón «Nueva Sustitución».

Aquí se crea como una carpeta agrupadora de sustituciones.

Luego de esto, nos posicionamos en la carpeta recién grabada y presionamos el botón «Nuevo Paso». Allí nos va a pedir el/los campos a sustituir. Seleccionamos el nuestro:

Nos va a pedir que sustitución realizaremos. En nuestro caso como vamos a generar algo de código, usaremos un EXIT. En caso de querer reeemplazarlo por una constante usar «Valor constante» y si se desea reemplazarlo por el valor de otro campo, la opción «Asignación campo-campo»

Definimos una descripción para el paso recién creado y nos posicionamos en el filtro de condiciones. Allí indicamos la/s transacciones en las cuales deseamos que se ejecute la sustitución y en nuestro caso que el campo no debe estar vacío.

Para agregar campos y operadores se recomienda usar las opciones de ayuda. Finalmente presionar el botón de verificar () y el Status debe quedar en verde.

Ahora vamos a indicar el EXIT. Nos posicionamos en «Sustitución» y allí vemos que hay que indicar un EXIT (yo ya lo tengo creado como U300).

2. El EXIT se debe crear haciendo una copia Z del programa estándar RGGBS000, por ejemplo como ZRGGBS000.

Ingresar a la transacción GCX2 y reemplazar el programa estándar RGGBS000 por el nuevo Z.

Allí se puede utilizar uno de los UXXX que están comentados que están puestos como ejemplo o crearnos uno nuevo. Lo importante es tener lo siguiente:

* Sustitución campo referencia (XBLNR) sin ceros a la izquierda
exits-name  = ‘U300’.                 » Sustitución campo

referencia (XBLNR) sin ceros a la izquierda
exits-param = c_exit_param_field.
exits-title = text-300.
APPEND exits.

*———————————————————————* FORM U300*
*———————————————————————* Sustitución Campo Referencia de Factura. Si posee ceros a la izquierda se quitan
*———————————————————————FORM u300 USING bkpf-xblnr.

DATA: lv_xblnr TYPE xblnr,
lv_tipo  TYPE dd01v-datatype.

CALL FUNCTION ‘NUMERIC_CHECK’
EXPORTING
string_in  = bkpf-xblnr
IMPORTING
string_out = lv_xblnr
htype      = lv_tipo.

IF lv_tipo NE ‘CHAR’.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
input  = bkpf-xblnr
IMPORTING
output = bkpf-xblnr.
ENDIF.
ENDFORM.                                                    «u0300

*———————————————————————

3. Luego de crear todo el código, debo grabar todo en la GGB1 y finalmente crear una entrada en la transacción OBBH para activar la carpeta de sustituciones creada.

En grado de activación, se debe indicar «1» para activar.

Screenshot_1

Finalmente se debe ejecutar el programa RGUGBR00 para ajustar los cambios realizados, según el post:

https://abapers.wordpress.com/2013/07/22/regenerar-ggb0-ggb1-validacionessustituciones/

Nota: Tener en cuenta que tanto las sustituciones como las validaciones se ejecutan cuando hablamos de contabilizaciones, en este caso por ejemplo en la MIR7 (documento preliminar prerregistrado) no va a correr la sustitución ya que no se genera documento contable.

Link útil:

http://saptricks.wordpress.com/2012/10/21/truco-29-sustituciones-en-controllingco-usando-exits-ii/

Categorías: FI Etiquetas: , , , , , , ,