CLEAR INTERNAL TABLE
IN WHICH CONDITION CLEAR INTERNAL TABLE,APPEND INTERNAL TABLE STATEMENT IS USED?
hi,
Normally we use clear statement immediately after using append statement... so as to clear the header of internal table ..
loop at itab.
itab1-field1 = itab-field.
append itab1.
clear itab1.
endloop.
Similar Messages
-
Issue with clearing internal table
Hi Gurus,
I am working on an issue, where when we run a std. report we see social number of the employee on the output screen, when I debugged the program I found that there are 2 internal tables where we are putting this SSN. I tried to clear the SSN at the both the places like:
loop at it_table.
clear it_table-SSN.
Endloop.
but still when I ran the report I am seeing social there. so can you please give me any idea of what I am doing wrong?
Thanks,
Rajeev GuptaHi rajeev,
even after ur clearing if the field is still populating it means again its filling the particular field in the later place.
1) keep ur code and while debuging just click on watchpoint and give ur field name go with f8 it will take u to the place the field is filling..
2) below that place clear that field and modify the table.. -
One field gets cleared from ALV to internal table
I have an ALV grid in a view in which i append a row and add some data. This is giving me a very strange problem.
I appended a row in the ALV and then filled up the data in the row. I filled three fields, two of them dates and one a decimal field. Then i saved this data. No problems here.
Now the next time i come on this ALV grid view, i see the previously saved row. I now append another row and fill in some data again. This is where the surprise comes. Out of the two date fields, the first date field is losing its value and is getting cleared when i get the ALV data in an internal table...(using the following code)
node_et_indices_1->get_static_attributes_table( IMPORTING table = lt_indice ).
the lt_indice has the following structure...
field type
MANDT MANDT
BUKRS BUKRS
ZZINDICE ZEAGR_INDICE
ZZITEM CHAR3
ZZDESC CHAR40
ZZINVAL DATS 8
ZZFIMVAL DATS 8
ZZVATR DEC
ZZUATR DEC
ERNAM ERNAM
AEDAT AEDAT
ZCORRIG CHAR1
WAERS WAERS
out of these, the fields zzinval, zzfimval and zzvatr are being populated from webdynpro and the rest of the fields (including the key fields) are populated in the internal table later and then saved to the database.
After executing the above statement, the value in ZZINVAL is 00000000, while on the screen i have entered 01.02.2007. The same does not apply to ZZFIMVAL which holds the value 28.02.2007 as entered on the screen. ZZVATR also holds the correct value entered.
Any ideas why only one of the fields might be getting cleared like this?
The problem does not occur when i am saving only a single row from the ALV.
Please help!!
regards,
PriyankI have checked that the node itself is not containing the value.
How and what can i check for this. I have mapped the ALV in different views similarly and they are working?
Any ideas on where can i check ??
regards,
Priyank -
Clear idea about internal table.
I'm new in sap. i need a clear idea about what is table type , line type and type groups in internal table. and why we are using this ? and give me an idea about work area also.. theses terms are confusing me. if possible please explain me with example. thanks in advance.
Welcome to SCN - but please do not duplicate post or ask basic questions.
Edited by: Rob Burbank on Apr 19, 2009 4:20 PI'm new in sap. i need a clear idea about what is table type , line type and type groups in internal table. and why we are using this ? and give me an idea about work area also.. theses terms are confusing me. if possible please explain me with example. thanks in advance.
Welcome to SCN - but please do not duplicate post or ask basic questions.
Edited by: Rob Burbank on Apr 19, 2009 4:20 P -
Regarding Exporting and Importing internal table
Hello Experts,
I have two programs:
1) Main program: It create batch jobs through open_job,submit and close job.Giving sub program as SUBMIT.
I am using Export IT to memory id 'MID' to export internal table data to sap memory in the subprogram.
The data will be processed in the subprogram and exporting data to sap memory.I need this data in the main program(And using import to get the data,but it is not working).
Importing IT1 from memory id 'MID' to import the table data in the main program after completing the job(SUBMIT SUBPROGRAM AND RETURN).
Importing is not getting data to internal table.
Can you please suggest something to solve this issue.
Thank you.
Regards,
Anand.Hi,
This is the code i am using.
DO g_f_packets TIMES.
* Start Immediately
IF NOT p_imm IS INITIAL .
g_flg_start = 'X'.
ENDIF.
g_f_jobname = 'KZDO_INHERIT'.
g_f_jobno = g_f_jobno + '001'.
CONCATENATE g_f_jobname g_f_strtdate g_f_jobno INTO g_f_jobname
SEPARATED BY '_'.
CONDENSE g_f_jobname NO-GAPS.
p_psize1 = p_psize1 + p_psize.
p_psize2 = p_psize1 - p_psize + 1.
IF p_psize2 IS INITIAL.
p_psize2 = 1.
ENDIF.
g_f_spname = 'MID'.
g_f_spid = g_f_spid + '001'.
CONDENSE g_f_spid NO-GAPS.
CONCATENATE g_f_spname g_f_spid INTO g_f_spname.
CONDENSE g_f_spname NO-GAPS.
* ... (1) Job creating...
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = g_f_jobname
IMPORTING
jobcount = g_f_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE e469(9j) WITH g_f_jobname.
ENDIF.
* (2)Report start under job name
SUBMIT (g_c_prog_kzdo)
WITH p_lgreg EQ p_lgreg
WITH s_grvsy IN s_grvsy
WITH s_prvsy IN s_prvsy
WITH s_prdat IN s_prdat
WITH s_datab IN s_datab
WITH p1 EQ p1
WITH p3 EQ p3
WITH p4 EQ p4
WITH p_mailid EQ g_f_mailid
WITH p_psize EQ p_psize
WITH p_psize1 EQ p_psize1
WITH p_psize2 EQ p_psize2
WITH spid EQ g_f_spid
TO SAP-SPOOL WITHOUT SPOOL DYNPRO
VIA JOB g_f_jobname NUMBER g_f_jobcount AND RETURN.
*(3)Job closed when starts Immediately
IF NOT p_imm IS INITIAL.
IF sy-index LE g_f_nojob.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = g_f_jobcount
jobname = g_f_jobname
strtimmed = g_flg_start
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
gs_jobsts-jobcount = g_f_jobcount.
gs_jobsts-jobname = g_f_jobname.
gs_jobsts-spname = g_f_spname.
APPEND gs_jobsts to gt_jobsts.
ELSEIF sy-index GT g_f_nojob.
CLEAR g_f_flg.
DO. " Wiating untill any job completion
LOOP AT gt_jobsts into gs_jobsts.
CLEAR g_f_status.
CALL FUNCTION 'BP_JOB_STATUS_GET'
EXPORTING
JOBCOUNT = gs_jobsts-jobcount
JOBNAME = gs_jobsts-jobname
IMPORTING
STATUS = g_f_status
* HAS_CHILD =
* EXCEPTIONS
* JOB_DOESNT_EXIST = 1
* UNKNOWN_ERROR = 2
* PARENT_CHILD_INCONSISTENCY = 3
* OTHERS = 4
g_f_mid = gs_jobsts-spname.
IF g_f_status = 'F'.
IMPORT gt_final FROM MEMORY ID g_f_mid .
FREE MEMORY ID gs_jobsts-spname.
APPEND LINES OF gt_final to gt_final1.
REFRESH gt_prlist.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = g_f_jobcount
jobname = g_f_jobname
strtimmed = g_flg_start
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF sy-subrc = 0.
g_f_flg = 'X'.
gs_jobsts1-jobcount = g_f_jobcount.
gs_jobsts1-jobname = g_f_jobname.
gs_jobsts1-spname = g_f_spname.
APPEND gs_jobsts1 TO gt_jobsts.
DELETE TABLE gt_jobsts FROM gs_jobsts.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
IF g_f_flg = 'X'.
CLEAR g_f_flg.
EXIT.
ENDIF.
ENDDO.
ENDIF.
ENDIF.
IF sy-subrc <> 0.
MESSAGE e539(scpr) WITH g_f_jobname.
ENDIF.
COMMIT WORK .
ENDDO. -
How to populate data in dynamic internal table
Hi Expert,
fyi. My dynamic internal table field is created base on data selected. Eg. select table qpcd has 5 records. These 5 recods will become fieldname to my dynamic internal table. My dynamic internal table will be
...itab
01
02
03
04
05
The 5 records from qpcd is populated in another table call viqmel. I need to find the occurance of each code in viqmel and populate the number of occurance in itab in each of column. The final dynamic itab will be like this
table itab
01 02 03 04 05 -
> field name
2 0 1 0 1 -
> data
my source code like below
Report ZPLYGRND2.
TABLES: mara, makt.
TYPE-POOLS: slis, sydes.
DATA:it_fcat TYPE slis_t_fieldcat_alv,
is_fcat LIKE LINE OF it_fcat,
ls_layout TYPE slis_layout_alv.
DATA: it_fieldcat TYPE lvc_t_fcat,
is_fieldcat LIKE LINE OF it_fieldcat.
DATA: new_table TYPE REF TO data,
new_line TYPE REF TO data,
ob_cont_alv TYPE REF TO cl_gui_custom_container,
ob_alv TYPE REF TO cl_gui_alv_grid,
vg_campos(255) TYPE c,
i_campos LIKE TABLE OF vg_campos,
vg_campo(30) TYPE c,
vg_tables(60) TYPE c.
types : begin of t_qpcd,
codegruppe like qpcd-codegruppe,
code like qpcd-code,
end of t_qpcd.
data:wa_qpcd type t_qpcd,
i_qpcd type standard table of t_qpcd initial size 0.
FIELD-SYMBOLS: <l_table> TYPE table,
<l_line> TYPE ANY,
<l_field> TYPE ANY.
select * into corresponding fields of wa_qpcd from qpcd
where katalogart = 'D'
and codegruppe = 'OOT01'.
append wa_qpcd to i_qpcd.
endselect.
loop at i_qpcd into wa_qpcd.
is_fcat-fieldname = wa_qpcd-code.
APPEND is_fcat TO it_fcat.
endloop.
LOOP AT it_fcat INTO is_fcat.
is_fieldcat-fieldname = is_fcat-fieldname.
is_fieldcat-ref_field = is_fcat-ref_fieldname.
is_fieldcat-ref_table = is_fcat-ref_tabname.
APPEND is_fieldcat TO it_fieldcat.
ENDLOOP.
*... Create the dynamic internal table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fieldcat
IMPORTING
ep_table = new_table.
if sy-subrc = 0.
endif.
*... Create a new line
ASSIGN new_table->* TO <l_table>.
CREATE DATA new_line LIKE LINE OF <l_table>.
ASSIGN new_line->* TO <l_line>.
LOOP AT <l_table> INTO <l_line>.
ENDLOOP.hello dear i m giving u a code in this a dynamic table is made on the basis of table in database , and u can download this data correct it , see it, or even change it....and upload in tht table help full if u dont know the table name...in advance.
also the code to populate data in dynamic table is in this code like:
SELECT * FROM (MTABLE_N)
INTO CORRESPONDING FIELDS OF TABLE <FS_ITAB> .
look at the whole program .hope this solve ur problem thanks.
REPORT ZTESTA MESSAGE-ID ZIMM .
TYPES : DATA_OBJECT TYPE REF TO DATA.
DATA : MITAB TYPE REF TO DATA .
TYPE-POOLS : SLIS .
DATA : IT_FIELDCAT TYPE STANDARD TABLE OF SLIS_FIELDCAT_ALV
WITH HEADER LINE .
DATA : IT_FIELDCATALOG TYPE LVC_T_FCAT .
DATA : WA_FIELDCATALOG TYPE LVC_S_FCAT .
DATA : I_STRUCTURE_NAME LIKE DD02L-TABNAME .
DATA : I_CALLBACK_PROGRAM LIKE SY-REPID .
DATA : DYN_LINE TYPE DATA_OBJECT .
FIELD-SYMBOLS : <FS_ITAB> TYPE STANDARD TABLE .
DATA : TABLE_NAME_IS_VALID TYPE C .
DATA : DYNAMIC_IT_INSTANTIATED TYPE C .
CONSTANTS BUTTONSELECTED TYPE C VALUE 'X' .
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(29) T_TABL.
PARAMETERS : MTABLE_N LIKE RSRD1-TBMA_VAL
MATCHCODE OBJECT DD_DBTB_16 OBLIGATORY .
DATA CHECKTABLED.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(29) T_FILE.
PARAMETERS : MFILENAM LIKE RLGRAP-FILENAME .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(29) T_DOWN.
PARAMETERS : P_DOWNLD RADIOBUTTON GROUP GRP1
USER-COMMAND M_UCOMM .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(29) T_CHKF.
PARAMETERS : P_CHKFIL RADIOBUTTON GROUP GRP1 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(29) T_UPLD.
PARAMETERS : P_UPLOAD RADIOBUTTON GROUP GRP1 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 5(29) T_SHOW.
PARAMETERS : P_SHOW_T RADIOBUTTON GROUP GRP1 .
SELECTION-SCREEN END OF LINE.
AT SELECTION-SCREEN OUTPUT .
PERFORM CHECK_FILENAME .
AT SELECTION-SCREEN.
IF SY-UCOMM = 'ONLI'.
CHECKTABLED = MTABLE_N+0(1).
IF CHECKTABLED NE 'Z'.
MESSAGE I017.
LEAVE TO SCREEN 1000.
ENDIF.
IF SY-UNAME NE 'KAMESH.K'.
MESSAGE I023 WITH SY-UNAME.
LEAVE TO SCREEN 1000.
ENDIF.
ENDIF.
IF SY-UCOMM = 'PRIN'.
CHECKTABLED = MTABLE_N+0(1).
IF CHECKTABLED NE 'Z'.
MESSAGE I017.
LEAVE TO SCREEN 1000.
ENDIF.
IF SY-UNAME NE 'KAMESH.K'.
MESSAGE I023 WITH SY-UNAME.
LEAVE TO SCREEN 1000.
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR MFILENAM .
PERFORM F4_FOR_FILENAME .
INITIALIZATION .
T_TABL = 'Table Name' .
T_FILE = 'File Name' .
T_DOWN = 'Download Table' .
T_CHKF = 'Check File to Upload' .
T_UPLD = 'Upload File' .
T_SHOW = 'Show Table Contents' .
START-OF-SELECTION .
PERFORM CHECK_TABLE_NAME_IS_VALID .
END-OF-SELECTION .
IF TABLE_NAME_IS_VALID EQ ' ' .
MESSAGE I398(00) WITH 'INVALID TABLE NAME' .
ELSE .
PERFORM INSTANTIATE_DYNAMIC_INTERNAL_T .
CHECK DYNAMIC_IT_INSTANTIATED = 'X' .
CASE BUTTONSELECTED .
WHEN P_DOWNLD .
PERFORM SELECT_AND_DOWNLOAD .
WHEN P_CHKFIL .
PERFORM CHECK_FILE_TO_UPLOAD .
WHEN P_UPLOAD .
PERFORM UPLOAD_FROM_FILE .
WHEN P_SHOW_T .
PERFORM SHOW_CONTENTS .
ENDCASE .
ENDIF .
FORM CHECK_TABLE_NAME_IS_VALID.
DATA MCOUNT TYPE I .
TABLES DD02L .
CLEAR TABLE_NAME_IS_VALID .
SELECT COUNT(*) INTO MCOUNT FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'TABL'
AND OBJ_NAME = MTABLE_N .
IF MCOUNT EQ 1 .
CLEAR DD02L .
SELECT SINGLE * FROM DD02L WHERE TABNAME = MTABLE_N .
IF SY-SUBRC EQ 0.
IF DD02L-TABCLASS = 'TRANSP' .
TABLE_NAME_IS_VALID = 'X' .
ENDIF .
ENDIF.
ENDIF .
ENDFORM. " CHECK_TABLE_NAME_IS_VALID
FORM SELECT_AND_DOWNLOAD.
CLEAR : <FS_ITAB> .
SELECT * FROM (MTABLE_N)
INTO CORRESPONDING FIELDS OF TABLE <FS_ITAB> .
PERFORM CHECK_FILENAME.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = MFILENAM
FILETYPE = 'DAT'
TABLES
DATA_TAB = <FS_ITAB>
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
IF SY-SUBRC EQ 0.
MESSAGE I398(00) WITH 'Table' MTABLE_N
'successfully downloaded to '
MFILENAM .
ENDIF.
ENDFORM. " SELECT_AND_DOWNLOAD
FORM UPLOAD_FROM_FILE.
DATA : ANS TYPE C .
DATA : LINES_OF_ITAB TYPE I .
DATA : MSY_SUBRC TYPE I .
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
TEXTLINE1 = 'Are you sure you wish to upload'
TEXTLINE2 = 'data from ASCII File to DB table '
TITEL = 'Confirmation of Data Upload'
IMPORTING
ANSWER = ANS.
IF ANS = 'J' .
PERFORM CHECK_FILENAME.
CLEAR MSY_SUBRC .
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = MFILENAM
FILETYPE = 'DAT'
TABLES
DATA_TAB = <FS_ITAB>
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
MSY_SUBRC = MSY_SUBRC + SY-SUBRC .
IF SY-SUBRC EQ 0.
DESCRIBE TABLE <FS_ITAB> LINES LINES_OF_ITAB .
IF LINES_OF_ITAB GT 0 .
MODIFY (MTABLE_N) FROM TABLE <FS_ITAB> .
MSY_SUBRC = MSY_SUBRC + SY-SUBRC .
ENDIF .
ENDIF.
IF MSY_SUBRC EQ 0 .
MESSAGE I398(00) WITH LINES_OF_ITAB
'Record(s) inserted in table'
MTABLE_N .
ELSE .
MESSAGE I398(00) WITH
'Errors occurred No Records inserted in table'
MTABLE_N .
ENDIF .
ENDIF .
ENDFORM. " UPLOAD_FROM_FILE
FORM F4_FOR_FILENAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_PATH = 'C:\'
MASK = ',.,..'
MODE = '0'
IMPORTING
FILENAME = MFILENAM
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDFORM. " F4_FOR_FILENAME
FORM CHECK_FILENAME.
IF MFILENAM IS INITIAL
AND NOT ( MTABLE_N IS INITIAL )
AND P_SHOW_T NE BUTTONSELECTED.
CONCATENATE 'C:\'
MTABLE_N '.TXT' INTO MFILENAM.
ENDIF .
ENDFORM. " CHECK_FILENAME
FORM INSTANTIATE_DYNAMIC_INTERNAL_T.
CLEAR DYNAMIC_IT_INSTANTIATED .
I_STRUCTURE_NAME = MTABLE_N .
CLEAR IT_FIELDCAT[] .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = I_STRUCTURE_NAME
CHANGING
CT_FIELDCAT = IT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
IF SY-SUBRC EQ 0.
LOOP AT IT_FIELDCAT .
CLEAR WA_FIELDCATALOG .
MOVE-CORRESPONDING IT_FIELDCAT TO WA_FIELDCATALOG .
WA_FIELDCATALOG-REF_FIELD = IT_FIELDCAT-FIELDNAME .
WA_FIELDCATALOG-REF_TABLE = MTABLE_N .
APPEND WA_FIELDCATALOG TO IT_FIELDCATALOG .
ENDLOOP .
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_FIELDCATALOG
IMPORTING
EP_TABLE = MITAB .
ASSIGN MITAB->* TO <FS_ITAB> .
DYNAMIC_IT_INSTANTIATED = 'X' .
ENDIF.
ENDFORM. " INSTANTIATE_DYNAMIC_INTERNAL_T
FORM SHOW_CONTENTS.
CLEAR : <FS_ITAB> .
SELECT * FROM (MTABLE_N)
INTO CORRESPONDING FIELDS OF TABLE <FS_ITAB> .
I_CALLBACK_PROGRAM = SY-REPID .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_CALLBACK_PROGRAM
IT_FIELDCAT = IT_FIELDCAT[]
TABLES
T_OUTTAB = <FS_ITAB>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " SHOW_CONTENTS
FORM CHECK_FILE_TO_UPLOAD.
PERFORM CHECK_FILENAME.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = MFILENAM
FILETYPE = 'DAT'
TABLES
DATA_TAB = <FS_ITAB>
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
OTHERS = 10.
IF SY-SUBRC EQ 0.
I_CALLBACK_PROGRAM = SY-REPID .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = I_CALLBACK_PROGRAM
IT_FIELDCAT = IT_FIELDCAT[]
TABLES
T_OUTTAB = <FS_ITAB>
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDIF .
ENDFORM. " CHECK_FILE_TO_UPLOAD
Message was edited by:
SAURABH SINGH
SENIOR EXECUTIVE
SAMSUNG INDIA ELECTRONICS LTD.,NOIDA -
How to upload a file in application server to an internal table
Hi,
I am asked to upload a file from application server to internal table. Can you please suggest me the ways to do it or the function module which helps to browse the application server file names.
I have done a program. But its giving problem in searching the files from application server. I am pasting my code for ur review. Please tell me which part i have to correct or suggest me some other ways to do it.
*& Report ZUPLOAD1
REPORT ZUPLOAD1.
type-pools: truxs.
parameters: p_upl_ps radiobutton group g1 default 'X', "upload from pres. server
p_path type rlgrap-filename,
p_upl_as radiobutton group g1, "upload from appln server
<b>p_dir LIKE filepath-pathintern DEFAULT 'Y_ABAP',
p_file LIKE filepath-pathintern lower case,</b>
p_test as checkbox.
constants: c_x value 'X',
c_tab type c value cl_abap_char_utilities=>horizontal_tab.
types: ty_data(1000) type c. "structure to hold legacy data
data: i_data type standard table of ty_data. "internal table of ty_data
types: begin of stritab,
land1 type v_t604-land1, "structure of legacy file.
stawn type v_t604-stawn,
bemeh type v_t604-bemeh,
impma type v_t604-impma,
minol type v_t604-minol,
end of stritab.
data: gi_itab type standard table of stritab, "internal table of legacy file
gw_itab type stritab. "work area
data: i_raw type truxs_t_text_data,
v_fullpath type string.
at selection-screen on value-request for p_path.
if p_upl_ps = c_x. "if presentation server is selected
perform get_file.
else. "if application server is selected
perform set_file_path.
perform upload_from_server.
perform split_data.
endif.
form get_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = p_path. "getting the file name of pres server
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR =
I_LINE_HEADER = 'X' "converting excel to sap and filling in
I_TAB_RAW_DATA = i_raw "internal table
I_FILENAME = p_path
TABLES
I_TAB_CONVERTED_DATA = gi_itab
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.
form set_file_path. "Getting the file path of application server
data: lv_file type p_file.
lv_file = p_file.
CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
EXPORTING
CLIENT = SY-MANDT
LOGICAL_PATH = p_dir
OPERATING_SYSTEM = SY-OPSYS
PARAMETER_1 = ' '
PARAMETER_2 = ' '
PARAMETER_3 = ' '
USE_BUFFER = ' '
FILE_NAME = lv_file
USE_PRESENTATION_SERVER = ' '
ELEMINATE_BLANKS = 'X'
IMPORTING
FILE_NAME_WITH_PATH = v_fullpath
EXCEPTIONS
PATH_NOT_FOUND = 1
MISSING_PARAMETER = 2
OPERATING_SYSTEM_NOT_FOUND = 3
FILE_SYSTEM_NOT_FOUND = 4
OTHERS = 5
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.
form upload_from_server.
data: lv_msg type string,
lw_data type ty_data.
open dataset v_fullpath for input message lv_msg in text mode encoding default.
if sy-subrc <> 0.
message lv_msg type 'i'.
stop.
endif.
do.
read dataset v_fullpath into lw_data.
if sy-subrc <> 0.
write:/5 'Error in processign data set'.
exit.
endif.
append lw_data to i_data.
enddo.
close dataset v_fullpath.
if sy-subrc <> 0.
write: /5 'Error closing dataset'.
endif.
endform.
form split_data.
data: lw_data type ty_data.
data: lw_itab type stritab.
data: begin of ty_itab,
land1 type v_t604-land1,
stawn type v_t604-stawn,
bemeh type v_t604-bemeh,
impma type v_t604-impma,
minol type v_t604-minol,
end of ty_itab.
loop at i_data into lw_data.
split lw_data at c_tab into
ty_itab-land1
ty_itab-stawn
ty_itab-bemeh
ty_itab-impma
ty_itab-minol.
lw_itab-land1 = ty_itab-land1.
lw_itab-stawn = ty_itab-stawn.
lw_itab-bemeh = ty_itab-bemeh.
lw_itab-impma = ty_itab-impma.
lw_itab-minol = ty_itab-minol.
append lw_itab to gi_itab.
endloop.
endform.
start-of-selection.
loop at gi_itab into gw_itab.
write: /5 'COUNTRY', 'IMPORT CODE', 'SUP UNIT', 'FIRST UOM', 'SECOND UOM',
/5 gw_itab-land1, gw_itab-stawn,gw_itab-bemeh,gw_itab-impma,gw_itab-minol.
endloop.
end-of-selection.
I hope problem must be in p_dir and p_file which are in bold.. Kindly help me out. Thanks in advance.see the following ex:
*& Form SUB_GET_FILEPATH
text
--> p1 text
<-- p2 text
FORM SUB_GET_FILEPATH .
GFILE = 'D:\SAP_INT\INBOUND\INBOX'. "Path
ENDFORM. " SUB_GET_FILEPATH
*& Form SUB_GET_FILE
text
--> p1 text
<-- p2 text
FORM SUB_GET_FILE .
DATA: P_FDIR(200) TYPE C.
DATA: IT_FILEDIR1 TYPE STANDARD TABLE OF TY_FILEDIR WITH HEADER LINE.
P_FDIR = GFILE.
CALL FUNCTION 'RZL_READ_DIR_LOCAL'
EXPORTING
NAME = P_FDIR
TABLES
FILE_TBL = IT_FILEDIR.
REFRESH : IT_FILEDIR1.
LOOP AT IT_FILEDIR.
IF IT_FILEDIR-NAME(4) = 'ZINC' OR IT_FILEDIR-NAME(4) = 'zinc'.
MOVE IT_FILEDIR-NAME TO IT_FILEDIR1-NAME.
APPEND IT_FILEDIR1.
ENDIF.
ENDLOOP.
IF IT_FILEDIR1[] IS INITIAL.
STOP.
ENDIF.
LOOP AT IT_FILEDIR1.
REFRESH: I_TAB.
CLEAR: I_TAB.
NAME = IT_FILEDIR1-NAME.
CONCATENATE: GFILE '\' NAME INTO G_FILE.
OPEN DATASET G_FILE FOR INPUT IN TEXT MODE
ENCODING DEFAULT
IGNORING CONVERSION ERRORS.
IF SY-SUBRC EQ 0.
CONCATENATE 'FILENAME : ' G_FILE INTO I_MSG1.
APPEND I_MSG1.
DO.
READ DATASET G_FILE INTO RECORD.
IF SY-SUBRC = 0.
SPLIT RECORD AT ',' INTO I_TAB-BUKRS I_TAB-EBELN
I_TAB-BLDAT I_TAB-XBLNR I_TAB-LIFNR I_TAB-AMOUNT
I_TAB-CURR I_TAB-BUSAREA
I_TAB-BKTXT I_TAB-DMBTR I_TAB-MENGE I_TAB-SRNO.
MOVE-CORRESPONDING I_TAB TO I_TAB1.
ELSE.
EXIT.
ENDIF.
APPEND I_TAB1.
CLEAR: I_TAB, I_TAB1.
ENDDO.
ENDIF.
CLOSE DATASET G_FILE. -
Can not insert or update [TABLE] from internal table in method
I've faced a problem with OO abap. I've tried to insert into [ TABLE ] from internal table, but i've got error msg after i compiled.
"An explicit work area is necessary in the OO context. Use "INSERT wa INTO [TABLE] itab""
After i changed to loop in work area and INSERT INTO [TABLE] VALUES gw_data., everything is fine, can compile and run.
This is error code.
METHOD set_data_to_table.
REFRESH gi_data.
CLEAR gi_data.
IF gi_file[] IS NOT INITIAL.
* Set data for modify table
LOOP AT gi_file INTO gw_file.
MOVE-CORRESPONDING gw_file TO gw_data.
me->conversion_input( EXPORTING im_vendor = gw_data-vendor
CHANGING ch_vendor = gw_data-vendor ).
APPEND gw_data TO gi_data.
ENDLOOP.
INSERT [TABLE] FROM TABLE gi_data.
* LOOP AT gi_data INTO gw_data.
* INSERT INTO [TABLE] VALUES gw_data.
* IF sy-subrc = 0.
* COMMIT WORK.
* ELSE.
* ROLLBACK WORK.
* ENDIF.
* ENDLOOP.
ELSE.
MESSAGE 'No data found' TYPE 'I'.
ENDIF.
ENDMETHOD. "set_data_to_tableHi Matthew,
I think there is no difference in database insert between OO and non-OO.
The correct syntax according to ECC600 online documentation is
[Inserting Several Lines|http://help.sap.com/saphelp_erp2005vp/helpdata/en/fc/eb3a6d358411d1829f0000e829fbfe/content.htm]
To insert several lines into a database table, use the following:
INSERT target FROM TABLE itab \[ACCEPTING DUPLICATE KEYS].
This writes all lines of the internal table itabto the database table in one single operation. If one or more lines cannot be inserted because the database already contains a line with the same primary key, a runtime error occurs. You can prevent the runtime error occurring by using the addition ACCEPTING DUPLICATE KEYS.
Whenever you want to insert more than one line into a database table, it is more efficient to work with an internal table than to insert the lines one by one.
I think the syntax
INSERT my_dbtable FROM TABLE gi_data.
should work, your suggestion may lead to syntax error.
Regards,
Clemens -
Unable to Capture ALV output in an Internal Table, after CALL TRANSACTION
Dear all,
My requirement is to run multiple materials in T-code CK86_99 but as we know CK86_99 is only adequate to one material at a time.
So, I want to capture the Output of the T-code in my Internal table with respect to all the Material Numbers I use in the Select-Options of my Z Program.
Below is the Code I developed so far, but the Class
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = lf_ref ).
is not capturing the Ouput...
Please have a look and enlighten me how it could be solved.
TABLES : mara.
DATA : BEGIN OF wa_mara,
matnr TYPE mara-matnr,
END OF wa_mara.
DATA: it_bdcdata TYPE TABLE OF bdcdata,
wa_it_bdcdata LIKE LINE OF it_bdcdata,
it_mara LIKE TABLE OF wa_mara.
* BELNR(10).
FIELD-SYMBOLS:<fs_tab> TYPE ANY TABLE,
<fs_line> TYPE any.
DATA:lf_ref TYPE REF TO data,
lf_ref1 TYPE REF TO data.
SELECT-OPTIONS so_matnr FOR mara-matnr.
PARAMETERS p_werks LIKE t001w-werks.
*BELNR = 'Z92'. " Give Document Number here
SELECT matnr FROM mara INTO TABLE it_mara WHERE matnr IN so_matnr.
DATA opt TYPE ctu_params.
LOOP AT it_mara INTO wa_mara.
CLEAR wa_it_bdcdata.
wa_it_bdcdata-program = 'SAPMKKB0'.
wa_it_bdcdata-dynpro = '0300'.
wa_it_bdcdata-dynbegin = 'X'.
APPEND wa_it_bdcdata TO it_bdcdata.
CLEAR wa_it_bdcdata.
wa_it_bdcdata-fnam = 'BDC_CURSOR'.
wa_it_bdcdata-fval = 'KKB0-MATNR'.
APPEND wa_it_bdcdata TO it_bdcdata.
CLEAR wa_it_bdcdata.
wa_it_bdcdata-fnam = 'KKB0-MATNR'.
wa_it_bdcdata-fval = wa_mara-matnr.
APPEND wa_it_bdcdata TO it_bdcdata.
CLEAR wa_it_bdcdata.
wa_it_bdcdata-fnam = 'BDC_CURSOR'.
wa_it_bdcdata-fval = 'KKB0-WERKS'.
APPEND wa_it_bdcdata TO it_bdcdata.
CLEAR wa_it_bdcdata.
wa_it_bdcdata-fnam = 'KKB0-WERKS'.
wa_it_bdcdata-fval = p_werks.
APPEND wa_it_bdcdata TO it_bdcdata.
CLEAR wa_it_bdcdata.
wa_it_bdcdata-fnam = 'BDC_OKCODE'.
wa_it_bdcdata-fval = 'OSNY'."'ONLI'."=CRET'.
APPEND wa_it_bdcdata TO it_bdcdata.
* CLEAR wa_it_bdcdata.
* wa_it_bdcdata-program = 'SAPLKKRSOO'.
* wa_it_bdcdata-dynpro = '0100'.
* wa_it_bdcdata-dynbegin = 'X'.
* APPEND wa_it_bdcdata TO it_bdcdata.
* CLEAR wa_it_bdcdata.
* wa_it_bdcdata-fnam = 'BDC_OKCODE'.
* wa_it_bdcdata-fval = 'BACK'."=CRET'.
* APPEND wa_it_bdcdata TO it_bdcdata.
* CLEAR wa_it_bdcdata.
* wa_it_bdcdata-program = 'SAPMKKB0'.
* wa_it_bdcdata-dynpro = '0300'.
* wa_it_bdcdata-dynbegin = 'X'.
* APPEND wa_it_bdcdata TO it_bdcdata.
* CLEAR wa_it_bdcdata.
* wa_it_bdcdata-fnam = 'BDC_OKCODE'.
* wa_it_bdcdata-fval = 'EXIT'."=CRET'.
* APPEND wa_it_bdcdata TO it_bdcdata.
opt-dismode = 'N'.
cl_salv_bs_runtime_info=>set(
EXPORTING display = abap_false
metadata = abap_true
data = abap_true ).
CALL TRANSACTION 'CK86_99' USING it_bdcdata OPTIONS FROM opt.
TRY.
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = lf_ref ).
ASSIGN lf_ref->* TO <fs_tab>.
CATCH cx_salv_bs_sc_runtime_info.
MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
IF <fs_tab> IS ASSIGNED.
CREATE DATA lf_ref1 LIKE LINE OF <fs_tab>.
ASSIGN lf_ref1->* TO <fs_line>.
ENDIF.
*LOOP AT <FS_TAB> ASSIGNING <FS_LINE>.
*ENDLOOP.Hi Abhay,
If you go to Transaction code SE93, enter the tcode "CK86_99" and click display, you may see the default value for transaction is "KKBB" and the screen field for P_SCREEN = 0300, P_TCODE = ck86_99.
You may need to copy the transaction code "KKBB" and go to SE93 again, enter the tcode for "KKBB" then click display, now you may see the program name is "RKKB1000".
Hope this answer your question.
Thanks
Hock Lin -
Modify dynamic internal table from dynamic work area using index...
ASSIGN w_text TO <fs>.
ASSIGN w_temp TO <fs1>.
lint_tab_iw49[] = <tab>.
lint_tab_iw49_t[] = <tab>.
DELETE ADJACENT DUPLICATES FROM lint_tab_iw49 COMPARING aufnr.
LOOP AT lint_tab_iw49 INTO lws_tab_iw49.
READ TABLE lint_object_tab1 INTO lws_object_tab1
WITH KEY aufnr = lws_tab_iw49-aufnr.
IF sy-subrc EQ 0.
Collect operations in rows of an internal table.
w_idx = 1.
WHILE w_idx < 51.
w_nn = w_idx.
CONCATENATE 'lws_object_tab1-ZZOPERN' w_nn INTO w_xx.
ASSIGN (w_xx) TO <fs>.
CONCATENATE w_text <fs> INTO w_text SEPARATED BY ','.
w_idx = w_idx + 1.
ENDWHILE.
Split operations into an internal table to get operations in rows.
SPLIT w_text AT ',' INTO TABLE lint_vornr.
DELETE lint_vornr WHERE vornr = ' '.
DESCRIBE TABLE lint_vornr LINES w_lines.
Collect costs in rows of an internal table
CLEAR: w_idx, w_nn, w_xx, w_text.
w_idx = 1.
WHILE w_idx < 51.
w_nn = w_idx.
CONCATENATE 'lws_object_tab1-ZZCOST' w_nn INTO w_xx.
ASSIGN (w_xx) TO <fs>.
<fs1> = <fs>.
CONCATENATE w_text <fs1> INTO w_text SEPARATED BY ','.
w_idx = w_idx + 1.
ENDWHILE.
Split costs into an internal table to get costs in rows.
SPLIT w_text AT ',' INTO TABLE lint_escost.
DELETE lint_escost WHERE cost = ' '.
DESCRIBE TABLE lint_escost LINES w_lines_cost.
Append lines of lint_escost from 1 to w_lines to lint_escost1.
Collect currencies in rows of an internal table
CLEAR: w_idx, w_nn, w_xx, w_text.
w_idx = 1.
WHILE w_idx < 51.
w_nn = w_idx.
CONCATENATE 'lws_object_tab1-ZZCURR' w_nn INTO w_xx.
ASSIGN (w_xx) TO <fs>.
<fs1> = <fs>.
CONCATENATE w_text <fs1> INTO w_text SEPARATED BY ','.
w_idx = w_idx + 1.
ENDWHILE.
Split costs into an internal table to get costs in rows.
SPLIT w_text AT ',' INTO TABLE lint_curr.
DELETE lint_curr WHERE curr = ' '.
DESCRIBE TABLE lint_curr LINES w_lines_curr.
Append lines of lint_curr from 1 to w_lines to lint_curr1.
ENDIF.
PERFORM update_object_tab_for_iw49n.
ENDLOOP.
ENDIF.
ENDFORM. " modify_object_tab
*& Form update_object_tab_for_IW49N
text
--> p1 text
<-- p2 text
FORM update_object_tab_for_iw49n .
DATA: lws_temp TYPE string VALUE 'where aufnr = lws_tab_iw49-aufnr',
lw_index TYPE sy-index.
READ TABLE <tab> TRANSPORTING NO FIELDS WITH KEY ('AUFNR') =
lws_tab_iw49-aufnr.
IF sy-subrc EQ 0.
lw_index = sy-tabix.
LOOP AT <tab> INTO <wa1> FROM lw_index.
IF <wa1>-aufnr NE lws_tab_iw49-aufnr.
EXIT.
ELSE.
CLEAR lw_index.
lw_index = sy-tabix.
lw_index = 1.
WHILE lw_index LE w_lines.
READ TABLE lint_escost INTO lws_escost INDEX lw_index.
IF sy-subrc EQ 0.
lw_index = lw_index + 1.
<wa1>-zzcost1 = lws_escost-cost.
ENDIF.
READ TABLE lint_curr1 INTO lws_curr INDEX lw_index.
IF sy-subrc EQ 0.
<wa1>-zzcurr1 = lws_curr-curr.
ENDIF.
MODIFY <tab> FROM <wa1> "TRANSPORTING ('ZZCOST1') ('ZZCURR1')
INDEX sy-tabix.
IF sy-subrc EQ 0.
ENDIF.
lw_index = lw_index + 1.
ENDWHILE.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM. " update_object
Hi,
With referene to the code snippet above I want to modify <tab> from <wa1> on specific indices or with specific where condition.
Is it achievable... How?
Many thanks in advance.
Thanks & Regards,
ShreyaYou might have to split the code in to two parts to keep the formatting intact.
-
Loop Internal Table Performance
Hi I am from BW and not much familiar with ABAP. I have written the following code in BW. I have around 1.5 million records coming into BW and the code I have written needs to go through 1.5 million times. Hence the data load is taking long time. I would like someone to please go through the code below and suggest if any for performance improvement.
data: i_datapackage like DATA_PACKAGE occurs 0 with header line,
i_index like sy-tabix,
j_index like sy-tabix,
i_employee like /bi0/memployee occurs 0 with header line,
i_begda like /bi0/memployee occurs 0 with header line.
prev_job like i_employee-job,
prev_position like i_employee-hrposition,
curr_job like i_employee-job,
curr_position like i_employee-hrposition,
job_datefrom like i_employee-datefrom,
position_datefrom like i_employee-datefrom,
prejob_datefrom like i_employee-datefrom,
prepos_datefrom like i_employee-datefrom,
prejob_dateto like i_employee-datefrom,
prepos_dateto like i_employee-datefrom.
i_datapackage[] = DATA_PACKAGE[].
sort i_datapackage by employee calmonth ascending.
select * from /bi0/memployee into table i_employee.
sort i_employee by employee dateto descending.
i_begda[] = i_employee[].
sort i_begda by employee datefrom ascending.
delete adjacent duplicates from i_employee comparing employee.
loop at i_datapackage.
*collecting current job,position, previous job, position
read table i_employee with key employee = i_datapackage-employee
dateto ='99991231'.
if sy-subrc = 0.
curr_job = i_employee-job.
curr_position = i_employee-hrposition.
endif.
read table i_begda with key employee = i_datapackage-employee.
if sy-subrc = 0.
prev_job = i_begda-/bic/zhr_pjob.
prev_position = i_begda-/bic/zhr_ppost.
endif.
*end of collecting current job and position
sort i_begda by employee datefrom descending.
read table i_begda with key employee = i_datapackage-employee
binary search.
if sy-subrc = 0.
i_index = sy-tabix.
endif.
read table i_begda index i_index.
if i_begda-employee ne i_datapackage-employee.
exit.
endif.
code for populating service award tenure
if i_begda-/bic/zhr_srvdt is not initial.
i_datapackage-/bic/zhr_hrtnr = sy-datum+0(4) -
i_begda-/BIC/ZHR_SRVDt+0(4).
if sy-datum4(4) lt i_begda-/bic/zhr_srvdt4(4).
i_datapackage-/bic/zhr_hrtnr = i_datapackage-/bic/zhr_hrtnr - 1.
endif.
endif.
code for current hire tenure
if i_begda-/bic/zhr_curdt is not initial.
i_datapackage-/bic/zhr_crtnr = sy-datum+0(4) -
i_begda-/BIC/ZHR_CURDT+0(4).
if sy-datum4(4) lt i_begda-/BIC/ZHR_CURDT4(4).
i_datapackage-/BIC/ZHR_CRTNR = i_datapackage-/bic/zhr_crtnr - 1.
endif.
endif.
code for current supervisor tenure
if i_begda-/bic/zhr_csbdt is not initial.
i_datapackage-/bic/ZHR_CSTNR = sy-datum+0(4) -
i_begda-/BIC/ZHR_CSBDT+0(4).
if sy-datum4(4) lt i_begda-/BIC/ZHR_CSBDT4(4).
i_datapackage-/bic/ZHR_CSTNR = i_datapackage-/bic/ZHR_CSTNR - 1.
endif.
endif.
code for previous supervisor tenure
if i_begda-/bic/zhr_psbdt is not initial.
i_datapackage-/bic/ZHR_PSTNR = sy-datum+0(4) -
i_begda-/BIC/ZHR_PSBDT+0(4).
if sy-datum4(4) lt i_begda-/BIC/ZHR_PSBDT4(4).
i_datapackage-/bic/ZHR_PSTNR = i_datapackage-/bic/ZHR_PSTNR - 1.
endif.
endif.
Code for populating Years in current job
and current position
sort i_begda by employee datefrom ascending.
clear j_index.
read table i_begda with key employee = i_datapackage-employee.
if sy-subrc = 0.
j_index = sy-tabix.
endif.
loop at i_begda from j_index.
if i_begda-employee ne i_datapackage-employee.
exit.
elseif ( i_begda-job eq curr_job ) and
( curr_job is not initial ).
job_datefrom = i_begda-datefrom.
prejob_dateto = i_begda-datefrom - 1.
exit.
endif.
endloop.
loop at i_begda from j_index.
if i_begda-employee ne i_datapackage-employee.
exit.
elseif ( i_begda-hrposition eq curr_position ) and
( curr_position is not initial ).
position_datefrom = i_begda-datefrom.
prepos_dateto = i_begda-datefrom - 1.
exit.
endif.
endloop.
loop at i_begda from j_index.
if i_begda-employee ne i_datapackage-employee.
exit.
elseif ( i_begda-job eq prev_job ) and
( prev_job is not initial ) and
( i_begda-datefrom ne '10000101').
prejob_datefrom = i_begda-datefrom.
exit.
endif.
endloop.
loop at i_begda from j_index.
if i_begda-employee ne i_datapackage-employee.
exit.
elseif ( i_begda-hrposition eq prev_position ) and
( prev_position is not initial ) and
( i_begda-datefrom ne '10000101').
prepos_datefrom = i_begda-datefrom.
exit.
endif.
endloop.
i_datapackage-/bic/zhr_cjtnr = sy-datum+0(4) -
job_datefrom+0(4).
if sy-datum4(4) lt job_datefrom4(4).
i_datapackage-/bic/zhr_cjtnr = i_datapackage-/bic/zhr_cjtnr - 1.
endif.
if position_datefrom+0(4) is not initial.
i_datapackage-/bic/zhr_cptnr = sy-datum+0(4) -
position_datefrom+0(4).
if sy-datum4(4) lt position_datefrom4(4).
i_datapackage-/bic/zhr_cptnr = i_datapackage-/bic/zhr_cptnr - 1.
endif.
endif.
if prejob_datefrom is not initial.
i_datapackage-/bic/zhr_pjtnr = prejob_dateto+0(4) -
prejob_datefrom+0(4).
if prejob_dateto4(4) lt prejob_datefrom4(4).
i_datapackage-/bic/zhr_pjtnr = i_datapackage-/bic/zhr_pjtnr - 1.
endif.
endif.
if prepos_datefrom is not initial.
i_datapackage-/bic/zhr_pptnr = prepos_dateto+0(4) -
prepos_datefrom+0(4).
if prepos_dateto4(4) lt prepos_datefrom4(4).
i_datapackage-/bic/zhr_pptnr = i_datapackage-/bic/zhr_pptnr - 1.
endif.
endif.
modify i_datapackage transporting /bic/zhr_hrtnr /bic/zhr_crtnr
/bic/zhr_cstnr /bic/ZHR_PSTNR /bic/zhr_cjtnr /bic/zhr_cptnr
/bic/zhr_pjtnr /bic/zhr_pptnr.
endloop.
DATA_PACKAGE[] = i_datapackage[].
Thanks.i_datapackage[] = DATA_PACKAGE[].
i_begda[] = i_employee[].
How larger are these internal tables ?
If large, then
> sort i_begda by employee datefrom descending.
> read table i_begda with key employee = i_datapackage-employee binary search.
the resorting and
the nested loops
=> will kill your performance
Please reconsider the whole logic, I have only some hints
+ Binary search does not help anything if you have to sort everytime you use it.
+ Never use a sort of a larger table inside a larger loop, it is always avoidable!
+ Check whether you can break down the big piece into smaller one, try to
do the break down in the database already to save memory
=> Please provide your code in better layout, and explain what you actually want
to do.
Siegfried -
what is the difference between sy-index and sy-tabix?can any one provide me with some points on this ?
Hi,
SY-INDEX
In a DO or WHILE loop, SY-INDEX contains the number of loop passes including the current pass.
SY-TABIX
Current line of an internal table. SY-TABIX is set by the statements below, but only for index tables. The field is either not set or is set to 0 for hashed tables.
-APPEND sets SY-TABIX to the index of the last line of the table, that is, it contains the overall number of entries in the table.
-COLLECT sets SY-TABIX to the index of the existing or inserted line in the table. If the table has the type HASHED TABLE, SY-TABIX is set to 0.
-LOOP AT sets SY-TABIX to the index of the current line at the beginning of each loop lass. At the end of the loop, SY-TABIX is reset to the value that it had before entering the loop. It is set to 0 if the table has the type HASHED TABLE.
-READ TABLE sets SY-TABIX to the index of the table line read. If you use a binary search, and the system does not find a line, SY-TABIX contains the total number of lines, or one more than the total number of lines. SY-INDEX is undefined if a linear search fails to return an entry.
-SEARCH <itab> FOR sets SY-TABIX to the index of the table line in which the search string is found.
SY-TABIX means Table Index. This signifies the number of table index. Each row of a table has certain index or counter. The value of sy-tabix for the last entry would be equivalent to number of table entries.
SY-INDEX means the number of Iterations for a loop. bascially DO - ENDO .
SY-INDEX is not equal to SY-TABIX.
Check the below program
report tabix_index.
DO 100 times.
wa_tab-index = sy-index.
append wa_tab to itab.
clear wa_tab.
enddo.
loop at itab into wa_tab.
write:/1 sy-tabix.
endloop.
Reward if useful
Thanks -
Insert statement in to internal table
I have an editable ALV LIST report with the check box to it. When the user checks the check box on the report and hits a push Button it should copy the row from the internal table and insert the row to the same internal table in the next line.
I had my code in this way,
WHEN 'COPY'.
LOOP AT t_output INTO wa_output.
IF wa_output-chkbox = 'X'.
wa_output-zactual = 0.
wa_output-zqty = 0.
INSERT wa_output INTO t_output INDEX sy-tabix.
ENDIF.
ENDLOOP.
However the problem was,
For e.g. let say I have only 3 rows in the internal table. So when the user selects the last, 3rd row and hits the push button the 3rd row copied and is inserted in the 3rd row. The user wanted the copied row in the next row, ie the 4th row.
SO I changed the above code as below and now it goes to an endless loop.
WHEN 'COPY'.
LOOP AT t_output INTO wa_output.
IF wa_output-chkbox = 'X'.
wa_output-zactual = 0.
wa_output-zqty = 0.
Sy-tabix = sy-tabix + 1.
INSERT wa_output INTO t_output INDEX sy-tabix.
ENDIF.
ENDLOOP.
<b>I dont want to use another internal table.</b>
I hope I am clear.
Please suggest,
Ster.Hi,
Change the code as follows.
data: lv_cnt type i.
describe table t_output lines lv_cnt.
LOOP AT t_output INTO wa_output where wa_output-chkbox = 'X'
and wa_output-zactual = 0
and wa_output-zqty = 0.
lv_cnt = lv_cnt + 1.
INSERT wa_output INTO t_output INDEX lv_cnt.
ENDLOOP.
Regards
Sailaja. -
Field catalog for internal table in ALV
In my program the internal table consists many fields from various tables and structure doesn't belong to a single data table.
In order to get output in ALV grid following FM has been used
REUSE_ALV_GRID_DISPLAY
for field catalog the fields are defined specifically.
l_fieldcat-fieldname = 'VBELN'.
l_fieldcat-outputlen = 10.
l_fieldcat-seltext_l = 'Billing doc'.
l_fieldcat-no_zero = 'X'.
l_fieldcat-hotspot = 'X'.
append l_fieldcat to p_fieldtab.
..............and so on for all the fields.
Just wanted to know is there any other method to display all the fields of this internal table automatically so each field is not specified specifically.
anyaHi
Try this instead:
*& Form create_fieldcatalog
* Create a field catalogue from any internal table
* -->PT_TABLE Internal table
* -->PT_FIELDCAT Field Catalogue
FORM create_fieldcatalog
USING pt_table TYPE ANY TABLE
CHANGING pt_fieldcat TYPE lvc_t_fcat.
DATA:
lr_tabdescr TYPE REF TO cl_abap_structdescr
, lr_data TYPE REF TO data
, lt_dfies TYPE ddfields
, ls_dfies TYPE dfies
, ls_fieldcat TYPE lvc_s_fcat
CLEAR pt_fieldcat.
CREATE DATA lr_data LIKE LINE OF pt_table.
lr_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ).
lt_dfies = cl_salv_data_descr=>read_structdescr( lr_tabdescr ).
LOOP AT lt_dfies
INTO ls_dfies.
CLEAR ls_fieldcat.
MOVE-CORRESPONDING ls_dfies TO ls_fieldcat.
APPEND ls_fieldcat TO pt_fieldcat.
ENDLOOP.
ENDFORM. "create_fieldcatalog -
Abap Logic for performance tuning not working when using Internal tables
Hi,
I wrote this piece of code that is working correctly that is select SUM of cost from DSO where Plant is the same for Sales Items.
LOOP AT RESULT_PACKAGE INTO rp.
SELECT SUM( /N/S_STRDCOST ) FROM /N/ADSP_DPIT00 INTO
rp-/N/S_STRDCOST
WHERE /N42/S_SALESITEM = rp-/N42/S_ITEMID AND /N42/S_PLPLANT EQ
rp-/N42/S_SOURCE.
MODIFY RESULT_PACKAGE FROM rp.
Clear rp.
ENDLOOP.
Now I try to rewrite it for performance tunning using internal table but I am getting 0 values. can't figure out whats the problem and been struggling fixing it.
TYPES : begin of ty_DSO_TABLE,
/N42/S_STRDCOST TYPE /N/ADSP_DSPC00-/N/S_STRDCOST,
/N42/S_ITEMID TYPE /N/ADSP_DSPC00-/N/S_ITEMID,
end of ty_DSO_TABLE.
DATA: it_DSO_TABLE type hashed table of ty_DSO_TABLE with unique key
/N/S_ITEMID,
wa_DSO_TABLE type ty_DSO_TABLE.
Field-symbols: <rp> TYPE tys_TG_1.
LOOP AT RESULT_PACKAGE assigning <rp>.
clear wa_DSO_TABLE.
Read table IT_DSO_TABLE into wa_DSO_TABLE with table key /N/S_ITEMID
= <rp>-/N/S_ITEMID.
if sy-subrc ne 0.
select SUM( /N/S_STRDCOST ) into CORRESPONDING
FIELDS OF wa_DSO_TABLE from
/N/ADSP_DPIT00 WHERE /N/S_SALESITEM = <rp>-/N/S_ITEMID AND
/N/S_PLPLANT EQ <rp>-/N/S_SOURCE.
if sy-subrc eq 0.
<rp>-/N/S_STRDCOST = wa_DSO_TABLE-/N/S_STRDCOST.
endif.
endif.
ENDLOOP.
Any idea whats wrong with the code
thanksHi Vaidya,
According to the code which you have written, there is no value in table IT_DSO_TABLE when you are trying to read the values.And after the read statement you have given a condition for sy-subrc. Hence the select statement is actually not even getting executed. *Also you have not assigned the final value back to the ResultPackage.*_
So Kindly correct your code as follows:
Data: wa_dso type ty_DSO_TABLE.
LOOP AT RESULT_PACKAGE assigning <rp>.
clear wa_DSO_TABLE.
select SUM( /N/S_STRDCOST ) into CORRESPONDING
FIELDS OF wa_DSO_TABLE from
/N/ADSP_DPIT00 WHERE /N/S_SALESITEM = <rp>-/N/S_ITEMID AND
/N/S_PLPLANT EQ <rp>-/N/S_SOURCE.
if sy-subrc eq 0.
<rp>-/N/S_STRDCOST = wa_DSO_TABLE-/N/S_STRDCOST.
MODIFY RESULT_PACKAGE FROM <rp>.
endif.
ENDLOOP.
Hope this helps you.
Regards,
Satyam
Maybe you are looking for
-
Get Windows Folder Paths on Win 2000
I downloaded the windows_folder_path.vi from NI site, where I can see that "This VI is supported on Windows 2000, XP, and Vista." If I use it in an executable that searches for Application Data folder, it works under XP, but it doesn't under a fresh
-
How to retrive flash files from website
Hi, I had a developer who has been working on Daciro.com. He build it using all flash. I need to make changes on the website, but it seems like he is out of business. They don't answer their phones or emails. The website is hosted on their server, an
-
Dear All, When customer moving stock from 411 Q to own stock( sending and receiving storage location is same) the error appears as below. Dlv. type (dlv. catgry OD for mat. RPM513904/02160 and BWART 411) cannot be determined Message no. VL295 How to
-
Service request question with iPhone 4
Tody I requested a service on my iPhone 4 and did all the steps they required, and it went successfully. I took my iPhone to the UPS store and gave it to them while giving them my repair ID. Later I realized that I needed to change the return address
-
JDev 10.1.3.3 + ADF
hi, We developed application using ADF 10.1.3.3, we are seeing some strange thing happeneing in the appllication. We see some time the forms gets displayed twice and some time when we click the LOV 5 windows opens. Has any body faces these issues? Pl