:::: MENU ::::

este blog tiene como objetivo de compartir los conocimientos prácticos de cada lenguaje de programación más conocidos.

  • Lo mejor está por suceder

  • Easy to Customize

  • Customizable fonts.

miércoles, 21 de agosto de 2013

JUSTIFICACIÓN DE CAMPO HACIA LA DERECHA:



Hace unos días una compañera de trabajo se encontró desarrollando un tema de FI de Embargos de SUNAT y se vio con un problemilla, 




había que subir un archivo de texto plano algunos datos un reporte con un determinado formato Según el banco BCP ya que ellos lo cargan a su transfer para que facilite la trasferencia de los cobros de sus proveedores a la SUNAT.


El formato era justificar hacia la derecha los datos subidos, por ejemplo: 


DATA: lv_valor(15) TYPE char.


      lv_valor = '803'.


 El valor debería estar justificado así: '            803', 

 con espacios en blanco.


Entones Se me ocurrió hacer un pequeño código para ello y a lo mejor lo necesiten para otras cosas.


Uso la función que te agrega los ceros a la izquierda según la cantidad de caracteres que se le haya asignado a la variable. aqui se los dejo:

  DATA: lv_val   TYPE char15,    "Variable contiene el valor
        lv_cont  TYPE i,         "Contador

             " datos de prueba para visualizar y comparar el resultado
        lv_val2  TYPE char15,
        lv_val3  TYPE char15.
       
" Asignamos un valores a la variable lv_var
        lv_val = '8004'. 
        lv_val2 = '8004'.
        lv_val3 = '8004'.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

       EXPORTING
       INPUT         = lv_val

       IMPORTING
       OUTPUT        = lv_val.

   " Función para valor de Prueba con ceros.

   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

       EXPORTING
       INPUT         = lv_val2

       IMPORTING
       OUTPUT        = lv_val2.


*   este código cabía los ceros de la izquierda 
*   en espacios vacíos
*   hasta que encuentre un número diferente y ahí para.
    WHILE lv_val+lv_cont(1) = 0. 

            lv_val+lv_cont(1) = ''.
        lv_cont = lv_cont + 
1. " sumando 1 al contador

 ENDWHILE.


"Muestra la variable justificada
 WRITE:/ 'Valor Justificado     ', lv_val. 
"Muestra la variable con ceros
 WRITE:/ 'Valor Con ceros      ', lv_val2. 

"Muestra la variable son justificar
 WRITE:/ 'Valor sin Justificar ', lv_val3.



RESULTADO:




Y PROBLEMA SOLUCIONADO...

__________________________________________________________________________________


CONVERSIÓN DE VARIABLE TIPO MONEDA  A CARACTER




Esta vez tenemos un problema al realizar un batch input.
El el recording tenemos un campo de moneda, y el batch no acepta asignaciones de tipo wrbtr por lo tanto una de las soluciones es pasar e valor a cadena, pero que pasa si solo asignamos el valor a la variable cadena, o sorpresa el valor no aparece ya que se a ido hacia la izquierda, entonces lo que tenemos que hacer es usar un WRITE para la conversión, aquí les dejo el código.

DATA:
      lv_wrbtr_char(13) TYPE c,     " variable caracter
      lv_wrbtr          TYPE wrbtr. " Variable con valor decimal

      

lv_wrbtr = '1239.34'.

" transfiere Valor a Variable tipo Caracter


WRITE lv_wrbtr TO lv_wrbtr_char CURRENCY 'PEN'.



y problema solucionado....


__________________________________________________________________________________

AGREGAR CAMPO A ESTRUCTURA STANDARD





















Luego, botón nuevo…

























Creas la estructura con los campos adicionales que quieras, ojo siempre comenzar dichos campos con ZZ…..lo que deseen.






















Y LISTO PROBLEMA SOLUCIONADO...


__________________________________________________________________________________


CREAR TYPES INCLUYENDO UNA ESTRUCTURA

TYPES:  BEGIN   OF  ty_est.
" en caso de quere adicionar un campo más se agrega TYPES: y adicionamos 
" los campo que querramos.
TYPES:  zers    TYPE i.                " incluso podemos adicionar un campo más

              INCLUDE STRUCTURE ZEHR_PA0185IMP. " La estructura

TYPES:  END     OF ty_est.


Y LISTO ESTRUCTURA CREADA...

__________________________________________________________________________________



DOBLE CLIC EN REGISTRO PARA EJECUTAR UNA TX




    Para Solucionar el inconveniente se realiza lo siguiente:
  Dentro de nuestro User_Command agregamos estas lineas de         código.
  
  Hay que tener en cuenta si los datos que vamos a pasar a la    transacción tiene ID, si es así no tendrán ningún problema.
   
  Nota: lo que esta de rojo es lo que cambia. Lo de verde va exactamente igual.






__________________________________________________________________________________

REGRESAR A LA PANTALLA DE SELECCIÓN O DYNPRO ANTERIOR


Saludos Amigos, casi siempre me encuentro con colegas que tienen problemas con regresar siempre a su pantalla de selección a la una dynpro anterior. 

aquí les dejo el código, pequeño, pero no me negarán que es de gran ayuda.


Opción 1 : SCREEN 0.

  LEAVE SCREEN.


Opción2 : LEAVE TO SCREEN 0


martes, 20 de agosto de 2013

Estructura de Código para realizar un BATCH INPUT.

Estas variables siempre deben de ir. Tengan en cuenta siempre el orden del código y el standard.

*********************************************
*               DECLARACIÓN DE VARIABLES               *
*********************************************

DATA:
        gt_bdcdata        TYPE TABLE OF bdcdata,      " tabla guarda recording
        gt_messtab        TYPE TABLE OF bdcmsgcoll, " tabla que obtiene los mensajes
        gs_bdcdata        TYPE bdcdata,           " linea de cabecera de la tabla que guarda el recording
        gs_messtab        TYPE bdcmsgcoll.      "linea de cabecera de tabla que guarda el mensaje
       

DATA: BEGIN OF it_opt OCCURS 0.
            INCLUDE STRUCTURE CTU_PARAMS.
DATA: END OF it_opt.

DATA:
           v_mensaje      TYPE string,         " Se le asignarán los mensajes q se obtengan luego del batch
                                                             " para agregar a la tabla de mensajes.
           v_msgid          TYPE symsgid,    " variable ID de mensaje 
           v_msgno         TYPE symsgno.   " variable Número de mensaje

**************************************************
NOTA:
En caso de que se quiera Realizar carga masiva, habría que agregar este código dentro de un loop
que se le hace a la tabla que contiene los registros.

Simplemente nos servirán estas dos líneas para tener todo claro.
Luego de realizar el recording a la tx solicitada, copiamos lo generado en nuestro código lo editamos
de la siguiente forma.

OJO: los datos de dynpro tiene que enviarse en el perform BDC_DYNPRO  y los datos de cada movimiento que se hizo en dicha dynpro deben de enviarse en el perform BDC_FIELD.

*********************************************
*                       START OF SELECTION                       *
*********************************************

PERFORM bdc_dynpro USING 'SAPMP50A'        '1100'.
PERFORM bdc_field     USING 'BDC_CURSOR'   'RP50G-PERNR'.

REFRESH it_opt.   " contiene las opciones de recording
                 
                 it_opt-dismode   = 'N'.
                 it_opt-updmode = 'S'.
                 it_opt-racmmit   = 'X'.
                 it_opt-nobiend   = 'X'.
                 it_opt-nobiend   = SPACE.

CALL TRANSACTION 'TX' USING                    gt_bdcdata
                                               OPTIONS FROM   it_opt
                                               MESSAGES INTO gt_messtab.

LOOP AT gt_messtab INTO gw_messtab. " Asigna los mensajes recibidos en la tabla gt_messtab
                                                                   " a la tabla de mensajes que se retornará (T_MENSAJE)

                 v_msgid  = gw_messtab-msgid.
                 v_msgno = gw_messtab-msgnr.

       CALL FUNCTION 'K_MESSAGE_TRANSFORM'  " función que obtiene el mensaje                                                                                                                   " enviándole como datos el mensaje ID
                                                                                        " (clase de mensaje) y el número de Mensaje
                  EXPORTING
                  par_msgid                 = v_msgid
                  par_msgno                = v_msgno
                  IMPORTING
                  par_msgtx                 = v_mensaje.

      t_mensaje-msgerr = v_mensaje.    " se agrega el mensaje a la tabla de mensajes a mostrar.

*********************************************
*                DECLARACIÓN DE SUB_RUTINA           *
*********************************************

*&---------------------------------------------------------------------*
*&      Form  BDC_DYNPRO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0329   text
*      -->P_0330   text
*----------------------------------------------------------------------*
form BDC_DYNPRO  using program dynpro.

  clear gs_bdcdata.
  gs_bdcdata-program  = program.
  gs_bdcdata-dynpro   = dynpro.
  gs_bdcdata-dynbegin = 'X'.
  append gs_bdcdata to gt_bdcdata .

endform.                    " BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
form BDC_FIELD using fnam fval.

  clear gs_bdcdata.
  gs_bdcdata-fnam = fnam.
  gs_bdcdata-fval = fval.
  append gs_bdcdata to gt_bdcdata.


endform.                    " BDC_FIELD

A call-to-action text Contact us