Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

cdhdr , cdpos download problem

Former Member
0 Likes
1,661

I am trying to download data from cdhdr and cdpos using gui_download and also in the unix box.

But, i am getting memory realted dump if I try to do it for a month in windows . If the program runs at the

background to downlaod in the unix box , its telling me to look into 548845 OSS note.

Any help in this regard is highly appreiciated.

Regards,

Harsha

I am trying to download data from cdhdr and cdpos using gui_download and also in the unix box.

But, i am getting memory realted dump if I try to do it for a month in windows . If the program runs at the

background to downlaod in the unix box , its telling me to look into 548845 OSS note.

Any help in this regard is highly appreiciated.

Regards,

Harsha

10 REPLIES 10
Read only

RaymondGiuseppi
Active Contributor
0 Likes
1,462

Two remarks

- CDPOS/CDHDR is one of the biggest file in a SAP system, did you evaluate size of the internal table for your system when extracting those data (then ask basis team for limits in memory allocation of your system, not an Abap related problem)

- FM gui_download is not available in background (see the "gui" at the beginning) (many threads already exist on this problem)

Regards,

Raymond

Read only

0 Likes
1,462

Thanks for the reply.

GUI_download does not work in the backgroud. There should be some way to dump

using dynamic itab into unix box is possible?

Regards,

Harsha

Read only

0 Likes
1,462

- in backgroud, write in a dataset

and

- check wiki like [Memory Allocation and Analysis|http://wiki.sdn.sap.com/wiki/display/SI/MemoryAllocationand+Analysis]

- better post in or for memory problem

or

- read the data by package size and transfer to dataset package by package

Regards,

Raymond

Read only

0 Likes
1,462

Thanks a ton again.

Here is my code, could you tell me how to go about using package?

REPORT zcdhdr.

TABLES : cdhdr,cdpos.

TYPE-POOLS truxs.

SELECT-OPTIONS : s_date FOR cdhdr-udate OBLIGATORY.

PARAMETERS : p_uyes RADIOBUTTON GROUP g1 USER-COMMAND flag DEFAULT 'X' ,

p_uno RADIOBUTTON GROUP g1 .

PARAMETERS : p_path TYPE char30 DEFAULT 'c:\temp\' OBLIGATORY.

DATA : hdr_tab LIKE cdhdr OCCURS 0 WITH HEADER LINE,

pos_tab LIKE cdpos OCCURS 0 WITH HEADER LINE.

DATA : mi_bytecount TYPE i ,csv1 TYPE truxs_t_text_data,

csv2 TYPE truxs_t_text_data .

.

FIELD-SYMBOLS: <f_data_tab> TYPE ANY.

DATA : file1 TYPE string, file2 TYPE string.

AT SELECTION-SCREEN.

PERFORM check_date.

START-OF-SELECTION.

PERFORM get_data.

PERFORM download_data.

&----


*& Form check_date

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM check_date.

DATA : diff LIKE p0347-scrmm.

ENDFORM. " check_date

&----


*& Form get_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_data.

DATA : diff TYPE i, tmpdt LIKE sy-datum.

CLEAR : hdr_tab[], pos_tab[].

tmpdt = s_date-low.

CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES'

EXPORTING

i_datum_bis = s_date-high

i_datum_von = s_date-low

IMPORTING

e_tage = diff.

.

ADD 1 TO diff.

DO diff TIMES.

SELECT * FROM cdhdr CLIENT SPECIFIED

WHERE mandant = sy-mandt

AND udate = tmpdt.

SELECT * FROM cdpos CLIENT SPECIFIED

WHERE mandant = sy-mandt

AND objectclas = cdhdr-objectclas

AND objectid = cdhdr-objectid

AND changenr = cdhdr-changenr.

CHECK sy-subrc = 0.

MOVE-CORRESPONDING cdhdr TO hdr_tab.

MOVE-CORRESPONDING cdpos TO pos_tab.

APPEND hdr_tab.

APPEND pos_tab.

ENDSELECT.

ENDSELECT.

ADD 1 TO tmpdt.

CLEAR : hdr_tab, pos_tab.

ENDDO.

ENDFORM. " get_data

&----


*& Form download_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM download_data.

DATA : str1(12),str2(12), unix_path TYPE string.

CLEAR : str1,str2.

CONCATENATE s_date-low6(2) '-' s_date-low4(2) '-' s_date-low+2(2)

INTO str1.

CONCATENATE s_date-high6(2) '-' s_date-high4(2) '-' s_date-high+2(2)

INTO str2.

IF p_uno = 'X'.

CONCATENATE p_path 'cdhdr_' str1 '_To_' str2 '.txt' INTO file1.

CONCATENATE p_path 'cdpos_' str1 '_To_' str2 '.txt' INTO file2.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = mi_bytecount

filename = file1

filetype = 'ASC'

TABLES

data_tab = hdr_tab[].

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = mi_bytecount

filename = file2

filetype = 'ASC'

TABLES

data_tab = pos_tab[].

WRITE 😕 'Following files have been downloaded'.

WRITE 😕 file1.

WRITE 😕 file2.

ENDIF.

IF p_uyes = 'X'.

unix_path = '/home_sap/prdweb/testmail/'.

CONCATENATE unix_path 'cdhdr_' str1 '_To_' str2 '.txt' INTO file1.

CONCATENATE unix_path 'cdpos_' str1 '_To_' str2 '.txt' INTO file2.

CONDENSE file1 NO-GAPS.

CONDENSE file2 NO-GAPS.

CALL FUNCTION 'SAP_CONVERT_TO_TXT_FORMAT'

EXPORTING

i_field_seperator = '|'

  • i_line_header = 'X'

TABLES

i_tab_sap_data = hdr_tab

CHANGING

i_tab_converted_data = csv1.

CALL FUNCTION 'SAP_CONVERT_TO_TXT_FORMAT'

EXPORTING

i_field_seperator = '|'

  • i_line_header = 'X'

TABLES

i_tab_sap_data = pos_tab

CHANGING

i_tab_converted_data = csv2.

OPEN DATASET file1 FOR OUTPUT IN BINARY MODE.

LOOP AT csv1 ASSIGNING <f_data_tab>.

TRANSFER <f_data_tab> TO file1.

ENDLOOP.

CLOSE DATASET file1.

OPEN DATASET file2 FOR OUTPUT IN BINARY MODE.

LOOP AT csv2 ASSIGNING <f_data_tab>.

TRANSFER <f_data_tab> TO file2.

ENDLOOP.

CLOSE DATASET file1.

WRITE 😕 'Files ', file1 ,'and' , file2 ,'Have been downloaded'.

ENDIF.

ENDFORM. " download_data

Read only

0 Likes
1,462

Call the TRANSFER every 1000 records, and refresh/free the internal tables (only OPEN dataset at first TRANSFER, and CLOSE when every records are transfered.)

Regards,

Raymond

Read only

0 Likes
1,462
REPORT zcdhdr.
TABLES : cdhdr,cdpos.
TYPE-POOLS truxs.
SELECT-OPTIONS  : s_date FOR cdhdr-udate OBLIGATORY.
PARAMETERS : p_uyes RADIOBUTTON GROUP g1 USER-COMMAND flag DEFAULT 'X' ,
             p_uno RADIOBUTTON GROUP g1 .

PARAMETERS : p_path TYPE char30 DEFAULT 'c:\temp\' OBLIGATORY.

DATA : hdr_tab LIKE cdhdr OCCURS 0 WITH HEADER LINE,
       pos_tab LIKE cdpos  OCCURS 0 WITH HEADER LINE.
DATA : mi_bytecount TYPE i ,csv1 TYPE truxs_t_text_data,
       csv2 TYPE truxs_t_text_data .
.
FIELD-SYMBOLS: <f_data_tab> TYPE ANY.
DATA : file1 TYPE string, file2 TYPE string.

AT SELECTION-SCREEN.
  PERFORM check_date.

START-OF-SELECTION.

  PERFORM get_data.
  PERFORM download_data.


*&---------------------------------------------------------------------*
*&      Form  check_date
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_date.
  DATA : diff LIKE p0347-scrmm.


ENDFORM.                    " check_date
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data.

  DATA : diff TYPE i, tmpdt LIKE sy-datum.

  CLEAR : hdr_tab[], pos_tab[].

  tmpdt = s_date-low.


  CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES'
       EXPORTING
            i_datum_bis = s_date-high
            i_datum_von = s_date-low
       IMPORTING
            e_tage      = diff.
  .
  ADD 1 TO diff.

  DO diff TIMES.
    SELECT        * FROM  cdhdr CLIENT SPECIFIED
           WHERE  mandant  = sy-mandt
           AND    udate    = tmpdt.
      SELECT        * FROM  cdpos CLIENT SPECIFIED
             WHERE  mandant     = sy-mandt
             AND    objectclas  = cdhdr-objectclas
             AND    objectid    = cdhdr-objectid
             AND    changenr    = cdhdr-changenr.
        CHECK sy-subrc = 0.

        MOVE-CORRESPONDING cdhdr TO hdr_tab.
        MOVE-CORRESPONDING cdpos TO pos_tab.
        APPEND hdr_tab.
        APPEND pos_tab.
      ENDSELECT.
    ENDSELECT.



    ADD 1  TO tmpdt.
    CLEAR : hdr_tab, pos_tab.

  ENDDO.




ENDFORM.                    " get_data
*&---------------------------------------------------------------------*
*&      Form  download_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM download_data.

  DATA : str1(12),str2(12), unix_path TYPE string.
  CLEAR : str1,str2.
  CONCATENATE  s_date-low+6(2) '-'  s_date-low+4(2) '-' s_date-low+2(2)
  INTO str1.
CONCATENATE  s_date-high+6(2) '-'  s_date-high+4(2) '-' s_date-high+2(2)
                                          INTO str2.



  IF  p_uno = 'X'.

    CONCATENATE p_path 'cdhdr_' str1 '_To_' str2 '.txt' INTO file1.
    CONCATENATE p_path 'cdpos_' str1 '_To_' str2 '.txt' INTO file2.

    CALL FUNCTION 'GUI_DOWNLOAD'
         EXPORTING
              bin_filesize = mi_bytecount
              filename     = file1
              filetype     = 'ASC'
         TABLES
              data_tab     = hdr_tab[].

    CALL FUNCTION 'GUI_DOWNLOAD'
         EXPORTING
              bin_filesize = mi_bytecount
              filename     = file2
              filetype     = 'ASC'
         TABLES
              data_tab     = pos_tab[].


    WRITE :/ 'Following files have been downloaded'.
    WRITE :/ file1.
    WRITE :/ file2.
  ENDIF.

  IF p_uyes = 'X'.
    unix_path = '/home_sap/prdweb/testmail/'.
    CONCATENATE unix_path 'cdhdr_' str1 '_To_' str2 '.txt' INTO file1.
    CONCATENATE unix_path 'cdpos_' str1 '_To_' str2 '.txt' INTO file2.

    CONDENSE file1 NO-GAPS.
    CONDENSE file2 NO-GAPS.

    CALL FUNCTION 'SAP_CONVERT_TO_TXT_FORMAT'
           EXPORTING
                i_field_seperator    = '|'
*            i_line_header        = 'X'
           TABLES
                i_tab_sap_data       = hdr_tab
           CHANGING
                i_tab_converted_data = csv1.

    CALL FUNCTION 'SAP_CONVERT_TO_TXT_FORMAT'
           EXPORTING
                i_field_seperator    = '|'
*            i_line_header        = 'X'
           TABLES
                i_tab_sap_data       = pos_tab
           CHANGING
                i_tab_converted_data = csv2.



    OPEN DATASET file1 FOR OUTPUT IN BINARY MODE.
    LOOP AT csv1 ASSIGNING <f_data_tab>.
      TRANSFER <f_data_tab> TO file1.
    ENDLOOP.
    CLOSE DATASET file1.

    OPEN DATASET file2 FOR OUTPUT IN BINARY MODE.
    LOOP AT csv2 ASSIGNING <f_data_tab>.
      TRANSFER <f_data_tab> TO file2.
    ENDLOOP.
    CLOSE DATASET file1.


    WRITE :/ 'Files ', file1 ,'and' , file2 ,'Have been downloaded'.
  ENDIF.
ENDFORM.                    " download_data

Edited by: Harsha S on Nov 10, 2010 10:12 AM

Edited by: Harsha S on Nov 10, 2010 10:15 AM

Read only

0 Likes
1,462

Raymand.

sap_convert_to_txt_frmat

i_field_seperator = '|'

tables i_tab_sap_data = hdr_tab ( has 319000+ rorws)

chaning itab_converted_data = csv1.

I am gettting dump here.

REgards,

Harsha

Read only

0 Likes
1,462

Structure your program by package

- select data in internal table from main database table (CDHDR) with [PACKAGE SIZE n|http://help.sap.com/abapdocu_70/en/ABAPINTO_CLAUSE.htm#&ABAP_ALTERNATIVE_3@3@]

- - select other data (CDPOS) in internal table with [FOR ALL ENTRIES|http://help.sap.com/abapdocu_70/en/ABENWHERE_LOGEXP_ITAB.htm]

- - build output internal table

- - convert to text

- - open dataset (once, if not already opened)

- - transfer to dataset

- - refresh internal table

- endselect

- close dataset (if was opened)

Regards,

Raymond

Read only

RaymondGiuseppi
Active Contributor
0 Likes
1,462

Please add the code delimiters to your source {#code#}code source{#code#} (remove the #s)

Regards,

Raymond

Read only

Former Member
0 Likes
1,462

Thanks Raymond.

It was very helpful and awarding the point.

Thanks.

Harsha