├── .abapgit.xml ├── .gitignore ├── LICENSE ├── README.md ├── examples └── ODIN_simple.xlsx ├── img ├── ODIN_0.PNG ├── ODIN_1.PNG ├── ODIN_2.PNG ├── ODIN_3.PNG ├── ODIN_4.PNG ├── ODIN_5.PNG ├── ODIN_simple.png ├── ODIN_simple0.png ├── ODIN_simple2.png ├── ODIN_simple3.png ├── Screenshot.png ├── Screenshot_Multi.PNG └── ZODIN_ALIAS.PNG └── src ├── package.devc.xml ├── zcl_odin_acc.clas.abap ├── zcl_odin_acc.clas.xml ├── zcl_odin_posting.clas.abap ├── zcl_odin_posting.clas.xml ├── zcx_odin.clas.abap ├── zcx_odin.clas.xml ├── zif_odin_mapping.intf.abap ├── zif_odin_mapping.intf.xml ├── zif_odin_posting.intf.abap ├── zif_odin_posting.intf.xml ├── zodin.msag.xml ├── zodin.prog.abap ├── zodin.prog.xml ├── zodin.tran.xml ├── zodin_acc.enho.xml ├── zodin_alias.tabl.xml ├── zodin_alias_name.dtel.xml ├── zodin_extension.enhs.xml ├── zodin_extension.tabl.xml ├── zodin_external.tabl.xml ├── zodin_external_t.ttyp.xml ├── zodin_input_csv.tabl.xml ├── zodin_internal.tabl.xml ├── zodin_internal_t.ttyp.xml ├── zodin_key_value.tabl.xml ├── zodin_key_value_t.ttyp.xml ├── zodin_multifile.prog.abap ├── zodin_multifile.prog.xml └── zodin_strategy.dtel.xml /.abapgit.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | E 6 | /src/ 7 | PREFIX 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | img/ 2 | examples/ 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 71TECH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | :warning: The field name BUTXT for the document header text has recently been changed to the correct identifier BKTXT. If you still want to use BUTXT, use the alias table ZODIN_ALIAS. If you use this field in an extension, you have to adjust your coding (replace BUTXT with BKTXT). 2 | 3 | # Open Document Interface (ODIN) 4 | 5 | ODIN is a flexible, extensible, easy to use, multi-purpose import interface for *SAP FI documents*. See [wiki](https://github.com/71tech/ODIN/wiki) for screenshots and further documentation. 6 | 7 | It is suitable for postings as they can be entered in the dialog transaction fb01, such as incoming and outgoing invoices or G/L account postings. 8 | 9 | It accepts different input formats: 10 | 11 | - Excel 12 | - csv 13 | - REST/JSON (planned) 14 | - SOAP/XML (planned) 15 | 16 | and has a flexible record structure. 17 | 18 | It can be used as a dialog or batch application. In addition, e-mail input processing is planned. 19 | 20 | ## Key features 21 | 22 | - Can be used in frontend or as background job 23 | - Flexible dataset structure 24 | - Suitable for mass processing 25 | - Highly extensible with BAdI enhancements 26 | - Various input interfaces 27 | 28 | ## Prerequisites 29 | 30 | If Excel files are processed, [abap2xlsx](https://github.com/sapmentors/abap2xlsx) must be installed. For processing of csv files, abap2xlsx is not required and doesn't need to be installed. 31 | 32 | ABAP releases older than 7.40 will not work. Release 7.40 might be ok; however it has not been tested. Release 7.50 and later should be fine. S/4 releases should work as well, however test is missing. Feedback at that point is very welcome. 33 | 34 | ## Quick start 35 | Clone the ODIN repo using [abapGit](https://github.com/abapGit/abapGit), create package ZODIN (language = EN) first. In case of troubles with the installation open an issue. 36 | 37 | You can utilize this [simple Excel template](https://github.com/71tech/ODIN/blob/main/examples/ODIN_simple.xlsx) for your first postings. Of course, some IDs such as company code, g/l account or vendor number need to be adjusted to your environment. Go to transaction ZODIN, select the local file, hit "Execute" and an ALV Grid List with your posting data should appear. If the status says "READY" and everything looks fine hit "Post" and a FI document will be created. Double click on a row to jump to transaction fb03. 38 | 39 | The tool is also explained in [this video on youtube](https://www.youtube.com/watch?v=TOGsroiQpGY), mainly from the user’s point of view 40 | 41 | ## Authorization IMPORTANT 42 | ODIN uses BAPI BAPI_ACC_DOCUMENT_POST for posting. *Note that this FM doesn't perform any authority checks and therefore also ODIN comes without checking of authority for postings*. Custom authority checks can be implemented for instance in the extension BADI_ACC_DOCUMENT (see SAP note [1748416](https://launchpad.support.sap.com/#/notes/1748416) on this matter). 43 | 44 | Besides ODIN requires authorization for file handling, varying whether files are loaded from local client or server. We recommend checking with transaction stauthtrace (or st01) if necessary. 45 | 46 | Tolerance groups (transaction oba4) are not checked. 47 | 48 | ## Available fields 49 | Many common fields are available and alias names can be used, see [wiki](https://github.com/71tech/ODIN/wiki/Available-fields) for details. If something is missing you can open an issue or make a [contribution](#contribution). 50 | 51 | :warning: The field name BUTXT for the document header text has been changed to the correct identifier BKTXT. If you still want to use BUTXT, use the alias table ZODIN_ALIAS. 52 | 53 | ## Dataset structure 54 | 55 | At the moment the interface can process Excel and csv files, further input options are planned. 56 | 57 | For Excel and csv the following applies: 58 | 59 | - The first row must contain the column names as under [Available fields](#available-fields) (alias identifiers are not yet available, but planned) 60 | - The order of the columns is arbitrary 61 | - From row two on, the user data follows, which must be arranged in the same way as in the first row 62 | - One FI document line item corresponds to one row in the input data. Several rows are combined into one document via the COUNTER field 63 | - There is no separate line for header fields from table bkpf, such as BKTXT, instead they are to be repeated redundantly in each row 64 | 65 | ### Example (csv) 66 | ``` 67 | COUNTER;STRATEGY;BUKRS;BKTXT;XBLNR;BLDAT;BUDAT;BLART;SGTXT;LIFNR;KUNNR;HKONT;WRBTR_S;WRBTR_H;WAERS;MWSKZ;CUSTOM1 68 | 1;MY_OPTIONAL_STRATEGY;1234;Example for incoming invoice;INVOICE-001;26.03.2020;26.03.2020;KR;Text position;;;154200;119,00;;EUR;V2;Some custom value 69 | 1;MY_OPTIONAL_STRATEGY;1234;Example for incoming invoice;INVOICE-001;26.03.2020;26.03.2020;KR;Text position;802236;;;;119,00;EUR;V2;Some custom value 70 | 2;MY_OPTIONAL_STRATEGY;1234;Another example;INVOICE-002;27.03.2020;26.03.2020;KR;Text position;;;154200;;59,50;EUR;V2;Another custom value 71 | 2;MY_OPTIONAL_STRATEGY;1234;Another example;INVOICE-002;27.03.2020;26.03.2020;KR;Text position;;;154200;;59,50;EUR;V2;Another custom value 72 | 2;MY_OPTIONAL_STRATEGY;1234;Another example;INVOICE-002;27.03.2020;26.03.2020;KR;Text position;802236;;;119,00;;EUR;V2;Another custom value 73 | ``` 74 | ## Import program 75 | 76 | Use sa38 > ZODIN or Transaction ZODIN, see [wiki](https://github.com/71tech/ODIN/wiki/ZODIN). 77 | 78 | ## Server side processing of multiple files 79 | 80 | Use sa38 > ZODIN\_MULTIFILE, see [wiki](https://github.com/71tech/ODIN/wiki/ZODIN_MULTIFILE). 81 | 82 | ## BAdI reference (extensions) 83 | 84 | See [wiki](https://github.com/71tech/ODIN/wiki/BAdI-Reference-(Extensions)). 85 | 86 | ## Contribution 87 | 88 | Your [contribution](https://docs.abapgit.org/guide-contributing.html) is very welcome! 89 | 90 | Suggestions: REST/JSON Interface, SOAP/XML Interface, add fields, enable CPDs, Interface for DATEV format. 91 | 92 | ## Feedback 93 | 94 | Please open an issue for comments, suggestions, questions etc. 95 | 96 | ## Acknowledgements 97 | 98 | This project is kindly sponsored by 99 | 100 | P7S1 Media SE Logo 101 | 102 | -------------------------------------------------------------------------------- /examples/ODIN_simple.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/examples/ODIN_simple.xlsx -------------------------------------------------------------------------------- /img/ODIN_0.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_0.PNG -------------------------------------------------------------------------------- /img/ODIN_1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_1.PNG -------------------------------------------------------------------------------- /img/ODIN_2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_2.PNG -------------------------------------------------------------------------------- /img/ODIN_3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_3.PNG -------------------------------------------------------------------------------- /img/ODIN_4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_4.PNG -------------------------------------------------------------------------------- /img/ODIN_5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_5.PNG -------------------------------------------------------------------------------- /img/ODIN_simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_simple.png -------------------------------------------------------------------------------- /img/ODIN_simple0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_simple0.png -------------------------------------------------------------------------------- /img/ODIN_simple2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_simple2.png -------------------------------------------------------------------------------- /img/ODIN_simple3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ODIN_simple3.png -------------------------------------------------------------------------------- /img/Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/Screenshot.png -------------------------------------------------------------------------------- /img/Screenshot_Multi.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/Screenshot_Multi.PNG -------------------------------------------------------------------------------- /img/ZODIN_ALIAS.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/71tech/ODIN/c4047da6b5b8523aa96108cb849316d415725cfc/img/ZODIN_ALIAS.PNG -------------------------------------------------------------------------------- /src/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Open Document Interface 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/zcl_odin_acc.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ODIN_ACC definition 2 | public 3 | final 4 | create public . 5 | 6 | *"* public components of class ZCL_ODIN_ACC 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | interfaces IF_BADI_INTERFACE . 11 | interfaces IF_EX_ACC_DOCUMENT . 12 | protected section. 13 | *"* protected components of class ZCL_ODIN_ACC 14 | *"* do not include other source files here!!! 15 | private section. 16 | *"* private components of class ZCL_ODIN_ACC 17 | *"* do not include other source files here!!! 18 | ENDCLASS. 19 | 20 | 21 | 22 | CLASS ZCL_ODIN_ACC IMPLEMENTATION. 23 | 24 | 25 | METHOD if_ex_acc_document~change . 26 | 27 | DATA: wa_extension TYPE bapiparex, 28 | ext_value(960) TYPE c, 29 | wa_accit TYPE accit, 30 | l_ref TYPE REF TO data, 31 | l_rcl_abap_structdescr TYPE REF TO cl_abap_structdescr. 32 | 33 | FIELD-SYMBOLS: TYPE any, 34 | TYPE any. 35 | 36 | LOOP AT c_extension2 INTO wa_extension 37 | WHERE structure = zcl_odin_posting=>odin_extension_structure. 38 | CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2 39 | wa_extension-valuepart3 wa_extension-valuepart4 40 | INTO ext_value. 41 | CLEAR l_ref. 42 | CREATE DATA l_ref TYPE (wa_extension-structure). 43 | ASSIGN l_ref->* TO . 44 | MOVE ext_value TO . 45 | ASSIGN COMPONENT 'POSNR' OF STRUCTURE TO . 46 | READ TABLE c_accit WITH KEY posnr = INTO wa_accit. 47 | IF sy-subrc IS INITIAL. 48 | DATA(tabix) = sy-tabix. 49 | * MOVE-CORRESPONDING TO wa_accit. "No simple MOVE-CORRESPONDING - ignore initials! 50 | l_rcl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data( ). 51 | LOOP AT l_rcl_abap_structdescr->components ASSIGNING FIELD-SYMBOL(). 52 | ASSIGN COMPONENT -name OF STRUCTURE wa_accit TO FIELD-SYMBOL(). 53 | IF sy-subrc = 0. 54 | ASSIGN COMPONENT -name OF STRUCTURE TO FIELD-SYMBOL(). 55 | ASSERT sy-subrc = 0. 56 | IF IS NOT INITIAL. 57 | = . 58 | ENDIF. 59 | ENDIF. 60 | ENDLOOP. 61 | MODIFY c_accit FROM wa_accit INDEX tabix. 62 | ENDIF. 63 | ENDLOOP. 64 | 65 | ENDMETHOD. "IF_EX_ACC_DOCUMENT~CHANGE 66 | 67 | 68 | method IF_EX_ACC_DOCUMENT~FILL_ACCIT. 69 | endmethod. 70 | ENDCLASS. 71 | -------------------------------------------------------------------------------- /src/zcl_odin_acc.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ODIN_ACC 7 | E 8 | Example Implementation for BAdI Definition ACC_DOCUMENT 9 | 1 10 | X 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/zcl_odin_posting.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCL_ODIN_POSTING definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | types: 8 | type_component_tab TYPE TABLE OF string . 9 | 10 | data POSTED type ABAP_BOOL read-only . 11 | data PATH_LOCAL type LOCALFILE read-only . 12 | data STRATEGY type STRING read-only . 13 | data EXTERNAL type ZODIN_EXTERNAL_T read-only . 14 | data INTERNAL type ZODIN_INTERNAL_T read-only . 15 | data ALV type ref to CL_SALV_TABLE read-only . 16 | data SIMULATION type ABAP_BOOL read-only . 17 | data ACTIVE_COMPONENTS type TYPE_COMPONENT_TAB read-only . 18 | constants: 19 | BEGIN OF state, 20 | "For now let's not use unicode symbols with respect to non-unicode systems 21 | * ok VALUE '✓', 22 | * ready VALUE '❓', 23 | * error VALUE '✗', 24 | ok TYPE string VALUE 'OK', 25 | ready TYPE string VALUE 'READY', 26 | error TYPE string VALUE 'ERROR', 27 | unknown TYPE string VALUE 'UNKNOWN', 28 | END OF state . 29 | data HEX_FILE type XSTRING read-only . 30 | constants ABAP2XLSX type STRING value 'abap2xlsx' ##NO_TEXT. 31 | constants CSV type STRING value 'csv' ##NO_TEXT. 32 | data INPUT_MODE type STRING read-only . 33 | data CSV_SEPARATOR type CHAR1 read-only . 34 | data CSV_DELIMITER type CHAR1 read-only . 35 | data CSV_DECIMAL_SEPARATOR type CHAR1 read-only . 36 | data CSV_THOUSANDS_SEPARATOR type CHAR1 read-only . 37 | data PATH_SERVER type STRING read-only . 38 | data PATH_SERVER_BACKUP type STRING read-only . 39 | constants ODIN_EXTENSION_STRUCTURE type STRING value 'ZODIN_EXTENSION' ##NO_TEXT. 40 | 41 | methods ON_USER_COMMAND 42 | for event ADDED_FUNCTION of CL_SALV_EVENTS_TABLE 43 | importing 44 | !E_SALV_FUNCTION . 45 | class-methods HAS_DATE_TYPE 46 | importing 47 | !EXTERNAL type ANY 48 | returning 49 | value(RESULT) type ABAP_BOOL . 50 | methods ON_DOUBLE_CLICK 51 | for event DOUBLE_CLICK of CL_SALV_EVENTS_TABLE 52 | importing 53 | !ROW 54 | !COLUMN . 55 | class-methods HAS_NUMERIC_TYPE 56 | importing 57 | value(INPUT) type ANY 58 | returning 59 | value(RESULT) type ABAP_BOOL . 60 | class-methods TO_KEY_VALUE 61 | importing 62 | value(T_EXTERNAL) type ZODIN_EXTERNAL_T 63 | exporting 64 | value(T_KEY_VALUE) type ZODIN_KEY_VALUE_T . 65 | methods CONSTRUCTOR 66 | importing 67 | value(PATH_LOCAL) type LOCALFILE optional 68 | value(SIMULATION) type ABAP_BOOL default 'X' 69 | value(DATA_STRING) type STRING optional 70 | value(DATA_TYPE) type STRING optional 71 | value(HEX_FILE) type XSTRING optional 72 | value(CSV_SEPARATOR) type CHAR1 default ';' 73 | value(CSV_DELIMITER) type CHAR1 default '"' 74 | value(CSV_DECIMAL_SEPARATOR) type CHAR1 default ',' 75 | value(CSV_THOUSANDS_SEPARATOR) type CHAR1 default '.' 76 | value(PATH_SERVER) type STRING optional 77 | value(PATH_SERVER_BACKUP) type STRING optional 78 | value(SKIP_ROWS) type INT4 optional 79 | raising 80 | ZCX_ODIN . 81 | methods DISPLAY 82 | importing 83 | !REPORT type SYREPID 84 | !PFSTATUS type SYPFKEY . 85 | methods POST 86 | raising 87 | ZCX_ODIN . 88 | methods SET_SIMULATION 89 | importing 90 | !SIMULATION type ABAP_BOOL . 91 | protected section. 92 | 93 | methods POST_DOCUMENT 94 | importing 95 | value(DOCUMENT) type ZODIN_INTERNAL_T 96 | exporting 97 | value(BELNR) type BELNR_D 98 | value(BUKRS) type BUKRS_D 99 | value(GJAHR) type GJAHR 100 | value(OBJ_KEY) type BAPIACHE09-OBJ_KEY 101 | raising 102 | ZCX_ODIN . 103 | methods LOAD 104 | importing 105 | value(SKIP_ROWS) type INT4 optional 106 | raising 107 | ZCX_ODIN . 108 | methods MAP 109 | raising 110 | ZCX_ODIN . 111 | methods DISPLAY_GUI 112 | importing 113 | value(REPORT) type SYREPID 114 | value(PFSTATUS) type SYPFKEY 115 | raising 116 | CX_SALV_MSG 117 | CX_SALV_NOT_FOUND 118 | CX_SALV_WRONG_CALL . 119 | methods DISPLAY_BATCH . 120 | private section. 121 | ENDCLASS. 122 | 123 | 124 | 125 | CLASS ZCL_ODIN_POSTING IMPLEMENTATION. 126 | 127 | 128 | METHOD constructor. 129 | me->path_local = path_local. 130 | me->simulation = simulation. 131 | me->csv_separator = csv_separator. 132 | me->csv_delimiter = csv_delimiter. 133 | me->csv_decimal_separator = csv_decimal_separator. 134 | me->csv_thousands_separator = csv_thousands_separator. 135 | me->path_server = path_server. 136 | me->path_server_backup = path_server_backup. 137 | me->hex_file = hex_file. 138 | me->load( skip_rows = skip_rows ). 139 | me->map( ). 140 | ENDMETHOD. 141 | 142 | 143 | METHOD display. 144 | display_gui( report = report 145 | pfstatus = pfstatus ). 146 | IF sy-batch = abap_true. 147 | COMMIT WORK AND WAIT. 148 | ENDIF. 149 | ENDMETHOD. 150 | 151 | 152 | METHOD display_batch. 153 | DATA internal_s TYPE zodin_internal. 154 | DATA strdesc TYPE REF TO cl_abap_structdescr. 155 | DATA t_active_components TYPE TABLE OF sy-index. 156 | FIELD-SYMBOLS: TYPE any. 157 | LOOP AT me->internal INTO DATA(s_internal). 158 | DO. 159 | ASSIGN COMPONENT sy-index OF STRUCTURE s_internal TO . 160 | IF sy-subrc NE 0. 161 | EXIT. 162 | ENDIF. 163 | IF IS NOT INITIAL. 164 | READ TABLE t_active_components WITH KEY table_line = sy-index TRANSPORTING NO FIELDS. 165 | IF sy-subrc NE 0. 166 | APPEND sy-index TO t_active_components. 167 | ENDIF. 168 | ENDIF. 169 | ENDDO. 170 | ENDLOOP. 171 | SORT t_active_components BY table_line ASCENDING. 172 | strdesc ?= cl_abap_structdescr=>describe_by_data( internal_s ). 173 | DATA(comps) = strdesc->get_components( ). 174 | DATA output TYPE string. 175 | LOOP AT comps INTO DATA(comp). 176 | READ TABLE t_active_components WITH KEY table_line = sy-tabix TRANSPORTING NO FIELDS. 177 | IF sy-subrc IS INITIAL. 178 | output = output && '|' && comp-name. 179 | ENDIF. 180 | ENDLOOP. 181 | SHIFT output LEFT BY 1 PLACES. 182 | WRITE / output. 183 | LOOP AT me->internal INTO s_internal. 184 | CLEAR output. 185 | LOOP AT t_active_components INTO DATA(active_component). 186 | ASSIGN COMPONENT active_component OF STRUCTURE s_internal TO . 187 | output = output && '|' && . 188 | ENDLOOP. 189 | SHIFT output LEFT BY 1 PLACES. 190 | WRITE / output. 191 | ENDLOOP. 192 | ENDMETHOD. 193 | 194 | 195 | METHOD display_gui. 196 | DATA internal_s TYPE zodin_internal. 197 | cl_salv_table=>factory( 198 | * EXPORTING 199 | * list_display = if_salv_c_bool_sap=>false " ALV Displayed in List Mode 200 | * r_container = " Abstract Container for GUI Controls 201 | * container_name = 202 | IMPORTING 203 | r_salv_table = me->alv " Basis Class Simple ALV Tables 204 | CHANGING 205 | t_table = me->internal 206 | ). 207 | * CATCH cx_salv_msg. " ALV: General Error Class with Message 208 | DATA(cols) = alv->get_columns( ). 209 | DATA(col) = cols->get_column( 'COUNTER' ). 210 | col->set_short_text( 'Counter'(000) ). 211 | * CLEAR col. 212 | * col = cols->get_column( 'STRATEGY' ). 213 | * col->set_short_text( 'Strategy'(001) ). 214 | CLEAR col. 215 | col = cols->get_column( 'STATE' ). 216 | col->set_short_text( 'Status'(002) ). 217 | CLEAR col. 218 | col = cols->get_column( 'MSG' ). 219 | col->set_short_text( 'Message'(003) ). 220 | CLEAR col. 221 | col = cols->get_column( 'CUSTOM1' ). 222 | col->set_short_text( 'Custom1'(004) ). 223 | CLEAR col. 224 | col = cols->get_column( 'CUSTOM2' ). 225 | col->set_short_text( 'Custom2'(005) ). 226 | CLEAR col. 227 | col = cols->get_column( 'CUSTOM3' ). 228 | col->set_short_text( 'Custom3'(006) ). 229 | CLEAR col. 230 | col = cols->get_column( 'CUSTOM4' ). 231 | col->set_short_text( 'Custom4'(007) ). 232 | CLEAR col. 233 | col = cols->get_column( 'CUSTOM5' ). 234 | col->set_short_text( 'Custom5'(008) ). 235 | CLEAR col. 236 | col = cols->get_column( 'CUSTOM6' ). 237 | col->set_short_text( 'Custom6'(009) ). 238 | CLEAR col. 239 | col = cols->get_column( 'CUSTOM7' ). 240 | col->set_short_text( 'Custom7'(010) ). 241 | CLEAR col. 242 | col = cols->get_column( 'CUSTOM8' ). 243 | col->set_short_text( 'Custom8'(011) ). 244 | CLEAR col. 245 | col = cols->get_column( 'CUSTOM9' ). 246 | col->set_short_text( 'Custom9'(012) ). 247 | CLEAR col. 248 | col = cols->get_column( 'CUSTOM10' ). 249 | col->set_short_text( 'Custom10'(013) ). 250 | alv->set_screen_status( 251 | EXPORTING 252 | report = report 253 | pfstatus = pfstatus 254 | set_functions = alv->c_functions_all 255 | ). 256 | IF me->simulation = abap_false. 257 | DATA(functions) = alv->get_functions( ). 258 | TRY. 259 | functions->set_function( 260 | EXPORTING 261 | name = 'EXEC' 262 | boolean = abap_false 263 | ). 264 | CATCH cx_salv_not_found. 265 | MESSAGE s005(zodin) DISPLAY LIKE 'W'. 266 | ENDTRY. 267 | ENDIF. 268 | DATA(layout) = me->alv->get_layout( ). 269 | DATA key TYPE salv_s_layout_key. 270 | key-report = report. 271 | layout->set_key( key ). 272 | layout->set_save_restriction( 273 | value = if_salv_c_layout=>restrict_none 274 | ). 275 | APPEND 'STATE' TO active_components. 276 | APPEND 'MSG' TO active_components. 277 | APPEND 'BELNR' TO active_components. 278 | APPEND 'GJAHR' TO active_components. 279 | APPEND 'BUKRS' TO active_components. 280 | DATA columns_s LIKE LINE OF me->internal. 281 | DATA strdesc TYPE REF TO cl_abap_structdescr. 282 | strdesc ?= cl_abap_structdescr=>describe_by_data( columns_s ). 283 | DATA(all_components) = strdesc->get_components( ). 284 | FIELD-SYMBOLS TYPE any. 285 | DATA supplied TYPE abap_bool. 286 | LOOP AT all_components INTO DATA(component). 287 | CLEAR supplied. 288 | READ TABLE active_components WITH KEY table_line = component-name TRANSPORTING NO FIELDS. 289 | IF sy-subrc = 0. 290 | CONTINUE. 291 | ENDIF. 292 | LOOP AT me->internal INTO internal_s . 293 | ASSIGN COMPONENT component-name OF STRUCTURE internal_s TO . 294 | IF IS NOT INITIAL. 295 | supplied = abap_true. 296 | EXIT. 297 | ENDIF. 298 | ENDLOOP. 299 | IF supplied = abap_false. 300 | CLEAR col. 301 | col = cols->get_column( CONV #( component-name ) ). 302 | col->set_visible( abap_false ). 303 | ENDIF. 304 | ENDLOOP. 305 | DATA(event) = alv->get_event( ). 306 | SET HANDLER me->on_user_command FOR event. 307 | SET HANDLER me->on_double_click FOR event. 308 | cols->set_optimize( abap_true ). 309 | alv->display( ). 310 | ENDMETHOD. 311 | 312 | 313 | METHOD has_date_type. 314 | DATA(desc) = cl_abap_typedescr=>describe_by_data( external ). 315 | IF desc->type_kind = desc->typekind_date. 316 | result = abap_true. 317 | ENDIF. 318 | ENDMETHOD. 319 | 320 | 321 | METHOD has_numeric_type. 322 | DATA(desc) = cl_abap_typedescr=>describe_by_data( input ). 323 | CASE desc->type_kind. 324 | WHEN desc->typekind_decfloat 325 | OR desc->typekind_decfloat16 326 | OR desc->typekind_decfloat34 327 | OR desc->typekind_float 328 | OR desc->typekind_int 329 | OR desc->typekind_int1 330 | OR desc->typekind_int2 331 | OR desc->typekind_num 332 | OR desc->typekind_packed 333 | OR desc->typekind_numeric. 334 | result = abap_true. 335 | ENDCASE. 336 | ENDMETHOD. 337 | 338 | 339 | METHOD load. 340 | DATA path TYPE string. 341 | DATA string_t TYPE TABLE OF string. 342 | DATA string LIKE LINE OF string_t. 343 | DATA flag_server TYPE abap_bool. 344 | IF me->path_local IS NOT INITIAL. 345 | path = me->path_local. 346 | ELSEIF me->path_server IS NOT INITIAL. 347 | path = me->path_server. 348 | flag_server = abap_true. 349 | ENDIF. 350 | IF path IS NOT INITIAL. 351 | DATA(pos) = strlen( path ). 352 | pos = pos - 4. 353 | IF path+pos(4) CP '.xls'. 354 | input_mode = abap2xlsx. 355 | ELSEIF path+pos(4) CP '.csv'. 356 | input_mode = csv. 357 | ELSE. 358 | pos = pos - 1. 359 | IF path+pos(5) CP '.xlsx' OR path+pos(5) CP '.xlsm'. 360 | input_mode = abap2xlsx. 361 | ELSE. 362 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'File type not supported. Allowed extensions: .csv, .xls, .xlsx, .xlsm'. 363 | ENDIF. 364 | ENDIF. 365 | DATA xlsx_reader TYPE REF TO object. 366 | DATA ws TYPE REF TO object. 367 | DATA excel TYPE REF TO object. 368 | IF input_mode = abap2xlsx. 369 | TRY. 370 | "dynamic calls of abap2xlsx classes, because if component abap2xlsx is missing the project should nevertheless compile 371 | CREATE OBJECT xlsx_reader TYPE ('ZCL_EXCEL_READER_2007'). 372 | CATCH cx_root. 373 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'For an Excel upload abap2xlsx must be installed https://github.com/sapmentors/abap2xlsx'. 374 | ENDTRY. 375 | TRY. 376 | CALL METHOD xlsx_reader->('ZIF_EXCEL_READER~LOAD_FILE') EXPORTING i_filename = path i_from_applserver = flag_server RECEIVING r_excel = excel. 377 | CALL METHOD excel->('GET_ACTIVE_WORKSHEET') RECEIVING eo_worksheet = ws. 378 | CALL METHOD ws->('GET_TABLE') EXPORTING iv_skipped_rows = skip_rows IMPORTING et_table = external. 379 | CATCH zcx_excel INTO DATA(cx_excel). 380 | RAISE EXCEPTION TYPE zcx_odin EXPORTING previous = cx_excel text = cx_excel->if_message~get_text( ) . 381 | ENDTRY. 382 | ELSEIF input_mode = me->csv. 383 | cl_rsda_csv_converter=>create( 384 | EXPORTING 385 | i_delimiter = me->csv_delimiter 386 | i_separator = me->csv_separator 387 | RECEIVING 388 | r_r_conv = DATA(converter) 389 | ). 390 | IF flag_server = abap_false. 391 | cl_gui_frontend_services=>gui_upload( 392 | EXPORTING 393 | filename = path " Name der Datei 394 | * filetype = 'ASC' " Dateityp (Ascii, Binär) 395 | * has_field_separator = space " Spalten durch TAB getrennt bei ASCII Upload 396 | * header_length = 0 " Länge des Headers bei Binärdaten 397 | * read_by_line = 'X' " Die Datei wird zeilenweise in die interne Tabelle geschriebe 398 | * dat_mode = space " Zahl- und Datumsfelder werden im 'DAT' Format des ws_downloa 399 | * codepage = " Zeichenrepräsentation für Ausgabe 400 | * ignore_cerr = abap_true " Gibt an, ob Fehler bei der Zeichensatzkonvertierung ignorier 401 | * replacement = '#' " Ersatzzeichen für nicht-konvertierbare Zeichen. 402 | * virus_scan_profile = " Viren-Scan-Profil 403 | * IMPORTING 404 | * filelength = " Dateilänge 405 | * header = " Header der Datei bei binärem Upload 406 | CHANGING 407 | data_tab = string_t " Übergabetabelle für Datei-Inhalt 408 | * isscanperformed = space " File ist bereits gescannt 409 | EXCEPTIONS 410 | file_open_error = 1 " Datei nicht vorhanden, kann nicht geöffnet werde 411 | file_read_error = 2 " Fehler beim Lesen der Datei 412 | no_batch = 3 " Frontend-Funktion im Batch nicht ausführbar. 413 | gui_refuse_filetransfer = 4 " Falsches Frontend oder Fehler im Frontend 414 | invalid_type = 5 " Falscher Parameter FILETYPE 415 | no_authority = 6 " Keine Berechtigung für Upload 416 | unknown_error = 7 " Unbekannter Fehler 417 | bad_data_format = 8 " Daten in der Datei können nicht interpretiert werden. 418 | header_not_allowed = 9 " Header ist nicht zulässig. 419 | separator_not_allowed = 10 " Separator ist nicht zulässig. 420 | header_too_long = 11 " Die Headerinformation ist zur Zeit auf maximal 1023 Bytes be 421 | unknown_dp_error = 12 " Fehler beim Aufruf des Dataprovider 422 | access_denied = 13 " Zugriff auf Datei nicht erlaubt. 423 | dp_out_of_memory = 14 " Nicht genug Speicher im Dataprovider 424 | disk_full = 15 " Speichermedium ist voll. 425 | dp_timeout = 16 " Timeout des Dataproviders 426 | not_supported_by_gui = 17 " Nicht unterstützt von GUI 427 | error_no_gui = 18 " GUI nicht verfügbar 428 | OTHERS = 19 429 | ). 430 | IF sy-subrc <> 0. 431 | CASE sy-subrc. 432 | WHEN 1. 433 | DATA(text) = `file_open_error`. 434 | WHEN 2. 435 | text = `file_read_error`. 436 | WHEN 3. 437 | text = `no_batch`. 438 | WHEN 4. 439 | text = `gui_refuse_filetransfer`. 440 | WHEN 5. 441 | text = `invalid_type`. 442 | WHEN 6. 443 | text = `no_authority`. 444 | WHEN 7. 445 | text = `unknown_error`. 446 | WHEN 8. 447 | text = `bad_data_format`. 448 | WHEN 9. 449 | text = `header_not_allowed`. 450 | WHEN 10. 451 | text = `separator_not_allowed`. 452 | WHEN 11. 453 | text = `header_too_long`. 454 | WHEN 12. 455 | text = `unknown_dp_error`. 456 | WHEN 13. 457 | text = `access_denied`. 458 | WHEN 14. 459 | text = `dp_out_of_memory`. 460 | WHEN 15. 461 | text = `disk_full`. 462 | WHEN 16. 463 | text = `dp_timeout`. 464 | WHEN 17. 465 | text = `not_supported_by_gui`. 466 | WHEN 18. 467 | text = `error_no_gui`. 468 | WHEN 19. 469 | text = `other error`. 470 | ENDCASE. 471 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = `Upload error: ` && text. 472 | ENDIF. 473 | ELSE. 474 | OPEN DATASET path FOR INPUT IN TEXT MODE ENCODING DEFAULT. 475 | IF sy-subrc NE 0. 476 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = |Could not open file { path }|. 477 | ENDIF. 478 | DATA subrc LIKE sy-subrc. 479 | DATA byom(4) TYPE x. 480 | FIELD-SYMBOLS: TYPE c. 481 | WHILE subrc = 0. 482 | READ DATASET path INTO string. 483 | subrc = sy-subrc. 484 | REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN string WITH ''. 485 | REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN string WITH ''. 486 | REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN string WITH ''. 487 | byom = cl_abap_char_utilities=>byte_order_mark_little. 488 | ASSIGN byom TO CASTING. 489 | REPLACE ALL OCCURRENCES OF (1) IN string WITH ''. 490 | byom = cl_abap_char_utilities=>byte_order_mark_big. 491 | ASSIGN byom TO CASTING. 492 | REPLACE ALL OCCURRENCES OF (1) IN string WITH ''. 493 | byom = cl_abap_char_utilities=>byte_order_mark_utf8. 494 | ASSIGN byom TO CASTING. 495 | REPLACE ALL OCCURRENCES OF (1) IN string WITH ''. 496 | APPEND string TO string_t. 497 | ENDWHILE. 498 | CLOSE DATASET path. 499 | ENDIF. 500 | DATA external_s LIKE LINE OF external. 501 | DATA csv_input TYPE zodin_input_csv. 502 | LOOP AT string_t INTO string. 503 | CHECK sy-tabix GT skip_rows. 504 | CLEAR csv_input. 505 | converter->csv_to_structure( 506 | EXPORTING 507 | i_data = string " I_DATA 508 | IMPORTING 509 | e_s_data = csv_input " E_S_DATA 510 | ). 511 | IF csv_input IS NOT INITIAL. 512 | CLEAR external_s. 513 | MOVE-CORRESPONDING csv_input TO external_s. 514 | APPEND external_s TO external. 515 | ENDIF. 516 | ENDLOOP. 517 | ENDIF. 518 | ELSEIF me->hex_file IS NOT INITIAL. 519 | me->input_mode = abap2xlsx. "Only abap2xlsx supported for xstring for now 520 | TRY. 521 | "abap2xlsx calls dynamically, because if component abap2xlsx is missing the project should nevertheless compile 522 | CREATE OBJECT xlsx_reader TYPE ('ZCL_EXCEL_READER_2007'). 523 | CATCH cx_root. 524 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'For an Excel upload abap2xlsx must be installed https://github.com/sapmentors/abap2xlsx'. 525 | ENDTRY. 526 | TRY. 527 | CALL METHOD xlsx_reader->('ZIF_EXCEL_READER~LOAD') EXPORTING i_excel2007 = me->hex_file RECEIVING r_excel = excel. 528 | CALL METHOD excel->('GET_ACTIVE_WORKSHEET') RECEIVING eo_worksheet = ws. 529 | CALL METHOD ws->('GET_TABLE') IMPORTING et_table = external. 530 | CATCH zcx_excel INTO cx_excel. 531 | RAISE EXCEPTION TYPE zcx_odin EXPORTING previous = cx_excel text = cx_excel->if_message~get_text( ) . 532 | ENDTRY. 533 | ELSE. 534 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'File path or hex string must be supplied'. 535 | ENDIF. 536 | LOOP AT external INTO external_s. 537 | IF external_s IS INITIAL. 538 | DELETE external. 539 | ENDIF. 540 | ENDLOOP. 541 | ENDMETHOD. 542 | 543 | 544 | METHOD map. 545 | zcl_odin_posting=>to_key_value( 546 | EXPORTING 547 | t_external = me->external 548 | IMPORTING 549 | t_key_value = DATA(t_key_value) 550 | ). 551 | READ TABLE t_key_value INTO DATA(line) WITH KEY key = 'STRATEGY'. 552 | me->strategy = line-value. 553 | IF me->strategy IS NOT INITIAL. 554 | DATA mapping_badi TYPE REF TO zodin_mapping. 555 | GET BADI mapping_badi 556 | FILTERS 557 | strategy = me->strategy. 558 | CALL BADI mapping_badi->before 559 | CHANGING 560 | external = me->external. 561 | CLEAR t_key_value. 562 | zcl_odin_posting=>to_key_value( 563 | EXPORTING 564 | t_external = me->external 565 | IMPORTING 566 | t_key_value = t_key_value 567 | ). 568 | ENDIF. 569 | FIELD-SYMBOLS TYPE any. 570 | DATA s_internal TYPE zodin_internal. 571 | DATA state LIKE s_internal-state VALUE me->state-unknown. 572 | DATA msg LIKE s_internal-msg. 573 | DATA tmp_float TYPE f. 574 | DATA component TYPE string. 575 | LOOP AT t_key_value INTO line. 576 | CLEAR component. 577 | IF line-key IS NOT INITIAL. 578 | SELECT SINGLE field_name 579 | FROM zodin_alias 580 | INTO component 581 | WHERE alias_name = line-key 582 | AND strategy = me->strategy. 583 | IF sy-subrc IS NOT INITIAL. 584 | SELECT SINGLE field_name 585 | FROM zodin_alias 586 | INTO component 587 | WHERE alias_name = line-key 588 | AND strategy = ''. 589 | IF sy-subrc IS NOT INITIAL. 590 | component = line-key. 591 | ENDIF. 592 | ENDIF. 593 | ASSIGN COMPONENT component OF STRUCTURE s_internal TO . 594 | IF sy-subrc = 0. 595 | IF zcl_odin_posting=>has_numeric_type( ) = abap_true. 596 | TRY. 597 | IF me->input_mode = me->abap2xlsx. 598 | = line-value. 599 | ELSEIF me->input_mode = me->csv. 600 | REPLACE ALL OCCURRENCES OF me->csv_thousands_separator IN line-value WITH ''. 601 | IF me->csv_decimal_separator NE '.'. 602 | REPLACE ALL OCCURRENCES OF me->csv_decimal_separator IN line-value WITH '.'. 603 | ENDIF. 604 | = line-value. 605 | ENDIF. 606 | CATCH cx_root INTO DATA(cx_root). 607 | "Hack for exponential notation with conversion to float first 608 | TRY. 609 | CLEAR tmp_float. 610 | tmp_float = line-value. 611 | = tmp_float. 612 | CATCH cx_root INTO cx_root. 613 | state = me->state-error. 614 | msg = |Could not convert { line-value } into number: { cx_root->if_message~get_text( ) }|. 615 | ENDTRY. 616 | ENDTRY. 617 | ELSEIF zcl_odin_posting=>has_date_type( ) = abap_true. 618 | IF input_mode = me->abap2xlsx. 619 | TRY. 620 | IF line-value IS NOT INITIAL. 621 | CALL METHOD zcl_excel_common=>('EXCEL_STRING_TO_DATE') EXPORTING ip_value = line-value RECEIVING ep_value = . 622 | ENDIF. 623 | CATCH zcx_excel INTO DATA(cx_excel). 624 | CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL' 625 | EXPORTING 626 | date_external = line-value 627 | * ACCEPT_INITIAL_DATE = 628 | IMPORTING 629 | date_internal = 630 | EXCEPTIONS 631 | date_external_is_invalid = 1 632 | OTHERS = 2. 633 | IF sy-subrc <> 0. 634 | state = me->state-error. 635 | msg = |Could not convert { line-value } into date: { cx_excel->if_message~get_text( ) }|. 636 | ENDIF. 637 | ENDTRY. 638 | ELSE. 639 | CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL' 640 | EXPORTING 641 | date_external = line-value 642 | * ACCEPT_INITIAL_DATE = 643 | IMPORTING 644 | date_internal = 645 | EXCEPTIONS 646 | date_external_is_invalid = 1 647 | OTHERS = 2. 648 | IF sy-subrc <> 0. 649 | state = me->state-error. 650 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO msg. 651 | ENDIF. 652 | ENDIF. 653 | ELSE. 654 | = line-value. 655 | IF component = 'BUKRS' OR component = 'BWART' OR component = 'LIFNR' OR component = 'KUNNR' OR component = 'HKONT' OR component = 'AUFNR' 656 | OR component = 'KOSTL' OR component = 'VBEL2' OR component = 'EBELN' OR component = 'KUNNR_GL' OR component = 'LIFNR_GL' 657 | or component = 'ANLN1' or component = 'ANLN2'. 658 | CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 659 | EXPORTING 660 | input = 661 | IMPORTING 662 | output = . 663 | ENDIF. 664 | ENDIF. 665 | ENDIF. 666 | ENDIF. 667 | AT END OF line. 668 | s_internal-state = state. 669 | s_internal-msg = msg. 670 | APPEND s_internal TO me->internal. 671 | CLEAR: s_internal, msg. 672 | state = me->state-unknown. 673 | ENDAT. 674 | ENDLOOP. 675 | SORT me->internal BY counter ASCENDING. 676 | LOOP AT me->internal INTO s_internal 677 | WHERE counter IS INITIAL. 678 | DELETE me->internal. 679 | ENDLOOP. 680 | IF mapping_badi IS BOUND. 681 | CALL BADI mapping_badi->after 682 | EXPORTING 683 | external = external 684 | key_value = t_key_value 685 | CHANGING 686 | internal = me->internal. 687 | ENDIF. 688 | DATA error_counters LIKE TABLE OF s_internal-counter. 689 | LOOP AT me->internal INTO s_internal 690 | WHERE state = me->state-error. 691 | APPEND s_internal-counter TO error_counters. 692 | ENDLOOP. 693 | IF sy-subrc = 0. 694 | SORT error_counters ASCENDING. 695 | DELETE ADJACENT DUPLICATES FROM error_counters. 696 | CLEAR s_internal. 697 | s_internal-state = me->state-error. 698 | LOOP AT error_counters INTO DATA(error_counter). 699 | MODIFY me->internal FROM s_internal TRANSPORTING state WHERE counter = error_counter. 700 | ENDLOOP. 701 | ENDIF. 702 | ENDMETHOD. 703 | 704 | 705 | METHOD on_double_click. 706 | READ TABLE me->internal INDEX row INTO DATA(s_internal). 707 | IF s_internal-belnr IS NOT INITIAL. 708 | SET PARAMETER ID 'BLN' FIELD s_internal-belnr. 709 | SET PARAMETER ID 'BUK' FIELD s_internal-bukrs. 710 | SET PARAMETER ID 'GJR' FIELD s_internal-budat(4). 711 | CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. 712 | ENDIF. 713 | ENDMETHOD. 714 | 715 | 716 | METHOD on_user_command. 717 | IF e_salv_function EQ 'EXEC'. 718 | me->set_simulation( abap_false ). 719 | TRY. 720 | me->post( ). 721 | CATCH zcx_ODIN INTO DATA(cx_odin). 722 | CALL FUNCTION 'POPUP_TO_INFORM' 723 | EXPORTING 724 | titel = 'Error' 725 | txt1 = cx_odin->get_text( ) 726 | txt2 = ''. 727 | ENDTRY. 728 | DATA(cols) = me->alv->get_columns( ). 729 | cols->set_optimize( abap_true ). 730 | DATA(functions) = alv->get_functions( ). 731 | TRY. 732 | functions->set_function( 733 | EXPORTING 734 | name = 'EXEC' 735 | boolean = abap_false 736 | ). 737 | CATCH cx_salv_not_found. 738 | MESSAGE s005(zodin) DISPLAY LIKE 'W'. 739 | ENDTRY. 740 | me->alv->refresh( ). 741 | ENDIF. 742 | ENDMETHOD. 743 | 744 | 745 | METHOD post. 746 | IF me->posted = abap_true. 747 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'Posting allowed only once'. 748 | ENDIF. 749 | IF me->simulation = abap_false. 750 | me->posted = abap_true. 751 | ENDIF. 752 | READ TABLE me->internal WITH KEY state = me->state-error TRANSPORTING NO FIELDS. 753 | IF sy-subrc = 0. 754 | IF me->simulation = abap_false. 755 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'No posting/simulation is made. Please check for errors and re-read data'. 756 | ELSE. 757 | RETURN. 758 | ENDIF. 759 | ENDIF. 760 | 761 | DATA document LIKE me->internal. 762 | DATA posting_badi TYPE REF TO zodin_posting. 763 | DATA commited TYPE abap_bool. 764 | DATA commited_all TYPE abap_bool VALUE abap_true. 765 | DATA err_msg TYPE string. 766 | GET BADI posting_badi 767 | FILTERS 768 | strategy = me->strategy. 769 | LOOP AT me->internal INTO DATA(s_internal). 770 | APPEND s_internal TO document. 771 | AT END OF counter. 772 | CLEAR: commited, err_msg. 773 | DATA(counter) = s_internal-counter. 774 | 775 | TRY. 776 | me->post_document( EXPORTING document = document 777 | IMPORTING bukrs = DATA(bukrs) belnr = DATA(belnr) gjahr = DATA(gjahr) obj_key = DATA(obj_key) ). 778 | CATCH zcx_odin INTO DATA(cx_odin). 779 | err_msg = cx_odin->get_text( ). 780 | ENDTRY. 781 | 782 | IF posting_badi IS BOUND AND err_msg IS INITIAL. 783 | TRY. 784 | CALL BADI posting_badi->after_pre_commit 785 | EXPORTING 786 | obj_key = obj_key 787 | simulation = me->simulation 788 | path_local = me->path_local 789 | hex_file = me->hex_file 790 | path_server = me->path_server 791 | CHANGING 792 | document = document. 793 | CATCH zcx_odin INTO cx_odin. 794 | err_msg = cx_odin->get_text( ). 795 | ENDTRY. 796 | ENDIF. 797 | 798 | IF me->simulation IS INITIAL AND err_msg IS INITIAL. 799 | COMMIT WORK AND WAIT. 800 | IF sy-subrc NE 0. 801 | err_msg = 'Update failed'. 802 | ELSE. 803 | commited = abap_true. 804 | ENDIF. 805 | ELSE. 806 | ROLLBACK WORK. 807 | ENDIF. 808 | 809 | IF commited = abap_false. 810 | commited_all = abap_false. 811 | ENDIF. 812 | 813 | IF posting_badi IS BOUND AND me->simulation IS INITIAL AND err_msg IS INITIAL. 814 | TRY. 815 | CALL BADI posting_badi->after_post_commit 816 | EXPORTING 817 | obj_key = obj_key 818 | path_local = me->path_local 819 | hex_file = me->hex_file 820 | path_server = me->path_server 821 | CHANGING 822 | document = document. 823 | CATCH zcx_odin INTO cx_odin. 824 | err_msg = cx_odin->get_text( ). 825 | ENDTRY. 826 | ENDIF. 827 | 828 | LOOP AT me->internal INTO DATA(s_internal2) WHERE counter = counter. 829 | IF me->simulation = abap_false. 830 | s_internal2-belnr = belnr. 831 | s_internal2-bukrs = bukrs. 832 | s_internal2-gjahr = gjahr. 833 | IF err_msg IS INITIAL. 834 | s_internal2-state = me->state-ok. 835 | ELSE. 836 | s_internal2-state = me->state-error. 837 | s_internal2-msg = err_msg. 838 | ENDIF. 839 | ELSE. 840 | IF err_msg IS INITIAL. 841 | s_internal2-state = me->state-ready. 842 | ELSE. 843 | s_internal2-state = me->state-error. 844 | s_internal2-msg = err_msg. 845 | ENDIF. 846 | ENDIF. 847 | MODIFY me->internal FROM s_internal2. 848 | ENDLOOP. 849 | 850 | CLEAR document. 851 | ENDAT. 852 | ENDLOOP. 853 | 854 | IF commited_all = abap_true AND me->path_server_backup IS NOT INITIAL AND me->path_server IS NOT INITIAL. "Move file 855 | DATA file_content TYPE xstring. 856 | TRY. 857 | OPEN DATASET me->path_server FOR INPUT IN BINARY MODE. 858 | IF sy-subrc = 0. 859 | READ DATASET me->path_server INTO file_content. 860 | CLOSE DATASET me->path_server. 861 | DELETE DATASET me->path_server_backup. 862 | OPEN DATASET me->path_server_backup FOR OUTPUT IN BINARY MODE. 863 | IF sy-subrc = 0. 864 | TRANSFER file_content TO me->path_server_backup. 865 | CLOSE DATASET me->path_server_backup. 866 | DELETE DATASET me->path_server. 867 | ENDIF. 868 | ENDIF. 869 | CATCH cx_root. 870 | ENDTRY. 871 | ENDIF. 872 | ENDMETHOD. 873 | 874 | 875 | METHOD post_document. 876 | DATA: header TYPE bapiache09, 877 | customercpd TYPE bapiacpa09, 878 | glaccount TYPE TABLE OF bapiacgl09, 879 | s_glaccount TYPE bapiacgl09, 880 | vendor TYPE TABLE OF bapiacap09, 881 | s_vendor TYPE bapiacap09, 882 | customer TYPE TABLE OF bapiacar09, 883 | s_customer LIKE LINE OF customer, 884 | amount TYPE TABLE OF bapiaccr09, 885 | s_amount TYPE bapiaccr09, 886 | extension2 TYPE TABLE OF bapiparex, 887 | s_extension2 LIKE LINE OF extension2, 888 | odin_extension TYPE zodin_extension, 889 | wht TYPE TABLE OF bapiacwt09, 890 | bapiret TYPE TABLE OF bapiret2, 891 | s_bapiret TYPE bapiret2, 892 | itemno TYPE posnr_acc, 893 | bapitax TYPE TABLE OF bapiactx09, 894 | s_bapitax TYPE bapiactx09, 895 | wrbtr TYPE bseg-wrbtr, 896 | t_mwdat TYPE TABLE OF rtax1u15, 897 | tax TYPE bset-fwste, 898 | itemno_tax LIKE itemno VALUE 9999999999, 899 | segments TYPE i, 900 | msg TYPE string, 901 | ktopl TYPE t001-ktopl. 902 | 903 | FIELD-SYMBOLS TYPE any. 904 | 905 | LOOP AT document INTO DATA(s_document). 906 | 907 | CLEAR: s_glaccount, s_amount, s_vendor, wrbtr, t_mwdat, segments, tax, s_extension2, odin_extension. 908 | ADD 1 TO itemno. 909 | 910 | IF header IS INITIAL. 911 | header-pstng_date = s_document-budat. 912 | header-doc_date = s_document-bldat. 913 | header-doc_type = s_document-blart. 914 | header-comp_code = s_document-bukrs. 915 | header-ref_doc_no = s_document-xblnr. 916 | header-header_txt = s_document-bktxt. 917 | header-username = sy-uname. 918 | header-fisc_year = s_document-gjahr. 919 | header-fis_period = s_document-monat. 920 | IF s_document-doc_status IS NOT INITIAL. 921 | ASSIGN COMPONENT 'DOC_STATUS' OF STRUCTURE header TO . "Using field symbol for downwards compatibility (component doc_status might lack in older releases) 922 | IF sy-subrc = 0. 923 | = s_document-doc_status. 924 | * IF CA '23AB'. 925 | * header-bus_act = 'RFBV'. 926 | * ENDIF. 927 | ENDIF. 928 | ENDIF. 929 | header-bus_act = s_document-glvor. 930 | ENDIF. 931 | 932 | MOVE-CORRESPONDING s_document TO odin_extension. 933 | IF s_document-anln1 IS NOT INITIAL AND s_document-bewar IS NOT INITIAL. 934 | odin_extension-anbwa = s_document-bewar. 935 | ENDIF. 936 | IF odin_extension IS NOT INITIAL. 937 | odin_extension-posnr = itemno. 938 | s_extension2-structure = me->odin_extension_structure. 939 | s_extension2-valuepart1 = odin_extension. 940 | APPEND s_extension2 TO extension2. 941 | ENDIF. 942 | 943 | IF s_document-wrbtr_h IS NOT INITIAL. 944 | wrbtr = s_document-wrbtr_h * -1. 945 | ELSEIF s_document-wrbtr_s IS NOT INITIAL. 946 | wrbtr = s_document-wrbtr_s. 947 | ENDIF. 948 | 949 | IF s_document-hkont IS NOT INITIAL OR s_document-anln1 IS NOT INITIAL. 950 | ADD 1 TO segments. 951 | ENDIF. 952 | IF s_document-lifnr IS NOT INITIAL. 953 | ADD 1 TO segments. 954 | ENDIF. 955 | IF s_document-kunnr IS NOT INITIAL. 956 | ADD 1 TO segments. 957 | ENDIF. 958 | IF segments NE 1. 959 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = 'Please specify exactly one of the following fields: LIFNR, KUNNR, HKONT/ANLN1'. 960 | ENDIF. 961 | 962 | IF s_document-hkont IS NOT INITIAL OR s_document-anln1 IS NOT INITIAL. 963 | s_glaccount-itemno_acc = itemno. 964 | IF s_document-anln1 IS NOT INITIAL. 965 | s_glaccount-asset_no = s_document-anln1. "Note that anbwa has to be set in BADI_ACC_DOCUMENT for asset postings 966 | s_glaccount-acct_type = 'A'. "Asset 967 | IF s_document-anln2 IS INITIAL. 968 | s_document-anln2 = '0000'. 969 | ENDIF. 970 | s_glaccount-sub_number = s_document-anln2. 971 | IF s_document-hkont IS INITIAL. 972 | CALL FUNCTION 'FI_CHART_OF_ACCOUNT_DETERMINE' 973 | EXPORTING 974 | i_bukrs = s_document-bukrs 975 | IMPORTING 976 | e_ktopl = ktopl. 977 | SELECT SINGLE ktogr FROM anla INTO @DATA(ktogr) 978 | WHERE bukrs = @s_document-bukrs 979 | AND anln1 = @s_document-anln1 980 | AND anln2 = @s_document-anln2. 981 | IF sy-subrc = 0. 982 | SELECT SINGLE ktansw FROM t095 INTO s_document-hkont 983 | WHERE ktopl = ktopl 984 | AND ktogr = ktogr 985 | AND afabe = '01'. 986 | ENDIF. 987 | ENDIF. 988 | ENDIF. 989 | s_glaccount-gl_account = s_document-hkont. 990 | s_glaccount-orderid = s_document-aufnr. 991 | s_glaccount-item_text = s_document-sgtxt. 992 | s_glaccount-tax_code = s_document-mwskz. 993 | s_glaccount-alloc_nmbr = s_document-budat. 994 | s_glaccount-ref_key_1 = s_document-xref1. 995 | s_glaccount-ref_key_2 = s_document-xref2. 996 | s_glaccount-ref_key_3 = s_document-xref3. 997 | s_glaccount-cs_trans_t = s_document-bewar. 998 | s_glaccount-costcenter = s_document-kostl. 999 | s_glaccount-wbs_element = s_document-projk. 1000 | s_glaccount-sales_ord = s_document-vbel2. 1001 | s_glaccount-s_ord_item = s_document-posn2. 1002 | s_glaccount-co_busproc = s_document-prznr. 1003 | s_glaccount-trade_id = s_document-vbund. 1004 | s_glaccount-po_number = s_document-ebeln. 1005 | s_glaccount-po_item = s_document-ebelp. 1006 | s_glaccount-quantity = s_document-menge. 1007 | s_glaccount-base_uom = s_document-meins. 1008 | s_glaccount-alloc_nmbr = s_document-zuonr. 1009 | s_glaccount-customer = s_document-kunnr_gl. 1010 | s_glaccount-vendor_no = s_document-lifnr_gl. 1011 | s_glaccount-profit_ctr = s_document-prctr. 1012 | APPEND s_glaccount TO glaccount. 1013 | 1014 | IF s_document-mwskz IS NOT INITIAL. 1015 | CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT' 1016 | EXPORTING 1017 | i_bukrs = s_document-bukrs 1018 | i_mwskz = s_document-mwskz 1019 | * I_TXJCD = ' ' 1020 | i_waers = s_document-waers 1021 | i_wrbtr = wrbtr 1022 | * I_ZBD1P = 0 1023 | * I_PRSDT = 1024 | * I_PROTOKOLL = 1025 | * I_TAXPS = 1026 | * I_ACCNT_EXT = 1027 | * I_ACCDATA = 1028 | * IS_ENHANCEMENT = 1029 | * I_PRICING_REFRESH_TX = ' ' 1030 | IMPORTING 1031 | * E_FWNAV = 1032 | * E_FWNVV = 1033 | e_fwste = tax 1034 | * E_FWAST = 1035 | TABLES 1036 | t_mwdat = t_mwdat 1037 | EXCEPTIONS 1038 | bukrs_not_found = 1 1039 | country_not_found = 2 1040 | mwskz_not_defined = 3 1041 | mwskz_not_valid = 4 1042 | account_not_found = 5 1043 | different_discount_base = 6 1044 | different_tax_base = 7 1045 | txjcd_not_valid = 8 1046 | not_found = 9 1047 | ktosl_not_found = 10 1048 | kalsm_not_found = 11 1049 | parameter_error = 12 1050 | knumh_not_found = 13 1051 | kschl_not_found = 14 1052 | unknown_error = 15 1053 | OTHERS = 16. 1054 | IF sy-subrc <> 0. 1055 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 1056 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO msg. 1057 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = msg. 1058 | ENDIF. 1059 | ENDIF. 1060 | 1061 | s_amount-itemno_acc = itemno. 1062 | s_amount-currency = s_document-waers. 1063 | s_amount-amt_doccur = wrbtr - tax. 1064 | s_amount-exch_rate = s_document-kursf. 1065 | s_amount-exch_rate_v = s_document-kursf_m. 1066 | APPEND s_amount TO amount. 1067 | 1068 | DATA modified TYPE abap_bool. 1069 | LOOP AT t_mwdat INTO DATA(s_mwdat). 1070 | CLEAR: modified. 1071 | LOOP AT bapitax INTO s_bapitax WHERE tax_code = s_document-mwskz AND acct_key = s_mwdat-ktosl. 1072 | CLEAR: s_amount. 1073 | READ TABLE amount WITH KEY itemno_acc = s_bapitax-itemno_acc INTO s_amount. 1074 | "To be on the safe side check equality of signs before tax position is added to existing position, this might not be necessary because we have already compared acct_key 1075 | IF sy-subrc = 0 AND ( ( s_amount-amt_doccur GE 0 AND s_mwdat-wmwst GE 0 ) OR ( s_amount-amt_doccur LT 0 AND s_mwdat-wmwst LT 0 ) ). 1076 | s_amount-amt_base = s_amount-amt_base + s_mwdat-kawrt. 1077 | s_amount-amt_doccur = s_amount-amt_doccur + s_mwdat-wmwst. 1078 | MODIFY amount FROM s_amount INDEX sy-tabix. 1079 | modified = abap_true. 1080 | ENDIF. 1081 | ENDLOOP. 1082 | IF modified = abap_false. "New tax position 1083 | CLEAR: s_amount, s_bapitax. 1084 | s_bapitax-itemno_acc = itemno_tax. 1085 | s_bapitax-tax_code = s_document-mwskz. 1086 | s_bapitax-gl_account = s_mwdat-hkont. 1087 | s_bapitax-acct_key = s_mwdat-ktosl. 1088 | APPEND s_bapitax TO bapitax. 1089 | s_amount-itemno_acc = itemno_tax. 1090 | s_amount-amt_base = s_mwdat-kawrt. 1091 | s_amount-amt_doccur = s_mwdat-wmwst. 1092 | s_amount-currency = s_document-waers. 1093 | s_amount-exch_rate = s_document-kursf. 1094 | s_amount-exch_rate_v = s_document-kursf_m. 1095 | APPEND s_amount TO amount. 1096 | SUBTRACT 1 FROM itemno_tax. 1097 | ENDIF. 1098 | ENDLOOP. 1099 | 1100 | ENDIF. 1101 | 1102 | IF s_document-lifnr IS NOT INITIAL. 1103 | s_vendor-itemno_acc = itemno. 1104 | s_vendor-vendor_no = s_document-lifnr. 1105 | s_vendor-item_text = s_document-sgtxt. 1106 | s_vendor-pmnttrms = s_document-zterm. 1107 | s_vendor-pmnt_block = s_document-zlspr. 1108 | s_vendor-ref_key_1 = s_document-xref1. 1109 | s_vendor-ref_key_2 = s_document-xref2. 1110 | s_vendor-ref_key_3 = s_document-xref3. 1111 | s_vendor-alloc_nmbr = s_document-zuonr. 1112 | s_vendor-bline_date = s_document-zfbdt. 1113 | s_vendor-w_tax_code = s_document-qsskz. 1114 | s_vendor-scbank_ind = s_document-lzbkz. 1115 | s_vendor-supcountry = s_document-landl. 1116 | s_vendor-sp_gl_ind = s_document-umskz. 1117 | s_vendor-partner_bk = s_document-bvtyp. 1118 | s_vendor-tax_code = s_document-mwskz. 1119 | s_vendor-profit_ctr = s_document-prctr. 1120 | APPEND s_vendor TO vendor. 1121 | s_amount-itemno_acc = itemno. 1122 | s_amount-currency = s_document-waers. 1123 | s_amount-amt_doccur = wrbtr. 1124 | s_amount-exch_rate = s_document-kursf. 1125 | s_amount-exch_rate_v = s_document-kursf_m. 1126 | APPEND s_amount TO amount. 1127 | ENDIF. 1128 | 1129 | IF s_document-kunnr IS NOT INITIAL. 1130 | s_customer-itemno_acc = itemno. 1131 | s_customer-customer = s_document-kunnr. 1132 | s_customer-item_text = s_document-sgtxt. 1133 | s_customer-pmnttrms = s_document-zterm. 1134 | s_customer-pmnt_block = s_document-zlspr. 1135 | s_customer-ref_key_1 = s_document-xref1. 1136 | s_customer-ref_key_2 = s_document-xref2. 1137 | s_customer-ref_key_3 = s_document-xref3. 1138 | s_customer-alloc_nmbr = s_document-zuonr. 1139 | s_customer-bline_date = s_document-zfbdt. 1140 | s_customer-dunn_block = s_document-mansp. 1141 | s_customer-scbank_ind = s_document-lzbkz. 1142 | s_customer-supcountry = s_document-landl. 1143 | s_customer-sp_gl_ind = s_document-umskz. 1144 | s_customer-partner_bk = s_document-bvtyp. 1145 | s_customer-tax_code = s_document-mwskz. 1146 | s_customer-profit_ctr = s_document-prctr. 1147 | APPEND s_customer TO customer. 1148 | s_amount-itemno_acc = itemno. 1149 | s_amount-currency = s_document-waers. 1150 | s_amount-amt_doccur = wrbtr. 1151 | s_amount-exch_rate = s_document-kursf. 1152 | s_amount-exch_rate_v = s_document-kursf_m. 1153 | APPEND s_amount TO amount. 1154 | ENDIF. 1155 | 1156 | ENDLOOP. 1157 | 1158 | IF me->strategy IS NOT INITIAL. 1159 | DATA posting_badi TYPE REF TO zodin_posting. 1160 | GET BADI posting_badi 1161 | FILTERS 1162 | strategy = me->strategy. 1163 | CALL BADI posting_badi->before 1164 | EXPORTING 1165 | document = document 1166 | CHANGING 1167 | documentheader = header 1168 | customercpd = customercpd 1169 | accountgl = glaccount 1170 | accountreceivable = customer 1171 | accountpayable = vendor 1172 | accounttax = bapitax 1173 | currencyamount = amount 1174 | extension2 = extension2 1175 | accountwt = wht. 1176 | ENDIF. 1177 | 1178 | IF me->simulation EQ abap_true. 1179 | CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK' 1180 | EXPORTING 1181 | documentheader = header 1182 | customercpd = customercpd 1183 | TABLES 1184 | accountgl = glaccount 1185 | accountreceivable = customer 1186 | accountpayable = vendor 1187 | accounttax = bapitax 1188 | currencyamount = amount 1189 | extension2 = extension2 1190 | accountwt = wht 1191 | return = bapiret. 1192 | ELSE. 1193 | CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' 1194 | EXPORTING 1195 | documentheader = header 1196 | customercpd = customercpd 1197 | IMPORTING 1198 | obj_key = obj_key 1199 | TABLES 1200 | accountgl = glaccount 1201 | accountreceivable = customer 1202 | accountpayable = vendor 1203 | accounttax = bapitax 1204 | currencyamount = amount 1205 | extension2 = extension2 1206 | accountwt = wht 1207 | return = bapiret. 1208 | ENDIF. 1209 | LOOP AT bapiret INTO s_bapiret WHERE type = 'E' OR type = 'A'. 1210 | MESSAGE ID s_bapiret-id TYPE s_bapiret-type NUMBER s_bapiret-number WITH s_bapiret-message_v1 s_bapiret-message_v2 s_bapiret-message_v3 s_bapiret-message_v4 INTO msg. 1211 | IF sy-tabix = 2. 1212 | EXIT. 1213 | ENDIF. 1214 | ENDLOOP. 1215 | IF sy-subrc NE 0. 1216 | IF me->simulation NE abap_true. 1217 | belnr = obj_key(10). 1218 | bukrs = obj_key+10(4). 1219 | gjahr = obj_key+14(4). 1220 | ENDIF. 1221 | ELSE. 1222 | RAISE EXCEPTION TYPE zcx_odin EXPORTING text = msg. 1223 | ENDIF. 1224 | ENDMETHOD. 1225 | 1226 | 1227 | METHOD set_simulation. 1228 | me->simulation = simulation. 1229 | ENDMETHOD. 1230 | 1231 | 1232 | METHOD to_key_value. 1233 | DATA: s_external LIKE LINE OF t_external, 1234 | ls_fieldnames LIKE s_external, 1235 | l_index TYPE sy-index, 1236 | ls_key_value LIKE LINE OF t_key_value, 1237 | l_line TYPE i. 1238 | FIELD-SYMBOLS: TYPE any, TYPE any. 1239 | 1240 | "Get data format 1241 | READ TABLE t_external INTO ls_fieldnames INDEX 1. 1242 | DELETE t_external INDEX 1. 1243 | 1244 | LOOP AT t_external INTO s_external. 1245 | 1246 | ADD 1 TO l_line. 1247 | 1248 | DO. 1249 | CLEAR: ls_key_value. 1250 | UNASSIGN: , . 1251 | l_index = sy-index. 1252 | ASSIGN COMPONENT l_index OF STRUCTURE ls_fieldnames TO . 1253 | IF sy-subrc IS NOT INITIAL. 1254 | EXIT. 1255 | ENDIF. 1256 | IF IS NOT INITIAL. 1257 | ASSIGN COMPONENT l_index OF STRUCTURE s_external TO . 1258 | ls_key_value-key = . 1259 | ls_key_value-value = . 1260 | ls_key_value-line = l_line. 1261 | APPEND ls_key_value TO t_key_value. 1262 | ENDIF. 1263 | ENDDO. 1264 | 1265 | ENDLOOP. 1266 | ENDMETHOD. 1267 | ENDCLASS. 1268 | -------------------------------------------------------------------------------- /src/zcl_odin_posting.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_ODIN_POSTING 7 | E 8 | FI document interface 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 000 18 | Counter 19 | 10 20 | 21 | 22 | I 23 | 001 24 | Strategy 25 | 10 26 | 27 | 28 | I 29 | 002 30 | Status 31 | 10 32 | 33 | 34 | I 35 | 003 36 | Message 37 | 10 38 | 39 | 40 | I 41 | 004 42 | Custom1 43 | 10 44 | 45 | 46 | I 47 | 005 48 | Custom2 49 | 10 50 | 51 | 52 | I 53 | 006 54 | Custom3 55 | 10 56 | 57 | 58 | I 59 | 007 60 | Custom4 61 | 10 62 | 63 | 64 | I 65 | 008 66 | Custom5 67 | 10 68 | 69 | 70 | I 71 | 009 72 | Custom6 73 | 10 74 | 75 | 76 | I 77 | 010 78 | Custom7 79 | 10 80 | 81 | 82 | I 83 | 011 84 | Custom8 85 | 10 86 | 87 | 88 | I 89 | 012 90 | Custom9 91 | 10 92 | 93 | 94 | I 95 | 013 96 | Custom10 97 | 10 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /src/zcx_odin.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_ODIN definition 2 | public 3 | inheriting from CX_STATIC_CHECK 4 | create public . 5 | 6 | public section. 7 | 8 | constants ZCX_FDOC type SOTR_CONC value '005056977EF71EEB9AF9D255B6CC868D' ##NO_TEXT. 9 | data TEXT type STRING . 10 | 11 | methods CONSTRUCTOR 12 | importing 13 | !TEXTID like TEXTID optional 14 | !PREVIOUS like PREVIOUS optional 15 | !TEXT type STRING optional . 16 | protected section. 17 | private section. 18 | ENDCLASS. 19 | 20 | 21 | 22 | CLASS ZCX_ODIN IMPLEMENTATION. 23 | 24 | 25 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 26 | CALL METHOD SUPER->CONSTRUCTOR 27 | EXPORTING 28 | TEXTID = TEXTID 29 | PREVIOUS = PREVIOUS 30 | . 31 | IF textid IS INITIAL. 32 | me->textid = ZCX_FDOC . 33 | ENDIF. 34 | me->TEXT = TEXT . 35 | endmethod. 36 | ENDCLASS. 37 | -------------------------------------------------------------------------------- /src/zcx_odin.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_ODIN 7 | E 8 | Finc Doc 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 |
18 | 005056977EF71EEB9AF9D255B6CC868D 19 | D 20 | 1 21 | CA== 22 |
23 | 24 | 25 | 005056977EF71EEB9AF9D255B6CC868D 26 | D 27 | 0001 28 | X 29 | R 30 | 255 31 | &TEXT& 32 | 33 | 34 |
35 |
36 | 37 | 38 | LIMU 39 | CPUB 40 | ZCX_ODIN 41 | 005056977EF71EEB9AF9D255B6CC868D 42 | 0001 43 | 44 | 45 | 46 | 47 | ZCX_ODIN 48 | CONSTRUCTOR 49 | D 50 | CONSTRUCTOR 51 | 52 | 53 | ZCX_ODIN 54 | CONSTRUCTOR 55 | E 56 | CONSTRUCTOR 57 | 58 | 59 |
60 |
61 |
62 | -------------------------------------------------------------------------------- /src/zif_odin_mapping.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_odin_mapping 2 | PUBLIC . 3 | 4 | 5 | INTERFACES if_badi_interface . 6 | 7 | METHODS before 8 | CHANGING 9 | !external TYPE zodin_external_t 10 | RAISING 11 | zcx_odin . 12 | METHODS after 13 | IMPORTING 14 | VALUE(external) TYPE zodin_external_t 15 | VALUE(key_value) TYPE zodin_key_value_t 16 | CHANGING 17 | !internal TYPE zodin_internal_t 18 | RAISING 19 | zcx_odin . 20 | ENDINTERFACE. 21 | -------------------------------------------------------------------------------- /src/zif_odin_mapping.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ODIN_MAPPING 7 | E 8 | Interface for BAdI: ZFDOC_MAPPING 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/zif_odin_posting.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_odin_posting 2 | PUBLIC . 3 | 4 | 5 | INTERFACES if_badi_interface . 6 | 7 | METHODS before 8 | IMPORTING 9 | VALUE(document) TYPE zodin_internal_t 10 | CHANGING 11 | !documentheader TYPE bapiache09 12 | !customercpd TYPE bapiacpa09 13 | !accountgl TYPE bapiacgl09_tab 14 | !accountreceivable TYPE bapiacar09_tab 15 | !accountpayable TYPE bapiacap09_tab 16 | !accounttax TYPE bapiactx09_tab 17 | !currencyamount TYPE bapiaccr09_tab 18 | !extension2 TYPE bapiparex_tab_ac 19 | !accountwt TYPE bapiacwt09_tab 20 | RAISING 21 | zcx_odin . 22 | METHODS after_pre_commit 23 | IMPORTING 24 | VALUE(obj_key) TYPE awkey 25 | VALUE(simulation) TYPE abap_bool 26 | VALUE(path_local) TYPE localfile 27 | VALUE(hex_file) TYPE xstring 28 | VALUE(path_server) TYPE string 29 | CHANGING 30 | !document TYPE zodin_internal_t 31 | RAISING 32 | zcx_odin . 33 | METHODS after_post_commit 34 | IMPORTING 35 | VALUE(obj_key) TYPE awkey 36 | VALUE(path_local) TYPE localfile 37 | VALUE(hex_file) TYPE xstring 38 | VALUE(path_server) TYPE string 39 | CHANGING 40 | !document TYPE zodin_internal_t 41 | RAISING 42 | zcx_odin . 43 | ENDINTERFACE. 44 | -------------------------------------------------------------------------------- /src/zif_odin_posting.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_ODIN_POSTING 7 | E 8 | Interface for BAdI: ZFDOC_BOOKING 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/zodin.msag.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN 7 | E 8 | 9 | 10 | 11 | E 12 | ZODIN 13 | 001 14 | Currency within a document must be unique 15 | 16 | 17 | E 18 | ZODIN 19 | 005 20 | ALV-Grid Bug occured, please execute report balvbufdel 21 | 22 | 23 | E 24 | ZODIN 25 | 006 26 | Error when reading directory: & 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/zodin.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report Z_ODIN 3 | *&---------------------------------------------------------------------* 4 | *MIT License 5 | * 6 | *Copyright (c) 2021 71TECH 7 | * 8 | *Permission is hereby granted, free of charge, to any person obtaining a copy 9 | *of this software and associated documentation files (the "Software"), to deal 10 | *in the Software without restriction, including without limitation the rights 11 | *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | *copies of the Software, and to permit persons to whom the Software is 13 | *furnished to do so, subject to the following conditions: 14 | * 15 | *The above copyright notice and this permission notice shall be included in all 16 | *copies or substantial portions of the Software. 17 | * 18 | *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | *SOFTWARE. 25 | *&---------------------------------------------------------------------* 26 | 27 | REPORT zodin. 28 | 29 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-bl1. 30 | PARAMETERS: p_infile TYPE rlgrap-filename. 31 | SELECTION-SCREEN END OF BLOCK b1. 32 | SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-bl3. 33 | PARAMETERS: p_srpath TYPE string LOWER CASE, 34 | p_bkpath TYPE string LOWER CASE. 35 | SELECTION-SCREEN END OF BLOCK b3. 36 | SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-bl0. 37 | PARAMETERS: p_batch TYPE abap_bool AS CHECKBOX. 38 | SELECTION-SCREEN COMMENT 50(70) TEXT-c00 FOR FIELD p_batch. 39 | PARAMETERS: p_skprow TYPE i DEFAULT 0. 40 | SELECTION-SCREEN COMMENT 50(70) TEXT-c01 FOR FIELD p_skprow. 41 | SELECTION-SCREEN END OF BLOCK b0. 42 | SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-bl2. 43 | PARAMETERS: p_sep(1) DEFAULT ';', 44 | p_delim(1) DEFAULT '"', 45 | p_1000(1) DEFAULT '.', 46 | p_dec(1) DEFAULT ','. 47 | SELECTION-SCREEN END OF BLOCK b2. 48 | 49 | AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile. 50 | DATA: filetab TYPE filetable, 51 | filetab_s LIKE LINE OF filetab. 52 | DATA rc TYPE i. 53 | CALL METHOD cl_gui_frontend_services=>file_open_dialog 54 | EXPORTING 55 | window_title = 'Select a file' 56 | file_filter = 'Excel or csv (*.xlsx;*.xlsm;*.xls;*.csv)|*.xlsx;*.xlsm;*.xls;*.csv' 57 | CHANGING 58 | file_table = filetab 59 | rc = rc 60 | EXCEPTIONS 61 | file_open_dialog_failed = 1 62 | cntl_error = 2 63 | error_no_gui = 3 64 | not_supported_by_gui = 4 65 | OTHERS = 5. 66 | IF sy-subrc = 0. 67 | READ TABLE filetab INTO filetab_s INDEX 1. 68 | p_infile = filetab_s-filename. 69 | ENDIF. 70 | 71 | START-OF-SELECTION. 72 | TRY. 73 | IF sy-batch = abap_true OR p_batch = abap_true. 74 | DATA(simulation) = abap_false. 75 | ELSE. 76 | simulation = abap_true. 77 | ENDIF. 78 | DATA(cl_fin_doc) = NEW zcl_odin_posting( 79 | path_local = p_infile 80 | * hex_file = p_hexfil 81 | csv_separator = p_sep 82 | csv_delimiter = p_delim 83 | csv_decimal_separator = p_dec 84 | csv_thousands_separator = p_1000 85 | path_server = p_srpath 86 | path_server_backup = p_bkpath 87 | simulation = simulation 88 | skip_rows = p_skprow ). 89 | CATCH zcx_ODIN INTO DATA(cx_odin). 90 | DATA(error) = cx_odin->get_text( ). 91 | IF sy-batch = abap_false. 92 | MESSAGE error TYPE 'S' DISPLAY LIKE 'E'. 93 | LEAVE LIST-PROCESSING. 94 | ELSE. 95 | MESSAGE error TYPE 'E'. 96 | ENDIF. 97 | ENDTRY. 98 | TRY. 99 | cl_fin_doc->post( ). 100 | CATCH zcx_ODIN INTO cx_odin. 101 | error = cx_odin->get_text( ). 102 | MESSAGE error TYPE 'S' DISPLAY LIKE 'E'. 103 | ENDTRY. 104 | cl_fin_doc->display( report = sy-repid pfstatus = 'ALV2' ). 105 | -------------------------------------------------------------------------------- /src/zodin.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN 7 | 1 8 | K 9 | E 10 | X 11 | X 12 | 13 | 14 | 15 | 000001 16 | 000001 17 | 18 | 19 | 20 | ALV2 21 | D 22 | 000001 23 | 000001 24 | 0001 25 | ALV Grid 26 | 27 | 28 | 29 | 30 | %PC 31 | 001 32 | S 33 | ICON_EXPORT 34 | @49@ 35 | Local File... 36 | 37 | 38 | &ALL 39 | 001 40 | S 41 | ICON_SELECT_ALL 42 | @4B@ 43 | Select all 44 | 45 | 46 | &AVE 47 | 001 48 | S 49 | ICON_ALV_VARIANT_SAVE 50 | @DN@ 51 | Save Layout... 52 | 53 | 54 | &BUCH 55 | 001 56 | S 57 | ICON_EXECUTE_OBJECT 58 | @15@ 59 | Buchen 60 | Buchen 61 | Buchen 62 | 63 | 64 | &ETA 65 | 001 66 | S 67 | ICON_SELECT_DETAIL 68 | @16@ 69 | Choose detail 70 | 71 | 72 | &EXEC 73 | 001 74 | S 75 | ICON_EXECUTE_OBJECT 76 | @15@ 77 | Post 78 | 79 | 80 | &F03 81 | 001 82 | S 83 | ICON_SYSTEM_UNDO 84 | @2W@ 85 | Back 86 | 87 | 88 | &F12 89 | 001 90 | S 91 | ICON_CANCEL 92 | @0W@ 93 | Cancel 94 | 95 | 96 | &F15 97 | 001 98 | S 99 | Exit 100 | 101 | 102 | &OAD 103 | 001 104 | S 105 | ICON_ALV_VARIANT_CHOOSE 106 | @DM@ 107 | Select Layout... 108 | 109 | 110 | &ODN 111 | 001 112 | S 113 | ICON_SORT_DOWN 114 | @3F@ 115 | Sort in descending order 116 | 117 | 118 | &OL0 119 | 001 120 | S 121 | ICON_ALV_VARIANTS 122 | @LZ@ 123 | Change Layout... 124 | 125 | 126 | &OUP 127 | 001 128 | S 129 | ICON_SORT_UP 130 | @3E@ 131 | Sort in ascending order 132 | 133 | 134 | &POST 135 | 001 136 | S 137 | ICON_EXECUTE_OBJECT 138 | @15@ 139 | Post 140 | Post 141 | Post 142 | 143 | 144 | &RNT 145 | 001 146 | S 147 | ICON_PRINT 148 | @0X@ 149 | Print 150 | 151 | 152 | &SAL 153 | 001 154 | S 155 | ICON_DESELECT_ALL 156 | @4D@ 157 | Alle Mark. löschen 158 | 159 | 160 | &XXL 161 | 001 162 | S 163 | ICON_XXL 164 | @DJ@ 165 | Spreadsheet... 166 | 167 | 168 | EX 169 | 001 170 | S 171 | ICON_EXECUTE_OBJECT 172 | @15@ 173 | POST 174 | 175 | 176 | EXEC 177 | 001 178 | S 179 | ICON_EXECUTE_OBJECT 180 | @15@ 181 | Post 182 | 183 | 184 | EXEC1 185 | 001 186 | S 187 | ICON_EXECUTE_OBJECT 188 | @15@ 189 | POST 190 | 191 | 192 | P+ 193 | 001 194 | S 195 | ICON_NEXT_PAGE 196 | @30@ 197 | Nächste Seite 198 | 199 | 200 | P++ 201 | 001 202 | S 203 | ICON_LAST_PAGE 204 | @31@ 205 | Letzte Seite 206 | 207 | 208 | P- 209 | 001 210 | S 211 | ICON_PREVIOUS_PAGE 212 | @2Z@ 213 | Vorige Seite 214 | 215 | 216 | P-- 217 | 001 218 | S 219 | ICON_FIRST_PAGE 220 | @2Y@ 221 | Erste Seite 222 | 223 | 224 | 225 | 226 | 000001 227 | 0001 228 | 01 229 | 13 230 | 231 | 232 | 000001 233 | 0001 234 | 04 235 | 28 236 | 237 | 238 | 000001 239 | 0001 240 | 05 241 | 40 242 | 243 | 244 | 000001 245 | 0001 246 | 06 247 | 43 248 | 249 | 250 | 000001 251 | 0001 252 | 07 253 | 45 254 | 255 | 256 | 000001 257 | 0001 258 | 08 259 | 32 260 | 261 | 262 | 000001 263 | 0001 264 | 09 265 | 33 266 | 267 | 268 | 000001 269 | 0001 270 | 10 271 | 34 272 | 273 | 274 | 000001 275 | 0001 276 | 11 277 | 08 278 | 279 | 280 | 281 | 282 | 000001 283 | 02 284 | &ETA 285 | 001 286 | 287 | 288 | 000001 289 | 03 290 | &F03 291 | 001 292 | 293 | 294 | 000001 295 | 08 296 | EXEC 297 | 001 298 | 299 | 300 | 000001 301 | 12 302 | &F12 303 | 001 304 | 305 | 306 | 000001 307 | 13 308 | &ETA 309 | 001 310 | 311 | 312 | 000001 313 | 15 314 | &F15 315 | 001 316 | 317 | 318 | 000001 319 | 28 320 | &OUP 321 | 001 322 | 323 | 324 | 000001 325 | 32 326 | &OL0 327 | 001 328 | 329 | 330 | 000001 331 | 33 332 | &OAD 333 | 001 334 | 335 | 336 | 000001 337 | 34 338 | &AVE 339 | 001 340 | 341 | 342 | 000001 343 | 40 344 | &ODN 345 | 001 346 | 347 | 348 | 000001 349 | 43 350 | &XXL 351 | 001 352 | 353 | 354 | 000001 355 | 45 356 | %PC 357 | 001 358 | 359 | 360 | 000001 361 | 80 362 | P-- 363 | 001 364 | 365 | 366 | 000001 367 | 81 368 | P- 369 | 001 370 | 371 | 372 | 000001 373 | 82 374 | P+ 375 | 001 376 | 377 | 378 | 000001 379 | 83 380 | P++ 381 | 001 382 | 383 | 384 | 000001 385 | 86 386 | &RNT 387 | 001 388 | 389 | 390 | 391 | 392 | ALV2 393 | %PC 394 | 395 | 396 | ALV2 397 | &AVE 398 | 399 | 400 | ALV2 401 | &ETA 402 | 403 | 404 | ALV2 405 | &EXEC 406 | 407 | 408 | ALV2 409 | &F03 410 | 411 | 412 | ALV2 413 | &F12 414 | 415 | 416 | ALV2 417 | &F15 418 | 419 | 420 | ALV2 421 | &OAD 422 | 423 | 424 | ALV2 425 | &ODN 426 | 427 | 428 | ALV2 429 | &OL0 430 | 431 | 432 | ALV2 433 | &OUP 434 | 435 | 436 | ALV2 437 | &RNT 438 | 439 | 440 | ALV2 441 | &XXL 442 | 443 | 444 | ALV2 445 | EXEC 446 | 447 | 448 | ALV2 449 | P+ 450 | 451 | 452 | ALV2 453 | P++ 454 | 455 | 456 | ALV2 457 | P- 458 | 459 | 460 | ALV2 461 | P-- 462 | 463 | 464 | 465 | 466 | A 467 | 000001 468 | D 469 | ALV Grid 470 | 471 | 472 | P 473 | 000001 474 | D 475 | ALV Grid 476 | 477 | 478 | B 479 | 000001 480 | 0001 481 | D 482 | ALV Grid 483 | 484 | 485 | 486 | 487 | 488 | I 489 | 000 490 | Select a file 491 | 23 492 | 493 | 494 | I 495 | BL0 496 | Settings 497 | 18 498 | 499 | 500 | I 501 | BL1 502 | Local file 503 | 50 504 | 505 | 506 | I 507 | BL2 508 | Options for csv files 509 | 50 510 | 511 | 512 | I 513 | BL3 514 | Server file 515 | 50 516 | 517 | 518 | I 519 | C00 520 | (Post in dialog without displaying list first) 521 | 70 522 | 523 | 524 | I 525 | C01 526 | (Number of lines before heading line) 527 | 50 528 | 529 | 530 | R 531 | Open Document Interface (ODIN) 532 | 30 533 | 534 | 535 | S 536 | P_1000 537 | Thousands separator 538 | 27 539 | 540 | 541 | S 542 | P_BATCH 543 | Force batch mode 544 | 24 545 | 546 | 547 | S 548 | P_BKPATH 549 | Path file server backup 550 | 31 551 | 552 | 553 | S 554 | P_DEC 555 | Decimal separator 556 | 25 557 | 558 | 559 | S 560 | P_DELIM 561 | Delimiter 562 | 17 563 | 564 | 565 | S 566 | P_INFILE 567 | Path file local 568 | 23 569 | 570 | 571 | S 572 | P_SEP 573 | Separator 574 | 17 575 | 576 | 577 | S 578 | P_SKPROW 579 | Skip rows 580 | 17 581 | 582 | 583 | S 584 | P_SRPATH 585 | Path file server 586 | 24 587 | 588 | 589 | 590 | 591 | D 592 | 593 | 594 | I 595 | 000 596 | Datei auswählen 597 | 23 598 | 599 | 600 | I 601 | BL0 602 | Einstellungen 603 | 18 604 | 605 | 606 | I 607 | BL1 608 | Lokale Datei 609 | 50 610 | 611 | 612 | I 613 | BL2 614 | Optionen für csv-Dateien 615 | 50 616 | 617 | 618 | I 619 | BL3 620 | Datei Server 621 | 50 622 | 623 | 624 | I 625 | C00 626 | (Im Dialog buchen ohne vorherige Anzeige der Liste) 627 | 70 628 | 629 | 630 | I 631 | C01 632 | (Anzahl Zeilen vor Überschriftszeile) 633 | 50 634 | 635 | 636 | R 637 | Open Document Interface (ODIN) 638 | 70 639 | 640 | 641 | S 642 | P_1000 643 | Tausendertrennzeichen 644 | 38 645 | 646 | 647 | S 648 | P_BATCH 649 | Erzwinge Batch Modus 650 | 38 651 | 652 | 653 | S 654 | P_BKPATH 655 | Dateipfad Backup 656 | 38 657 | 658 | 659 | S 660 | P_DEC 661 | Dezimaltrennzeichen 662 | 38 663 | 664 | 665 | S 666 | P_DELIM 667 | Delimiter 668 | 38 669 | 670 | 671 | S 672 | P_INFILE 673 | Dateipfad lokal 674 | 38 675 | 676 | 677 | S 678 | P_SEP 679 | Trennzeichen 680 | 38 681 | 682 | 683 | S 684 | P_SKPROW 685 | Zeilen überspringen 686 | 38 687 | 688 | 689 | S 690 | P_SRPATH 691 | Dateipfad Server 692 | 38 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | RE 701 | ZODIN 702 | E 703 | E 704 | 0001 705 | X 706 | 00004 707 | R 708 | 709 | 710 | DOKU 711 | ZODIN 712 | RE 713 | E 714 | S_DOCU_SHOW 715 | S_DOCUS1 716 | 00001 717 | 072 718 | 719 | 720 | 721 | U1 722 | &PURPOSE& 723 | 724 | 725 | AS 726 | See https://github.com/71tech/ODIN 727 | 728 | 729 | U1 730 | &INTEGRATION& 731 | 732 | 733 | AS 734 | 735 | 736 | U1 737 | &PREREQUISITES& 738 | 739 | 740 | AS 741 | 742 | 743 | U1 744 | &FEATURES& 745 | 746 | 747 | AS 748 | 749 | 750 | U2 751 | &SELECTION& 752 | 753 | 754 | AS 755 | 756 | 757 | U2 758 | &STANDARD_VARIANTS& 759 | 760 | 761 | AS 762 | 763 | 764 | U2 765 | &OUTPUT& 766 | 767 | 768 | AS 769 | 770 | 771 | U1 772 | &ACTIVITIES& 773 | 774 | 775 | AS 776 | 777 | 778 | U1 779 | &EXAMPLE& 780 | 781 | 782 | AS 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | -------------------------------------------------------------------------------- /src/zodin.tran.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN 7 | ZODIN 8 | 1000 9 | gA== 10 | 11 | 12 | ZODIN 13 | 1 14 | X 15 | X 16 | 17 | 18 | E 19 | ZODIN 20 | Open Document Interface 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/zodin_acc.enho.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | BADI_IMPL 6 | ODIN 7 | BADI_ACC_DOCUMENT 8 | 9 | 10 | BADI_ACC_DOCUMENT 11 | BADI_ACC_DOCUMENT 12 | ZODIN_ACC 13 | ZCL_ODIN_ACC 14 | X 15 | Implementation: Änderung des externen Beleges vor Aufruf des RW-Interface 16 | 005056977EF71EDBA5F48DED0DB33C4C 17 | 18 | 19 | 20 | 21 |
22 | 005056977EF71EDBA5F48865196E7C37 23 | E 24 | 1 25 | AAI= 26 |
27 | 28 | 29 | 005056977EF71EDBA5F48865196E7C37 30 | E 31 | 0001 32 | X 33 | R 34 | 014 35 | ODIN 36 | 37 | 38 |
39 | 40 |
41 | 005056977EF71EDBA5F48DED0DB33C4C 42 | E 43 | 1 44 | AAI= 45 |
46 | 47 | 48 | 005056977EF71EDBA5F48DED0DB33C4C 49 | E 50 | 0001 51 | X 52 | R 53 | 110 54 | Implementation: Änderung des externen Beleges vor Aufruf des RW-Interface 55 | 56 | 57 |
58 |
59 | 60 | 61 | R3TR 62 | ENHO 63 | ZODIN_ACC 64 | 005056977EF71EDBA5F48865196E7C37 65 | 0001 66 | 67 | 68 | R3TR 69 | ENHO 70 | ZODIN_ACC 71 | 005056977EF71EDBA5F48DED0DB33C4C 72 | 0001 73 | 74 | 75 |
76 |
77 |
78 | -------------------------------------------------------------------------------- /src/zodin_alias.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_ALIAS 7 | E 8 | TRANSP 9 | X 10 | Alias field names 11 | X 12 | A 13 | 4 14 | 15 | 16 | ZODIN_ALIAS 17 | A 18 | 0 19 | APPL2 20 | N 21 | 22 | 23 | 24 | ZODIN_ALIAS 25 | CLNT 26 | 0001 27 | X 28 | MANDT 29 | 0 30 | X 31 | E 32 | 33 | 34 | ZODIN_ALIAS 35 | ALIAS_NAME 36 | 0002 37 | X 38 | ZODIN_ALIAS_NAME 39 | 0 40 | X 41 | E 42 | 43 | 44 | ZODIN_ALIAS 45 | STRATEGY 46 | 0003 47 | X 48 | ZODIN_STRATEGY 49 | 0 50 | X 51 | E 52 | 53 | 54 | ZODIN_ALIAS 55 | FIELD_NAME 56 | 0004 57 | NAME_FELD 58 | 0 59 | E 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /src/zodin_alias_name.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_ALIAS_NAME 7 | E 8 | 10 9 | 20 10 | Alias name 11 | Alias 12 | Alias name 13 | E 14 | CHAR 15 | 000070 16 | 000070 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/zodin_extension.enhs.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | BADI_DEF 6 | ODIN 7 | 8 | 9 | ZODIN_POSTING 10 | ZIF_ODIN_POSTING 11 | N 12 | Posting 13 | 005056977EF71EDBA2CAFA6329CDCED4 14 | 15 | 16 | STRATEGY 17 | S 18 | 19 | 20 | 21 | 22 | ZODIN_MAPPING 23 | ZIF_ODIN_MAPPING 24 | N 25 | Mapping 26 | 005056977EF71EDBA2CAFA6329CDEED4 27 | 28 | 29 | STRATEGY 30 | S 31 | 32 | 33 | 34 | 35 | 36 | 37 |
38 | 005056977EF71EDBA2CAD8537D24EE92 39 | E 40 | 1 41 | AAE= 42 |
43 | 44 | 45 | 005056977EF71EDBA2CAD8537D24EE92 46 | E 47 | 0001 48 | X 49 | R 50 | 014 51 | ODIN 52 | 53 | 54 |
55 | 56 |
57 | 005056977EF71EDBA2CAFA6329CDCED4 58 | E 59 | 1 60 | AAE= 61 |
62 | 63 | 64 | 005056977EF71EDBA2CAFA6329CDCED4 65 | E 66 | 0001 67 | X 68 | R 69 | 017 70 | Posting 71 | 72 | 73 |
74 | 75 |
76 | 005056977EF71EDBA2CAFA6329CDEED4 77 | E 78 | 1 79 | AAE= 80 |
81 | 82 | 83 | 005056977EF71EDBA2CAFA6329CDEED4 84 | E 85 | 0001 86 | X 87 | R 88 | 017 89 | Mapping 90 | 91 | 92 |
93 |
94 | 95 | 96 | R3TR 97 | ENHS 98 | ZODIN_EXTENSION 99 | 005056977EF71EDBA2CAD8537D24EE92 100 | 0001 101 | 102 | 103 | R3TR 104 | ENHS 105 | ZODIN_EXTENSION 106 | 005056977EF71EDBA2CAFA6329CDCED4 107 | 0001 108 | 109 | 110 | R3TR 111 | ENHS 112 | ZODIN_EXTENSION 113 | 005056977EF71EDBA2CAFA6329CDEED4 114 | 0001 115 | 116 | 117 |
118 |
119 |
120 | -------------------------------------------------------------------------------- /src/zodin_extension.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_EXTENSION 7 | E 8 | INTTAB 9 | Extension for BADI_ACC_DOCUMENT 10 | 4 11 | 12 | 13 | 14 | ZODIN_EXTENSION 15 | POSNR 16 | 0001 17 | POSNR_ACC 18 | 0 19 | E 20 | 21 | 22 | ZODIN_EXTENSION 23 | REBZG 24 | 0002 25 | REBZG 26 | 0 27 | E 28 | 29 | 30 | ZODIN_EXTENSION 31 | REBZJ 32 | 0003 33 | REBZJ 34 | 0 35 | E 36 | 37 | 38 | ZODIN_EXTENSION 39 | REBZZ 40 | 0004 41 | REBZZ 42 | 0 43 | E 44 | 45 | 46 | ZODIN_EXTENSION 47 | BSCHL 48 | 0005 49 | BSCHL 50 | 0 51 | E 52 | 53 | 54 | ZODIN_EXTENSION 55 | ANBWA 56 | 0006 57 | ANBWA 58 | 0 59 | E 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /src/zodin_external.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_EXTERNAL 7 | E 8 | INTTAB 9 | External 10 | 4 11 | 12 | 13 | 14 | ZODIN_EXTERNAL 15 | FIELD1 16 | E 17 | 0001 18 | 0 19 | g 20 | 000008 21 | STRG 22 | STRG 23 | 24 | 25 | ZODIN_EXTERNAL 26 | FIELD2 27 | E 28 | 0002 29 | 0 30 | g 31 | 000008 32 | STRG 33 | STRG 34 | 35 | 36 | ZODIN_EXTERNAL 37 | FIELD3 38 | E 39 | 0003 40 | 0 41 | g 42 | 000008 43 | STRG 44 | STRG 45 | 46 | 47 | ZODIN_EXTERNAL 48 | FIELD4 49 | E 50 | 0004 51 | 0 52 | g 53 | 000008 54 | STRG 55 | STRG 56 | 57 | 58 | ZODIN_EXTERNAL 59 | FIELD5 60 | E 61 | 0005 62 | 0 63 | g 64 | 000008 65 | STRG 66 | STRG 67 | 68 | 69 | ZODIN_EXTERNAL 70 | FIELD6 71 | E 72 | 0006 73 | 0 74 | g 75 | 000008 76 | STRG 77 | STRG 78 | 79 | 80 | ZODIN_EXTERNAL 81 | FIELD7 82 | E 83 | 0007 84 | 0 85 | g 86 | 000008 87 | STRG 88 | STRG 89 | 90 | 91 | ZODIN_EXTERNAL 92 | FIELD8 93 | E 94 | 0008 95 | 0 96 | g 97 | 000008 98 | STRG 99 | STRG 100 | 101 | 102 | ZODIN_EXTERNAL 103 | FIELD9 104 | E 105 | 0009 106 | 0 107 | g 108 | 000008 109 | STRG 110 | STRG 111 | 112 | 113 | ZODIN_EXTERNAL 114 | FIELD10 115 | E 116 | 0010 117 | 0 118 | g 119 | 000008 120 | STRG 121 | STRG 122 | 123 | 124 | ZODIN_EXTERNAL 125 | FIELD11 126 | E 127 | 0011 128 | 0 129 | g 130 | 000008 131 | STRG 132 | STRG 133 | 134 | 135 | ZODIN_EXTERNAL 136 | FIELD12 137 | E 138 | 0012 139 | 0 140 | g 141 | 000008 142 | STRG 143 | STRG 144 | 145 | 146 | ZODIN_EXTERNAL 147 | FIELD13 148 | E 149 | 0013 150 | 0 151 | g 152 | 000008 153 | STRG 154 | STRG 155 | 156 | 157 | ZODIN_EXTERNAL 158 | FIELD14 159 | E 160 | 0014 161 | 0 162 | g 163 | 000008 164 | STRG 165 | STRG 166 | 167 | 168 | ZODIN_EXTERNAL 169 | FIELD15 170 | E 171 | 0015 172 | 0 173 | g 174 | 000008 175 | STRG 176 | STRG 177 | 178 | 179 | ZODIN_EXTERNAL 180 | FIELD16 181 | E 182 | 0016 183 | 0 184 | g 185 | 000008 186 | STRG 187 | STRG 188 | 189 | 190 | ZODIN_EXTERNAL 191 | FIELD17 192 | E 193 | 0017 194 | 0 195 | g 196 | 000008 197 | STRG 198 | STRG 199 | 200 | 201 | ZODIN_EXTERNAL 202 | FIELD18 203 | E 204 | 0018 205 | 0 206 | g 207 | 000008 208 | STRG 209 | STRG 210 | 211 | 212 | ZODIN_EXTERNAL 213 | FIELD19 214 | E 215 | 0019 216 | 0 217 | g 218 | 000008 219 | STRG 220 | STRG 221 | 222 | 223 | ZODIN_EXTERNAL 224 | FIELD20 225 | E 226 | 0020 227 | 0 228 | g 229 | 000008 230 | STRG 231 | STRG 232 | 233 | 234 | ZODIN_EXTERNAL 235 | FIELD21 236 | E 237 | 0021 238 | 0 239 | g 240 | 000008 241 | STRG 242 | STRG 243 | 244 | 245 | ZODIN_EXTERNAL 246 | FIELD22 247 | E 248 | 0022 249 | 0 250 | g 251 | 000008 252 | STRG 253 | STRG 254 | 255 | 256 | ZODIN_EXTERNAL 257 | FIELD23 258 | E 259 | 0023 260 | 0 261 | g 262 | 000008 263 | STRG 264 | STRG 265 | 266 | 267 | ZODIN_EXTERNAL 268 | FIELD24 269 | E 270 | 0024 271 | 0 272 | g 273 | 000008 274 | STRG 275 | STRG 276 | 277 | 278 | ZODIN_EXTERNAL 279 | FIELD25 280 | E 281 | 0025 282 | 0 283 | g 284 | 000008 285 | STRG 286 | STRG 287 | 288 | 289 | ZODIN_EXTERNAL 290 | FIELD26 291 | E 292 | 0026 293 | 0 294 | g 295 | 000008 296 | STRG 297 | STRG 298 | 299 | 300 | ZODIN_EXTERNAL 301 | FIELD27 302 | E 303 | 0027 304 | 0 305 | g 306 | 000008 307 | STRG 308 | STRG 309 | 310 | 311 | ZODIN_EXTERNAL 312 | FIELD28 313 | E 314 | 0028 315 | 0 316 | g 317 | 000008 318 | STRG 319 | STRG 320 | 321 | 322 | ZODIN_EXTERNAL 323 | FIELD29 324 | E 325 | 0029 326 | 0 327 | g 328 | 000008 329 | STRG 330 | STRG 331 | 332 | 333 | ZODIN_EXTERNAL 334 | FIELD30 335 | E 336 | 0030 337 | 0 338 | g 339 | 000008 340 | STRG 341 | STRG 342 | 343 | 344 | ZODIN_EXTERNAL 345 | FIELD31 346 | E 347 | 0031 348 | 0 349 | g 350 | 000008 351 | STRG 352 | STRG 353 | 354 | 355 | ZODIN_EXTERNAL 356 | FIELD32 357 | E 358 | 0032 359 | 0 360 | g 361 | 000008 362 | STRG 363 | STRG 364 | 365 | 366 | ZODIN_EXTERNAL 367 | FIELD33 368 | E 369 | 0033 370 | 0 371 | g 372 | 000008 373 | STRG 374 | STRG 375 | 376 | 377 | ZODIN_EXTERNAL 378 | FIELD34 379 | E 380 | 0034 381 | 0 382 | g 383 | 000008 384 | STRG 385 | STRG 386 | 387 | 388 | ZODIN_EXTERNAL 389 | FIELD35 390 | E 391 | 0035 392 | 0 393 | g 394 | 000008 395 | STRG 396 | STRG 397 | 398 | 399 | ZODIN_EXTERNAL 400 | FIELD36 401 | E 402 | 0036 403 | 0 404 | g 405 | 000008 406 | STRG 407 | STRG 408 | 409 | 410 | ZODIN_EXTERNAL 411 | FIELD37 412 | E 413 | 0037 414 | 0 415 | g 416 | 000008 417 | STRG 418 | STRG 419 | 420 | 421 | ZODIN_EXTERNAL 422 | FIELD38 423 | E 424 | 0038 425 | 0 426 | g 427 | 000008 428 | STRG 429 | STRG 430 | 431 | 432 | ZODIN_EXTERNAL 433 | FIELD39 434 | E 435 | 0039 436 | 0 437 | g 438 | 000008 439 | STRG 440 | STRG 441 | 442 | 443 | ZODIN_EXTERNAL 444 | FIELD40 445 | E 446 | 0040 447 | 0 448 | g 449 | 000008 450 | STRG 451 | STRG 452 | 453 | 454 | ZODIN_EXTERNAL 455 | FIELD41 456 | E 457 | 0041 458 | 0 459 | g 460 | 000008 461 | STRG 462 | STRG 463 | 464 | 465 | ZODIN_EXTERNAL 466 | FIELD42 467 | E 468 | 0042 469 | 0 470 | g 471 | 000008 472 | STRG 473 | STRG 474 | 475 | 476 | ZODIN_EXTERNAL 477 | FIELD43 478 | E 479 | 0043 480 | 0 481 | g 482 | 000008 483 | STRG 484 | STRG 485 | 486 | 487 | ZODIN_EXTERNAL 488 | FIELD44 489 | E 490 | 0044 491 | 0 492 | g 493 | 000008 494 | STRG 495 | STRG 496 | 497 | 498 | ZODIN_EXTERNAL 499 | FIELD45 500 | E 501 | 0045 502 | 0 503 | g 504 | 000008 505 | STRG 506 | STRG 507 | 508 | 509 | ZODIN_EXTERNAL 510 | FIELD46 511 | E 512 | 0046 513 | 0 514 | g 515 | 000008 516 | STRG 517 | STRG 518 | 519 | 520 | ZODIN_EXTERNAL 521 | FIELD47 522 | E 523 | 0047 524 | 0 525 | g 526 | 000008 527 | STRG 528 | STRG 529 | 530 | 531 | ZODIN_EXTERNAL 532 | FIELD48 533 | E 534 | 0048 535 | 0 536 | g 537 | 000008 538 | STRG 539 | STRG 540 | 541 | 542 | ZODIN_EXTERNAL 543 | FIELD49 544 | E 545 | 0049 546 | 0 547 | g 548 | 000008 549 | STRG 550 | STRG 551 | 552 | 553 | ZODIN_EXTERNAL 554 | FIELD50 555 | E 556 | 0050 557 | 0 558 | g 559 | 000008 560 | STRG 561 | STRG 562 | 563 | 564 | ZODIN_EXTERNAL 565 | FIELD51 566 | E 567 | 0051 568 | 0 569 | g 570 | 000008 571 | STRG 572 | STRG 573 | 574 | 575 | ZODIN_EXTERNAL 576 | FIELD52 577 | E 578 | 0052 579 | 0 580 | g 581 | 000008 582 | STRG 583 | STRG 584 | 585 | 586 | ZODIN_EXTERNAL 587 | FIELD53 588 | E 589 | 0053 590 | 0 591 | g 592 | 000008 593 | STRG 594 | STRG 595 | 596 | 597 | ZODIN_EXTERNAL 598 | FIELD54 599 | E 600 | 0054 601 | 0 602 | g 603 | 000008 604 | STRG 605 | STRG 606 | 607 | 608 | ZODIN_EXTERNAL 609 | FIELD55 610 | E 611 | 0055 612 | 0 613 | g 614 | 000008 615 | STRG 616 | STRG 617 | 618 | 619 | ZODIN_EXTERNAL 620 | FIELD56 621 | E 622 | 0056 623 | 0 624 | g 625 | 000008 626 | STRG 627 | STRG 628 | 629 | 630 | ZODIN_EXTERNAL 631 | FIELD57 632 | E 633 | 0057 634 | 0 635 | g 636 | 000008 637 | STRG 638 | STRG 639 | 640 | 641 | ZODIN_EXTERNAL 642 | FIELD58 643 | E 644 | 0058 645 | 0 646 | g 647 | 000008 648 | STRG 649 | STRG 650 | 651 | 652 | ZODIN_EXTERNAL 653 | FIELD59 654 | E 655 | 0059 656 | 0 657 | g 658 | 000008 659 | STRG 660 | STRG 661 | 662 | 663 | ZODIN_EXTERNAL 664 | FIELD60 665 | E 666 | 0060 667 | 0 668 | g 669 | 000008 670 | STRG 671 | STRG 672 | 673 | 674 | ZODIN_EXTERNAL 675 | FIELD61 676 | E 677 | 0061 678 | 0 679 | g 680 | 000008 681 | STRG 682 | STRG 683 | 684 | 685 | ZODIN_EXTERNAL 686 | FIELD62 687 | E 688 | 0062 689 | 0 690 | g 691 | 000008 692 | STRG 693 | STRG 694 | 695 | 696 | ZODIN_EXTERNAL 697 | FIELD63 698 | E 699 | 0063 700 | 0 701 | g 702 | 000008 703 | STRG 704 | STRG 705 | 706 | 707 | ZODIN_EXTERNAL 708 | FIELD64 709 | E 710 | 0064 711 | 0 712 | g 713 | 000008 714 | STRG 715 | STRG 716 | 717 | 718 | ZODIN_EXTERNAL 719 | FIELD65 720 | E 721 | 0065 722 | 0 723 | g 724 | 000008 725 | STRG 726 | STRG 727 | 728 | 729 | ZODIN_EXTERNAL 730 | FIELD66 731 | E 732 | 0066 733 | 0 734 | g 735 | 000008 736 | STRG 737 | STRG 738 | 739 | 740 | ZODIN_EXTERNAL 741 | FIELD67 742 | E 743 | 0067 744 | 0 745 | g 746 | 000008 747 | STRG 748 | STRG 749 | 750 | 751 | ZODIN_EXTERNAL 752 | FIELD68 753 | E 754 | 0068 755 | 0 756 | g 757 | 000008 758 | STRG 759 | STRG 760 | 761 | 762 | ZODIN_EXTERNAL 763 | FIELD69 764 | E 765 | 0069 766 | 0 767 | g 768 | 000008 769 | STRG 770 | STRG 771 | 772 | 773 | ZODIN_EXTERNAL 774 | FIELD70 775 | E 776 | 0070 777 | 0 778 | g 779 | 000008 780 | STRG 781 | STRG 782 | 783 | 784 | ZODIN_EXTERNAL 785 | FIELD71 786 | E 787 | 0071 788 | 0 789 | g 790 | 000008 791 | STRG 792 | STRG 793 | 794 | 795 | ZODIN_EXTERNAL 796 | FIELD72 797 | E 798 | 0072 799 | 0 800 | g 801 | 000008 802 | STRG 803 | STRG 804 | 805 | 806 | ZODIN_EXTERNAL 807 | FIELD73 808 | E 809 | 0073 810 | 0 811 | g 812 | 000008 813 | STRG 814 | STRG 815 | 816 | 817 | ZODIN_EXTERNAL 818 | FIELD74 819 | E 820 | 0074 821 | 0 822 | g 823 | 000008 824 | STRG 825 | STRG 826 | 827 | 828 | ZODIN_EXTERNAL 829 | FIELD75 830 | E 831 | 0075 832 | 0 833 | g 834 | 000008 835 | STRG 836 | STRG 837 | 838 | 839 | ZODIN_EXTERNAL 840 | FIELD76 841 | E 842 | 0076 843 | 0 844 | g 845 | 000008 846 | STRG 847 | STRG 848 | 849 | 850 | ZODIN_EXTERNAL 851 | FIELD77 852 | E 853 | 0077 854 | 0 855 | g 856 | 000008 857 | STRG 858 | STRG 859 | 860 | 861 | ZODIN_EXTERNAL 862 | FIELD78 863 | E 864 | 0078 865 | 0 866 | g 867 | 000008 868 | STRG 869 | STRG 870 | 871 | 872 | ZODIN_EXTERNAL 873 | FIELD79 874 | E 875 | 0079 876 | 0 877 | g 878 | 000008 879 | STRG 880 | STRG 881 | 882 | 883 | ZODIN_EXTERNAL 884 | FIELD80 885 | E 886 | 0080 887 | 0 888 | g 889 | 000008 890 | STRG 891 | STRG 892 | 893 | 894 | 895 | 896 | 897 | -------------------------------------------------------------------------------- /src/zodin_external_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_EXTERNAL_T 7 | E 8 | ZODIN_EXTERNAL 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | External 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/zodin_input_csv.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_INPUT_CSV 7 | E 8 | INTTAB 9 | Input 10 | 4 11 | 12 | 13 | 14 | ZODIN_INPUT_CSV 15 | FIELD1 16 | E 17 | 0001 18 | 0 19 | C 20 | 000510 21 | CHAR 22 | 000255 23 | CHAR 24 | 25 | 26 | ZODIN_INPUT_CSV 27 | FIELD2 28 | E 29 | 0002 30 | 0 31 | C 32 | 000510 33 | CHAR 34 | 000255 35 | CHAR 36 | 37 | 38 | ZODIN_INPUT_CSV 39 | FIELD3 40 | E 41 | 0003 42 | 0 43 | C 44 | 000510 45 | CHAR 46 | 000255 47 | CHAR 48 | 49 | 50 | ZODIN_INPUT_CSV 51 | FIELD4 52 | E 53 | 0004 54 | 0 55 | C 56 | 000510 57 | CHAR 58 | 000255 59 | CHAR 60 | 61 | 62 | ZODIN_INPUT_CSV 63 | FIELD5 64 | E 65 | 0005 66 | 0 67 | C 68 | 000510 69 | CHAR 70 | 000255 71 | CHAR 72 | 73 | 74 | ZODIN_INPUT_CSV 75 | FIELD6 76 | E 77 | 0006 78 | 0 79 | C 80 | 000510 81 | CHAR 82 | 000255 83 | CHAR 84 | 85 | 86 | ZODIN_INPUT_CSV 87 | FIELD7 88 | E 89 | 0007 90 | 0 91 | C 92 | 000510 93 | CHAR 94 | 000255 95 | CHAR 96 | 97 | 98 | ZODIN_INPUT_CSV 99 | FIELD8 100 | E 101 | 0008 102 | 0 103 | C 104 | 000510 105 | CHAR 106 | 000255 107 | CHAR 108 | 109 | 110 | ZODIN_INPUT_CSV 111 | FIELD9 112 | E 113 | 0009 114 | 0 115 | C 116 | 000510 117 | CHAR 118 | 000255 119 | CHAR 120 | 121 | 122 | ZODIN_INPUT_CSV 123 | FIELD10 124 | E 125 | 0010 126 | 0 127 | C 128 | 000510 129 | CHAR 130 | 000255 131 | CHAR 132 | 133 | 134 | ZODIN_INPUT_CSV 135 | FIELD11 136 | E 137 | 0011 138 | 0 139 | C 140 | 000510 141 | CHAR 142 | 000255 143 | CHAR 144 | 145 | 146 | ZODIN_INPUT_CSV 147 | FIELD12 148 | E 149 | 0012 150 | 0 151 | C 152 | 000510 153 | CHAR 154 | 000255 155 | CHAR 156 | 157 | 158 | ZODIN_INPUT_CSV 159 | FIELD13 160 | E 161 | 0013 162 | 0 163 | C 164 | 000510 165 | CHAR 166 | 000255 167 | CHAR 168 | 169 | 170 | ZODIN_INPUT_CSV 171 | FIELD14 172 | E 173 | 0014 174 | 0 175 | C 176 | 000510 177 | CHAR 178 | 000255 179 | CHAR 180 | 181 | 182 | ZODIN_INPUT_CSV 183 | FIELD15 184 | E 185 | 0015 186 | 0 187 | C 188 | 000510 189 | CHAR 190 | 000255 191 | CHAR 192 | 193 | 194 | ZODIN_INPUT_CSV 195 | FIELD16 196 | E 197 | 0016 198 | 0 199 | C 200 | 000510 201 | CHAR 202 | 000255 203 | CHAR 204 | 205 | 206 | ZODIN_INPUT_CSV 207 | FIELD17 208 | E 209 | 0017 210 | 0 211 | C 212 | 000510 213 | CHAR 214 | 000255 215 | CHAR 216 | 217 | 218 | ZODIN_INPUT_CSV 219 | FIELD18 220 | E 221 | 0018 222 | 0 223 | C 224 | 000510 225 | CHAR 226 | 000255 227 | CHAR 228 | 229 | 230 | ZODIN_INPUT_CSV 231 | FIELD19 232 | E 233 | 0019 234 | 0 235 | C 236 | 000510 237 | CHAR 238 | 000255 239 | CHAR 240 | 241 | 242 | ZODIN_INPUT_CSV 243 | FIELD20 244 | E 245 | 0020 246 | 0 247 | C 248 | 000510 249 | CHAR 250 | 000255 251 | CHAR 252 | 253 | 254 | ZODIN_INPUT_CSV 255 | FIELD21 256 | E 257 | 0021 258 | 0 259 | C 260 | 000510 261 | CHAR 262 | 000255 263 | CHAR 264 | 265 | 266 | ZODIN_INPUT_CSV 267 | FIELD22 268 | E 269 | 0022 270 | 0 271 | C 272 | 000510 273 | CHAR 274 | 000255 275 | CHAR 276 | 277 | 278 | ZODIN_INPUT_CSV 279 | FIELD23 280 | E 281 | 0023 282 | 0 283 | C 284 | 000510 285 | CHAR 286 | 000255 287 | CHAR 288 | 289 | 290 | ZODIN_INPUT_CSV 291 | FIELD24 292 | E 293 | 0024 294 | 0 295 | C 296 | 000510 297 | CHAR 298 | 000255 299 | CHAR 300 | 301 | 302 | ZODIN_INPUT_CSV 303 | FIELD25 304 | E 305 | 0025 306 | 0 307 | C 308 | 000510 309 | CHAR 310 | 000255 311 | CHAR 312 | 313 | 314 | ZODIN_INPUT_CSV 315 | FIELD26 316 | E 317 | 0026 318 | 0 319 | C 320 | 000510 321 | CHAR 322 | 000255 323 | CHAR 324 | 325 | 326 | ZODIN_INPUT_CSV 327 | FIELD27 328 | E 329 | 0027 330 | 0 331 | C 332 | 000510 333 | CHAR 334 | 000255 335 | CHAR 336 | 337 | 338 | ZODIN_INPUT_CSV 339 | FIELD28 340 | E 341 | 0028 342 | 0 343 | C 344 | 000510 345 | CHAR 346 | 000255 347 | CHAR 348 | 349 | 350 | ZODIN_INPUT_CSV 351 | FIELD29 352 | E 353 | 0029 354 | 0 355 | C 356 | 000510 357 | CHAR 358 | 000255 359 | CHAR 360 | 361 | 362 | ZODIN_INPUT_CSV 363 | FIELD30 364 | E 365 | 0030 366 | 0 367 | C 368 | 000510 369 | CHAR 370 | 000255 371 | CHAR 372 | 373 | 374 | ZODIN_INPUT_CSV 375 | FIELD31 376 | E 377 | 0031 378 | 0 379 | C 380 | 000510 381 | CHAR 382 | 000255 383 | CHAR 384 | 385 | 386 | ZODIN_INPUT_CSV 387 | FIELD32 388 | E 389 | 0032 390 | 0 391 | C 392 | 000510 393 | CHAR 394 | 000255 395 | CHAR 396 | 397 | 398 | ZODIN_INPUT_CSV 399 | FIELD33 400 | E 401 | 0033 402 | 0 403 | C 404 | 000510 405 | CHAR 406 | 000255 407 | CHAR 408 | 409 | 410 | ZODIN_INPUT_CSV 411 | FIELD34 412 | E 413 | 0034 414 | 0 415 | C 416 | 000510 417 | CHAR 418 | 000255 419 | CHAR 420 | 421 | 422 | ZODIN_INPUT_CSV 423 | FIELD35 424 | E 425 | 0035 426 | 0 427 | C 428 | 000510 429 | CHAR 430 | 000255 431 | CHAR 432 | 433 | 434 | ZODIN_INPUT_CSV 435 | FIELD36 436 | E 437 | 0036 438 | 0 439 | C 440 | 000510 441 | CHAR 442 | 000255 443 | CHAR 444 | 445 | 446 | ZODIN_INPUT_CSV 447 | FIELD37 448 | E 449 | 0037 450 | 0 451 | C 452 | 000510 453 | CHAR 454 | 000255 455 | CHAR 456 | 457 | 458 | ZODIN_INPUT_CSV 459 | FIELD38 460 | E 461 | 0038 462 | 0 463 | C 464 | 000510 465 | CHAR 466 | 000255 467 | CHAR 468 | 469 | 470 | ZODIN_INPUT_CSV 471 | FIELD39 472 | E 473 | 0039 474 | 0 475 | C 476 | 000510 477 | CHAR 478 | 000255 479 | CHAR 480 | 481 | 482 | ZODIN_INPUT_CSV 483 | FIELD40 484 | E 485 | 0040 486 | 0 487 | C 488 | 000510 489 | CHAR 490 | 000255 491 | CHAR 492 | 493 | 494 | ZODIN_INPUT_CSV 495 | FIELD41 496 | E 497 | 0041 498 | 0 499 | C 500 | 000510 501 | CHAR 502 | 000255 503 | CHAR 504 | 505 | 506 | ZODIN_INPUT_CSV 507 | FIELD42 508 | E 509 | 0042 510 | 0 511 | C 512 | 000510 513 | CHAR 514 | 000255 515 | CHAR 516 | 517 | 518 | ZODIN_INPUT_CSV 519 | FIELD43 520 | E 521 | 0043 522 | 0 523 | C 524 | 000510 525 | CHAR 526 | 000255 527 | CHAR 528 | 529 | 530 | ZODIN_INPUT_CSV 531 | FIELD44 532 | E 533 | 0044 534 | 0 535 | C 536 | 000510 537 | CHAR 538 | 000255 539 | CHAR 540 | 541 | 542 | ZODIN_INPUT_CSV 543 | FIELD45 544 | E 545 | 0045 546 | 0 547 | C 548 | 000510 549 | CHAR 550 | 000255 551 | CHAR 552 | 553 | 554 | ZODIN_INPUT_CSV 555 | FIELD46 556 | E 557 | 0046 558 | 0 559 | C 560 | 000510 561 | CHAR 562 | 000255 563 | CHAR 564 | 565 | 566 | ZODIN_INPUT_CSV 567 | FIELD47 568 | E 569 | 0047 570 | 0 571 | C 572 | 000510 573 | CHAR 574 | 000255 575 | CHAR 576 | 577 | 578 | ZODIN_INPUT_CSV 579 | FIELD48 580 | E 581 | 0048 582 | 0 583 | C 584 | 000510 585 | CHAR 586 | 000255 587 | CHAR 588 | 589 | 590 | ZODIN_INPUT_CSV 591 | FIELD49 592 | E 593 | 0049 594 | 0 595 | C 596 | 000510 597 | CHAR 598 | 000255 599 | CHAR 600 | 601 | 602 | ZODIN_INPUT_CSV 603 | FIELD50 604 | E 605 | 0050 606 | 0 607 | C 608 | 000510 609 | CHAR 610 | 000255 611 | CHAR 612 | 613 | 614 | ZODIN_INPUT_CSV 615 | FIELD51 616 | E 617 | 0051 618 | 0 619 | C 620 | 000510 621 | CHAR 622 | 000255 623 | CHAR 624 | 625 | 626 | ZODIN_INPUT_CSV 627 | FIELD52 628 | E 629 | 0052 630 | 0 631 | C 632 | 000510 633 | CHAR 634 | 000255 635 | CHAR 636 | 637 | 638 | ZODIN_INPUT_CSV 639 | FIELD53 640 | E 641 | 0053 642 | 0 643 | C 644 | 000510 645 | CHAR 646 | 000255 647 | CHAR 648 | 649 | 650 | ZODIN_INPUT_CSV 651 | FIELD54 652 | E 653 | 0054 654 | 0 655 | C 656 | 000510 657 | CHAR 658 | 000255 659 | CHAR 660 | 661 | 662 | ZODIN_INPUT_CSV 663 | FIELD55 664 | E 665 | 0055 666 | 0 667 | C 668 | 000510 669 | CHAR 670 | 000255 671 | CHAR 672 | 673 | 674 | ZODIN_INPUT_CSV 675 | FIELD56 676 | E 677 | 0056 678 | 0 679 | C 680 | 000510 681 | CHAR 682 | 000255 683 | CHAR 684 | 685 | 686 | ZODIN_INPUT_CSV 687 | FIELD57 688 | E 689 | 0057 690 | 0 691 | C 692 | 000510 693 | CHAR 694 | 000255 695 | CHAR 696 | 697 | 698 | ZODIN_INPUT_CSV 699 | FIELD58 700 | E 701 | 0058 702 | 0 703 | C 704 | 000510 705 | CHAR 706 | 000255 707 | CHAR 708 | 709 | 710 | ZODIN_INPUT_CSV 711 | FIELD59 712 | E 713 | 0059 714 | 0 715 | C 716 | 000510 717 | CHAR 718 | 000255 719 | CHAR 720 | 721 | 722 | ZODIN_INPUT_CSV 723 | FIELD60 724 | E 725 | 0060 726 | 0 727 | C 728 | 000510 729 | CHAR 730 | 000255 731 | CHAR 732 | 733 | 734 | ZODIN_INPUT_CSV 735 | FIELD61 736 | E 737 | 0061 738 | 0 739 | C 740 | 000510 741 | CHAR 742 | 000255 743 | CHAR 744 | 745 | 746 | ZODIN_INPUT_CSV 747 | FIELD62 748 | E 749 | 0062 750 | 0 751 | C 752 | 000510 753 | CHAR 754 | 000255 755 | CHAR 756 | 757 | 758 | ZODIN_INPUT_CSV 759 | FIELD63 760 | E 761 | 0063 762 | 0 763 | C 764 | 000510 765 | CHAR 766 | 000255 767 | CHAR 768 | 769 | 770 | ZODIN_INPUT_CSV 771 | FIELD64 772 | E 773 | 0064 774 | 0 775 | C 776 | 000510 777 | CHAR 778 | 000255 779 | CHAR 780 | 781 | 782 | ZODIN_INPUT_CSV 783 | FIELD65 784 | E 785 | 0065 786 | 0 787 | C 788 | 000510 789 | CHAR 790 | 000255 791 | CHAR 792 | 793 | 794 | ZODIN_INPUT_CSV 795 | FIELD66 796 | E 797 | 0066 798 | 0 799 | C 800 | 000510 801 | CHAR 802 | 000255 803 | CHAR 804 | 805 | 806 | ZODIN_INPUT_CSV 807 | FIELD67 808 | E 809 | 0067 810 | 0 811 | C 812 | 000510 813 | CHAR 814 | 000255 815 | CHAR 816 | 817 | 818 | ZODIN_INPUT_CSV 819 | FIELD68 820 | E 821 | 0068 822 | 0 823 | C 824 | 000510 825 | CHAR 826 | 000255 827 | CHAR 828 | 829 | 830 | ZODIN_INPUT_CSV 831 | FIELD69 832 | E 833 | 0069 834 | 0 835 | C 836 | 000510 837 | CHAR 838 | 000255 839 | CHAR 840 | 841 | 842 | ZODIN_INPUT_CSV 843 | FIELD70 844 | E 845 | 0070 846 | 0 847 | C 848 | 000510 849 | CHAR 850 | 000255 851 | CHAR 852 | 853 | 854 | ZODIN_INPUT_CSV 855 | FIELD71 856 | E 857 | 0071 858 | 0 859 | C 860 | 000510 861 | CHAR 862 | 000255 863 | CHAR 864 | 865 | 866 | ZODIN_INPUT_CSV 867 | FIELD72 868 | E 869 | 0072 870 | 0 871 | C 872 | 000510 873 | CHAR 874 | 000255 875 | CHAR 876 | 877 | 878 | ZODIN_INPUT_CSV 879 | FIELD73 880 | E 881 | 0073 882 | 0 883 | C 884 | 000510 885 | CHAR 886 | 000255 887 | CHAR 888 | 889 | 890 | ZODIN_INPUT_CSV 891 | FIELD74 892 | E 893 | 0074 894 | 0 895 | C 896 | 000510 897 | CHAR 898 | 000255 899 | CHAR 900 | 901 | 902 | ZODIN_INPUT_CSV 903 | FIELD75 904 | E 905 | 0075 906 | 0 907 | C 908 | 000510 909 | CHAR 910 | 000255 911 | CHAR 912 | 913 | 914 | ZODIN_INPUT_CSV 915 | FIELD76 916 | E 917 | 0076 918 | 0 919 | C 920 | 000510 921 | CHAR 922 | 000255 923 | CHAR 924 | 925 | 926 | ZODIN_INPUT_CSV 927 | FIELD77 928 | E 929 | 0077 930 | 0 931 | C 932 | 000510 933 | CHAR 934 | 000255 935 | CHAR 936 | 937 | 938 | ZODIN_INPUT_CSV 939 | FIELD78 940 | E 941 | 0078 942 | 0 943 | C 944 | 000510 945 | CHAR 946 | 000255 947 | CHAR 948 | 949 | 950 | ZODIN_INPUT_CSV 951 | FIELD79 952 | E 953 | 0079 954 | 0 955 | C 956 | 000510 957 | CHAR 958 | 000255 959 | CHAR 960 | 961 | 962 | ZODIN_INPUT_CSV 963 | FIELD80 964 | E 965 | 0080 966 | 0 967 | C 968 | 000510 969 | CHAR 970 | 000255 971 | CHAR 972 | 973 | 974 | 975 | 976 | 977 | -------------------------------------------------------------------------------- /src/zodin_internal.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_INTERNAL 7 | E 8 | INTTAB 9 | Internal 10 | 4 11 | 12 | 13 | 14 | ZODIN_INTERNAL 15 | COUNTER 16 | E 17 | 0001 18 | 0 19 | X 20 | 000004 21 | INT4 22 | 000010 23 | INT4 24 | 25 | 26 | ZODIN_INTERNAL 27 | STRATEGY 28 | 0002 29 | ZODIN_STRATEGY 30 | 0 31 | E 32 | 33 | 34 | ZODIN_INTERNAL 35 | STATE 36 | E 37 | 0003 38 | 0 39 | g 40 | 000008 41 | STRG 42 | STRG 43 | 44 | 45 | ZODIN_INTERNAL 46 | MSG 47 | E 48 | 0004 49 | 0 50 | g 51 | 000008 52 | STRG 53 | STRG 54 | 55 | 56 | ZODIN_INTERNAL 57 | BUKRS 58 | 0005 59 | BUKRS 60 | 0 61 | D 62 | E 63 | 64 | 65 | ZODIN_INTERNAL 66 | BELNR 67 | 0006 68 | BELNR_D 69 | 0 70 | E 71 | 72 | 73 | ZODIN_INTERNAL 74 | GJAHR 75 | 0007 76 | GJAHR 77 | 0 78 | E 79 | 80 | 81 | ZODIN_INTERNAL 82 | MONAT 83 | 0008 84 | MONAT 85 | 0 86 | E 87 | 88 | 89 | ZODIN_INTERNAL 90 | BUDAT 91 | 0009 92 | BUDAT 93 | 0 94 | T 95 | E 96 | 97 | 98 | ZODIN_INTERNAL 99 | BLDAT 100 | 0010 101 | BLDAT 102 | 0 103 | T 104 | E 105 | 106 | 107 | ZODIN_INTERNAL 108 | XBLNR 109 | 0011 110 | XBLNR 111 | 0 112 | E 113 | 114 | 115 | ZODIN_INTERNAL 116 | BLART 117 | 0012 118 | BLART 119 | 0 120 | E 121 | 122 | 123 | ZODIN_INTERNAL 124 | BKTXT 125 | 0013 126 | BKTXT 127 | 0 128 | E 129 | 130 | 131 | ZODIN_INTERNAL 132 | KUNNR 133 | 0014 134 | KUNNR 135 | 0 136 | D 137 | E 138 | 139 | 140 | ZODIN_INTERNAL 141 | LIFNR 142 | 0015 143 | LIFNR 144 | 0 145 | D 146 | E 147 | 148 | 149 | ZODIN_INTERNAL 150 | HKONT 151 | 0016 152 | HKONT 153 | 0 154 | E 155 | 156 | 157 | ZODIN_INTERNAL 158 | WRBTR_S 159 | 0017 160 | WRBTR 161 | 0 162 | ZODIN_INTERNAL 163 | WAERS 164 | E 165 | 166 | 167 | ZODIN_INTERNAL 168 | WRBTR_H 169 | 0018 170 | WRBTR 171 | 0 172 | ZODIN_INTERNAL 173 | WAERS 174 | E 175 | 176 | 177 | ZODIN_INTERNAL 178 | WAERS 179 | 0019 180 | WAERS 181 | 0 182 | E 183 | 184 | 185 | ZODIN_INTERNAL 186 | KURSF 187 | 0020 188 | KURSF 189 | 0 190 | E 191 | 192 | 193 | ZODIN_INTERNAL 194 | KURSF_M 195 | 0021 196 | ACPI_UKURSM 197 | 0 198 | E 199 | 200 | 201 | ZODIN_INTERNAL 202 | MWSKZ 203 | 0022 204 | MWSKZ 205 | 0 206 | E 207 | 208 | 209 | ZODIN_INTERNAL 210 | ZTERM 211 | 0023 212 | DZTERM 213 | 0 214 | E 215 | 216 | 217 | ZODIN_INTERNAL 218 | SGTXT 219 | 0024 220 | SGTXT 221 | 0 222 | E 223 | 224 | 225 | ZODIN_INTERNAL 226 | QSSKZ 227 | 0025 228 | QSSKZ 229 | 0 230 | E 231 | 232 | 233 | ZODIN_INTERNAL 234 | LZBKZ 235 | 0026 236 | LZBKZ 237 | 0 238 | E 239 | 240 | 241 | ZODIN_INTERNAL 242 | ZLSPR 243 | 0027 244 | DZLSPR 245 | 0 246 | E 247 | 248 | 249 | ZODIN_INTERNAL 250 | ZUONR 251 | 0028 252 | DZUONR 253 | 0 254 | E 255 | 256 | 257 | ZODIN_INTERNAL 258 | XREF1 259 | 0029 260 | XREF1 261 | 0 262 | E 263 | 264 | 265 | ZODIN_INTERNAL 266 | XREF2 267 | 0030 268 | XREF2 269 | 0 270 | E 271 | 272 | 273 | ZODIN_INTERNAL 274 | XREF3 275 | 0031 276 | XREF3 277 | 0 278 | E 279 | 280 | 281 | ZODIN_INTERNAL 282 | ZFBDT 283 | 0032 284 | DZFBDT 285 | 0 286 | T 287 | E 288 | 289 | 290 | ZODIN_INTERNAL 291 | BEWAR 292 | 0033 293 | RMVCT 294 | 0 295 | E 296 | 297 | 298 | ZODIN_INTERNAL 299 | AUFNR 300 | 0034 301 | AUFNR 302 | 0 303 | E 304 | 305 | 306 | ZODIN_INTERNAL 307 | KOSTL 308 | 0035 309 | KOSTL 310 | 0 311 | E 312 | 313 | 314 | ZODIN_INTERNAL 315 | PROJK 316 | 0036 317 | PS_POSID 318 | 0 319 | E 320 | 321 | 322 | ZODIN_INTERNAL 323 | VBEL2 324 | 0037 325 | VBELN_VA 326 | 0 327 | E 328 | 329 | 330 | ZODIN_INTERNAL 331 | POSN2 332 | 0038 333 | POSNR_VA 334 | 0 335 | E 336 | 337 | 338 | ZODIN_INTERNAL 339 | PRZNR 340 | 0039 341 | CO_PRZNR 342 | 0 343 | E 344 | 345 | 346 | ZODIN_INTERNAL 347 | ANLN1 348 | 0040 349 | ANLN1 350 | 0 351 | E 352 | 353 | 354 | ZODIN_INTERNAL 355 | ANLN2 356 | 0041 357 | ANLN2 358 | 0 359 | E 360 | 361 | 362 | ZODIN_INTERNAL 363 | VBUND 364 | 0042 365 | RASSC 366 | 0 367 | E 368 | 369 | 370 | ZODIN_INTERNAL 371 | EBELN 372 | 0043 373 | EBELN 374 | 0 375 | D 376 | E 377 | 378 | 379 | ZODIN_INTERNAL 380 | EBELP 381 | 0044 382 | EBELP 383 | 0 384 | E 385 | 386 | 387 | ZODIN_INTERNAL 388 | MENGE 389 | 0045 390 | MENGE_D 391 | 0 392 | ZODIN_INTERNAL 393 | MEINS 394 | E 395 | 396 | 397 | ZODIN_INTERNAL 398 | MEINS 399 | 0046 400 | MEINS 401 | 0 402 | E 403 | 404 | 405 | ZODIN_INTERNAL 406 | MANSP 407 | 0047 408 | MANSP 409 | 0 410 | E 411 | 412 | 413 | ZODIN_INTERNAL 414 | LANDL 415 | 0048 416 | LANDL 417 | 0 418 | E 419 | 420 | 421 | ZODIN_INTERNAL 422 | UMSKZ 423 | 0049 424 | UMSKZ 425 | 0 426 | E 427 | 428 | 429 | ZODIN_INTERNAL 430 | DOC_STATUS 431 | 0050 432 | BAPI_ACC_DOC_STATUS 433 | 0 434 | X 435 | F 436 | E 437 | 438 | 439 | ZODIN_INTERNAL 440 | GLVOR 441 | 0051 442 | GLVOR 443 | 0 444 | E 445 | 446 | 447 | ZODIN_INTERNAL 448 | BVTYP 449 | 0052 450 | BVTYP 451 | 0 452 | E 453 | 454 | 455 | ZODIN_INTERNAL 456 | REBZG 457 | 0053 458 | REBZG 459 | 0 460 | E 461 | 462 | 463 | ZODIN_INTERNAL 464 | REBZJ 465 | 0054 466 | REBZJ 467 | 0 468 | E 469 | 470 | 471 | ZODIN_INTERNAL 472 | REBZZ 473 | 0055 474 | REBZZ 475 | 0 476 | E 477 | 478 | 479 | ZODIN_INTERNAL 480 | BSCHL 481 | 0056 482 | BSCHL 483 | 0 484 | E 485 | 486 | 487 | ZODIN_INTERNAL 488 | KUNNR_GL 489 | 0057 490 | KUNNR 491 | 0 492 | D 493 | E 494 | 495 | 496 | ZODIN_INTERNAL 497 | LIFNR_GL 498 | 0058 499 | LIFNR 500 | 0 501 | D 502 | E 503 | 504 | 505 | ZODIN_INTERNAL 506 | PRCTR 507 | 0059 508 | PRCTR 509 | 0 510 | D 511 | E 512 | 513 | 514 | ZODIN_INTERNAL 515 | CUSTOM1 516 | E 517 | 0060 518 | 0 519 | g 520 | 000008 521 | STRG 522 | STRG 523 | 524 | 525 | ZODIN_INTERNAL 526 | CUSTOM2 527 | E 528 | 0061 529 | 0 530 | g 531 | 000008 532 | STRG 533 | STRG 534 | 535 | 536 | ZODIN_INTERNAL 537 | CUSTOM3 538 | E 539 | 0062 540 | 0 541 | g 542 | 000008 543 | STRG 544 | STRG 545 | 546 | 547 | ZODIN_INTERNAL 548 | CUSTOM4 549 | E 550 | 0063 551 | 0 552 | g 553 | 000008 554 | STRG 555 | STRG 556 | 557 | 558 | ZODIN_INTERNAL 559 | CUSTOM5 560 | E 561 | 0064 562 | 0 563 | g 564 | 000008 565 | STRG 566 | STRG 567 | 568 | 569 | ZODIN_INTERNAL 570 | CUSTOM6 571 | E 572 | 0065 573 | 0 574 | g 575 | 000008 576 | STRG 577 | STRG 578 | 579 | 580 | ZODIN_INTERNAL 581 | CUSTOM7 582 | E 583 | 0066 584 | 0 585 | g 586 | 000008 587 | STRG 588 | STRG 589 | 590 | 591 | ZODIN_INTERNAL 592 | CUSTOM8 593 | E 594 | 0067 595 | 0 596 | g 597 | 000008 598 | STRG 599 | STRG 600 | 601 | 602 | ZODIN_INTERNAL 603 | CUSTOM9 604 | E 605 | 0068 606 | 0 607 | g 608 | 000008 609 | STRG 610 | STRG 611 | 612 | 613 | ZODIN_INTERNAL 614 | CUSTOM10 615 | E 616 | 0069 617 | 0 618 | g 619 | 000008 620 | STRG 621 | STRG 622 | 623 | 624 | 625 | 626 | 627 | -------------------------------------------------------------------------------- /src/zodin_internal_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_INTERNAL_T 7 | E 8 | ZODIN_INTERNAL 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | Internal 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/zodin_key_value.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_KEY_VALUE 7 | INTTAB 8 | 4 9 | 10 | 11 | 12 | ZODIN_KEY_VALUE 13 | LINE 14 | 0001 15 | 0 16 | X 17 | 000004 18 | INT4 19 | 000010 20 | INT4 21 | 22 | 23 | ZODIN_KEY_VALUE 24 | KEY 25 | 0002 26 | 0 27 | g 28 | 000008 29 | STRG 30 | STRG 31 | 32 | 33 | ZODIN_KEY_VALUE 34 | VALUE 35 | 0003 36 | 0 37 | g 38 | 000008 39 | STRG 40 | STRG 41 | 42 | 43 | 44 | D 45 | 46 | 47 | 48 | D 49 | Key-Value-Paare 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/zodin_key_value_t.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_KEY_VALUE_T 7 | E 8 | ZODIN_KEY_VALUE 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | Key/Value 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/zodin_multifile.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report Z_ODIN_MULTIFILE 3 | *&---------------------------------------------------------------------* 4 | *MIT License 5 | * 6 | *Copyright (c) 2021 71TECH 7 | * 8 | *Permission is hereby granted, free of charge, to any person obtaining a copy 9 | *of this software and associated documentation files (the "Software"), to deal 10 | *in the Software without restriction, including without limitation the rights 11 | *to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | *copies of the Software, and to permit persons to whom the Software is 13 | *furnished to do so, subject to the following conditions: 14 | * 15 | *The above copyright notice and this permission notice shall be included in all 16 | *copies or substantial portions of the Software. 17 | * 18 | *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | *SOFTWARE. 25 | *&---------------------------------------------------------------------* 26 | REPORT zodin_multifile LINE-SIZE 1023. 27 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-bl1. 28 | PARAMETERS: p_srdir TYPE eps2filnam DEFAULT '/location/of/input/files/on/server' LOWER CASE, 29 | p_bkdir TYPE string LOWER CASE, 30 | p_sfname TYPE string LOWER CASE DEFAULT '*' OBLIGATORY. 31 | SELECTION-SCREEN COMMENT /1(70) TEXT-c02. 32 | SELECTION-SCREEN COMMENT /1(70) TEXT-c03. 33 | SELECTION-SCREEN END OF BLOCK b1. 34 | 35 | SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE TEXT-bl0. 36 | PARAMETERS: p_skprow TYPE i DEFAULT 0. 37 | SELECTION-SCREEN COMMENT 50(70) TEXT-c01 FOR FIELD p_skprow. 38 | SELECTION-SCREEN END OF BLOCK b0. 39 | 40 | SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-bl2. 41 | PARAMETERS: p_sep(1) DEFAULT ';', 42 | p_delim(1) DEFAULT '"', 43 | p_1000(1) DEFAULT '.', 44 | p_dec(1) DEFAULT ','. 45 | SELECTION-SCREEN END OF BLOCK b2. 46 | 47 | START-OF-SELECTION. 48 | WRITE: / 'PROTOCOL'. 49 | DATA error TYPE string. 50 | DATA files TYPE TABLE OF eps2fili. 51 | CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING' 52 | EXPORTING 53 | iv_dir_name = p_srdir 54 | TABLES 55 | dir_list = files 56 | EXCEPTIONS 57 | invalid_eps_subdir = 1 58 | sapgparam_failed = 2 59 | build_directory_failed = 3 60 | no_authorization = 4 61 | read_directory_failed = 5 62 | too_many_read_errors = 6 63 | empty_directory_list = 7 64 | OTHERS = 8. 65 | IF sy-subrc <> 0. 66 | CASE sy-subrc. 67 | WHEN 1. 68 | error = 'invalid_eps_subdir'. 69 | WHEN 2. 70 | error = 'sapgparam_failed'. 71 | WHEN 3. 72 | error = 'build_directory_failed'. 73 | WHEN 4. 74 | error = 'no_authorization'. 75 | WHEN 5. 76 | error = 'read_directory_failed'. 77 | WHEN 6. 78 | error = 'too_many_read_errors'. 79 | WHEN 7. 80 | error = 'empty_directory_list'. 81 | WHEN 8. 82 | error = 'other_error'. 83 | ENDCASE. 84 | IF sy-batch IS NOT INITIAL. 85 | MESSAGE s006(zodin) WITH error. 86 | ELSE. 87 | MESSAGE s006(zodin) WITH error DISPLAY LIKE 'E'. 88 | LEAVE LIST-PROCESSING. 89 | ENDIF. 90 | ENDIF. 91 | DATA srpath TYPE string. 92 | DATA bkpath TYPE string. 93 | DATA info TYPE string. 94 | LOOP AT files INTO DATA(files_s). 95 | DATA(tabix) = sy-tabix. 96 | IF files_s-name NP p_sfname. 97 | info = |Ignoring { files_s-name } because it doesn't cover pattern { p_sfname }|. 98 | IF sy-batch = abap_true. 99 | MESSAGE info TYPE 'S'. 100 | ELSE. 101 | WRITE: / info. 102 | ENDIF. 103 | CONTINUE. 104 | ENDIF. 105 | srpath = p_srdir && '/' && files_s-name. 106 | bkpath = p_bkdir && '/' && files_s-name. 107 | info = |Processing { srpath }...|. 108 | MESSAGE info TYPE 'S'. 109 | IF sy-batch = abap_false. 110 | FORMAT INTENSIFIED ON. 111 | WRITE / info. 112 | FORMAT INTENSIFIED OFF. 113 | ENDIF. 114 | TRY. 115 | DATA(cl_fin_doc) = NEW zcl_odin_posting( 116 | csv_separator = p_sep 117 | csv_delimiter = p_delim 118 | csv_decimal_separator = p_dec 119 | csv_thousands_separator = p_1000 120 | path_server = srpath 121 | path_server_backup = bkpath 122 | simulation = abap_false 123 | skip_rows = p_skprow ). 124 | CATCH zcx_odin INTO DATA(cx_odin). 125 | info = cx_odin->get_text( ). 126 | IF sy-batch = abap_true. 127 | MESSAGE info TYPE 'S'. 128 | ELSE. 129 | WRITE: / info. 130 | ENDIF. 131 | CONTINUE. 132 | ENDTRY. 133 | TRY. 134 | cl_fin_doc->post( ). 135 | CATCH zcx_odin INTO cx_odin. 136 | info = cx_odin->get_text( ). 137 | IF sy-batch = abap_true. 138 | MESSAGE info TYPE 'S'. 139 | ELSE. 140 | WRITE / info. 141 | ENDIF. 142 | ENDTRY. 143 | cl_fin_doc->display( report = 'ZODIN' pfstatus = 'ALV2' ). 144 | ENDLOOP. 145 | -------------------------------------------------------------------------------- /src/zodin_multifile.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_MULTIFILE 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | I 15 | BL0 16 | Settings 17 | 18 18 | 19 | 20 | I 21 | BL1 22 | Files on server 23 | 25 24 | 25 | 26 | I 27 | BL2 28 | Options for csv files 29 | 50 30 | 31 | 32 | I 33 | C01 34 | (Number of lines before heading line) 35 | 74 36 | 37 | 38 | I 39 | C02 40 | Multifiles in dialog: 41 | 70 42 | 43 | 44 | I 45 | C03 46 | After first list is displayed, continue with back button 47 | 132 48 | 49 | 50 | R 51 | Process multiple files server-side 52 | 34 53 | 54 | 55 | S 56 | P_1000 57 | Thousands separator 58 | 27 59 | 60 | 61 | S 62 | P_BKDIR 63 | Directory server backup 64 | 31 65 | 66 | 67 | S 68 | P_DEC 69 | Decimal separator 70 | 25 71 | 72 | 73 | S 74 | P_DELIM 75 | Delimiter 76 | 17 77 | 78 | 79 | S 80 | P_SEP 81 | Separator 82 | 17 83 | 84 | 85 | S 86 | P_SFNAME 87 | File name (Wildcard * ok) 88 | 35 89 | 90 | 91 | S 92 | P_SKPROW 93 | Skip rows 94 | 17 95 | 96 | 97 | S 98 | P_SRDIR 99 | Directory server 100 | 24 101 | 102 | 103 | 104 | 105 | D 106 | 107 | 108 | I 109 | BL0 110 | Einstellungen 111 | 18 112 | 113 | 114 | I 115 | BL1 116 | Dateien auf Server 117 | 25 118 | 119 | 120 | I 121 | BL2 122 | Optionen für csv-Dateien 123 | 50 124 | 125 | 126 | I 127 | C01 128 | (Anzahl Zeilen vor Überschriftszeile) 129 | 74 130 | 131 | 132 | I 133 | C02 134 | Multi-Dateien im Dialog: 135 | 70 136 | 137 | 138 | I 139 | C03 140 | Nach Anzeige der ersten Liste mit Back-Button fortsetzen 141 | 132 142 | 143 | 144 | R 145 | Multidateiverarbeitung (serverseitig) 146 | 70 147 | 148 | 149 | S 150 | P_1000 151 | Tausendertrennzeichen 152 | 38 153 | 154 | 155 | S 156 | P_BKDIR 157 | Verzeichnis Server Backup 158 | 38 159 | 160 | 161 | S 162 | P_DEC 163 | Dezimaltrennzeichen 164 | 38 165 | 166 | 167 | S 168 | P_DELIM 169 | Delimiter 170 | 38 171 | 172 | 173 | S 174 | P_SEP 175 | Trennzeichen 176 | 38 177 | 178 | 179 | S 180 | P_SFNAME 181 | Dateiname (Wildcard * ok) 182 | 38 183 | 184 | 185 | S 186 | P_SKPROW 187 | Zeilen überspringen 188 | 38 189 | 190 | 191 | S 192 | P_SRDIR 193 | Verzeichnis Server 194 | 38 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | RE 203 | ZODIN_MULTIFILE 204 | E 205 | E 206 | 0002 207 | X 208 | 00004 209 | A 210 | 211 | 212 | DOKU 213 | ZODIN_MULTIFILE 214 | RE 215 | E 216 | S_DOCU_SHOW 217 | S_DOCUS1 218 | 00002 219 | 072 220 | 221 | 222 | 223 | U1 224 | &PURPOSE& 225 | 226 | 227 | AS 228 | See https://github.com/71tech/ODIN 229 | 230 | 231 | U1 232 | &INTEGRATION& 233 | 234 | 235 | AS 236 | 237 | 238 | U1 239 | &PREREQUISITES& 240 | 241 | 242 | AS 243 | 244 | 245 | U1 246 | &FEATURES& 247 | 248 | 249 | AS 250 | 251 | 252 | U2 253 | &SELECTION& 254 | 255 | 256 | AS 257 | 258 | 259 | U2 260 | &STANDARD_VARIANTS& 261 | 262 | 263 | AS 264 | 265 | 266 | U2 267 | &OUTPUT& 268 | 269 | 270 | AS 271 | 272 | 273 | U1 274 | &ACTIVITIES& 275 | 276 | 277 | AS 278 | 279 | 280 | U1 281 | &EXAMPLE& 282 | 283 | 284 | AS 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | -------------------------------------------------------------------------------- /src/zodin_strategy.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZODIN_STRATEGY 7 | E 8 | 40 9 | 10 10 | 20 11 | 40 12 | Strategy 13 | Strategy 14 | Strategy 15 | Strategy 16 | Strategy 17 | E 18 | CHAR 19 | 000040 20 | 000040 21 | 22 | 23 | D 24 | 25 | 26 | 27 | D 28 | Strategie 29 | Strategie 30 | Strategie 31 | Strategie 32 | Strategie 33 | 34 | 35 | 36 | 37 | 38 | --------------------------------------------------------------------------------