Append to Array Function taking lot of processor resources
I am using a SCXI box with 64 channels, when I read the data I append the new data to the previous data, I am sampling at 500 samples/sec. As the old array becomes bigger than 1000 rows which is 2 secs of data, the processor usage is going up to 50% and from there onwards it is degrading more.If I dont append the data just load the new data into my array the processor usage is only 5%.I need all the data from the 64 channels and I run the appending funtion atleast 10 secs before I clear and add the new data. I am attaching my program with this message, Get data state in my program is where I am appending the data. There are couple more SUb VI's which are needed to run this program, but atleast the main VI should give an idea what I am doing.
Thanks,
Mudda
Attachments:
PXI Test Stand - State Machine - 7.0.vi 1163 KB
Growing arrays is always expensive, because it will require memory reallocations.
You should initialize a 2D array of the maximum expected size at the beginning, keep track of the insert point, and use "replace array subset" to write new data at the insert point.
LabVIEW Champion . Do more with less code and in less time .
Similar Messages
-
Reading, comparing and appending two files is taking lot of time
public static void main(String args[])
BufferedReader bSource = null;
String sSource="";
String sSourceData="";
BufferedReader bDestination = null;
String sDestination="";
String sDestinationData="";
try
bSource = new BufferedReader(new FileReader("C:/TEMP/Source.map"));
while((sSource = bSource.readLine()) != null)
sSourceData+=sSource;
bDestination = new BufferedReader(new FileReader("D:/TEMP/Destination.map"));
while((sDestination = bDestination.readLine()) != null)
sDestinationData+=sDestination;
catch(IOException ioe)
System.out.println(ioe.getMessage());
finally
try
bSource.close();
bDestination.close();
catch(Exception e)
if(sDestinationData.contains(sSourceData))
fDestinationFlag=false;
else
fDestinationFlag=true;
if(fDestinationFlag)
BufferedReader br2 = null;
BufferedWriter bw2 = null;
try
br2 = new BufferedReader(new FileReader("C:/TEMP/Source.map"));
bw2 = new BufferedWriter(new FileWriter("D:/TEMP/Destination.map",true));
while((line2 = br2.readLine()) != null)
bw2.write(line2);
bw2.newLine();
bw2.flush();
catch(IOException ioe)
System.out.println(ioe.getMessage());
finally
try
br2.close();
catch(Exception e)
try
bw2.close();
catch(Exception e)
}I am comparing the contents of the two files Source.map (containing 3 lines) and Destination.map (containing 5000+ lines). The contents of the Source.map gets appended in the Destination.map only if it does not contain the same.
Now my program is doing the necessary, but it is taking lot of time. It's taking 1 min 26 seconds.
Could anyone please tell me what do I modify in may program to make it execute much faster.1) Just compare the byte content - no need to convert to Strings.
2) Compare a block (say 256K bytes) at a time - no need to read the whole file into memory.
3) Compare the file lengths first - if they are different then the content cannot be the same.
4) When appending one file to the other, set the 'append' flag in the constructor of FileOutputStream to true. -
Function Module Extraction from KONV Table taking lot of time for extractio
Hi
I have a requirement wherein i need to get records from KONV Table (Conditions (Transaction Data) ). i need the data corresponding to Application (KAPPL) = 'F'.
For this i had written one function module but it is taking lot of time (@ 2.5 hrs) for fetching records as there are large number of records in KONV Table.
I am pasting the Function Module code for reference.
<b>kindly guide me as to how the extraction performance can be improved.</b>
<b>Function Module Code:</b>
FUNCTION ZBW_SHPMNT_COND.
""Local interface:
*" IMPORTING
*" VALUE(I_REQUNR) TYPE SBIWA_S_INTERFACE-REQUNR
*" VALUE(I_ISOURCE) TYPE SBIWA_S_INTERFACE-ISOURCE OPTIONAL
*" VALUE(I_MAXSIZE) TYPE SBIWA_S_INTERFACE-MAXSIZE OPTIONAL
*" VALUE(I_INITFLAG) TYPE SBIWA_S_INTERFACE-INITFLAG OPTIONAL
*" VALUE(I_UPDMODE) TYPE SBIWA_S_INTERFACE-UPDMODE OPTIONAL
*" VALUE(I_DATAPAKID) TYPE SBIWA_S_INTERFACE-DATAPAKID OPTIONAL
*" VALUE(I_PRIVATE_MODE) OPTIONAL
*" VALUE(I_CALLMODE) LIKE ROARCHD200-CALLMODE OPTIONAL
*" TABLES
*" I_T_SELECT TYPE SBIWA_T_SELECT OPTIONAL
*" I_T_FIELDS TYPE SBIWA_T_FIELDS OPTIONAL
*" E_T_DATA STRUCTURE ZBW_SHPMNT_COND OPTIONAL
*" E_T_SOURCE_STRUCTURE_NAME OPTIONAL
*" EXCEPTIONS
*" NO_MORE_DATA
*" ERROR_PASSED_TO_MESS_HANDLER
The input parameter I_DATAPAKID is not supported yet !
TABLES: KONV.
Auxiliary Selection criteria structure
DATA: l_s_select TYPE sbiwa_s_select.
Maximum number of lines for DB table
STATICS: l_maxsize TYPE sbiwa_s_interface-maxsize.
Maximum number of lines for DB table
STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,
counter
S_COUNTER_DATAPAKID LIKE SY-TABIX,
cursor
S_CURSOR TYPE CURSOR.
Select ranges
RANGES: L_R_KNUMV FOR KONV-KNUMV,
L_R_KSCHL FOR KONV-KSCHL,
L_R_KDATU FOR KONV-KDATU.
Declaring internal tables
DATA : I_KONV LIKE KONV OCCURS 0 WITH HEADER LINE.
DATA : Begin of I_KONV occurs 0,
MANDT LIKE konv-mandt,
KNUMV LIKE konv-knumv,
KPOSN LIKE konv-kposn,
STUNR LIKE konv-stunr,
ZAEHK LIKE konv-zaehk,
KAPPL LIKE konv-kappl,
KSCHL LIKE konv-kschl,
KDATU LIKE konv-kdatu,
KBETR LIKE konv-kbetr,
WAERS LIKE konv-waers,
END OF I_KONV.
Initialization mode (first call by SAPI) or data transfer mode
(following calls) ?
IF i_initflag = sbiwa_c_flag_on.
Initialization: check input parameters
buffer input parameters
prepare data selection
The input parameter I_DATAPAKID is not supported yet !
Invalid second initialization call -> error exit
IF NOT g_flag_interface_initialized IS INITIAL.
IF
1 = 2.
MESSAGE e008(r3).
ENDIF.
log_write 'E' "message type
'R3' "message class
'008' "message number
' ' "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDIF.
Check InfoSource validity
CASE i_isource.
WHEN 'X'.
WHEN 'Y'.
WHEN 'Z'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e009(r3). ENDIF.
log_write 'E' "message type
'R3' "message class
'009' "message number
i_isource "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
Check for supported update mode
CASE i_updmode.
For full upload
WHEN 'F'.
WHEN 'D'.
WHEN OTHERS.
IF 1 = 2. MESSAGE e011(r3). ENDIF.
log_write 'E' "message type
'R3' "message class
'011' "message number
i_updmode "message variable 1
' '. "message variable 2
RAISE error_passed_to_mess_handler.
ENDCASE.
APPEND LINES OF i_t_select TO g_t_select.
Fill parameter buffer for data extraction calls
g_s_interface-requnr = i_requnr.
g_s_interface-isource = i_isource.
g_s_interface-maxsize = i_maxsize.
g_s_interface-initflag = i_initflag.
g_s_interface-updmode = i_updmode.
g_s_interface-datapakid = i_datapakid.
g_flag_interface_initialized = sbiwa_c_flag_on.
Fill field list table for an optimized select statement
(in case that there is no 1:1 relation between InfoSource fields
and database table fields this may be far from beeing trivial)
APPEND LINES OF i_t_fields TO g_t_fields.
Interpretation of date selection for generic extraktion
CALL FUNCTION 'RSA3_DATE_RANGE_CONVERT'
TABLES
i_t_select = g_t_select.
ELSE. "Initialization mode or data extraction ?
CASE g_s_interface-updmode.
WHEN 'F' OR 'C' OR 'I'.
First data package -> OPEN CURSOR
IF g_counter_datapakid = 0.
L_MAXSIZE = G_S_INTERFACE-MAXSIZE.
LOOP AT g_t_select INTO l_s_select WHERE fieldnm = 'KNUMV'.
MOVE-CORRESPONDING l_s_select TO l_r_knumv.
APPEND l_r_knumv.
ENDLOOP.
LOOP AT g_t_select INTO l_s_select WHERE fieldnm = 'KSCHL'.
MOVE-CORRESPONDING l_s_select TO l_r_kschl.
APPEND l_r_kschl.
ENDLOOP.
Loop AT g_t_select INTO l_s_select WHERE fieldnm = 'KDATU'.
MOVE-CORRESPONDING l_s_select TO l_r_kdatu.
APPEND l_r_kdatu.
ENDLOOP.
*In case of full upload
Fill field list table for an optimized select statement
(in case that there is no 1:1 relation between InfoSource fields
and database table fields this may be far from beeing trivial)
APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.
OPEN CURSOR G_CURSOR FOR
SELECT MANDT
KNUMV
KPOSN
STUNR
ZAEHK
KAPPL
KSCHL
KDATU
KBETR
WAERS
FROM KONV
WHERE KNUMV IN l_r_knumv
AND KSCHL IN l_r_kschl
AND KDATU IN l_r_kdatu
AND KAPPL EQ 'F'.
ENDIF.
Refresh I_KONV.
FETCH NEXT CURSOR G_CURSOR
APPENDING CORRESPONDING FIELDS OF TABLE I_KONV
PACKAGE SIZE S_S_IF-MAXSIZE.
IF SY-SUBRC <> 0.
CLOSE CURSOR G_CURSOR.
RAISE NO_MORE_DATA.
ENDIF.
LOOP AT I_KONV.
IF I_KONV-KAPPL EQ 'F'.
CLEAR :E_T_DATA.
E_T_DATA-MANDT = I_KONV-MANDT.
E_T_DATA-KNUMV = I_KONV-KNUMV.
E_T_DATA-KPOSN = I_KONV-KPOSN.
E_T_DATA-STUNR = I_KONV-STUNR.
E_T_DATA-ZAEHK = I_KONV-ZAEHK.
E_T_DATA-KAPPL = I_KONV-KAPPL.
E_T_DATA-KSCHL = I_KONV-KSCHL.
E_T_DATA-KDATU = I_KONV-KDATU.
E_T_DATA-KBETR = I_KONV-KBETR.
E_T_DATA-WAERS = I_KONV-WAERS.
APPEND E_T_DATA.
ENDIF.
ENDLOOP.
g_counter_datapakid = g_counter_datapakid + 1.
ENDIF.
ENDFUNCTION.
Thanks in Advance
Regards
Swapnil.Hi,
one option to investigate is to select the data with a condition on KNUMV (primary IDX).
Since shipment costs are store in VFKP I would investigate if all your F condition records are used in this table (field VFKP-KNUMV).
If this is the case then something like
SELECT *
FROM KONV
WHERE KNUMV IN (SELECT DISTINCT KNUMV FROM VFKP)
or
SELECT DISTINCT KNUMV
INTO CORRESPONDING FIELD OF <itab>
FROM VFKP
and then
SELECT *
FROM KONV
FOR ALL ENTRIES IN <itab>
WHERE...
will definitively speed it up.
hope this helps....
Olivier -
Program is taking lot of time for execution
Hi all,
TYPES: BEGIN OF TY_MARA,
MATNR TYPE MATNR, " Material Number
ZZBASE_CODE TYPE ZBASE_CODE, " Base Code
END OF TY_MARA,
BEGIN OF TY_MAKT,
MATNR TYPE MATNR, " Material
MAKTX TYPE MAKTX, " Material Description
END OF TY_MAKT,
BEGIN OF TY_MARC,
MATNR TYPE MATNR , " Material Number
WERKS TYPE WERKS_D, " Plant
END OF TY_MARC,
BEGIN OF TY_QMAT,
MATNR TYPE MATNR, " Material Number
ART TYPE QPART, " Inspection Type
END OF TY_QMAT,
BEGIN OF TY_MAPL,
MATNR TYPE MATNR, " Material
PLNTY TYPE PLNTY, " Task List Type
END OF TY_MAPL,
BEGIN OF TY_PLKO,
PLNTY TYPE PLNTY, " Task List Type
VERWE TYPE PLN_VERWE, " Task list usage
END OF TY_PLKO,
BEGIN OF TY_KLAH,
CLASS TYPE KLASSE_D, " Class Number
END OF TY_KLAH,
BEGIN OF TY_FINAL,
MATNR TYPE MATNR, " Material Number
MAKTX TYPE MAKTX, " Material Description
ZZBASE_CODE TYPE ZBASE_CODE, " Base Code
WERKS TYPE WERKS_D, " Plant
CLASS TYPE KLASSE_D, " Class Number
ART TYPE QPART, " Inspection Type
VERWE TYPE PLN_VERWE, " Task list usage
MESSAGE TYPE STRING, " Message
END OF TY_FINAL.
DATA: I_MARA TYPE STANDARD TABLE OF TY_MARA ,
I_MAKT TYPE STANDARD TABLE OF TY_MAKT ,
I_MARC TYPE STANDARD TABLE OF TY_MARC ,
I_QMAT TYPE STANDARD TABLE OF TY_QMAT ,
I_MAPL TYPE STANDARD TABLE OF TY_MAPL ,
I_PLKO TYPE STANDARD TABLE OF TY_PLKO ,
I_KLAH TYPE STANDARD TABLE OF TY_KLAH ,
I_FINAL TYPE STANDARD TABLE OF TY_FINAL ,
WA_MARA TYPE TY_MARA,
WA_MAKT TYPE TY_MAKT,
WA_MARC TYPE TY_MARC,
WA_QMAT TYPE TY_QMAT,
WA_MAPL TYPE TY_MAPL,
WA_PLKO TYPE TY_PLKO,
WA_KLAH TYPE TY_KLAH,
WA_FINAL TYPE TY_FINAL.
DATA: V_MTART TYPE MARA-MTART,
V_MATNR TYPE MARA-MATNR,
V_ZZBASE_CODE TYPE MARA-ZZBASE_CODE,
V_WERKS TYPE T001W-WERKS,
V_BESKZ TYPE MARC-BESKZ.
*selection-screen
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_MTART FOR V_MTART DEFAULT 'halb' TO 'zraw',
S_MATNR FOR V_MATNR,
S_ZZBASE FOR V_ZZBASE_CODE,
S_WERKS FOR V_WERKS OBLIGATORY,
S_BESKZ FOR V_BESKZ.
SELECTION-SCREEN END OF BLOCK B1.
START-OF-SELECTION.
SELECT MATNR
ZZBASE_CODE
FROM MARA INTO TABLE I_MARA
WHERE MTART IN S_MTART "Material Type
AND MATNR IN S_MATNR "Material
AND ZZBASE_CODE IN S_ZZBASE."Base Code
IF NOT I_MARA IS INITIAL.
SELECT MATNR
MAKTX
FROM MAKT INTO TABLE I_MAKT FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR.
ENDIF.
IF NOT I_MARA IS INITIAL.
SELECT MATNR
WERKS
FROM MARC INTO TABLE I_MARC FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR
AND WERKS IN S_WERKS "plant
AND BESKZ IN S_BESKZ."Procurement Type
ENDIF.
IF NOT I_MARA IS INITIAL.
SELECT MATNR
ART
FROM QMAT INTO TABLE I_QMAT FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR
AND WERKS IN S_WERKS.
ENDIF.
IF NOT I_MARA IS INITIAL.
SELECT MATNR
PLNTY FROM MAPL INTO TABLE I_MAPL FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR.
ENDIF.
IF NOT I_MAPL IS INITIAL.
SELECT PLNTY
VERWE
FROM PLKO INTO TABLE I_PLKO FOR ALL ENTRIES IN I_MAPL
WHERE PLNTY = I_MAPL-PLNTY.
ENDIF.
LOOP AT I_MARA INTO WA_MARA.
CALL FUNCTION 'CLFC_BATCH_ALLOCATION_TO_CLASS'
EXPORTING
MATERIAL = WA_MARA-MATNR
PLANT = WA_MARC-WERKS
CLASSTYPE = '023'
I_IGNORE_MATMASTER = ' '
I_BATCHES_ONLY =
I_IGNORE_BUFFER = ' '
IMPORTING
CLASSTYPE =
CLASS = WA_KLAH-CLASS
EXCEPTIONS
WRONG_FUNCTION_CALL = 1
NO_CLASS_FOUND = 2
NO_CLASSTYPE_FOUND = 3
OTHERS = 4 .
*IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*ENDIF.
APPEND WA_KLAH TO I_KLAH.
ENDLOOP.
LOOP AT I_MARA INTO WA_MARA.
WA_FINAL-MATNR = WA_MARA-MATNR.
WA_FINAL-ZZBASE_CODE = WA_MARA-ZZBASE_CODE.
APPEND WA_FINAL TO I_FINAL.
SORT I_MAKT BY MATNR.
READ TABLE I_MAKT INTO WA_MAKT WITH KEY MATNR = WA_MARA-MATNR BINARY
SEARCH.
IF SY-SUBRC EQ 0.
WA_FINAL-MAKTX = WA_MAKT-MAKTX.
ENDIF.
APPEND WA_FINAL TO I_FINAL.
SORT I_MARC BY MATNR.
READ TABLE I_MARC INTO WA_MARC WITH KEY MATNR = WA_MARA-MATNR BINARY
SEARCH.
IF SY-SUBRC EQ 0.
WA_FINAL-WERKS = WA_MARC-WERKS.
ENDIF.
APPEND WA_FINAL TO I_FINAL.
SORT I_QMAT BY MATNR.
READ TABLE I_QMAT INTO WA_MARC WITH KEY MATNR = WA_MARA-MATNR BINARY
SEARCH.
IF SY-SUBRC EQ 0.
WA_FINAL-ART = WA_QMAT-ART.
ENDIF.
APPEND WA_FINAL TO I_FINAL.
SORT I_MAPL BY MATNR.
READ TABLE I_MAPL INTO WA_MAPL WITH KEY MATNR = WA_MARA-MATNR BINARY
SEARCH.
IF SY-SUBRC EQ 0.
SORT I_PLKO BY PLNTY.
READ TABLE I_PLKO INTO WA_PLKO WITH KEY PLNTY = WA_MAPL-PLNTY BINARY
SEARCH.
ENDIF.
WA_FINAL-VERWE = WA_PLKO-VERWE.
APPEND WA_FINAL TO I_FINAL.
ENDLOOP.
LOOP AT I_KLAH INTO WA_KLAH.
WA_FINAL-CLASS = WA_KLAH-CLASS.
APPEND WA_FINAL TO I_FINAL.
ENDLOOP.
LOOP AT I_FINAL INTO WA_FINAL.
WRITE:/ WA_FINAL-MATNR,
WA_FINAL-MAKTX,
WA_FINAL-ZZBASE_CODE,
WA_FINAL-WERKS,
WA_FINAL-CLASS,
WA_FINAL-ART,
WA_FINAL-VERWE.
ENDLOOP.
This is my program. it is giving out put.but it is taking lot of time for execution. what might be the porblem.pls let me know.
Thanks,Hi Mythily,
Try the following code.
TYPES: BEGIN OF ty_mara,
matnr TYPE matnr, " Material Number
zzbase_code TYPE zbase_code, " Base Code
END OF ty_mara,
BEGIN OF ty_makt,
matnr TYPE matnr, " Material
maktx TYPE maktx, " Material Description
END OF ty_makt,
BEGIN OF ty_marc,
matnr TYPE matnr , " Material Number
werks TYPE werks_d, " Plant
END OF ty_marc,
BEGIN OF ty_qmat,
art TYPE qpart , " Inspection Type
matnr TYPE matnr , " Material Number
werks TYPE werks_d, "Plant
END OF ty_qmat,
BEGIN OF ty_mapl,
matnr TYPE matnr , " Material
werks TYPE werks_d , "Plant
plnty TYPE plnty , " Task List Type
plnnr TYPE plnnr , " Key for Task List Group
plnal TYPE plnal , " Group Counter
zkriz TYPE dzkriz , " Counter for additional criteria
zaehl TYPE cim_count, " Internal counter
END OF ty_mapl,
BEGIN OF ty_plko,
plnty TYPE plnty , " Task List Type
plnnr TYPE plnnr , " Key for Task List Group
plnal TYPE plnal , " Group Counter
zaehl TYPE cim_count, " Internal counter
verwe TYPE pln_verwe, " Task list usage
END OF ty_plko,
BEGIN OF ty_klah,
class TYPE klasse_d, " Class Number
END OF ty_klah,
BEGIN OF ty_final,
matnr TYPE matnr, " Material Number
maktx TYPE maktx, " Material Description
zzbase_code TYPE zbase_code, " Base Code
werks TYPE werks_d, " Plant
class TYPE klasse_d, " Class Number
art TYPE qpart, " Inspection Type
verwe TYPE pln_verwe, " Task list usage
message TYPE string, " Message
END OF ty_final.
DATA: i_mara TYPE STANDARD TABLE OF ty_mara ,
i_makt TYPE HASHED TABLE OF ty_makt
WITH UNIQUE KEY matnr,
i_marc TYPE SORTED TABLE OF ty_marc
WITH NON-UNIQUE KEY matnr,
i_qmat TYPE SORTED TABLE OF ty_qmat
WITH NON-UNIQUE KEY matnr werks,
i_mapl TYPE SORTED TABLE OF ty_mapl
WITH NON-UNIQUE KEY matnr werks,
i_mapl_tmp TYPE STANDARD TABLE OF ty_mapl ,
i_plko TYPE SORTED TABLE OF ty_plko
WITH NON-UNIQUE KEY plnty
plnnr
plnal,
i_final TYPE STANDARD TABLE OF ty_final,
wa_mara TYPE ty_mara,
wa_makt TYPE ty_makt,
wa_marc TYPE ty_marc,
wa_qmat TYPE ty_qmat,
wa_mapl TYPE ty_mapl,
wa_plko TYPE ty_plko,
wa_klah TYPE ty_klah,
wa_final TYPE ty_final.
DATA: v_mtart TYPE mara-mtart,
v_matnr TYPE mara-matnr,
v_zzbase_code TYPE mara-zzbase_code,
v_werks TYPE t001w-werks,
v_beskz TYPE marc-beskz.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_mtart FOR v_mtart DEFAULT 'halb' TO 'zraw',
s_matnr FOR v_matnr,
s_zzbase FOR v_zzbase_code,
s_werks FOR v_werks OBLIGATORY,
s_beskz FOR v_beskz.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
SELECT matnr
zzbase_code
FROM mara
INTO TABLE i_mara
WHERE mtart IN s_mtart "Material Type
AND matnr IN s_matnr. "Material
AND zzbase_code IN s_zzbase."Base Code
IF NOT i_mara[] IS INITIAL.
SELECT matnr
maktx
FROM makt
INTO TABLE i_makt
FOR ALL ENTRIES IN i_mara
WHERE matnr EQ i_mara-matnr
AND spras EQ sy-langu.
SELECT matnr
werks
FROM marc
INTO TABLE i_marc
FOR ALL ENTRIES IN i_mara
WHERE matnr EQ i_mara-matnr
AND werks IN s_werks "plant
AND beskz IN s_beskz."Procurement Type
IF sy-subrc EQ 0.
SELECT art
matnr
werks
FROM qmat
INTO TABLE i_qmat
FOR ALL ENTRIES IN i_marc
WHERE matnr EQ i_marc-matnr
AND werks EQ i_marc-werks.
SELECT matnr
werks
plnty
plnnr
plnal
zkriz
zaehl
FROM mapl
INTO TABLE i_mapl
FOR ALL ENTRIES IN i_marc
WHERE matnr EQ i_marc-matnr
AND werks EQ i_marc-werks.
IF NOT i_mapl[] IS INITIAL.
i_mapl_tmp[] = i_mapl[].
SORT i_mapl_tmp BY plnty
plnnr
plnal.
DELETE ADJACENT DUPLICATES FROM i_mapl_tmp
COMPARING
plnty
plnnr
plnal.
SELECT plnty
plnnr
plnal
zaehl
verwe
FROM plko
INTO TABLE i_plko
FOR ALL ENTRIES IN i_mapl_tmp
WHERE plnty EQ i_mapl_tmp-plnty
AND plnnr EQ i_mapl_tmp-plnnr
AND plnal EQ i_mapl_tmp-plnal.
ENDIF.
ENDIF.
ENDIF.
LOOP AT i_mara INTO wa_mara.
wa_final-matnr = wa_mara-matnr.
wa_final-zzbase_code = wa_mara-zzbase_code.
READ TABLE i_makt INTO wa_makt
WITH KEY matnr = wa_mara-matnr
TRANSPORTING
maktx.
IF sy-subrc EQ 0.
wa_final-maktx = wa_makt-maktx.
ENDIF.
REFRESH i_final.
LOOP AT i_marc INTO wa_marc
WHERE matnr EQ wa_mara-matnr.
CLEAR wa_klah-class.
CALL FUNCTION 'CLFC_BATCH_ALLOCATION_TO_CLASS'
EXPORTING
material = wa_mara-matnr
plant = wa_marc-werks
classtype = '023'
IMPORTING
class = wa_klah-class
EXCEPTIONS
wrong_function_call = 1
no_class_found = 2
no_classtype_found = 3
OTHERS = 4.
IF sy-subrc EQ 0.
wa_final-class = wa_klah-class.
ENDIF.
READ TABLE i_qmat
WITH KEY matnr = wa_mara-matnr
werks = wa_marc-werks
TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
LOOP AT i_qmat INTO wa_qmat
WHERE matnr EQ wa_mara-matnr
AND werks EQ wa_marc-werks.
wa_final-art = wa_qmat-art.
READ TABLE i_mapl
WITH KEY matnr = wa_marc-matnr
werks = wa_marc-werks
TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
LOOP AT i_mapl INTO wa_mapl
WHERE matnr EQ wa_marc-matnr
AND werks EQ wa_marc-werks.
LOOP AT i_plko INTO wa_plko
WHERE plnty EQ wa_mapl-plnty
AND plnnr EQ wa_mapl-plnnr
AND plnal EQ wa_mapl-plnal.
wa_final-verwe = wa_plko-verwe.
APPEND wa_final TO i_final.
ENDLOOP.
ENDLOOP.
ELSE.
APPEND wa_final TO i_final.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT i_mapl INTO wa_mapl
WHERE matnr EQ wa_marc-matnr
AND werks EQ wa_marc-werks.
LOOP AT i_plko INTO wa_plko
WHERE plnty EQ wa_mapl-plnty
AND plnnr EQ wa_mapl-plnnr
AND plnal EQ wa_mapl-plnal.
wa_final-verwe = wa_plko-verwe.
APPEND wa_final TO i_final.
ENDLOOP.
ENDLOOP.
ENDIF.
ENDLOOP.
CLEAR wa_final.
ENDLOOP.
LOOP AT i_final INTO wa_final.
WRITE:/ wa_final-matnr ,
wa_final-maktx ,
wa_final-zzbase_code,
wa_final-werks ,
wa_final-class ,
wa_final-art ,
wa_final-verwe .
ENDLOOP. -
Is there any way to create a circular buffer using the INSERT ARRAY function?
I saw the example using the REPLACE ARRAY function, but it uses too much CPU power on my laptop. I'm using it for a very sensitive application and saw that the INSERT ARRAY function used much less CPU power.
I am also not wiring the index on the INSERT ARRAY function so that whatever is read from the buffer is added to the array.
However, since it is not indexed, I don't know how to set the "write" index back to 0 when it reaches a certain sized array (ie 1000 elements). I was looking for an array property node, but couldn't figure out if one exists for the "current write index".
Can anyone help?
ThanksI will try to answer this question to my best understanding. I apologize if I interpreted the question wrong.
You are using the "Insert Array" vi without wiring the index. By doing that, new elements will be added (appended) to the array.
If you just want to know the current index to stop your acquisition when the array reach certain amount of elements, then you can use the "Array Size" vi to keep track of the size of the growing array. Remember that Array Size = last index + 1 because the index start at zero.
A second option is that you may want to start over the array when it hits the maximum number of elements that you will allow. If that's the case, then you may want to re-initialize the array to a NULL state by stablishing a condition (for example, when the
size of the array is 1000, re-initialize). I provided an example attached to this message showing how this can be accomplished. In the example, an 1D array grows in size using the "Insert Array" vi and inserting a random number. When the array reach 4 elements, it is re-initialized. You can expand this example by saving the array first to a file or some other holder before re-initializing the array. The example is in LabVIEW 6.
Finally, if you want to replace the current values with new values, I think you do not have other choice but to use the "Replace Array" vi.
Hope this can be of help.
Regards;
Enrique Vargas
www.vartortech.com
Attachments:
array_example.vi 20 KB -
Select query is taking lot of time to fetch data.....
Select query is taking lot of time to fetch data.
SELECT algnum atanum abdatu abzeit abname abenum bmatnr bmaktx bqdatu bqzeit bvlenr bnlenr bvltyp bvlber b~vlpla
bnltyp bnlber bnlpla bvsola b~vorga INTO TABLE it_final FROM ltak AS a
INNER JOIN ltap AS b ON btanum EQ atanum AND algnum EQ blgnum
WHERE a~lgnum = p_whno
AND a~tanum IN s_tono
AND a~bdatu IN s_tocd
AND a~bzeit IN s_bzeit
AND a~bname IN s_uname
AND a~betyp = 'P'
AND b~matnr IN s_mno
AND b~vorga <> 'ST'.
Moderator message: Please Read before Posting in the Performance and Tuning Forum
Edited by: Thomas Zloch on Mar 27, 2011 12:05 PMHi Shiva,
I am using two more select queries with the same manner ....
here are the other two select query :
***************1************************
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE tbl_summary
FROM ztftelpt LEFT JOIN ztfzberep
ON ztfzberep~gjahr = st_input-gjahr
AND ztfzberep~poper = st_input-poper
AND ztfzberepcntr = ztftelptrprctr
WHERE rldnr = c_telstra_projects
AND rrcty = c_actual
AND rvers = c_ver_001
AND rbukrs = st_input-bukrs
AND racct = st_input-saknr
AND ryear = st_input-gjahr
and rzzlstar in r_lstar
AND rpmax = c_max_period.
and the second one is
*************************2************************
SELECT * APPENDING CORRESPONDING FIELDS OF TABLE tbl_summary
FROM ztftelnt LEFT JOIN ztfzberep
ON ztfzberep~gjahr = st_input-gjahr
AND ztfzberep~poper = st_input-poper
AND ztfzberepcntr = ztftelntrprctr
WHERE rldnr = c_telstra_networks
AND rrcty = c_actual
AND rvers = c_ver_001
AND rbukrs = st_input-bukrs
AND racct = st_input-saknr
AND ryear = st_input-gjahr
and rzzlstar in r_lstar
AND rpmax = c_max_period.
for both the above table program is taking very less time .... although both the table used in above queries have similar amount of data. And i can not remove the APPENDING CORRESPONDING. because i have to append the data after fetching from the tables. if i will not use it will delete all the data fetched earlier.
Thanks on advanced......
Sourabh -
How to avoid Build Array function inside a For (while) Loop?
Hi there,
I have a simple question about how to avoid using Build Array function inside the loop. Now I want to remove the Build Array funtion inside the loop to improve the performance (To get better memory management). Any idea how to do that?
Thanks a lot!
Warmest regards,
ChongIt's been my experience that using the auto-indexing to build an array
on a For loop is just as good as initializing and replacing elements.
The For loop knows before it runs how many iterations it has to run and
can allocate the array ahead of time.
You're better off initializing and replacing when using a While loop
because it does not know how many iterations it will run and can't
pre-allocate the array ahead of time.
Ed
Ed Dickens - Certified LabVIEW Architect - DISTek Integration, Inc. - NI Certified Alliance Partner
Using the Abort button to stop your VI is like using a tree to stop your car. It works, but there may be consequences. -
LINEST function using Numbers for Mac
Thank you for your help. This page is somewhat helpful, but I still don't quite understand. I am using the Numbers program, and my assignment calls for me to use the LINEST function to return a set of 10 values.
When I googled how to do this, a lot of pages mentioned hitting "command+enter" to complete the array function, but they were using an older version of Numbers and it doesn't do anything when I try it in the new version. I tried using "Index" with LINEST, and i've managed to get about 5 values out of it. -
Extractor taking lots of time.
hi experts,
we are using extractor 2LIS_13_VDKON to extract the data.
but its taking lots of time.how can i solve this problem.
any help appreciated.Hi,
Have you done any enhancements(Append) to this DS.If so, make sure that code is performance optimistic.
Basically the setup table for 2LIS_13_VDKON will has the lot of data. For example, it holds at n avarage 10 records for each billing item record.
So also check system is uploading records to the New table of ODS or not.
With rgds,
Anil Kumar Sharma .P -
Web-I Report taking lots of time to refresh when filters changed
In BO XI 3.1 Web-I report is taking lot of time to refresh when any changes are made in edit query mode on the filters.
When the query is runned for the first time it runs well, but if we make any changes in the filters pane, it is taking lots of time to refresh, and when we cancel the query web-i server is not releasing the server resources (CPU, Memory)
Did anyone face this kind of a problem, and resolved it.
Please let me know your thoughts
Thank youHi,
why do you need 100K rows in your reports? Is there a way to consolidate/aggregate your data on the database?
Comparing sqlplus and BOBJ is a little bit unfair. Let me explain you why:
sqlplus starts displaying data after the query returns the first results. I am sure that if you measure the time that sqlplus needs to display ALL rows, this should be way more than just 10 secs.
On the other hand BOBJ will display something as soon as the first page can be created. Depending on the way your report is structured, it may be the case that the WebI server should first get ALL rows in order to be able to display the first page of your report. This is for example the case if you let the total number of pages being displayed or if you display total sums already at the header of your report or if you have added a chart based on your data also in the header of your report. Of course, after the first call the report will be cached (and thus fast to be displayed) until you change again the parameters values for your query.
Since you do not display (or do you use this function in a variable or a formula, maybe?) the total number of pages in your report, I can only assume that you either trying to display total sums (or other kinds of aggregated values) or a chart in the first page of your report. Can you confirm this?
Regards,
Stratos -
CIN packages - Import taking lot of time
Hi,
We are on SAP 46C, CIN 40A. While i am trying to import CIN suport package 10 in my server, the system is taking lot of time. I have updated my SPAM to the latest version. As of now, the import has taken more than 4 hours. What will be the usual time for the CIN support package import. Is there any way to speed up the process. Please advise at the earliest.
Thanx,
subbuCheck
Note 532596 - FAQ: Country Version India (CIN)- Installation and SPs
. How long does a CIN installation take ?
The time depends on the hardware that is available. If 4 processors and 2 GB RAM is allocated to that instance then it takes about 40 minutes. The maximum time is about 1.5 hrs .
Be also aware of the fact, that 40A is no more supporter after December 2006.
Markus -
Cascade two Build Array functions - what happens?
I found the the code shown in the attachment in a very complex VI that I am overhauling. Would someone explain to me what is happening with the "cascaded" Build Array functions.
I can see that the first Build Array function builds a 1D array of integers which passes to the second Build Array function which outputs a 2D array of integers but, since there is no Element or second Array input, I don't see how this works.
This is part of a subVI that is not embedded in a loop.
All the examples have at least two inputs. With one input there is no Concatenate Inputs option. There is some implicit operation here that I do not understand.
Would someone explain how this works?
Solved!
Go to Solution.
Attachments:
Cascade two build array functions.PNG 7 KBYou are taking a scalar value and creating a 1-D array with exactly 1 element.
Then you are taking the 1-D array and building it into a 2-D array, with exactly 1 element.
Since you can't concatenate something with nothing, the only logical mode for the Build Array would be to build it into an array of the next larger dimension.
You could add a third one, then you'd have a 3-D array with exactly 1 element. And so on. -
Background job is taking lot of time for processing the job.
One background job - which is processing Idocs is processing a job for more than 2000+ seconds.. and completed tho.
But this is happening for the past few days.. is there any way to trouble shoot, or find from any logs of this completed job, to find out why it was taking lot of time for processing.
Can you please tell me the steps of analyzing / trouble shooting why it was taking lot of time daily.
Regards,
Satish.Hi Satish,
Run DB stat from db13 it will improve the performance.
Check number of idocs. You can send part by part, instead of sending huge data.
Check SM58 logs
Suman -
In Shared services, Log Files taking lot of Disk space
Hi Techies,
I have a question. Its like the Logs in BI+ in Shared Service Server is taking lot of Disk space about 12 GB a day.
Following files are taking more space
Shared Service-Security-Client log ( 50 MB )
Server-message-usage Service.log ( About 7.5 GB )
why this is happening. Any suggestions to avoid this.
Thanks in Advance,
SonuHi Techies,
I have a question. Its like the Logs in BI+ in Shared Service Server is taking lot of Disk space about 12 GB a day.
Following files are taking more space
Shared Service-Security-Client log ( 50 MB )
Server-message-usage Service.log ( About 7.5 GB )
why this is happening. Any suggestions to avoid this.
Thanks in Advance,
Sonu -
How to change the elements number in Number To Boolean Array Function VI
Hi, I'm working on using the DAQ digital output to control the digital input of a DAC, and I used the Number To Boolean Array Function. VI to convert the number to a Boolean array. The maximum number should be 4096, therefore it should consist of 12 elements.
For the description of the VI, it says Boolean array returns an array of 8, 16, 32, or 64 elements, depending on the number of bits in the integer. Therefore, I change the number of the channels in task to 16, but it still doesn't work. Any suggesitions are greatly appreciated.
Thanks!
Possible reason(s):
Write cannot be performed, because the number of channels in the data does not match the number of channels in the task.
When writing, supply data for all channels in the task. Alternatively, modify the task to contain the same number of channels as the data written.
Number of Channels in Task: 12
Number of Channels in Data: 32
Task Name: _unnamedTask<1B>
Solved!
Go to Solution.
Attachments:
DAC test.vi 47 KBOnce you have the boolean array, you can resize it using array tools. For example you can use "reshape array" with a lenght of 12 to trim the array to 12 booleans elements (you can also use array subset).
LabVIEW Champion . Do more with less code and in less time .
Maybe you are looking for
-
Do I need a clean Arch install to change DE or WM?
Hey all, I'm new to Arch... well, I will be new to Arch. Still currently using Fedora. One of the things I'm doing right now is taking some time to read the wiki and fully embracing "The Arch Way." Since I have the opportunity to build a system from
-
How do I remove (strip) the RFH2 header from a message?
Hi, MQSeries version 5.2.1 with client version 5.2.2 I have a Java program enqueues the messages to MQSeries and another Java program dequeues them and I need to remove the RFH2 header. How do I do this? I don't want to define TARGCLIENT(MQ). In anot
-
Is the iphone 5s 32gb enough space for me
Is the iphone 5s 32gb enough space for me
-
Purchased a flight stick that is not for Mac but PC How do I use this
I purchased a Hotas X flight stick to go with a software app Mac version of xPlane 10. I am more of windows user and now starting to transition over to the Mac for the graphics. In the middle of trying to set up the flight stick I realized it was m
-
Problem when Iam installing ias on Red Hat As 3.0
Hi, I am trying to install it, I run the OUI and then that mentions that there is no problem with the prerequisites. However, after only display wait and never show a window of the OUI. What can I do?