<?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>Eneko Olabuenaga</title>
	<atom:link href="http://eneko-olabuenaga.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://eneko-olabuenaga.com</link>
	<description>Perfil profesional</description>
	<lastBuildDate>Thu, 23 Jul 2009 09:45:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SAP &#8211; Actualización de un Table Control tras un CALL TRANSACTION</title>
		<link>http://eneko-olabuenaga.com/sap-actualizacion-de-un-table-control-tras-un-call-transaction/</link>
		<comments>http://eneko-olabuenaga.com/sap-actualizacion-de-un-table-control-tras-un-call-transaction/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 09:42:29 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=160</guid>
		<description><![CDATA[Durante estos últimos días se ha presentado un problema a la hora de implementar una mejora en un cluster de vistas.  La mejora consistía en agregar un botón en cada dynpro que compone el cluster para que al hacer clic se llamase a un programa Z creado previamente que permite cargar datos a una tabla [...]]]></description>
			<content:encoded><![CDATA[<p>Durante estos últimos días se ha presentado un problema a la hora de implementar una mejora en un <code>cluster</code> de vistas.  La mejora consistía en agregar un botón en cada <code>dynpro</code> que compone el <code>cluster</code> para que al hacer clic se llamase a un programa Z creado previamente que permite cargar datos a una tabla cualquiera del diccionario de datos desde archivos en formato Excel, tanto en formato nativo <code>XLS</code> como texto tabulado. </p>
<p>La primera decisión que se tomó, tras realizar las pruebas pertinentes, fue crear una transacción para poder hacer un <code>CALL TRANSACTION</code> ya que al hacer un <code>SUBMIT AND RETURN</code> se producía un error nada más iniciar el programa ya que no se habían informado los campos obligatorios pertinentes y no se deseaba que el usuario viera ese error.</p>
<p>Por lo tanto, se modificaron las <code>dynpros</code> previamente creadas con el &#8220;Generador de dialogos de actualización&#8221; que proporciona <code>SAP</code> para insertar en cada una de ellas un botón que al ser pulsado llamase a una subrutina que implementaba el <code>CALL TRANSACTION</code>.</p>
<p>Tras volver de ese programa era cuando el problema se presentaba: Se había cargado correctamente la tabla de diccionario de datos, pero los cambios no se reflejaban hasta que el usuario entraba de nuevo en el <code>cluster</code>. Obviamente esto no era lo ideal para una interacción correcta, así que se comenzó a buscar una solución.</p>
<p>Tras estudiar las subrutinas estándar se dió con parte de la solución. <code>SAP</code> crea una subrutina <code>GET_DATA_*</code>, cuyo nombre depende de la vista que se vaya a actualizar, que se encarga de cargar los datos a la tabla interna <code>TOTAL</code> propia de los dialogos de actualización.  Sin embargo, esta subrutina no actualizaba correctamente lo que el usuario ve por pantalla. </p>
<p>Se intentó actualizar la tabla interna <code>EXTRACT</code> a mano con el siguiente código fuente, introducido justo detrás del <code>CALL TRANSACTION</code>:</p>
<blockquote><p><code>LOOP AT TOTAL.<br />
  EXTRACT = TOTAL.<br />
  APPEND EXTRACT.<br />
ENDLOOP.<br />
</code></p></blockquote>
<p>Pero el problema persistía. Se procedió pues a estudiar las subrutinas creadas de forma estándar por <code>SAP</code> a la hora de crear un dialogo de actualización y se dio con la subrutina <code>FILL_EXTRACT</code> que, como su nombre indica, se encarga de informar la tabla interna <code>EXTRACT</code>.</p>
<p>Al realizar la prueba llamando a esta subrutina en lugar de hacer el <code>LOOP</code> anterior se vio que, por fin, se actualizaba correctamente el table control. </p>
<p>Por lo tanto la solución adoptada para este caso particular es esta:</p>
<p>Se crea un módulo <code>PBO</code> para controlar la entrada del usuario y dentro del mismo, tras hacer el <code>CALL TRANSACTION</code> se realizan los pasos anteriormente descritos. </p>
<p>Por ejemplo, supóngase que la vista de actualización a actualizar, valga la redundancia, se llama <code>ZV_VISTA_ACT</code>. Para realizar la actualización y el <code>CALL TRANSACTION</code> se deberá crear un módulo <code>PBO</code> como el que sigue:</p>
<blockquote><p><code>MODULE m_user_command OUTPUT.<br />
*Se controla la entrada introducida por el usuario.<br />
  CASE sy-ucomm.<br />
    WHEN 'CLICK'<br/><br />
*Se llama a la transacción que se encarga de cargar la tabla de<br />
*diccionario de datos.<br />
      CALL TRANSACTION 'Z_CARGAR_FICHERO'.<br/><br />
*Ahora con los datos ya cargados se llama a las dos subrutinas<br />
*estándar<br />
      PERFORM get_data_zv_vista_act.<br />
      PERFORM fill_extract.<br/><br />
  ENDCASE.<br />
ENDMODULE.<br />
</code></p></blockquote>
<p>Ambas subrutinas son estándar, creadas por <code>SAP</code> a la hora de generar un diálogo de actualización, por lo tanto, siempre van a existir para un diálogo concreto con la forma:</p>
<blockquote><p><code>GET_DATA_*<br />
FILL_EXTRACT.</code></p></blockquote>
<p>Siendo la primera dependiente del nombre de la vista de actualización en la que se informarán datos, ya que la parte final del nombre de la subrutina será el nombre de dicha vista.</p>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/sap-actualizacion-de-un-table-control-tras-un-call-transaction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP &#8211; Selección de datos dinámica</title>
		<link>http://eneko-olabuenaga.com/sap-seleccion-de-datos-dinamica/</link>
		<comments>http://eneko-olabuenaga.com/sap-seleccion-de-datos-dinamica/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 21:12:34 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=130</guid>
		<description><![CDATA[En ABAP a la hora de acceder a la base de datos se utiliza Open SQL. Una de las ventajas de Open SQL es la capacidad para dinamizar partes de la selección de datos en función de las necesidades del programador. Esto es especialmente útil en ciertos casos:

Se han de seleccionar diferentes campos de una [...]]]></description>
			<content:encoded><![CDATA[<p>En <code>ABAP</code> a la hora de acceder a la base de datos se utiliza <code>Open SQL</code>. Una de las ventajas de <code>Open SQL</code> es la capacidad para dinamizar partes de la selección de datos en función de las necesidades del programador. Esto es especialmente útil en ciertos casos:</p>
<ol>
<li>Se han de seleccionar diferentes campos de una tabla en función de unas condiciones determinadas.</li>
<li>Se ha de seleccionar de una tabla de base de datos diferente en función de unas condiciones determinadas.</li>
<li>Se han de contemplar diferentes condiciones de selección en función de unas condiciones determinadas.</li>
</ol>
<p>Las condiciones pueden ser variadas, pero las más comunes son determinadas por la entrada introducida por el usuario. El poder acceder de manera dinámica a la base de datos propicia mucho la reutilización de código, aunque puede tener desventajas de cara al mantenimiento de los programas y por lo tanto se hace necesaria una extensa y comprensible documentación en aquellos que se utilice este recurso.</p>
<p>A continuación se expone cómo realizar la selección dinámica para cada caso de los comentados anteriormente:</p>
<p><strong>Selección con campos a recuperar dinámicos</strong></p>
<blockquote><p><code>APPEND ‘bukrs belnr dmbtr’ TO sel_list.</code></p>
<p><code> </code><code>SELECT (sel_list)<br />
FROM bseg UP TO 100 ROWS<br />
INTO CORRESPONDING FIELDS OF TABLE li_bseg.</code></p></blockquote>
<p>En este primer ejemplo los campos a recuperar se almacenan en la variable <code>sel_list</code> que se usa más tarde para llevar a cabo la selección. Se intuye la potencia de esta opción si en lugar de esta selección simple se complica un poco más el código</p>
<blockquote><p><code> CASE v_flag.<br />
WHEN c_flag_a.<br />
APPEND 'bukrs belnr' TO sel_list.<br />
WHEN c_flag_b.<br />
APPEND 'belnr dmbtr' TO sel_list.<br />
WHEN OTHERS.<br />
APPEND ‘bukrs belnr dmbtr’ TO sel_list.<br />
ENDCASE.</code></p>
<p><code> </code><code>SELECT (sel_list)<br />
FROM bseg UP TO 100 ROWS<br />
INTO CORRESPONDING FIELDS OF TABLE li_bseg.</code></p></blockquote>
<p>En este segundo ejemplo la lista de campos a recuperar varía en función del valor de la variable <code>v_flag</code> permitiendo recoger unos campos u otros en función de su valor. En la mayoría de los casos esto se puede usar para crear un <code>FORM</code> en el que dependiendo de un parámetro de entrada se realice una selección u otra diferente devolviendo una tabla con los valores deseados.</p>
<p><strong>Selección con tabla fuente dinámica</strong></p>
<blockquote><p><code>FORM f_numero_de_entradas USING p_tabla TYPE string CHANGING p_numero TYPE I.<br />
SELECT count(*) FROM p_tabla INTO p_numero.<br />
ENDFORM</code></p></blockquote>
<p>En este ejemplo se muestra un <code>FORM</code> que devuelve el número de entradas de una tabla pasada por parámetro. De nuevo se puede apreciar la potencia de la selección dinámica para realizar accesos a  la base de datos.</p>
<p>La generalización anterior, considerada en el segundo ejemplo del primer caso, es también perfectamente válida para este caso, obteniendo de nuevo una gran flexibilidad y también un alto nivel de reutilización de código fuente.</p>
<p><strong>Selección con condiciones dinámicas</strong></p>
<p>Este caso es el más utilizado, ya que permite modificar las condiciones de selección en función de las condiciones que el programador crea oportunas, y que normalmente dependerán de lo introducido por pantalla por el usuario.</p>
<blockquote><p><code>SELECTION-SCREEN BEGIN OF BLOCK bl_sel.<br />
PARAMETERS: p_num_art TYPE xfeld RADIOBUTTON GROUP rbg1 DEFAULT 'X',<br />
p_ean11 TYPE xfeld RADIOBUTTON GROUP rbg1.<br />
SELECTION-SCREEN END OF BLOCK bl_sel.<br/><br />
DATA: where_clause TYPE string,<br />
i_mara TYPE mara OCCURS 0.<br/><br />
START-OF-SELECTION.<br/><br />
IF p_num_art IS NOT INITIAL.<br />
where_clause = "WHERE MATNR = 00012'.<br />
ENDIF.<br/><br />
IF p_ean11 IS NOT INITIAL.<br />
where_clause = 'WHERE EAN11 = 0842734892374'.<br />
ENDIF.<br/><br />
SELECT *<br />
INTO TABLE i_mara<br />
FROM mara<br />
(where_clause).</code></p></blockquote>
<p>En el ejemplo se ve cómo la cláusula <code>WHERE</code> varía en función de si el usuario ha elegido <code>p_num_art</code>, seleccionar el artículo cuyo código de artículo sea <code>00012</code>, ó <code>p_ean11</code>, seleccionar el artículo cuyo número de artículo europeo (EAN) sea <code>0842734892374</code>. De nuevo se aprecia la potencia que la selección dinámica encierra.</p>
<p>Es posible además crear la cláusula <code>WHERE</code> concatenando en una variable todas las condiciones que deseemos contemplar, como por ejemplo:</p>
<blockquote><p><code>where_clause = "WHERE matnr = 0012"<br />
IF p_flag_1 IS NOT INITIAL.<br />
CONCATENATE where_clause 'OR ean11 = 0987654321' INTO where_clause SEPARATED BY space.<br />
ELSE.<br />
CONCATENATE where_clause 'OR ean11 = 1234567890' INTO where_clause SEPARATED BY space.<br />
ENDIF.</code></p></blockquote>
<p>En este fragmento de código se define lo siguiente:</p>
<ol>
<li>Si <code>p_flag_1</code> está seleccionado se buscará el artículo cuyo código de artículo sea <code>0012</code> o cuyo EAN sea <code>0987654321.</code></li>
<li>Si <code>p_flag_1</code> no está seleccionado se buscará el rtículo cuyo código de artículo sea <code>0012</code> o cuyo EAN sea <code>1234567890.</code></li>
</ol>
<p>Evidentemente las tres se pueden combinar entre ellas, creando una selección potente, flexible y eficaz que permite reutilizar código y responder a las necesidades del usuario. Sin embargo tanta potencia implica que el programador deberá controlar muy bien los errores que puedan producirse y reaccionar ante ellos, pasando quizá a una selección estática o mostrando un mensaje de error por pantalla por ejemplo.</p>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/sap-seleccion-de-datos-dinamica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP &#8211; Crear una tabla dinámica en tiempo de ejecución</title>
		<link>http://eneko-olabuenaga.com/sap-crear-una-tabla-dinamica-en-tiempo-de-ejecucion/</link>
		<comments>http://eneko-olabuenaga.com/sap-crear-una-tabla-dinamica-en-tiempo-de-ejecucion/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 16:51:40 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=103</guid>
		<description><![CDATA[Es posible que al realizar un programa Z para un cliente, uno se encuentre con la problemática que no sabe en tiempo de compilación de qué tipo va a ser la tabla interna que va a necesitar para tratar los datos. En este escenario es dónde resulta útil el conocer cómo se ha de declarar [...]]]></description>
			<content:encoded><![CDATA[<p>Es posible que al realizar un programa Z para un cliente, uno se encuentre con la problemática que no sabe en tiempo de compilación de qué tipo va a ser la tabla interna que va a necesitar para tratar los datos. En este escenario es dónde resulta útil el conocer cómo se ha de declarar una tabla dinámica, cómo se informa y cómo se acceden a los datos que se han almacenado en su interior.</p>
<p>A la hora de crear una tabla dinámica, lo primero que se debe hacer es declarar las variables que van a servir para su construcción:</p>
<blockquote><p><code>DATA: lv_tabla TYPE dd02l-tabname,<br />
generic_table TYPE REF TO data,<br />
generic_line TYPE REF TO data.</code></p></blockquote>
<p>La variable <code>lv_tabla</code> contiene el nombre de la tabla de diccionario de datos que se usará como base para la creación de la tabla interna. Las variables <code>generic_table</code> y <code>generic_line</code> son referencias a una tabla y a una linea o área de trabajo genéricas. Estas dos últimas variables no son accesibles realmente, y por lo tanto es necesario declarar <code>FIELD-SYMBOLS</code> que servirán como manejadores a la hora de cargar y acceder a los datos.</p>
<blockquote><p><code>FIELD-SYMBOLS: &lt;table&gt; TYPE ANY TABLE,<br />
&lt;wa&gt; TYPE ANY,<br />
&lt;field&gt; TYPE ANY.</code></p></blockquote>
<p>Estos <code>FIELD-SYMBOLS</code> representan a la tabla completa, a un registro dentro de la tabla y a un campo concreto dentro de un registro respectivamente. Sin embargo inicialmente estarán sin asignar y si se intenta mostrar su valor u operar con ellos se producirá un error en tiempo de ejecución. Por lo tanto se debe conocer la forma correcta de asignar y manejar un <code>FIELD-SYMBOL</code> en SAP.</p>
<p>Obviamente, al construir una tabla interna se pretende que almacene datos bien obtenidos desde la base de datos o bien calculados por el propio programa Z. En el segundo caso es bastante probable que el programador ya sepa en tiempo de compilación qué datos tiene que calcular y en qué orden debe de almacenarlos en memoria, así que este tutorial se centra en el primer caso: Recuperar datos desde la base de datos a una tabla dinámica.</p>
<p>Para la generación de la tabla dinámica en tiempo de ejecución partimos del supuesto de que en la variable <code>lv_tabla</code> se encuentra el nombre de la tabla o estructura del diccionario de datos a partir de la cual se desea crear la tabla interna. Para su construcción se aplicará el siguiente fragmento de código <code>ABAP</code></p>
<blockquote><p><code>CREATE DATA generic_table TYPE STANDARD TABLE OF (lv_tabla).<br />
ASSIGN generic_table-&gt;* TO &lt;table&gt;.</code></p>
<p><code> </code><code>CREATE DATA generic_line TYPE (lv_tabla).<br />
ASSIGN generic_line-&gt;* TO &lt;wa&gt;.</code></p></blockquote>
<p>En este momento la variable <code>generic_table</code> será una tabla interna con la estructura de <code>lv_tabla</code> y <code>generic_line</code> será un registro de dicha tabla interna. Además los <code>FIELD-SYMBOLS &lt;table&gt;</code> y <code>&lt;wa&gt;</code> se encontrarán inicializados apuntando a la tabla y al área de trabajo respectivamente. En este momento se puede operar con dichos <code>FIELD-SYMBOLS</code>.</p>
<p>En este momento es cuando el programador puede cargar la información en la tabla interna de la forma habitual, teniendo en cuenta de que la selección tendrá una cláusula <code>FROM</code> dinámica, tal y cómo se puede apreciar en el siguiente fragmento de código:</p>
<blockquote><p><code> SELECT *<br />
INTO CORRESPONDING FIELDS OF TABLE &lt;table&gt;<br />
FROM (lv_tabla).</code></p></blockquote>
<p>Al tratarse de una selección dinámica, es conveniente que el programador trate las excepciones que se pueden producir, en este caso concreto, que no exista la tabla de base de datos indicada en <code>lv_tabla</code>.</p>
<p>A la hora de acceder a los datos de una tabla dinámica creada en tiempo de ejecución puede darse uno de dos casos:</p>
<ol>
<li>El programador conoce el nombre de los campos de la tabla interna</li>
<li>El programador <strong>no</strong> conoce el nombre de los campos de la tabla interna.</li>
</ol>
<p>En el primer caso el acceso al campo deseado se realizará de la siguiente forma:</p>
<blockquote><p><code>CONSTANTS: lv_nombre_campo(255) TYPE C VALUE 'nombre del campo'.</code></p>
<p><code>DATA: lv_valor_campo TYPE tipo_del_campo.</p>
<p></code><code>LOOP AT &lt;table&gt; INTO &lt;wa&gt;.<br />
ASSIGN COMPONENT lv_nombre_campo OF STRUCTURE &lt;wa&gt; TO &lt;field&gt;.<br />
MOVE &lt;field&gt; TO lv_valor_campo.<br />
ENDLOOP.</code></p></blockquote>
<p>En el segundo caso el acceso será parecido, sólo que en lugar de utilizar el nombre del campo se utilizará un índice para el acceso. Dicho índice representa la posición del campo dentro de un registro de la tabla interna creada.</p>
<blockquote><p><code>DATA: lv_indice_campo TYPE I,<br />
lv_valor_campo. TYPE tipo_del_campo</code></p>
<p><code>lv_indice_campo = 3. "Cambiar por la posición deseada.</p>
<p></code><code>LOOP AT &lt;table&gt; INTO &lt;wa&gt;.<br />
ASSIGN COMPONENT lv_indice_campo OF STRUCTURE &lt;wa&gt; TO &lt;field&gt;.<br />
MOVE &lt;field&gt; TO lv_valor_campo.<br />
ENDLOOP.</code></p></blockquote>
<p>En el ejemplo de arriba se accede al tercer campo del registro que se esté tratando actualmente en el interior del bucle de tratamiento de datos. Es posible acceder a cualquier otro campo cambiando el índice, e incluso generalizarlo para que se acceda a todos los campos de un registro.</p>
<p>En ambos casos el programador será el encargado de controlar los errores que se puedan dar durante el proceso, siendo los más habituales:</p>
<ol>
<li>Que el nombre del campo no exista y por lo tanto no se asigne nada al <code> FIELD-SYMBOL &lt;field&gt; </code></li>
<li>Que el registro no tenga tantos campos como el número que se le pase al índice de acceso y por lo tanto no se asigne nada al <code>FIELD-SYMBOL &lt;field&gt;.</code></li>
</ol>
<p>Es posible, mediante la sentencia <code>CHECK &lt;symbol&gt; IS ASSIGNED.</code> comprobar que el <code>FIELD-SYMBOL</code> se encuentra asignado.</p>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/sap-crear-una-tabla-dinamica-en-tiempo-de-ejecucion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP &#8211; Recuperar descripciones de valores de un dominio</title>
		<link>http://eneko-olabuenaga.com/recuperar_descripciones_dominio/</link>
		<comments>http://eneko-olabuenaga.com/recuperar_descripciones_dominio/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 16:18:57 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=89</guid>
		<description><![CDATA[En ocasiones es necesario mostrar las descripciones de los valores fijos que puede tomar un dominio cualquiera, bien sea para mostrarlas al usuario por pantalla o bien para hacer algún tipo de operación con dichas descripciones. El siguiente FORM permite obtener dichas cadenas de texto de una forma simple y rápida. 
*Subrutina de lectura de [...]]]></description>
			<content:encoded><![CDATA[<p>En ocasiones es necesario mostrar las descripciones de los valores fijos que puede tomar un dominio cualquiera, bien sea para mostrarlas al usuario por pantalla o bien para hacer algún tipo de operación con dichas descripciones. El siguiente <code>FORM</code> permite obtener dichas cadenas de texto de una forma simple y rápida. </p>
<blockquote><p><code><em>*Subrutina de lectura de descripciones de valores de un dominio</em><br />
<strong>FORM</strong> recuperar_descripciones TABLES t_domain_values STRUCTURE dd07v USING p_dominio.</code></p>
<p><code> REFRESH: t_domain_values.</code></p>
<p><code><br />
CALL FUNCTION 'RM_DOMAIN_VALUES_GET'<br />
EXPORTING<br />
i_name = p_dominio "Dominio<br />
i_langu = sy-langu<br />
i_read_texts = c_marca "Recupera descripción<br />
IMPORTING<br />
e_domain_values = t_domain_values<br />
EXCEPTIONS<br />
illegal_input = 1<br />
others = 2.</code></p>
<p><code><br />
IF sy-subrc &lt;&gt; 0.<em><br />
</em> REFRESH: t_domain_values.<br />
ENDIF.<br />
<em><br />
</em> <strong>ENDFORM.</strong> <em>" recuperar_descripciones</em></code></p></blockquote>
<p><em><span style="font-style: normal;">La función estándar  <code>'RM_DOMAIN_VALUES_GET'</code> aporta la funcionalidad deseada para este caso mediante el parámetro <code>i_read_texts</code> que deberá tener un valor <code>'X'</code> representado por la constante <code>c_marca</code> declarada de una de las siguientes formas:</span></em></p>
<blockquote><p><code><em><span style="font-style: normal;">CONSTANTS: c_marca TYPE xfeld VALUE 'X' .</span></em></code></p>
<p><code> </code><code><em><span style="font-style: normal;">CONSTANTS: c_marca TYPE c VALUE 'X'.</span></em></code></p></blockquote>
<p>El resultado de la lectura de los valores se almacenará en una tabla con estructura estándar <code>dd07v</code> que contiene un binomio [clave, valor] dónde la clave será uno de los posibles valores que puede adoptar el dominio internamente y el valor será la descripción que, en este caso, es lo que se pretende recuperar. </p>
<p>El objetivo principal de usar este <code>FORM</code> es mostrar las descripciones de los valores posibles en una lista desplegable, en un table control o un listado ALV, cosa que, de cara al usuario, es más comprensible que ver códigos internos.   </p>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/recuperar_descripciones_dominio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Experiencia profesional</title>
		<link>http://eneko-olabuenaga.com/experiencia_profesional/</link>
		<comments>http://eneko-olabuenaga.com/experiencia_profesional/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:50:36 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[principal]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/sap/</guid>
		<description><![CDATA[Octubre 2007 &#8211; Actualidad
Empresa &#8211; Accenture SAP Solutions
Puesto &#8211; Programador ABAP IV
Responsabilidades

Implementar soluciones a medida dentro de SAP R/3 y SAP Retail
Mantenimiento de soluciones implementadas con anterioridad

Julio 2005 &#8211; Agosto 2005
Empresa &#8211; Diario El Correo
Puesto &#8211; Técnico de sistemas
Responsabilidades

Diagnóstico y reparación de ordenadores PC y Mac
Mantenimiento de redes y servidores

Julio 2004 
Empresa &#8211; Diario El [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Octubre 2007 &#8211; Actualidad</strong><br />
<em>Empresa</em> &#8211; Accenture SAP Solutions<br />
<em>Puesto</em> &#8211; Programador ABAP IV<br />
<em>Responsabilidades</em></p>
<ul>
<li>Implementar soluciones a medida dentro de SAP R/3 y SAP Retail</li>
<li>Mantenimiento de soluciones implementadas con anterioridad</li>
</ul>
<p><strong>Julio 2005 &#8211; Agosto 2005</strong><br />
<em>Empresa</em> &#8211; Diario El Correo<br />
<em>Puesto</em> &#8211; Técnico de sistemas<br />
<em>Responsabilidades</em></p>
<ul>
<li>Diagnóstico y reparación de ordenadores PC y Mac</li>
<li>Mantenimiento de redes y servidores</li>
</ul>
<p><strong>Julio 2004 </strong><br />
<em>Empresa</em> &#8211; Diario El Correo<br />
<em>Puesto</em> &#8211; Técnico de sistemas<br />
<em>Responsabilidades</em></p>
<ul>
<li>Diagnóstico y reparación de ordenadores PC y Mac</li>
<li>Mantenimiento de redes y servidores</li>
</ul>
<p><strong>Febrero 2003 &#8211; Junio 2005<br />
</strong><em>Empresa &#8211; </em>Universidad de Deusto<br />
<em>Puesto &#8211; </em>Becario de desarrollo de aplicaciones Web<br />
<em>Responsabilidades</em></p>
<ul>
<li>Creación de soluciones a medida ASP y ASP.NET</li>
<li>Mantenimiento de aplicaciones legacy ASP.</li>
<li>Migración de aplicaciones ASP a ASP.NET.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/experiencia_profesional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Proyectos destacados</title>
		<link>http://eneko-olabuenaga.com/proyectos-destacados/</link>
		<comments>http://eneko-olabuenaga.com/proyectos-destacados/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:45:31 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[principal]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=49</guid>
		<description><![CDATA[Julio 2009
Migración JDEdwards a SAP &#8211; Accenture SAP Solutions
Lenguaje de programación: ABAP IV

Creación de interfases de comunicación entre SAP y sistema gestor de almacenes del cliente
Creación de programas de carga para migración de datos de cliente.

Febrero 2009 &#8211; Mayo 2009
Mantenimiento SAP Retail &#8211; Accenture SAP Solutions
Lenguaje de programación: ABAP IV


Corrección de  incidencias en programas existentes
Desarrollo [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Julio 2009<br />
</strong><em>Migración JDEdwards a SAP &#8211; Accenture SAP Solutions<br />
Lenguaje de programación: ABAP IV</em></p>
<ul>
<li>Creación de interfases de comunicación entre SAP y sistema gestor de almacenes del cliente</li>
<li>Creación de programas de carga para migración de datos de cliente.</li>
</ul>
<p><strong>Febrero 2009 &#8211; Mayo 2009</strong><br />
<em>Mantenimiento SAP Retail &#8211; Accenture SAP Solutions<br />
Lenguaje de programación: ABAP IV<br />
</em></p>
<ul>
<li>Corrección de  incidencias en programas existentes</li>
<li>Desarrollo e implementación de mejoras a petición del cliente</li>
</ul>
<p><strong>Enero 2008 &#8211; Febrero 2009</strong><em><br />
Implantación SAP Retail &#8211; Accenture SAP Solutions<br />
</em><em>Lenguaje de programación: ABAP IV</em></p>
<ul>
<li>Implementación de soluciones a medida dentro de SAP Retail</li>
<li>Corrección de incidencias en programas existentes</li>
<li>Desarrollo e implementación de mejoras a petición del cliente</li>
</ul>
<p><strong>Enero 2007 &#8211; Octubre 2007<br />
</strong><em>Aventura de acción 3D: Fear No More &#8211; Universitat Pompeu Fabra<br />
</em><em>Lenguaje de programación: C++</em></p>
<ul>
<li>Diseño</li>
<li>Programación de la inteligencia artificial.</li>
<li>Programación de un sistema de pistas para el modo de dificultad inferior.</li>
</ul>
<p><strong>Enero 2006 &#8211; Septiembre 2006<br />
</strong><em>Motor y editor de protocolos de red &#8211; Universidad de Deusto<br />
</em><em>Lenguaje de programación: JAVA</em></p>
<ul>
<li>Uso y modificación de librería de serialización existente.</li>
<li>Diseño e implementación de aplicación gráfica de edición de protocolos de red</li>
<li>Diseño e implementación de una máquina de estados finitos (FSM) para su uso como motor de red basada en teoría de máquinas de estados</li>
<li>Diseño e implementación de sistemas de comunicación síncronos y asíncronos.</li>
<li>Documentación del proyecto</li>
</ul>
<p><strong>Año 2005<br />
<span style="font-weight: normal;"><em>Juego de baile: Dance Dance Revolution &#8211; Universidad de Deusto<br />
</em></span></strong><em>Lenguaje de programación: Action Script</em></p>
<ul>
<li><strong> </strong>Diseño e implementación de los menús usando tecnología Flash</li>
<li>Documentación del proyecto</li>
<li>Pruebas e integración</li>
</ul>
<p><em>Estudio de sistemas de ficheros encriptados &#8211; Universidad de Deusto</em></p>
<ul>
<li>Investigación y selección de tres sistemas para las plataformas más utilizadas: Windows, Mac y Linux</li>
<li>Instalación y prueba de los sistemas de ficheros elegidos para el estudio</li>
<li>Documentación y evaluación de los datos obtenidos</li>
</ul>
<p><strong>Año 2003<br />
</strong><em>Juego de acción 3D: El Señor de la Saca &#8211; Universidad de Deusto<br />
</em><em>Tecnologías: Alias Wavefront Maya 4, 3D Studio Max 6, Macromedia Director</em></p>
<ul>
<li>Diseño mecánicas, escenarios y enemigos</li>
<li>Texturización de objetos 3D</li>
<li>Conversión de mallas 3D e integración de escenarios</li>
<li>Producción, monitorización de recursos y planificación</li>
<li>Documentación</li>
<li>Presentación</li>
</ul>
<p><em>Agenda  personal &#8211; Universidad de Deusto<br />
Lenguaje de programación: Visual Basic .NET<br />
</em></p>
<ul>
<li>Diseño e implementación</li>
<li>Pruebas e integración</li>
<li>Documentación</li>
</ul>
<p><em>Página web de contactos &#8211; Universidad de Deusto<br />
Lenguaje de programación: ASP .NET</em></p>
<ul>
<li>Diseño e implementación</li>
<li>Pruebas e integración</li>
<li>Documentación</li>
</ul>
<p><strong>Año 2002<br />
</strong><em>Servidor multicomando &#8211; Universidad de Deusto<br />
Lenguaje de programación: ANSI C<br />
Tecnologías: Sockets</em></p>
<ul>
<li>Diseño e implementación del servidor</li>
<li>Diseño de un sistema de opciones por archivo de configuración</li>
<li>Servidor capaz de aceptar múltiples comandos</li>
<li>Documentación</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/proyectos-destacados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formación académica</title>
		<link>http://eneko-olabuenaga.com/formacion_academica/</link>
		<comments>http://eneko-olabuenaga.com/formacion_academica/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:40:07 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[principal]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.insidenk0.com/?p=1</guid>
		<description><![CDATA[Octubre 2007 
Master en creación de videojuegos  &#8211; Universitat Pompeu Fabra
Septiembre 2006
Ingeniería en informática &#8211; Universidad de Deusto
Septiembre 2004
Ingeniería técnica en informática de gestión &#8211; Universidad de Deusto.
]]></description>
			<content:encoded><![CDATA[<p><strong>Octubre 2007 </strong><br />
<em>Master en creación de videojuegos</em><strong> </strong> &#8211; Universitat Pompeu Fabra</p>
<p><strong>Septiembre 2006<br />
</strong><em>Ingeniería en informática</em> &#8211; Universidad de Deusto</p>
<p><strong>Septiembre 2004<br />
</strong><em>Ingeniería técnica en informática de gestión</em> &#8211; Universidad de Deusto.</p>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/formacion_academica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formación adicional</title>
		<link>http://eneko-olabuenaga.com/formacion-adicional/</link>
		<comments>http://eneko-olabuenaga.com/formacion-adicional/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:30:56 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[principal]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=28</guid>
		<description><![CDATA[Año 2007
Introducción a ABAP IV 
 

 Duración: 180 horas
Impartido por: Accenture SAP Solutions

Año 2005
Seminario de Macromedia Director y Flash


Duración: 45 horas
Impartido por:  Universidad de Deusto

Seminario de seguridad en redes de información


Duración: 45 horas
Impartido por: Universidad de Deusto

Laboratorio de sistemas distribuidos


Duración: 60 horas
Impartido por: Universidad de Deusto

Año 2003
Seminario de aplicaciones Web con .NET

Duración: 60 horas
Impartido [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Año 2007<br />
<span style="font-weight: normal;"><em>Introducción a ABAP IV<strong> </strong></em></span></strong></p>
<p><strong><em><strong> </strong></em></strong></p>
<ul>
<li><span style="font-weight: normal;"><strong><strong> Duración: </strong></strong>180 horas</span></li>
<li><span style="font-weight: normal;"><strong><strong>Impartido por: </strong></strong>Accenture SAP Solutions</span></li>
</ul>
<p><strong>Año 2005</strong><br />
<em>Seminario de Macromedia Director y Flash<br />
</em></p>
<ul>
<li><strong>Duración</strong>: 45 horas</li>
<li><strong>Impartido por</strong>:  Universidad de Deusto</li>
</ul>
<p><em>Seminario de seguridad en redes de información<br />
</em></p>
<ul>
<li><strong>Duración: </strong>45 horas</li>
<li><strong>Impartido por: </strong>Universidad de Deusto</li>
</ul>
<p><em>Laboratorio de sistemas distribuidos<br />
</em></p>
<ul>
<li><strong>Duración: </strong>60 horas</li>
<li><strong>Impartido por: </strong>Universidad de Deusto</li>
</ul>
<p><strong>Año 2003<br />
</strong><em>Seminario de aplicaciones Web con .NET</em></p>
<ul>
<li><strong>Duración:</strong> 60 horas</li>
<li><strong>Impartido por: </strong>Universidad de Deusto</li>
</ul>
<p><em>Seminario de aplicaciones Windows con .NET</em></p>
<ul>
<li><strong>Duración: </strong>60 horas</li>
<li><strong>Impartido por: </strong>Universidad de Deusto</li>
</ul>
<p><strong>Año 2002<br />
</strong><em>Seminario de Linux</em></p>
<ul>
<li><strong>Duración: </strong>60 horas</li>
<li><strong>Impartido por: </strong>Universidad de Deusto</li>
</ul>
<p><strong><em><strong> </strong></em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/formacion-adicional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Áreas de interés</title>
		<link>http://eneko-olabuenaga.com/areas-de-interes/</link>
		<comments>http://eneko-olabuenaga.com/areas-de-interes/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 08:59:10 +0000</pubDate>
		<dc:creator>Eneko  Olabuenaga</dc:creator>
				<category><![CDATA[principal]]></category>

		<guid isPermaLink="false">http://eneko-olabuenaga.com/?p=41</guid>
		<description><![CDATA[Programación para iPhone / iPod Touch


Formación autodidacta en Objective C 2.0 y programación para iPhone.
iPhone Developer registrado con licencia para publicar aplicaciones gratuítas en la App Store.

Producción de videojuegos

Gestión de assets
Planificación y entrega de proyectos

]]></description>
			<content:encoded><![CDATA[<p><em>Programación para iPhone / iPod Touch<br />
</em></p>
<ul>
<li>Formación autodidacta en Objective C 2.0 y programación para iPhone.</li>
<li>iPhone Developer registrado con licencia para publicar aplicaciones gratuítas en la App Store.</li>
</ul>
<p><em>Producción de videojuegos</em></p>
<ul>
<li>Gestión de assets</li>
<li>Planificación y entrega de proyectos</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://eneko-olabuenaga.com/areas-de-interes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
