<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>.SAP.com</title>
	<atom:link href="http://puntosap.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://puntosap.com</link>
	<description>ABAP/4, técnicas y experiencias</description>
	<lastBuildDate>Mon, 23 Jan 2012 14:49:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Envío de email externo mediante clase ABAP</title>
		<link>http://puntosap.com/codigo_util/envio-de-email-externo-mediante-clase-abap/</link>
		<comments>http://puntosap.com/codigo_util/envio-de-email-externo-mediante-clase-abap/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 20:53:51 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Código útil]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[código fuente]]></category>
		<category><![CDATA[correo]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[SE24]]></category>
		<category><![CDATA[SE38]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=230</guid>
		<description><![CDATA[Aqu&#237; tenemos el c&#243;digo completo para env&#237;o de mails mediante clase. Tener en cuenta que se debe configurar el servidor para que realice los env&#237;os. Esta tarea debe realizarla un administrador del sistema. Se debe ingresar el siguiente c&#243;digo fuente en la transacci&#243;n SE38, como c&#243;digo ejecutable: Espero sus comentarios! Hasta la pr&#243;xima]]></description>
			<content:encoded><![CDATA[<p>Aqu&iacute; tenemos el c&oacute;digo completo para env&iacute;o de mails mediante clase.</p>
<p>Tener en cuenta que se debe configurar el servidor para que realice los env&iacute;os. Esta tarea debe realizarla un administrador del sistema.</p>
<p>Se debe ingresar el siguiente c&oacute;digo fuente en la transacci&oacute;n SE38, como c&oacute;digo ejecutable:</p>
<p><span id="more-230"></span></p>
<pre class="brush: abap; title: ; notranslate">
REPORT y_envio_mail.

* Declaracion de variables
DATA: go_mail_data TYPE REF TO cl_crm_email_data,
      gs_mail_recipient TYPE crms_email_recipient,
      gt_mail_recipients TYPE crmt_email_recipients,
      lw_body TYPE crms_email_mime_struc,
      gt_body TYPE crmt_email_mime_struc,
      gd_request_id TYPE sysuuid_x.
* Definicion de pantalla de selección
PARAMETERS: pa_namef TYPE text255 OBLIGATORY DEFAULT 'Prueba Mail',
            pa_from TYPE text255 OBLIGATORY DEFAULT 'prueba@mail.com',
            pa_namet TYPE text255 OBLIGATORY DEFAULT 'Prueba Mail',
            pa_to TYPE text255 OBLIGATORY DEFAULT 'prueba@mail.com',
            pa_subj TYPE text255 OBLIGATORY DEFAULT 'Mail de prueba'.

START-OF-SELECTION.
* Instanciar objeto datos de mail
  CREATE OBJECT go_mail_data.
* Remitente
  gs_mail_recipient-name = pa_namef.
  gs_mail_recipient-address = pa_from.
  APPEND gs_mail_recipient TO gt_mail_recipients.
  go_mail_data-&gt;from = gs_mail_recipient.
* Destinatarios
  gs_mail_recipient-name = pa_namet.
  gs_mail_recipient-address = pa_to.
  APPEND gs_mail_recipient TO gt_mail_recipients.
  go_mail_data-&gt;to = gt_mail_recipients.
* Asunto
  go_mail_data-&gt;subject = pa_subj.
* Cuerpo del mail
  lw_body-content_ascii = 'Cuerpo del mail de prueba. Nada en especial solo demostrar el éxito del envío'.
  APPEND lw_body TO gt_body.
  go_mail_data-&gt;body = gt_body.

END-OF-SELECTION.
* Enviar el e-mail
  CALL METHOD cl_crm_email_utility_base=&gt;send_email
    EXPORTING
      iv_mail_data       = go_mail_data
    RECEIVING
      ev_send_request_id = gd_request_id.
  IF sy-subrc = 0.
    MESSAGE 'Mail enviado' TYPE 'S'.
  ENDIF.
</pre>
<p>Espero sus comentarios!</p>
<p>Hasta la pr&oacute;xima</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/codigo_util/envio-de-email-externo-mediante-clase-abap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NUEVO &#8211; Foro PuntoSAP!</title>
		<link>http://puntosap.com/novedades/nuevo-foro-puntosap/</link>
		<comments>http://puntosap.com/novedades/nuevo-foro-puntosap/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 13:57:58 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Novedades]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[consultoria]]></category>
		<category><![CDATA[foro]]></category>
		<category><![CDATA[funcional]]></category>
		<category><![CDATA[modulo]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[usuario]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=203</guid>
		<description><![CDATA[La red social El mundo de la consultoria es chico, eso lo decimos muy a menudo. Y por lo mismo, que mejor que tener un punto de reuni&#243;n donde poder conversar y sobre todo, formar una comunidad basada en la confianza, entendimiento, profesionalismo y respeto. Espero que se animen de todas las &#225;reas de la [...]]]></description>
			<content:encoded><![CDATA[<h3><a href="http://www.puntosap.com/forum" target="_self">La red social</a></h3>
<p>El mundo de la consultoria es chico, eso lo decimos muy a menudo. Y por lo mismo, que mejor que tener un punto de reuni&oacute;n donde poder conversar y sobre todo, formar una comunidad basada en la confianza, entendimiento, profesionalismo y respeto.</p>
<p>Espero que se animen de todas las &aacute;reas de la consultoria SAP, a compartir sus inquietudes, y tambi&eacute;n sus experiencias. No solo a nivel t&eacute;cnico sino tambi&eacute;n funcionales (todos los m&oacute;dulos, administradores y usuarios!! Todos son bienvenidos.</p>
<p>&nbsp;</p>
<p><em>fricadmin</em></p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/novedades/nuevo-foro-puntosap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial para Crear patrón de código fuente dinámico</title>
		<link>http://puntosap.com/tutoriales/tutorial-para-crear-patron-de-codigo-fuente-dinamico/</link>
		<comments>http://puntosap.com/tutoriales/tutorial-para-crear-patron-de-codigo-fuente-dinamico/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 19:27:04 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[funcion]]></category>
		<category><![CDATA[paquete]]></category>
		<category><![CDATA[patron]]></category>
		<category><![CDATA[reporte]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SE37]]></category>
		<category><![CDATA[SE38]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=187</guid>
		<description><![CDATA[En este tutorial les voy a mostrar c&#243;mo crear un patr&#243;n de c&#243;digo que se alimente de forma din&#225;mica, por ejemplo para registrar usuario, fecha y hora, al momento de estar desarrollando nuestros programas. Es muy importante el nombre que le daremos al patr&#243;n, ya que de este se desprender&#225; el m&#243;dulo de funci&#243;n a [...]]]></description>
			<content:encoded><![CDATA[<p>En este tutorial les voy a mostrar c&oacute;mo crear un patr&oacute;n de c&oacute;digo que se alimente de forma din&aacute;mica, por ejemplo para registrar usuario, fecha y hora, al momento de estar desarrollando nuestros programas. Es muy importante el nombre que le daremos al patr&oacute;n, ya que de este se desprender&aacute; el m&oacute;dulo de funci&oacute;n a crear. SAP relaciona autom&aacute;ticamente el nombre del patr&oacute;n con su funci&oacute;n asociada.</p>
<p>Sin m&aacute;s pre&aacute;mbulos, comencemos.</p>
<p><span id="more-187"></span></p>
<p><strong>Consideraciones previas</strong></p>
<p>Debemos tener autorizaci&oacute;n para acceder a las transacciones <em>SE37</em> y <em>SE38</em>.</p>
<p><strong>Implementaci&oacute;n</strong></p>
<p>El nombre del patr&oacute;n elegido es <em>ZUSER_DATE_TIME</em>, y mostrar&aacute; justamente nombre de usuario, fecha y hora, como comentario dentro del programa. Los pasos para implementarlo son los siguientes:</p>
<p><strong>Paso 1</strong>: Crear patr&oacute;n. Estando posicionados dentro de un programa (SE38), vamos al men&uacute; Utilidades &gt; M&aacute;s Utilidades &gt; Tratar patr&oacute;n &gt; Crear patr&oacute;n.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/0.-Navegar-a-creacion-de-patron.png" target="_blank"><img alt="" src="http://puntosap.com/wp-content/uploads/2011/12/0.-Navegar-a-creacion-de-patron.png" style="width: 700px; height: 435px;" /></a></p>
<p><strong>Paso 2</strong>: Designar nombre al patr&oacute;n.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/1.-Designar-nombre-patron.png" target="_blank"><img alt="" src="http://puntosap.com/wp-content/uploads/2011/12/1.-Designar-nombre-patron.png" style="width: 700px; height: 438px;" /></a></p>
<p><strong>Paso 3</strong>: Editar y guardar patr&oacute;n. Al ingresar a la pantalla de edici&oacute;n de patr&oacute;n, veremos que est&aacute; vac&iacute;a, debemos acceder al men&uacute; en la opci&oacute;n Modelo &gt; Patr&oacute;n din&aacute;mico. Aqu&iacute; debemos reemplazar el c&oacute;digo que aparece por defecto &quot;<em>*$&amp;$EXIT</em>&quot; con &quot;<em>*$&amp;$MUSTER</em>&quot; (sin las comillas). De esta manera, el sistema al momento de seleccionar el patr&oacute;n, buscar&aacute; su m&oacute;dulo de funciones asociado (que veremos a continuaci&oacute;n).</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/2.-Transformar-en-patron-dinamico.png" target="_blank"><img alt="" src="http://puntosap.com/wp-content/uploads/2011/12/2.-Transformar-en-patron-dinamico.png" style="width: 664px; height: 312px;" /></a></p>
<p>&nbsp;</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/3.-Editar-y-guardar-patron.png" target="_blank"><img alt="" src="http://puntosap.com/wp-content/uploads/2011/12/3.-Editar-y-guardar-patron.png" style="width: 664px; height: 390px;" /></a></p>
<p><strong>Paso 4</strong>: Crear funci&oacute;n asociada. Ahora que tenemos el patr&oacute;n, debemos crear la funci&oacute;n que generara el c&oacute;digo din&aacute;micamente. El nombre de la funci&oacute;n debe ser &lt;nombre_patr&oacute;n&gt; + &quot;_editor_exit&quot; (sin comillas). En nuestro ejemplo, la funci&oacute;n a crear es <em>ZUSER_DATE_TIME_EDITOR_EXIT</em>. Con esto, todas las l&iacute;neas que escribamos en la tabla de par&aacute;metro dentro de la funci&oacute;n, aparecer&aacute; en el c&oacute;digo fuente al invocar nuestro patr&oacute;n.</p>
<p><strong>Paso 5</strong>: Definir par&aacute;metro de salida de la funci&oacute;n. La funci&oacute;n debe contener un par&aacute;metro &quot;Tabla&quot;, con nombre <em>BUFFER</em>, de tipo <em>RSWSOURCET</em>. Esta tabla es de tipo string, y todas las l&iacute;neas que se agreguen en ella ser&aacute;n las que muestre el patr&oacute;n en nuestro programa destino al invocarlo.</p>
<p><strong>Paso 6</strong>: Codificaci&oacute;n de la funcionalidad (la parte din&aacute;mica). Como ya les dije, se imprime el nombre de usuario, la fecha y la hora, con caracteres decorativos y como comentario. El c&oacute;digo de ejemplo es el siguiente:</p>
<pre class="brush: abap; title: ; notranslate">
FUNCTION zuser_date_time_editor_exit.
*&quot;----------------------------------------------------------------------
*&quot;*&quot;Interfase local
*&quot;  TABLES
*&quot;      BUFFER TYPE  RSWSOURCET
*&quot;----------------------------------------------------------------------
  DATA: ld_date(10) TYPE c,
        ld_time(8) TYPE c.

  WRITE sy-datlo TO ld_date.
  WRITE sy-uzeit TO ld_time.

  REFRESH: buffer.
  CLEAR: buffer.
  buffer = '*----------------------'.
  APPEND buffer.

  CLEAR: buffer.
  CONCATENATE '* Usuario: ' sy-uname INTO buffer RESPECTING BLANKS.
  APPEND buffer.

  CLEAR: buffer.
  CONCATENATE '* Fecha  : ' ld_date INTO buffer RESPECTING BLANKS.
  APPEND buffer.

  CLEAR: buffer.
  CONCATENATE '* Hora   : ' ld_time INTO buffer RESPECTING BLANKS.
  APPEND buffer.

  CLEAR: buffer.
  buffer = '*----------------------'.
  APPEND buffer.
  CLEAR: buffer.

ENDFUNCTION.
</pre>
<p>Grabamos y activamos la funci&oacute;n (m&eacute;todo abreviado Ctrl+F3). Con esto queda terminado el patr&oacute;n din&aacute;mico, para poder probarlo vamos a nuestro programa, y con el bot&oacute;n &quot;Modelo&quot; seleccionamos la opci&oacute;n &quot;Otro&quot; e ingresamos el nombre definido (<em>ZUSER_DATE_TIME)</em>.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/4.-Utilizar-patron-seleccionar.png" target="_blank"><img alt="" src="http://puntosap.com/wp-content/uploads/2011/12/4.-Utilizar-patron-seleccionar.png" style="width: 700px; height: 369px;" /></a></p>
<p>&nbsp;</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/5.-Utilizar-patron-resultado.png" target="_blank"><img alt="" src="http://puntosap.com/wp-content/uploads/2011/12/5.-Utilizar-patron-resultado.png" style="width: 620px; height: 235px;" /></a></p>
<p>Finalmente, una consideraci&oacute;n importante es que la funci&oacute;n deber&iacute;a ser creada como objeto local (paquete $TMP), ya que por norma nunca desarrollamos en otros ambientes, con lo cual no necesitamos este patr&oacute;n y menos su funci&oacute;n asociada.</p>
<p>Espero les sea &uacute;til, ya que ayuda a agilizar el trabajo.</p>
<p>&nbsp;</p>
<p>Hasta la pr&oacute;xima!</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/tutoriales/tutorial-para-crear-patron-de-codigo-fuente-dinamico/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Validación de Identificador Fiscal (NIF)</title>
		<link>http://puntosap.com/codigo_util/validacion-de-identificador-fiscal-nif/</link>
		<comments>http://puntosap.com/codigo_util/validacion-de-identificador-fiscal-nif/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 15:08:29 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Código útil]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[fiscal]]></category>
		<category><![CDATA[funcion]]></category>
		<category><![CDATA[NIF]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SE37]]></category>
		<category><![CDATA[validacion]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=180</guid>
		<description><![CDATA[Para validar el n&#250;mero de identificaci&#243;n fiscal (NIF), SAP nos provee una funci&#243;n estandar que hace todo el trabajo por nosotros. Se le deben pasar algunos parametros m&#237;nimos para que determine el validador correspondiente. Por ejemplo en Chile existe el RUT, que se valida con M&#243;dulo 11. La funci&#243;n (SE37) se llama TAX_NUMBER_CHECK, y el [...]]]></description>
			<content:encoded><![CDATA[<p>Para validar el n&uacute;mero de identificaci&oacute;n fiscal (NIF), SAP nos provee una funci&oacute;n estandar que hace todo el trabajo por nosotros. Se le deben pasar algunos parametros m&iacute;nimos para que determine el validador correspondiente. Por ejemplo en Chile existe el RUT, que se valida con <a href="http://es.wikipedia.org/wiki/C%C3%B3digo_de_control" target="_blank">M&oacute;dulo 11</a>.</p>
<p>La <strong>funci&oacute;n</strong> (SE37) se llama <em>TAX_NUMBER_CHECK</em>, y el c&oacute;digo implementado es algo as&iacute;:</p>
<p><span id="more-180"></span></p>
<pre class="brush: abap; title: ; notranslate">
START-OF-SELECTION.
* EJEMPLO FUNCION VALIDAR NIF.
  CALL FUNCTION 'TAX_NUMBER_CHECK'
    EXPORTING
      country             = 'CL'     &quot; Pais (obligatorio)
*     NATURAL_PERSON_FLAG = 'X'      &quot; Indicador persona natural
*     REGION              = ' '      &quot; Region
*     STKZU               = ' '      &quot; Sujeto a IVA
      tax_code_1          = '1-9'    &quot; NIF 1
*     TAX_CODE_2          = ' '      &quot; NIF 2
*     TYPE_OF_TAX_CODE_1  = ' '      &quot; Tipo de NIF 1
*     TAX_CODE_3          = ' '      &quot; NIF 3
*     TAX_CODE_4          = ' '      &quot; NIF 4
    EXCEPTIONS
      not_valid           = 1
      different_fprcd     = 2
      OTHERS              = 3.
  IF sy-subrc &lt;&gt; 0.
* Control de errores
    CASE sy-subrc.
      WHEN 1.
        WRITE: 'Código NIF inválido'.
      WHEN 2.
        WRITE: 'Código NIF 1 no coincide con NIF 2'.
      WHEN 3.
        WRITE: 'Error en proceso'.
    ENDCASE.
  ELSE.
    WRITE: 'NIF correcto'.
  ENDIF.
</pre>
<p>Espero les sea &uacute;til.</p>
<p>Hasta la pr&oacute;xima</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/codigo_util/validacion-de-identificador-fiscal-nif/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejemplo de ALV con clase (cl_salv_table)</title>
		<link>http://puntosap.com/tutoriales/ejemplo-de-alv-con-clase-cl_salv_table/</link>
		<comments>http://puntosap.com/tutoriales/ejemplo-de-alv-con-clase-cl_salv_table/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 15:08:36 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Código útil]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[agregacion]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[cabecera]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[configurar]]></category>
		<category><![CDATA[estandar]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[ordenar]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[totalizar]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=166</guid>
		<description><![CDATA[Hola! En esta oportunidad, les traigo una clase que me pareci&#243; realmente top. Se trata de una ALV, la cual requiere un m&#237;nimo de configuraci&#243;n para funcionar. Adicionalmente tiene muchas opciones para configurar como layout, cabecera, pie, etc. Los pasos m&#237;nimos para su funcionamiento son: Implementaci&#243;n Paso 1: Declaraci&#243;n de objetos. Paso 2: Recuperaci&#243;n de [...]]]></description>
			<content:encoded><![CDATA[<p>Hola! En esta oportunidad, les traigo una clase que me pareci&oacute; realmente top. Se trata de una ALV, la cual requiere un m&iacute;nimo de configuraci&oacute;n para funcionar. Adicionalmente tiene muchas opciones para configurar como layout, cabecera, pie, etc.</p>
<p>Los pasos m&iacute;nimos para su funcionamiento son:</p>
<p><span id="more-166"></span></p>
<p><strong><u>Implementaci&oacute;n</u></strong></p>
<p><strong>Paso 1</strong>: Declaraci&oacute;n de objetos.</p>
<pre class="brush: abap; title: ; notranslate">
* Variables Globales
* Formato de la tabla de salida
TYPES: BEGIN OF ty_salida,
        matnr LIKE mara-matnr,
        werks LIKE marc-werks,
        lgort LIKE mard-lgort,
        labst LIKE mard-labst,
        char1 TYPE char1,
       END OF ty_salida.
DATA: ti_salida TYPE STANDARD TABLE OF ty_salida,
      wa_salida TYPE ty_salida.
* Datos ALV
DATA: gr_table_alv   TYPE REF TO cl_salv_table,        &quot; Objeto ALV
      gr_functions TYPE REF TO cl_salv_functions_list, &quot; Funciones del ALV
      gr_content TYPE REF TO cl_salv_form_element.     &quot; Cabecera
</pre>
<p><strong>Paso 2</strong>: Recuperaci&oacute;n de datos.</p>
<pre class="brush: abap; title: ; notranslate">
START-OF-SELECTION.
* Recuperacion de datos
  SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE ti_salida.
  LOOP AT ti_salida INTO wa_salida.

    SELECT SINGLE werks
      FROM marc
      INTO wa_salida-werks
     WHERE matnr = wa_salida-matnr.

    SELECT SINGLE lgort labst
      FROM mard
      INTO CORRESPONDING FIELDS OF wa_salida
     WHERE matnr = wa_salida-matnr
       AND werks = wa_salida-werks.
    wa_salida-char1 = 'X'.

    MODIFY ti_salida FROM wa_salida.
  ENDLOOP.
</pre>
<p><strong>Paso 3</strong>: Crear el objeto ALV y asignarle la tabla de datos.</p>
<pre class="brush: abap; title: ; notranslate">
END-OF-SELECTION.
  TRY.
* Crear el objeto ALV a partir de la tabla de salida
      cl_salv_table=&gt;factory(
        IMPORTING
          r_salv_table = gr_table_alv
        CHANGING
          t_table      = ti_salida ).
    CATCH cx_salv_msg.                                  &quot;#EC NO_HANDLER
  ENDTRY.
</pre>
<p><strong>Paso 4 </strong><em>(opcional)</em>: Activar funciones est&aacute;ndar. Sin este paso, simplemente no se mostrar&aacute; barra de herramientas (ordenar, totalizar, filtrar, etc.)</p>
<pre class="brush: abap; title: ; notranslate">
* Activar todas las funciones estandar del ALV
  gr_functions = gr_table_alv-&gt;get_functions( ).
  gr_functions-&gt;set_all( abap_true ).
* Defino cabecera
  PERFORM build_header CHANGING gr_content.
  gr_table_alv-&gt;set_top_of_list( gr_content ).
*
*
*&amp;---------------------------------------------------------------------*
*&amp;      Form  build_header
*&amp;---------------------------------------------------------------------*
*      --&gt;CR_CONTENT text
*----------------------------------------------------------------------*
FORM build_header CHANGING cr_content TYPE REF TO cl_salv_form_element.

  DATA: lr_grid   TYPE REF TO cl_salv_form_layout_grid,
        lr_grid_1 TYPE REF TO cl_salv_form_layout_grid,
        lr_label  TYPE REF TO cl_salv_form_label,
        lr_text   TYPE REF TO cl_salv_form_text,
        lr_layout  TYPE REF TO cl_salv_form_layout_logo,
        ld_text(255) TYPE c.
* crear objeto grilla para cabecera
  CREATE OBJECT lr_grid.
* Crear objeto layout para almacenar grilla e imagen
  CREATE OBJECT lr_layout.

* Titulo del reporte
  ld_text = 'Título Reporte ALV' .
  lr_grid-&gt;create_header_information(
  row = 1
  column = 25
  text    = ld_text
  tooltip = ld_text ).

  lr_grid-&gt;add_row( ).
  lr_grid_1 = lr_grid-&gt;create_grid(
                row    = 3
                column = 1 ).
* Cantidad de registros encontrados: etiqueta
  ld_text = 'Cantidad de Registros'.
  lr_label = lr_grid_1-&gt;create_label(
    row     = 1
    column  = 1
    text    = ld_text
    tooltip = ld_text ).
* Cantidad de registros encontrados: valor
  DESCRIBE TABLE ti_salida LINES ld_text.
  lr_text = lr_grid_1-&gt;create_text(
    row     = 1
    column  = 2
    text    = ld_text
    tooltip = ld_text ).

* Fecha de ejecucion: etiqueta
  lr_label-&gt;set_label_for( lr_text ).
  ld_text = 'Fecha'.
  lr_label = lr_grid_1-&gt;create_label(
    row    = 5
    column = 1
    text    = ld_text
    tooltip = ld_text ).
* Fecha de ejecucion: valor
  WRITE sy-datlo TO ld_text.
  lr_text = lr_grid_1-&gt;create_text(
    row    = 5
    column = 2
    text    = ld_text
    tooltip = ld_text ).
  lr_label-&gt;set_label_for( lr_text ).

* Transaccion OAER -&gt;PICTURES -&gt; OT -&gt; Nombre de logo
* Asignar logotipo a la derecha
  lr_layout-&gt;set_right_logo( 'LOGO_BN').
* Agregar la información de cabecera a la izquierda
  lr_layout-&gt;set_left_content( lr_grid ).
*  cr_content = lr_layout.
  cr_content = lr_layout.

ENDFORM.                    &quot; build_header
</pre>
<p><strong>Paso 6</strong>: Mostrar ALV.</p>
<pre class="brush: abap; title: ; notranslate">
* Mostrar ALV
  gr_table_alv-&gt;display( ).
</pre>
<p><strong><u>Consideraciones finales</u></strong></p>
<p>Este m&eacute;todo de creaci&oacute;n de ALVs, si bien es muy flexible y permite una r&aacute;pida implementaci&oacute;n, tambi&eacute;n tiene algunas limitaciones a considerar, entre las que se encuentran:</p>
<ul>
<li>M&aacute;ximo de 90 columnas.</li>
<li>El ancho m&aacute;ximo de una columna es de 128 caracteres.</li>
<li>Se permite 9 niveles de ordenamiento y totalizaci&oacute;n.</li>
<li>El campo a totalizar debe ser grande como para tambi&eacute;n poder mostrar la suma o agregaci&oacute;n.</li>
<li>Solo permite mostrar tablas de tipo plano.</li>
<li>No se permite campos de tipo &ldquo;input&rdquo; o modificables.</li>
</ul>
<p>Pueden ver la documentaci&oacute;n est&aacute;ndar asociada a la clase, en ingl&eacute;s, <a href="http://puntosap.com/wp-content/uploads/2011/12/Documentacion-cl_salv_table.pdf" target="_blank">ac&aacute;</a>.</p>
<p>Espero sus comentarios.</p>
<p>Hasta la pr&oacute;xima!</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/tutoriales/ejemplo-de-alv-con-clase-cl_salv_table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asociar logotipo en cabecera de reporte ALV</title>
		<link>http://puntosap.com/tutoriales/asociar-logotipo-en-cabecera-de-reporte-alv/</link>
		<comments>http://puntosap.com/tutoriales/asociar-logotipo-en-cabecera-de-reporte-alv/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 18:32:33 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[cabecera]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=159</guid>
		<description><![CDATA[Para poder visualizar una imagen en la cabecera de un reporte ALV, debemos primero crear el documento de servicio negocio (BSD, Business Service Document), para luego poder referenciarlo. A continuaci&#243;n, detallo los pasos necesarios para su implementaci&#243;n. Consideraciones previas Debemos tener autorizaci&#243;n para acceder a la transacci&#243;n OAER. La imagen a utilizar debe estar creada. [...]]]></description>
			<content:encoded><![CDATA[<p>Para poder visualizar una imagen en la cabecera de un reporte ALV, debemos primero crear el documento de servicio negocio (BSD, Business Service Document), para luego poder referenciarlo. A continuaci&oacute;n, detallo los pasos necesarios para su implementaci&oacute;n.</p>
<p><span id="more-159"></span></p>
<p><strong><u>Consideraciones previas</u></strong></p>
<p>Debemos tener autorizaci&oacute;n para acceder a la transacci&oacute;n OAER. La imagen a utilizar debe estar creada.</p>
<p><strong><u>Pasos de ejecuci&oacute;n</u></strong></p>
<p><strong>Paso 1</strong>: Ingresar a transacci&oacute;n OAER. Ingresar como nombre de clase &quot;PICTURES&quot;, tipo de clase &quot;OT&quot; y clave del objeto el nombre del logo que deseen crear, por ej.: &quot;LOGO_ALV&quot;.&nbsp; Una vez ingresados los datos ejecutar el programa.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/Transaccion_OAER_inicial.png" target="_blank"><img alt="Pantalla de selección" src="http://puntosap.com/wp-content/uploads/2011/12/Transaccion_OAER_inicial.png" style="width: 500px; height: 234px;" /></a></p>
<p><strong>Paso 2</strong>: Crear imagen. Para esto, en el panel inferior, en la pesta&ntilde;a &quot;Crear&quot;, expandir las carpetas y dar doble-click en el tipo de documento &quot;Imagen&quot;.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/Transaccion_OAER_paso2.png" target="_blank"><img alt="Crear objeto" src="http://puntosap.com/wp-content/uploads/2011/12/Transaccion_OAER_paso2.png" style="width: 500px; height: 545px;" /></a></p>
<p><strong>Paso 3</strong>: En la ventana popup que se despleg&oacute;, ingresar una descripci&oacute;n para la imagen, y seleccionar el archivo que se desea subir y aceptar. Listo!</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/Transaccion_OAER_asoc_img.png" target="_blank"><img alt="Asociar archivo" src="http://puntosap.com/wp-content/uploads/2011/12/Transaccion_OAER_asoc_img.png" style="width: 500px; height: 542px;" /></a></p>
<p><strong><u>Consideraciones finales</u></strong></p>
<p>Ya tenemos creado el logo, ahora solo nos resta asociarlo a la ALV con el nombre definido en la pantalla de seleccion como clave del objeto (en mi caso &quot;LOGO_ALV&quot;).</p>
<p>Saludos y &eacute;xitos!</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/tutoriales/asociar-logotipo-en-cabecera-de-reporte-alv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Medición de memoria en programas Abap</title>
		<link>http://puntosap.com/consejos_trucos/medicion-de-memoria-en-programas-abap/</link>
		<comments>http://puntosap.com/consejos_trucos/medicion-de-memoria-en-programas-abap/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 17:15:09 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Consejos y Trucos]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[optimizar]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=146</guid>
		<description><![CDATA[Continuando con la tem&#225;tica de optimizar nuestro c&#243;digo en pos de una mejor implementaci&#243;n y funcionamiento general del servidor, les quiero mostrar una clase que sirve como herramienta muy &#250;til para medir los niveles de uso de memoria de nuestros programas Abap. La idea general es que mediante estos m&#233;todos, insert&#225;ndolos en lugares clave de [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando con la tem&aacute;tica de optimizar nuestro c&oacute;digo en pos de una mejor implementaci&oacute;n y funcionamiento general del servidor, les quiero mostrar una clase que sirve como herramienta muy &uacute;til para medir los niveles de uso de memoria de nuestros programas Abap.</p>
<p>La idea general es que mediante estos m&eacute;todos, insert&aacute;ndolos en lugares clave de nuestros programas, por ejemplo antes y despu&eacute;s de una recuperaci&oacute;n de datos grande, podremos tener la sensibilidad para saber donde debemos ajustar e incluso liberar memoria en nuestros programas.</p>
<p><span id="more-146"></span></p>
<p><strong>La clase</strong></p>
<p>Para poder realizar estas mediciones, utilizaremos la clase <em>CL_ABAP_MEMORY_UTILITIES</em> (transacci&oacute;n SE24), la cual contiene los siguientes m&eacute;todos:</p>
<ul>
<li><strong>GET_MEMORY_SIZE_OF_OBJECT</strong>. A partir de un objeto enviado como par&aacute;metro, devuelve informaci&oacute;n detallada de sus caracter&iacute;sticas y uso de memoria.</li>
</ul>
<p style="margin-left:35.4pt;"><em>Ejemplo de utilizaci&oacute;n</em></p>
<pre class="brush: abap; title: ; notranslate">
  DATA: gt_vbak TYPE STANDARD TABLE OF vbak WITH HEADER LINE,
        ld_alloc TYPE abap_msize,
        ld_used TYPE abap_msize.
  CALL METHOD cl_abap_memory_utilities=&gt;get_memory_size_of_object
    EXPORTING
      object       = gt_vbak
    IMPORTING
      sizeof_alloc = ld_alloc
      sizeof_used  = ld_used.
</pre>
<ul>
<li><strong>GET_TOTAL_USED_SIZE</strong>. Valor neto de la memoria utilizada por el programa en el punto en que se invoc&oacute; el m&eacute;todo.</li>
</ul>
<p style="margin-left:35.4pt;"><em>Ejemplo de utilizaci&oacute;n</em></p>
<pre class="brush: abap; title: ; notranslate">
  DATA: size TYPE abap_msize.
  CALL METHOD cl_abap_memory_utilities=&gt;get_total_used_size
    IMPORTING
      size = size.
</pre>
<ul>
<li><strong>WRITE_MEMORY_CONSUMPTION_FILE</strong>. M&eacute;todo que no devuelve datos (s&oacute;lo el c&oacute;digo de retorno si es que pudo o no grabar), pero que genera un archivo detallado del uso de memoria. Para visualizar el archivo y realizar comparativas con archivos previos, se debe utilizar la transacci&oacute;n S_MEMORY_INSPECTOR.</li>
</ul>
<p style="margin-left:35.4pt;"><em>Ejemplo de utilizaci&oacute;n</em></p>
<pre class="brush: abap; title: ; notranslate">
  DATA: ret_code TYPE i.
  CALL METHOD cl_abap_memory_utilities=&gt;write_memory_consumption_file
    RECEIVING
      rc = ret_code.
</pre>
<ul>
<li><strong>DO_GARBAGE_COLLECTION</strong>. Este m&eacute;todo borra de memoria todos los objetos que ya no tienen referencia (y por tanto ya no se necesitan). Si bien la ejecuci&oacute;n de este m&eacute;todo ocurre en ciertos intervalos, puede ser necesario ejecutarla manualmente. Un ejemplo de objetos des-referenciados, es cuando se ejecuta una rutina que declara variables locales no est&aacute;ticas; al finalizar esta rutina, las variables ya no est&aacute;n referenciadas y pueden ser borradas.</li>
</ul>
<p style="margin-left:35.4pt;"><em>Ejemplo de utilizaci&oacute;n</em></p>
<pre class="brush: abap; title: ; notranslate">
  CALL METHOD cl_abap_memory_utilities=&gt;do_garbage_collection.
</pre>
<p>&nbsp;</p>
<p>Espero sus comentarios!</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/consejos_trucos/medicion-de-memoria-en-programas-abap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejemplo de ALV reutilizable</title>
		<link>http://puntosap.com/codigo_util/ejemplo-de-alv-reutilizable/</link>
		<comments>http://puntosap.com/codigo_util/ejemplo-de-alv-reutilizable/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 19:02:00 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Código útil]]></category>
		<category><![CDATA[ABAP]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[reporte]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=133</guid>
		<description><![CDATA[En esta entrega, quiero presentar el c&#243;digo fuente de un reporte que hice hace algunos a&#241;os, el cual reutilizo cada vez que necesito un ALV Grid. Adicionalmente, quise dejar la parte funcional (recuperaci&#243;n de datos), ya que puede servir en el caso puntual. Esta funcionalidad se trata de un reporte de existencias por tipo de [...]]]></description>
			<content:encoded><![CDATA[<p>En esta entrega, quiero presentar el c&oacute;digo fuente de un reporte que hice hace algunos a&ntilde;os, el cual reutilizo cada vez que necesito un ALV Grid. Adicionalmente, quise dejar la parte funcional (recuperaci&oacute;n de datos), ya que puede servir en el caso puntual. Esta funcionalidad se trata de un reporte de existencias por tipo de stock.</p>
<p><span id="more-133"></span></p>
<p><strong><u>Instalaci&oacute;n</u></strong></p>
<p><strong>Paso 1</strong>: Para proceder con el flujo l&oacute;gico del desarrollo (dise&ntilde;o -&gt; implementaci&oacute;n), se deben crear los siguientes objetos de diccionario:</p>
<ul>
<li><a href="http://puntosap.com/wp-content/uploads/2011/12/zmmest_informe_stock_tipo_alv.html" target="_blank">Estructura de salida para el ALV</a>. De esta forma, si queremos ajustar los textos o agregar campos, solo debemos modificar la estructura y recuperar los datos correspondientes.</li>
<li><a href="http://puntosap.com/wp-content/uploads/2011/12/zmmt_saldo_stock.html" target="_blank">Tabla de saldos</a>. Esta tabla es opcional si es que estas interesado en la funcionalidad del reporte ejemplo.</li>
</ul>
<p style="margin-left:18.0pt;"><em>NOTA: para los elementos de datos Z que existan, solo fueron creados para cumplir con los nombres solicitados, pueden crearse uno similar o utilizar referencia est&aacute;ndar.</em></p>
<p><strong>Paso 2</strong>: Crear el reporte. Seg&uacute;n el est&aacute;ndar utilizado y los criterios de mejores pr&aacute;cticas, el programa est&aacute; dividido en tres componentes:</p>
<ul>
<li><a href="http://puntosap.com/wp-content/uploads/2011/12/zmmrep_inform_stock_x_tipo.html" target="_blank">Reporte ejecutable</a>. Es el programa principal, declara los eventos del reporte y permite una r&aacute;pida visualizaci&oacute;n de su estructura y contenido.</li>
<li><a href="http://puntosap.com/wp-content/uploads/2011/12/zmminc_inform_stock_x_tipo_top.html" target="_blank">Programa &ldquo;include&rdquo;, declaraciones y pantallas</a>. Contiene todos los objetos globales, as&iacute; como tambi&eacute;n definiciones de pantalla.</li>
<li><a href="http://puntosap.com/wp-content/uploads/2011/12/zmminc_inform_stock_x_tipo_f01.html" target="_blank">Programa &ldquo;include&rdquo;, pool de rutinas</a>. Toda la funcionalidad est&aacute; desarrollada en este include. Por norma personal y para mantener la performance del validador de sintaxis, si el mismo supera las 3.000 (tres mil) l&iacute;neas de c&oacute;digo, lo divido en mas includes (_F02, _F03, etc.).</li>
</ul>
<p><strong>Paso 3</strong>: Dentro del c&oacute;digo fuente del reporte ejecutable se encuentra, como comentarios en la parte final, listados para definir los siguientes objetos de texto relacionados:</p>
<ul>
<li>Textos de selecci&oacute;n</li>
<li>S&iacute;mbolos de texto</li>
<li>Entradas en clase de mensaje. En este punto tambi&eacute;n aplica la <em>NOTA</em> del paso 1, pueden reutilizar una clase propia o crear una nueva. Lo importante es que el sentido de los mensajes no se pierda.</li>
</ul>
<p><strong><u>Consideraciones finales</u></strong></p>
<p>Como pueden observar, esta forma de organizar y estructurar, nos permitir&aacute; de manera muy r&aacute;pida generar nuevos reportes modificando solo algunos elementos, como son:</p>
<ul>
<li>Estructura de salida (la estructura como tal y las referencias en el programa para el nuevo nombre)</li>
<li>Inicializaci&oacute;n y Recuperaci&oacute;n de datos</li>
</ul>
<p>Espero sus comentarios, inquietudes, y sugerencias!</p>
<p>Hasta la pr&oacute;xima</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/codigo_util/ejemplo-de-alv-reutilizable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual de ALV Tree (en inglés)</title>
		<link>http://puntosap.com/descargas/manual-de-alv-tree/</link>
		<comments>http://puntosap.com/descargas/manual-de-alv-tree/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 18:55:42 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Descargas]]></category>
		<category><![CDATA[ALV]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[tree]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=125</guid>
		<description><![CDATA[Manual complet&#237;simo, hecho por SAP, que describe a todo detalle las clases intervinientes en la construcci&#243;n de un ALV Tree. Esta en ingl&#233;s. Descargar &#8211;&#62; aqu&#237;]]></description>
			<content:encoded><![CDATA[<p>Manual complet&iacute;simo, hecho por SAP, que describe a todo detalle las clases intervinientes en la construcci&oacute;n de un ALV Tree. Esta en ingl&eacute;s.</p>
<p>Descargar &#8211;&gt; <a href="http://puntosap.com/wp-content/uploads/2011/12/SAP-Tree-Control-ALV.pdf" target="_blank">aqu&iacute;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/descargas/manual-de-alv-tree/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial para obtener nombres de BADIs</title>
		<link>http://puntosap.com/tutoriales/tutorial-para-obtener-nombres-de-badis/</link>
		<comments>http://puntosap.com/tutoriales/tutorial-para-obtener-nombres-de-badis/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 15:48:22 +0000</pubDate>
		<dc:creator>fricadmin</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[ampliacion]]></category>
		<category><![CDATA[BADI]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[depurar]]></category>
		<category><![CDATA[SE24]]></category>

		<guid isPermaLink="false">http://puntosap.com/?p=106</guid>
		<description><![CDATA[Hola de nuevo! Les voy a mostrar los pasos y la t&#233;cnica para obtener las BADIs que est&#225;n activas en cualquier programa est&#225;ndar. Consideraciones previas Debemos tener autorizaci&#243;n para acceder al depurador y a las transacciones SE18, SE19 (opcional) y SE24. El concepto a aplicar es que para ejecutar una BADI el sistema primero valida [...]]]></description>
			<content:encoded><![CDATA[<p>Hola de nuevo! Les voy a mostrar los pasos y la t&eacute;cnica para obtener las BADIs que est&aacute;n activas en cualquier programa est&aacute;ndar.</p>
<p><span id="more-106"></span></p>
<p><strong><u>Consideraciones previas</u></strong></p>
<p>Debemos tener autorizaci&oacute;n para acceder al depurador y a las transacciones SE18, SE19 (opcional) y SE24.</p>
<p>El concepto a aplicar es que para ejecutar una BADI el sistema primero valida si esta se encuentra implementada y su implementaci&oacute;n activa, y en caso afirmativo procede a su ejecuci&oacute;n.</p>
<p>Tomaremos como ejemplo la transacci&oacute;n MIGO para entradas de mercanc&iacute;as.</p>
<p><strong><u>Pasos de ejecuci&oacute;n</u></strong></p>
<p><strong>Paso 1</strong>: Primero debemos insertar un break-point en la clase de consulta, que es la encargada de determinar si hay una implementaci&oacute;n activa para la BADI. Ingresar a transacci&oacute;n SE24, la clase es <em>CL_EXITHANDLER</em>, el m&eacute;todo que nos interesa es <em>GET_INSTANCE</em>. El break-point se puede colocar en cualquier lugar, aunque yo prefiero en la llamada al m&eacute;todo <em>GET_CLASS_NAME_BY_INTERFACE</em>.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/SE24_CL_EXIT_HANDLER.png" target="_blank"><img alt="Acceder a la clase" src="http://puntosap.com/wp-content/uploads/2011/12/SE24_CL_EXIT_HANDLER.png" style="width: 730px; height: 366px; border-width: 1px; border-style: solid; margin: 5px;" /></a></p>
<p><strong>Paso 2</strong>: Con el break-point colocado, nos vamos a la transacci&oacute;n que deseamos analizar, en mi caso la MIGO, y ejecutamos la acci&oacute;n a evaluar (tengan en cuenta que dado el paso 1, el modo depuraci&oacute;n se ejecutara con todas las acciones que se realicen en el sistema, con lo cual presionar F8 cuando se active en una acci&oacute;n no deseada). Al momento de activarse el depurador en la acci&oacute;n deseada (por ejemplo al grabar), veremos que en la llamada al m&eacute;todo <em>get_class_name_by_interface</em> se encuentra un par&aacute;metro EXIT_NAME. Esta variable contendr&aacute; siempre el nombre de la BADI que se est&aacute; evaluando, y por tanto si la implementamos, se activara en esta transacci&oacute;n y en esta acci&oacute;n.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/BREAK-POINT.png" target="_blank"><img alt="Definir break-point" src="http://puntosap.com/wp-content/uploads/2011/12/BREAK-POINT.png" style="width: 730px; height: 665px; border-width: 1px; border-style: solid; margin: 5px;" /></a></p>
<p>Aqu&iacute; se observa para el caso de la MIGO, una de las BADIs que se activa.</p>
<p><a href="http://puntosap.com/wp-content/uploads/2011/12/DEBUG_NOMBRE_BADI.png" target="_blank"><img alt="Nombre de BADI encontrado" src="http://puntosap.com/wp-content/uploads/2011/12/DEBUG_NOMBRE_BADI.png" style="width: 730px; height: 385px; border-width: 1px; border-style: solid; margin: 5px;" /></a></p>
<p><strong>Paso 3</strong>: Finalmente, si encontramos la BADI que necesit&aacute;bamos, solo resta ingresar a la transacci&oacute;n SE18 para crear una implementaci&oacute;n o bien a la SE19 para ver/modificar una existente.</p>
<p><strong><u>Consideraciones finales</u></strong></p>
<p>Debido a que las BADIs existen en todos los programas est&aacute;ndar, hay que tener en cuenta que el break-point se activar&aacute; en forma constante, con lo cual, es recomendable borrarlo una vez finalizado el an&aacute;lisis. Adicionalmente, tener en cuenta que puede ser que una misma BADI se ejecute en m&aacute;s de una transacci&oacute;n, por ejemplo al crear y tambi&eacute;n al modificar cierto documento, de manera que se puede querer agregar condiciones diferentes en cada caso.</p>
<p>LISTO! Con esto podremos analizar cualquier aplicaci&oacute;n est&aacute;ndar y realizar b&uacute;squeda de BADIs!</p>
]]></content:encoded>
			<wfw:commentRss>http://puntosap.com/tutoriales/tutorial-para-obtener-nombres-de-badis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

