Catching the error from the function module
hi,
call function 'ZV_SALES_ORDER_CANCEL_TSPPRA'
exporting
salesdocument = l_order
customer = l_kunnr
importing
return = return
the return contains the error message.
how to display this error message in our program
Hi Sudarshan,
What is the type of return. Is it a BAPIRET.
Then just check for the MSGTYP and if it is E then show the error.
Regards,
Atish
Similar Messages
-
How to catch exception thrown from a function module?
Hi all,
When we are calling a function module from JSPDynpage setting some import parameters, If in some case an exception is thrown in the function module. How can we catch the same exception in the JSPDynpage program?
Thanks & Regards,
RaviHi Ravi
Try this
try
Object retMsgs = output.get(bapiretrunmsgobject);
if(result != null )
IrecordSet rmsg = (IrecordSet) result
catch(Exception ex)
printException(ex, "Error getting function result");
Lemme know for any further questions.
Regards
Praveen -
Errors in Update Function Modules
Hi Gurus,
Please provide me the ways to handle Errors in Update Function Modules.
(I.e. I should export errors from Update Function Module)
Warm Regards,Use Raise statement ...
FUNCTION-POOL CSTR.
FUNCTION STRING_SPLIT.
IF STRING NA DELIMITER.
RAISE NOT_FOUND.
ENDIF.
ENDFUNCTION.
Regards,
Santosh -
Error while using the function module GUI_UPLOAD
Hi,
My requirement is to upload the data from .txt file into internal table.
I have given my code like this
PARAMETERS: p_fname LIKE rlgrap-filename.
data: begin of gt_string occurs 0,
record type char255,
end of gt_string.
AT SELECTION-SCREEN ON VALUE-REQUEST for p_fname.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = SYST-REPID
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
STATIC = 'X'
MASK = ' '
CHANGING
file_name = p_fname
EXCEPTIONS
MASK_TOO_LONG = 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.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_fname
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
CHECK_BOM = ' '
NO_AUTH_CHECK = ' '
IMPORTING
FILELENGTH =
HEADER =
tables
data_tab = gt_string
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Here I am getting dump error as 'Type conflict when calling a function module.
The function module interface allows you to specify only fields
of a particular type under "FILENAME". The field "P_FNAME" specified here has a different field type'.
What would be the reason for this error?
Can anyone help me?
Regards,
Hemasee this sample program for F4 help
*& Report ZSD_EXCEL_INT_APP
REPORT ZSD_EXCEL_INT_APP.
parameter: file_nm type localfile.
types : begin of it_tab1,
f1(20),
f2(40),
f3(20),
end of it_tab1.
data : it_tab type table of ALSMEX_TABLINE with header line,
file type rlgrap-filename.
data : it_tab2 type it_tab1 occurs 1,
wa_tab2 type it_tab1,
w_message(100) TYPE c.
at selection-screen on value-request for file_nm.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = SYST-REPID
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
STATIC = 'X'
MASK = ' '
CHANGING
file_name = file_nm
EXCEPTIONS
MASK_TOO_LONG = 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.
start-of-selection.
refresh it_tab2[].clear wa_tab2.
file = file_nm.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = file
i_begin_col = '1'
i_begin_row = '1'
i_end_col = '10'
i_end_row = '35'
tables
intern = it_tab
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
loop at it_tab.
case it_tab-col.
when '002'.
wa_tab2-f1 = it_tab-value.
when '004'.
wa_tab2-f2 = it_tab-value.
when '008'.
wa_tab2-f3 = it_tab-value.
endcase.
at end of row.
append wa_tab2 to it_tab2.
clear wa_tab2.
endat.
endloop.
data : p_file TYPE rlgrap-filename value 'TEST3.txt'.
OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
*--- Display error messages if any.
IF sy-subrc NE 0.
MESSAGE e001(zsd_mes).
EXIT.
ELSE.
*---Data is downloaded to the application server file path
LOOP AT it_tab2 INTO wa_tab2.
TRANSFER wa_tab2 TO p_file.
ENDLOOP.
ENDIF.
*--Close the Application server file (Mandatory).
CLOSE DATASET p_file.
loop at it_tab2 into wa_tab2.
write : / wa_tab2-f1,wa_tab2-f2,wa_tab2-f3.
endloop. -
Getting error in the function module
Hi everybody.
I have created one function module in se37 and i am calling that function module in the se38 report, when i am executing the report it is throwing me an error.
here in my report i am having the select option fields ex matnr, in the function module importing i have given the parameter matnr over there and when i am running the report it is through an error that
"The function module interface allows you to specify only
fields of a particular type under "MATNR".
The field "S_MATNR" specified here is a different
field type "
IF i am giving the parameter instead of select-options in the report and executing, then the function module is getting triggered and receiving the data what ever the code is available in the source code.
can anyone help me out in this issue so that i can get the data while using the select-option instead of parameter.
Thanks in advanceHi,
Actually, I wouldn't recommend the use of that tables parameter...
From sap help:
Table parameters are obsolete CHANGING parameters that are typed as standard tables with a header line. If an internal table without a header line or a table body is passed as an actual parameter to a formal parameter of this type, an empty local header line is generated in the function module. If an internal table with a header line is used as an actual parameter, both the table body and the header line are passed to the function module. Pass by value is not possible in formal parameters defined using TABLES. Formal parameters defined with TABLES can be replaced by formal parameters defined with CHANGING. A local work area can be created for the internal table in the function module by using the addition LIKE LINE OF itab of the DATA statement.
Exceptions
So i definitely would go with either importing or changing parameter...
Cheers,
m. -
Regarding the function module --error is coming.
Hi All
I am executing function module and i am getting one error after actvating that FM.
Error is - REPORT/PROGRAM statement missing, or program type is I (INCLUDE).
Waiting for the fovarable reply.Hi,
While creating a FM you will be assigned to a Function Group, that Function Group is not active. If function group is not active then only you will be getting this error.
To over come this issue. Please do the below process.
Go to Se80--> Select Function Group from the drop down list --> Select the function group --> Right click on the Function group --> Select activate.
After above process is completed.
Test the Function Module.
Thanks,
Sriram Ponna. -
How to catch exception i defined in the function module
I defined the exception 'no_value_found' in the function module, now, the problem is how to catach it in the program calling it
Hi Atish
I have used sy-subrc to handle it in the program, howerver, it is still encounter runtime error:
Error message -
A RAISE statement in the program "SAPLZERC" raised the exception
condition "NO_OBJECT_INFO_FOUND".
Since the exception was not intercepted by a superior
program, processing was terminated.
Short description of exception condition:
No object information found
For detailed documentation of the exception condition, use
Transaction SE37 (Function Library). You can take the called
function module from the display of active calls.
Errors is at following position:----
39 ELSE.
>> RAISE NO_OBJECT_INFO_FOUND.
41 ENDIF. -
Error during generation of the function module..need help urgently
Hello everyone,
m trying to generate data source in BWDevelopment.
After mapping all the BW fields to Source Object elements I click on Generate DataSource(for UD Connect) so following error comes
'An error occurred in step 1 during generation of the function module'
RFC connection is fine, error free and extractor is also fine.
Where could be the problem?
Thanks & Regards,
PriyankaHello everybody,
my problem is solved.For the UDConnect, whatever DATA SOURCES you create gets registered in a FUNCTION MODULE which has a capacity of only 99 enties, so to increase it implement the SAP NOTE 876340 - UDC Error available on SERVICE MARKET PLACE.
This problem occurs with BW version 3.5 level 17 or below.
Regards,
Priyanka
Edited by: Priyanka Joshi on Jun 10, 2008 11:03 AM -
Error while executing the function module BAPI_RE_CN_CREATE
Dear All
I was using the the function module BAPI_RE_CN_CREATE. When I am trying to execute the function module I am getting the error message u201CBusiness transaction RECN doest existu201D. While inputting the parameters for the function module I have given RECN In the input field TRANS. Requesting you to please kindly suggest.
Regards.
VaraprasadHi Varaprasad,
please try the following.
1. Create a contract manually in the system
2. Use BAPI_RE_CN_GET_DETAIL to show how the fields and structures are filled.
3. Check and change the parameters for BAPI_RE_CN_CREATE accordingly.
Hope that helps.
Regards, Franz -
Error while activating the function module
hi,
am getting error while activating the function module i.e. program or report statement is missing.
thank you in advance
karthikhii vinu,
hi there....
make sure that the Processing type in Attributes tab is 'Normal function module'. Also chk the general data, it must be having some name in the Program Name and include name column.try checking the program names in se38, if the program is of type include or not. you can also chk by writting a program call the function module and test it
I hope this will solve the query. in my case, SAPLZ123 is the program name and LZ123U28 is the include name.
or
Its common prob with Function module.
Goto SE80->Give Function group name->Right click on it->Activate.
regards,
Shweta -
System_failure error with the function module HTTP_POST
Hi Friends,
While executing the function module "HTTP_POST" ,sometime we are getting the error "System_Failure" exception.
Can anyone tell what could be the reason for this exception,any configurations need to be done on SAP???
For this FM we are passing the RFC destination"SAPHTTPA" as one of the paratmeter and
The two import paramters we are passing to this FM are
URI :
http://10.74.40.31:8686/ArchiveBridge/?informaticaArchive&contRep=IA&sumFile=MYTA_SUMMARY_20090820063258.sum
Destintion : SAPHTTPA
Thanks all in advance.
Regards
DharmarajuHi,
Check if any proxy is maitained in the client by going into transaction
SICF-> Goto-> HTTP Client Proxy -> HTTP LOG TAB.
If there is anything maintained under Host name and port, if yes you need to specify the IP address while calling FM HTTP_POST
under PROXY as
192.168.0.1:8080 where first part is IP address & 2nd part(8080) is port.
Also test connection for SAPHTTPA under SM59 to see if its properly configured.
Regards,
Amit -
There seems to be an error in the function module OPEN_FORM obstructing the
Hi,
There seems to be an error in the function module OPEN_FORM obstructing the process.
Some vendors are not cabaple of usinf EDI and for some reason also not willing to use TTOOL solutions (example Hewlet Packard). In those cases the supplier still would like to get purchase order electronically via e-mail. Sending POu2019s via external mail (SMTP) is basically standard function in R/3 that has been possible since the version 4.5. It is not pre-configured, so (almost) all the required elements needs to be configured.
When we send the output message through ME9F t'code i facing the problem in the above FM.
Please help me how to solve this.
VijayGot you, the digital display for Cupertino and Frankfurt are wrong too.
Submit feedback:
http://www.apple.com/feedback/iphone.html -
Identify tables from where the function module extracts data for the ES
Hi All,
For the datasource, 0CRM_SALES_ORDER_I in the CRM system, we need to add a new field (in the table level). This datasource's extraction type is 'F1 - function module'. Is the extractor itself is this function module? If it is a sepeate FM, where can we find the function module name used for this datasource?
We need to identify the tables from where the fields in this datasource fetch data from. Where can we find this information?
To be specific, in the sales order in tcode crmd_order, if we goto conditions tab and create a new condition, in what table this will get stored?
Thank you in advance,
HariIgnore this thread! there is another thread I have created for the same problem.
I created only one; wonder how it became two!! -
Error while using the function module..pack_handling_unit_dlvry
Hi all...
while using the function module pack_handling_unit_dlvry,
we need to pass the handling unit number as per the functionality we require.
but the mandatory field for the function module is the handling unit number in the form of bar code..
so how to use this function module..
All the useful answers will be regarded..
Regards,
Saroja.Have you tried using BAPI BAPI_HU_CREATE. Also view Function Module Documentation on its usage.
-
Hi there,
I´m trying to launch NWCE 7.1 Webdynpro applications accessing ABAP function with no success.
The landscape consists of an SAP NWCE 7.1 EHP1 (Trial) and an SAP NW 2004s ABAP (Licensed). NW2004s is configured as Gateway and Message Server for the SLD. I can ping/test JCOs successfully and the SLD seems to work fine. RZ70 and SM59 show no errors in the "R3" side and both systems seem to be well-registered as Technical Systems.
I have done some simple examples in Developer Studio to ensure that the conection between both stacks is going well, but I have allways the same issue regardless using ARFC/ARFC2, new projects/old existing projects, etc.
When I test for first time the application, the following exception is thrown:
Caused by: com.sap.mw.jco.JCO$Exception: (104) RFC_ERROR_SYSTEM_FAILURE: The function module "DD_DTEL_GET" cannot be used for 'remote' calls.
at com.sap.mw.jco.MiddlewareJRfc.generateJCoException(MiddlewareJRfc.java:456)
at com.sap.mw.jco.MiddlewareJRfc$Client.execute(MiddlewareJRfc.java:1416)
at com.sap.mw.jco.JCO$Client.execute(JCO.java:4168)
at com.sap.mw.jco.JCO$Client.execute(JCO.java:3596)
at com.sap.mdi.jco6.Destination.execute(Destination.java:29)
... 136 more
If I refresh the page the last exception disappears and a new one is thrown:
#2# local/prjWD_Acceso_ABAP/FlightListApp#java.lang.NullPointerException
at com.sap.mdi.ddtypes.DDDataelement.getDescription(DDDataelement.java:305)
at com.sap.dictionary.types.mdi.util.TextServices.getDescription(TextServices.java:165)
at com.sap.dictionary.types.mdi.util.TextServices.getQuickInfo(TextServices.java:145)
at com.sap.dictionary.runtime.DdDataType$TextService.getQuickInfo(DdDataType.java:220)
at com.sap.tc.webdynpro.progmodel.context.DataAttributeInfo.getDisplayText(DataAttributeInfo.java:385)
at com.sap.tc.webdynpro.progmodel.context.DataAttributeInfo.getDisplayText(DataAttributeInfo.java:355)
at com.sap.tc.webdynpro.progmodel.context.MappedAttributeInfo.getDisplayText(MappedAttributeInfo.java:292)
at com.sap.tc.webdynpro.progmodel.view.ViewElement._getText(ViewElement.java:818)
at com.sap.tc.webdynpro.progmodel.view.UIElement.getTooltip(UIElement.java:515)
at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.InputFieldAdapter$OrdinaryField.getTooltip(InputFieldAdapter.java:8201)
at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.InputFieldAdapter$OrdinaryField.getParameter(InputFieldAdapter.java:7496)
at com.sap.tc.ls.renderer.ie6.LSInputFieldRenderer.render(LSInputFieldRenderer.java:160)
at com.sap.tc.webdynpro.clientimpl.html.renderer.lightspeed.base.LSRenderManager.render(LSRenderManager.java:152)
at com.sap.tc.webdynpro.clientimpl.html.client.RenderManager.render(RenderManager.java:519)
at com.sap.tc.webdynpro.clientimpl.html.renderer.lightspeed.base.LSRenderManager.render(LSRenderManager.java:130)
at com.sap.tc.ls.renderer.ie6.LSColumnLayoutRenderer.renderColumnLayoutCellFragment(LSColumnLayoutRenderer.java:1882)
at com.sap.tc.ls.renderer.ie6.LSColumnLayoutRenderer.renderColumnLayoutRowFragment(LSColumnLayoutRenderer.java:1715)
at com.sap.tc.ls.renderer.ie6.LSColumnLayoutRenderer.renderColumnLayoutFragment(LSColumnLayoutRenderer.java:1600)
Then, editing the application in Dev. Studio, if I delete tables and/or single fields binded to model context, the last exception doesn´t appear any more but the application enter in the catch section executing the BAPI call:
try
wdContext.currentBapi_Flight_Getlist_InputElement().modelObject().execute();
catch(Exception ex)
wdComponentAPI.getMessageManager().reportException("Execute error."+ex.toString()+ex.getMessage());
StackTraceElement errores[] = ex.getStackTrace();
String errorSTR = new String();
for (int i = 0; i < errores.length; i++){
errorSTR += errores<i>.toString() + "
wdComponentAPI.getMessageManager().reportException(errorSTR);
wdComponentAPI.getMessageManager().reportSuccess("After catch.");
// Resynchronise the data in the context with the data in the model
wdContext.nodeOutput().invalidate();
The first two exception seem to be related each other, and it is true that FM "DD_DTEL_GET" is not RFC enabled in R3. Should it be RFC enabled?
As far as I know, one of the JCO conectors is used for retrieving metadata, that is, data related to types, lenghts, etc. The FM "DD_DTEL_GET" is used for that kind of operations and the second exception is related to that aswell (com.sap.mdi.ddtypes.DDDataelement.getDescription).
I don´t know what else should I test in order to launch an RFC function from WDJ and the trial version is about to expire!
Does anyone know about any oss note or any other tips related to this issue, please?
I am going to test the conectivity via Visual Composer and see whether it´s possible :S
Let me know if you need anymore info about the situation.
Thanks a lot!Hi again,
The issue hasn´t been solved yet :(.
After applying Note 1244067 the function module has the RFC flag checked but the Null Pointer exception are still there.
java.lang.NullPointerException
at com.sap.mdi.ddtypes.DDDataelement.getReptext(DDDataelement.java:166)
at com.sap.dictionary.types.mdi.util.TextServices.getColumnLabel(TextServices.java:115)
at com.sap.dictionary.runtime.DdDataType$TextService.getColumnLabel(DdDataType.java:212)
at com.sap.tc.webdynpro.progmodel.context.DataAttributeInfo.getDisplayText(DataAttributeInfo.java:379)
at com.sap.tc.webdynpro.progmodel.context.DataAttributeInfo.getDisplayText(DataAttributeInfo.java:355)
at com.sap.tc.webdynpro.progmodel.view.ViewElement._getText(ViewElement.java:818)
at com.sap.tc.webdynpro.clientserver.uielib.standard.impl.Caption.getText(Caption.java:369)
at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.TableAdapter$HeaderCell.getHeaderText(TableAdapter.java:11441)
at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.TableAdapter$HeaderCell.getParameter(TableAdapter.java:11043)
at com.sap.tc.ls.renderer.ie6.LSSapTableHeaderCellRenderer.renderSapTableHeaderCellFragment_iteration(LSSapTableHeaderCellRenderer.java:2421)
at com.sap.tc.ls.renderer.ie6.LSSapTableRowRenderer.renderSapTableRowFragment(LSSapTableRowRenderer.java:223)
at com.sap.tc.ls.renderer.ie6.LSSapTableRowRenderer.render(LSSapTableRowRenderer.java:122)
at com.sap.tc.webdynpro.clientimpl.html.renderer.lightspeed.base.LSRenderManager.render(LSRenderManager.java:152)
at com.sap.tc.webdynpro.clientimpl.html.client.RenderManager.render(RenderManager.java:519)
at com.sap.tc.webdynpro.clientimpl.html.renderer.lightspeed.base.LSRenderManager.render(LSRenderManager.java:130)
at com.sap.tc.ls.renderer.ie6.LSSapTableDefaultBodyRenderer.renderSapTableDefaultBodyFragment(LSSapTableDefaultBodyRenderer.java:301)
at com.sap.tc.ls.renderer.ie6.LSSapTableDefaultBodyRenderer.render(LSSapTableDefaultBodyRenderer.java:119)
at com.sap.tc.webdynpro.clientimpl.html.renderer.lightspeed.base.LSRenderManager.render(LSRenderManager.java:152)
at com.sap.tc.webdynpro.clientimpl.html.client.RenderManager.render(RenderManager.java:519)
at com.sap.tc.webdynpro.clientimpl.html.renderer.lightspeed.base.LSRenderManager.render(LSRenderManager.java:130)
Language resources data in the webdynpro are: Current locale = "es", Default VM locale = "es_ES". The backend default language is "EN". Could this be a problem in order to retrieve descriptions or any other language dependent data?
Thank you
Vicente. -
Regarding the function modules
Hi anybody pls tell me
what are the scenarios for the creation of function module
can you give me the some examples
thanks in advance<b>Function Modules</b>
Function modules are procedures that are defined in function groups (special ABAP programs with type F) and can be called from any ABAP program. Function groups act as containers for function modules that logically belong together. You create function groups and function modules in the ABAP Workbench using the Function Builder.
Function modules allow you to encapsulate and reuse global functions in the R/3 System. They are stored in a central library. The R/3 System contains a wide range of predefined function modules that you can call from any ABAP program. Function modules also play an important role in database updates and in remote communications between R/3 Systems or between an R/3 System and a non-SAP system.
Unlike subroutines, you do not define function modules in the source code of your program. Instead, you use the Function Builder. The actual ABAP interface definition remains hidden from the programmer. You can define the input parameters of a function module as optional. You can also assign default values to them. Function modules also support exception handling. This allows you to catch certain errors while the function module is running. You can test function modules without having to include them in a program using the Function Builder.
The Function Builder also has a release process for function modules. This ensures that incompatible changes cannot be made to any function modules that have already been released. This applies particularly to the interface. Programs that use a released function module will not cease to work if the function module is changed
Maybe you are looking for
-
Would be great for Apple to reinstate the pdf as icon in mail - but using the right click menu. It seems to have gone - and as a basic user there seems to be no simple solution - I used the rich/plain text swap but it didn't work... Apple - we need y
-
New General Ledger - Real Time Integration CO-FI
Running Real Time Integration with Account Substitution. Works well when using a constant for RCL_ICCF-ACCOUNT. Does not work when calling an exit to substitue a value for the same field. Any clue ? Thx. Edited by: Alvaro Tejada Galindo on Feb 26, 20
-
Reporting scenario . Need extractor information
Hi We have some reporting requirement from client to get the correct vendor evaluation report. In addition with standard vendor score , Client is also interested to see below score and values ? Could you please help me , how can i extract below value
-
Promoted Result Banner Error: This content cannot be displayed in a frame
I created a query rule to promote a result on exact searches of my name among local SharePoint results. The promoted result is configured with the URL to my My Site blog. I have setup My Sites as a separate web application in the farm with a unique d
-
New to Numbers - best Tax organization?
Hi All, I am new to Numbers. I am self-employed and unfortunately terrible at organization! I very simply need to keep track of all my expenses throughout the year, including home office expenses, flights, meals, materials, etc. Most everything I do