<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3335159510606860442</id><updated>2012-02-16T15:32:17.650Z</updated><category term='Personal'/><category term='Elementos de datos'/><category term='Reports'/><category term='Herramientas'/><category term='SQL'/><category term='CMOD'/><category term='Call Transaction'/><category term='cubbic'/><category term='SE11'/><category term='ALV'/><category term='Transacciones'/><category term='SE16N'/><category term='Tablas SAP'/><category term='Plantillas'/><category term='Ficheros'/><category term='STATUS GUI'/><category term='Submit'/><title type='text'>Programas ABAP</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-3301007190596646683</id><published>2011-12-16T12:38:00.002Z</published><updated>2011-12-16T12:44:13.494Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALV'/><category scheme='http://www.blogger.com/atom/ns#' term='Herramientas'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Editor SQL y generador de ALV para SAP</title><content type='html'>De parte de Tamas Holics me llegan dos herramientas que ha programado para sap:&lt;br /&gt;&lt;br /&gt;- Un editor de SQL para SAP, que podéis encontrar aquí:&lt;br /&gt;http://www.hovitaga.com/opensql-editor-overview&lt;br /&gt;&lt;br /&gt;- Un generador de Reports, que puede crear ALV basados en consultas SQL, y que podéis encontrar aquí&lt;br /&gt;http://www.hovitaga.com/report-generator-overview&lt;br /&gt;con un vídeo de muestra aquí:&lt;br /&gt;http://www.youtube.com/watch?v=cKSBvz_sd98&lt;br /&gt;&lt;br /&gt;Amablemente ha creado versiones gratuitas de estas herramientas que podéis bajar y probar en vuestro sistema. Solo hay que bajarlas, hacerles un copy/paste en la SE38 y activar.&lt;br /&gt;&lt;br /&gt;Las versiones gratuitas se pueden descargar aquí:&lt;br /&gt;http://www.hovitaga.com/try&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-3301007190596646683?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/3301007190596646683/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=3301007190596646683' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/3301007190596646683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/3301007190596646683'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2011/12/editor-sql-y-generador-de-alv-para-sap.html' title='Editor SQL y generador de ALV para SAP'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-8620911095622461780</id><published>2008-03-06T11:49:00.006Z</published><updated>2008-03-06T11:59:34.895Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tablas SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SE16N'/><category scheme='http://www.blogger.com/atom/ns#' term='Transacciones'/><title type='text'>Entradas en tabla con la SE16N</title><content type='html'>&lt;div&gt;&lt;div&gt;La transacción SE16N permite modificar, sin programas de carga, las entradas de una tabla. Para ello, hay que seguir los siguientes pasos:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;1. Introducir la transacción SE16N (evidentemente).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;2. Introducimos el nombre de la tabla (ZTABLA), y le damos a INTRO para que aparezcan los campos de dicha tabla&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5174595888448470226" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_02ypv8zpHEQ/R8_bi1sq_NI/AAAAAAAAAB4/MwhTpv7AYX8/s320/se16n_1.jpg" border="0" /&gt;&lt;/p&gt;&lt;p&gt;3. En la ventana donde introducimos las transacciones de la barra de herramientas, escribimos &amp;amp;SAP_EDIT&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5174596266405592290" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_02ypv8zpHEQ/R8_b41sq_OI/AAAAAAAAACA/4Ci4jixxIy4/s320/se16n_2.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;4. Finalmente, introducimos los criterios de selección que querramos modificar, ejecutamos (con F8) y nos aparecerá el modo de edición, donde podremos crear entradas, borrarlas o modificarlas.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5174596914945654002" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_02ypv8zpHEQ/R8_celsq_PI/AAAAAAAAACI/HQgfkSrI2sY/s320/se16n_3.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-8620911095622461780?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/8620911095622461780/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=8620911095622461780' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/8620911095622461780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/8620911095622461780'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2008/03/entradas-en-tabla-con-la-se16n.html' title='Entradas en tabla con la SE16N'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_02ypv8zpHEQ/R8_bi1sq_NI/AAAAAAAAAB4/MwhTpv7AYX8/s72-c/se16n_1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-1720329526122278749</id><published>2008-03-06T11:42:00.006Z</published><updated>2008-03-06T11:54:20.900Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='CMOD'/><category scheme='http://www.blogger.com/atom/ns#' term='SE11'/><category scheme='http://www.blogger.com/atom/ns#' term='Transacciones'/><category scheme='http://www.blogger.com/atom/ns#' term='Elementos de datos'/><title type='text'>Modificar denominaciones de campo sin la SE11</title><content type='html'>&lt;div&gt;En ocasiones, nos es imposible modificar las denominaciones de campo de un elemento de datos.&lt;br /&gt;&lt;br /&gt;Normalmente, introducimos en la transacción SE11 el nombre del elemento (en este caso, ZANIO), le damos a MODIFICAR y a la pestaña Denom. Campo&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5174593573461097618" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_02ypv8zpHEQ/R8_ZcFsq_JI/AAAAAAAAABY/nyo3jyTgcN0/s320/CMOD1.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pero habrá casos en los cuales la opción de modificar textos estará deshabilitada. ¿Qué hacemos entonces?&lt;br /&gt;&lt;br /&gt;Pues fácil: nos vamos a la transacción CMOD, y navegamos por&lt;br /&gt;&lt;em&gt;Pasar a &gt; Ampliaciones glob. &gt; Palabras clave &gt; Modificar&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5174593861223906466" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_02ypv8zpHEQ/R8_Zs1sq_KI/AAAAAAAAABg/6bbUgKQjA1s/s320/CMOD2.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;En la ventana, introducimos el Elemento de datos &lt;/p&gt;&lt;img id="BLOGGER_PHOTO_ID_5174594174756519090" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_02ypv8zpHEQ/R8_Z_Fsq_LI/AAAAAAAAABo/B9ORTtjdpF0/s320/CMOD3.jpg" border="0" /&gt;&lt;br /&gt;Y desde aquí, podremos modificar todas las denominaciones de campo, así como la descripción, del elemento de datos.&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5174594398094818498" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_02ypv8zpHEQ/R8_aMFsq_MI/AAAAAAAAABw/JUkcT7timtg/s320/CMOD4.jpg" border="0" /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-1720329526122278749?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/1720329526122278749/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=1720329526122278749' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/1720329526122278749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/1720329526122278749'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2008/03/modificar-denominaciones-de-campo-sin.html' title='Modificar denominaciones de campo sin la SE11'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_02ypv8zpHEQ/R8_ZcFsq_JI/AAAAAAAAABY/nyo3jyTgcN0/s72-c/CMOD1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-4282506157078422115</id><published>2008-03-04T10:16:00.001Z</published><updated>2008-03-04T10:16:56.160Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><title type='text'>Inserción/modificación masiva o línea a línea - LUW</title><content type='html'>A la hora de insertar/modificar registros en una tabla del diccionario a partir de otra tabla (cuyo contenido podría venir de un fichero de texto, o de una consulta de selección) podemos elegir entre insertar los registros uno a uno, o de forma masiva.&lt;br /&gt;&lt;br /&gt;Si se hace de registro en registro, corremos el riesgo de que se abra una unidad lógica de trabajo (LUW, por sus siglas en inglés), que bloquea la tabla momentáneamente. Se trata de unos microsegundos, pero si se intenta cualquier otra modificación sobre la tabla, tendremos un fallo de ejecución. &lt;br /&gt;Por el contrario, si lo hacemos de forma masiva podemos pedir al programa que acabe el trabajo (que finalice la LUW) y que se espere, con la sentencia&lt;br /&gt;COMMIT WORK AND WAIT.&lt;br /&gt;&lt;br /&gt;Esto también lo podemos hacer registro a registro, pero el WAIT hará que la espera se extienda y, probablemente, tengamos un dump por tiempo de ejecución sobrepasado.&lt;br /&gt;&lt;br /&gt;Aunque recomiendo siempre la segunda opción (es decir, un insert/update masivo) veremos ambas. &lt;br /&gt;&lt;br /&gt;Para el ejemplo, tendremos dos tablas Z: ZORIGEN y ZDESTINO. Ambas tienen la misma estructura: el mandante de toda la vida, un campo clave llamado ZCLAVE, de tipo N y longitud 5, y dos campos para almacenar textos pequeñitos (25 caracteres) ZTEXTO1 y ZTEXTO2.&lt;br /&gt;&lt;br /&gt;En la pantalla de selección, podremos elegir entre hacer la inserción masiva o línea a línea.&lt;br /&gt;&lt;br /&gt;He aquí el programa:&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  Z_LUW&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;REPORT  z_luw.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;   TOP&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;TABLES:&lt;br /&gt;  zorigen,&lt;br /&gt;  zdestino.&lt;br /&gt;&lt;br /&gt;DATA:&lt;br /&gt;  "Para selección de datos&lt;br /&gt;  gt_origen LIKE TABLE OF zorigen WITH HEADER LINE,&lt;br /&gt;  "Para leer ZDESTINO&lt;br /&gt;  gt_destino LIKE TABLE OF zdestino WITH HEADER LINE,&lt;br /&gt;  "Para insertar en zdestino masivamente&lt;br /&gt;  gt_inser LIKE TABLE OF zdestino WITH HEADER LINE,&lt;br /&gt;  "Para modificar zdestino masivamente&lt;br /&gt;  gt_modif LIKE TABLE OF zdestino WITH HEADER LINE,&lt;br /&gt;&lt;br /&gt;  "Para insertar/modificar zdestino línea a línea, un work-area&lt;br /&gt;  wa LIKE LINE OF zorigen,&lt;br /&gt;&lt;br /&gt;  "Variables para los resultados&lt;br /&gt;  gv_leidas LIKE sy-dbcnt, "Leidas&lt;br /&gt;  gv_inser1 LIKE sy-dbcnt, "Deberían haberse insertado&lt;br /&gt;  gv_modif1 LIKE sy-dbcnt, "Deberían haberse modificado&lt;br /&gt;  gv_inser2 LIKE sy-dbcnt, "Se insertaron realmente&lt;br /&gt;  gv_modif2 LIKE sy-dbcnt. "Se modificaron realmente&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;   PANTALLA DE SELECCIÓN&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;PARAMETERS:&lt;br /&gt; p_mas RADIOBUTTON GROUP gr1, "Masivamente&lt;br /&gt; p_1a1 RADIOBUTTON GROUP gr1. "Línea a línea&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;   EVENTOS&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;INITIALIZATION.&lt;br /&gt;  REFRESH: gt_origen, gt_destino, gt_inser, gt_modif.&lt;br /&gt;  CLEAR: gt_origen, gt_destino, gt_inser, gt_modif,&lt;br /&gt;         gv_leidas, gv_insertadas, gv_modificadas.&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;  "Seleccionamos todo ZORIGEN y ZDESTINO&lt;br /&gt;  SELECT * FROM zorigen INTO CORRESPONDING FIELDS OF TABLE gt_origen.&lt;br /&gt;  SELECT * FROM zdestino INTO CORRESPONDING FIELDS OF TABLE gt_destino.&lt;br /&gt;&lt;br /&gt;  "Número de líneas leidas&lt;br /&gt;  DESCRIBE TABLE gt_origen LINES gv_leidas.&lt;br /&gt;&lt;br /&gt;  "Ahora, insertamos/modificamos&lt;br /&gt;  IF p_mas = 'X'. "Masivamente&lt;br /&gt;    LOOP AT gt_origen.&lt;br /&gt;      "Leemos la tabla zdestino con el mismo campo clave,&lt;br /&gt;      "Si existe el registro lo modificamos y si no lo insertamos&lt;br /&gt;      READ TABLE gt_destino WITH KEY zclave = gt_origen-zclave.&lt;br /&gt;      IF sy-subrc EQ 0. "Modificamos&lt;br /&gt;        MOVE-CORRESPONDING gt_origen TO gt_modif.&lt;br /&gt;        APPEND gt_modif. CLEAR gt_modif.&lt;br /&gt;      ELSE. "Insertamos&lt;br /&gt;        MOVE-CORRESPONDING gt_origen TO gt_inser.&lt;br /&gt;        APPEND gt_modif. CLEAR gt_modif.&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;&lt;br /&gt;    "Número de líneas insertadas/modificadas&lt;br /&gt;    DESCRIBE TABLE gt_inser LINES gv_inser1.&lt;br /&gt;    DESCRIBE TABLE gt_modif LINES gv_modif1.&lt;br /&gt;    "Ahora llega la modificación e inserción masiva&lt;br /&gt;    INSERT zdestino FROM TABLE gt_inser.&lt;br /&gt;    MOVE sy-dbcnt TO gv_inser2.&lt;br /&gt;    COMMIT WORK AND WAIT.&lt;br /&gt;&lt;br /&gt;    UPDATE zdestino FROM TABLE gt_modif.&lt;br /&gt;    MOVE sy-dbcnt TO gv_modif2.&lt;br /&gt;    COMMIT WORK AND WAIT.&lt;br /&gt;&lt;br /&gt;  ELSE. "p_1a1 = 'X'&lt;br /&gt;&lt;br /&gt;    LOOP AT gt_origen.&lt;br /&gt;      "Leemos la tabla zdestino con el mismo campo clave,&lt;br /&gt;      "Si existe el registro lo modificamos y si no lo insertamos&lt;br /&gt;      MOVE-CORRESPONDING gt_origen TO wa.&lt;br /&gt;      READ TABLE gt_destino WITH KEY zclave = wa-zclave.&lt;br /&gt;      IF sy-subrc EQ 0. "Modificamos&lt;br /&gt;        UPDATE zdestino FROM wa.&lt;br /&gt;        IF sy-subrc EQ 0.&lt;br /&gt;          ADD 1 TO gv_modif2.&lt;br /&gt;        ELSE.&lt;br /&gt;          ADD 1 TO gv_modif1.&lt;br /&gt;        ENDIF.&lt;br /&gt;      ELSE. "Insertamos&lt;br /&gt;        INSERT into zdestino values wa.&lt;br /&gt;        IF sy-subrc EQ 0.&lt;br /&gt;          ADD 1 TO gv_inser2.&lt;br /&gt;        ELSE.&lt;br /&gt;          ADD 1 TO gv_inser1.&lt;br /&gt;        ENDIF.&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;&lt;br /&gt;    gv_modif1 = gv_modif1 + gv_modif2.&lt;br /&gt;    gv_inser1 = gv_inser1 + gv_inser2.&lt;br /&gt;&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;END-OF-SELECTION.&lt;br /&gt;  "Mostramos resultados&lt;br /&gt;  "OJO! Quizá habría que restar 1 a alguna variable...&lt;br /&gt;&lt;br /&gt;  WRITE: /,&lt;br /&gt;  'Se insertaron......: ', gv_inser2, /,&lt;br /&gt;  'Se modificaron.....:', gv_modif2.&lt;br /&gt;&lt;br /&gt;  IF gv_inser1 NE gv_inser2.&lt;br /&gt;    WRITE: /, 'Error!, deberían haberse insertado ', gv_inser1, ' líneas.'.&lt;br /&gt;  ENDIF.&lt;br /&gt;  IF gv_modif1 NE gv_modif2.&lt;br /&gt;    WRITE: /, 'Error!, deberían haberse modificado, ' gv_modif1, ' líneas.'.&lt;br /&gt;  ENDIF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-4282506157078422115?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/4282506157078422115/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=4282506157078422115' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/4282506157078422115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/4282506157078422115'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2008/03/insercinmodificacin-masiva-o-lnea-lnea.html' title='Inserción/modificación masiva o línea a línea - LUW'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-3960796310796482060</id><published>2008-01-14T15:16:00.000Z</published><updated>2008-01-14T15:25:13.726Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><title type='text'>Busquedas en LOOPS anidados</title><content type='html'>En ocasiones tendremos tablas internas muy pesadas, y deberemos recorrer una dentro de otra para hacer cualquier modificación. En este ejemplo, que hecho con una carga de datos razonable, selecciono las facturas de un mes en it_tab1, luego las de un día en it_tab2, y recorro it_tab2 dentro de it_tab1.&lt;br /&gt;&lt;br /&gt;Suponiendo que en it_tab1 haya m entradas y en it_tab2 haya n, si lo hacemos sin más el número de vueltas sería m x n. Incluso, aunque hayamos puesto la cláusula WHERE. &lt;br /&gt;&lt;br /&gt;En estos casos, donde además ambas tablas tengan los mismos campos clave, recomiendo usar un índice interno para empezar la búsqueda en la segunda tabla, de esta forma se reducirá el número de vueltas. &lt;br /&gt;&lt;br /&gt;En el PERFORM EXCLUIR se puede ver cómo se ha hecho. El resto es paja necesaria.&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; Report  ZINDICES&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;&lt;br /&gt;*&amp;  Un loop dentro de otro loop, con índices&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;REPORT  zindices.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; TOP&lt;br /&gt;*&amp; declaración de tablas, tipos, variables, indices, tablas internas.&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;TABLES:&lt;br /&gt;  vbrk,&lt;br /&gt;  vbrp.&lt;br /&gt;&lt;br /&gt;RANGES: rg_fecha FOR vbrk-fkdat.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TYPES: BEGIN OF ty_tab,&lt;br /&gt;  "campos de vbrk&lt;br /&gt;  vbeln LIKE vbrk-vbeln,&lt;br /&gt;  vtweg LIKE vbrk-vtweg,&lt;br /&gt;  spart LIKE vbrk-spart,&lt;br /&gt;  erdat LIKE vbrk-erdat,&lt;br /&gt;  fkdat LIKE vbrk-fkdat,&lt;br /&gt;  "Campos de vbrp&lt;br /&gt;  posnr LIKE vbrp-posnr,&lt;br /&gt;  matnr LIKE vbrp-matnr,&lt;br /&gt;  fkimg LIKE vbrp-fkimg,&lt;br /&gt;END OF ty_tab.&lt;br /&gt;&lt;br /&gt;DATA:&lt;br /&gt;  it_tab1 TYPE TABLE OF ty_tab,&lt;br /&gt;  it_tab2 TYPE TABLE OF ty_tab,&lt;br /&gt;  it_tab3 TYPE TABLE OF ty_tab,&lt;br /&gt;  indice LIKE sy-tabix,&lt;br /&gt;  vbeln1 LIKE vbrk-vbeln,&lt;br /&gt;  vbeln2 LIKE vbrk-vbeln,&lt;br /&gt;  posnr1 LIKE vbrp-posnr,&lt;br /&gt;  posnr2 LIKE vbrp-posnr.&lt;br /&gt;&lt;br /&gt;************************************************************************&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; SEL&lt;br /&gt;*&amp; Pantalla de selección&lt;br /&gt;*&amp; Elementos de texto:&lt;br /&gt;*&amp; text-001: "Opciones de selección"&lt;br /&gt;*&amp; text-002: "Opciones del índice"&lt;br /&gt;*&amp; p_anno --&gt; año a elegir&lt;br /&gt;*&amp; p_mes --&gt;   mes a elegir&lt;br /&gt;*&amp; p_dia --&gt; día a excluir&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.&lt;br /&gt;&lt;br /&gt;PARAMETERS:&lt;br /&gt;  p_anno(4) TYPE n obligatory,&lt;br /&gt;  p_mes(2) TYPE n obligatory,&lt;br /&gt;  p_dia(2) TYPE n obligatory.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK bl1.&lt;br /&gt;&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-002.&lt;br /&gt;PARAMETERS:&lt;br /&gt;p_vkorg LIKE vbrk-vkorg,&lt;br /&gt;p_vtweg LIKE vbrk-vtweg.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK bl2.&lt;br /&gt;&lt;br /&gt;************************************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; EVE&lt;br /&gt;*&amp; Eventos&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;&lt;br /&gt;  PERFORM seleccion_t1 TABLES it_tab1. "Selección de vbrk-vbrp en it_tab1&lt;br /&gt;  PERFORM seleccion_t2 TABLES it_tab2. "Selección de vbrk-vbrp en it_tab2&lt;br /&gt;&lt;br /&gt;  PERFORM excluir&lt;br /&gt;     TABLES it_tab1 it_tab2 it_tab3.   "it_tab3 = it_tab2 - it_tab1.&lt;br /&gt;&lt;br /&gt;************************************************************************&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp; F01&lt;br /&gt;*&amp; Subrutinas&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  seleccion_t1&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Selecciona las facturas y posiciones del año y mes elegido&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*      --&gt;P_TAB1  it_tab1&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;FORM seleccion_t1 TABLES p_tab1 LIKE it_tab1.&lt;br /&gt;&lt;br /&gt;  DATA: lv_fecha_low LIKE sy-datum,&lt;br /&gt;        lv_fecha_high LIKE sy-datum.&lt;br /&gt;&lt;br /&gt;  CONCATENATE p_anno p_mes '01' INTO lv_fecha_low.&lt;br /&gt;  PERFORM buscar_ultimo_dia USING lv_fecha_low&lt;br /&gt;                            CHANGING lv_fecha_high.&lt;br /&gt;&lt;br /&gt;  CLEAR rg_fecha.&lt;br /&gt;  MOVE 'I' TO rg_fecha-sign.&lt;br /&gt;  MOVE 'BT' TO rg_fecha-option.&lt;br /&gt;  MOVE lv_fecha_high TO rg_fecha-high.&lt;br /&gt;  MOVE lv_fecha_low TO rg_fecha-low.&lt;br /&gt;  APPEND rg_fecha. CLEAR rg_fecha.&lt;br /&gt;&lt;br /&gt;  READ TABLE rg_fecha INDEX 1.&lt;br /&gt;&lt;br /&gt;  SELECT&lt;br /&gt;    a~vbeln a~vtweg a~spart a~erdat a~fkdat&lt;br /&gt;    b~posnr b~matnr b~fkimg&lt;br /&gt;   INTO CORRESPONDING FIELDS OF TABLE p_tab1&lt;br /&gt;   FROM vbrk AS a&lt;br /&gt;    INNER JOIN vbrp AS b ON a~vbeln = b~vbeln&lt;br /&gt;   WHERE a~fkdat IN rg_fecha&lt;br /&gt;     AND a~vkorg = p_vkorg&lt;br /&gt;     AND a~vtweg = p_vtweg.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " seleccion_t1&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  seleccion_t2&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Selecciona las facturas del día elegido&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*      --&gt;P_TAB2  it_tab2&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;FORM seleccion_t2 TABLES p_tab2 LIKE it_tab2.&lt;br /&gt;&lt;br /&gt;  DATA: lv_fecha LIKE vbrk-fkdat.&lt;br /&gt;&lt;br /&gt;  CONCATENATE p_anno p_mes p_dia INTO lv_fecha.&lt;br /&gt;&lt;br /&gt;  SELECT&lt;br /&gt;    a~vbeln a~vtweg a~spart a~erdat a~fkdat&lt;br /&gt;    b~posnr b~matnr b~fkimg&lt;br /&gt;   INTO CORRESPONDING FIELDS OF TABLE p_tab2&lt;br /&gt;   FROM vbrk AS a&lt;br /&gt;    INNER JOIN vbrp AS b ON a~vbeln = b~vbeln&lt;br /&gt;   WHERE a~fkdat = lv_fecha&lt;br /&gt;     AND a~vkorg = p_vkorg&lt;br /&gt;     AND a~vtweg = p_vtweg.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " seleccion_t2&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  excluir&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       hacer que p_tab3 = p_tab1 - p_tab2&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*      --&gt;P_TAB1  it_tab1&lt;br /&gt;*      --&gt;P_TAB2  it_tab2&lt;br /&gt;*      --&gt;P_TAB3  it_tab3&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;FORM excluir  TABLES   p_tab1 LIKE it_tab1&lt;br /&gt;                       p_tab2 LIKE it_tab2&lt;br /&gt;                       p_tab3 LIKE it_tab3.&lt;br /&gt;&lt;br /&gt;*Ahora, tengo que eliminar de t_no_asis los pedidos y posiciones que ESTÉN en t_handling&lt;br /&gt;&lt;br /&gt;*Ordeno las tablas&lt;br /&gt;  SORT p_tab1 BY vbeln posnr.&lt;br /&gt;  SORT p_tab2 BY vbeln posnr.&lt;br /&gt;&lt;br /&gt;*Ahora, busco&lt;br /&gt;  CLEAR indice. ADD 1 TO indice.&lt;br /&gt;  LOOP AT p_tab1.&lt;br /&gt;    vbeln1 = p_tab1-vbeln.&lt;br /&gt;    posnr1 = p_tab1-posnr.&lt;br /&gt;    LOOP AT p_tab2 FROM indice.&lt;br /&gt;      ADD 1 TO indice.&lt;br /&gt;      vbeln2 = p_tab2-vbeln.&lt;br /&gt;      posnr2 = p_tab2-posnr.&lt;br /&gt;      IF vbeln2 &gt; vbeln1 OR&lt;br /&gt;         ( vbeln2 EQ vbeln1 AND posnr2 &gt; posnr1 ).&lt;br /&gt;        EXIT.&lt;br /&gt;      ELSE.&lt;br /&gt;        IF vbeln2 EQ vbeln1 AND posnr2 EQ posnr1.&lt;br /&gt;          MOVE-CORRESPONDING p_tab1 TO p_tab3.&lt;br /&gt;          MOVE-CORRESPONDING p_tab2 TO p_tab3.&lt;br /&gt;          APPEND p_tab3. CLEAR p_tab3.&lt;br /&gt;        ENDIF.&lt;br /&gt;      ENDIF.&lt;br /&gt;    ENDLOOP.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " excluir&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;      Form  buscar_ultimo_dia&lt;br /&gt;*&amp;---------------------------------------------------------------------*&lt;br /&gt;*       Busca el último día de un mes.&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*      --&gt;P_FECHA_LOW      Primer día del mes&lt;br /&gt;*      &lt;--P_FECHA_HIGH     Último día del mes&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;FORM buscar_ultimo_dia  USING    p_fecha_low&lt;br /&gt;                        CHANGING p_fecha_high.&lt;br /&gt;&lt;br /&gt;  CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'&lt;br /&gt;    EXPORTING&lt;br /&gt;      day_in                  = p_fecha_low&lt;br /&gt;   IMPORTING&lt;br /&gt;     last_day_of_month       = p_fecha_high&lt;br /&gt;* EXCEPTIONS&lt;br /&gt;*   DAY_IN_NO_DATE          = 1&lt;br /&gt;*   OTHERS                  = 2&lt;br /&gt;            .&lt;br /&gt;  IF sy-subrc &lt;&gt; 0.&lt;br /&gt;* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;br /&gt;*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " buscar_ultimo_dia&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-3960796310796482060?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/3960796310796482060/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=3960796310796482060' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/3960796310796482060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/3960796310796482060'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2008/01/busquedas-en-loops-anidados.html' title='Busquedas en LOOPS anidados'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-9194304754209253739</id><published>2008-01-03T15:52:00.000Z</published><updated>2008-01-03T15:55:55.555Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Mis 8</title><content type='html'>De &lt;a href="http://blag.blogspot.com/" target="_new"&gt;El blog tecnológico de Blag&lt;/a&gt; me llegó una lista de ocho cosas que probablemente no sé de él, un meme de estos. En fin, mis ocho cosas:&lt;br /&gt;&lt;br /&gt;· De pequeño quería ser inventor, después escritor, y después sólo quería estudiar matemáticas. Al final soy programador así que más o menos hago las tres cosas :D&lt;br /&gt;· Aprendí a leer con 3 años. A atarme los zapatos con 7, y a atármelos bien con 21. A montar en bicicleta con 15.&lt;br /&gt;· Escribí una novela sólo para regalarla.&lt;br /&gt;· Cuando empecé con ABAP, pensé que era una mierda de lenguaje.&lt;br /&gt;· Hice el camino de Santiago, y soy ateo.&lt;br /&gt;· Leí el quinto libro de Harry Potter en el viaje de vuelta (que duró 9 horas)&lt;br /&gt;· Leo mucho más de lo que escribo y publico, soy adicto a leer blogs así que de publicar, poquito. De esto sí os habréis dado cuenta :) [Una de las reglas de los blogs: antes de publicar, asegúrate de que no está ya publicado Vía: &lt;a href="http://www.microsiervos.com" target="_new"&gt;Microsiervos&lt;/a&gt;&lt;br /&gt;· Misprogramasabap.blogspot.com tenía el propósito de ser mi libreta de apuntes personal de abap, así que me sorprende que la gente entre. Lo mismo paso del punto anterior y me animo. No le paso el relevo a nadie, soy así de soso (además no sabría a quién pasárselo).&lt;br /&gt;&lt;br /&gt;Feliz año!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-9194304754209253739?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/9194304754209253739/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=9194304754209253739' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/9194304754209253739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/9194304754209253739'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2008/01/mis-8.html' title='Mis 8'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-771212629750171839</id><published>2007-11-30T20:58:00.000Z</published><updated>2007-11-30T21:00:47.733Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='cubbic'/><title type='text'>Cubbic</title><content type='html'>Continúo en SAP hasta febrero, y a partir de ahí, continúo con un proyecto nuevo (para mí, porque el proyecto ya está empezado).&lt;br /&gt;Se trata de un buscador en boletines oficiales españoles, de momento están indexados el BOME, el BOJA, y el BOCM (Melilla, Junta de Andalucía y Comunidad de Madrid).&lt;br /&gt;Le pongo un link permanente y un banner.&lt;br /&gt;&lt;br /&gt;http://www.cubbic.es (se me había olvidado)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-771212629750171839?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/771212629750171839/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=771212629750171839' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/771212629750171839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/771212629750171839'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/11/cubbic.html' title='Cubbic'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-5362848196185323588</id><published>2007-11-22T15:04:00.000Z</published><updated>2007-11-22T15:08:20.716Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='Ficheros'/><title type='text'>Comprobar la existencia de una RUTA</title><content type='html'>&lt;div align="justify"&gt;En primer lugar, hay que aclarar que en los sistemas UNIX, todo se trata como un fichero; por lo tanto, el siguiente report primero "chequea" si la ruta es UNIX o es WINDOWS, y después pasa a comprobarla.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Report  Z_COMPROBAR_RUTA&lt;br /&gt;*&amp;amp;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Comprueba si la RUTA de un fichero existe&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Alberto García de Haro&lt;br /&gt;*&amp;amp; http://misprogramasabap.blogspot.com&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Elementos de datos:&lt;br /&gt;*&amp;amp; p_unix: Fichero UNIX&lt;br /&gt;*&amp;amp; p_locl: Fichero local (Windows)&lt;br /&gt;*&amp;amp; p_ruta: Ruta del fichero&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;REPORT  z_comprobar_ruta.&lt;br /&gt;&lt;br /&gt;CONSTANTS: long TYPE i VALUE 1024.&lt;br /&gt;&lt;br /&gt;DATA: gv_existe TYPE c,&lt;br /&gt;      gv_ruta TYPE string.&lt;br /&gt;&lt;br /&gt;SELECTION-SCREEN BEGIN OF BLOCK bl1.&lt;br /&gt;PARAMETERS:&lt;br /&gt; p_unix RADIOBUTTON GROUP gr1,&lt;br /&gt; p_locl RADIOBUTTON GROUP gr1,&lt;br /&gt; p_ruta LIKE rlgrap-filename.&lt;br /&gt;SELECTION-SCREEN END OF BLOCK bl1.&lt;br /&gt;&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;  IF p_locl EQ 'X'. "Fichero local&lt;br /&gt;    MOVE p_ruta TO gv_ruta.&lt;br /&gt;&lt;br /&gt;    CALL METHOD cl_gui_frontend_services=&gt;directory_exist&lt;br /&gt;      EXPORTING&lt;br /&gt;        directory            = gv_ruta&lt;br /&gt;      RECEIVING&lt;br /&gt;        result               = gv_existe&lt;br /&gt;      EXCEPTIONS&lt;br /&gt;        cntl_error           = 1&lt;br /&gt;        error_no_gui         = 2&lt;br /&gt;        wrong_parameter      = 3&lt;br /&gt;        not_supported_by_gui = 4&lt;br /&gt;        OTHERS               = 5.&lt;br /&gt;  ELSE. "Fichero UNIX&lt;br /&gt;&lt;br /&gt;    OPEN DATASET p_ruta FOR INPUT&lt;br /&gt;      IN TEXT MODE ENCODING DEFAULT.&lt;br /&gt;    IF sy-subrc EQ 0.&lt;br /&gt;      gv_existe = 'X'.&lt;br /&gt;      CLOSE DATASET gv_ruta.&lt;br /&gt;    ELSE.&lt;br /&gt;      gv_existe = space.&lt;br /&gt;    ENDIF.&lt;br /&gt;&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  PERFORM extraer_ruta USING p_ruta.&lt;br /&gt;&lt;br /&gt;END-OF-SELECTION.&lt;br /&gt;  WRITE /.&lt;br /&gt;  IF gv_existe EQ space.&lt;br /&gt;    WRITE 'No existe la ruta'.&lt;br /&gt;  ELSE.&lt;br /&gt;    WRITE 'Sí existe la ruta'.&lt;br /&gt;  ENDIF.&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp;      Form  extraer_ruta&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*       text&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;*      --&gt;P_GV_RUTA  text&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;FORM extraer_ruta  USING    p_gv_ruta.&lt;br /&gt;&lt;br /&gt;*Tabla para ir metiendo las palabras&lt;br /&gt;  DATA:&lt;br /&gt;  BEGIN OF lt_tab OCCURS 10,&lt;br /&gt;    campo(long) TYPE c,&lt;br /&gt;  END OF lt_tab,&lt;br /&gt;&lt;br /&gt;  "Palabras&lt;br /&gt;   lv_word1(long) TYPE c,&lt;br /&gt;   lv_word2(long) TYPE c,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  lv_ruta LIKE rlgrap-filename, "Ruta SIN fichero&lt;br /&gt;  lv_fich(long) TYPE c. "Nombre del fichero&lt;br /&gt;&lt;br /&gt;*Inicio del proceso&lt;br /&gt;  REFRESH lt_tab.&lt;br /&gt;&lt;br /&gt;  MOVE p_gv_ruta TO lv_ruta.&lt;br /&gt;  DO.&lt;br /&gt;&lt;br /&gt;    SPLIT lv_ruta AT '/' INTO lv_word1 lv_word2.&lt;br /&gt;    IF NOT lv_word1 IS INITIAL and not lv_word2 is initial .&lt;br /&gt;      MOVE lv_word1 TO lt_tab.&lt;br /&gt;      APPEND lt_tab. CLEAR lt_tab.&lt;br /&gt;    ENDIF.&lt;br /&gt;    MOVE lv_word2 TO lv_ruta.&lt;br /&gt;&lt;br /&gt;    IF lv_word2 IS INITIAL. "No se puede separar más&lt;br /&gt;      MOVE lv_word1 TO lv_fich.&lt;br /&gt;      EXIT.&lt;br /&gt;    ENDIF.&lt;br /&gt;  ENDDO.&lt;br /&gt;  "Ahora obtengo la ruta&lt;br /&gt;&lt;br /&gt;  CLEAR lv_ruta.&lt;br /&gt;&lt;br /&gt;  LOOP AT lt_tab.&lt;br /&gt;    CONCATENATE lv_ruta lt_tab-campo&lt;br /&gt;     INTO lv_ruta SEPARATED BY '/'.&lt;br /&gt;  ENDLOOP.&lt;br /&gt;&lt;br /&gt;  WRITE:&lt;br /&gt;  'La ruta SIN fichero es',&lt;br /&gt;  lv_ruta, /,&lt;br /&gt;  'El fichero es',&lt;br /&gt;  lv_fich.&lt;br /&gt;&lt;br /&gt;ENDFORM.                    " extraer_ruta&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-5362848196185323588?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/5362848196185323588/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=5362848196185323588' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/5362848196185323588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/5362848196185323588'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/11/comprobar-la-existencia-de-una-ruta.html' title='Comprobar la existencia de una RUTA'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-478231976972532109</id><published>2007-11-20T11:49:00.000Z</published><updated>2007-11-20T15:34:30.989Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='STATUS GUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><title type='text'>Leer checkboxes en un listado</title><content type='html'>&lt;div&gt;Este problema se me planteó durante un borrado masivo de documentos preliminares.&lt;br /&gt;&lt;br /&gt;Para ello, el propio SAP propone un report en su nota 971193. (Estaría bien poner los pdf en el blog, pero como son de SAP y tendrán copyright, mejor no).&lt;br /&gt;&lt;br /&gt;El report que propone, básicamente, lista todos los documentos preliminares (parked documents), y al pulsar el botón de SAVE (para el que proponen un diskete, en el status DELE) se borran. Pero, ¿qué pasa si no quiero borrarlos todos?&lt;br /&gt;&lt;br /&gt;Lo más fácil es poner, como encabezado de cada línea, un checkbox; y si está marcado se borra el documento correspondiente a esta línea. Para ello, hay que tener en cuenta lo siguiente:&lt;br /&gt;&lt;br /&gt;1. El estatus DELE (al menos cuando empecé a trabajar con el report) tenía en el botón de “marcar todos” el código de función &amp;amp;ALL, que también estaba asociado a la tecla de función F2. Esto provocaba que, si se intentaba seleccionar sólo una línea, saltase el código de F2 que tenía asociada la función “Seleccionar todos (&amp;amp;ALL)”, y no funcionase. Para corregirlo, a la tecla de función “F2” le asocié el nuevo código “&amp;amp;ONE”, y para el código de función “&amp;amp;ALL” asocié la tecla de función F5, como puede apreciarse en las imágenes.&lt;br /&gt;Además, agregué una función de refresco de imagen.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://bp0.blogger.com/_02ypv8zpHEQ/R0L9cOF0xSI/AAAAAAAAABI/oyaU61v4zFk/s1600-h/status_dele1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5134945186416477474" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp0.blogger.com/_02ypv8zpHEQ/R0L9cOF0xSI/AAAAAAAAABI/oyaU61v4zFk/s320/status_dele1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_02ypv8zpHEQ/R0L9puF0xTI/AAAAAAAAABQ/VJDFQnKHWgA/s1600-h/status_dele2.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5134945418344711474" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_02ypv8zpHEQ/R0L9puF0xTI/AAAAAAAAABQ/VJDFQnKHWgA/s320/status_dele2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. En el report propuesto, hice las siguientes modificaciones:&lt;br /&gt;2.1. En la tabla TBKPF, añadí un campito para que recogiese/mostrase el valor del checkbox asociado:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;data: begin of tbkpf occurs 5,&lt;br /&gt;tratar type c.&lt;br /&gt;include structure vbkpf.&lt;br /&gt;data: end of tbkpf.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;2.2. Tanto la selección de datos como la impresión por pantalla del listado, los metí en dos performs. Además, cambié la selección porque los bucles SELECT...ENDSELECT no me gustan. No tiene sentido mostrar el código de dichos performs (al final de esta entrada lo incluiré entero), sin embargo sus nombres son:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;*Meto el select en un perform&lt;br /&gt;perform seleccionar_vbkpf.&lt;br /&gt;&lt;br /&gt;*Meto la impresión de la pantalla en otro perfrom&lt;br /&gt;perform escribir_listado.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;2.3. Al pulsar el botón de borrado (sy-ucomm = ‘DELE’), le pedí que revisara los documentos marcados con instrucciones READ LINE en la subrutina revisar_marcados; previamente, había guardado el número de líneas que se muestran por pantalla en la variable global gv_lineas declarada así:&lt;br /&gt;data: gv_lineas like sy-linno.&lt;br /&gt;&lt;br /&gt;Esta variable se establece después de hacer el listado con sentencias write (en concreto, en el perform “escribir_listado”, haciendo:&lt;br /&gt;gv_lineas = sy-linno.&lt;br /&gt;2.4. También al pulsar el botón de borrado, se llamaba al form “fbv0_dele.”. modifiqué una sóla línea de este form para que tuviera en cuenta que hiciera el loop a la tabla TBKPF, con la condición de que el campo “tratar” estuviera marcado, lo cual se revisaba como he dicho en el form revisar_marcados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;loop at tbkpf&lt;br /&gt;"Añado condición&lt;br /&gt;where tratar eq 'X'.&lt;br /&gt;(...)&lt;br /&gt;endloop.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;3. Al escribir/leer el contenido de la tabla en el listado, hay que tener en cuenta que es preferible meter el checkbox en una variable global (gv_check) de tipo carácter, que escribir el campo de la tabla en sí (tbkpf-tratar), ya que en caso contrario cada vez que seleccionásemos una línea habría que modificar la tabla y reescribir el listado, con los inconvenientes que ello conlleva: modificar una tabla (aunque sea interna) es un proceso costoso, y un listado no se puede reescribir más de un número determinado de veces (según la parametrización del sistema donde hice el report, 20).&lt;br /&gt;4. El botón “BACK” provocaba, durante el listado, que mostrase la pantalla anterior no por evento sino por apariencia; es decir, en lugar de mostrarse la pantalla de selección, aparecía la modificación anterior hecha en la pantalla. Por ejemplo, si después de ejecutar la pantalla de selección, durante el listado, primero seleccionábamos todos los check-boxes, luego los deseleccionábamos, luego marcábamos uno, y dábamos para atrás, resultaría que se mostrarían todos desmarcados (primera pulsación) luego todos marcados (segunda pulsación) y luego la pantalla de selección. ¡Un engorro! Por eso, deshabilité el botón “DELE” en el PF-STATUS:&lt;br /&gt;start-of-selection.&lt;br /&gt;set pf-status 'DELE' excluding 'BACK'.&lt;br /&gt;Y lo volvía a incluirlo al pulsar el botón ‘DELE’.&lt;br /&gt;end-of-selection.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;at user-command.&lt;br /&gt;(…)&lt;br /&gt;case sy-ucomm.&lt;br /&gt;when 'DELE'.&lt;br /&gt;perform revisar_marcados. "Comprueba los marcados&lt;br /&gt;set pf-status 'DELE'. "Habilita el botón “Back”&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Estas han sido las modificaciones, ahora el report enterito:&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Report ZDELEPARKED *&amp;amp;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp;&lt;br /&gt;*&amp;amp; Borrado masivo de documentos preliminares&lt;br /&gt;*&amp;amp; Modificado por Alberto García de Haro&lt;br /&gt;*&amp;amp; a partir del report propuesto por SAP en la nota971193&lt;br /&gt;*&amp;amp; 20 de noviembre de 2007&lt;br /&gt;*&amp;amp; http://misprogramasabap.blogspot.com&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;report zdeleparked.&lt;br /&gt;&lt;br /&gt;tables: vbkpf, t020.&lt;br /&gt;&lt;br /&gt;data: mode type c value 'N'.&lt;br /&gt;data: begin of tbkpf occurs 5,&lt;br /&gt;tratar type c.&lt;br /&gt;include structure vbkpf.&lt;br /&gt;data: end of tbkpf.&lt;br /&gt;data: begin of it020 occurs 0.&lt;br /&gt;include structure t020.&lt;br /&gt;data: end of it020.&lt;br /&gt;data: begin of bdcdata occurs 0.&lt;br /&gt;include structure bdcdata.&lt;br /&gt;data: end of bdcdata.&lt;br /&gt;data: begin of messtab occurs 0.&lt;br /&gt;include structure bdcmsgcoll.&lt;br /&gt;data: end of messtab.&lt;br /&gt;data: char(20) type c,&lt;br /&gt;count type i,&lt;br /&gt;xdele.&lt;br /&gt;data: wa_tbkpf like line of tbkpf,&lt;br /&gt;gv_check type c,&lt;br /&gt;gv_veces type i, "Veces que se ha mostrado el listado&lt;br /&gt;gv_belnr like vbkpf-belnr,&lt;br /&gt;gv_lineas like sy-linno,&lt;br /&gt;gv_index like sy-tabix.&lt;br /&gt;&lt;br /&gt;data: tmarcados like tbkpf occurs 10.&lt;br /&gt;********pantalla de selección&lt;br /&gt;select-options:&lt;br /&gt;bukrs for vbkpf-bukrs memory id buk,&lt;br /&gt;belnr for vbkpf-belnr,&lt;br /&gt;gjahr for vbkpf-gjahr memory id gjr&lt;br /&gt;default sy-datum(4).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;selection-screen skip 1.&lt;br /&gt;selection-screen begin of block 2 with frame title text-001.&lt;br /&gt;select-options:&lt;br /&gt;budat for vbkpf-budat,&lt;br /&gt;bldat for vbkpf-bldat,&lt;br /&gt;blart for vbkpf-blart,&lt;br /&gt;xblnr for vbkpf-xblnr,&lt;br /&gt;bktxt for vbkpf-bktxt,&lt;br /&gt;usnam for vbkpf-usnam. "default sy-uname.&lt;br /&gt;selection-screen end of block 2.&lt;br /&gt;&lt;br /&gt;selection-screen begin of block 3 with frame title text-002.&lt;br /&gt;select-options:&lt;br /&gt;xwffr for vbkpf-xwffr,&lt;br /&gt;xprfg for vbkpf-xprfg,&lt;br /&gt;xfrge for vbkpf-xfrge.&lt;br /&gt;selection-screen end of block 3.&lt;br /&gt;&lt;br /&gt;**************eventos&lt;br /&gt;initialization.&lt;br /&gt;clear: gv_lineas, gv_veces.&lt;br /&gt;&lt;br /&gt;at selection-screen.&lt;br /&gt;&lt;br /&gt;start-of-selection.&lt;br /&gt;set pf-status 'DELE' excluding 'BACK'.&lt;br /&gt;&lt;br /&gt;call function 'AUTHORITY_CHECK_TCODE'&lt;br /&gt;exporting&lt;br /&gt;tcode = 'FBV0'&lt;br /&gt;exceptions&lt;br /&gt;ok = 1&lt;br /&gt;others = 4.&lt;br /&gt;if sy-subrc = 4.&lt;br /&gt;message id sy-msgid type sy-msgty number sy-msgno&lt;br /&gt;with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;exit.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;*Meto el select en un perform&lt;br /&gt;perform seleccionar_vbkpf.&lt;br /&gt;&lt;br /&gt;*Meto la impresión de la pantalla en otro perfrom&lt;br /&gt;perform escribir_listado.&lt;br /&gt;&lt;br /&gt;end-of-selection.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;at user-command.&lt;br /&gt;clear gv_belnr.&lt;br /&gt;clear: char.&lt;br /&gt;if count &gt; 0.&lt;br /&gt;&lt;br /&gt;case sy-ucomm.&lt;br /&gt;when 'DELE'.&lt;br /&gt;perform revisar_marcados. "Comprueba los marcados&lt;br /&gt;set pf-status 'DELE'. "Habilita el botón “Back”&lt;br /&gt;if xdele = space.&lt;br /&gt;call function 'POPUP_TO_CONFIRM_LOSS_OF_DATA'&lt;br /&gt;exporting&lt;br /&gt;titel = text-003&lt;br /&gt;textline1 = text-004&lt;br /&gt;textline2 = space&lt;br /&gt;importing&lt;br /&gt;answer = char(1).&lt;br /&gt;if char(1) = 'J'.&lt;br /&gt;perform fbv0_dele.&lt;br /&gt;xdele = 'X'.&lt;br /&gt;else.&lt;br /&gt;exit.&lt;br /&gt;endif.&lt;br /&gt;else.&lt;br /&gt;message i899(f5) with text-007.&lt;br /&gt;endif.&lt;br /&gt;when 'BACK'.&lt;br /&gt;&lt;br /&gt;exit.&lt;br /&gt;&lt;br /&gt;when '&amp;amp;ONE'. "Marca/desmarca uno.&lt;br /&gt;perform marcar_uno.&lt;br /&gt;&lt;br /&gt;when '&amp;amp;ALL'. "Marcar todos&lt;br /&gt;perform marcar_todos.&lt;br /&gt;&lt;br /&gt;when '&amp;amp;SAL'.&lt;br /&gt;perform desmarcar_todos.&lt;br /&gt;* when 'BACK'.&lt;br /&gt;&lt;br /&gt;when 'FRSH'. "Refrescar&lt;br /&gt;if gv_veces lt 20. "Sólo se permiten 20 anidamientos&lt;br /&gt;perform seleccionar_vbkpf.&lt;br /&gt;perform escribir_listado.&lt;br /&gt;else.&lt;br /&gt;message e368(00) with text-e01.&lt;br /&gt;endif.&lt;br /&gt;when others.&lt;br /&gt;exit.&lt;br /&gt;endcase.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form FBV0_DELE&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------* *&lt;br /&gt;*&amp;amp; Find out, how document was parked (classically or by ENJOY)&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------* *&lt;br /&gt;&lt;br /&gt;form fbv0_dele.&lt;br /&gt;refresh messtab.&lt;br /&gt;loop at tbkpf&lt;br /&gt;"Añado condición&lt;br /&gt;where tratar eq 'X'.&lt;br /&gt;clear t020.&lt;br /&gt;select single * from t020 where tcode = tbkpf-tcode.&lt;br /&gt;if t020-gener = space. "parked by classical transaction&lt;br /&gt;perform fbv0_dele1 using tbkpf-gjahr&lt;br /&gt;tbkpf-belnr&lt;br /&gt;tbkpf-bukrs.&lt;br /&gt;else. "parked by ENJOY&lt;br /&gt;perform fbv0_dele2 using tbkpf-gjahr&lt;br /&gt;tbkpf-belnr&lt;br /&gt;tbkpf-bukrs.&lt;br /&gt;endif.&lt;br /&gt;endloop.&lt;br /&gt;check sy-subrc eq 0.&lt;br /&gt;loop at messtab.&lt;br /&gt;write: / messtab.&lt;br /&gt;endloop.&lt;br /&gt;endform. "FBV0_DELE&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form FBV0_DELE1&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Classically parked documents&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form fbv0_dele1 using i_gjahr like bkpf-gjahr&lt;br /&gt;i_belnr like bkpf-belnr&lt;br /&gt;i_bukrs like bkpf-bukrs.&lt;br /&gt;&lt;br /&gt;data: xdate(10) type c.&lt;br /&gt;refresh bdcdata.&lt;br /&gt;perform bdc_dynpro using 'SAPMF05V'&lt;br /&gt;'0100'.&lt;br /&gt;perform bdc_field using 'BDC_OKCODE'&lt;br /&gt;'/00'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'RF05V-GJAHR'.&lt;br /&gt;perform bdc_field using 'RF05V-BUKRS'&lt;br /&gt;i_bukrs.&lt;br /&gt;perform bdc_field using 'RF05V-BELNR'&lt;br /&gt;i_belnr.&lt;br /&gt;perform bdc_field using 'RF05V-GJAHR'&lt;br /&gt;i_gjahr.&lt;br /&gt;perform bdc_dynpro using 'SAPLF040'&lt;br /&gt;'0700'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'BKPF-XBLNR'.&lt;br /&gt;perform bdc_field using 'BDC_OKCODE'&lt;br /&gt;'BL'.&lt;br /&gt;perform bdc_dynpro using 'SAPLSPO1'&lt;br /&gt;'0200'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'SPOP-OPTION1'. "Button YES&lt;br /&gt;perform bdc_field using 'BDC_OKCODE'&lt;br /&gt;'ENTER'.&lt;br /&gt;&lt;br /&gt;call transaction 'FBV0' using bdcdata&lt;br /&gt;mode mode&lt;br /&gt;update 'S'.&lt;br /&gt;&lt;br /&gt;call function 'MESSAGE_TEXT_BUILD'&lt;br /&gt;exporting&lt;br /&gt;msgid = sy-msgid&lt;br /&gt;msgnr = sy-msgno&lt;br /&gt;msgv1 = sy-msgv1&lt;br /&gt;msgv2 = sy-msgv2&lt;br /&gt;msgv3 = sy-msgv3&lt;br /&gt;msgv4 = sy-msgv4&lt;br /&gt;importing&lt;br /&gt;message_text_output = messtab&lt;br /&gt;exceptions&lt;br /&gt;others = 4.&lt;br /&gt;append messtab.&lt;br /&gt;endform. "FBV0_DELE2&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form fbv0_dele2&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Documents parked by ENJOY&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form fbv0_dele2 using i_gjahr&lt;br /&gt;i_belnr&lt;br /&gt;i_bukrs.&lt;br /&gt;data: xdate(10) type c.&lt;br /&gt;refresh bdcdata.&lt;br /&gt;perform bdc_dynpro using 'SAPMF05V'&lt;br /&gt;'0100'.&lt;br /&gt;perform bdc_field using 'BDC_OKCODE'&lt;br /&gt;'/00'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'RF05V-GJAHR'.&lt;br /&gt;perform bdc_field using 'RF05V-BUKRS'&lt;br /&gt;i_bukrs.&lt;br /&gt;perform bdc_field using 'RF05V-BELNR'&lt;br /&gt;i_belnr.&lt;br /&gt;perform bdc_field using 'RF05V-GJAHR'&lt;br /&gt;i_gjahr.&lt;br /&gt;&lt;br /&gt;if t020-koart = 'D'.&lt;br /&gt;perform bdc_dynpro using 'SAPMF05A'&lt;br /&gt;'1200'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'INVFO-ACCNT'.&lt;br /&gt;elseif t020-koart = 'K'.&lt;br /&gt;perform bdc_dynpro using 'SAPMF05A'&lt;br /&gt;'1100'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'INVFO-ACCNT'.&lt;br /&gt;elseif t020-koart = 'S'.&lt;br /&gt;perform bdc_dynpro using 'SAPMF05A'&lt;br /&gt;'1001'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'ACGL_HEAD-BLDAT'.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;perform bdc_field using 'BDC_OKCODE'&lt;br /&gt;'=9-PD'.&lt;br /&gt;&lt;br /&gt;perform bdc_dynpro using 'SAPLSPO1'&lt;br /&gt;'0200'.&lt;br /&gt;perform bdc_field using 'BDC_CURSOR'&lt;br /&gt;'SPOP-OPTION1'. "Button YES&lt;br /&gt;perform bdc_field using 'BDC_OKCODE'&lt;br /&gt;'ENTER'.&lt;br /&gt;&lt;br /&gt;call transaction 'FBV0' using bdcdata&lt;br /&gt;mode mode&lt;br /&gt;update 'S'.&lt;br /&gt;&lt;br /&gt;call function 'MESSAGE_TEXT_BUILD'&lt;br /&gt;exporting&lt;br /&gt;msgid = sy-msgid&lt;br /&gt;msgnr = sy-msgno&lt;br /&gt;msgv1 = sy-msgv1&lt;br /&gt;msgv2 = sy-msgv2&lt;br /&gt;msgv3 = sy-msgv3&lt;br /&gt;msgv4 = sy-msgv4&lt;br /&gt;importing&lt;br /&gt;message_text_output = messtab&lt;br /&gt;exceptions&lt;br /&gt;others = 4.&lt;br /&gt;&lt;br /&gt;append messtab.&lt;br /&gt;&lt;br /&gt;endform. " fbv0_dele2&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form BDC_DYNPRO&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;form bdc_dynpro using program dynpro.&lt;br /&gt;clear bdcdata.&lt;br /&gt;bdcdata-program = program.&lt;br /&gt;bdcdata-dynpro = dynpro.&lt;br /&gt;bdcdata-dynbegin = 'X'.&lt;br /&gt;append bdcdata.&lt;br /&gt;endform. "BDC_DYNPRO&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form BDC_FIELD&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;form bdc_field using fnam fval.&lt;br /&gt;clear bdcdata.&lt;br /&gt;bdcdata-fnam = fnam.&lt;br /&gt;bdcdata-fval = fval.&lt;br /&gt;append bdcdata.&lt;br /&gt;endform. "BDC_FIELD&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form seleccionar_vbkpf&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Selección de datos de la tabla vbkpf&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form seleccionar_vbkpf .&lt;br /&gt;*Añado into corresponding fields&lt;br /&gt;*Y cambio este select...endselect por un select&lt;br /&gt;*into corresponding fields of table y hacer count = sy-dbcnt&lt;br /&gt;&lt;br /&gt;* select * from vbkpf into corresponding fields of tbkpf&lt;br /&gt;* where ausbk in bukrs&lt;br /&gt;* and belnr in belnr&lt;br /&gt;* and gjahr in gjahr&lt;br /&gt;* and budat in budat&lt;br /&gt;* and bldat in bldat&lt;br /&gt;* and blart in blart&lt;br /&gt;* and bktxt in bktxt&lt;br /&gt;* and xblnr in xblnr&lt;br /&gt;* and usnam in usnam&lt;br /&gt;* and bstat eq 'V'&lt;br /&gt;* and xwffr in xwffr&lt;br /&gt;* and xfrge in xfrge&lt;br /&gt;* and xprfg in xprfg.&lt;br /&gt;* append tbkpf.&lt;br /&gt;* count = count + 1.&lt;br /&gt;* endselect.&lt;br /&gt;* sort tbkpf by ausbk belnr gjahr.&lt;br /&gt;&lt;br /&gt;"La tabla, bien limpita&lt;br /&gt;clear tbkpf. refresh tbkpf.&lt;br /&gt;&lt;br /&gt;select * from vbkpf&lt;br /&gt;into corresponding fields of table tbkpf&lt;br /&gt;where ausbk in bukrs&lt;br /&gt;and belnr in belnr&lt;br /&gt;and gjahr in gjahr&lt;br /&gt;and budat in budat&lt;br /&gt;and bldat in bldat&lt;br /&gt;and blart in blart&lt;br /&gt;and bktxt in bktxt&lt;br /&gt;and xblnr in xblnr&lt;br /&gt;and usnam in usnam&lt;br /&gt;and bstat eq 'V'&lt;br /&gt;and xwffr in xwffr&lt;br /&gt;and xfrge in xfrge&lt;br /&gt;and xprfg in xprfg&lt;br /&gt;order by ausbk belnr gjahr.&lt;br /&gt;clear count.&lt;br /&gt;count = sy-dbcnt.&lt;br /&gt;&lt;br /&gt;endform. " seleccionar_vbkpf&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form escribir_listado&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Muestra por pantalla el contenido de TBKPF, salvo el campo&lt;br /&gt;* TBKPF-TRATAR; en su lugar escribe un CHECKBOX&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form escribir_listado .&lt;br /&gt;&lt;br /&gt;if count = 0.&lt;br /&gt;write: /, text-005.&lt;br /&gt;else.&lt;br /&gt;write: /, text-006, count, /.&lt;br /&gt;uline.&lt;br /&gt;*Una cabecera&lt;br /&gt;&lt;br /&gt;write:&lt;br /&gt;* at 3(5) 'AUSBK',&lt;br /&gt;* at 9(5) 'BUKRS',&lt;br /&gt;* at 15(10) 'BELNR',&lt;br /&gt;* at 26(7) 'GJAHR'.&lt;br /&gt;at 3(5) 'Soc.',&lt;br /&gt;at 9(5) 'Soc.',&lt;br /&gt;at 15(10) 'Doc.',&lt;br /&gt;at 26(9) 'Ejercicio'.&lt;br /&gt;uline.&lt;br /&gt;&lt;br /&gt;format hotspot on.&lt;br /&gt;loop at tbkpf.&lt;br /&gt;gv_check = space.&lt;br /&gt;write:&lt;br /&gt;/,&lt;br /&gt;gv_check as checkbox, "No escribe de tabla...&lt;br /&gt;at 3(5) tbkpf-ausbk,&lt;br /&gt;at 9(5) tbkpf-bukrs,&lt;br /&gt;at 15(10) tbkpf-belnr,&lt;br /&gt;at 26(7) tbkpf-gjahr.&lt;br /&gt;hide: tbkpf-tratar, tbkpf-belnr.&lt;br /&gt;endloop.&lt;br /&gt;gv_lineas = sy-linno.&lt;br /&gt;endif.&lt;br /&gt;add 1 to gv_veces.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;endform. " escribir_listado&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form revisar_marcados&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Al activar un checkbox, no se genera evento (no hay fcode)&lt;br /&gt;* en este perform se revisan las casillas que están marcadas&lt;br /&gt;* y se actualiza la tabla tbkpf usando la tabla local lt_tbkpf.&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form revisar_marcados.&lt;br /&gt;&lt;br /&gt;data: wa_linea(255) type c,&lt;br /&gt;lt_tbkpf like tbkpf occurs 5 with header line,&lt;br /&gt;wa_tbkpf like line of tbkpf,&lt;br /&gt;lv_belnr(10) type c,&lt;br /&gt;lv_tratar type c,&lt;br /&gt;lv_long type i,&lt;br /&gt;lv_times type i.&lt;br /&gt;&lt;br /&gt;clear:&lt;br /&gt;wa_linea, lv_belnr, lv_tratar, lv_long, lv_times, lt_tbkpf.&lt;br /&gt;refresh lt_tbkpf.&lt;br /&gt;&lt;br /&gt;do gv_lineas times.&lt;br /&gt;&lt;br /&gt;read line sy-index line value into wa_linea.&lt;br /&gt;"Comprobamos que sea una línea con "datos"&lt;br /&gt;"Y también que se tenga que tratar dicha línea&lt;br /&gt;if wa_linea+2(4) eq 'AENA' and&lt;br /&gt;wa_linea(1) eq 'X'.&lt;br /&gt;"Comprobamos el CHECKBOX&lt;br /&gt;lv_tratar = wa_linea(1).&lt;br /&gt;"COMPROBAMOS EL PEDIDO&lt;br /&gt;lv_belnr = wa_linea+14(10).&lt;br /&gt;lv_long = strlen( lv_belnr ).&lt;br /&gt;lv_times = 10 - lv_long.&lt;br /&gt;do lv_times times.&lt;br /&gt;concatenate '0' lv_belnr into lv_belnr.&lt;br /&gt;enddo.&lt;br /&gt;read table tbkpf with key belnr = lv_belnr.&lt;br /&gt;"Modificamos la tabla si es necesario&lt;br /&gt;if sy-subrc eq 0. "Ha leído la tabla&lt;br /&gt;tbkpf-tratar = lv_tratar.&lt;br /&gt;move-corresponding tbkpf to lt_tbkpf.&lt;br /&gt;append lt_tbkpf. clear lt_tbkpf.&lt;br /&gt;endif.&lt;br /&gt;"La tabla se ha modificado&lt;br /&gt;endif.&lt;br /&gt;enddo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* "Ahora modifico la tabla&lt;br /&gt;loop at lt_tbkpf.&lt;br /&gt;loop at tbkpf where belnr = lt_tbkpf-belnr.&lt;br /&gt;tbkpf-tratar = 'X'.&lt;br /&gt;modify tbkpf.&lt;br /&gt;endloop.&lt;br /&gt;endloop.&lt;br /&gt;&lt;br /&gt;endform. " revisar_marcados&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form marcar_todos&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Marca todos los checkboxes del listado&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form marcar_todos .&lt;br /&gt;&lt;br /&gt;do gv_lineas times.&lt;br /&gt;&lt;br /&gt;read line sy-index field value gv_check.&lt;br /&gt;gv_check = 'X'.&lt;br /&gt;modify line sy-index field value gv_check.&lt;br /&gt;&lt;br /&gt;enddo.&lt;br /&gt;&lt;br /&gt;endform. " marcar_todos&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form DESMARCAR_TODOS&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Desmarca todos los checkboxes del listado&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;form desmarcar_todos .&lt;br /&gt;&lt;br /&gt;do gv_lineas times.&lt;br /&gt;&lt;br /&gt;read line sy-index field value gv_check.&lt;br /&gt;gv_check = ' '.&lt;br /&gt;modify line sy-index field value gv_check.&lt;br /&gt;&lt;br /&gt;enddo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;endform. " DESMARCAR_TODOS&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form marcar_uno&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Marca un solo elemento,&lt;br /&gt;* - cuando se selecciona una línea (ya que FORMAT HOTSPOT = ON)&lt;br /&gt;* - cuando se pulsa el botón &amp;amp;ONE (actualmente deshabilitado)&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form marcar_uno .&lt;br /&gt;&lt;br /&gt;data: lv_lilli like sy-lilli.&lt;br /&gt;lv_lilli = sy-lilli.&lt;br /&gt;&lt;br /&gt;read line sy-lilli field value gv_check.&lt;br /&gt;if gv_check eq 'X'.&lt;br /&gt;gv_check = space.&lt;br /&gt;else.&lt;br /&gt;gv_check = 'X'.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;modify line lv_lilli field value gv_check.&lt;br /&gt;&lt;br /&gt;endform. " marcar_uno&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-478231976972532109?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/478231976972532109/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=478231976972532109' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/478231976972532109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/478231976972532109'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/11/leer-checkboxes-en-un-listado.html' title='Leer checkboxes en un listado'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_02ypv8zpHEQ/R0L9cOF0xSI/AAAAAAAAABI/oyaU61v4zFk/s72-c/status_dele1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-310304479242427052</id><published>2007-10-09T15:34:00.000+01:00</published><updated>2007-11-20T16:24:20.301Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Call Transaction'/><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='Submit'/><title type='text'>Call Transaction VS. Submit</title><content type='html'>A la hora de llamar a un programa desde otro programa, si este es de tipo report y además tiene una transacción que lo ejecute, se puede emplear tanto un "CALL" como un "SUBMIT". ¿Cuáles son las diferencia entre uno y otro? Que yo sepa:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. El CALL TRANSACTION puede llamar a cualquier tipo de programas, sólo hay que crearles una transacción (si no la tienen).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. El CALL TRANSACTION permite usar una tabla de tipo BDCDATA, y simular un conjunto de acciones (como en un batch input). También permite usar parámetros.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. El SUBMIT ejecuta el programa sin preguntar por la pantalla por defecto (es decir, si no se le pasan valores a los rangos, toma los que haya por defecto en el caso de que haya pantalla de selección). También permite el uso de parámetros.&lt;br /&gt;&lt;br /&gt;Para ilustrarlo, he hecho el siguiente programita, que básicamente llama a la trasacción WE05 usando el primer número de idoc que encuentre ese día.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Report Z_AGH_CALL&lt;br /&gt;*&amp;amp;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Tres ejemplos para llamar a una transacción.&lt;br /&gt;*&amp;amp; Se usará de ejemplo la transacción WE05 y se le pasará el&lt;br /&gt;*&amp;amp; Número de idoc&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Alberto García de Haro&lt;br /&gt;*&amp;amp; &lt;a href="http://misprogramasabap.blogspot.com/"&gt;http://misprogramasabap.blogspot.com/&lt;/a&gt;&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Textos de selección:&lt;br /&gt;* P_BDC Call Transacion y bdcdata&lt;br /&gt;* P_PAR Call Transaction y parámetros&lt;br /&gt;* P_SUB Submit&lt;br /&gt;*&amp;amp; Símbolos de texto&lt;br /&gt;* 001 Opciones de ejecución&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;report z_agh_call.&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; TOP: variables, tablas internas, etc.&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;data: obj like edidc-docnum.&lt;br /&gt;data: begin of i_bdc_data occurs 10.&lt;br /&gt;include structure bdcdata.&lt;br /&gt;data: end of i_bdc_data.&lt;br /&gt;data: begin of i_rspar occurs 10.&lt;br /&gt;include structure rsparams.&lt;br /&gt;data: end of i_rspar.&lt;br /&gt;tables:&lt;br /&gt;usr02.&lt;br /&gt;data: begin of i_users occurs 10.&lt;br /&gt;include structure usr02.&lt;br /&gt;data: end of i_users.&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; PANTALLA DE SELECCIÓN&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;selection-screen begin of block bl1 with frame title text-001.&lt;br /&gt;parameters:&lt;br /&gt;p_sub radiobutton group gr1,&lt;br /&gt;p_par radiobutton group gr1,&lt;br /&gt;p_bdc radiobutton group gr1.&lt;br /&gt;selection-screen end of block bl1.&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; EVENTOS&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;start-of-selection.&lt;br /&gt;perform seleccionar_idoc changing obj.&lt;br /&gt;&lt;br /&gt;if p_sub eq 'X'.&lt;br /&gt;perform llamada_submit.&lt;br /&gt;elseif p_par eq 'X'.&lt;br /&gt;perform llamada_parametros.&lt;br /&gt;else. "debe ser p_bdc eq 'X'&lt;br /&gt;perform llamada_bdcdata.&lt;br /&gt;endif.&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; SUBRUTINAS&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form seleccionar_idoc&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;* Selecciona un número de idoc&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;* &lt;--P_OBJ nº de idoc&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;form seleccionar_idoc changing p_obj.&lt;br /&gt;data: fecha like sy-datum, d_cont type i. "Para usar la fecha&lt;br /&gt;fecha = sy-datum.&lt;br /&gt;clear d_cont.&lt;br /&gt;do.&lt;br /&gt;select single docnum into p_obj from edidc&lt;br /&gt;where credat eq sy-datum.&lt;br /&gt;if sy-subrc eq 0 or d_cont = 30.&lt;br /&gt;"encontró un idoc O llegó a 30 días sin encontrar nada&lt;br /&gt;exit.&lt;br /&gt;endif.&lt;br /&gt;****RESTAMOS UN DÍA&lt;br /&gt;call function 'SUBTRACT_TIME_FROM_DATE'&lt;br /&gt;exporting&lt;br /&gt;i_idate = fecha&lt;br /&gt;i_time = 1&lt;br /&gt;i_iprkz = 'D'&lt;br /&gt;importing&lt;br /&gt;o_idate = fecha.&lt;br /&gt;add 1 to d_cont.&lt;br /&gt;enddo.&lt;br /&gt;endform. " seleccionar_idoc&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&amp;amp;&lt;br /&gt;*&amp;amp; Form llamada_submit&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------&lt;br /&gt;**&amp;amp; Llamada con la sentencia submit&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;form llamada_submit .&lt;br /&gt;ranges ndocc for edidc-docnum.&lt;br /&gt;clear: ndocc.&lt;br /&gt;move:&lt;br /&gt;'I' to ndocc-sign,&lt;br /&gt;'EQ' to ndocc-option,&lt;br /&gt;obj to ndocc-low.&lt;br /&gt;append ndocc.&lt;br /&gt;&lt;br /&gt;submit rseidoc2 with docnum in ndocc&lt;br /&gt;and return.&lt;br /&gt;&lt;br /&gt;endform. " llamada_submit&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form llamada_parametros&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;Llamada con call transaction y parámetros&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;form llamada_parametros .&lt;br /&gt;set parameter id 'DCN' field obj.&lt;br /&gt;call transaction 'WE05'.&lt;br /&gt;endform. " llamada_parametros&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form llamada_bdcdata&lt;br /&gt;*&amp;amp;---------------------------------------------------------------------*&lt;br /&gt;Llamada con call transaction y bdc_data&lt;br /&gt;*----------------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;form llamada_bdcdata .&lt;br /&gt;&lt;br /&gt;*Llenamos la tabla&lt;br /&gt;refresh i_bdc_data.&lt;br /&gt;i_bdc_data-program = 'RSEIDOC2'.&lt;br /&gt;i_bdc_data-dynpro = '1000'.&lt;br /&gt;i_bdc_data-dynbegin = 'X'.&lt;br /&gt;append i_bdc_data. clear i_bdc_data.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;i_bdc_data-fnam = 'DOCNUM-LOW'.&lt;br /&gt;i_bdc_data-fval = obj.&lt;br /&gt;append i_bdc_data. clear i_bdc_data.&lt;br /&gt;&lt;br /&gt;call transaction 'WE05' using i_bdc_data.&lt;br /&gt;&lt;br /&gt;endform. " llamada_bdcdata&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-310304479242427052?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/310304479242427052/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=310304479242427052' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/310304479242427052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/310304479242427052'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/10/call-transaction-vs-submit.html' title='Call Transaction VS. Submit'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-1372357843968399557</id><published>2007-08-09T08:27:00.001+01:00</published><updated>2007-10-27T16:38:51.664+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reports'/><title type='text'>z_ordenes</title><content type='html'>&lt;div align="justify"&gt;El siguiente report modifica el de &lt;a href="http://atejada.blogspot.com/" target="_new"&gt;Álvaro Tejada&lt;/a&gt;, porque lo copié tal cual y no me compilaba. Le metes un programa o transacción, y te dice las órdenes de transporte que afectan a dicho programa; muy útil si tienes que hacer un listado de las órdenes que has liberado y no tienes ni idea, sobre todo en empresas donde el usuario de desarrollo es para varias personas.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div align="justify"&gt;&lt;span style="font-family:courier new;font-size:78;"&gt;report z_ordenes.&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* Lista las órdenes de transporte de un programa o transacción *&lt;br /&gt;* p_tcode --&gt; transacción *&lt;br /&gt;* p_pgmna --&gt; programa *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* Alberto García de Haro, 09/08/2007 *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* DECLARACION DE TYPES *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;types: begin of ty_e071,&lt;br /&gt;trkorr type e071-trkorr,&lt;br /&gt;object type e071-object,&lt;br /&gt;obj_name type e071-obj_name,&lt;br /&gt;end of ty_e071.&lt;br /&gt;&lt;br /&gt;types: begin of ty_e071_entry,&lt;br /&gt;trkorr type e071-trkorr,&lt;br /&gt;end of ty_e071_entry.&lt;br /&gt;&lt;br /&gt;types: begin of ty_e070,&lt;br /&gt;trkorr type e070-trkorr,&lt;br /&gt;trstatus type e070-trstatus,&lt;br /&gt;tarsystem type e070-tarsystem,&lt;br /&gt;as4user type e070-as4user,&lt;br /&gt;as4date type e070-as4date,&lt;br /&gt;as4time type e070-as4time,&lt;br /&gt;as4text type e07t-as4text,&lt;br /&gt;end of ty_e070.&lt;br /&gt;&lt;br /&gt;types: begin of ctslg_action,&lt;br /&gt;date like tstrfcofil-trdate,&lt;br /&gt;time like tstrfcofil-trtime,&lt;br /&gt;rc like tstrfcofil-retcode,&lt;br /&gt;end of ctslg_action,&lt;br /&gt;&lt;br /&gt;ctslg_actions type sorted table of ctslg_action&lt;br /&gt;with unique key date time&lt;br /&gt;initial size 2,&lt;br /&gt;&lt;br /&gt;begin of ctslg_step,&lt;br /&gt;clientid like tstrfcofil-tarclient,&lt;br /&gt;stepid like tstrfcofil-function,&lt;br /&gt;rc like tstrfcofil-retcode,&lt;br /&gt;actions type ctslg_actions,&lt;br /&gt;end of ctslg_step,&lt;br /&gt;&lt;br /&gt;ctslg_steps type ctslg_step occurs 10,&lt;br /&gt;&lt;br /&gt;begin of ctslg_system,&lt;br /&gt;systemid like tstrfcofil-tarsystem,&lt;br /&gt;rc like tstrfcofil-retcode,&lt;br /&gt;steps type ctslg_steps,&lt;br /&gt;end of ctslg_system,&lt;br /&gt;&lt;br /&gt;ctslg_systems type ctslg_system occurs 10,&lt;br /&gt;&lt;br /&gt;begin of ctslg_mergeline,&lt;br /&gt;trkorr type trkorr,&lt;br /&gt;rc like tstrfcofil-retcode,&lt;br /&gt;end of ctslg_mergeline,&lt;br /&gt;&lt;br /&gt;ctslg_mergelines type ctslg_mergeline occurs 0,&lt;br /&gt;&lt;br /&gt;begin of ctslg_cofile,&lt;br /&gt;exists type c,&lt;br /&gt;imported type c,&lt;br /&gt;del_lines_only type c,&lt;br /&gt;systems type ctslg_systems,&lt;br /&gt;merges type ctslg_mergelines,&lt;br /&gt;rc type i,&lt;br /&gt;end of ctslg_cofile.&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* DECLARACION DE TABLAS INTERNAS *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;data: t_e071 type standard table of ty_e071 with header line,&lt;br /&gt;t_e070 type standard table of ty_e070 with header line,&lt;br /&gt;t_e071_entry type standard table of ty_e071_entry&lt;br /&gt;with header line,&lt;br /&gt;doma_values type standard table of rpy_dval&lt;br /&gt;with header line,&lt;br /&gt;es_cofile type standard table of ctslg_cofile&lt;br /&gt;with header line,&lt;br /&gt;es_systems type standard table of ctslg_system,&lt;br /&gt;wa_systems type ctslg_systems with header line,&lt;br /&gt;es_steps type ctslg_steps,&lt;br /&gt;wa_steps type ctslg_steps with header line,&lt;br /&gt;es_actions type ctslg_actions,&lt;br /&gt;wa_actions type ctslg_actions with header line.&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* DECLARACION DE VARIABLES *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;data: w_pgmna type tstc-pgmna,&lt;br /&gt;w_name(41) type c,&lt;br /&gt;w_flag type c.&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* DECLARACION DE FIELD-SYMBOLS *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;field-symbols: &lt;t_e071&gt;like line of t_e071,&lt;br /&gt;&lt;t_e070&gt;like line of t_e070.&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* SELECTION-SCREEN *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;selection-screen begin of block data.&lt;br /&gt;parameters:&lt;br /&gt;p_tcode like tstc-tcode,&lt;br /&gt;p_pgmna like tstc-pgmna.&lt;br /&gt;selection-screen end of block data.&lt;br /&gt;&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;* START-OF-SELECTION *&lt;br /&gt;*-----------------------------------------------------------------*&lt;br /&gt;start-of-selection.&lt;br /&gt;&lt;br /&gt;perform validar_entrada.&lt;br /&gt;if w_flag eq space.&lt;br /&gt;perform obtener_ordenes.&lt;br /&gt;perform imprimir_ordenes.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;*&amp;amp;----------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form VALIDAR_ENTRADA *&lt;br /&gt;*&amp;amp;----------------------------------------------------------------*&lt;br /&gt;form validar_entrada.&lt;br /&gt;&lt;br /&gt;if p_tcode ne space.&lt;br /&gt;select single pgmna&lt;br /&gt;into w_pgmna&lt;br /&gt;from tstc&lt;br /&gt;where tcode eq p_tcode.&lt;br /&gt;if sy-subrc eq 0.&lt;br /&gt;w_flag = space.&lt;br /&gt;else.&lt;br /&gt;message s368(00) with 'La transacción solicitada no existe'.&lt;br /&gt;w_flag = 'X'.&lt;br /&gt;endif.&lt;br /&gt;elseif p_pgmna ne space.&lt;br /&gt;select single pgmna&lt;br /&gt;into w_pgmna&lt;br /&gt;from tstc&lt;br /&gt;where pgmna eq p_pgmna.&lt;br /&gt;if sy-subrc eq 0.&lt;br /&gt;w_flag = space.&lt;br /&gt;else.&lt;br /&gt;message s368(00) with 'El programa solicitado no existe'.&lt;br /&gt;w_flag = 'X'.&lt;br /&gt;endif.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;endform. " VALIDAR_ENTRADA&lt;br /&gt;&lt;br /&gt;*&amp;amp;----------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form OBTENER_ORDENES *&lt;br /&gt;*&amp;amp;----------------------------------------------------------------*&lt;br /&gt;form obtener_ordenes.&lt;br /&gt;&lt;br /&gt;call function 'RPY_DOMAIN_READ'&lt;br /&gt;exporting&lt;br /&gt;doma_name = 'TRSTATUS'&lt;br /&gt;language = sy-langu&lt;br /&gt;tables&lt;br /&gt;doma_values = doma_values&lt;br /&gt;exceptions&lt;br /&gt;cancelled = 1&lt;br /&gt;not_found = 2&lt;br /&gt;permission_error = 3&lt;br /&gt;illegal_type = 4&lt;br /&gt;others = 5.&lt;br /&gt;if sy-subrc &lt;&gt; 0.&lt;br /&gt;message id sy-msgid type sy-msgty number sy-msgno&lt;br /&gt;with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;concatenate w_pgmna '%'&lt;br /&gt;into w_name.&lt;br /&gt;&lt;br /&gt;select trkorr object obj_name&lt;br /&gt;into table t_e071&lt;br /&gt;from e071&lt;br /&gt;where obj_name like w_name&lt;br /&gt;and object eq 'REPS'.&lt;br /&gt;&lt;br /&gt;if not t_e071[] is initial.&lt;br /&gt;loop at t_e071 assigning &lt;t_e071&gt;.&lt;br /&gt;move &lt;t_e071&gt;to t_e071_entry.&lt;br /&gt;append t_e071_entry.&lt;br /&gt;endloop.&lt;br /&gt;&lt;br /&gt;sort t_e071_entry.&lt;br /&gt;delete adjacent duplicates from t_e071_entry.&lt;br /&gt;&lt;br /&gt;if not t_e071_entry[] is initial.&lt;br /&gt;select e070~trkorr trstatus tarsystem&lt;br /&gt;as4user as4date as4time&lt;br /&gt;as4text&lt;br /&gt;into table t_e070&lt;br /&gt;from ( e070 inner join e07t&lt;br /&gt;on e070~trkorr eq e07t~trkorr )&lt;br /&gt;for all entries in t_e071_entry&lt;br /&gt;where e070~trkorr eq t_e071_entry-trkorr&lt;br /&gt;and langu eq sy-langu.&lt;br /&gt;&lt;br /&gt;sort t_e070 by as4date as4time descending.&lt;br /&gt;&lt;br /&gt;endif.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;endform. " OBTENER_ORDENES&lt;br /&gt;&lt;br /&gt;*&amp;amp;----------------------------------------------------------------*&lt;br /&gt;*&amp;amp; Form IMPRIMIR_ORDENES *&lt;br /&gt;*&amp;amp;----------------------------------------------------------------*&lt;br /&gt;form imprimir_ordenes.&lt;br /&gt;&lt;br /&gt;data: w_trkorr type e070-trkorr.&lt;br /&gt;&lt;br /&gt;write:&lt;br /&gt;1 'Orden' ,12 'Estado',&lt;br /&gt;22 'Destino', 31 'Nombre',92 'Fecha',104 'Hora'.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;font-size:78%;"&gt;loop at t_e070 assigning &lt;t_e070&gt;.&lt;br /&gt;&lt;br /&gt;clear: es_cofile.&lt;br /&gt;refresh: es_cofile.&lt;br /&gt;&lt;br /&gt;call function 'TR_READ_GLOBAL_INFO_OF_REQUEST'&lt;br /&gt;exporting&lt;br /&gt;iv_trkorr = &lt;t_e070&gt;-trkorr&lt;br /&gt;iv_dir_type = 'T'&lt;br /&gt;importing&lt;br /&gt;es_cofile = es_cofile.&lt;br /&gt;&lt;br /&gt;append es_cofile.&lt;br /&gt;read table es_cofile index 1.&lt;br /&gt;move es_cofile-systems to es_systems.&lt;br /&gt;loop at es_systems into wa_systems.&lt;br /&gt;move wa_systems-steps to es_steps.&lt;br /&gt;loop at es_steps into wa_steps. "WHERE STEPID EQ 'G'.&lt;br /&gt;move wa_steps-actions to es_actions.&lt;br /&gt;loop at es_actions into wa_actions.&lt;br /&gt;endloop.&lt;br /&gt;read table doma_values&lt;br /&gt;with key domvalue_l = &lt;t_e070&gt;-trstatus.&lt;br /&gt;&lt;br /&gt;if w_trkorr ne &lt;t_e070&gt;-trkorr.&lt;br /&gt;w_trkorr = &lt;t_e070&gt;-trkorr.&lt;br /&gt;skip 1.&lt;br /&gt;endif.&lt;br /&gt;&lt;br /&gt;write:/1 &lt;t_e070&gt;-trkorr,12 doma_values-ddtext,&lt;br /&gt;22 wa_systems-systemid,31 &lt;t_e070&gt;-as4text,&lt;br /&gt;92 wa_actions-date,104 wa_actions-time.&lt;br /&gt;endloop.&lt;br /&gt;endloop.&lt;br /&gt;&lt;br /&gt;endloop.&lt;br /&gt;endform. " IMPRIMIR_ORDENES&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-1372357843968399557?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/1372357843968399557/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=1372357843968399557' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/1372357843968399557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/1372357843968399557'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/08/zordenes.html' title='z_ordenes'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-6980700240404489299</id><published>2007-06-11T08:24:00.000+01:00</published><updated>2007-06-11T08:36:03.977+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALV'/><category scheme='http://www.blogger.com/atom/ns#' term='Plantillas'/><title type='text'>ALV Jerárquico</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;REPORT zalv_jerarquico.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;* Por: Jorge Serra (AbapLife) &lt;/span&gt;&lt;/span&gt;&lt;a href="http://abaplife.bitacoras.com/"&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;http://abaplife.bitacoras.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* Se trata de una ejemplo de listado ALV jerarquico.&lt;br /&gt;* Propósito:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* ---------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* Voy mostrar un listado de pedidos de compras (datos de cabecera)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* y sus posiciones (datos de posicion)&lt;br /&gt;* Pasos esenciales (Buscar el simbolo '§')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* ----------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* 1. Definición estructuras y tablas necesarias&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* 2. Definimos las tablas con los datos de salida&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* 3. Toma de datos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* 4. Definición estructura y formato de salida&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* 5. Mostrar listado&lt;br /&gt;*&lt;-- § Paso 1. Definicion estructuras y tablas necesarias&lt;br /&gt;* Type Pool donde vienen definidas todas las estructuras y tablas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPE-POOLS: slis.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* Catálogo de campos: contiene la descripción de los campos de salida&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* Especificaciones de la disposición de la lista: descripción de la&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;*  estructura de salida&lt;/span&gt;      &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gs_layout TYPE slis_layout_alv,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;* Relacion entre los datos de cabecera y posicion&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;     gs_key TYPE slis_keyinfo_alv,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;*&lt;/span&gt;&lt;span style="color:#3333ff;"&gt; Nombre del programa      g_repid LIKE sy-repid.&lt;br /&gt;*&lt;-- § Paso 2. Definimos las tablas con los datos de salida&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPES: BEGIN OF st_header. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;       INCLUDE STRUCTURE ekko.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPES: END OF st_header.&lt;br /&gt;TYPES: BEGIN OF st_item. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;       INCLUDE STRUCTURE ekpo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPES: END OF st_item.&lt;br /&gt;DATA:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;     gt_header TYPE STANDARD TABLE OF st_header WITH HEADER LINE, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;     gt_item TYPE STANDARD TABLE OF st_item WITH HEADER LINE.&lt;br /&gt;INITIALIZATION.&lt;br /&gt;  g_repid = sy-repid.&lt;br /&gt;START-OF-SELECTION.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*&lt;-- § Paso 3. Toma de datos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  PERFORM toma_datos.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*&lt;-- § Paso 4. Estructura y formato de salida&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  PERFORM init_fieldcat.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  PERFORM init_layout.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  PERFORM init_key.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*&lt;-- § Paso 5. Mostrar listado&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  PERFORM listado.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*&amp;&amp;amp;-----------------------------------------------------------------&amp;&amp;amp;*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*       SUBRUTINAS DEL PROGRAMA                                       *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;*&amp;&amp;amp;-----------------------------------------------------------------&amp;&amp;amp;*&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*       FORM INIT_FIELDCAT                                            *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM init_fieldcat.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;* Mediante esta tabla vamos a definir los campos que queremos mostrar&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;*  en el listado de salida.&lt;br /&gt;&lt;/span&gt;  gt_fieldcat-fieldname = 'EBELN'.  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_HEADER'.  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKKO'.  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;  gt_fieldcat-fieldname = 'EBELN'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_ITEM'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKPO'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-no_out = 'X'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;  gt_fieldcat-fieldname = 'EBELP'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_ITEM'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKPO'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;  gt_fieldcat-fieldname = 'MATNR'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_ITEM'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;  gt_fieldcat-fieldname = 'WERKS'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_ITEM'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;  gt_fieldcat-fieldname = 'MENGE'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_ITEM'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKPO'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;  gt_fieldcat-fieldname = 'MEINS'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-tabname = 'GT_ITEM'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gt_fieldcat-ref_tabname = 'EKPO'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  APPEND gt_fieldcat. CLEAR gt_fieldcat.&lt;br /&gt;ENDFORM.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*       FORM INIT_LAYOUT                                              *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM init_layout.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;* Mediante esta estructura podemos definir el formato de salida&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gs_layout-zebra = 'X'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gs_layout-f2code = '&amp;ETA'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gs_layout-detail_popup = 'X'.&lt;br /&gt;ENDFORM.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*       FORM TOMA_DATOS                                               *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM toma_datos.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;* Los datos deben guardarse en la tabla interna de salida&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  SELECT * FROM ekko&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;           UP TO 100 ROWS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;           INTO TABLE gt_header.&lt;br /&gt;  SELECT * FROM ekpo&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;           INTO TABLE gt_item&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;           FOR ALL ENTRIES IN gt_header &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;          WHERE ebeln = gt_header-ebeln.&lt;br /&gt;ENDFORM.                    " TOMA_DATOS&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*       FORM LISTADO                                                  *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM listado.&lt;br /&gt;  CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;    EXPORTING&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_INTERFACE_CHECK              = ' '&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;      i_callback_program             = g_repid&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_CALLBACK_PF_STATUS_SET       = ' '&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_CALLBACK_USER_COMMAND        = ' '&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;    is_layout                      = gs_layout&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;    it_fieldcat                    = gt_fieldcat[]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IT_EXCLUDING                   =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IT_SPECIAL_GROUPS              =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IT_SORT                        =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IT_FILTER                      =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IS_SEL_HIDE                    =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_SCREEN_START_COLUMN          = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_SCREEN_START_LINE            = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_SCREEN_END_COLUMN            = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_SCREEN_END_LINE              = 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_DEFAULT                      = 'X'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_SAVE                         = ' '&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IS_VARIANT                     =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IT_EVENTS                      =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IT_EVENT_EXIT                  =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;      i_tabname_header               = 'GT_HEADER'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;      i_tabname_item                 = 'GT_ITEM'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_STRUCTURE_NAME_HEADER        =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_STRUCTURE_NAME_ITEM          = &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;     is_keyinfo                     = gs_key&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IS_PRINT                       =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   IS_REPREP_ID                   =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_BUFFER_ACTIVE                =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   I_BYPASSING_BUFFER             =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* IMPORTING&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   E_EXIT_CAUSED_BY_CALLER        =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*   ES_EXIT_CAUSED_BY_USER         =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;    TABLES&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;      t_outtab_header                = gt_header[]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;      t_outtab_item                  = gt_item[]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt; EXCEPTIONS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;   PROGRAM_ERROR                  = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;   OTHERS                         = 2&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;   .  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;IF sy-subrc &lt;&gt; 0.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  ENDIF.&lt;br /&gt;ENDFORM.                    " LISTADO&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*       FORM INIT_KEY                                                 *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM init_key.&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;* Relacion entre los campos de cabecera y los de posicion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;  gs_key-header01 = 'EBELN'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:85%;"&gt;  gs_key-item01 = 'EBELN'.&lt;br /&gt;ENDFORM.                    " INIT_KEY&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-6980700240404489299?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/6980700240404489299/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=6980700240404489299' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/6980700240404489299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/6980700240404489299'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/06/alv-jerrquico.html' title='ALV Jerárquico'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-6347121202510328751</id><published>2007-06-11T08:06:00.000+01:00</published><updated>2007-06-11T08:21:12.341+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALV'/><category scheme='http://www.blogger.com/atom/ns#' term='Plantillas'/><title type='text'>ALV Simple</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;REPORT zalv_simple. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;* Jorge Serra (AbapLife) &lt;/span&gt;&lt;a href="http://abaplife.bitacoras.com"&gt;&lt;span style="color:#3333ff;"&gt;http://abaplife.bitacoras.com&lt;/span&gt;&lt;/a&gt;&lt;span style="color:#3333ff;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Se trata de un pequeño ejemplo de listado ALV para aquellos que nunca&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* han creado uno. Por supuesto, a los que ya sepáis algo de ALV, no&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* creo que os sirva de mucho &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Propósito:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* ---------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Voy mostrar un listado de posiciones de pedidos de compras &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Pasos esenciales (Buscar el simbolo '§')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* ----------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* 1. Definición estructuras y tablas necesarias&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* 2. Definimos la tabla con los datos de salida&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* 3. Toma de datos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* 4. Definición estructura y formato de salida&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* 5. Mostrar listado &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;-- § Paso 1. Definicion estructuras y tablas necesarias &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Type Pool donde vienen definidas todas las estructuras y tablas&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPE-POOLS: slis.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;* Catálogo de campos: contiene la descripción de los campos de salida&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Especificaciones de la disposición de la lista: descripción de la&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* estructura de salida &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gs_layout TYPE slis_layout_alv,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Nombre del programa g_repid LIKE sy-repid. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;-- § Paso 2. Definimos la tabla con los datos de salida&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPES: BEGIN OF st_output. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;INCLUDE STRUCTURE ekpo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TYPES: END OF st_output. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;DATA: gt_output TYPE STANDARD TABLE OF st_output WITH HEADER LINE. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;INITIALIZATION. g_repid = sy-repid. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;START-OF-SELECTION. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;-- § Paso 3. Toma de datos &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;PERFORM toma_datos. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;*&lt;-- § Paso 4. Estructura y formato de salida&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;PERFORM init_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;PERFORM init_layout. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;*&lt;-- § Paso 5. Mostrar listado&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;PERFORM listado. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&amp;&amp;amp;-----------------------------------------------------------------&amp;&amp;amp;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* SUBRUTINAS DEL PROGRAMA&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&amp;&amp;amp;-----------------------------------------------------------------&amp;&amp;amp;&lt;/span&gt; &lt;span style="font-family:arial;font-size:85%;"&gt;* &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* FORM INIT_FIELDCAT &lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;color:#3333ff;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM init_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Mediante esta tabla vamos a definir los campos que queremos mostrar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* en el listado de salida. &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-fieldname = 'EBELN'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;APPEND gt_fieldcat. CLEAR gt_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-fieldname = 'EBELP'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;APPEND gt_fieldcat. CLEAR gt_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-fieldname = 'MATNR'. gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;APPEND gt_fieldcat. CLEAR gt_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-fieldname = 'WERKS'. gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;APPEND gt_fieldcat. CLEAR gt_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-fieldname = 'MENGE'. gt_fieldcat-ref_tabname = 'EKPO'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;APPEND gt_fieldcat. CLEAR gt_fieldcat. gt_fieldcat-fieldname = 'MEINS'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gt_fieldcat-ref_tabname = 'EKPO'. APPEND gt_fieldcat. CLEAR gt_fieldcat. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;ENDFORM. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* FORM INIT_LAYOUT *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM init_layout. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Mediante esta estructura podemos definir el formato de salida &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gs_layout-zebra = 'X'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gs_layout-f2code = '&amp;amp;ETA'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;gs_layout-detail_popup = 'X'. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;ENDFORM. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* FORM TOMA_DATOS *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM toma_datos. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* Los datos deben guardarse en la tabla interna de salida &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;SELECT * FROM ekpo UP TO 100 ROWS INTO TABLE gt_output.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;ENDFORM. " TOMA_DATOS &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#3333ff;"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;* FORM LISTADO *&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;*---------------------------------------------------------------------*&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;FORM listado. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;EXPORTING &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;i_callback_program = g_repid &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;is_layout = gs_layout &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;it_fieldcat = gt_fieldcat[] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;TABLES t_outtab = gt_output &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;EXCEPTIONS program_error = 1 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;OTHERS = 2 . &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;IF sy-subrc &lt;&gt; 0. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;ENDIF. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;ENDFORM. " LISTADO&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-6347121202510328751?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/6347121202510328751/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=6347121202510328751' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/6347121202510328751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/6347121202510328751'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/06/alv-simple.html' title='ALV Simple'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3335159510606860442.post-543987048180683768</id><published>2007-05-28T09:56:00.000+01:00</published><updated>2007-05-28T10:00:58.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Segunda Parte</title><content type='html'>&lt;div align="justify"&gt;Curioso que a un informático le roben sus cuentas de yahoo, hotmail y gmail. Para acabar el chiste, me robaron mis blogs (este, y otro que tenía más personal). El lado bueno, si es que lo hay, es que puedo crearlos de nuevo (ya que los han borrado), aunque eso sí, desde cero. Qué se le va a hacer, como decimos en España, más se perdió en Cuba.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;Las ganas que tengo de ponerme a escribir entradas son mínimas, pero por lo menos tengo mis blogs. Vacíos, eso sí, pero los tengo. A ver qué puedo hacer...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3335159510606860442-543987048180683768?l=misprogramasabap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://misprogramasabap.blogspot.com/feeds/543987048180683768/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3335159510606860442&amp;postID=543987048180683768' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/543987048180683768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3335159510606860442/posts/default/543987048180683768'/><link rel='alternate' type='text/html' href='http://misprogramasabap.blogspot.com/2007/05/segunda-parte.html' title='Segunda Parte'/><author><name>culanas</name><uri>http://www.blogger.com/profile/09041514602788251373</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
