:::: 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.

Simple, responsive theme, suitable for personal or corporate blog.

viernes, 19 de mayo de 2017



LLENAR RANGO CON NUEVA SENTENCIA ABAP 


*&----------------------------------*
*&  DATOS                              *
*&----------------------------------*


DATA:  gr_cretime          TYPE RANGE OF cpcretime.
DATA:  gv_cretime_low  TYPE cpcretime,
              gv_cretime_high TYPE cpcretime.

" datos de prueba para llenar el rango
  CONCATENATE sy-datum '000000' INTO gv_cretime_low.
  CONCATENATE sy-datum  '235959' INTO gv_cretime_high.

  gr_cretime VALUE #sign  'I' 
                                              option  'BT' 
                                              low      gv_cretime_low 
                                              high     gv_cretime_high ).




























miércoles, 12 de abril de 2017

jueves, 2 de febrero de 2017

OCULTAR PANTALLA CMD AL EJECUTAR .JAR


Siempre que querramos crear un instalardor ya sea tipo .exe o .jar (luego publicaré cómo crear un .exe a partir de un .jar) se genera una venta cdm como segunda pantalla y esta no se cierra hasta que la aplicación no se haya cerrado en su totalidad. Para ello se debe de usar un comando de windows que ocultará la pantalla negra del cdm que no suele verse bien. Espero les ayude:

El comando:

start /b javaw.exe -jar IPSAP.jar

Lo que se debe hacer:


1. Crear un .txt (bloc de notas) y agregar la sentencia: start /b javaw.exe -jar IPSAP.jar, esto hará que se oculte la venta.



2. Graciar y cambiar la extención de archivo .txt a .bat

3.1 en caso de tener un .jar el archivo que se debe ejecutar el es .bat
3.2 en caso de tener un archivo .exe sólo se ejecuta el .exe ya que este llama al .jar y emascara el .bat utilizando un programa que luego explicaré.






martes, 27 de diciembre de 2016

En el siguiente ejemplo se requiere filtrar sólo las cuentas contables de Caja y Banco, que vienen a ser las cuentas 1200000000 a 1299999999 para el país Perú.

El código debe quedar así:

INITIALIZATION.
* PARA OBTENER LAS CUENTAS CONTABLES PARA EL LIBRO
  PERFORM CONSTANTE_RANGO USING 'CTA_0010'  CHANGING LR_SAKNR_12.

 AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_SAKNR-LOW.
  PERFORM CTAS_GLOBAL.
  PERFORM DISPLAY_F4_HKONT CHANGING S_SAKNR-LOW.

Para ello debemos realizar lo siguiente:

1. Cómo se manejarán constantes, estas se deben de manejar a nivel de la tabla de constantes, por lo tanto se crear la tabla de constantes y luego se registra la constantes según el caso:


2. Luego se cargar la constantes en el programa:
    
    PERFORM CONSTANTE_RANGO USING 'CTA_0010'  CHANGING LR_SAKNR_12.

  donde CTA_'CTA_0010'' es el nombre del campo y LR_SAKNR_12 es el rango a quien se le          pasarán las cuentas de la tabla de constantes.

FORM CONSTANTE_RANGO USING    PI_FIELD     TYPE ZPLEFIE_FLDNM
                                                   CHANGING PO_RANGE TYPE TABLE.

  REFRESHPO_RANGE.

  SELECT SIGNO AS SIGN
         OPCION AS OPTION
         VALOR1 AS LOW
         VALOR2 AS HIGH
  INTO TABLE PO_RANGE
  FROM ZPLEFITCONST
  WHERE PROGRAMA EQ 'ZPLEFIR0302'  "<- Este es el nombre del programa
    AND CAMPO EQ PI_FIELD.

ENDFORM.


3. Hacemos un select a la tabla de cuentas con los filtros:

FORM CTAS_GLOBAL .
   
CHECK LINESGTD_HKONT 0.

 " Obtenemos el plan de cuentas
  SELECT SINGLE KTOPL INTO GS_KTOPL FROM T001
    WHERE BUKRS P_BUKRS.
   
" Obtenemos la lista de cuentas
  SELECT SAKNR TXT50 INTO TABLE GTD_HKONT FROM SKAT
    WHERE SPRAS SY-LANGU          " idioma
      AND KTOPL GS_KTOPL             " <- Plan de cuentas
      AND SAKNR IN LR_SAKNR_12. "<- Rango de cuentas

ENDFORM.                    " CTAS_GLOBAL

4. Por última agregamos la rutina con la lógica del matchcode:


FORM DISPLAY_F4_HKONT  CHANGING PO_HKONT.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        'SAKNR'
      WINDOW_TITLE    'Cuenta Contable'
      VALUE_ORG       'S'
    TABLES
      VALUE_TAB       GTD_HKONT
      RETURN_TAB      GTD_MATCH
    EXCEPTIONS
      PARAMETER_ERROR 1
      NO_VALUES_FOUND 2
      OTHERS          3.

  IF SY-SUBRC EQ 0.
    READ TABLE GTD_MATCH INDEX 1.
    IF SY-SUBRC 0.
      MOVE GTD_MATCH-FIELDVAL TO PO_HKONT.
    ENDIF.
  ENDIF.

ENDFORM.








jueves, 1 de septiembre de 2016

El siguiente código nos lista las rutas que existen en el servidor de SAP.

* Constantes locales
  CONSTANTS:lc_p TYPE c VALUE 'P',
                      lc_a TYPE dxfields-location VALUE 'A'.

* Variables locales
  DATA: li_host TYPE STANDARD TABLE OF msxxlist,
             lw_host TYPE msxxlist,
             lv_path TYPE dxfields-longpath,
             lv_ubicacion(1) TYPE c,
             lv_abend  TYPE c.

*En P_FILE va a quedar guardada la ruta del archivo del servidor
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME.

*- Machcode busqueda de archivo del servidor
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

*-Nombre del servidor
  CALL FUNCTION 'RFC_GET_LOCAL_SERVERS'
    TABLES
      hosts         = li_host
    EXCEPTIONS
      not_available = 1
      OTHERS        = 2.

  IF sy-subrc IS INITIAL.

*-Nombre del servidor a la estructura
    CLEAR lw_host.
    READ TABLE li_host
               INTO lw_host
               INDEX 1.

*-Obtengo el path
    CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
      EXPORTING
        i_location_flag = lc_a
        i_server        = lw_host-name
      IMPORTING
        o_location_flag = lv_ubicacion
        o_path          = lv_path
        abend_flag      = lv_abend
      EXCEPTIONS
        rfc_error       = 1
        error_with_gui  = 2
        OTHERS          = 3.

*-Si se obtiene un path
    IF sy-subrc    IS INITIAL AND
       NOT lv_path IS INITIAL AND
       lv_abend    IS INITIAL.

*-Devuelvo ruta al parametro de selección
      p_file = lv_path.

    ENDIF.

  ENDIF.

En el siguiente programa podremos transferir un xml a una tabla interna.

El código es el siguiente:

DATA: gcl_xml       TYPE REF TO cl_xml_document.
DATA: gv_subrc      TYPE sy-subrc.
DATA: gv_xml_string TYPE xstring.
DATA: gv_size       TYPE sytabix.
DATA: gt_xml_data   TYPE TABLE OF smum_xmltb.
DATA: gwa_xml_data  TYPE smum_xmltb.
DATA: gt_return     TYPE TABLE OF bapiret2.
DATA: gv_tabix      TYPE sytabix.
DATA: gt_student    TYPE TABLE OF ty_xml.
DATA: gwa_student   TYPE ty_xml.

 CREATE OBJECT gcl_xml.

*Upload XML File
  CALL METHOD gcl_xml->import_from_file
    EXPORTING
      filename = p_p_filout
    RECEIVING
      retcode  = gv_subrc.

  IF gv_subrc = 0.
    CALL METHOD gcl_xml->render_2_xstring
      IMPORTING
        retcode = gv_subrc
        stream  = gv_xml_string
        size    = gv_size.
    IF gv_subrc = 0.
* Convert XML to internal table
      CALL FUNCTION 'SMUM_XML_PARSE'
        EXPORTING
          xml_input = gv_xml_string
        TABLES
          xml_table = gt_xml_data
          return    = gt_return.
    ENDIF.
  ENDIF.


  WRITE:/ 'fecha',6 'moneda',26 'compra', 33 'venta'.
*Convert XML internal table to Target Student table
  LOOP AT gt_xml_data INTO gwa_xml_data WHERE hier EQ 2.
    IF gwa_xml_data-type is INITIAL.

       gv_tabix = sy-tabix + 1.

       READ TABLE gt_xml_data INTO gwa_xml_data INDEX gv_tabix.
       gwa_student-fecha = gwa_xml_data-cvalue.

       gv_tabix = gv_tabix + 1.

       READ TABLE gt_xml_data INTO gwa_xml_data INDEX gv_tabix.
       gwa_student-moneda = gwa_xml_data-cvalue.

       gv_tabix = gv_tabix + 1.

       READ TABLE gt_xml_data INTO gwa_xml_data INDEX gv_tabix.
       gwa_student-tccompra = gwa_xml_data-cvalue.

        gv_tabix = gv_tabix + 1.

       READ TABLE gt_xml_data INTO gwa_xml_data INDEX gv_tabix.
       gwa_student-tcventa = gwa_xml_data-cvalue.

       APPEND gwa_student to gt_student.
    ENDIF.
    CLEAR: gwa_xml_data, gwa_student.
  ENDLOOP.

*Display data
  LOOP AT gt_student INTO gwa_student.
    WRITE:/ gwa_student-fecha,11 gwa_student-moneda,27 gwa_student-tccompra,
            33 gwa_student-tcventa.
    CLEAR: gwa_student.
  ENDLOOP.

A veces queremos mostrar más información que la que podemos mostrar en un popup, para ello tenemos la opción de mostrar una tabla como popup, donde podamos visualizar más de un dato.

El código a implementar es el siguiente:

mostrar alv como popup
======================

FORM f_layout_build_det  USING pi_layout TYPE slis_layout_alv.
  CLEAR: pi_layout.
  pi_layout-zebra                 = ''.
  pi_layout-colwidth_optimize     = 'X'.
  pi_layout-box_fieldname         = space.
  pi_layout-no_input              = 'X'.
  pi_layout-no_vline              = ' '.
  pi_layout-no_colhead            = ' '.
  pi_layout-lights_condense       = 'X'.
  pi_layout-confirmation_prompt   = ''.
  pi_layout-detail_popup          = 'X'.
  pi_layout-detail_initial_lines  = ''.
  pi_layout-detail_titlebar       = 'RECLASIFICACIÓN DE RETENCIONES POR GARANTÍA'.
ENDFORM.                    " f_layout_build


FORM f_build_struct_det .
  REFRESH gtd_fiel_det.
  PERFORM f_define_campo2 USING:
  'TIPOM' '' '' '4' 'GTD_LISTMES' '' '' 'TipoM' 'TipoM' 'TipoM' '' '' '',
  'BUKRS' '' '' '' 'BKPF' 'BUKRS' '' 'Sociedad' 'Sociedad' 'Sociedad' '' '' 'X',
  'AUGBL' '' '' '' 'BKPF' 'BELNR' '' 'Doc.Pago' 'Doc.Pago' 'Doc.Pago' '' '' '',
  'BELNR' '' '' '' 'BKPF' 'BELNR' '' 'Doc Fi' 'Doc Fi' 'Doc Fi' '' '' '',
  'DOCGE' 'C500' '' '' 'BKPF' 'BELNR' '' 'Doc.Reclasif.' 'Doc.Reclasif.' 'Doc.Reclasif.' '' '' '',
  'EJEGE' 'C500' '' '' 'BKPF' 'BELNR' '' 'Ejercicio Recl.' 'Ejercicio Recl.' 'Ejercicio Recl.' '' '' '',
  'TEXTO' '' '' '200' 'GTD_LISTMES' '' '' 'Mensaje' 'Mensaje' 'Mensaje' '' '' ''.
ENDFORM.                    " F_BUILD_STRUCT_DET

ALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program    = gv_repid
      is_layout             = gwa_layout
      it_fieldcat           = gtd_fiel_det[]
      i_screen_start_column = 15
      i_screen_start_line   = 6
      i_screen_end_column   = 150
      i_screen_end_line     = 25
    TABLES
      t_outtab              = gtd_listmes
    EXCEPTIONS
      program_error         = 1
      OTHERS                = 2.

para regresar a la pantalla anterior se debe agregar:

 SET SCREEN 0.
A call-to-action text Contact us