viernes, 21 de abril de 2017

Formato de Página - Smartforms


Este es un smartform de indumotora que se imprime en matricial como ves ellos han creado un formato de página el cuál el funcional o encargado de la impresora debe hacer ya que se trabaja con medidas... una vez en tu backup nuevo escogas el formato de pagina que hayan creado el resto es acomodar. tu puedes!


pd: deben haber creado ya antes formatos de pagina z así que no habría problema.

miércoles, 12 de abril de 2017

SUBMIT SELECTION SCREEN

Aqui da otra opción de mantar un rango a un programa Z, recuerda que en el pgm Z debe estar creado como SELECT-OPTIONS por tanto el modo de envio a diferencia de parametros sería con IN...
en caso no funcionar y no dar tantas vueltas podrías probar con lo que esta en estos enlaces...
lo que hace es crea una tabla de tipo variables y le asigna dependiendo del elemento de la pantalla de selección del Z al que le harás submit... ejemplo

Aqui en la pantalla de selección del Z se llama SO2 es del tipo S por ser select options (Rangos en pantalla de selección) el Signo Option y valores...


  1. data: rsparams_tab type table of rsparams.
  2. rsparams_wa type rsparams.

  1. "select options
  2. Loop at so.
  3. rsparams_wa-selname = 'SO2'.
  4. rsparams_wa-kind = 'S'. "select options to be passed
  5. rsparams_wa-sign = so-sign.
  6. rsparams_wa-option = so-option.
  7. rsparams_wa-low = so-low.
  8. rsparams_wa-high = so-high.
  9. append rsparams_wa to rsparams_tab.
  10. endloop.
  11.  
  12. "parameters
  13. rsparams_wa-selname = 'PA2'.
  14. rsparams_wa-kind = 'P'. "parameters to be passed
  15. rsparams_wa-sign = 'I'.
  16. rsparams_wa-option = 'EQ'.
  17. rsparams_wa-low = pa.
  18. append rsparams_wa to rsparams_tab.


  1. SUBMIT program#2 WITH SELECTION-TABLE rsparams_tab AND RETURN.

esto lo encontrarás en el primer link

https://archive.sap.com/discussions/thread/1162251

en este segundo tendrás algo similar...

http://www.sapdev.co.uk/reporting/rep_submit.htm


espero te ayude, tu puedes! en internet si no encuentras la solución o tienes de donde guiarte no pierdes nada intentando este otro metodo!
vamos pollita!

domingo, 9 de abril de 2017

LÓGICA 10/04/2017

* Tu tabla, ti_pos por ejemplo con su work area st_pos, producto del submit dentro de su estructura tiene dentro de todos sus campos, los siguientes:

HKONT (cuenta)
LIFNR (acreedor)
DMBTR (ó el campo monto que vayas a tomar)

*Crearás dos tablas, TI_CALCULOS, TI_EXTERIOR con las siguientes estructuras respectivamente:

DATA: BEGIN OF ty_calculos,
      HKONT type BSEG-HKONT,                (cuenta)
      TOTAL_CTA type BSEG-DMBTR,          (monto total por cuenta)
      TOTAL_NAC type BSEG-DMBTR,         (monto total acreedor nacional x  cuenta)
      TOTAL_EXT type BSEG-DMBTR,           (monto total acreedor internacional x cuenta)
END OF ty_calculos.

DATA: BEGIN OF ty_exterior,
       HKONT type BSEG-HKONT,            (cuenta)
       MONTO type BSEG-dmbtr,                (monto total exterior x cuenta)
END OF ty_exterior.

*A estas le creatas sus estructuras ST_CALCULOS, ST_EXTERIOR y sus field symbols, FS_CALCULOS, FS_EXTERIOR.

*A tu tabla principal le harás un LOOP y dentro de este acumularas los datos a cada tabla...

LOOP AT TI_POS INTO ST_POS.
CLEAR: st_calculos, st_exterior.
"(no olvidar siempre limpiar las estructuras a agregar a una tabla con cada loop a la tabla matriz, ti_pos)

st_calculos-hkont = st_pos-hkont.
st_calculos-total_cta = st_pos-dmbtr.
COLLECT st_calculos INTO ti_calculos.    
"(esto hará que por se acumule los montos de cada cuenta haciendo un registro por cuenta y un acumulado del monto al finalizar el loop al TI_POS)

IF st_pos-lifnr+0(1) EQ '2'.
st_exterior-hkont = st_pos-hkont.
st_exterior-monto = st_pos-dmbtr.
COLLECT st_exterior INTO ti_exterior.
"(esto hará que por cada cuenta, para cada acreedor exterior de dicha cuenta se cree un registro por cuenta y un acumulado de todo monto acreedor exterior)
ENDIF.

ENDLOOP.

*Al final en tu tabla ST_CALCULOS tendrás el total por cada cuenta y en ST_EXTERIOR deberás tener por cada cuenta la suma de los montos cuyos acreedores sean del exterior (inician con 2). Finalmente con la ayuda de esta última tabla actualizarás la tabla de calculos, para esto te ayudarás del field symbol para actualizar cada registro apuntado.

LOOP AT st_calculos ASSIGNING <fs_calculos>.

READ TABLE ti_exterior INTO st_exterior WITH KEY hkont = <fs_calculos>-hkont.
IF sy-subrc EQ 0.
<fs_calculos>-total_ext = st_exterior-monto.
<fs_calculos>-total_nac = <fs_calculos>-total_cta - <fs_calculos>-total_ext.
"(esto hará que de la tabla CALCULOS busque en la tabla EXTERIOR la cuenta respectiva y tome el monto exterior por cada cuenta y con este haga
el calculo par asacar el total nacional)
ENDIF.
ENDLOOP.

*Con esta lógica ya tendrías en una tabla por cuenta los montos que requieres, podrías probar para empezar por dos cuentas.
Tu puedes, vamos, fuerza pollita!

miércoles, 5 de abril de 2017

texto dynpro 05/04/2017

Ya que creaste una dynpro donde insertaste un contenedor donde almacenar tu ALV...
debajo del contenedor crearías una etiqueta de texto donde solo se permita salida de dato...



y dentro de tu programa le
asignas antes de la salida al ALV el valor que llevará en este caso la cantidad de lineas que tenga tu ALV.


Esta cantidad la obtienes con el DESCRIBE TABLE gt_table LINES lv_lines.
Donde lv_lines es una variable de tipo entera. LV_LINES TYPE I.

En este ejemplo luego de la pantalla de la selección y antes, ojo, antes de la llamada al screen o al perform que llame al screen se llena los datos de pantalla. en la rutina datos_Caja.


y como se ve aquí se le asigna un valor, en tu caso sería le asignes el texto que indique la cantidad de lineas que tiene la tabla, un concatenate LV_LINES '/' LV_LINES into ws_bukrs por ejemplo
mostraria en tu etiqueta un 
50 / 50 esta etiqueta la colocarías debajo de tu contenedor del alv.


Si preguntas donde declaro esa etiqueta en el programa, la declaras en el top con el mismo nombre que llevará en la dynpro y del mismo tipo.

Tu puedes suerte!