jueves, 9 de octubre de 2014

Borrar Necesidad de MD04

En algunos casos cuando se anula un proceso de entrega y factura a pesar de que el material se borre de la entrega sigue apareciendo la necesidad por la MD04.

Para borrar la necesidad se puede utilizar el programa SDRQCR21 por la SE38, se debe tener  cuidado de colocar el MATERIAL-CENTRO-DOCUMENTO asociado a la necesidad que se quiere borrar.

Ejemplo:






jueves, 22 de marzo de 2012

TRANSFER, GUI_DOWNLOAD Grabar Archivo Directorio


Nota: los archivos grabados con la sentencia OPEN DATASET , TRANSFER , no se visualizan bien en el programa Notepad de Windows debido a que se aprecian todos los datos juntos como si fuera una sola línea, pero si se abren con WordPad, Excel u otra herramienta estos datos se aprecian bien organizados.


EJEMPLO GRABAR ARCHIVO A RUTA EN UN SERVIDOR.

REPORT ZTMP_PRUEBA.

TYPES BEGIN OF ST_DEMO,
        REG_NO
(10TYPE C,
        NAME
(20TYPE C,
        ADDR
(20TYPE C,
        
END OF ST_DEMO.

DATA WA_DEMO TYPE ST_DEMO,
       IT_DEMO 
TYPE TABLE OF ST_DEMO,
       L_FNAME 
TYPE STRING .

PARAMETERSP_FNAME(128TYPE C DEFAULT '/usr/sap/SRI/SYS/src/DOWN.TXT' OBLIGATORY.

L_FNAME 
P_FNAME.

WA_DEMO
-REG_NO '100001'.
WA_DEMO
-NAME 'ANAND'.
WA_DEMO
-ADDR 'NAGARKOVIL'.
 
APPEND WA_DEMO TO IT_DEMO.

WA_DEMO
-REG_NO '100002'.
WA_DEMO
-NAME 'VIKRAM'.
WA_DEMO
-ADDR 'CHENNAI'.
APPEND WA_DEMO TO IT_DEMO.


 
OPEN DATASET L_FNAME FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

 
WRITE :'REG NUM',16 'NAME',37 'ADDRESS' .

  
LOOP AT IT_DEMO INTO WA_DEMO.
    
IF SY-SUBRC 0.
      
TRANSFER WA_DEMO TO L_FNAME.
      
WRITE :/5 WA_DEMO-REG_NO,16 WA_DEMO-NAME,37 WA_DEMO-ADDR.
    
ENDIF.
  
ENDLOOP.

http://help.sap.com/saphelp_40b/helpdata/en/34/55cad198482bc0e10000009b38f91f/content.htm
http://help.sap.com/saphelp_40b/helpdata/en/34/8e73b06df74873e10000009b38f9b8/content.htm


EJEMPLO GRABAR  ARCHIVO A RUTA EN UN SERVIDOR.



REPORT ZTMP_PRUEBA2.

DATABEGIN OF t_itab OCCURS 0,
              
line(2500),
END OF t_itab.

DATA RUTA_ARC TYPE STRING.

RUTA_ARC 
'/CVPL/PRUEBA.TXT'.

OPEN DATASET RUTA_ARC FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

LOOP AT t_itab.
     
TRANSFER t_itab TO RUTA_ARC.
ENDLOOP.

PARA GRABAR ARCHIVOS A RUTAS de PCs CLIENTES
DATA RUTA_ARC TYPE STRING.

RUTA_ARC 'C:\TEMPORAL\PRUEBA.TXT'.

CALL FUNCTION 'GUI_DOWNLOAD'
    
EXPORTING
*   BIN_FILESIZE                    =
      filename                      
RUTA_ARC
      filetype                      
'ASC'
      trunc_trailing_blanks_eol     
space
    
TABLES
      data_tab                      
=  t_itab
 
EXCEPTIONS
   file_write_error                
1
   no_batch                        
2
   gui_refuse_filetransfer         
3
   invalid_type                    
4
   no_authority                    
5
   unknown_error                   
6
   header_not_allowed              
7
   separator_not_allowed           
8
   filesize_not_allowed            
9
   header_too_long                 
10
   dp_error_create                 
11
   dp_error_send                   
12
   dp_error_write                  
13
   unknown_dp_error                
14
   access_denied                   
15
   dp_out_of_memory                
16
   disk_full                       
17
   dp_timeout                      
18
   file_not_found                  
19
   dataprovider_exception          
20
   control_flush_error             
21
   
OTHERS                          22
            
.

martes, 13 de diciembre de 2011

Funcion para extraer año y periodo de fecha


* Encuentra el periodo actual basado en la fecha actual
*
REPORT ZPERIOD.

DATA: X_PERIOD LIKE T009B-POPER,
      X_YEAR   LIKE CSSL-GJAHR.

CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
     EXPORTING
          I_DATE         = SY-DATUM
*         I_MONMIT       = 00
          I_PERIV        = 'K4'
     IMPORTING
          E_BUPER        = X_PERIOD
          E_GJAHR        = X_YEAR
     EXCEPTIONS
          INPUT_FALSE    = 1
          T009_NOTFOUND  = 2
          T009B_NOTFOUND = 3
          OTHERS         = 4.

WRITE: / 'El periodo actual de la compañia es:', X_PERIOD, X_YEAR.

miércoles, 19 de octubre de 2011

SET/GET PARAMETER Ejemplo

 
Se utiliza para guardar un valor en memoria y volverlo a leer desde otro codigo.


REPORT  PARAMID                                                 .
 
data: gd_valuein(10) type c,
      gd_valueout(10) type c.
 
PARAMETERS: p_value(10) type c.
 
 
********************
*start-of-selection.
start-of-selection.
get parameter ID 'ZMESS' field gd_valuein.
set parameter ID 'ZMESS' field p_value.
get parameter ID 'ZMESS' field gd_valueout.
 
 
******************
*end-of-selection.
end-of-selection.
write:/ 'value at start of program:',  gd_valuein,
      / 'value at end of program:',  gd_valueout.

lunes, 10 de octubre de 2011

Ciclos (Loops)

Ciclos incondicionales:

DO [n TIMES] ...
[Statement_block]
[statement_block]
ENDDO.
ENDDO.

Además de utilizar el TIMES para restringir el número de pasadas de bucle de n.Utilizar  TIMES para restringir a n el numero de veces que pasa por el ciclo.  Las sentencias EXIT y STOP finalizan el ciclo. El campo del sistema sy-index contiene el numero de ciclos por donde ha pasado.

Ejemplo 1:

DO.
  WRITE sy-index.
SI SY-índice = 3.
   IF sy-index = 3.
EXIT.
         EXIT.
   ENDIF.
ENDDO.ENDDO.

La salida es: 1 2 3.

Ejemplo 2:
DO 2 TIMES.
ESCRIBE SY-índice.
   WRITE sy-index.
SKIP.
   SKIP.
   DO 3 TIMES.
      WRITE sy-index.
ENDDO.
   ENDDO.
SKIP.    SKIP.
 ENDDO.

ENDDO.ENDDO.La salida esLa salida de la lista es la siguiente::
1
1 2 3

2

1 2 3



Ciclos condicionales:

Se repite el ciclo hasta que una condicion sea verdadera.

WHILE log_exp
[Statemaent_block]
[statemaent_block]
ENDWHILE.
ENDWHILE.

Ejemplo:
REPORT demo_flow_control_while.
DATA: length TYPE i VALUE 0,
strl TYPE i VALUE 0,
string(30) TYPE c VALUE 'Test String'.
strl = strlen( string ).

WHILE string NE space.
       WRITE string(1).
       length = sy-index.
       SHIFT string.
ENDWHILE.

WRITE: / 'STRLEN: ', strl.
WRITE: / 'Length of string:', length.

La salida es : T es t S tr ing

STRLEN: 11

Length of String: 11


Terminar un paso de un ciclo incondicionalmente.

Para terminar un único paso de un ciclo utilizar CONTINUE, no ejecuta las sentencias restantes después del CONTINUE y salta al siguiente paso del ciclo.
DO 4 TIMES.
SI SY-índice = 2.
   IF sy-index = 2.
CONTINUE.
          CONTINUE.
ENDIF.
   ENDIF.
ESCRIBE SY-índice.
   WRITE sy-index.
ENDDO.ENDDO.
ENDDO.

La salida es:

1 3 4


Terminar un paso de un ciclo condicionalmente.

Para terminar un paso de un ciclo utilizar CHECK, si la condición no es vardadera cualquier sentencia restante dentro del ciclo es ignorada y continua en el siguiente paso del ciclo.

DO 4 TIMES.
CONSULTAR sy-índice de entre 2 y 3.
   CHECK sy-index BETWEEN 2 and 3.
ESCRIBE SY-índice.
   WRITE sy-index.
ENDDO.ENDDO.

La salida es:
2 3

Salir de un ciclo

Para terminar un cliclo utilizar la sentencia EXIT.
DO 4 TIMES.
SI SY-índice = 3.
   IF sy-index = 3.
EXIT.
          EXIT.
ENDIF.
   ENDIF.
ESCRIBE SY-índice.
ENDDO.  
WRITE sy-index.
ENDDO.ENDDO.
La salida es:
1 2