├── Cenário de criação e modificação de um App Fiori Z.pdf ├── EF 0001 - Gerenciamento de Cliente.pdf ├── ET 0001 - Sistema de Gestão de Clientes.pdf ├── LICENSE ├── Lista de Classes.txt ├── Módulo MM - Introdução.pdf ├── Módulo SD - Introdução.pdf ├── README.md ├── Resumo mapeamento portas.pdf ├── alv ├── ZCL_ABSTRACT_ALV_V1.abap ├── ZCX_EXCEPTION.abap ├── ZTESTE.abap ├── ZTESTE_CL1.abap ├── ZTESTE_CLA.abap ├── ZTESTE_E01.abap ├── ZTESTE_LOP.abap ├── ZTESTE_SOS.abap └── ZTESTE_TOP.abap ├── bapi ├── BAPI_GOODSMVT_CREATE.abap ├── ZBAPI_MATERIAL_SAVEDATA.abap ├── ZBAPI_SALESORDER_CHANGE1.abap ├── ZCAD_CLIENTE_ECC.abap ├── ZCRIAR_OV.abap └── ZCRIAR_VL.abap ├── class ├── ZCL_BAL_LOG.abap ├── ZCL_CSV_UTILS.abap ├── ZCL_DEFAULT_ALV_V1.abap ├── ZCL_DMS_UTILS.abap ├── ZCL_ECC_TO_S4HANA.abap ├── ZCL_FILE_UTILS.abap ├── ZCL_GOS_UTILS.abap ├── ZCL_HTTP_UTILS.abap ├── ZCL_JSON_UTILS.abap ├── ZCL_REST_SERVER.abap ├── ZCL_SMARTFORMS_UTILS.abap ├── ZCL_TEXTAREA.abap ├── ZCL_TEXT_UTILS.abap ├── ZCL_TREE.abap ├── ZCL_WHERE_USED_LIST.abap ├── ZCL_XLS_UTILS.abap └── ZCL_XML_UTILS.abap ├── jco ├── DEV.jcoDestination ├── Test.java ├── ZFM_TEST_RFC.abap └── leiame.txt ├── minisap-fix ├── install-modificado.sh └── install-original.sh ├── node-rfc ├── ZFM_TEST_RFC.abap ├── index.js ├── leiame.txt └── sapnwrfc.ini ├── php7-sapnwrfc ├── ZFM_TEST_RFC.abap ├── index.php ├── instalação-configuração-servidor-web.txt └── leiame.txt ├── program ├── ALV com tela proposta.abap ├── ZABRE_PERIODO.abap ├── ZALV_BASICO.abap ├── ZALV_BASICO2.abap ├── ZAUTHORITY_CHECK.abap ├── ZBAPI.abap ├── ZBP_CRIAR_PF.abap ├── ZCADBP_PJ.abap ├── ZDOWNLOAD.abap ├── ZFIND_TCODE_BY_OBJECTLIST.abap ├── ZOBJETO_BLOQUEIO.abap ├── ZOBJETO_TEXTO.abap ├── ZREFLEXAO.abap ├── ZSNRO.abap ├── ZSTVARV.abap ├── ZSUBROUTINE_POOL.abap ├── ZTADIR_REPORT.abap ├── ZTESTE_CSV.abap ├── ZTESTE_XLS.abap ├── ZTESTE_XML.abap ├── ZTESTE_XML_TRANSF.abap ├── ZTEXTAREA.abap ├── ZTREE.abap └── ZVARIAVEIS_GENERICAS.abap └── youtube ├── .gitkeep ├── bopf_crud_api.class.abap ├── bopf_crud_api.report.abap ├── curso_abap_141.determination.abap ├── curso_abap_141.validation.abap ├── curso_abap_151_determination_item.abap ├── curso_abap_151_determination_root.abap ├── curso_abap_153_acao_root.abap ├── curso_abap_154_validacao.abap ├── curso_abap_155_ZBOPF.abap └── curso_abap_155_ZCL_BOPF_SO_API.abap /Cenário de criação e modificação de um App Fiori Z.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vcd94xt10z/sap/21a74f908ca2be832cc39a5074fee3171933b344/Cenário de criação e modificação de um App Fiori Z.pdf -------------------------------------------------------------------------------- /EF 0001 - Gerenciamento de Cliente.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vcd94xt10z/sap/21a74f908ca2be832cc39a5074fee3171933b344/EF 0001 - Gerenciamento de Cliente.pdf -------------------------------------------------------------------------------- /ET 0001 - Sistema de Gestão de Clientes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vcd94xt10z/sap/21a74f908ca2be832cc39a5074fee3171933b344/ET 0001 - Sistema de Gestão de Clientes.pdf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Vinicius 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 | -------------------------------------------------------------------------------- /Lista de Classes.txt: -------------------------------------------------------------------------------- 1 | Classes para operações de CRUD como: insert, update, delete, filter e get. 2 | - ZCL_ZION_CUSTOMER: Cliente 3 | - ZCL_ZION_SUPPLIER: Fornecedor 4 | - ZCL_ZION_PRODUCT: Produto 5 | - ZCL_ZION_PO: Ordem de Compra 6 | - ZCL_ZION_VA: Ordem de Venda 7 | - ZCL_ZION_VL: Remessa 8 | - ZCL_ZION_VF: Faturamento 9 | 10 | Classes utilitárias 11 | - ZCL_ZION_ABSTRACT_ALV: Classe base para ALV 12 | - ZCL_ZION_TEXT_FORMATTER: Formatação e interpretação de textos 13 | - ZCL_ZION_METADATA: Extração de metadados 14 | -------------------------------------------------------------------------------- /Módulo MM - Introdução.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vcd94xt10z/sap/21a74f908ca2be832cc39a5074fee3171933b344/Módulo MM - Introdução.pdf -------------------------------------------------------------------------------- /Módulo SD - Introdução.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vcd94xt10z/sap/21a74f908ca2be832cc39a5074fee3171933b344/Módulo SD - Introdução.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SAP 2 | Repositório para armezenar objetos desenvolvidos na linguagem ABAP, documentação etc. 3 | 4 | Acesse a Wiki https://github.com/vcd94xt10z/sap/wiki 5 | 6 | ## Como importar uma classe 7 | 8 | 1) Crie uma classe com o nome especificado na transação SE24 9 | 2) Clique no botão "Baseado em texto fonte" 10 | 3) Cole o conteúdo da classe e salve 11 | 12 | ## Como exportar uma classe 13 | 14 | 1) Entre na transação SE24 e informe o nome da classe, depois clique em Exibir 15 | 2) Clique no botão "Baseado em texto fonte" 16 | 3) Copie o conteúdo da classe e envie para o repositório com o nome do arquivo sendo o nome da classe com a extensão ".abap" 17 | -------------------------------------------------------------------------------- /Resumo mapeamento portas.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vcd94xt10z/sap/21a74f908ca2be832cc39a5074fee3171933b344/Resumo mapeamento portas.pdf -------------------------------------------------------------------------------- /alv/ZCX_EXCEPTION.abap: -------------------------------------------------------------------------------- 1 | Atributo: MESSAGE 2 | Tipo: Instance Attribute 3 | Visibilidade: Public 4 | Tipo referência: string 5 | 6 | Método GET_MESSAGE para retornar o atributo MESSAGE -------------------------------------------------------------------------------- /alv/ZTESTE.abap: -------------------------------------------------------------------------------- 1 | REPORT zteste. 2 | INCLUDE zteste_top. 3 | INCLUDE zteste_cla. 4 | INCLUDE zteste_cl1. 5 | INCLUDE zteste_e01. 6 | INCLUDE zteste_lop. 7 | INCLUDE zteste_sos. 8 | -------------------------------------------------------------------------------- /alv/ZTESTE_CL1.abap: -------------------------------------------------------------------------------- 1 | CLASS gcl_alv1 IMPLEMENTATION. 2 | method handle_data_changed. 3 | " modificar (opcional) 4 | ENDMETHOD. 5 | method handle_data_changed_finished. 6 | " modificar (opcional) 7 | ENDMETHOD. 8 | method handle_double_click. 9 | " modificar (opcional) 10 | ENDMETHOD. 11 | method handle_enter. 12 | " modificar (opcional) 13 | ENDMETHOD. 14 | method handle_hotspot_click. 15 | " modificar (opcional) 16 | ENDMETHOD. 17 | method fill_fieldcat. " (ponto 2) 18 | DATA ls_fieldcat TYPE LVC_S_FCAT. 19 | 20 | CLEAR ls_fieldcat. 21 | ls_fieldcat-fieldname = 'ID'. 22 | ls_fieldcat-key = 'X'. 23 | ls_fieldcat-scrtext_s = 'Id'. 24 | ls_fieldcat-scrtext_m = 'Id'. 25 | ls_fieldcat-scrtext_l = 'Id'. 26 | APPEND ls_fieldcat TO mt_fieldcat. 27 | 28 | CLEAR ls_fieldcat. 29 | ls_fieldcat-fieldname = 'NAME'. 30 | ls_fieldcat-scrtext_s = 'Nome'. 31 | ls_fieldcat-scrtext_m = 'Nome'. 32 | ls_fieldcat-scrtext_l = 'Nome'. 33 | "ls_fieldcat-edit = 'X'. 34 | ls_fieldcat-outputlen = 40. 35 | APPEND ls_fieldcat TO mt_fieldcat. 36 | ENDMETHOD. 37 | method fill_layout. " modificar (opcional) 38 | super->fill_layout( ). 39 | ms_layout-zebra = 'X'. 40 | ms_layout-no_toolbar = ''. 41 | 42 | " Legenda 43 | " A – Multiple columns, multiple rows with selection buttons. 44 | " B – Simple selection, listbox, Single row/column 45 | " C – Multiple rows without buttons 46 | " D – Multiple rows with buttons and select all ICON 47 | ms_layout-sel_mode = 'A'. 48 | ENDMETHOD. 49 | ENDCLASS. -------------------------------------------------------------------------------- /alv/ZTESTE_CLA.abap: -------------------------------------------------------------------------------- 1 | CLASS gcl_alv1 DEFINITION INHERITING FROM zcl_abstract_alv_v1. 2 | PUBLIC SECTION. 3 | METHODS handle_data_changed REDEFINITION. 4 | METHODS handle_data_changed_finished REDEFINITION. 5 | METHODS handle_double_click REDEFINITION. 6 | METHODS handle_enter REDEFINITION. 7 | METHODS handle_hotspot_click REDEFINITION. 8 | METHODS fill_fieldcat REDEFINITION. 9 | METHODS fill_layout REDEFINITION. 10 | ENDCLASS. -------------------------------------------------------------------------------- /alv/ZTESTE_E01.abap: -------------------------------------------------------------------------------- 1 | MODULE pbo_9000 OUTPUT. 2 | SET PF-STATUS 'S9000'. 3 | SET TITLEBAR 'T9000'. 4 | go_alv1->callme_in_pbo( ). 5 | ENDMODULE. 6 | MODULE pai_9000 INPUT. 7 | CASE sy-ucomm. 8 | WHEN 'BACK' OR 'UP' OR 'CANCEL'. 9 | LEAVE TO SCREEN 0. 10 | ENDCASE. 11 | ENDMODULE. -------------------------------------------------------------------------------- /alv/ZTESTE_LOP.abap: -------------------------------------------------------------------------------- 1 | LOAD-OF-PROGRAM. 2 | go_alv1 = new gcl_alv1( 3 | id_container_name = 'ALV1' 4 | id_tablename = 'gt_alv1' 5 | ). -------------------------------------------------------------------------------- /alv/ZTESTE_SOS.abap: -------------------------------------------------------------------------------- 1 | START-OF-SELECTION. 2 | SELECT * 3 | INTO TABLE gt_alv1 4 | FROM sairport. " (ponto 3) 5 | 6 | CALL SCREEN 9000. -------------------------------------------------------------------------------- /alv/ZTESTE_TOP.abap: -------------------------------------------------------------------------------- 1 | CLASS gcl_alv1 DEFINITION DEFERRED. 2 | 3 | DATA gt_alv1 TYPE STANDARD TABLE OF sairport. " modificar (ponto 1) 4 | DATA gs_alv1 LIKE LINE OF gt_alv1. 5 | DATA go_alv1 TYPE REF TO gcl_alv1. -------------------------------------------------------------------------------- /bapi/BAPI_GOODSMVT_CREATE.abap: -------------------------------------------------------------------------------- 1 | REPORT ZBAPI_GOODSMVT_CREATE. 2 | 3 | START-OF-SELECTION. 4 | "PERFORM test. 5 | PERFORM call_bapi. 6 | 7 | FORM call_bapi. 8 | DATA: ls_goodsmvt_header TYPE bapi2017_gm_head_01. 9 | DATA: ls_goodsmvt_code TYPE bapi2017_gm_code. 10 | DATA: lt_goodsmvt_item TYPE STANDARD TABLE OF bapi2017_gm_item_create. 11 | DATA: ls_goodsmvt_item TYPE bapi2017_gm_item_create. 12 | DATA: lt_return TYPE STANDARD TABLE OF bapiret2. 13 | DATA: ls_return TYPE bapiret2. 14 | 15 | DATA: ls_goodsmvt_headret TYPE bapi2017_gm_head_ret. 16 | DATA: ld_materialdocument TYPE mblnr. 17 | DATA: ld_matdocumentyear TYPE mjahr. 18 | 19 | DATA: ld_error TYPE char1. 20 | 21 | CLEAR ls_goodsmvt_header. 22 | ls_goodsmvt_header-pstng_date = sy-datum. 23 | ls_goodsmvt_header-doc_date = sy-datum. 24 | ls_goodsmvt_header-ref_doc_no = ``. 25 | ls_goodsmvt_header-bill_of_lading = ``. 26 | ls_goodsmvt_header-gr_gi_slip_no = ``. 27 | ls_goodsmvt_header-pr_uname = sy-uname. 28 | ls_goodsmvt_header-header_txt = `Test`. 29 | ls_goodsmvt_header-ver_gr_gi_slip = ``. 30 | ls_goodsmvt_header-ver_gr_gi_slipx = ``. 31 | ls_goodsmvt_header-ext_wms = ``. 32 | ls_goodsmvt_header-ref_doc_no_long = ``. 33 | ls_goodsmvt_header-bill_of_lading_long = ``. 34 | ls_goodsmvt_header-bar_code = ``. 35 | 36 | " 01 => 501, 511 37 | " 03 => 262, 552, 992 38 | " 05 => 262, 501, 511 39 | " 06 => 262, 501, 511, 552, 992 40 | 41 | CLEAR ls_goodsmvt_code. 42 | ls_goodsmvt_code-gm_code = `01`. 43 | 44 | CLEAR lt_goodsmvt_item. 45 | 46 | CLEAR ls_goodsmvt_item. 47 | ls_goodsmvt_item-material = ``. 48 | ls_goodsmvt_item-plant = ``. 49 | ls_goodsmvt_item-stge_loc = ``. 50 | ls_goodsmvt_item-move_type = `501`. 51 | ls_goodsmvt_item-entry_qnt = `2096`. 52 | ls_goodsmvt_item-entry_uom = `AF`. 53 | APPEND ls_goodsmvt_item TO lt_goodsmvt_item. 54 | 55 | CLEAR ls_goodsmvt_headret. 56 | CLEAR ld_materialdocument. 57 | CLEAR ld_matdocumentyear. 58 | CLEAR lt_return. 59 | 60 | CALL FUNCTION 'BAPI_GOODSMVT_CREATE' 61 | EXPORTING 62 | goodsmvt_header = ls_goodsmvt_header 63 | goodsmvt_code = ls_goodsmvt_code 64 | testrun = ' ' 65 | IMPORTING 66 | goodsmvt_headret = ls_goodsmvt_headret 67 | materialdocument = ld_materialdocument 68 | matdocumentyear = ld_matdocumentyear 69 | TABLES 70 | goodsmvt_item = lt_goodsmvt_item 71 | return = lt_return. 72 | 73 | ld_error = ``. 74 | LOOP AT lt_return INTO ls_return. 75 | IF ls_return-type = `E` OR ls_return-type = `X` OR ls_return-type = `A`. 76 | ld_error = `X`. 77 | EXIT. 78 | ENDIF. 79 | ENDLOOP. 80 | 81 | IF ld_error <> `X`. 82 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 83 | EXPORTING 84 | wait = `X`. 85 | 86 | "BREAK-POINT. 87 | ELSE. 88 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 89 | ENDIF. 90 | ENDFORM. 91 | FORM test. 92 | DATA: ls_goodsmvt_header TYPE bapi2017_gm_head_01. 93 | DATA: ls_goodsmvt_code TYPE bapi2017_gm_code. 94 | DATA: lt_goodsmvt_item TYPE STANDARD TABLE OF bapi2017_gm_item_create. 95 | DATA: ls_goodsmvt_item TYPE bapi2017_gm_item_create. 96 | DATA: lt_return TYPE STANDARD TABLE OF bapiret2. 97 | DATA: ls_return TYPE bapiret2. 98 | 99 | DATA: ls_goodsmvt_headret TYPE bapi2017_gm_head_ret. 100 | DATA: ld_materialdocument TYPE mblnr. 101 | DATA: ld_matdocumentyear TYPE mjahr. 102 | 103 | DATA: lt_t158g TYPE STANDARD TABLE OF t158g. 104 | DATA: ls_t158g TYPE t158g. 105 | DATA: lt_t156 TYPE STANDARD TABLE OF t156. 106 | DATA: ls_t156 TYPE t156. 107 | DATA: ld_error TYPE char1. 108 | DATA: lt_bwart TYPE STANDARD TABLE OF bwart. 109 | DATA: lt_message TYPE STANDARD TABLE OF string. 110 | DATA: ld_message TYPE string. 111 | 112 | SELECT * 113 | INTO TABLE lt_t158g 114 | FROM t158g. 115 | 116 | SELECT * 117 | INTO TABLE lt_t156 118 | FROM t156. 119 | 120 | CLEAR lt_bwart. 121 | CLEAR lt_message. 122 | 123 | LOOP AT lt_t158g INTO ls_t158g. 124 | LOOP AT lt_t156 INTO ls_t156. 125 | CLEAR ls_goodsmvt_header. 126 | ls_goodsmvt_header-pstng_date = sy-datum. 127 | ls_goodsmvt_header-doc_date = sy-datum. 128 | ls_goodsmvt_header-ref_doc_no = ``. 129 | ls_goodsmvt_header-bill_of_lading = ``. 130 | ls_goodsmvt_header-gr_gi_slip_no = ``. 131 | ls_goodsmvt_header-pr_uname = sy-uname. 132 | ls_goodsmvt_header-header_txt = `Test`. 133 | ls_goodsmvt_header-ver_gr_gi_slip = ``. 134 | ls_goodsmvt_header-ver_gr_gi_slipx = ``. 135 | ls_goodsmvt_header-ext_wms = ``. 136 | ls_goodsmvt_header-ref_doc_no_long = ``. 137 | ls_goodsmvt_header-bill_of_lading_long = ``. 138 | ls_goodsmvt_header-bar_code = ``. 139 | 140 | CLEAR ls_goodsmvt_code. 141 | ls_goodsmvt_code-gm_code = ls_t158g-gmcode. 142 | 143 | CLEAR lt_goodsmvt_item. 144 | 145 | CLEAR ls_goodsmvt_item. 146 | ls_goodsmvt_item-material = ``. 147 | ls_goodsmvt_item-plant = ``. 148 | ls_goodsmvt_item-stge_loc = ``. 149 | "ls_goodsmvt_item-move_type = `101`. 150 | ls_goodsmvt_item-move_type = ls_t156-bwart. 151 | ls_goodsmvt_item-entry_qnt = `2096`. 152 | APPEND ls_goodsmvt_item TO lt_goodsmvt_item. 153 | 154 | CLEAR ls_goodsmvt_headret. 155 | CLEAR ld_materialdocument. 156 | CLEAR ld_matdocumentyear. 157 | CLEAR lt_return. 158 | 159 | CALL FUNCTION 'BAPI_GOODSMVT_CREATE' 160 | EXPORTING 161 | goodsmvt_header = ls_goodsmvt_header 162 | goodsmvt_code = ls_goodsmvt_code 163 | testrun = 'X' 164 | IMPORTING 165 | goodsmvt_headret = ls_goodsmvt_headret 166 | materialdocument = ld_materialdocument 167 | matdocumentyear = ld_matdocumentyear 168 | TABLES 169 | goodsmvt_item = lt_goodsmvt_item 170 | return = lt_return. 171 | 172 | ld_error = ``. 173 | LOOP AT lt_return INTO ls_return. 174 | IF ls_return-type = `E` OR ls_return-type = `X` OR ls_return-type = `A`. 175 | ld_error = `X`. 176 | EXIT. 177 | ENDIF. 178 | ENDLOOP. 179 | 180 | IF ld_error <> `X`. 181 | ld_message = |GM Code { ls_t158g-gmcode } / Movement Type = { ls_t156-bwart }|. 182 | APPEND ld_message TO lt_message. 183 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 184 | ELSE. 185 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 186 | ENDIF. 187 | ENDLOOP. 188 | ENDLOOP. 189 | 190 | BREAK-POINT. 191 | ENDFORM. -------------------------------------------------------------------------------- /bapi/ZBAPI_MATERIAL_SAVEDATA.abap: -------------------------------------------------------------------------------- 1 | REPORT ZBAPI_MATERIAL_SAVEDATA. 2 | 3 | TYPES: BEGIN OF gy_data 4 | , matnr TYPE matnr 5 | , maktx TYPE maktx 6 | , END OF gy_data. 7 | 8 | DATA: lt_data TYPE STANDARD TABLE OF gy_data. 9 | DATA: ls_data TYPE gy_data. 10 | DATA: lt_matnr TYPE STANDARD TABLE OF matnr. 11 | DATA: ld_matnr TYPE matnr. 12 | 13 | FIELD-SYMBOLS: TYPE gy_data. 14 | 15 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 16 | PARAMETERS: p_file(128) TYPE c. 17 | SELECTION-SCREEN END OF BLOCK main. 18 | 19 | AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. 20 | call function 'WS_FILENAME_GET' 21 | exporting 22 | def_filename = `data.xlsx` 23 | def_path = '\' 24 | mask = '.xlsx' 25 | mode = 'O' 26 | title = 'Select filename' 27 | importing 28 | filename = p_file 29 | exceptions 30 | inv_winsys = 01 31 | no_batch = 02 32 | selection_cancel = 03 33 | selection_error = 04. 34 | 35 | START-OF-SELECTION. 36 | CLEAR lt_data. 37 | 38 | zcl_xls_utils=>xls_to_itab( 39 | EXPORTING 40 | xls_file = CONV string( p_file ) 41 | IMPORTING 42 | itab = lt_data 43 | ). 44 | 45 | LOOP AT lt_data ASSIGNING . 46 | SELECT COUNT(*) 47 | FROM mara 48 | WHERE matnr = -matnr. 49 | 50 | IF sy-subrc = 0. 51 | CLEAR -matnr. 52 | CONTINUE. 53 | ENDIF. 54 | ENDLOOP. 55 | DELETE lt_data WHERE matnr = ``. 56 | 57 | LOOP AT lt_data INTO ls_data. 58 | PERFORM execute_bapi USING ls_data. 59 | ENDLOOP. 60 | 61 | FORM execute_bapi USING is_data TYPE gy_data. 62 | DATA: ls_headdata TYPE bapimathead. 63 | DATA: ls_clientdata TYPE bapi_mara. 64 | DATA: ls_clientdatax TYPE bapi_marax. 65 | DATA: ls_plantdata TYPE bapi_marc. 66 | DATA: ls_plantdatax TYPE bapi_marcx. 67 | DATA: ls_storagelocationdata TYPE bapi_mard. 68 | DATA: ls_storagelocationdatax TYPE bapi_mardx. 69 | DATA: ls_return TYPE bapiret2. 70 | DATA: lt_returnmessages TYPE STANDARD TABLE OF bapi_matreturn2. 71 | DATA: ls_returnmessages TYPE bapi_matreturn2. 72 | DATA: lt_materialdescription TYPE STANDARD TABLE OF bapi_makt. 73 | DATA: ls_materialdescription TYPE bapi_makt. 74 | DATA: ld_error TYPE flag. 75 | 76 | CLEAR ls_materialdescription. 77 | ls_materialdescription-langu = sy-langu. 78 | ls_materialdescription-matl_desc = is_data-maktx. 79 | APPEND ls_materialdescription TO lt_materialdescription. 80 | 81 | CLEAR ls_headdata. 82 | ls_headdata-material = is_data-matnr. 83 | ls_headdata-ind_sector = `A`. 84 | ls_headdata-matl_type = `ZABC`. 85 | ls_headdata-basic_view = `X`. 86 | ls_headdata-mrp_view = `X`. 87 | 88 | CLEAR ls_clientdata. 89 | ls_clientdata-base_uom = `CX`. 90 | ls_clientdata-division = `01`. 91 | 92 | CLEAR ls_clientdatax. 93 | ls_clientdatax-base_uom = `X`. 94 | ls_clientdatax-division = `X`. 95 | 96 | CLEAR ls_plantdata. 97 | ls_plantdata-plant = `ZABC`. 98 | ls_plantdata-pur_group = `001`. 99 | ls_plantdata-mrp_type = `Z1`. 100 | ls_plantdata-mrp_ctrler = `001`. 101 | ls_plantdata-lotsizekey = `Z2`. 102 | ls_plantdata-sm_key = `001`. 103 | ls_plantdata-availcheck = `02`. 104 | 105 | CLEAR ls_plantdatax. 106 | ls_plantdatax-plant = `ZABC`. 107 | ls_plantdatax-pur_group = `X`. 108 | ls_plantdatax-mrp_type = `X`. 109 | ls_plantdatax-mrp_ctrler = `X`. 110 | ls_plantdatax-lotsizekey = `X`. 111 | ls_plantdatax-sm_key = `X`. 112 | ls_plantdatax-availcheck = `X`. 113 | 114 | CLEAR ls_storagelocationdata. 115 | ls_storagelocationdata-plant = `ZABC`. 116 | ls_storagelocationdata-stge_loc = `T001`. 117 | 118 | CLEAR ls_storagelocationdatax. 119 | ls_storagelocationdatax-plant = `ZABC`. 120 | ls_storagelocationdatax-stge_loc = `T001`. 121 | 122 | CLEAR ls_return. 123 | CLEAR lt_returnmessages. 124 | 125 | CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' 126 | EXPORTING 127 | headdata = ls_headdata 128 | clientdata = ls_clientdata 129 | clientdatax = ls_clientdatax 130 | plantdata = ls_plantdata 131 | plantdatax = ls_plantdatax 132 | * FORECASTPARAMETERS = 133 | * FORECASTPARAMETERSX = 134 | * PLANNINGDATA = 135 | * PLANNINGDATAX = 136 | storagelocationdata = ls_storagelocationdata 137 | storagelocationdatax = ls_storagelocationdatax 138 | * VALUATIONDATA = 139 | * VALUATIONDATAX = 140 | * WAREHOUSENUMBERDATA = 141 | * WAREHOUSENUMBERDATAX = 142 | * SALESDATA = 143 | * SALESDATAX = 144 | * STORAGETYPEDATA = 145 | * STORAGETYPEDATAX = 146 | FLAG_ONLINE = ' ' 147 | * FLAG_CAD_CALL = ' ' 148 | * NO_DEQUEUE = ' ' 149 | * NO_ROLLBACK_WORK = ' ' 150 | IMPORTING 151 | return = ls_return 152 | TABLES 153 | materialdescription = lt_materialdescription 154 | * UNITSOFMEASURE = 155 | * UNITSOFMEASUREX = 156 | * INTERNATIONALARTNOS = 157 | * MATERIALLONGTEXT = 158 | * TAXCLASSIFICATIONS = 159 | returnmessages = lt_returnmessages 160 | * PRTDATA = 161 | * PRTDATAX = 162 | * EXTENSIONIN = 163 | * EXTENSIONINX = 164 | . 165 | 166 | CLEAR ld_error. 167 | LOOP AT lt_returnmessages INTO ls_returnmessages. 168 | IF ls_returnmessages-type = `A` OR 169 | ls_returnmessages-type = `X` OR 170 | ls_returnmessages-type = `E`. 171 | ld_error = `X`. 172 | ENDIF. 173 | ENDLOOP. 174 | 175 | BREAK-POINT. 176 | 177 | IF ld_error = `X`. 178 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 179 | cl_rmsl_message=>display( lt_returnmessages ). 180 | ELSE. 181 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 182 | EXPORTING 183 | wait = `X`. 184 | 185 | cl_rmsl_message=>display( lt_returnmessages ). 186 | ENDIF. 187 | ENDFORM. -------------------------------------------------------------------------------- /bapi/ZBAPI_SALESORDER_CHANGE1.abap: -------------------------------------------------------------------------------- 1 | REPORT ZBAPI_SALESORDER_CHANGE1. 2 | 3 | DATA: ls_order_header_inx TYPE bapisdh1x. 4 | DATA: lt_order_item_in TYPE STANDARD TABLE OF bapisditm. 5 | DATA: ls_order_item_in TYPE bapisditm. 6 | DATA: lt_order_item_inx TYPE STANDARD TABLE OF bapisditmx. 7 | DATA: ls_order_item_inx TYPE bapisditmx. 8 | DATA: lt_schedule_lines TYPE STANDARD TABLE OF bapischdl. 9 | DATA: ls_schedule_lines TYPE bapischdl. 10 | DATA: lt_schedule_linesx TYPE STANDARD TABLE OF bapischdlx. 11 | DATA: ls_schedule_linesx TYPE bapischdlx. 12 | DATA: lt_return TYPE bapiret2_t. 13 | DATA: ls_return TYPE bapiret2. 14 | DATA: ld_error TYPE flag. 15 | 16 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 17 | PARAMETERS p_vbeln TYPE vbak-vbeln. 18 | SELECTION-SCREEN END OF BLOCK main. 19 | 20 | START-OF-SELECTION. 21 | " header 22 | ls_order_header_inx-updateflag = 'U'. 23 | 24 | " items 25 | CLEAR ls_order_item_in. 26 | ls_order_item_in-itm_number = '000010'. 27 | APPEND ls_order_item_in TO lt_order_item_in. 28 | 29 | CLEAR ls_order_item_inx. 30 | ls_order_item_inx-itm_number = '000010'. 31 | ls_order_item_inx-updateflag = 'U'. 32 | APPEND ls_order_item_inx TO lt_order_item_inx. 33 | 34 | CLEAR ls_schedule_lines. 35 | ls_schedule_lines-itm_number = '000010'. 36 | ls_schedule_lines-sched_line = '0001'. 37 | ls_schedule_lines-req_qty = 0. 38 | APPEND ls_schedule_lines TO lt_schedule_lines. 39 | 40 | CLEAR ls_schedule_linesx. 41 | ls_schedule_linesx-itm_number = '000010'. 42 | ls_schedule_linesx-sched_line = '0001'. 43 | ls_schedule_linesx-req_qty = 'X'. 44 | ls_schedule_linesx-updateflag = 'U'. 45 | APPEND ls_schedule_linesx TO lt_schedule_linesx. 46 | 47 | CALL FUNCTION 'BAPI_SALESORDER_CHANGE' 48 | EXPORTING 49 | salesdocument = p_vbeln 50 | order_header_inx = ls_order_header_inx 51 | TABLES 52 | return = lt_return 53 | order_item_in = lt_order_item_in 54 | order_item_inx = lt_order_item_inx 55 | schedule_lines = lt_schedule_lines 56 | schedule_linesx = lt_schedule_linesx. 57 | 58 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 59 | TABLES 60 | it_return = lt_return. 61 | 62 | LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'. 63 | ld_error = 'X'. 64 | EXIT. 65 | ENDLOOP. 66 | 67 | IF ld_error <> 'X'. 68 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 69 | EXPORTING 70 | wait = 'X'. 71 | ELSE. 72 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 73 | ENDIF. 74 | -------------------------------------------------------------------------------- /bapi/ZCAD_CLIENTE_ECC.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Versão 0.1 3 | * 4 | REPORT ZCAD_CLIENTE_ECC. 5 | 6 | CONSTANTS : C_UPDATE TYPE C VALUE 'M', 7 | C_INSERT TYPE C VALUE 'I'. 8 | 9 | DATA: ls_address TYPE bapiad1vl, 10 | ls_addressx TYPE bapiad1vlx, 11 | "ls_bankdetail_st TYPE cvis_ei_cvi_bankdetail, 12 | "ls_bankdetail TYPE cvis_ei_bankdetail, 13 | ls_company_code_st TYPE cmds_ei_company, 14 | ls_company_code TYPE cmds_ei_cmd_company, 15 | ls_customer TYPE cmds_ei_extern, 16 | ls_customers TYPE cmds_ei_main, 17 | ls_master_data_correct TYPE cmds_ei_main, 18 | ls_master_data_defective TYPE cmds_ei_main, 19 | ls_message_correct TYPE cvis_message, 20 | ls_message_defective TYPE cvis_message. 21 | 22 | DATA: ls_functions_st TYPE cmds_ei_functions, 23 | lt_functions_st TYPE cmds_ei_functions_t, 24 | ls_sales_data_st TYPE cmds_ei_sales, 25 | lt_sales TYPE cmds_ei_sales_t, 26 | ls_sales_data TYPE cmds_ei_sales_data. 27 | 28 | DATA: ls_smtp TYPE cvis_ei_smtp_str. 29 | DATA: ls_phone TYPE cvis_ei_phone_str. 30 | 31 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 32 | PARAMETERS: p_bukrs TYPE bukrs. 33 | PARAMETERS: p_vkorg TYPE vkorg. 34 | PARAMETERS: p_vtweg TYPE vtweg. 35 | PARAMETERS: p_spart TYPE spart. 36 | PARAMETERS: p_ktokd TYPE ktokd. 37 | PARAMETERS: p_kunnr TYPE kunnr. 38 | SELECTION-SCREEN END OF BLOCK main. 39 | 40 | START-OF-SELECTION. 41 | CLEAR ls_customers. 42 | 43 | " Dados Gerais 44 | CLEAR ls_address. 45 | ls_address-title = '0003'. " Tabela TSAD3 46 | ls_address-name = 'Mercearia Paulista'. 47 | ls_address-city = 'São Paulo'. 48 | ls_address-postl_cod1 = '04578-000'. 49 | ls_address-street = 'Rua das mercearias'. 50 | ls_address-region = 'SP'. 51 | ls_address-country = 'BR'. 52 | ls_address-langu = 'EN'. 53 | ls_address-taxjurcode = 'SP 5030'. " Domicílio fiscal 54 | ls_address-sort1 = 'MERCEARIA'. 55 | ls_address-sort2 = 'PAULISTA'. 56 | ls_address-time_zone = 'UTC-3'. 57 | 58 | " Empresa 59 | CLEAR ls_company_code_st. 60 | ls_company_code_st-data_key-bukrs = p_bukrs. 61 | ls_company_code_st-data-akont = '0000140000'. " Conta de reconciliação 62 | ls_company_code_st-data-zuawa = '001'. 63 | ls_company_code_st-data-zwels = 'AD'. " Formas de pagamento 64 | ls_company_code_st-data-zterm = '0001'. " Condição de pagamento 65 | 66 | ls_customer-central_data-central-data-stcd1 = '23021782000140'. " CNPJ 67 | ls_customer-central_data-central-data-cfopc = '00'. 68 | ls_customer-central_data-central-data-ktokd = p_ktokd. " Grupo de contas 69 | ls_customer-central_data-address-postal-data = ls_address. 70 | ls_customer-central_data-address-postal-datax = ls_addressx. 71 | 72 | ls_smtp-contact-data-e_mail = 'mercearia.paulista@teste.com'. 73 | APPEND ls_smtp TO ls_customer-central_data-address-communication-smtp-smtp. 74 | 75 | ls_phone-contact-data-telephone = '551132323333'. 76 | APPEND ls_phone TO ls_customer-central_data-address-communication-phone-phone. 77 | 78 | ls_phone-contact-data-telephone = '5511999998888'. 79 | ls_phone-contact-data-r_3_user = '3'. 80 | APPEND ls_phone TO ls_customer-central_data-address-communication-phone-phone. 81 | 82 | ls_company_code_st-task = c_insert. 83 | APPEND ls_company_code_st TO ls_company_code-company. 84 | 85 | " Área de vendas 86 | ls_customer-sales_data-current_state = 'X'. 87 | ls_sales_data_st-data_key-vkorg = p_vkorg. 88 | ls_sales_data_st-data_key-vtweg = p_vtweg. 89 | ls_sales_data_st-data_key-spart = p_spart. 90 | ls_sales_data-kalks = '1'. 91 | ls_sales_data-vsbed = '02'. 92 | ls_sales_data-waers = 'BRL'. 93 | * ls_sales_data-bzirk = ''. 94 | * ls_sales_data-vkbur = ''. 95 | * ls_sales_data-vkgrp = ''. 96 | * ls_sales_data-klabc = ''. 97 | * ls_sales_data-konda = ''. 98 | 99 | "ls_sales_data-zterm = '0001'. 100 | "ls_sales_data-versg = '1'. 101 | "ls_sales_data-aufsd = '01'. 102 | "ls_sales_data-inco1 = 'FOB'. 103 | "ls_sales_data-inco2 = 'Correios'. 104 | ls_sales_data_st-data = ls_sales_data. 105 | 106 | " Funções do parceiro 107 | ls_functions_st-data_key-parvw = 'AG'. 108 | ls_functions_st-data-defpa = 'X'. 109 | ls_functions_st-data-partner = ls_customer-header-object_instance-kunnr. 110 | APPEND ls_functions_st TO lt_functions_st. 111 | 112 | CLEAR: ls_functions_st. 113 | ls_functions_st-data_key-parvw = 'RE'. 114 | ls_functions_st-data-defpa = 'X'. 115 | ls_functions_st-data-partner = ls_customer-header-object_instance-kunnr. 116 | APPEND ls_functions_st TO lt_functions_st. 117 | 118 | CLEAR: ls_functions_st. 119 | ls_functions_st-data_key-parvw = 'RG'. 120 | ls_functions_st-data-defpa = 'X'. 121 | ls_functions_st-data-partner = ls_customer-header-object_instance-kunnr. 122 | APPEND ls_functions_st TO lt_functions_st. 123 | 124 | CLEAR: ls_functions_st. 125 | ls_functions_st-data_key-parvw = 'WE'. 126 | ls_functions_st-data-defpa = 'X'. 127 | ls_functions_st-data-partner = ls_customer-header-object_instance-kunnr. 128 | APPEND ls_functions_st TO lt_functions_st. 129 | 130 | CLEAR: ls_functions_st. 131 | ls_sales_data_st-functions-current_state = 'X'. 132 | ls_sales_data_st-functions-functions = lt_functions_st. 133 | APPEND ls_sales_data_st TO lt_sales. 134 | 135 | ls_customer-sales_data-sales = lt_sales. 136 | ls_customer-header-object_instance-kunnr = p_kunnr. 137 | ls_customer-header-object_task = c_insert. 138 | ls_customer-company_data = ls_company_code. 139 | APPEND ls_customer TO ls_customers-customers. 140 | 141 | CLEAR ls_master_data_correct. 142 | CLEAR ls_message_correct. 143 | CLEAR ls_master_data_defective. 144 | CLEAR ls_message_defective. 145 | 146 | CALL METHOD cmd_ei_api=>maintain_bapi 147 | EXPORTING 148 | iv_test_run = '' 149 | iv_collect_messages = 'X' 150 | is_master_data = ls_customers 151 | IMPORTING 152 | es_master_data_correct = ls_master_data_correct 153 | es_message_correct = ls_message_correct 154 | es_master_data_defective = ls_master_data_defective 155 | es_message_defective = ls_message_defective. 156 | 157 | IF ls_message_defective-is_error IS INITIAL. 158 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 159 | EXPORTING 160 | wait = 'X'. 161 | 162 | MESSAGE 'Cliente cadastrado' TYPE 'S'. 163 | 164 | SET PARAMETER ID 'KUN' FIELD p_kunnr. 165 | CALL TRANSACTION 'XD03'. 166 | ELSE. 167 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 168 | 169 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 170 | TABLES 171 | it_return = ls_message_defective-messages. 172 | ENDIF. 173 | -------------------------------------------------------------------------------- /bapi/ZCRIAR_OV.abap: -------------------------------------------------------------------------------- 1 | REPORT ZCRIAR_OV. 2 | 3 | DATA: ld_vbeln TYPE vbak-vbeln. 4 | DATA: ld_kunnr TYPE kunnr. 5 | DATA: ld_lifnr TYPE lifnr. 6 | DATA: ld_langu TYPE sy-langu. 7 | 8 | DATA: ls_order_header_in TYPE bapisdhd1. 9 | DATA: ls_order_header_inx TYPE bapisdhd1x. 10 | DATA: lt_order_items_in TYPE STANDARD TABLE OF bapisditm. 11 | DATA: ls_order_items_in TYPE bapisditm. 12 | DATA: lt_order_items_inx TYPE STANDARD TABLE OF bapisditmx. 13 | DATA: ls_order_items_inx TYPE bapisditmx. 14 | DATA: lt_order_schedules_in TYPE STANDARD TABLE OF bapischdl. 15 | DATA: ls_order_schedules_in TYPE bapischdl. 16 | DATA: lt_order_schedules_inx TYPE STANDARD TABLE OF bapischdlx. 17 | DATA: ls_order_schedules_inx TYPE bapischdlx. 18 | DATA: lt_order_conditions_in TYPE STANDARD TABLE OF bapicond. 19 | data: ls_order_conditions_in type bapicond. 20 | DATA: lt_order_conditions_inx TYPE STANDARD TABLE OF bapicondx. 21 | DATA: ls_order_conditions_inx TYPE bapicondx. 22 | DATA: lt_order_partners TYPE STANDARD TABLE OF bapiparnr. 23 | DATA: ls_order_partners TYPE bapiparnr. 24 | DATA: lt_partneraddresses TYPE STANDARD TABLE OF bapiaddr1. 25 | DATA: ls_partneraddresses TYPE bapiaddr1. 26 | DATA: lt_order_text TYPE STANDARD TABLE OF bapisdtext. 27 | DATA: ls_order_text TYPE bapisdtext. 28 | DATA: lt_return TYPE bapiret2_t. 29 | DATA: ls_return TYPE bapiret2. 30 | DATA: ld_error TYPE flag. 31 | 32 | START-OF-SELECTION. 33 | ld_langu = 'E'. 34 | ld_kunnr = 'BR-S50A05'. 35 | ld_lifnr = 'TRANS00-01'. 36 | 37 | " cabeçalho 38 | CLEAR ls_order_header_in. 39 | ls_order_header_in-doc_type = 'ORB'. " AUART 40 | ls_order_header_in-sales_org = '7000'. " VKORG 41 | ls_order_header_in-distr_chan = '10'. " VTWEG 42 | ls_order_header_in-division = '00'. " SPART 43 | ls_order_header_in-sales_grp = ''. " 44 | ls_order_header_in-sales_off = ''. " 45 | ls_order_header_in-price_grp = '01'. " 46 | ls_order_header_in-price_list = '90'. " Internet 47 | ls_order_header_in-cust_group = ''. " KDGRP 48 | ls_order_header_in-sales_dist = ''. " BZIRK 49 | ls_order_header_in-incoterms1 = 'CIF'. " INCO1 50 | ls_order_header_in-incoterms2 = 'SEDEX'. " INCO2 51 | ls_order_header_in-pmnttrms = '0001'. " DZTERM 52 | ls_order_header_in-dlv_block = ''. " LIFSK 53 | ls_order_header_in-bill_block = ''. " FAKSK 54 | ls_order_header_in-ord_reason = ''. " AUGRU 55 | ls_order_header_in-price_date = sy-datum. " PRSDT 56 | ls_order_header_in-purch_date = sy-datum. " PRSDT 57 | ls_order_header_in-purch_no_c = 'Pedido teste'. " BSTKD 58 | ls_order_header_in-purch_no_s = ''. " BSTKD_E 59 | ls_order_header_in-doc_date = sy-datum. " AUDAT 60 | ls_order_header_in-currency = 'BRL'. " WAERK 61 | ls_order_header_in-curr_iso = 'BRL'. " WAERS_ISO 62 | 63 | CLEAR ls_order_header_inx. 64 | ls_order_header_inx-updateflag = 'I'. 65 | ls_order_header_inx-doc_type = 'X'. 66 | ls_order_header_inx-sales_org = 'X'. 67 | ls_order_header_inx-distr_chan = 'X'. 68 | ls_order_header_inx-division = 'X'. 69 | ls_order_header_inx-price_grp = 'X'. 70 | ls_order_header_inx-price_list = 'X'. 71 | ls_order_header_inx-incoterms1 = 'X'. 72 | ls_order_header_inx-incoterms2 = 'X'. 73 | ls_order_header_inx-pmnttrms = 'X'. 74 | ls_order_header_inx-price_date = 'X'. 75 | ls_order_header_inx-purch_date = 'X'. 76 | ls_order_header_inx-purch_no_c = 'X'. 77 | ls_order_header_inx-doc_date = 'X'. 78 | ls_order_header_inx-currency = 'X'. 79 | 80 | " itens 81 | CLEAR ls_order_items_in. 82 | ls_order_items_in-itm_number = '000010'. 83 | ls_order_items_in-material = 'BR-AS100'. 84 | ls_order_items_in-plant = '7000'. 85 | ls_order_items_in-store_loc = ''. 86 | ls_order_items_in-target_qty = 2. 87 | APPEND ls_order_items_in TO lt_order_items_in. 88 | 89 | CLEAR ls_order_items_inx. 90 | ls_order_items_inx-itm_number = '000010'. 91 | ls_order_items_inx-material = 'X'. 92 | ls_order_items_inx-plant = 'X'. 93 | ls_order_items_inx-store_loc = 'X'. 94 | ls_order_items_inx-target_qty = 'X'. 95 | APPEND ls_order_items_inx TO lt_order_items_inx. 96 | 97 | CLEAR ls_order_items_in. 98 | ls_order_items_in-itm_number = '000020'. 99 | ls_order_items_in-material = 'BR-AS200'. 100 | ls_order_items_in-plant = '7000'. 101 | ls_order_items_in-store_loc = ''. 102 | ls_order_items_in-target_qty = 1. 103 | APPEND ls_order_items_in TO lt_order_items_in. 104 | 105 | CLEAR ls_order_items_inx. 106 | ls_order_items_inx-itm_number = '000020'. 107 | ls_order_items_inx-material = 'X'. 108 | ls_order_items_inx-plant = 'X'. 109 | ls_order_items_inx-store_loc = 'X'. 110 | ls_order_items_inx-target_qty = 'X'. 111 | APPEND ls_order_items_inx TO lt_order_items_inx. 112 | 113 | " divisão de remessa 114 | CLEAR ls_order_schedules_in. 115 | ls_order_schedules_in-itm_number = '000010'. 116 | ls_order_schedules_in-sched_line = '0001'. 117 | ls_order_schedules_in-req_qty = 2. 118 | APPEND ls_order_schedules_in TO lt_order_schedules_in. 119 | 120 | CLEAR ls_order_schedules_inx. 121 | ls_order_schedules_inx-itm_number = '000010'. 122 | ls_order_schedules_inx-sched_line = '0001'. 123 | ls_order_schedules_inx-req_qty = 'X'. 124 | ls_order_schedules_inx-updateflag = 'U'. 125 | APPEND ls_order_schedules_inx TO lt_order_schedules_inx. 126 | 127 | CLEAR ls_order_schedules_in. 128 | ls_order_schedules_in-itm_number = '000020'. 129 | ls_order_schedules_in-sched_line = '0001'. 130 | ls_order_schedules_in-req_qty = 1. 131 | APPEND ls_order_schedules_in TO lt_order_schedules_in. 132 | 133 | CLEAR ls_order_schedules_inx. 134 | ls_order_schedules_inx-itm_number = '000020'. 135 | ls_order_schedules_inx-sched_line = '0001'. 136 | ls_order_schedules_inx-req_qty = 'X'. 137 | ls_order_schedules_inx-updateflag = 'U'. 138 | APPEND ls_order_schedules_inx TO lt_order_schedules_inx. 139 | 140 | " condições 141 | CLEAR ls_order_conditions_in. 142 | ls_order_conditions_in-itm_number = '000010'. 143 | ls_order_conditions_in-cond_st_no = '001'. 144 | ls_order_conditions_in-cond_type = 'ZPB0'. 145 | ls_order_conditions_in-cond_value = `123.45`. 146 | ls_order_conditions_in-condvalue = `123.45`. 147 | ls_order_conditions_in-currency = 'BRL'. 148 | ls_order_conditions_in-curr_iso = 'BRL'. 149 | APPEND ls_order_conditions_in TO lt_order_conditions_in. 150 | 151 | CLEAR ls_order_conditions_inx. 152 | ls_order_conditions_inx-itm_number = '000010'. 153 | ls_order_conditions_inx-cond_st_no = '001'. 154 | ls_order_conditions_inx-cond_type = 'X'. 155 | ls_order_conditions_inx-cond_value = 'X'. 156 | ls_order_conditions_inx-currency = 'X'. 157 | ls_order_conditions_inx-updateflag = 'I'. 158 | APPEND ls_order_conditions_inx TO lt_order_conditions_inx. 159 | 160 | CLEAR ls_order_conditions_in. 161 | ls_order_conditions_in-itm_number = '000020'. 162 | ls_order_conditions_in-cond_st_no = '001'. 163 | ls_order_conditions_in-cond_type = 'ZPB0'. 164 | ls_order_conditions_in-cond_value = `300.64`. 165 | ls_order_conditions_in-condvalue = `300.64`. 166 | ls_order_conditions_in-currency = 'BRL'. 167 | ls_order_conditions_in-curr_iso = 'BRL'. 168 | APPEND ls_order_conditions_in TO lt_order_conditions_in. 169 | 170 | CLEAR ls_order_conditions_inx. 171 | ls_order_conditions_inx-itm_number = '000020'. 172 | ls_order_conditions_inx-cond_st_no = '001'. 173 | ls_order_conditions_inx-cond_type = 'X'. 174 | ls_order_conditions_inx-cond_value = 'X'. 175 | ls_order_conditions_inx-currency = 'X'. 176 | ls_order_conditions_inx-updateflag = 'I'. 177 | APPEND ls_order_conditions_inx TO lt_order_conditions_inx. 178 | 179 | " parceiros 180 | CLEAR ls_order_partners. 181 | ls_order_partners-partn_role = 'AG'. " Emissor da ordem 182 | ls_order_partners-partn_numb = ld_kunnr. 183 | APPEND ls_order_partners TO lt_order_partners. 184 | 185 | CLEAR ls_order_partners. 186 | ls_order_partners-partn_role = 'WE'. " Recebedor da mercadoria 187 | ls_order_partners-partn_numb = ld_kunnr. 188 | APPEND ls_order_partners TO lt_order_partners. 189 | 190 | CLEAR ls_order_partners. 191 | ls_order_partners-partn_role = 'RE'. " Recebedor da fatura 192 | ls_order_partners-partn_numb = ld_kunnr. 193 | APPEND ls_order_partners TO lt_order_partners. 194 | 195 | CLEAR ls_order_partners. 196 | ls_order_partners-partn_role = 'RG'. " Pagador 197 | ls_order_partners-partn_numb = ld_kunnr. 198 | APPEND ls_order_partners TO lt_order_partners. 199 | 200 | CLEAR ls_order_partners. 201 | ls_order_partners-partn_role = 'SP'. " Transportador 202 | ls_order_partners-partn_numb = ld_lifnr. 203 | APPEND ls_order_partners TO lt_order_partners. 204 | 205 | " textos 206 | CLEAR ls_order_text. 207 | ls_order_text-format_col = '*'. 208 | ls_order_text-itm_number = '000000'. 209 | ls_order_text-langu = ld_langu. 210 | ls_order_text-langu_iso = ld_langu. 211 | 212 | " texto 1 213 | ls_order_text-text_id = '0001'. 214 | ls_order_text-text_line = 'Linha 1 linha 1'. 215 | APPEND ls_order_text TO lt_order_text. 216 | 217 | ls_order_text-text_line = 'Linha 2 linha 2'. 218 | APPEND ls_order_text TO lt_order_text. 219 | 220 | " texto 2 221 | ls_order_text-text_id = '0002'. 222 | ls_order_text-text_line = 'aaa'. 223 | APPEND ls_order_text TO lt_order_text. 224 | 225 | ls_order_text-text_line = 'bbb'. 226 | APPEND ls_order_text TO lt_order_text. 227 | 228 | CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' 229 | EXPORTING 230 | salesdocumentin = ld_vbeln 231 | order_header_in = ls_order_header_in 232 | order_header_inx = ls_order_header_inx 233 | IMPORTING 234 | salesdocument = ld_vbeln 235 | TABLES 236 | return = lt_return 237 | order_items_in = lt_order_items_in 238 | order_items_inx = lt_order_items_inx 239 | order_partners = lt_order_partners 240 | order_schedules_in = lt_order_schedules_in 241 | order_schedules_inx = lt_order_schedules_inx 242 | order_conditions_in = lt_order_conditions_in 243 | order_conditions_inx = lt_order_conditions_inx 244 | order_text = lt_order_text 245 | partneraddresses = lt_partneraddresses. 246 | 247 | ld_error = ''. 248 | LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'. 249 | ld_error = 'X'. 250 | EXIT. 251 | ENDLOOP. 252 | 253 | IF ld_error = 'X'. 254 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 255 | 256 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 257 | TABLES 258 | it_return = lt_return. 259 | ELSE. 260 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 261 | EXPORTING 262 | wait = 'X'. 263 | 264 | MESSAGE |Ordem criada { ld_vbeln }| TYPE 'I'. 265 | ENDIF. 266 | -------------------------------------------------------------------------------- /bapi/ZCRIAR_VL.abap: -------------------------------------------------------------------------------- 1 | REPORT ZCRIAR_VL. 2 | 3 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 4 | PARAMETERS p_vbeln TYPE vbak-vbeln. 5 | SELECTION-SCREEN END OF BLOCK main. 6 | 7 | START-OF-SELECTION. 8 | DATA: ld_delivery TYPE bapishpdelivnumb-deliv_numb. 9 | DATA: lt_sales_order_items TYPE STANDARD TABLE OF bapidlvreftosalesorder. 10 | DATA: ls_sales_order_items TYPE bapidlvreftosalesorder. 11 | DATA: lt_return TYPE STANDARD TABLE OF bapiret2. 12 | DATA: ls_return TYPE bapiret2. 13 | 14 | DATA: lt_vbap TYPE STANDARD TABLE OF vbap. 15 | DATA: ls_vbap TYPE vbap. 16 | DATA: ld_error TYPE flag. 17 | 18 | SELECT * 19 | INTO TABLE lt_vbap 20 | FROM vbap 21 | WHERE vbeln = p_vbeln. 22 | 23 | LOOP AT lt_vbap INTO ls_vbap. 24 | CLEAR ls_sales_order_items. 25 | ls_sales_order_items-ref_doc = ls_vbap-vbeln. 26 | ls_sales_order_items-ref_item = ls_vbap-posnr. 27 | ls_sales_order_items-dlv_qty = ls_vbap-kwmeng. 28 | ls_sales_order_items-sales_unit = ls_vbap-vrkme. 29 | APPEND ls_sales_order_items TO lt_sales_order_items. 30 | ENDLOOP. 31 | 32 | CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS' 33 | IMPORTING 34 | delivery = ld_delivery 35 | TABLES 36 | sales_order_items = lt_sales_order_items 37 | return = lt_return. 38 | 39 | ld_error = ''. 40 | LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'. 41 | ld_error = 'X'. 42 | EXIT. 43 | ENDLOOP. 44 | 45 | IF ld_error = 'X'. 46 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 47 | 48 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 49 | TABLES 50 | it_return = lt_return. 51 | ELSE. 52 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 53 | EXPORTING 54 | wait = 'X'. 55 | 56 | MESSAGE |Remessa criada { ld_delivery }| TYPE 'I'. 57 | ENDIF. 58 | -------------------------------------------------------------------------------- /class/ZCL_BAL_LOG.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_bal_log.clas.abap -------------------------------------------------------------------------------- /class/ZCL_CSV_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_csv_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_DEFAULT_ALV_V1.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_default_alv_v1.clas.abap -------------------------------------------------------------------------------- /class/ZCL_DMS_UTILS.abap: -------------------------------------------------------------------------------- 1 | class ZCL_DMS_UTILS definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | types: 8 | BEGIN OF ly_dms_key 9 | , dokar TYPE dokar 10 | , doknr TYPE doknr 11 | , dokvr TYPE dokvr 12 | , doktl TYPE doktl_d 13 | , END OF ly_dms_key . 14 | types: 15 | BEGIN OF ly_detail 16 | , documentdata TYPE bapi_doc_draw2 17 | , return TYPE bapiret2 18 | , documentdescriptions TYPE tt_bapi_doc_drat 19 | , documentfiles TYPE tt_bapi_doc_files2 20 | , characteristicvalues TYPE tt_bapi_characteristic_values 21 | , classallocations TYPE tt_bapi_class_allocation 22 | , END OF ly_detail . 23 | 24 | class-methods LOAD_FILE 25 | importing 26 | value(IS_KEY) type LY_DMS_KEY 27 | value(ID_FILENAME) type STRING 28 | value(ED_CONTENT) type XSTRING . 29 | class-methods DELETE_FILE 30 | importing 31 | value(ID_FULLPATH) type STRING 32 | value(IS_KEY) type LY_DMS_KEY 33 | exporting 34 | value(ES_RETURN) type BAPIRET2 . 35 | class-methods CREATE_FILES 36 | exporting 37 | !ES_KEY type LY_DMS_KEY 38 | !ES_RETURN type BAPIRET2 . 39 | class-methods UPDATE_FILES 40 | importing 41 | value(IS_KEY) type LY_DMS_KEY 42 | exporting 43 | value(ES_RETURN) type BAPIRET2 . 44 | class-methods GET_DETAIL 45 | importing 46 | !IS_KEY type LY_DMS_KEY 47 | exporting 48 | !ES_DETAIL type LY_DETAIL . 49 | protected section. 50 | private section. 51 | ENDCLASS. 52 | 53 | 54 | 55 | CLASS ZCL_DMS_UTILS IMPLEMENTATION. 56 | 57 | 58 | * ---------------------------------------------------------------------------------------+ 59 | * | Static Public Method ZCL_DMS_UTILS=>CREATE_FILES 60 | * +-------------------------------------------------------------------------------------------------+ 61 | * | [<---] ES_KEY TYPE LY_DMS_KEY 62 | * | [<---] ES_RETURN TYPE BAPIRET2 63 | * +-------------------------------------------------------------------------------------- 64 | method CREATE_FILES. 65 | DATA: ld_is_gui TYPE char1. 66 | DATA: ls_documentdata TYPE bapi_doc_draw2. 67 | DATA: ld_pf_ftp_dest TYPE rfcdest. 68 | DATA: ld_pf_http_dest TYPE rfcdest. 69 | 70 | CLEAR es_return. 71 | 72 | CALL FUNCTION 'GUI_IS_AVAILABLE' 73 | IMPORTING 74 | return = ld_is_gui. 75 | 76 | IF ld_is_gui NE abap_true. 77 | ld_pf_ftp_dest = 'SAPFTPA'. 78 | ld_pf_http_dest = 'SAPHTTPA'. 79 | ENDIF. 80 | 81 | CALL FUNCTION 'BAPI_DOCUMENT_CREATE2' 82 | EXPORTING 83 | documentdata = ls_documentdata 84 | pf_ftp_dest = ld_pf_ftp_dest 85 | pf_http_dest = ld_pf_http_dest 86 | defaultclass = CONV cvflag( ld_is_gui ) 87 | IMPORTING 88 | documenttype = es_key-dokar 89 | documentnumber = es_key-doknr 90 | documentpart = es_key-doktl 91 | documentversion = es_key-dokvr 92 | return = es_return. 93 | 94 | IF es_return-type CA 'AEX'. 95 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 96 | ELSE. 97 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 98 | WAIT UP TO 2 SECONDS. 99 | ENDIF. 100 | 101 | " Tabela FILECMCUST REJECT_EMPTY_PATH = OFF para funcionar carregando o arquivo do servidor 102 | endmethod. 103 | 104 | 105 | * ---------------------------------------------------------------------------------------+ 106 | * | Static Public Method ZCL_DMS_UTILS=>DELETE_FILE 107 | * +-------------------------------------------------------------------------------------------------+ 108 | * | [--->] ID_FULLPATH TYPE STRING 109 | * | [--->] IS_KEY TYPE LY_DMS_KEY 110 | * | [<---] ES_RETURN TYPE BAPIRET2 111 | * +-------------------------------------------------------------------------------------- 112 | method DELETE_FILE. 113 | DATA: ls_detail TYPE ly_detail. 114 | DATA: ls_document TYPE bapi_doc_draw2. 115 | DATA: ls_documentx TYPE bapi_doc_drawx2. 116 | DATA: lt_doc_files TYPE STANDARD TABLE OF bapi_doc_files2. 117 | 118 | DATA: ld_folder TYPE string. 119 | DATA: ld_filename TYPE string. 120 | DATA: ld_filename2 TYPE string. 121 | DATA: ld_fileext TYPE string. 122 | 123 | DATA: ld_is_gui TYPE char1. 124 | DATA: ld_pf_ftp_dest TYPE rfcdest. 125 | DATA: ld_pf_http_dest TYPE rfcdest. 126 | 127 | FIELD-SYMBOLS: TYPE bapi_doc_files2. 128 | 129 | CLEAR es_return. 130 | 131 | " separando diretório e nome do arquivo 132 | TRY. 133 | cl_bcs_utilities=>split_path( 134 | EXPORTING 135 | iv_path = CONV #( id_fullpath ) 136 | IMPORTING 137 | ev_path = ld_folder 138 | ev_name = ld_filename 139 | ). 140 | CATCH cx_bcs. 141 | SPLIT id_fullpath AT '/' INTO TABLE DATA(lt_files). 142 | ld_filename = VALUE #( lt_files[ lines( lt_files ) ] OPTIONAL ). 143 | ENDTRY. 144 | 145 | " separando nome do arquivo da extensão 146 | cl_bcs_utilities=>split_name( 147 | EXPORTING 148 | iv_name = ld_filename 149 | IMPORTING 150 | ev_name = ld_filename2 151 | ev_extension = ld_fileext 152 | ). 153 | 154 | " obtendo detalhes 155 | get_detail( 156 | EXPORTING 157 | is_key = is_key 158 | IMPORTING 159 | es_detail = ls_detail 160 | ). 161 | 162 | " Deixando somente o arquivo selecionado 163 | DELETE ls_detail-documentfiles WHERE docfile NE ld_filename. 164 | 165 | READ TABLE ls_detail-documentfiles ASSIGNING INDEX 1. 166 | IF sy-subrc <> 0. 167 | RETURN. 168 | ENDIF. 169 | 170 | " marcando o arquivo como deletado 171 | -deletevalue = abap_true. 172 | 173 | " setando flag de atualização na BAPI 174 | LOOP AT CAST cl_abap_structdescr( 175 | cl_abap_typedescr=>describe_by_data_ref( REF #( ls_document ) ) )->get_components( ) 176 | INTO DATA(ls_compx). 177 | 178 | ASSIGN COMPONENT ls_compx-name OF STRUCTURE ls_document TO FIELD-SYMBOL(). 179 | ASSIGN COMPONENT ls_compx-name OF STRUCTURE ls_documentx TO FIELD-SYMBOL(). 180 | CHECK IS ASSIGNED AND IS ASSIGNED. 181 | CHECK IS NOT INITIAL. 182 | = abap_true. 183 | ENDLOOP. 184 | 185 | CALL FUNCTION 'GUI_IS_AVAILABLE' 186 | IMPORTING 187 | return = ld_is_gui. 188 | 189 | IF ld_is_gui NE abap_true. 190 | ld_pf_ftp_dest = 'SAPFTPA'. 191 | ld_pf_http_dest = 'SAPHTTPA'. 192 | ENDIF. 193 | 194 | CALL FUNCTION 'BAPI_DOCUMENT_CHANGE2' 195 | EXPORTING 196 | documenttype = is_key-dokar 197 | documentnumber = is_key-doknr 198 | documentpart = is_key-doktl 199 | documentversion = is_key-dokvr 200 | pf_ftp_dest = ld_pf_ftp_dest 201 | pf_http_dest = ld_pf_http_dest 202 | documentdata = ls_document 203 | documentdatax = ls_documentx 204 | IMPORTING 205 | return = es_return. 206 | 207 | IF es_return-type CA 'AEX'. 208 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 209 | RETURN. 210 | ELSE. 211 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 212 | ENDIF. 213 | 214 | CALL FUNCTION 'BAPI_DOCUMENT_DELETE_DIRECT' 215 | EXPORTING 216 | documenttype = is_key-dokar 217 | documentnumber = is_key-doknr 218 | documentpart = is_key-doktl 219 | documentversion = is_key-dokvr 220 | IMPORTING 221 | return = es_return. 222 | 223 | IF es_return-type CA 'AEX'. 224 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 225 | ELSE. 226 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 227 | ENDIF. 228 | endmethod. 229 | 230 | 231 | * ---------------------------------------------------------------------------------------+ 232 | * | Static Public Method ZCL_DMS_UTILS=>GET_DETAIL 233 | * +-------------------------------------------------------------------------------------------------+ 234 | * | [--->] IS_KEY TYPE LY_DMS_KEY 235 | * | [<---] ES_DETAIL TYPE LY_DETAIL 236 | * +-------------------------------------------------------------------------------------- 237 | method GET_DETAIL. 238 | CLEAR es_detail. 239 | 240 | CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2' 241 | EXPORTING 242 | documenttype = is_key-dokar 243 | documentnumber = is_key-doknr 244 | documentpart = is_key-doktl 245 | documentversion = is_key-dokvr 246 | getcomponents = abap_true 247 | getdocdescriptions = abap_true 248 | getdocfiles = abap_true 249 | getclassification = abap_true 250 | IMPORTING 251 | documentdata = es_detail-documentdata 252 | return = es_detail-return 253 | TABLES 254 | documentdescriptions = es_detail-documentdescriptions 255 | documentfiles = es_detail-documentfiles 256 | characteristicvalues = es_detail-characteristicvalues 257 | classallocations = es_detail-classallocations. 258 | endmethod. 259 | 260 | 261 | * ---------------------------------------------------------------------------------------+ 262 | * | Static Public Method ZCL_DMS_UTILS=>LOAD_FILE 263 | * +-------------------------------------------------------------------------------------------------+ 264 | * | [--->] IS_KEY TYPE LY_DMS_KEY 265 | * | [--->] ID_FILENAME TYPE STRING 266 | * | [--->] ED_CONTENT TYPE XSTRING 267 | * +-------------------------------------------------------------------------------------- 268 | method LOAD_FILE. 269 | DATA: ls_docfile TYPE bapi_doc_files2. 270 | DATA: lt_access TYPE TABLE OF scms_acinf. 271 | DATA: ls_access TYPE scms_acinf. 272 | DATA: lt_bin TYPE TABLE OF sdokcntbin. 273 | 274 | DATA: ls_detail TYPE ly_detail. 275 | DATA: ls_documentfiles LIKE LINE OF ls_detail-documentfiles. 276 | 277 | get_detail( 278 | EXPORTING 279 | is_key = is_key 280 | IMPORTING 281 | es_detail = ls_detail 282 | ). 283 | 284 | " dentre os arquivos, excluindo os outros arquivos 285 | " e deixando somente o arquivo que interessa 286 | DELETE ls_detail-documentfiles WHERE description NE id_filename. 287 | 288 | IF lines( ls_detail-documentfiles ) = 0. 289 | RETURN. 290 | ENDIF. 291 | 292 | CLEAR ls_documentfiles. 293 | READ TABLE ls_detail-documentfiles INTO ls_documentfiles INDEX 1. 294 | 295 | CALL FUNCTION 'SCMS_DOC_READ' 296 | EXPORTING 297 | mandt = sy-mandt 298 | stor_cat = ls_documentfiles-storagecategory 299 | doc_id = ls_documentfiles-file_id 300 | TABLES 301 | access_info = lt_access 302 | content_bin = lt_bin. 303 | 304 | CLEAR ls_access. 305 | READ TABLE lt_access INTO ls_access INDEX 1. 306 | IF sy-subrc <> 0. 307 | RETURN. 308 | ENDIF. 309 | 310 | CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' 311 | EXPORTING 312 | input_length = ls_access-comp_size 313 | first_line = 0 314 | last_line = 0 315 | IMPORTING 316 | buffer = ed_content 317 | TABLES 318 | binary_tab = lt_bin. 319 | endmethod. 320 | 321 | 322 | * ---------------------------------------------------------------------------------------+ 323 | * | Static Public Method ZCL_DMS_UTILS=>UPDATE_FILES 324 | * +-------------------------------------------------------------------------------------------------+ 325 | * | [--->] IS_KEY TYPE LY_DMS_KEY 326 | * | [<---] ES_RETURN TYPE BAPIRET2 327 | * +-------------------------------------------------------------------------------------- 328 | method UPDATE_FILES. 329 | DATA: ld_is_gui TYPE char1. 330 | DATA: ls_detail TYPE ly_detail. 331 | DATA: ld_pf_ftp_dest TYPE rfcdest. 332 | DATA: ld_pf_http_dest TYPE rfcdest. 333 | DATA: ls_documentdata TYPE bapi_doc_draw2. 334 | DATA: ls_documentdatax TYPE bapi_doc_drawx2. 335 | 336 | CLEAR es_return. 337 | 338 | CALL FUNCTION 'GUI_IS_AVAILABLE' 339 | IMPORTING 340 | return = ld_is_gui. 341 | 342 | IF ld_is_gui NE abap_true. 343 | ld_pf_ftp_dest = 'SAPFTPA'. 344 | ld_pf_http_dest = 'SAPHTTPA'. 345 | ENDIF. 346 | 347 | get_detail( 348 | EXPORTING 349 | is_key = is_key 350 | IMPORTING 351 | es_detail = ls_detail 352 | ). 353 | 354 | CALL FUNCTION 'BAPI_DOCUMENT_CHANGE2' 355 | EXPORTING 356 | documenttype = is_key-dokar 357 | documentnumber = is_key-doknr 358 | documentpart = is_key-doktl 359 | documentversion = is_key-dokvr 360 | documentdata = ls_documentdata 361 | documentdatax = ls_documentdatax 362 | pf_ftp_dest = ld_pf_ftp_dest 363 | pf_http_dest = ld_pf_http_dest 364 | IMPORTING 365 | return = es_return. 366 | 367 | IF es_return-type CA 'AEX'. 368 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 369 | ELSE. 370 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 371 | WAIT UP TO 2 SECONDS. 372 | ENDIF. 373 | 374 | " Function CVAPI_DOC_CHECKIN 375 | endmethod. 376 | ENDCLASS. 377 | -------------------------------------------------------------------------------- /class/ZCL_ECC_TO_S4HANA.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_ecc_to_s4hana.clas.abap 3 | -------------------------------------------------------------------------------- /class/ZCL_FILE_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_file_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_GOS_UTILS.abap: -------------------------------------------------------------------------------- 1 | class ZCL_GOS_UTILS definition 2 | public 3 | create public . 4 | 5 | public section. 6 | 7 | class-methods LOAD_FILE_FROM_SERVER_DISK 8 | importing 9 | value(ID_FULLPATH) type ANY 10 | exporting 11 | value(ED_CONTENT) type XSTRING 12 | value(ET_BAPICONTEN) type BAPIDOCCONTENTAB 13 | value(ED_FILESIZE) type INT4 . 14 | class-methods CREATE_FILE_GOS 15 | importing 16 | value(ID_FILENAME) type ANY optional 17 | value(ID_FULLPATH) type ANY 18 | value(ID_OBJECT_KEY) type ANY 19 | value(ID_FROM_SERVER) type FLAG default 'X' 20 | value(ID_CLASSNAME) type SBDST_CLASSNAME 21 | value(ID_CLASSTYPE) type SBDST_CLASSTYPE 22 | exporting 23 | !ES_BAPIRET2 type BAPIRET2 . 24 | class-methods LOAD_FILE_GOS 25 | importing 26 | value(ID_DOCUMENT) type ANY 27 | value(ID_CLASSNAME) type ANY . 28 | protected section. 29 | private section. 30 | ENDCLASS. 31 | 32 | 33 | 34 | CLASS ZCL_GOS_UTILS IMPLEMENTATION. 35 | 36 | 37 | * ---------------------------------------------------------------------------------------+ 38 | * | Static Public Method ZCL_GOS_UTILS2=>CREATE_FILE_GOS 39 | * +-------------------------------------------------------------------------------------------------+ 40 | * | [--->] ID_FILENAME TYPE ANY(optional) 41 | * | [--->] ID_FULLPATH TYPE ANY 42 | * | [--->] ID_OBJECT_KEY TYPE ANY 43 | * | [--->] ID_FROM_SERVER TYPE FLAG (default ='X') 44 | * | [--->] ID_CLASSNAME TYPE SBDST_CLASSNAME 45 | * | [--->] ID_CLASSTYPE TYPE SBDST_CLASSTYPE 46 | * | [<---] ES_BAPIRET2 TYPE BAPIRET2 47 | * +-------------------------------------------------------------------------------------- 48 | method CREATE_FILE_GOS. 49 | DATA: lt_components TYPE sbdst_components. 50 | DATA: ls_components TYPE bapicompon. 51 | DATA: lt_content TYPE sbdst_content. 52 | DATA: ls_content TYPE bapiconten. 53 | DATA: lt_signature TYPE sbdst_signature. 54 | DATA: ls_signature TYPE bapisignat. 55 | 56 | DATA: ld_mime TYPE w3conttype. 57 | DATA: ld_folder(4096) TYPE c. 58 | DATA: ld_filename(1024) TYPE c. 59 | DATA: ld_filename2 TYPE string. 60 | DATA: ld_fileext TYPE string. 61 | DATA: ld_filesize TYPE int4. 62 | 63 | DATA: ld_object_key TYPE sbdst_object_key. 64 | 65 | CLEAR es_bapiret2. 66 | 67 | " validações 68 | IF id_fullpath = ''. 69 | es_bapiret2-type = 'E'. 70 | es_bapiret2-message = 'Caminho do arquivo vazio'. 71 | RETURN. 72 | ENDIF. 73 | 74 | IF id_object_key = ''. 75 | es_bapiret2-type = 'E'. 76 | es_bapiret2-message = 'Chave do objeto vazio'. 77 | RETURN. 78 | ENDIF. 79 | 80 | " padronizando separador 81 | REPLACE ALL OCCURRENCES OF '\' IN id_fullpath WITH '/'. 82 | 83 | CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' 84 | EXPORTING 85 | full_name = id_fullpath 86 | IMPORTING 87 | stripped_name = ld_filename 88 | file_path = ld_folder 89 | EXCEPTIONS 90 | x_error = 1 91 | others = 2. 92 | 93 | " extrair nome e extensão 94 | cl_bcs_utilities=>split_name( 95 | EXPORTING 96 | iv_name = ld_filename 97 | IMPORTING 98 | ev_name = ld_filename2 99 | ev_extension = ld_fileext 100 | ). 101 | 102 | TRANSLATE ld_fileext TO UPPER CASE. 103 | 104 | " mime 105 | CALL FUNCTION 'SDOK_MIMETYPE_GET' 106 | EXPORTING 107 | extension = CONV char100( ld_fileext ) 108 | IMPORTING 109 | mimetype = ld_mime. 110 | 111 | IF ld_mime = ''. 112 | es_bapiret2-type = 'E'. 113 | es_bapiret2-message = |MIME não identificado para a extensão { ld_fileext }|. 114 | RETURN. 115 | ENDIF. 116 | 117 | " conteúdo do arquivo 118 | IF id_from_server = 'X'. 119 | load_file_from_server_disk( 120 | EXPORTING 121 | id_fullpath = id_fullpath 122 | IMPORTING 123 | et_bapiconten = lt_content 124 | ed_filesize = ld_filesize 125 | ). 126 | ELSE. 127 | " carregar arquivo do PC do usuário ... 128 | ENDIF. 129 | 130 | IF ld_filesize = 0. 131 | es_bapiret2-type = 'E'. 132 | es_bapiret2-message = |Arquivo { ld_filename } vazio|. 133 | RETURN. 134 | ENDIF. 135 | 136 | CLEAR ls_components. 137 | ls_components-doc_count = '1'. 138 | ls_components-comp_count = '1'. 139 | ls_components-comp_id = ''. 140 | ls_components-mimetype = ld_mime. 141 | ls_components-comp_size = ld_filesize. 142 | APPEND ls_components TO lt_components. 143 | 144 | CLEAR ls_signature. 145 | ls_signature-doc_count = '1'. 146 | ls_signature-comp_count = '1'. 147 | ls_signature-prop_name = 'DESCRIPTION'. 148 | ls_signature-prop_value = ld_filename. 149 | 150 | " nome alternativo 151 | IF id_filename IS SUPPLIED AND id_filename <> ''. 152 | ls_signature-prop_value = id_filename. 153 | ENDIF. 154 | 155 | APPEND ls_signature TO lt_signature. 156 | 157 | IF ld_mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'. 158 | CLEAR ls_signature. 159 | ls_signature-doc_count = '1'. 160 | ls_signature-comp_count = '1'. 161 | ls_signature-prop_name = 'BDS_DOCUMENTCLASS'. 162 | ls_signature-prop_value = ld_fileext. 163 | APPEND ls_signature TO lt_signature. 164 | ENDIF. 165 | 166 | IF ld_fileext = 'ZIP'. 167 | CLEAR ls_signature. 168 | ls_signature-doc_count = '1'. 169 | ls_signature-comp_count = '1'. 170 | ls_signature-prop_name = 'BDS_DOCUMENTCLASS'. 171 | ls_signature-prop_value = ld_fileext. 172 | APPEND ls_signature TO lt_signature. 173 | ENDIF. 174 | 175 | ld_object_key = id_object_key. 176 | 177 | cl_bds_document_set=>create_with_table( 178 | EXPORTING 179 | classname = id_classname 180 | classtype = id_classtype 181 | components = lt_components 182 | content = lt_content 183 | vscan_profile = '/SCMS/KPRO_CREATE' 184 | CHANGING 185 | object_key = ld_object_key 186 | signature = lt_signature 187 | EXCEPTIONS 188 | internal_error = 1 189 | error_kpro = 2 190 | parameter_error = 3 191 | not_authorized = 4 192 | not_allowed = 5 193 | nothing_found = 6 194 | others = 7 195 | ). 196 | 197 | IF sy-subrc = 0. 198 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 199 | EXPORTING 200 | wait = 'X'. 201 | ELSE. 202 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 203 | 204 | es_bapiret2-type = 'E'. 205 | es_bapiret2-message = |Erro ao criar arquivo { ld_filename } no GOS|. 206 | ENDIF. 207 | endmethod. 208 | 209 | 210 | * ---------------------------------------------------------------------------------------+ 211 | * | Static Public Method ZCL_GOS_UTILS2=>LOAD_FILE_FROM_SERVER_DISK 212 | * +-------------------------------------------------------------------------------------------------+ 213 | * | [--->] ID_FULLPATH TYPE ANY 214 | * | [<---] ED_CONTENT TYPE XSTRING 215 | * | [<---] ET_BAPICONTEN TYPE BAPIDOCCONTENTAB 216 | * | [<---] ED_FILESIZE TYPE INT4 217 | * +-------------------------------------------------------------------------------------- 218 | method LOAD_FILE_FROM_SERVER_DISK. 219 | DATA: ld_line TYPE xstring. 220 | DATA: ls_bapiconten TYPE bapiconten. 221 | 222 | CLEAR ed_content. 223 | CLEAR et_bapiconten. 224 | 225 | OPEN DATASET id_fullpath FOR INPUT IN BINARY MODE. 226 | IF sy-subrc <> 0. 227 | RETURN. 228 | ENDIF. 229 | 230 | DO. 231 | READ DATASET id_fullpath INTO ld_line MAXIMUM LENGTH 1022. 232 | IF sy-subrc <> 0. 233 | EXIT. 234 | ENDIF. 235 | 236 | IF et_bapiconten IS SUPPLIED. 237 | CLEAR ls_bapiconten. 238 | ls_bapiconten-line = ld_line. 239 | APPEND ls_bapiconten TO et_bapiconten. 240 | ENDIF. 241 | 242 | IF ed_content IS SUPPLIED. 243 | CONCATENATE ld_line ed_content 244 | INTO ed_content 245 | IN BYTE MODE. 246 | ENDIF. 247 | ENDDO. 248 | 249 | GET DATASET id_fullpath POSITION ed_filesize. 250 | 251 | CLOSE DATASET id_fullpath. 252 | endmethod. 253 | 254 | 255 | * ---------------------------------------------------------------------------------------+ 256 | * | Static Public Method ZCL_GOS_UTILS2=>LOAD_FILE_GOS 257 | * +-------------------------------------------------------------------------------------------------+ 258 | * | [--->] ID_DOCUMENT TYPE ANY 259 | * | [--->] ID_CLASSNAME TYPE ANY 260 | * +-------------------------------------------------------------------------------------- 261 | method LOAD_FILE_GOS. 262 | DATA: ls_document_data TYPE sofolenti1. 263 | DATA: lt_object_content TYPE STANDARD TABLE OF solisti1. 264 | DATA: lt_contents_hex TYPE STANDARD TABLE OF solix. 265 | 266 | DATA: lt_srgbtbrel TYPE STANDARD TABLE OF srgbtbrel. 267 | DATA: ls_srgbtbrel TYPE srgbtbrel. 268 | 269 | " pode ser o número do pedido de compra, requisição de compra, qualquer documento que possa ter anexo no GOS 270 | 271 | 272 | " via SAPoffice (SOOD/SRGBTBREL) 273 | SELECT * 274 | INTO TABLE lt_srgbtbrel 275 | FROM srgbtbrel 276 | WHERE reltype = 'ATTA' 277 | AND instid_a = id_document. 278 | 279 | IF sy-subrc = 0. 280 | LOOP AT lt_srgbtbrel INTO ls_srgbtbrel. 281 | CALL FUNCTION 'SO_DOCUMENT_READ_API1' 282 | EXPORTING 283 | document_id = CONV so_entryid( ls_srgbtbrel-instid_b ) 284 | IMPORTING 285 | document_data = ls_document_data 286 | TABLES 287 | object_content = lt_object_content 288 | contents_hex = lt_contents_hex 289 | EXCEPTIONS 290 | document_id_not_exist = 1 291 | operation_no_authorization = 2 292 | x_error = 3 293 | OTHERS = 4. 294 | ENDLOOP. 295 | 296 | RETURN. 297 | ENDIF. 298 | 299 | " via BDS (Business Document Service) 300 | DATA: ld_classname TYPE bds_clsnam. 301 | DATA: ld_object_key TYPE bds_typeid. 302 | 303 | DATA: lt_signature TYPE STANDARD TABLE OF bapisignat. 304 | DATA: lt_components TYPE STANDARD TABLE OF bapicompon. 305 | DATA: lt_content TYPE STANDARD TABLE OF bapiconten. 306 | DATA: lt_ascii_content TYPE STANDARD TABLE OF bapiascont. 307 | 308 | ld_classname = id_classname. 309 | ld_object_key = id_document. 310 | 311 | CALL FUNCTION 'BDS_BUSINESSDOCUMENT_GET_TAB' 312 | EXPORTING 313 | CLIENT = sy-mandt 314 | classname = ld_classname 315 | classtype = 'BO' 316 | OBJECT_KEY = ld_object_key 317 | * BINARY_FLAG = 'X' 318 | * TEXT_AS_STREAM = 'X' 319 | TABLES 320 | signature = lt_signature 321 | components = lt_components 322 | content = lt_content 323 | ascii_content = lt_ascii_content 324 | EXCEPTIONS 325 | NOTHING_FOUND = 1 326 | PARAMETER_ERROR = 2 327 | NOT_ALLOWED = 3 328 | ERROR_KPRO = 4 329 | INTERNAL_ERROR = 5 330 | NOT_AUTHORIZED = 6 331 | OTHERS = 7. 332 | endmethod. 333 | ENDCLASS. 334 | -------------------------------------------------------------------------------- /class/ZCL_HTTP_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_http_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_JSON_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_json_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_REST_SERVER.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_rest_server.clas.abap -------------------------------------------------------------------------------- /class/ZCL_SMARTFORMS_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_smartforms_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_TEXTAREA.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_textarea.clas.abap -------------------------------------------------------------------------------- /class/ZCL_TEXT_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_text_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_TREE.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_tree.clas.abap -------------------------------------------------------------------------------- /class/ZCL_WHERE_USED_LIST.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_where_used_list.clas.abap -------------------------------------------------------------------------------- /class/ZCL_XLS_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_xls_utils.clas.abap -------------------------------------------------------------------------------- /class/ZCL_XML_UTILS.abap: -------------------------------------------------------------------------------- 1 | Novo local 2 | https://github.com/vcd94xt10z/sap-zion/blob/main/src/zcl_xml_utils.clas.abap -------------------------------------------------------------------------------- /jco/DEV.jcoDestination: -------------------------------------------------------------------------------- 1 | jco.client.lang=en 2 | jco.client.passwd=abap001 3 | jco.client.sysnr=00 4 | jco.client.client=800 5 | jco.client.user=DEVELOPER 6 | jco.client.ashost=192.168.0.10 7 | -------------------------------------------------------------------------------- /jco/Test.java: -------------------------------------------------------------------------------- 1 | package main; 2 | 3 | import java.io.File; 4 | import java.io.FileOutputStream; 5 | import java.util.Properties; 6 | 7 | import com.sap.conn.jco.JCoDestination; 8 | import com.sap.conn.jco.JCoDestinationManager; 9 | import com.sap.conn.jco.JCoFunction; 10 | import com.sap.conn.jco.JCoRepository; 11 | import com.sap.conn.jco.JCoStructure; 12 | import com.sap.conn.jco.JCoTable; 13 | import com.sap.conn.jco.ext.DestinationDataProvider; 14 | 15 | /** 16 | * @author Vinicius Cesar Dias 17 | * https://github.com/vcd94xt10z 18 | */ 19 | public class Test { 20 | 21 | public static void main(String[] args) { 22 | try { 23 | String DESTINATION_SAP = "DEV"; 24 | 25 | createDestinationDataFile(DESTINATION_SAP); 26 | 27 | final String functionModule = "ZFM_TEST_RFC"; 28 | JCoDestination destination = JCoDestinationManager.getDestination(DESTINATION_SAP); 29 | JCoFunction function = destination.getRepository().getFunction(functionModule); 30 | if (function == null) { 31 | throw new RuntimeException(functionModule+" não encontrada"); 32 | } 33 | 34 | JCoRepository repository = destination.getRepository(); 35 | 36 | // remove cache de estrutura 37 | repository.clear(); 38 | 39 | // importação: parâmetros simples 40 | function.getImportParameterList().setValue("ID_PARAM1", "Teste ID_PARAM1"); 41 | 42 | // importação: estruturas 43 | JCoStructure importStructure = function.getImportParameterList().getStructure("IS_SAIRPORT"); 44 | importStructure.setValue("ID","A01"); 45 | importStructure.setValue("NAME","Aeroporto A01"); 46 | importStructure.setValue("TIME_ZONE","UTC+1"); 47 | 48 | // modificação: parâmetros simples 49 | function.getChangingParameterList().setValue("CD_PARAM1", 2); 50 | 51 | // modificação: estruturas 52 | JCoStructure changingStructure = function.getChangingParameterList().getStructure("CS_SAIRPORT"); 53 | changingStructure.setValue("ID","A02"); 54 | changingStructure.setValue("NAME","Aeroporto A02"); 55 | changingStructure.setValue("TIME_ZONE","UTC+3"); 56 | 57 | // tabelas de entrada 58 | JCoTable importTable = function.getTableParameterList().getTable("IT_SAIRPORT"); 59 | importTable.insertRow(1); 60 | importTable.setValue(1, "A03"); 61 | importTable.setValue(2, "Aeroporto A03"); 62 | importTable.setValue(3, "UTF-4"); 63 | 64 | importTable.insertRow(2); 65 | importTable.setValue(1, "A04"); 66 | importTable.setValue(2, "Aeroporto A04"); 67 | importTable.setValue(3, "UTF-5"); 68 | 69 | // executando chamada remota 70 | function.execute(destination); 71 | 72 | // exportação: parâmetros simples 73 | System.out.print("exportacao - simples: "); 74 | System.out.print(function.getExportParameterList().getValue("ED_PARAM1")); 75 | System.out.println(""); 76 | 77 | // exportação: estruturas 78 | System.out.print("exportacao - estruturas: "); 79 | JCoStructure structure1 = function.getExportParameterList().getStructure("ES_SAIRPORT"); 80 | System.out.print(structure1.getValue("ID")+", "); 81 | System.out.print(structure1.getValue("NAME")+", "); 82 | System.out.print(structure1.getValue("TIME_ZONE")); 83 | System.out.println(""); 84 | 85 | // modificação: parâmetros simples 86 | System.out.print("changing - simples: "); 87 | System.out.print(function.getChangingParameterList().getValue("CD_PARAM1")); 88 | System.out.println(""); 89 | 90 | // modificação: estruturas 91 | System.out.print("changing - estruturas: "); 92 | JCoStructure structure2 = function.getChangingParameterList().getStructure("CS_SAIRPORT"); 93 | System.out.print(structure2.getValue("ID")+", "); 94 | System.out.print(structure2.getValue("NAME")+", "); 95 | System.out.print(structure2.getValue("TIME_ZONE")); 96 | System.out.println("\n"); 97 | 98 | // tabelas de saída 99 | System.out.println("tabelas de saida"); 100 | 101 | JCoTable exportTable = function.getTableParameterList().getTable("ET_SAIRPORT"); 102 | 103 | System.out.println("ET_SAIRPORT ("+exportTable.getNumRows()+" linhas)"); 104 | 105 | // cabeçalho 106 | System.out.println("-------------------------------------"); 107 | for(int j=0;j < exportTable.getFieldCount();j++){ 108 | String label = exportTable.getMetaData().getName(j); 109 | System.out.print("|"); 110 | System.out.print(label+"\t"); 111 | } 112 | System.out.println("|"); 113 | System.out.println("-------------------------------------"); 114 | 115 | for(int i=0;i < exportTable.getNumRows();i++){ 116 | exportTable.setRow(i); 117 | 118 | for(int j=0;j < exportTable.getFieldCount();j++){ 119 | Object value = exportTable.getValue(j); 120 | System.out.print("|"); 121 | System.out.print(value+"\t"); 122 | } 123 | System.out.println("|"); 124 | } 125 | 126 | }catch(Exception e) { 127 | e.printStackTrace(); 128 | } 129 | } 130 | 131 | static void createDestinationDataFile(String destinationName) 132 | { 133 | //SAP System 1 134 | Properties connectProperties = new Properties(); 135 | connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "192.168.0.10"); 136 | connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "00"); 137 | connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "800"); 138 | connectProperties.setProperty(DestinationDataProvider.JCO_USER, "DEVELOPER"); 139 | connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "abap001"); 140 | connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "en"); 141 | 142 | File destCfg = new File(destinationName+".jcoDestination"); 143 | try 144 | { 145 | FileOutputStream fos = new FileOutputStream(destCfg, false); 146 | connectProperties.store(fos, "for tests only !"); 147 | fos.close(); 148 | } 149 | catch (Exception e) 150 | { 151 | throw new RuntimeException("Unable to create the destination files", e); 152 | } 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /jco/ZFM_TEST_RFC.abap: -------------------------------------------------------------------------------- 1 | FUNCTION ZFM_TEST_RFC. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(ID_PARAM1) TYPE CHAR40 6 | *" VALUE(IS_SAIRPORT) TYPE SAIRPORT 7 | *" EXPORTING 8 | *" VALUE(ED_PARAM1) TYPE DATS 9 | *" VALUE(ES_SAIRPORT) TYPE SAIRPORT 10 | *" TABLES 11 | *" IT_SAIRPORT STRUCTURE SAIRPORT OPTIONAL 12 | *" ET_SAIRPORT STRUCTURE SAIRPORT OPTIONAL 13 | *" CHANGING 14 | *" VALUE(CD_PARAM1) TYPE INT4 15 | *" VALUE(CS_SAIRPORT) TYPE SAIRPORT 16 | *" EXCEPTIONS 17 | *" ERRO1 18 | *"---------------------------------------------------------------------- 19 | 20 | * 21 | * Autor Vinicius Cesar Dias 22 | * https://github.com/vcd94xt10z 23 | * 24 | ed_param1 = sy-datum. 25 | 26 | cd_param1 = 9. 27 | 28 | SELECT SINGLE * 29 | FROM sairport 30 | INTO es_sairport 31 | WHERE id = 'ACA'. 32 | 33 | SELECT SINGLE * 34 | FROM sairport 35 | INTO cs_sairport 36 | WHERE id = 'ACE'. 37 | 38 | SELECT * 39 | FROM sairport 40 | INTO TABLE et_sairport. 41 | ENDFUNCTION. 42 | -------------------------------------------------------------------------------- /jco/leiame.txt: -------------------------------------------------------------------------------- 1 | Entre no link https://me.sap.com/softwarecenter, um login SAP com permissão para acesso a downloads será solicitado 2 | Procure por "sapjco" 3 | Baixe o arquivo mais recente do seu sistema operacional 4 | Dentro do zip, tem outro zip, extraia o zip arquivo interno para um local definitivo, exemplo C:\sapjco3-NTAMD64-3.0.12 5 | No Eclipse, crie um projeto Java, exemplo "TesteJco" 6 | Crie um pacote "main" 7 | Crie uma classe "Test.java" com método main 8 | Copie e cole a classe https://github.com/vcd94xt10z/sap/blob/master/jco/Test.java 9 | Configure o BuildPath do projeto, abra "Libraries", selecione "Modulepath" e clique em "Add External Jars..." 10 | Procure o local onde foi extraído o zip e selecione o arquivo "sapjco3.jar" 11 | Clique em Apply e Close 12 | No seu arquivo "module-info.java", adicione o conteúdo 13 | module TesteJco { 14 | requires sapjco3; 15 | } 16 | Abra a classe Test.java e modifique o método createDestinationDataFile de acordo com as credenciais do seu ambiente 17 | Crie a função ZFM_TEST_RFC de acordo com o arquivo https://github.com/vcd94xt10z/sap/blob/master/jco/ZFM_TEST_RFC.abap 18 | Na função ZFM_TEST_RFC, mude o campo "Processing Type" para "Remote-Enabled Module" 19 | Todos os parâmetros da função devem ser passados por valor, não esqueça de marcar o flag! 20 | Salve e ative a função ZFM_TEST_RFC 21 | Volte no projeto Java e execute 22 | Caso queira testar com outra função, basta modificar a função na classe de acordo com os seus parâmetros 23 | Para mais informações, consulte a documentação que se encontra na pasta extraída "javadoc/intro.html" 24 | -------------------------------------------------------------------------------- /node-rfc/ZFM_TEST_RFC.abap: -------------------------------------------------------------------------------- 1 | FUNCTION ZFM_TEST_RFC. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(ID_PARAM1) TYPE CHAR40 6 | *" VALUE(IS_SAIRPORT) TYPE SAIRPORT 7 | *" EXPORTING 8 | *" VALUE(ED_PARAM1) TYPE DATS 9 | *" VALUE(ES_SAIRPORT) TYPE SAIRPORT 10 | *" TABLES 11 | *" IT_SAIRPORT STRUCTURE SAIRPORT OPTIONAL 12 | *" ET_SAIRPORT STRUCTURE SAIRPORT OPTIONAL 13 | *" CHANGING 14 | *" VALUE(CD_PARAM1) TYPE INT4 15 | *" VALUE(CS_SAIRPORT) TYPE SAIRPORT 16 | *" EXCEPTIONS 17 | *" ERRO1 18 | *"---------------------------------------------------------------------- 19 | 20 | * 21 | * Autor Vinicius Cesar Dias 22 | * https://github.com/vcd94xt10z 23 | * 24 | ed_param1 = sy-datum. 25 | 26 | cd_param1 = 9. 27 | 28 | SELECT SINGLE * 29 | FROM sairport 30 | INTO es_sairport 31 | WHERE id = 'ACA'. 32 | 33 | SELECT SINGLE * 34 | FROM sairport 35 | INTO cs_sairport 36 | WHERE id = 'ACE'. 37 | 38 | SELECT * 39 | FROM sairport 40 | INTO TABLE et_sairport. 41 | ENDFUNCTION. 42 | -------------------------------------------------------------------------------- /node-rfc/index.js: -------------------------------------------------------------------------------- 1 | const noderfc = require("node-rfc"); 2 | 3 | const client = new noderfc.Client({ dest: "S4H" }); 4 | 5 | (async () => { 6 | try { 7 | await client.open(); 8 | 9 | const result = await client.call("ZFM_TEST_RFC",{ 10 | ID_PARAM1: "Teste", 11 | IS_SAIRPORT: { 12 | ID: "A01", 13 | NAME: "Aeroporto A01", 14 | TIME_ZONE: "UTC-3" 15 | }, 16 | CD_PARAM1: 2, 17 | CS_SAIRPORT: { 18 | ID: "A02", 19 | NAME: "Aeroporto A02", 20 | TIME_ZONE: "UTC-2" 21 | }, 22 | IT_SAIRPORT: [ 23 | {ID: "A03",NAME: "Aeroporto A03",TIME_ZONE: "UTC-1"}, 24 | {ID: "A04",NAME: "Aeroporto A04",TIME_ZONE: "UTC-2"}, 25 | {ID: "A05",NAME: "Aeroporto A05",TIME_ZONE: "UTC-3"} 26 | ] 27 | }); 28 | 29 | // check the result 30 | console.log(result); 31 | } catch (err) { 32 | // connection and invocation errors 33 | console.error(err); 34 | } 35 | })(); 36 | -------------------------------------------------------------------------------- /node-rfc/leiame.txt: -------------------------------------------------------------------------------- 1 | # link do projeto original https://github.com/SAP/node-rfc 2 | # Ambiente: Fedora Server 38 x64 3 | 4 | Entre no link https://me.sap.com/softwarecenter, um login SAP com permissão para acesso a downloads será solicitado 5 | Procure pelo termo "NW RFC SDK 7.50" e baixe a versão adequada para o seu sistema operacional 6 | Extraia o zip para o diretório /usr/sap/nwrfcsdk 7 | Crie o arquivo /etc/ld.so.conf.d/nwrfcsdk.conf com o conteúdo "/usr/sap/nwrfcsdk/lib" 8 | Execute o comando "ldconfig" 9 | 10 | yum update 11 | yum install nodejs 12 | 13 | mkdir /projeto 14 | cd /projeto 15 | npm install node-rfc 16 | Baixe o arquivo index.js 17 | Copie e modifique o arquivo sapnwrfc.ini com os dados do seu ambiente 18 | 19 | Crie a função ZFM_TEST_RFC conforme arquivo do projeto 20 | 21 | Execute 22 | $ node index.js 23 | -------------------------------------------------------------------------------- /node-rfc/sapnwrfc.ini: -------------------------------------------------------------------------------- 1 | DEST=S4H 2 | USER=DEVELOPER 3 | PASSWD=abap001 4 | ASHOST=192.168.0.10 5 | SYSNR=00 6 | CLIENT=800 7 | LANG=EN -------------------------------------------------------------------------------- /php7-sapnwrfc/ZFM_TEST_RFC.abap: -------------------------------------------------------------------------------- 1 | FUNCTION ZFM_TEST_RFC. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(ID_PARAM1) TYPE CHAR40 6 | *" VALUE(IS_SAIRPORT) TYPE SAIRPORT 7 | *" EXPORTING 8 | *" VALUE(ED_PARAM1) TYPE DATS 9 | *" VALUE(ES_SAIRPORT) TYPE SAIRPORT 10 | *" TABLES 11 | *" IT_SAIRPORT STRUCTURE SAIRPORT OPTIONAL 12 | *" ET_SAIRPORT STRUCTURE SAIRPORT OPTIONAL 13 | *" CHANGING 14 | *" VALUE(CD_PARAM1) TYPE INT4 15 | *" VALUE(CS_SAIRPORT) TYPE SAIRPORT 16 | *" EXCEPTIONS 17 | *" ERRO1 18 | *"---------------------------------------------------------------------- 19 | 20 | * 21 | * Autor Vinicius Cesar Dias 22 | * https://github.com/vcd94xt10z 23 | * 24 | ed_param1 = sy-datum. 25 | 26 | cd_param1 = 9. 27 | 28 | SELECT SINGLE * 29 | FROM sairport 30 | INTO es_sairport 31 | WHERE id = 'ACA'. 32 | 33 | SELECT SINGLE * 34 | FROM sairport 35 | INTO cs_sairport 36 | WHERE id = 'ACE'. 37 | 38 | SELECT * 39 | FROM sairport 40 | INTO TABLE et_sairport. 41 | ENDFUNCTION. 42 | -------------------------------------------------------------------------------- /php7-sapnwrfc/index.php: -------------------------------------------------------------------------------- 1 | '192.168.0.10', 11 | 'sysnr' => '00', 12 | 'client' => '800', 13 | 'user' => 'DEVELOPER', 14 | 'passwd' => 'abap001', 15 | 'trace' => SapConnection::TRACE_LEVEL_OFF, 16 | ]; 17 | 18 | try { 19 | $c = new SapConnection($config); 20 | 21 | $f = $c->getFunction('ZFM_TEST_RFC'); 22 | $result = $f->invoke([ 23 | 'ID_PARAM1' => 'teste', 24 | 'IS_SAIRPORT' => [ 25 | "ID" => "AAA" 26 | ], 27 | 'CD_PARAM1' => 1, 28 | 'CS_SAIRPORT' => [ 29 | "ID" => "AAA" 30 | ] 31 | ]); 32 | 33 | echo "
";
34 |     var_dump($result);
35 | 	echo "
"; 36 | } catch(SapException $ex) { 37 | echo 'Exception: ' . $ex->getMessage() . PHP_EOL; 38 | } 39 | ?> 40 | -------------------------------------------------------------------------------- /php7-sapnwrfc/instalação-configuração-servidor-web.txt: -------------------------------------------------------------------------------- 1 | setenforce 0 2 | vi /etc/selinux/config 3 | SELINUX=disabled 4 | 5 | systemctl stop firewalld 6 | systemctl disable firewalld 7 | yum update 8 | yum install httpd 9 | yum install php 10 | 11 | mkdir /webserver/ 12 | mkdir /webserver/sites/localhost/public 13 | mkdir /webserver/vhosts 14 | vi /webserver/sites/localhost/public/index.php 15 | 18 | 19 | vi /webserver/vhosts/localhost.conf 20 | 21 | ServerName localhost 22 | DocumentRoot "/webserver/sites/localhost/public" 23 | 24 | Require all granted 25 | AllowOverride All 26 | 27 | 28 | 29 | vi /etc/httpd/conf/httpd.conf 30 | # Incluir no final do arquivo 31 | IncludeOptional /webserver/vhosts/*.conf 32 | service httpd start 33 | systemctl enable httpd 34 | 35 | # recomendo que você reinicie o Linux agora 36 | 37 | # teste http://localhost 38 | -------------------------------------------------------------------------------- /php7-sapnwrfc/leiame.txt: -------------------------------------------------------------------------------- 1 | Este passo a passo se aplica a um Linux Fedora Server x64 2 | O guia foi resumido do tutorial que se encontra em https://gkralik.github.io/php7-sapnwrfc/installation.html 3 | O passo a passo funcionou mesmo no PHP 8 4 | 5 | Cenário 6 | Fedora Server 38 x64 rodando no VirtualBox 7 | Apache 2.4.57 8 | PHP 8.2.8 9 | 10 | Entre no link https://me.sap.com/softwarecenter, um login SAP com permissão para acesso a downloads será solicitado 11 | Procure pelo termo "NW RFC SDK 7.50" e baixe a versão adequada para o seu sistema operacional 12 | Extraia o zip para o diretório /usr/sap/nwrfcsdk 13 | Crie o arquivo /etc/ld.so.conf.d/nwrfcsdk.conf com o conteúdo "/usr/sap/nwrfcsdk/lib" 14 | Execute o comando "ldconfig" 15 | 16 | Crie um diretório na raiz do Linux "instalacao", entre e execute os comandos 17 | $ yum install git 18 | $ git clone https://github.com/gkralik/php7-sapnwrfc.git 19 | $ cd php7-sapnwrfc 20 | $ yum install php-devel 21 | $ phpize 22 | $ ./configure 23 | $ make 24 | $ sudo make install 25 | 26 | Edite o arquivo /etc/php.ini e adicione a linha ao final "extension=sapnwrfc.so" 27 | Reinicie o PHP 28 | 29 | Execute o comando "php -m" e verifique se o módulo "sapnwrfc" aparece na lista, indicando que deu certo 30 | 31 | Copie o arquivo "index.php" disponibilizado 32 | Modifique os dados para o seu ambiente SAP 33 | Faça um teste acessando http://localhost e veja o resultado 34 | -------------------------------------------------------------------------------- /program/ALV com tela proposta.abap: -------------------------------------------------------------------------------- 1 | * Include top 2 | DATA: gt_item TYPE STANDARD TABLE OF tabela. 3 | DATA: gs_item TYPE tabela. 4 | 5 | DATA: go_grid1 TYPE REF TO CL_GUI_ALV_GRID. 6 | DATA: go_custom_container TYPE REF TO CL_GUI_CUSTOM_CONTAINER. 7 | 8 | * Criar tela 9000 9 | 10 | * PBO 11 | MODULE pbo_9000 OUTPUT. 12 | SET PF-STATUS 'S9000'. 13 | SET TITLEBAR 'T9000'. 14 | 15 | CLEAR sy-ucomm. 16 | 17 | DATA: lt_fieldcat TYPE lvc_t_fcat. 18 | DATA: ls_fieldcat TYPE lvc_s_fcat. 19 | 20 | IF go_custom_container IS INITIAL. 21 | CLEAR lt_fieldcat. 22 | 23 | CLEAR ls_fieldcat. 24 | ls_fieldcat-fieldname = 'MANDT'. 25 | ls_fieldcat-scrtext_m = 'Mandante'. 26 | ls_fieldcat-no_out = 'X'. 27 | APPEND ls_fieldcat TO lt_fieldcat. 28 | 29 | CLEAR ls_fieldcat. 30 | ls_fieldcat-fieldname = 'VBELN'. 31 | ls_fieldcat-scrtext_m = 'Ordem'. 32 | ls_fieldcat-no_out = 'X'. 33 | APPEND ls_fieldcat TO lt_fieldcat. 34 | 35 | CLEAR ls_fieldcat. 36 | ls_fieldcat-fieldname = 'POSNR'. 37 | ls_fieldcat-scrtext_m = 'Item'. 38 | APPEND ls_fieldcat TO lt_fieldcat. 39 | 40 | CLEAR ls_fieldcat. 41 | ls_fieldcat-fieldname = 'MATNR'. 42 | ls_fieldcat-scrtext_m = 'Material'. 43 | APPEND ls_fieldcat TO lt_fieldcat. 44 | 45 | CLEAR ls_fieldcat. 46 | ls_fieldcat-fieldname = 'MAKTX'. 47 | ls_fieldcat-scrtext_m = 'Descrição'. 48 | APPEND ls_fieldcat TO lt_fieldcat. 49 | 50 | CLEAR ls_fieldcat. 51 | ls_fieldcat-fieldname = 'VRKME'. 52 | ls_fieldcat-scrtext_m = 'Un. Venda'. 53 | APPEND ls_fieldcat TO lt_fieldcat. 54 | 55 | CLEAR ls_fieldcat. 56 | ls_fieldcat-fieldname = 'UMREZ'. 57 | ls_fieldcat-scrtext_m = 'Qtd. Un. Venda'. 58 | APPEND ls_fieldcat TO lt_fieldcat. 59 | 60 | CLEAR ls_fieldcat. 61 | ls_fieldcat-fieldname = 'VALOR_UNI'. 62 | ls_fieldcat-scrtext_m = 'Valor Unitário'. 63 | APPEND ls_fieldcat TO lt_fieldcat. 64 | 65 | CLEAR ls_fieldcat. 66 | ls_fieldcat-fieldname = 'MENGE'. 67 | ls_fieldcat-scrtext_m = 'Quantidade'. 68 | APPEND ls_fieldcat TO lt_fieldcat. 69 | 70 | CLEAR ls_fieldcat. 71 | ls_fieldcat-fieldname = 'VALOR_TOT'. 72 | ls_fieldcat-scrtext_m = 'Valor Total'. 73 | APPEND ls_fieldcat TO lt_fieldcat. 74 | 75 | CLEAR ls_fieldcat. 76 | ls_fieldcat-fieldname = 'PESO_UNI'. 77 | ls_fieldcat-scrtext_m = 'Peso Unitário'. 78 | ls_fieldcat-no_out = 'X'. 79 | APPEND ls_fieldcat TO lt_fieldcat. 80 | 81 | CLEAR ls_fieldcat. 82 | ls_fieldcat-fieldname = 'PESO_TOT'. 83 | ls_fieldcat-scrtext_m = 'Peso Total'. 84 | APPEND ls_fieldcat TO lt_fieldcat. 85 | 86 | LOOP AT lt_fieldcat ASSIGNING FIELD-SYMBOL(). 87 | -col_pos = sy-tabix. 88 | -scrtext_l = -scrtext_m. 89 | -scrtext_s = -scrtext_m. 90 | -coltext = -scrtext_m. 91 | ENDLOOP. 92 | 93 | CREATE OBJECT go_custom_container 94 | EXPORTING 95 | container_name = 'ALV_1'. 96 | 97 | CREATE OBJECT go_grid1 98 | EXPORTING 99 | I_PARENT = go_custom_container. 100 | 101 | CALL METHOD go_grid1->set_table_for_first_display 102 | EXPORTING 103 | i_structure_name = 'ZFV_OVITEM' 104 | CHANGING 105 | it_outtab = gt_item 106 | it_fieldcatalog = lt_fieldcat. 107 | 108 | go_grid1->refresh_table_display( ). 109 | ENDIF. 110 | ENDMODULE. -------------------------------------------------------------------------------- /program/ZABRE_PERIODO.abap: -------------------------------------------------------------------------------- 1 | REPORT ZABRE_PERIODO. 2 | 3 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 4 | PARAMETERS p_year1 TYPE int4. 5 | PARAMETERS p_month1 TYPE int4. 6 | 7 | PARAMETERS p_year2 TYPE int4. 8 | PARAMETERS p_month2 TYPE int4. 9 | SELECTION-SCREEN END OF BLOCK main. 10 | 11 | START-OF-SELECTION. 12 | IF p_year1 > p_year2. 13 | MESSAGE 'Ano inicial é maior que o final' TYPE 'S' DISPLAY LIKE 'E'. 14 | EXIT. 15 | ENDIF. 16 | 17 | IF p_year2 = sy-datum(4) AND p_month2 > sy-datum+4(2). 18 | MESSAGE 'Mês final ultrapassa a data atual' TYPE 'S' DISPLAY LIKE 'E'. 19 | EXIT. 20 | ENDIF. 21 | 22 | DO. 23 | IF p_year1 = p_year2 AND p_month1 > p_month2. 24 | EXIT. 25 | ENDIF. 26 | 27 | " MMRV / MMPV 28 | SUBMIT rmmmperi 29 | WITH i_vbukr = '7000' 30 | WITH i_lfmon = p_month1 31 | WITH i_lfgja = p_year1 32 | AND RETURN. 33 | 34 | p_month1 = p_month1 + 1. 35 | IF p_month1 > 12. 36 | p_month1 = 1. 37 | p_year1 = p_year1 + 1. 38 | ENDIF. 39 | ENDDO. 40 | -------------------------------------------------------------------------------- /program/ZALV_BASICO.abap: -------------------------------------------------------------------------------- 1 | * Versão 0.2 2 | REPORT ZALV_BASICO. 3 | 4 | * Programas exemplos do BCALV_GRID_01 até BCALV_GRID_11 5 | 6 | START-OF-SELECTION. 7 | PERFORM exemplo1. 8 | "PERFORM exemplo2. 9 | 10 | FORM exemplo1. 11 | DATA: lo_table TYPE REF TO cl_salv_table. 12 | DATA: lo_columns TYPE REF TO cl_salv_columns_table. 13 | DATA: lo_column TYPE REF TO cl_salv_column. 14 | DATA: lo_functions TYPE REF TO cl_salv_functions_list. 15 | DATA: lo_display TYPE REF TO cl_salv_display_settings. 16 | 17 | DATA lo_layout_settings TYPE REF TO cl_salv_layout. 18 | DATA ls_layout_key TYPE salv_s_layout_key. 19 | 20 | DATA: lt_result TYPE STANDARD TABLE OF stravelag. 21 | 22 | SELECT * 23 | INTO TABLE lt_result 24 | FROM stravelag. 25 | 26 | cl_salv_table=>factory( 27 | IMPORTING 28 | r_salv_table = lo_table 29 | CHANGING 30 | t_table = lt_result 31 | ). 32 | 33 | " otimizando largura das colunas 34 | lo_columns = lo_table->get_columns( ). 35 | lo_columns->set_optimize( ). 36 | 37 | " exibindo barra de ferramentas (barra de botões acima do ALV) 38 | lo_functions = lo_table->get_functions( ). 39 | lo_functions->set_all( ). 40 | 41 | " efeito zebra (alternar cor de fundo das linhas) 42 | lo_display = lo_table->get_display_settings( ). 43 | lo_display->set_striped_pattern( cl_salv_display_settings=>true ). 44 | 45 | " habilitar opções de layout (salvar, carregar etc) 46 | lo_layout_settings = lo_table->get_layout( ). 47 | ls_layout_key-report = sy-repid. 48 | lo_layout_settings->set_key( ls_layout_key ). 49 | lo_layout_settings->set_save_restriction( if_salv_c_layout=>restrict_none ). 50 | 51 | " alterando propriedades de uma coluna (nome, alinhamento etc.) 52 | lo_column = lo_columns->get_column( 'NAME' ). 53 | lo_column->set_long_text( 'NAME' ). 54 | lo_column->set_alignment( IF_SALV_C_ALIGNMENT=>CENTERED ). 55 | "lo_column->set_visible( if_salv_c_bool_sap=>false ). 56 | 57 | lo_table->display( ). 58 | ENDFORM. 59 | FORM exemplo2. 60 | DATA: ls_fieldcat TYPE slis_fieldcat_alv. 61 | DATA: lt_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv. 62 | 63 | DATA: lt_message TYPE bapiret2_t. 64 | DATA: ls_message TYPE bapiret2. 65 | 66 | CLEAR lt_fieldcat. 67 | 68 | CLEAR ls_fieldcat. 69 | ls_fieldcat-fieldname = 'TYPE'. 70 | ls_fieldcat-seltext_m = 'Tipo'. 71 | APPEND ls_fieldcat TO lt_fieldcat. 72 | 73 | CLEAR ls_fieldcat. 74 | ls_fieldcat-fieldname = 'MESSAGE'. 75 | ls_fieldcat-seltext_m = 'Mensagem'. 76 | ls_fieldcat-outputlen = 60. 77 | APPEND ls_fieldcat TO lt_fieldcat. 78 | 79 | CLEAR ls_message. 80 | ls_message-type = 'E'. 81 | ls_message-message = 'Teste 1'. 82 | APPEND ls_message TO lt_message. 83 | 84 | CLEAR ls_message. 85 | ls_message-type = 'S'. 86 | ls_message-message = 'Teste 2'. 87 | APPEND ls_message TO lt_message. 88 | 89 | CLEAR ls_message. 90 | ls_message-type = 'W'. 91 | ls_message-message = 'Teste 3'. 92 | APPEND ls_message TO lt_message. 93 | 94 | CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 95 | EXPORTING 96 | i_callback_program = sy-repid 97 | i_grid_title = 'Mensagens' 98 | it_fieldcat = lt_fieldcat 99 | i_save = 'X' 100 | * i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM 101 | * i_callback_user_command = 'USER_COMMAND' 102 | * is_layout = gd_layout 103 | * it_special_groups = gd_tabgroup 104 | * it_events = gt_xevents 105 | * is_variant = z_template 106 | TABLES 107 | t_outtab = lt_message 108 | EXCEPTIONS 109 | program_error = 1 110 | others = 2. 111 | ENDFORM. 112 | -------------------------------------------------------------------------------- /program/ZALV_BASICO2.abap: -------------------------------------------------------------------------------- 1 | * Versão 0.1 2 | 3 | * 4 | * Para executar esse exemplo, siga os passos 5 | * 1) Crie uma tela com o número 9001 6 | * 2) Dentro da tela, no módulo PROCESS AFTER INPUT, use o módulo pai 7 | * 3) Dentro da tela, no módulo PROCESS BEFORE OUTPUT, use o módulo pbo 8 | * 4) Dentro da tela, insira um container que ocupa todo espaço disponível, coloque o nome CONTAINER 9 | * 5) Crie um STATUS GUI S9001 e coloque as funções para do botão verde, amarelho e vermelho, 10 | * respectivamente BACK, UP e CANCEL 11 | * 6) Ative tudo e execute 12 | * 13 | REPORT ZALV_BASICO2. 14 | 15 | DATA: go_grid TYPE REF TO cl_gui_alv_grid. 16 | DATA: go_ccontainer TYPE REF TO cl_gui_custom_container. 17 | DATA: gt_spfli TYPE TABLE OF spfli. 18 | DATA: gs_layout TYPE lvc_s_layo. 19 | DATA: gs_variant TYPE disvariant. 20 | DATA: gt_fieldcat TYPE lvc_t_fcat. 21 | DATA: gs_fieldcat TYPE lvc_s_fcat. 22 | 23 | START-OF-SELECTION. 24 | SELECT * 25 | FROM spfli 26 | INTO TABLE gt_spfli. 27 | 28 | CALL SCREEN 9001. 29 | 30 | MODULE pbo OUTPUT. 31 | SET PF-STATUS 'S9001'. 32 | 33 | IF go_ccontainer IS INITIAL. 34 | " cria o container 35 | CREATE OBJECT go_ccontainer 36 | EXPORTING 37 | container_name = 'CONTAINER'. 38 | 39 | " cria a GRID 40 | CREATE OBJECT go_grid 41 | EXPORTING 42 | i_parent = go_ccontainer. 43 | 44 | " configurando opções do layout do ALV 45 | CLEAR gs_layout. 46 | gs_layout-zebra = 'X'. 47 | gs_layout-col_opt = 'X'. 48 | gs_layout-sel_mode = 'A'. 49 | gs_layout-no_toolbar = ''. 50 | 51 | " exibindo opção de salvar variante de ALV 52 | CLEAR gs_variant. 53 | gs_variant-report = sy-repid. 54 | gs_variant-username = sy-uname. 55 | 56 | " configurando uma coluna 57 | CLEAR gs_fieldcat. 58 | gs_fieldcat-fieldname = 'CARRID'. 59 | gs_fieldcat-outputlen = 10. 60 | gs_fieldcat-coltext = 'ID'. 61 | gs_fieldcat-just = 'C'. 62 | APPEND gs_fieldcat TO gt_fieldcat. 63 | 64 | " exibe o ALV 65 | CALL METHOD go_grid->set_table_for_first_display 66 | EXPORTING 67 | i_structure_name = 'SPFLI' " informe para exibir as colunas de uma tabela, não precisando do parâmetro it_fieldcatalog 68 | is_layout = gs_layout 69 | is_variant = gs_variant 70 | i_save = 'X' " exibe a opção para salvar variante 71 | CHANGING 72 | "it_fieldcatalog = gt_fieldcat " fielcat (só é necessário se não informar o parâmetro i_structure_name) 73 | it_outtab = gt_spfli. 74 | ENDIF. 75 | ENDMODULE. 76 | MODULE pai INPUT. 77 | CALL METHOD cl_gui_cfw=>dispatch. 78 | 79 | CASE sy-ucomm. 80 | WHEN 'BACK' OR 'UP' OR 'CANCEL'. 81 | LEAVE PROGRAM. 82 | ENDCASE. 83 | ENDMODULE. 84 | -------------------------------------------------------------------------------- /program/ZAUTHORITY_CHECK.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Última atualização 10/08/2023 v0.1 4 | * https://github.com/vcd94xt10z 5 | * 6 | * Criar Classe e Objeto de Autorização 7 | * Transação SU21 8 | * 9 | * Exibir verificação de autorização 10 | * Transação SU53 11 | * 12 | * Dar autorização para um usuário 13 | * Transação PFCG 14 | * 15 | REPORT ZAUTHORITY_CHECK. 16 | 17 | CONSTANTS: lc_green TYPE char4 VALUE '@5B@'. 18 | CONSTANTS: lc_red TYPE char4 VALUE '@5C@'. 19 | 20 | START-OF-SELECTION. 21 | AUTHORITY-CHECK OBJECT 'ZCLIENTE' 22 | ID 'ACTVT' FIELD '01'. 23 | 24 | CASE sy-subrc. 25 | WHEN 0. 26 | WRITE lc_green AS ICON. 27 | WRITE 'Você tem autorização'. 28 | WHEN 4. 29 | WRITE lc_red AS ICON. 30 | WRITE |Você não tem autorização|. 31 | WHEN 12. 32 | WRITE lc_red AS ICON. 33 | WRITE |Nenhuma autorização encontrada|. 34 | WHEN OTHERS. 35 | WRITE lc_red AS ICON. 36 | WRITE |Erro em verificar autorização ({ sy-subrc })|. 37 | ENDCASE. 38 | -------------------------------------------------------------------------------- /program/ZBAPI.abap: -------------------------------------------------------------------------------- 1 | REPORT ZBAPI. 2 | 3 | START-OF-SELECTION. 4 | PERFORM criar_ordem. 5 | "PERFORM modificar_ordem. 6 | 7 | FORM criar_ordem. 8 | DATA: ld_vbeln TYPE vbeln. 9 | DATA: ls_order_header_in TYPE bapisdhd1. 10 | DATA: ls_order_header_inx TYPE bapisdhd1x. 11 | DATA: lt_order_items_in TYPE STANDARD TABLE OF bapisditm. 12 | DATA: ls_order_items_in TYPE bapisditm. 13 | DATA: lt_order_items_inx TYPE STANDARD TABLE OF bapisditmx. 14 | DATA: ls_order_items_inx TYPE bapisditmx. 15 | DATA: lt_order_partners TYPE STANDARD TABLE OF bapiparnr. 16 | DATA: ls_order_partners TYPE bapiparnr. 17 | DATA: lt_bapiret2 TYPE bapiret2_t. 18 | 19 | DATA: lt_order_schedules_in TYPE STANDARD TABLE OF bapischdl. 20 | DATA: ls_order_schedules_in TYPE bapischdl. 21 | DATA: lt_order_schedules_inx TYPE STANDARD TABLE OF bapischdlx. 22 | DATA: ls_order_schedules_inx TYPE bapischdlx. 23 | DATA: lt_order_conditions_in TYPE STANDARD TABLE OF bapicond. 24 | DATA: ls_order_conditions_in TYPE bapicond. 25 | DATA: lt_order_conditions_inx TYPE STANDARD TABLE OF bapicondx. 26 | DATA: ls_order_conditions_inx TYPE bapicondx. 27 | DATA: lt_order_text TYPE STANDARD TABLE OF bapisdtext. 28 | DATA: ls_order_text TYPE bapisdtext. 29 | 30 | " cabeçalho 31 | CLEAR ls_order_header_in. 32 | ls_order_header_in-doc_type = 'ORB'. " Tipo de Ordem (AUART) 33 | ls_order_header_in-sales_org = '7000'. " Org. Vendas (VKORG) 34 | ls_order_header_in-distr_chan = '10'. " Canal de Distribuição (VTWEG) 35 | ls_order_header_in-division = '00'. " Distribuição 36 | ls_order_header_in-pmnttrms = '0001'. " Condição de Pagamento (ZTERM) 37 | ls_order_header_in-currency = 'BRL'. 38 | ls_order_header_in-purch_no_c = 'via BAPI'. 39 | ls_order_header_in-purch_date = sy-datum. 40 | ls_order_header_in-incoterms1 = 'CIF'. 41 | ls_order_header_in-incoterms2 = 'São Paulo'. 42 | ls_order_header_in-price_date = sy-datum. 43 | ls_order_header_in-price_list = '02'. 44 | 45 | ls_order_header_inx-doc_type = 'X'. 46 | ls_order_header_inx-sales_org = 'X'. 47 | ls_order_header_inx-distr_chan = 'X'. 48 | ls_order_header_inx-division = 'X'. 49 | ls_order_header_inx-pmnttrms = 'X'. 50 | ls_order_header_inx-currency = 'X'. 51 | ls_order_header_inx-purch_no_c = 'X'. 52 | ls_order_header_inx-purch_date = 'X'. 53 | ls_order_header_inx-incoterms1 = 'X'. 54 | ls_order_header_inx-incoterms2 = 'X'. 55 | ls_order_header_inx-price_list = 'X'. 56 | ls_order_header_inx-price_date = 'X'. 57 | 58 | ls_order_header_inx-updateflag = 'I'. 59 | 60 | " parceiros 61 | CLEAR ls_order_partners. 62 | ls_order_partners-partn_role = 'AG'. " Emissor da Ordem 63 | ls_order_partners-partn_numb = 'BR-S50A00'. " Código do cliente 64 | APPEND ls_order_partners TO lt_order_partners. 65 | 66 | CLEAR ls_order_partners. 67 | ls_order_partners-partn_role = 'WE'. " Recebedor da Mercadoria 68 | ls_order_partners-partn_numb = 'BR-S50A00'. " Código do cliente 69 | APPEND ls_order_partners TO lt_order_partners. 70 | 71 | " itens 72 | CLEAR ls_order_items_in. 73 | ls_order_items_in-itm_number = '000010'. 74 | ls_order_items_in-material = 'BR-AS100'. 75 | ls_order_items_in-plant = '7000'. 76 | ls_order_items_in-target_qty = 2. 77 | 78 | CLEAR ls_order_items_inx. 79 | ls_order_items_inx-itm_number = '000010'. 80 | ls_order_items_inx-material = 'X'. 81 | ls_order_items_inx-plant = 'X'. 82 | ls_order_items_inx-target_qty = 'X'. 83 | ls_order_items_inx-updateflag = 'I'. 84 | 85 | APPEND ls_order_items_in TO lt_order_items_in. 86 | APPEND ls_order_items_inx TO lt_order_items_inx. 87 | 88 | " divisão de remessa 89 | CLEAR ls_order_schedules_in. 90 | ls_order_schedules_in-itm_number = '000010'. 91 | ls_order_schedules_in-sched_line = '0001'. 92 | ls_order_schedules_in-req_qty = 2. 93 | APPEND ls_order_schedules_in TO lt_order_schedules_in. 94 | 95 | CLEAR ls_order_schedules_inx. 96 | ls_order_schedules_inx-itm_number = '000010'. 97 | ls_order_schedules_inx-sched_line = '0001'. 98 | ls_order_schedules_inx-req_qty = 'X'. 99 | ls_order_schedules_inx-updateflag = 'I'. 100 | APPEND ls_order_schedules_inx TO lt_order_schedules_inx. 101 | 102 | " condições 103 | CLEAR ls_order_conditions_in. 104 | ls_order_conditions_in-itm_number = '000010'. 105 | ls_order_conditions_in-cond_st_no = '001'. 106 | ls_order_conditions_in-cond_count = '01'. 107 | ls_order_conditions_in-cond_type = 'ZPB0'. 108 | ls_order_conditions_in-cond_value = `123.59`. 109 | ls_order_conditions_in-currency = 'BRL'. 110 | APPEND ls_order_conditions_in TO lt_order_conditions_in. 111 | 112 | CLEAR ls_order_conditions_inx. 113 | ls_order_conditions_inx-itm_number = '000010'. 114 | ls_order_conditions_inx-cond_st_no = '001'. 115 | ls_order_conditions_inx-cond_count = '01'. 116 | ls_order_conditions_inx-cond_type = 'X'. 117 | ls_order_conditions_inx-cond_value = 'X'. 118 | ls_order_conditions_inx-currency = 'X'. 119 | ls_order_conditions_inx-updateflag = 'I'. 120 | APPEND ls_order_conditions_inx TO lt_order_conditions_inx. 121 | 122 | " textos 123 | CLEAR ls_order_text. 124 | ls_order_text-langu = 'PT'. 125 | ls_order_text-langu_iso = 'PT'. 126 | ls_order_text-format_col = '*'. 127 | 128 | " Texto cabeçalho de formulário 129 | ls_order_text-text_id = '0001'. 130 | ls_order_text-text_line = 'Linha 1'. 131 | APPEND ls_order_text TO lt_order_text. 132 | 133 | ls_order_text-text_line = 'Linha 2'. 134 | APPEND ls_order_text TO lt_order_text. 135 | 136 | " Nota de cabeçalho 1 137 | ls_order_text-text_id = '0002'. 138 | ls_order_text-text_line = 'Linha A'. 139 | APPEND ls_order_text TO lt_order_text. 140 | 141 | ls_order_text-text_line = 'Linha B'. 142 | APPEND ls_order_text TO lt_order_text. 143 | 144 | CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' 145 | EXPORTING 146 | order_header_in = ls_order_header_in 147 | order_header_inx = ls_order_header_inx 148 | "logic_switch = 149 | IMPORTING 150 | salesdocument = ld_vbeln 151 | TABLES 152 | return = lt_bapiret2 153 | order_items_in = lt_order_items_in 154 | order_items_inx = lt_order_items_inx 155 | order_partners = lt_order_partners 156 | order_schedules_in = lt_order_schedules_in 157 | order_schedules_inx = lt_order_schedules_inx 158 | order_conditions_in = lt_order_conditions_in 159 | order_conditions_inx = lt_order_conditions_inx 160 | order_text = lt_order_text. 161 | 162 | READ TABLE lt_bapiret2 TRANSPORTING NO FIELDS WITH KEY type = 'E'. 163 | IF sy-subrc = 0. 164 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 165 | cl_rmsl_message=>display( lt_bapiret2 ). 166 | EXIT. 167 | ENDIF. 168 | 169 | IF lines( lt_bapiret2 ) > 0. 170 | "cl_rmsl_message=>display( lt_bapiret2 ). 171 | ENDIF. 172 | 173 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 174 | EXPORTING 175 | wait = 'X'. 176 | 177 | MESSAGE |Ordem criada com sucesso { ld_vbeln }| TYPE 'I'. 178 | ENDFORM. 179 | FORM modificar_ordem. 180 | DATA: ld_vbeln TYPE vbeln. 181 | 182 | DATA: ls_order_header_in TYPE bapisdh1. 183 | DATA: ls_order_header_inx TYPE bapisdh1x. 184 | DATA: lt_order_item_in TYPE STANDARD TABLE OF bapisditm. 185 | DATA: ls_order_item_in TYPE bapisditm. 186 | DATA: lt_order_item_inx TYPE STANDARD TABLE OF bapisditmx. 187 | DATA: ls_order_item_inx TYPE bapisditmx. 188 | DATA: lt_schedule_lines TYPE STANDARD TABLE OF bapischdl. 189 | DATA: ls_schedule_lines TYPE bapischdl. 190 | DATA: lt_schedule_linesx TYPE STANDARD TABLE OF bapischdlx. 191 | DATA: ls_schedule_linesx TYPE bapischdlx. 192 | DATA: lt_order_text TYPE STANDARD TABLE OF bapisdtext. 193 | DATA: ls_order_text TYPE bapisdtext. 194 | DATA: lt_conditions_in TYPE STANDARD TABLE OF bapicond. 195 | DATA: ls_conditions_in TYPE bapicond. 196 | DATA: lt_conditions_inx TYPE STANDARD TABLE OF bapicondx. 197 | DATA: ls_conditions_inx TYPE bapicondx. 198 | DATA: lt_bapiret2 TYPE bapiret2_t. 199 | 200 | ld_vbeln = '15457'. 201 | 202 | CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 203 | EXPORTING 204 | input = ld_vbeln 205 | IMPORTING 206 | output = ld_vbeln. 207 | 208 | " cabeçalho 209 | ls_order_header_in-purch_no_c = 'via BAPI (editado)'. 210 | ls_order_header_inx-purch_no_c = 'X'. 211 | ls_order_header_inx-updateflag = 'U'. 212 | 213 | " itens 214 | CLEAR ls_order_item_in. 215 | ls_order_item_in-itm_number = '000010'. 216 | ls_order_item_in-target_qty = 4. 217 | 218 | CLEAR ls_order_item_inx. 219 | ls_order_item_inx-itm_number = '000010'. 220 | ls_order_item_inx-target_qty = 'X'. 221 | ls_order_item_inx-updateflag = 'U'. 222 | 223 | APPEND ls_order_item_in TO lt_order_item_in. 224 | APPEND ls_order_item_inx TO lt_order_item_inx. 225 | 226 | " divisão de remessa 227 | CLEAR ls_schedule_lines. 228 | ls_schedule_lines-itm_number = '000010'. 229 | ls_schedule_lines-sched_line = '0001'. 230 | ls_schedule_lines-req_qty = 4. 231 | APPEND ls_schedule_lines TO lt_schedule_lines. 232 | 233 | CLEAR ls_schedule_linesx. 234 | ls_schedule_linesx-itm_number = '000010'. 235 | ls_schedule_linesx-sched_line = '0001'. 236 | ls_schedule_linesx-req_qty = 'X'. 237 | ls_schedule_linesx-updateflag = 'U'. 238 | APPEND ls_schedule_linesx TO lt_schedule_linesx. 239 | 240 | " condições 241 | CLEAR ls_conditions_in. 242 | ls_conditions_in-itm_number = '000010'. 243 | ls_conditions_in-cond_st_no = '001'. 244 | ls_conditions_in-cond_count = '01'. 245 | ls_conditions_in-cond_type = 'ZPB0'. 246 | ls_conditions_in-cond_value = `299.01`. 247 | ls_conditions_in-currency = 'BRL'. 248 | APPEND ls_conditions_in TO lt_conditions_in. 249 | 250 | CLEAR ls_conditions_inx. 251 | ls_conditions_inx-itm_number = '000010'. 252 | ls_conditions_inx-cond_st_no = '001'. 253 | ls_conditions_inx-cond_count = '01'. 254 | ls_conditions_inx-cond_type = 'X'. 255 | ls_conditions_inx-cond_value = 'X'. 256 | ls_conditions_inx-currency = 'X'. 257 | ls_conditions_inx-updateflag = 'U'. 258 | APPEND ls_conditions_inx TO lt_conditions_inx. 259 | 260 | DATA: ls_logic_switch TYPE bapisdls. 261 | 262 | ls_logic_switch-pricing = 'C'. 263 | 264 | CALL FUNCTION 'BAPI_SALESORDER_CHANGE' 265 | EXPORTING 266 | salesdocument = ld_vbeln 267 | order_header_in = ls_order_header_in 268 | order_header_inx = ls_order_header_inx 269 | logic_switch = ls_logic_switch 270 | TABLES 271 | return = lt_bapiret2 272 | order_item_in = lt_order_item_in 273 | order_item_inx = lt_order_item_inx 274 | schedule_lines = lt_schedule_lines 275 | schedule_linesx = lt_schedule_linesx 276 | order_text = lt_order_text 277 | conditions_in = lt_conditions_in 278 | conditions_inx = lt_conditions_inx. 279 | 280 | READ TABLE lt_bapiret2 TRANSPORTING NO FIELDS WITH KEY type = 'E'. 281 | IF sy-subrc = 0. 282 | CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. 283 | cl_rmsl_message=>display( lt_bapiret2 ). 284 | EXIT. 285 | ENDIF. 286 | 287 | IF lines( lt_bapiret2 ) > 0. 288 | "cl_rmsl_message=>display( lt_bapiret2 ). 289 | ENDIF. 290 | 291 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 292 | EXPORTING 293 | wait = 'X'. 294 | 295 | MESSAGE |Ordem modificada com sucesso { ld_vbeln }| TYPE 'I'. 296 | ENDFORM. 297 | -------------------------------------------------------------------------------- /program/ZBP_CRIAR_PF.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Criado em 27/03/2023 4 | * Report modificado, original em: 5 | * https://blogs.sap.com/2022/10/13/create-business-partner-via-api-class-cl_md_bp_maintain/ 6 | * 7 | REPORT ZBP_CRIAR_PF. 8 | 9 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text-001. 10 | PARAMETERS p_pnome TYPE char30 DEFAULT 'Nome 1'. 11 | PARAMETERS p_unome TYPE char30 DEFAULT 'Nome 2'. 12 | PARAMETERS p_cpf TYPE char11 DEFAULT '123456789'. 13 | PARAMETERS p_pernr TYPE PERSNO DEFAULT '0000001'. 14 | SELECTION-SCREEN END OF BLOCK main. 15 | 16 | SELECTION-SCREEN BEGIN OF BLOCK addr WITH FRAME TITLE text-002. 17 | PARAMETERS p_rua TYPE char35 DEFAULT 'RUA TESTE'. 18 | PARAMETERS p_bairro TYPE char35 DEFAULT 'BAIRRO TESTE'. 19 | PARAMETERS p_cidade TYPE char35 DEFAULT 'SAO PAULO'. 20 | PARAMETERS p_uf TYPE char2 DEFAULT 'SP'. 21 | PARAMETERS p_cep TYPE char10 DEFAULT '99999-999'. 22 | PARAMETERS p_txjcd TYPE txjcd DEFAULT 'SP 123456'. 23 | SELECTION-SCREEN END OF BLOCK addr. 24 | 25 | SELECTION-SCREEN BEGIN OF BLOCK bank WITH FRAME TITLE text-003. 26 | PARAMETERS p_bankn TYPE bankn DEFAULT '1090364'. " Nº conta bancária 27 | PARAMETERS p_banks TYPE banks DEFAULT 'BR'. " Chave do país/região do banco 28 | PARAMETERS p_bankl TYPE bankl DEFAULT '23720320'. " Nº da agência bancária 29 | SELECTION-SCREEN END OF BLOCK bank. 30 | 31 | SELECTION-SCREEN BEGIN OF BLOCK options WITH FRAME TITLE text-004. 32 | PARAMETERS p_test TYPE flag. 33 | PARAMETERS p_debug TYPE flag. 34 | SELECTION-SCREEN END OF BLOCK options. 35 | 36 | START-OF-SELECTION. 37 | CONSTANTS: c_task_insert TYPE bus_ei_object_task VALUE 'I'. 38 | 39 | DATA: 40 | s_bp TYPE cvis_ei_extern, 41 | t_bp TYPE cvis_ei_extern_t, 42 | t_address TYPE bus_ei_bupa_address_t, 43 | t_role TYPE bus_ei_bupa_roles_t, 44 | t_ident_numbers TYPE bus_ei_bupa_identification_t, 45 | t_taxnumbers TYPE bus_ei_bupa_taxnumber_t, 46 | t_return TYPE bapiretm, 47 | v_bu_partner TYPE bu_partner, 48 | v_error TYPE abap_bool. 49 | 50 | IF p_debug = 'X'. 51 | BREAK-POINT. 52 | ENDIF. 53 | 54 | *------------------------------------------------------------------------------ 55 | * Create GUID for new BP 56 | *------------------------------------------------------------------------------ 57 | TRY. 58 | DATA(v_guid) = cl_system_uuid=>if_system_uuid_static~create_uuid_c32( ). 59 | CATCH cx_uuid_error INTO DATA(r_uuid_exc). 60 | MESSAGE r_uuid_exc->get_text( ) TYPE 'E'. 61 | ENDTRY. 62 | 63 | *------------------------------------------------------------------------------ 64 | * Header and common central data 65 | *------------------------------------------------------------------------------ 66 | s_bp-partner-header-object_task = c_task_insert. "'I' for new BP 67 | s_bp-partner-header-object_instance-bpartnerguid = v_guid. 68 | 69 | s_bp-partner-central_data-common-data-bp_control-category = '1'. " Category: 1 for Person, 2 for Organization, 3 for Group 70 | s_bp-partner-central_data-common-data-bp_control-grouping = 'Z001'. " The grouping depends on the system settings 71 | 72 | s_bp-partner-central_data-common-data-bp_centraldata-searchterm1 = p_pnome. 73 | s_bp-partner-central_data-common-data-bp_person-firstname = p_pnome. 74 | s_bp-partner-central_data-common-data-bp_person-lastname = p_unome. 75 | s_bp-partner-central_data-common-data-bp_person-correspondlanguage = 'P'. 76 | s_bp-partner-central_data-common-data-bp_person-correspondlanguageiso = 'PT'. 77 | s_bp-partner-central_data-common-data-bp_centraldata-partnerlanguage = 'P'. 78 | s_bp-partner-central_data-common-data-bp_centraldata-partnerlanguageiso = 'PT'. 79 | 80 | * Mark as changed 81 | s_bp-partner-central_data-common-datax-bp_person-firstname = abap_true. 82 | s_bp-partner-central_data-common-datax-bp_person-lastname = abap_true. 83 | s_bp-partner-central_data-common-datax-bp_person-correspondlanguage = abap_true. 84 | s_bp-partner-central_data-common-datax-bp_person-correspondlanguageiso = abap_true. 85 | 86 | s_bp-partner-central_data-common-datax-bp_centraldata-partnerlanguage = 'X'. 87 | s_bp-partner-central_data-common-datax-bp_centraldata-partnerlanguageiso = 'X'. 88 | 89 | s_bp-partner-central_data-taxnumber-common-data-nat_person = 'X'. 90 | 91 | *------------------------------------------------------------------------------ 92 | * VAT number (needed for BPs located in the EU) 93 | * 94 | * Number is normally validated by function module VAT_REGISTRATION_NUMBER_CHECK 95 | * Tax types are stored in table TFKTAXNUMTYPE 96 | *------------------------------------------------------------------------------ 97 | APPEND INITIAL LINE TO t_taxnumbers ASSIGNING FIELD-SYMBOL(). 98 | -task = c_task_insert. 99 | -data_key-taxtype = 'BR2'. 100 | -data_key-taxnumber = p_cpf. 101 | s_bp-partner-central_data-taxnumber-taxnumbers = t_taxnumbers. 102 | 103 | *------------------------------------------------------------------------------ 104 | * Address data 105 | *------------------------------------------------------------------------------ 106 | APPEND INITIAL LINE TO t_address ASSIGNING FIELD-SYMBOL(). 107 | -task = c_task_insert. 108 | 109 | * Operations are store in table TB008S 110 | -data_key-operation = 'XXDFLT'. "Standard operation 111 | -data-postal-data-standardaddress = 'X'. 112 | -data-postal-data-city = p_cidade. 113 | -data-postal-data-district = p_bairro. 114 | -data-postal-data-postl_cod1 = p_cep. 115 | -data-postal-data-taxjurcode = p_txjcd. 116 | -data-postal-data-region = p_uf. 117 | -data-postal-data-street = p_rua. 118 | -data-postal-data-country = 'BR'. 119 | -data-postal-data-langu = 'P'. 120 | -data-postal-data-languiso = 'PT'. 121 | 122 | * Mark as changed 123 | -data-postal-datax-city = abap_true. 124 | -data-postal-datax-district = abap_true. 125 | -data-postal-datax-postl_cod1 = abap_true. 126 | -data-postal-datax-taxjurcode = abap_true. 127 | -data-postal-datax-street = abap_true. 128 | -data-postal-datax-country = abap_true. 129 | -data-postal-datax-region = abap_true. 130 | -data-postal-datax-langu = abap_true. 131 | -data-postal-datax-langu_iso = abap_true. 132 | 133 | * Add address to main structure 134 | s_bp-partner-central_data-address-addresses = t_address. 135 | 136 | " dados bancários (BUS_EI_STRUC_BANKDETAIL) 137 | APPEND INITIAL LINE TO s_bp-partner-central_data-bankdetail-bankdetails ASSIGNING FIELD-SYMBOL(). 138 | -task = 'I'. 139 | -data-bank_acct = p_bankn. " Nº conta bancária 140 | -data-bank_ctry = p_banks. " País 141 | -data-bank_ctryiso = p_banks. " País 142 | -data-bank_key = p_bankl. " Chave do banco 143 | -data-ctrl_key = '8x'. " Chave de controle de bancos 144 | 145 | -datax-bank_acct = 'X'. 146 | -datax-bank_ctry = 'X'. 147 | -datax-bank_ctryiso = 'X'. 148 | -datax-bank_key = 'X'. 149 | -datax-ctrl_key = 'X'. 150 | 151 | " fornecedor 152 | s_bp-vendor-central_data-address-postal-data-langu = 'P'. 153 | s_bp-vendor-central_data-address-postal-data-langu_iso = 'PT'. 154 | s_bp-vendor-central_data-address-postal-datax-langu = 'X'. 155 | s_bp-vendor-central_data-address-postal-datax-langu_iso = 'X'. 156 | 157 | " dados da empresa 158 | APPEND INITIAL LINE TO s_bp-vendor-company_data-company ASSIGNING FIELD-SYMBOL(). 159 | -task = 'I'. 160 | -data_key-bukrs = '1000'. 161 | -data-akont = '00123456'. 162 | -data-fdgrv = 'F00'. 163 | -data-pernr = p_pernr. 164 | -data-zterm = 'F000'. 165 | -data-reprf = 'X'. 166 | -data-zwels = 'CEOTU'. 167 | 168 | -datax-akont = 'X'. 169 | -datax-fdgrv = 'X'. 170 | -datax-pernr = 'X'. 171 | -datax-zterm = 'X'. 172 | -datax-reprf = 'X'. 173 | -datax-zwels = 'X'. 174 | 175 | " dados de compras 176 | APPEND INITIAL LINE TO s_bp-vendor-purchasing_data-purchasing ASSIGNING FIELD-SYMBOL(). 177 | -task = 'I'. 178 | -data_key-ekorg = '1000'. 179 | -data-waers = 'BRL'. 180 | -datax-waers = 'X'. 181 | 182 | *------------------------------------------------------------------------------ 183 | * Roles 184 | *------------------------------------------------------------------------------ 185 | APPEND INITIAL LINE TO t_role ASSIGNING FIELD-SYMBOL(). 186 | -task = c_task_insert. 187 | -data_key = 'FLVN00'. 188 | 189 | APPEND INITIAL LINE TO t_role ASSIGNING . 190 | -task = c_task_insert. 191 | -data_key = 'FLVN01'. 192 | 193 | * Add role to main structure 194 | s_bp-partner-central_data-role-roles = t_role. 195 | 196 | *------------------------------------------------------------------------------ 197 | * Validate data 198 | *------------------------------------------------------------------------------ 199 | cl_md_bp_maintain=>validate_single( 200 | EXPORTING 201 | i_data = s_bp 202 | IMPORTING 203 | et_return_map = DATA(t_return_map) 204 | ). 205 | 206 | IF line_exists( t_return_map[ type = 'E' ] ) OR 207 | line_exists( t_return_map[ type = 'A' ] ). 208 | LOOP AT t_return_map INTO DATA(s_return_map). 209 | WRITE:/ s_return_map-message. 210 | ENDLOOP. 211 | EXIT. 212 | ENDIF. 213 | 214 | *------------------------------------------------------------------------------ 215 | * Call API 216 | *------------------------------------------------------------------------------ 217 | * Add single BP to IMPORTING table 218 | INSERT s_bp INTO TABLE t_bp. 219 | 220 | cl_md_bp_maintain=>maintain( 221 | EXPORTING 222 | i_data = t_bp 223 | i_test_run = p_test 224 | IMPORTING 225 | e_return = t_return 226 | ). 227 | 228 | * Check result 229 | LOOP AT t_return INTO DATA(s_return). 230 | LOOP AT s_return-object_msg INTO DATA(s_msg). 231 | IF s_msg-type = 'E' OR s_msg-type = 'A'. 232 | * Error occurred 233 | v_error = abap_true. 234 | ENDIF. 235 | ENDLOOP. 236 | ENDLOOP. 237 | IF v_error IS INITIAL. 238 | CASE p_test. 239 | WHEN abap_true. 240 | * Test mode 241 | " OK 242 | WHEN abap_false. 243 | * Non-test mode => Perform COMMIT 244 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 245 | * Get number of new BP (it's not returned by the API) 246 | IMPORT lv_partner TO v_bu_partner FROM MEMORY ID 'BUP_MEMORY_PARTNER'. 247 | WRITE:/ |Business Partner { v_bu_partner } has been created.|. 248 | ENDCASE. 249 | ENDIF. 250 | -------------------------------------------------------------------------------- /program/ZCADBP_PJ.abap: -------------------------------------------------------------------------------- 1 | * versão 0.2 2 | REPORT ZCADBP_PJ. 3 | 4 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME TITLE text-001. 5 | PARAMETERS p_sort1 TYPE char30. 6 | PARAMETERS p_pnome TYPE char30. 7 | PARAMETERS p_unome TYPE char30. 8 | PARAMETERS p_cnpj TYPE char14. 9 | PARAMETERS p_ie TYPE char14. 10 | PARAMETERS p_im TYPE char14. 11 | PARAMETERS p_pernr TYPE persno. 12 | SELECTION-SCREEN END OF BLOCK main. 13 | 14 | SELECTION-SCREEN BEGIN OF BLOCK addr WITH FRAME TITLE text-002. 15 | PARAMETERS p_rua TYPE char35. 16 | PARAMETERS p_num TYPE char35. 17 | PARAMETERS p_bairro TYPE char35. 18 | PARAMETERS p_cidade TYPE char35. 19 | PARAMETERS p_uf TYPE char2. 20 | PARAMETERS p_cep TYPE char20. 21 | PARAMETERS p_txjcd TYPE txjcd. 22 | PARAMETERS p_zonat TYPE char20. 23 | PARAMETERS p_pais TYPE land1. 24 | PARAMETERS p_fuso TYPE char20. 25 | PARAMETERS p_tel TYPE char20. 26 | SELECTION-SCREEN END OF BLOCK addr. 27 | 28 | SELECTION-SCREEN BEGIN OF BLOCK bank WITH FRAME TITLE text-003. 29 | PARAMETERS p_bankn TYPE bankn. " Nº conta bancária 30 | PARAMETERS p_banks TYPE banks. " Chave do país/região do banco 31 | PARAMETERS p_bankl TYPE bankl. " Nº da agência bancária 32 | SELECTION-SCREEN END OF BLOCK bank. 33 | 34 | SELECTION-SCREEN BEGIN OF BLOCK company WITH FRAME TITLE text-004. 35 | PARAMETERS p_bukrs TYPE bukrs. " Empresa 36 | PARAMETERS p_akont TYPE akont. " Conta de reconciliação 37 | PARAMETERS p_fdgrv TYPE fdgrv. " Planning Group 38 | PARAMETERS p_zwels TYPE dzwels. " Métodos de pagamento 39 | PARAMETERS p_vzskz TYPE vzskz. " Interest Indicator 40 | SELECTION-SCREEN END OF BLOCK company. 41 | 42 | SELECTION-SCREEN BEGIN OF BLOCK sales WITH FRAME TITLE text-004. 43 | PARAMETERS p_vkorg TYPE vkorg. " Org. vendas 44 | PARAMETERS p_vtweg TYPE vtweg. " Canal de vendas 45 | PARAMETERS p_spart TYPE spart. " Divisão 46 | 47 | PARAMETERS p_bzirk TYPE bzirk. " Região de vendas 48 | PARAMETERS p_kdgrp TYPE kdgrp. " Grupo de clientes 49 | PARAMETERS p_vkbur TYPE vkbur. " Escritório de vendas 50 | PARAMETERS p_vkgrp TYPE vkgrp. " Equipe de vendas 51 | PARAMETERS p_awahr TYPE awahr. " Probabilidade de ordem do item 52 | PARAMETERS p_waers TYPE waers. " Moeda 53 | PARAMETERS p_kurst TYPE kurst. " Categoria da taxa de câmbio 54 | PARAMETERS p_kalks TYPE kalks. " Classificação clientes p/determinação do esquema de cálculo 55 | PARAMETERS p_versg TYPE versg. " Grupo estatístico cliente 56 | PARAMETERS p_lprio TYPE lprio. " Prioridade de remessa 57 | PARAMETERS p_vwerk TYPE vwerk. " Centro fornecedor (próprio ou externo) 58 | PARAMETERS p_vsbed TYPE vsbed. " Condição de expedição 59 | PARAMETERS p_antlf TYPE antlf. " Número máximo de fornecimentos parciais permitidos por item 60 | PARAMETERS p_inco1 TYPE inco1. " Incoterms parte 1 61 | PARAMETERS p_inco2 TYPE inco2. 62 | PARAMETERS p_ktgrd TYPE ktgrd. " Bloqueio de ordem para cliente (área de vendas) 63 | PARAMETERS p_aufsd TYPE aufsd_x. " Bloqueio de contatos para cliente(área de vendas e distrib.) 64 | PARAMETERS p_cassd TYPE cassd_v. " Bloqueio de contatos para cliente(área de vendas e distrib.) 65 | SELECTION-SCREEN END OF BLOCK sales. 66 | 67 | SELECTION-SCREEN BEGIN OF BLOCK options WITH FRAME TITLE text-005. 68 | PARAMETERS p_test TYPE flag. 69 | PARAMETERS p_debug TYPE flag. 70 | SELECTION-SCREEN END OF BLOCK options. 71 | 72 | INITIALIZATION. 73 | " endereço 74 | p_sort1 = 'APELIDO'. 75 | p_pnome = 'NOME COMPLETO'. 76 | p_rua = 'RUA TESTE'. 77 | p_num = '123'. 78 | p_bairro = 'VILA TESTE'. 79 | p_cep = '88888-000'. 80 | p_cidade = 'CIDADE TESTE'. 81 | p_pais = 'BR'. 82 | p_uf = 'SP'. 83 | p_txjcd = 'SP 123456'. 84 | p_zonat = '0000001'. 85 | p_fuso = 'BRAZIL'. 86 | p_tel = '11 99998888'. 87 | 88 | " documentos 89 | p_cnpj = '12345678910'. 90 | p_ie = '1111111'. 91 | p_im = 'ISENTO'. 92 | 93 | " dados da empresa 94 | p_bukrs = '7000'. 95 | p_akont = '123456'. 96 | p_fdgrv = '001'. 97 | p_zwels = 'ABCDE'. 98 | p_vzskz = 'P0'. 99 | 100 | " dados de venda 101 | p_vkorg = '7000'. 102 | p_vtweg = '10'. 103 | p_spart = '00'. 104 | 105 | p_bzirk = 'BR0001'. 106 | p_kdgrp = '01'. 107 | p_vkbur = '100'. 108 | p_vkgrp = '100'. 109 | p_awahr = '100'. 110 | p_waers = 'BRL'. 111 | p_kurst = 'B'. 112 | p_kalks = '1'. 113 | p_versg = '1'. 114 | p_lprio = '2'. 115 | p_vwerk = '7000'. 116 | p_vsbed = '01'. 117 | p_antlf = '1'. 118 | p_inco1 = 'CIF'. 119 | p_inco2 = 'TESTE'. 120 | p_ktgrd = '01'. 121 | p_aufsd = '01'. 122 | p_cassd = 'X'. 123 | 124 | START-OF-SELECTION. 125 | CONSTANTS: c_task_insert TYPE bus_ei_object_task VALUE 'I'. 126 | 127 | DATA: 128 | s_bp TYPE cvis_ei_extern, 129 | t_bp TYPE cvis_ei_extern_t, 130 | t_address TYPE bus_ei_bupa_address_t, 131 | t_role TYPE bus_ei_bupa_roles_t, 132 | t_ident_numbers TYPE bus_ei_bupa_identification_t, 133 | t_taxnumbers TYPE bus_ei_bupa_taxnumber_t, 134 | t_return TYPE bapiretm, 135 | v_bu_partner TYPE bu_partner, 136 | v_error TYPE abap_bool. 137 | 138 | IF p_debug = 'X'. 139 | BREAK-POINT. 140 | ENDIF. 141 | 142 | " Create GUID for new BP 143 | TRY. 144 | DATA(v_guid) = cl_system_uuid=>if_system_uuid_static~create_uuid_c32( ). 145 | CATCH cx_uuid_error INTO DATA(r_uuid_exc). 146 | MESSAGE r_uuid_exc->get_text( ) TYPE 'E'. 147 | ENDTRY. 148 | 149 | " ------------------------------------------------------------------------------------------------- 150 | " parceiro: dados centrais 151 | " ------------------------------------------------------------------------------------------------- 152 | s_bp-partner-header-object_task = c_task_insert. 153 | s_bp-partner-header-object_instance-bpartnerguid = v_guid. 154 | 155 | s_bp-partner-central_data-common-data-bp_control-category = '2'. " Category: 1 for Person, 2 for Organization, 3 for Group 156 | s_bp-partner-central_data-common-data-bp_control-grouping = 'PNPJ'. " The grouping depends on the system settings 157 | 158 | s_bp-partner-central_data-common-data-bp_centraldata-title_key = '0003'. 159 | s_bp-partner-central_data-common-data-bp_centraldata-searchterm1 = p_sort1. 160 | s_bp-partner-central_data-common-data-bp_organization-name1 = p_pnome. 161 | s_bp-partner-central_data-common-data-bp_centraldata-partnerlanguage = 'P'. 162 | s_bp-partner-central_data-common-data-bp_centraldata-partnerlanguageiso = 'PT'. 163 | s_bp-partner-central_data-taxnumber-common-data-nat_person = ''. 164 | 165 | s_bp-partner-central_data-common-datax-bp_centraldata-title_key = 'X'. 166 | s_bp-partner-central_data-common-datax-bp_centraldata-searchterm1 = 'X'. 167 | s_bp-partner-central_data-common-datax-bp_organization-name1 = 'X'. 168 | s_bp-partner-central_data-common-datax-bp_centraldata-partnerlanguage = 'X'. 169 | s_bp-partner-central_data-common-datax-bp_centraldata-partnerlanguageiso = 'X'. 170 | 171 | s_bp-partner-central_data-taxnumber-common-datax-nat_person = 'X'. 172 | 173 | s_bp-partner-ukmbp_data-profile-data-risk_class = '006'. 174 | s_bp-partner-ukmbp_data-profile-datax-risk_class = 'X'. 175 | 176 | " parceiro: telefones 177 | APPEND INITIAL LINE TO s_bp-partner-central_data-communication-phone-phone 178 | ASSIGNING FIELD-SYMBOL(). 179 | -contact-data-telephone = p_tel. 180 | -contact-datax-telephone = 'X'. 181 | 182 | " parceiro: documentos 183 | 184 | " Inscrição Federal (CNPJ) 185 | APPEND INITIAL LINE TO t_taxnumbers ASSIGNING FIELD-SYMBOL(). 186 | -task = c_task_insert. 187 | -data_key-taxtype = 'BR1'. 188 | -data_key-taxnumber = p_cnpj. 189 | s_bp-partner-central_data-taxnumber-taxnumbers = t_taxnumbers. 190 | 191 | " Inscrição Estadual (IE) 192 | APPEND INITIAL LINE TO t_taxnumbers ASSIGNING . 193 | -task = c_task_insert. 194 | -data_key-taxtype = 'BR3'. 195 | -data_key-taxnumber = p_ie. 196 | s_bp-partner-central_data-taxnumber-taxnumbers = t_taxnumbers. 197 | 198 | " Inscrição Municipal (IM) 199 | APPEND INITIAL LINE TO t_taxnumbers ASSIGNING . 200 | -task = c_task_insert. 201 | -data_key-taxtype = 'BR4'. 202 | -data_key-taxnumber = p_im. 203 | s_bp-partner-central_data-taxnumber-taxnumbers = t_taxnumbers. 204 | 205 | " parceiro: endereço 206 | APPEND INITIAL LINE TO t_address ASSIGNING FIELD-SYMBOL(). 207 | -task = c_task_insert. 208 | 209 | -data_key-operation = 'XXDFLT'. "Standard operation 210 | -data-postal-data-standardaddress = 'X'. 211 | -data-postal-data-city = p_cidade. 212 | -data-postal-data-district = p_bairro. 213 | -data-postal-data-postl_cod1 = p_cep. 214 | -data-postal-data-taxjurcode = p_txjcd. 215 | -data-postal-data-region = p_uf. 216 | -data-postal-data-street = p_rua. 217 | -data-postal-data-house_no = p_num. 218 | -data-postal-data-time_zone = P_fuso. 219 | -data-postal-data-country = p_pais. 220 | -data-postal-data-langu = 'P'. 221 | -data-postal-data-languiso = 'PT'. 222 | -data-postal-data-transpzone = p_zonat. 223 | 224 | -data-postal-datax-city = abap_true. 225 | -data-postal-datax-district = abap_true. 226 | -data-postal-datax-postl_cod1 = abap_true. 227 | -data-postal-datax-taxjurcode = abap_true. 228 | -data-postal-datax-street = abap_true. 229 | -data-postal-datax-house_no = abap_true. 230 | -data-postal-datax-country = abap_true. 231 | -data-postal-datax-region = abap_true. 232 | -data-postal-datax-langu = abap_true. 233 | -data-postal-datax-langu_iso = abap_true. 234 | -data-postal-datax-transpzone = abap_true. 235 | 236 | " telefone 237 | APPEND INITIAL LINE TO -data-communication-phone-phone ASSIGNING FIELD-SYMBOL(). 238 | -contact-data-telephone = p_tel. 239 | -contact-datax-telephone = 'X'. 240 | 241 | s_bp-partner-central_data-address-addresses = t_address. 242 | 243 | " parceiro: dados bancários 244 | * APPEND INITIAL LINE TO s_bp-partner-central_data-bankdetail-bankdetails ASSIGNING FIELD-SYMBOL(). 245 | * -task = 'I'. 246 | * -data-bank_acct = p_bankn. " Nº conta bancária 247 | * -data-bank_ctry = p_banks. " País 248 | * -data-bank_ctryiso = p_banks. " País 249 | * -data-bank_key = p_bankl. " Chave do banco 250 | * -data-ctrl_key = '8x'. " Chave de controle de bancos 251 | * 252 | * -datax-bank_acct = 'X'. 253 | * -datax-bank_ctry = 'X'. 254 | * -datax-bank_ctryiso = 'X'. 255 | * -datax-bank_key = 'X'. 256 | * -datax-ctrl_key = 'X'. 257 | 258 | " parceiro: roles 259 | APPEND INITIAL LINE TO t_role ASSIGNING FIELD-SYMBOL(). 260 | -task = c_task_insert. 261 | -data_key = 'FLCU00'. " FI Customer 262 | 263 | APPEND INITIAL LINE TO t_role ASSIGNING . 264 | -task = c_task_insert. 265 | -data_key = 'FLCU01'. " Customer 266 | 267 | s_bp-partner-central_data-role-roles = t_role. 268 | 269 | " ------------------------------------------------------------------------------------------------- 270 | " cliente: dados 271 | " ------------------------------------------------------------------------------------------------- 272 | s_bp-customer-header-object_task = 'I'. 273 | s_bp-customer-central_data-address-task = 'I'. 274 | s_bp-customer-central_data-address-postal-data-name = p_pnome. 275 | s_bp-customer-central_data-central-data-cfopc = '00'. 276 | s_bp-customer-central_data-central-data-katr10 = 'SUB'. 277 | s_bp-customer-central_data-central-data-sperr = 'X'. 278 | 279 | s_bp-customer-central_data-address-postal-datax-name = 'X'. 280 | s_bp-customer-central_data-central-datax-cfopc = 'X'. 281 | s_bp-customer-central_data-central-datax-katr10 = 'X'. 282 | s_bp-customer-central_data-central-datax-sperr = 'X'. 283 | 284 | " cliente: telefones 285 | APPEND INITIAL LINE TO s_bp-customer-central_data-address-communication-phone-phone 286 | ASSIGNING FIELD-SYMBOL(). 287 | -contact-data-telephone = p_tel. 288 | -contact-datax-telephone = 'X'. 289 | 290 | " cliente: dados da empresa 291 | APPEND INITIAL LINE TO s_bp-customer-company_data-company ASSIGNING FIELD-SYMBOL(). 292 | -data_key-bukrs = p_bukrs. 293 | 294 | -data-akont = p_akont. 295 | -data-fdgrv = p_fdgrv. 296 | -data-xzver = 'X'. 297 | -data-zwels = p_zwels. 298 | -data-vzskz = p_vzskz. 299 | -data-sperr = 'X'. 300 | 301 | -datax-akont = 'X'. 302 | -datax-fdgrv = 'X'. 303 | -datax-xzver = 'X'. 304 | -datax-zwels = 'X'. 305 | -datax-vzskz = 'X'. 306 | -datax-sperr = 'X'. 307 | 308 | " cliente: dados de vendas 309 | APPEND INITIAL LINE TO s_bp-customer-sales_data-sales ASSIGNING FIELD-SYMBOL(). 310 | -data_key-vkorg = p_vkorg. 311 | -data_key-vtweg = p_vtweg. 312 | -data_key-spart = P_spart. 313 | 314 | " aba: orders 315 | -data-bzirk = p_bzirk. " Sales District 316 | -data-kdgrp = p_kdgrp. " Customer Group 317 | -data-vkbur = p_vkbur. " Sales Office 318 | -data-vkgrp = p_vkgrp. " Sales Group 319 | -data-awahr = p_awahr. " Order Probability of Item (DI) 320 | -data-waers = p_waers. " Currency 321 | -data-kurst = p_kurst. " Exchange Rate Type 322 | -data-kalks = p_kalks. " Customer Classification for Pricing Procedure Determination 323 | -data-versg = p_versg. " Customer Statistics Group 324 | 325 | " aba: shipping 326 | -data-lprio = p_lprio. " Delivery Priority (DI) 327 | -data-vwerk = p_vwerk. " Delivering Plant (Own or External) 328 | -data-vsbed = p_vsbed. " Shipping Conditions 329 | -data-antlf = p_antlf. " Maximum Number of Permitted Part Deliveries per Item (DI) 330 | 331 | " aba: billing 332 | -data-inco1 = p_inco1. " Incoterms (Part 1) 333 | -data-inco2 = p_inco2. 334 | -data-ktgrd = p_ktgrd. 335 | 336 | " aba: status 337 | -data-aufsd = p_aufsd. " Central order block for customer 338 | -data-cassd = p_cassd. " Central sales block for customer 339 | 340 | " aba: orders 341 | -datax-bzirk = 'X'. 342 | -datax-kdgrp = 'X'. 343 | -datax-vkbur = 'X'. 344 | -datax-vkgrp = 'X'. 345 | -datax-awahr = 'X'. 346 | -datax-waers = 'X'. 347 | -datax-kurst = 'X'. 348 | -datax-kalks = 'X'. 349 | -datax-versg = 'X'. 350 | 351 | " aba: shipping 352 | -datax-lprio = 'X'. 353 | -datax-vwerk = 'X'. 354 | -datax-vsbed = 'X'. 355 | -datax-antlf = 'X'. 356 | 357 | " aba: billing 358 | -datax-inco1 = 'X'. 359 | -datax-inco2 = 'X'. 360 | -datax-ktgrd = 'X'. 361 | 362 | " aba: status 363 | -datax-aufsd = 'X'. 364 | -datax-cassd = 'X'. 365 | 366 | " dados de venda: IVA liquidado (output tax) 367 | APPEND INITIAL LINE TO s_bp-customer-central_data-tax_ind-tax_ind ASSIGNING FIELD-SYMBOL(). 368 | -task = 'I'. 369 | -data_key-aland = 'BR'. 370 | -data_key-tatyp = 'IBRX'. 371 | -data-taxkd = '1'. 372 | -datax-taxkd = 'X' . 373 | 374 | BREAK-POINT. 375 | 376 | " validações 377 | cl_md_bp_maintain=>validate_single( 378 | EXPORTING 379 | i_data = s_bp 380 | IMPORTING 381 | et_return_map = DATA(t_return_map) 382 | ). 383 | 384 | IF line_exists( t_return_map[ type = 'E' ] ) OR 385 | line_exists( t_return_map[ type = 'A' ] ). 386 | LOOP AT t_return_map INTO DATA(s_return_map). 387 | WRITE:/ s_return_map-id, s_return_map-number, s_return_map-message. 388 | ENDLOOP. 389 | EXIT. 390 | ENDIF. 391 | 392 | " inserindo parceiro 393 | INSERT s_bp INTO TABLE t_bp. 394 | 395 | cl_md_bp_maintain=>maintain( 396 | EXPORTING 397 | i_data = t_bp 398 | i_test_run = p_test 399 | IMPORTING 400 | e_return = t_return 401 | ). 402 | 403 | LOOP AT t_return INTO DATA(s_return). 404 | LOOP AT s_return-object_msg INTO DATA(s_msg). 405 | IF s_msg-type = 'E' OR s_msg-type = 'A'. 406 | v_error = abap_true. 407 | ENDIF. 408 | ENDLOOP. 409 | ENDLOOP. 410 | IF v_error IS INITIAL. 411 | CASE p_test. 412 | WHEN abap_true. 413 | * Test mode 414 | " OK 415 | WHEN abap_false. 416 | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 417 | " Get number of new BP (it's not returned by the API) 418 | IMPORT lv_partner TO v_bu_partner FROM MEMORY ID 'BUP_MEMORY_PARTNER'. 419 | WRITE:/ |Business Partner { v_bu_partner } has been created.|. 420 | ENDCASE. 421 | ENDIF. 422 | -------------------------------------------------------------------------------- /program/ZDOWNLOAD.abap: -------------------------------------------------------------------------------- 1 | REPORT ZDOWNLOAD. 2 | 3 | START-OF-SELECTION. 4 | BREAK-POINT. 5 | "PERFORM download_from_tab_txt. 6 | "PERFORM download_from_tab_bin. 7 | "PERFORM download_file_txt. 8 | PERFORM download_file_bin. 9 | 10 | FORM download_from_tab_txt. 11 | DATA: lt_line TYPE STANDARD TABLE OF char100. 12 | DATA: ld_target TYPE string. 13 | 14 | ld_target = 'C:\Users\diasv\OneDrive\Desktop\pasta1\arquivo.txt'. 15 | 16 | CLEAR lt_line. 17 | APPEND 'Linha 1' TO lt_line. 18 | APPEND 'Linha 2' TO lt_line. 19 | APPEND 'Linha 3' TO lt_line. 20 | 21 | CALL FUNCTION 'GUI_DOWNLOAD' 22 | EXPORTING 23 | filename = ld_target 24 | filetype = 'ASC' " ASC = Texto, BIN = Binário 25 | TABLES 26 | data_tab = lt_line 27 | EXCEPTIONS 28 | file_write_error = 1 29 | no_batch = 2 30 | gui_refuse_filetransfer = 3 31 | invalid_type = 4 32 | no_authority = 5 33 | unknown_error = 6 34 | header_not_allowed = 7 35 | separator_not_allowed = 8 36 | filesize_not_allowed = 9 37 | header_too_long = 10 38 | dp_error_create = 11 39 | dp_error_send = 12 40 | dp_error_write = 13 41 | unknown_dp_error = 14 42 | access_denied = 15 43 | dp_out_of_memory = 16 44 | disk_full = 17 45 | dp_timeout = 18 46 | file_not_found = 19 47 | dataprovider_exception = 20 48 | control_flush_error = 21 49 | others = 22. 50 | 51 | IF sy-subrc = 0. 52 | MESSAGE 'Arquivo salvo' TYPE 'S'. 53 | ELSE. 54 | MESSAGE |Erro ao salvar arquivo [{ sy-subrc }]| TYPE 'E'. 55 | ENDIF. 56 | ENDFORM. 57 | FORM download_from_tab_bin. 58 | DATA: ld_content TYPE xstring. 59 | DATA: lt_content TYPE solix_tab. 60 | 61 | DATA: ld_source TYPE string. 62 | DATA: ld_target TYPE string. 63 | 64 | ld_source = '/tmp/regex.pdf'. 65 | ld_target = 'C:\Users\diasv\OneDrive\Desktop\pasta1\arquivo2.pdf'. 66 | 67 | " lendo arquivo do servidor 68 | OPEN DATASET ld_source FOR INPUT IN BINARY MODE. 69 | READ DATASET ld_source INTO ld_content. 70 | CLOSE DATASET ld_source. 71 | 72 | " convertendo em tabela SOLIX 73 | lt_content = cl_bcs_convert=>xstring_to_solix( EXPORTING iv_xstring = ld_content ). 74 | 75 | " copiando o arquivo para o PC do usuário 76 | CALL FUNCTION 'GUI_DOWNLOAD' 77 | EXPORTING 78 | filename = ld_target 79 | filetype = 'BIN' " ASC = Texto, BIN = Binário 80 | bin_filesize = xstrlen( ld_content ) 81 | TABLES 82 | data_tab = lt_content 83 | EXCEPTIONS 84 | file_write_error = 1 85 | no_batch = 2 86 | gui_refuse_filetransfer = 3 87 | invalid_type = 4 88 | no_authority = 5 89 | unknown_error = 6 90 | header_not_allowed = 7 91 | separator_not_allowed = 8 92 | filesize_not_allowed = 9 93 | header_too_long = 10 94 | dp_error_create = 11 95 | dp_error_send = 12 96 | dp_error_write = 13 97 | unknown_dp_error = 14 98 | access_denied = 15 99 | dp_out_of_memory = 16 100 | disk_full = 17 101 | dp_timeout = 18 102 | file_not_found = 19 103 | dataprovider_exception = 20 104 | control_flush_error = 21 105 | others = 22. 106 | 107 | IF sy-subrc = 0. 108 | MESSAGE 'Arquivo salvo' TYPE 'S'. 109 | ELSE. 110 | MESSAGE |Erro ao salvar arquivo [{ sy-subrc }]| TYPE 'E'. 111 | ENDIF. 112 | ENDFORM. 113 | FORM download_file_txt. 114 | DATA: ld_source TYPE sapb-sappfad. 115 | DATA: ld_target TYPE sapb-sappfad. 116 | 117 | ld_source = '/tmp/arquivo.txt'. 118 | ld_target = 'C:\Users\diasv\OneDrive\Desktop\pasta1\arquivo2.txt'. 119 | 120 | CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT' 121 | EXPORTING 122 | path = ld_source 123 | targetpath = ld_target 124 | EXCEPTIONS 125 | error_file = 1 126 | no_authorization = 2 127 | others = 3. 128 | 129 | IF sy-subrc = 0. 130 | MESSAGE 'Arquivo salvo' TYPE 'S'. 131 | ELSE. 132 | MESSAGE |Erro ao salvar arquivo [{ sy-subrc }]| TYPE 'E'. 133 | ENDIF. 134 | ENDFORM. 135 | FORM download_file_bin. 136 | DATA: ld_source TYPE sapb-sappfad. 137 | DATA: ld_target TYPE sapb-sappfad. 138 | 139 | ld_source = '/tmp/regex.pdf'. 140 | ld_target = 'C:\Users\diasv\OneDrive\Desktop\pasta1\arquivo.pdf'. 141 | 142 | CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT' 143 | EXPORTING 144 | path = ld_source 145 | targetpath = ld_target 146 | EXCEPTIONS 147 | error_file = 1 148 | no_authorization = 2 149 | others = 3. 150 | 151 | IF sy-subrc = 0. 152 | MESSAGE 'Arquivo salvo' TYPE 'S'. 153 | ELSE. 154 | MESSAGE |Erro ao salvar arquivo [{ sy-subrc }]| TYPE 'E'. 155 | ENDIF. 156 | ENDFORM. 157 | -------------------------------------------------------------------------------- /program/ZFIND_TCODE_BY_OBJECTLIST.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Procura uma transação a partir de uma lista de objetos 3 | * 4 | REPORT ZFIND_TCODE_BY_OBJECTLIST. 5 | 6 | TYPES: BEGIN OF ly_data 7 | , type TYPE trobjtype 8 | , name TYPE sobj_name 9 | , program TYPE program_id 10 | , tcode TYPE tcode 11 | , END OF ly_data. 12 | 13 | DATA: gt_data TYPE STANDARD TABLE OF ly_data. 14 | DATA: gs_data TYPE ly_data. 15 | 16 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 17 | PARAMETER: p_file TYPE aq_filename. 18 | SELECTION-SCREEN END OF BLOCK main. 19 | 20 | START-OF-SELECTION. 21 | PERFORM read_file. 22 | PERFORM process. 23 | PERFORM show. 24 | 25 | AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. 26 | DATA: ld_rc TYPE syst_subrc. 27 | DATA: lt_file_table TYPE filetable. 28 | DATA: ls_file_table TYPE file_table. 29 | DATA: ld_file_filter TYPE string VALUE 'Arquivos TXT (*.txt*)|*.txt*'. 30 | 31 | CLEAR lt_file_table. 32 | 33 | CALL METHOD cl_gui_frontend_services=>file_open_dialog 34 | EXPORTING 35 | window_title = 'Selecione o arquivo' 36 | file_filter = ld_file_filter 37 | initial_directory = '%UserProfile%\Desktop' 38 | multiselection = ' ' 39 | CHANGING 40 | file_table = lt_file_table 41 | rc = ld_rc 42 | EXCEPTIONS 43 | file_open_dialog_failed = 1 44 | cntl_error = 2 45 | error_no_gui = 3 46 | not_supported_by_gui = 4 47 | OTHERS = 5. 48 | 49 | IF sy-subrc = 0. 50 | READ TABLE lt_file_table INTO ls_file_table INDEX 1. 51 | IF sy-subrc = 0. 52 | p_file = ls_file_table-filename. 53 | ENDIF. 54 | ENDIF. 55 | 56 | FORM show. 57 | DATA: lo_table TYPE REF TO cl_salv_table. 58 | DATA: lo_columns TYPE REF TO cl_salv_columns_table. 59 | 60 | cl_salv_table=>factory( 61 | IMPORTING 62 | r_salv_table = lo_table 63 | CHANGING 64 | t_table = gt_data 65 | ). 66 | 67 | lo_columns = lo_table->get_columns( ). 68 | lo_columns->set_optimize( ). 69 | 70 | lo_table->display( ). 71 | ENDFORM. 72 | FORM process. 73 | DATA: lt_data LIKE gt_data. 74 | DATA: lt_tstc TYPE STANDARD TABLE OF tstc. 75 | DATA: ls_tstc TYPE tstc. 76 | DATA: lt_object TYPE zcl_where_used_list=>my_object_t. 77 | DATA: ls_object TYPE zcl_where_used_list=>my_object. 78 | 79 | CLEAR lt_data. 80 | 81 | LOOP AT gt_data INTO gs_data. 82 | CLEAR lt_object. 83 | 84 | zcl_where_used_list=>find_main_proglist( 85 | EXPORTING 86 | id_type = gs_data-type 87 | id_name = gs_data-name 88 | CHANGING 89 | ct_object = lt_object 90 | ). 91 | 92 | " verificando quais desses programas tem transação apontando 93 | CLEAR lt_tstc. 94 | 95 | IF LINES( lt_object ) > 0. 96 | SELECT * 97 | FROM tstc 98 | INTO TABLE lt_tstc 99 | FOR ALL ENTRIES IN lt_object 100 | WHERE pgmna = lt_object-name. 101 | 102 | LOOP AT lt_tstc INTO ls_tstc. 103 | gs_data-program = ls_tstc-pgmna. 104 | gs_data-tcode = ls_tstc-tcode. 105 | APPEND gs_data TO lt_data. 106 | ENDLOOP. 107 | ENDIF. 108 | ENDLOOP. 109 | 110 | CLEAR gt_data. 111 | gt_data = lt_data. 112 | CLEAR lt_data. 113 | 114 | SORT gt_data BY tcode program ASCENDING. 115 | ENDFORM. 116 | FORM read_file. 117 | DATA: lt_line TYPE STANDARD TABLE OF string. 118 | DATA: ld_line TYPE string. 119 | 120 | CALL FUNCTION 'GUI_UPLOAD' 121 | EXPORTING 122 | filename = CONV string( p_file ) 123 | filetype = 'ASC' 124 | TABLES 125 | data_tab = lt_line 126 | EXCEPTIONS 127 | FILE_OPEN_ERROR = 1 128 | FILE_READ_ERROR = 2 129 | NO_BATCH = 3 130 | GUI_REFUSE_FILETRANSFER = 4 131 | INVALID_TYPE = 5 132 | NO_AUTHORITY = 6 133 | UNKNOWN_ERROR = 7 134 | BAD_DATA_FORMAT = 8 135 | HEADER_NOT_ALLOWED = 9 136 | SEPARATOR_NOT_ALLOWED = 10 137 | HEADER_TOO_LONG = 11 138 | UNKNOWN_DP_ERROR = 12 139 | ACCESS_DENIED = 13 140 | DP_OUT_OF_MEMORY = 14 141 | DISK_FULL = 15 142 | DP_TIMEOUT = 16 143 | OTHERS = 17. 144 | 145 | LOOP AT lt_line INTO ld_line. 146 | SPLIT ld_line AT cl_abap_char_utilities=>horizontal_tab 147 | INTO gs_data-type gs_data-name. 148 | APPEND gs_data TO gt_data. 149 | ENDLOOP. 150 | 151 | " ordenando e removendo duplicados 152 | SORT gt_data BY type name ASCENDING. 153 | DELETE ADJACENT DUPLICATES FROM gt_data COMPARING type name. 154 | ENDFORM. 155 | -------------------------------------------------------------------------------- /program/ZOBJETO_BLOQUEIO.abap: -------------------------------------------------------------------------------- 1 | REPORT ZOBJETO_BLOQUEIO. 2 | 3 | DATA: gd_bloqueado TYPE char1. 4 | DATA: gd_gravar TYPE char1. 5 | DATA: gd_name TYPE ztest_cliente-name. 6 | 7 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. 8 | PARAMETERS p_kunnr TYPE ztest_cliente-kunnr. 9 | SELECTION-SCREEN END OF BLOCK b1. 10 | 11 | START-OF-SELECTION. 12 | PERFORM bloquear. 13 | IF gd_bloqueado <> 'X'. 14 | EXIT. 15 | ENDIF. 16 | 17 | PERFORM obter_nome. 18 | IF gd_gravar <> 'X'. 19 | EXIT. 20 | ENDIF. 21 | 22 | PERFORM gravar_nome. 23 | PERFORM liberar_bloqueio. 24 | 25 | FORM liberar_bloqueio. 26 | CALL FUNCTION 'DEQUEUE_EZTESTCLI' 27 | EXPORTING 28 | * MODE_ZTEST_CLIENTE = 'E' 29 | * MANDT = SY-MANDT 30 | KUNNR = p_kunnr 31 | * X_KUNNR = ' ' 32 | * _SCOPE = '3' 33 | * _SYNCHRON = ' ' 34 | * _COLLECT = ' ' 35 | . 36 | ENDFORM. 37 | FORM gravar_nome. 38 | UPDATE ztest_cliente 39 | SET name = gd_name 40 | WHERE kunnr = p_kunnr. 41 | 42 | IF sy-subrc = 0. 43 | MESSAGE 'Cliente atualizado' TYPE 'S'. 44 | ENDIF. 45 | ENDFORM. 46 | FORM obter_nome. 47 | DATA: lt_field TYPE STANDARD TABLE OF sval. 48 | DATA: ls_field TYPE sval. 49 | DATA: ld_rc TYPE char1. 50 | 51 | CLEAR lt_field. 52 | 53 | SELECT SINGLE name 54 | INTO gd_name 55 | FROM ztest_cliente 56 | WHERE kunnr = p_kunnr. 57 | 58 | CLEAR ls_field. 59 | ls_field-tabname = 'ZTEST_CLIENTE'. 60 | ls_field-fieldname = 'NAME'. 61 | ls_field-value = gd_name. 62 | APPEND ls_field TO lt_field. 63 | 64 | CALL FUNCTION 'POPUP_GET_VALUES' 65 | EXPORTING 66 | * NO_VALUE_CHECK = ' ' 67 | popup_title = 'Informe o nome' 68 | * START_COLUMN = '5' 69 | * START_ROW = '5' 70 | IMPORTING 71 | RETURNCODE = ld_rc 72 | TABLES 73 | fields = lt_field 74 | EXCEPTIONS 75 | ERROR_IN_FIELDS = 1 76 | OTHERS = 2. 77 | 78 | gd_gravar = ''. 79 | 80 | IF sy-subrc = 0 AND ld_rc = ''. 81 | gd_gravar = 'X'. 82 | READ TABLE lt_field INTO ls_field INDEX 1. 83 | IF sy-subrc = 0. 84 | gd_name = ls_field-value. 85 | ENDIF. 86 | ELSE. 87 | MESSAGE 'Atualização cancelada' TYPE 'S' DISPLAY LIKE 'E'. 88 | ENDIF. 89 | ENDFORM. 90 | FORM bloquear. 91 | DATA: ls_varkey TYPE vim_enqkey. 92 | 93 | gd_bloqueado = ''. 94 | 95 | ls_varkey = |{ p_kunnr }|. 96 | 97 | * call function 'ENQUEUE_E_TABLE' 98 | * exporting 99 | * tabname = 'ZTEST_CLIENTE' 100 | * varkey = ls_varkey 101 | * exceptions 102 | * foreign_lock = 1 103 | * system_failure = 2 104 | * others = 3. 105 | 106 | CALL FUNCTION 'ENQUEUE_EZTESTCLI' 107 | EXPORTING 108 | * MODE_ZTEST_CLIENTE = 'E' 109 | * MANDT = SY-MANDT 110 | KUNNR = p_kunnr 111 | * X_KUNNR = ' ' 112 | * _SCOPE = '2' 113 | * _WAIT = ' ' 114 | * _COLLECT = ' ' 115 | EXCEPTIONS 116 | FOREIGN_LOCK = 1 117 | SYSTEM_FAILURE = 2 118 | OTHERS = 3. 119 | 120 | IF sy-subrc = 0. 121 | gd_bloqueado = 'X'. 122 | MESSAGE 'Pode modificar' TYPE 'S'. 123 | ELSE. 124 | MESSAGE |O usuário { sy-msgv1 } já esta modificando o cliente { p_kunnr }| 125 | TYPE 'S' DISPLAY LIKE 'E'. 126 | ENDIF. 127 | ENDFORM. 128 | -------------------------------------------------------------------------------- /program/ZOBJETO_TEXTO.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Última atualização 10/08/2023 v0.2 4 | * 5 | * Objeto de texto 6 | * 7 | * Procedimento para cadastro 8 | * Transação SE75 9 | * Opção: Text Objects and IDs > Change 10 | * Clique em New 11 | * Informe o Text object, exemplo ZNF01 12 | * Editor application, exemplo TN 13 | * Line width, exemplo 72 14 | * Clique em OK 15 | * 16 | * Marque a linha e clique em Text IDs 17 | * Informe o text ID, exemplo Z001 (Texto da nota fiscal) 18 | * Clique em Salvar 19 | * 20 | REPORT ZOBJETO_TEXTO. 21 | DATA: ls_header TYPE thead. 22 | 23 | DATA: lt_text TYPE STANDARD TABLE OF tline. 24 | DATA: ls_text LIKE LINE OF lt_text. 25 | 26 | CLEAR ls_header. 27 | ls_header-tdobject = 'ZNF01'. " Objeto (exemplo: Nota Fiscal, Ordem de Venda, Ordem de Compra etc) 28 | ls_header-tdid = 'Z001'. " Id do texto (exemplo: Texto básico, texto de remessa, texto de fatura etc) 29 | ls_header-tdname = '1'. " Chave primária do objeto (exemplo: Número da nota fiscal, número da ordem etc) 30 | ls_header-tdspras = 'E'. " Idioma (P = Português, E = Inglês etc) 31 | 32 | BREAK-POINT. 33 | 34 | " lendo objeto de texto 35 | CLEAR lt_text. 36 | PERFORM read. 37 | 38 | " atualizando objeto de texto 39 | CLEAR ls_text. 40 | ls_text-tdformat = '*'. 41 | ls_text-tdline = |{ sy-datum } { sy-uzeit }|. 42 | APPEND ls_text TO lt_text. 43 | PERFORM save. 44 | 45 | " lendo novamente para conferir 46 | CLEAR lt_text. 47 | PERFORM read. 48 | 49 | BREAK-POINT. 50 | 51 | FORM read. 52 | CALL FUNCTION 'READ_TEXT' 53 | EXPORTING 54 | id = ls_header-tdid 55 | language = ls_header-tdspras 56 | name = ls_header-tdname 57 | object = ls_header-tdobject 58 | TABLES 59 | lines = lt_text 60 | EXCEPTIONS 61 | id = 1 62 | language = 2 63 | name = 3 64 | not_found = 4 65 | object = 5 66 | reference_check = 6 67 | wrong_access_to_archive = 7. 68 | ENDFORM. 69 | FORM save. 70 | CALL FUNCTION 'SAVE_TEXT' 71 | EXPORTING 72 | header = ls_header 73 | savemode_direct = 'X' 74 | TABLES 75 | lines = lt_text 76 | EXCEPTIONS 77 | id = 1 78 | language = 2 79 | name = 3 80 | object = 4 81 | others = 5. 82 | ENDFORM. 83 | -------------------------------------------------------------------------------- /program/ZREFLEXAO.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Ultima atualização 07/08/2023 v0.1 3 | * Classes de refrexão encontradas na SE24 (CL_ABAP_*DESCR) 4 | * CL_ABAP_CLASSDESCR 5 | * CL_ABAP_COMPLEXDESCR 6 | * CL_ABAP_DATADESCR 7 | * CL_ABAP_ELEMDESCR 8 | * CL_ABAP_ENUMDESCR 9 | * CL_ABAP_INTFDESCR 10 | * CL_ABAP_OBJECTDESCR 11 | * CL_ABAP_REFDESCR 12 | * CL_ABAP_STRUCTDESCR 13 | * CL_ABAP_TABLEDESCR 14 | * CL_ABAP_TYPEDESCR 15 | * 16 | REPORT ZREFLEXAO NO STANDARD PAGE HEADING. 17 | 18 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 19 | PARAMETERS: p_name TYPE string OBLIGATORY. 20 | 21 | PARAMETERS: p_eleme RADIOBUTTON GROUP g1 DEFAULT 'X'. " Elemento de dados 22 | PARAMETERS: p_struc RADIOBUTTON GROUP g1. " Estrutura 23 | PARAMETERS: p_table RADIOBUTTON GROUP g1. " Tabela interna 24 | PARAMETERS: p_class RADIOBUTTON GROUP g1. " Classe 25 | PARAMETERS: p_inter RADIOBUTTON GROUP g1. " Interfaces 26 | SELECTION-SCREEN END OF BLOCK main. 27 | 28 | START-OF-SELECTION. 29 | DATA: lr_data TYPE REF TO data. 30 | DATA: lo_type TYPE REF TO cl_abap_typedescr. 31 | data: lo_table TYPE REF TO cl_abap_tabledescr. 32 | DATA: lo_struc TYPE REF TO cl_abap_structdescr. 33 | DATA: lt_comp TYPE abap_compdescr_tab. 34 | DATA: ls_comp LIKE LINE OF lt_comp. 35 | DATA: lo_object TYPE REF TO cl_abap_objectdescr. 36 | DATA: ls_methods TYPE abap_methdescr. 37 | DATA: ls_attributes TYPE abap_attrdescr. 38 | 39 | FIELD-SYMBOLS: TYPE any. 40 | 41 | BREAK-POINT. 42 | 43 | IF NOT ( p_class = 'X' OR p_inter = 'X' ). 44 | CREATE DATA lr_data TYPE (p_name). 45 | ASSIGN lr_data->* TO . 46 | ENDIF. 47 | 48 | IF p_eleme = 'X'. 49 | lo_type = cl_abap_typedescr=>describe_by_data( ). 50 | WRITE: /(15)'absolute_name: ', lo_type->absolute_name. 51 | WRITE: /(15)'kind: ', lo_type->kind. 52 | WRITE: /(15)'decimals: ', lo_type->decimals. 53 | WRITE: /(15)'length: ', lo_type->length. 54 | WRITE: /(15)'type_kind: ', lo_type->type_kind. 55 | ENDIF. 56 | 57 | IF p_struc = 'X'. 58 | lo_struc ?= cl_abap_structdescr=>describe_by_data( p_data = ). 59 | lt_comp = lo_struc->components[]. 60 | 61 | WRITE: /(15)'absolute_name: ', lo_struc->absolute_name. 62 | WRITE: /(15)'kind: ', lo_struc->kind. 63 | WRITE: /(15)'decimals: ', lo_struc->decimals. 64 | WRITE: /(15)'length: ', lo_struc->length. 65 | WRITE: /(15)'type_kind: ', lo_struc->type_kind. 66 | SKIP. 67 | 68 | WRITE: 'Campos'. 69 | WRITE sy-uline. 70 | NEW-LINE. 71 | LOOP AT lt_comp INTO ls_comp. 72 | WRITE: 'name: ', ls_comp-name. 73 | WRITE: 'type_kind: ', ls_comp-type_kind. 74 | WRITE: 'length: ', ls_comp-length. 75 | WRITE: 'decimals: ', ls_comp-decimals. 76 | NEW-LINE. 77 | ENDLOOP. 78 | ENDIF. 79 | 80 | IF p_table = 'X'. 81 | lo_table ?= cl_abap_tabledescr=>describe_by_data( ). 82 | lo_struc ?= lo_table->get_table_line_type( ). 83 | lt_comp = lo_struc->components[]. 84 | 85 | WRITE: /(15)'absolute_name: ', lo_table->absolute_name. 86 | WRITE: /(15)'kind: ', lo_table->kind. 87 | WRITE: /(15)'decimals: ', lo_table->decimals. 88 | WRITE: /(15)'length: ', lo_table->length. 89 | WRITE: /(15)'type_kind: ', lo_table->type_kind. 90 | SKIP. 91 | 92 | WRITE: 'Campos'. 93 | WRITE sy-uline. 94 | LOOP AT lt_comp INTO ls_comp. 95 | WRITE: 'name: ', ls_comp-name. 96 | WRITE: 'type_kind: ', ls_comp-type_kind. 97 | WRITE: 'length: ', ls_comp-length. 98 | WRITE: 'decimals: ', ls_comp-decimals. 99 | NEW-LINE. 100 | ENDLOOP. 101 | ENDIF. 102 | 103 | IF p_class = 'X'. 104 | lo_object ?= cl_abap_objectdescr=>describe_by_name( p_name ). 105 | 106 | WRITE: 'Métodos'. 107 | WRITE sy-uline. 108 | NEW-LINE. 109 | LOOP AT lo_object->methods INTO ls_methods. 110 | WRITE: / ls_methods-name. 111 | ENDLOOP. 112 | SKIP. 113 | 114 | WRITE: 'Atributos'. 115 | WRITE sy-uline. 116 | NEW-LINE. 117 | LOOP AT lo_object->attributes INTO ls_attributes. 118 | WRITE: / ls_attributes-name. 119 | ENDLOOP. 120 | ENDIF. 121 | 122 | IF p_inter = 'X'. 123 | lo_object ?= cl_abap_intfdescr=>describe_by_name( p_name ). 124 | 125 | WRITE: 'Métodos'. 126 | WRITE sy-uline. 127 | NEW-LINE. 128 | LOOP AT lo_object->methods INTO ls_methods. 129 | WRITE: / ls_methods-name. 130 | ENDLOOP. 131 | SKIP. 132 | 133 | WRITE: 'Atributos'. 134 | WRITE sy-uline. 135 | NEW-LINE. 136 | LOOP AT lo_object->attributes INTO ls_attributes. 137 | WRITE: / ls_attributes-name. 138 | ENDLOOP. 139 | ENDIF. 140 | 141 | BREAK-POINT. 142 | -------------------------------------------------------------------------------- /program/ZSNRO.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Última atualização 10/08/2023 v0.1 4 | * 5 | * Transação SNRO 6 | * Informe o objeto e clique em Criar 7 | * Informe o texto curto e longo 8 | * Informe o domínio para puxar o tamanho 9 | * Porcentagem de aviso quando o número estiver acabando, coloque 10% 10 | * Clique em Editar intervalo 11 | * Modificar intervalos 12 | * Informe 01, 1 e 9999999999 13 | * Salve 14 | * 15 | REPORT ZSNRO. 16 | 17 | DATA: ld_number TYPE int4. 18 | 19 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 20 | PARAMETERS: p_object TYPE nrobj DEFAULT 'ZCLI01'. 21 | SELECTION-SCREEN END OF BLOCK main. 22 | 23 | START-OF-SELECTION. 24 | CLEAR ld_number. 25 | 26 | CALL FUNCTION 'NUMBER_GET_NEXT' 27 | EXPORTING 28 | nr_range_nr = '01' 29 | object = p_object 30 | IMPORTING 31 | NUMBER = ld_number 32 | EXCEPTIONS 33 | INTERVAL_NOT_FOUND = 1 34 | NUMBER_RANGE_NOT_INTERN = 2 35 | OBJECT_NOT_FOUND = 3 36 | QUANTITY_IS_0 = 4 37 | QUANTITY_IS_NOT_1 = 5 38 | INTERVAL_OVERFLOW = 6 39 | BUFFER_OVERFLOW = 7 40 | OTHERS = 8. 41 | 42 | IF sy-subrc = 0. 43 | MESSAGE |Número gerado: { ld_number }| TYPE 'S'. 44 | ELSE. 45 | MESSAGE |Erro em gerar número ( { sy-subrc } )| TYPE 'S' DISPLAY LIKE 'E'. 46 | ENDIF. 47 | -------------------------------------------------------------------------------- /program/ZSTVARV.abap: -------------------------------------------------------------------------------- 1 | REPORT ZSTVARV. 2 | 3 | DATA: ld_type_msg TYPE string. 4 | DATA: lt_tz_r TYPE RANGE OF sairport-time_zone. 5 | DATA: lt_tvarvc TYPE STANDARD TABLE OF tvarvc. 6 | DATA: lt_sairport TYPE STANDARD TABLE OF sairport. 7 | 8 | BREAK-POINT. 9 | 10 | SELECT SINGLE low 11 | INTO ld_type_msg 12 | FROM tvarvc 13 | WHERE name = 'ZTESTE01_TYPE_MSG'. 14 | 15 | SELECT sign opti AS option low high 16 | INTO CORRESPONDING FIELDS OF TABLE lt_tz_r 17 | FROM tvarvc 18 | WHERE name = 'ZSAIRPORT_TZ'. 19 | 20 | SELECT * 21 | INTO TABLE lt_sairport 22 | FROM sairport 23 | WHERE time_zone IN lt_tz_r. 24 | 25 | IF ld_type_msg = 'WRITE'. 26 | WRITE 'Olá mundo!'. 27 | ELSE. 28 | MESSAGE 'Olá mundo!' TYPE 'S'. 29 | ENDIF. 30 | 31 | BREAK-POINT. 32 | -------------------------------------------------------------------------------- /program/ZSUBROUTINE_POOL.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Ultima atualização 08/08/2023 v0.1 4 | * https://github.com/vcd94xt10z/sap 5 | * Programa baseado na documentação da SAP 6 | * 7 | REPORT ZSUBROUTINE_POOL. 8 | 9 | DATA tab TYPE STANDARD TABLE OF string WITH EMPTY KEY. 10 | 11 | tab = VALUE #( 12 | ( `PROGRAM subpool.` ) 13 | ( `DATA spfli_tab TYPE TABLE OF spfli.` ) 14 | ( `LOAD-OF-PROGRAM.` ) 15 | ( ` SELECT *` & 16 | ` FROM spfli` & 17 | ` INTO TABLE @spfli_tab.` ) 18 | ( `FORM teste.` ) 19 | ( `MESSAGE 'TESTE' TYPE 'I'.` ) 20 | ( `ENDFORM.` ) 21 | ( `FORM loop_at_tab.` ) 22 | ( ` DATA spfli_wa TYPE spfli.` ) 23 | ( ` LOOP AT spfli_tab INTO spfli_wa.` ) 24 | ( ` PERFORM evaluate_wa USING spfli_wa.` ) 25 | ( ` ENDLOOP.` ) 26 | ( `ENDFORM.` ) 27 | ( `FORM evaluate_wa USING l_wa TYPE spfli.` ) 28 | ( ` cl_demo_output=>write_data( l_wa ).` ) 29 | ( `ENDFORM.` ) ). 30 | 31 | GENERATE SUBROUTINE POOL tab NAME DATA(prog) 32 | MESSAGE DATA(mess) 33 | SHORTDUMP-ID DATA(sid). 34 | 35 | IF sy-subrc = 0. 36 | "PERFORM ('LOOP_AT_TAB') IN PROGRAM (prog) IF FOUND. 37 | PERFORM ('TESTE') IN PROGRAM (prog) IF FOUND. 38 | "cl_demo_output=>display( ). 39 | ELSEIF sy-subrc = 4. 40 | MESSAGE mess TYPE 'I'. 41 | ELSEIF sy-subrc = 8. 42 | MESSAGE sid TYPE 'I'. 43 | ENDIF. 44 | -------------------------------------------------------------------------------- /program/ZTADIR_REPORT.abap: -------------------------------------------------------------------------------- 1 | REPORT ZTADIR_REPORT. 2 | 3 | TYPES: BEGIN OF ly_tadir 4 | , pgmid TYPE tadir-PGMID 5 | , object TYPE tadir-object 6 | , obj_name TYPE tadir-obj_name 7 | , devclass TYPE tadir-devclass 8 | , created_on TYPE tadir-created_on 9 | 10 | , tcode TYPE tstc-tcode 11 | , ttext TYPE tstct-ttext 12 | , END OF ly_tadir. 13 | 14 | TYPES: BEGIN OF ly_tcode 15 | , pgmna TYPE tstc-pgmna 16 | , tcode TYPE tstc-tcode 17 | , ttext TYPE tstct-ttext 18 | , END OF ly_tcode. 19 | 20 | DATA: lt_tcode TYPE STANDARD TABLE OF ly_tcode. 21 | DATA: ls_tcode TYPE ly_tcode. 22 | 23 | DATA: lt_tadir TYPE SORTED TABLE OF ly_tadir WITH NON-UNIQUE KEY obj_name. 24 | DATA: ls_tadir TYPE ly_tadir. 25 | 26 | FIELD-SYMBOLS: TYPE ly_tadir. 27 | FIELD-SYMBOLS: TYPE ly_tcode. 28 | 29 | " objetos do cliente 30 | SELECT pgmid object obj_name devclass created_on 31 | INTO CORRESPONDING FIELDS OF TABLE lt_tadir 32 | FROM tadir 33 | WHERE obj_name LIKE 'Z%' 34 | OR obj_name LIKE 'Y%'. 35 | 36 | " transações do cliente 37 | SELECT t1~tcode t1~pgmna t2~ttext 38 | FROM tstc AS t1 39 | JOIN tstct AS t2 ON t1~tcode = t2~tcode AND t2~sprsl = 'P' 40 | INTO CORRESPONDING FIELDS OF TABLE lt_tcode 41 | WHERE t1~pgmna LIKE 'Z%' 42 | OR t1~pgmna LIKE 'Y%'. 43 | 44 | SORT lt_tcode BY pgmna tcode ASCENDING. 45 | 46 | LOOP AT lt_tcode ASSIGNING . 47 | UNASSIGN . 48 | READ TABLE lt_tadir ASSIGNING WITH TABLE KEY obj_name = -pgmna. 49 | IF IS ASSIGNED. 50 | IF -tcode = ''. 51 | -tcode = -tcode. 52 | -ttext = -ttext. 53 | ELSE. 54 | CLEAR ls_tadir. 55 | MOVE-CORRESPONDING TO ls_tadir. 56 | ls_tadir-tcode = -tcode. 57 | ls_tadir-ttext = -ttext. 58 | INSERT ls_tadir INTO TABLE lt_tadir. 59 | ENDIF. 60 | ENDIF. 61 | ENDLOOP. 62 | 63 | PERFORM show. 64 | 65 | FORM show. 66 | DATA: lt_tadir2 TYPE STANDARD TABLE OF ly_tadir. 67 | 68 | DATA: lo_table TYPE REF TO cl_salv_table. 69 | DATA: lo_columns TYPE REF TO cl_salv_columns_table. 70 | 71 | CLEAR lt_tadir2. 72 | INSERT LINES OF lt_tadir INTO TABLE lt_tadir2. 73 | 74 | cl_salv_table=>factory( 75 | IMPORTING 76 | r_salv_table = lo_table 77 | CHANGING 78 | t_table = lt_tadir2 79 | ). 80 | 81 | lo_columns = lo_table->get_columns( ). 82 | lo_columns->set_optimize( ). 83 | 84 | lo_table->display( ). 85 | ENDFORM. 86 | -------------------------------------------------------------------------------- /program/ZTESTE_CSV.abap: -------------------------------------------------------------------------------- 1 | * Ultima atualização 04/08/2023 v0.1 2 | REPORT ZTESTE_CSV. 3 | 4 | DATA: ld_file TYPE string. 5 | DATA: ld_server TYPE flag. 6 | DATA: ld_header TYPE flag. 7 | DATA: lt_sairport TYPE STANDARD TABLE OF sairport. 8 | 9 | START-OF-SELECTION. 10 | BREAK-POINT. 11 | 12 | SELECT * 13 | INTO TABLE lt_sairport 14 | FROM sairport. 15 | 16 | ld_server = ''. 17 | ld_header = 'X'. 18 | 19 | IF ld_server = 'X'. 20 | ld_file = '/tmp/data.csv'. 21 | ELSE. 22 | ld_file = 'C:\Users\User\Desktop\CSV\data.csv'. 23 | ENDIF. 24 | 25 | zcl_csv_utils=>itab_to_csv( 26 | EXPORTING 27 | itab = lt_sairport 28 | csv_file = ld_file 29 | header = ld_header 30 | server = ld_server 31 | "delimiter = cl_rsda_csv_converter=>c_default_delimiter 32 | "separator = cl_rsda_csv_converter=>c_default_separator 33 | ). 34 | 35 | CLEAR lt_sairport. 36 | zcl_csv_utils=>csv_to_itab( 37 | EXPORTING 38 | csv_file = ld_file 39 | header = ld_header 40 | server = ld_server 41 | "delimiter = cl_rsda_csv_converter=>c_default_delimiter 42 | "separator = cl_rsda_csv_converter=>c_default_separator 43 | IMPORTING 44 | itab = lt_sairport 45 | ). 46 | 47 | BREAK-POINT. 48 | -------------------------------------------------------------------------------- /program/ZTESTE_XLS.abap: -------------------------------------------------------------------------------- 1 | * Ultima atualização 03/08/2023 v0.4 2 | REPORT ZTESTE_XLS. 3 | 4 | DATA ld_file TYPE string. 5 | DATA lt_sairport TYPE STANDARD TABLE OF sairport. 6 | 7 | START-OF-SELECTION. 8 | BREAK-POINT. 9 | 10 | SELECT * 11 | INTO TABLE lt_sairport 12 | FROM sairport. 13 | 14 | ld_file = 'C:\Users\User\Desktop\XLS\data.xls'. 15 | "ld_file = '/tmp/data.xls'. 16 | 17 | zcl_xls_utils=>itab_to_xls( 18 | EXPORTING 19 | itab = lt_sairport 20 | xls_file = ld_file 21 | "server = 'X' 22 | EXCEPTIONS 23 | others = 1 24 | ). 25 | 26 | CLEAR lt_sairport. 27 | zcl_xls_utils=>xls_to_itab( 28 | EXPORTING 29 | xls_file = ld_file 30 | "server = 'X' 31 | IMPORTING 32 | itab = lt_sairport 33 | EXCEPTIONS 34 | others = 1 35 | ). 36 | 37 | BREAK-POINT. 38 | -------------------------------------------------------------------------------- /program/ZTESTE_XML.abap: -------------------------------------------------------------------------------- 1 | REPORT ZTESTE_XML. 2 | 3 | DATA: ld_xml TYPE string. 4 | DATA: ls_ordem TYPE ztest_ordem. 5 | DATA: ls_item TYPE ztest_item_s. 6 | DATA: ls_cond TYPE ztest_cond_s. 7 | DATA: ls_cliente TYPE ztest_cliente. 8 | DATA: lt_sairport TYPE STANDARD TABLE OF sairport. 9 | 10 | START-OF-SELECTION. 11 | BREAK-POINT. 12 | PERFORM fill. 13 | PERFORM automatica. 14 | PERFORM manual. 15 | 16 | FORM fill. 17 | SELECT * 18 | INTO TABLE lt_sairport 19 | FROM sairport. 20 | 21 | ls_cliente-kunnr = 2. 22 | ls_cliente-nome = 'José da Silva'. 23 | 24 | ls_ordem-cliente = ls_cliente. 25 | ls_ordem-erdat = sy-datum. 26 | ls_ordem-erzet = sy-uzeit. 27 | ls_ordem-vbeln = 123. 28 | ls_ordem-peso_tot = '123.456'. 29 | ls_ordem-valor_tot = '198.32'. 30 | 31 | CLEAR ls_item. 32 | ls_item-posnr = 1. 33 | ls_item-matnr = '111'. 34 | ls_item-maktx = 'Pilha'. 35 | 36 | CLEAR ls_cond. 37 | ls_cond-posnr = 1. 38 | ls_cond-kposn = 1. 39 | ls_cond-tipo = 'DESC'. 40 | ls_cond-montante = '10'. 41 | ls_cond-valor = '10'. 42 | APPEND ls_cond TO ls_item-cond_tab. 43 | 44 | CLEAR ls_cond. 45 | ls_cond-posnr = 1. 46 | ls_cond-kposn = 2. 47 | ls_cond-tipo = 'IPI'. 48 | ls_cond-montante = '15'. 49 | ls_cond-valor = '15'. 50 | APPEND ls_cond TO ls_item-cond_tab. 51 | 52 | APPEND ls_item TO ls_ordem-item_tab. 53 | 54 | CLEAR ls_item. 55 | ls_item-posnr = 2. 56 | ls_item-matnr = '222'. 57 | ls_item-maktx = 'Teclado'. 58 | APPEND ls_item TO ls_ordem-item_tab. 59 | ENDFORM. 60 | FORM automatica. 61 | " estrutura simples 62 | CLEAR ld_xml. 63 | zcl_xml_utils=>data_to_xml( 64 | EXPORTING 65 | data = ls_cliente 66 | RECEIVING 67 | xml = ld_xml 68 | ). 69 | 70 | CLEAR ls_cliente. 71 | zcl_xml_utils=>xml_to_data( 72 | EXPORTING 73 | xml = ld_xml 74 | CHANGING 75 | data = ls_cliente 76 | ). 77 | 78 | " tabela interna 79 | CLEAR ld_xml. 80 | zcl_xml_utils=>data_to_xml( 81 | EXPORTING 82 | data = lt_sairport 83 | RECEIVING 84 | xml = ld_xml 85 | ). 86 | 87 | CLEAR lt_sairport. 88 | zcl_xml_utils=>xml_to_data( 89 | EXPORTING 90 | xml = ld_xml 91 | CHANGING 92 | data = lt_sairport 93 | ). 94 | 95 | " estrutura complexa 96 | CLEAR ld_xml. 97 | zcl_xml_utils=>data_to_xml( 98 | EXPORTING 99 | data = ls_ordem 100 | RECEIVING 101 | xml = ld_xml 102 | ). 103 | 104 | CLEAR ls_ordem. 105 | zcl_xml_utils=>xml_to_data( 106 | EXPORTING 107 | xml = ld_xml 108 | CHANGING 109 | data = ls_ordem 110 | ). 111 | ENDFORM. 112 | FORM manual. 113 | " estrutura simples 114 | CLEAR ld_xml. 115 | zcl_xml_utils=>data_to_xml_manual( 116 | EXPORTING 117 | data = ls_cliente 118 | RECEIVING 119 | xml = ld_xml 120 | ). 121 | 122 | CLEAR ls_cliente. 123 | zcl_xml_utils=>xml_to_data_manual( 124 | EXPORTING 125 | xml = ld_xml 126 | CHANGING 127 | data = ls_cliente 128 | ). 129 | 130 | " tabela interna 131 | CLEAR ld_xml. 132 | zcl_xml_utils=>data_to_xml_manual( 133 | EXPORTING 134 | data = lt_sairport 135 | RECEIVING 136 | xml = ld_xml 137 | ). 138 | 139 | CLEAR lt_sairport. 140 | zcl_xml_utils=>xml_to_data_manual( 141 | EXPORTING 142 | xml = ld_xml 143 | CHANGING 144 | data = lt_sairport 145 | ). 146 | 147 | " estrutura complexa 148 | CLEAR ld_xml. 149 | zcl_xml_utils=>data_to_xml_manual( 150 | EXPORTING 151 | data = ls_ordem 152 | RECEIVING 153 | xml = ld_xml 154 | ). 155 | 156 | CLEAR ls_ordem. 157 | zcl_xml_utils=>xml_to_data_manual( 158 | EXPORTING 159 | xml = ld_xml 160 | CHANGING 161 | data = ls_ordem 162 | ). 163 | ENDFORM. 164 | -------------------------------------------------------------------------------- /program/ZTESTE_XML_TRANSF.abap: -------------------------------------------------------------------------------- 1 | * Transação XSLT_TOOL 2 | REPORT ZTESTE_XML_TRANSF. 3 | 4 | DATA: ld_xml TYPE string. 5 | DATA: ls_ordem TYPE ztest_ordem. 6 | DATA: ls_item TYPE ztest_item_s. 7 | DATA: ls_cond TYPE ztest_cond_s. 8 | DATA: ls_cliente TYPE ztest_cliente. 9 | DATA: lt_sairport TYPE STANDARD TABLE OF sairport. 10 | 11 | START-OF-SELECTION. 12 | BREAK-POINT. 13 | PERFORM dados. 14 | PERFORM conversoes. 15 | 16 | FORM dados. 17 | SELECT * 18 | INTO TABLE lt_sairport 19 | FROM sairport. 20 | 21 | ls_cliente-kunnr = 2. 22 | ls_cliente-nome = 'José da Silva'. 23 | 24 | ls_ordem-cliente = ls_cliente. 25 | ls_ordem-erdat = sy-datum. 26 | ls_ordem-erzet = sy-uzeit. 27 | ls_ordem-vbeln = 123. 28 | ls_ordem-peso_tot = '123.456'. 29 | ls_ordem-valor_tot = '198.32'. 30 | 31 | CLEAR ls_item. 32 | ls_item-posnr = 1. 33 | ls_item-matnr = '111'. 34 | ls_item-maktx = 'Pilha'. 35 | 36 | CLEAR ls_cond. 37 | ls_cond-posnr = 1. 38 | ls_cond-kposn = 1. 39 | ls_cond-tipo = 'DESC'. 40 | ls_cond-montante = '10'. 41 | ls_cond-valor = '10'. 42 | APPEND ls_cond TO ls_item-cond_tab. 43 | 44 | CLEAR ls_cond. 45 | ls_cond-posnr = 1. 46 | ls_cond-kposn = 2. 47 | ls_cond-tipo = 'IPI'. 48 | ls_cond-montante = '15'. 49 | ls_cond-valor = '15'. 50 | APPEND ls_cond TO ls_item-cond_tab. 51 | 52 | APPEND ls_item TO ls_ordem-item_tab. 53 | 54 | CLEAR ls_item. 55 | ls_item-posnr = 2. 56 | ls_item-matnr = '222'. 57 | ls_item-maktx = 'Teclado'. 58 | APPEND ls_item TO ls_ordem-item_tab. 59 | ENDFORM. 60 | FORM conversoes. 61 | DATA: ld_string TYPE string. 62 | DATA: ld_xstring TYPE xstring. 63 | 64 | " [Estrutura] 65 | 66 | " Estrutura => XML String 67 | CLEAR ld_string. 68 | CLEAR ld_xstring. 69 | CALL TRANSFORMATION ZTESTE1 SOURCE data = ls_cliente RESULT XML ld_xstring. 70 | PERFORM xstring_2_string USING ld_xstring CHANGING ld_string. 71 | 72 | " XML String => Estrutura 73 | CLEAR ls_cliente. 74 | CALL TRANSFORMATION ZTESTE1 SOURCE XML ld_string RESULT data = ls_cliente. 75 | 76 | " [Tabela interna] 77 | 78 | " Tabela interna => XML String 79 | CLEAR ld_string. 80 | CLEAR ld_xstring. 81 | CALL TRANSFORMATION ZTESTE2 SOURCE data = lt_sairport RESULT XML ld_xstring. 82 | PERFORM xstring_2_string USING ld_xstring CHANGING ld_string. 83 | 84 | " XML String => Tabela interna 85 | CLEAR lt_sairport. 86 | CALL TRANSFORMATION ZTESTE2 SOURCE XML ld_string RESULT data = lt_sairport. 87 | 88 | " [Estrutura profunda] 89 | 90 | " Estrutura => XML String 91 | CLEAR ld_string. 92 | CLEAR ld_xstring. 93 | CALL TRANSFORMATION ZTESTE3 SOURCE data = ls_ordem RESULT XML ld_xstring. 94 | PERFORM xstring_2_string USING ld_xstring CHANGING ld_string. 95 | 96 | " XML String => Estrutura 97 | CLEAR ls_ordem. 98 | CALL TRANSFORMATION ZTESTE3 SOURCE XML ld_string RESULT data = ls_ordem. 99 | ENDFORM. 100 | FORM xstring_2_string USING ud_xstring CHANGING cd_string. 101 | DATA: ld_length TYPE i. 102 | DATA: lt_binary TYPE STANDARD TABLE OF x255. 103 | 104 | CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 105 | EXPORTING 106 | buffer = ud_xstring 107 | IMPORTING 108 | output_length = ld_length 109 | TABLES 110 | binary_tab = lt_binary. 111 | 112 | CALL FUNCTION 'SCMS_BINARY_TO_STRING' 113 | EXPORTING 114 | input_length = ld_length 115 | IMPORTING 116 | text_buffer = cd_string 117 | TABLES 118 | binary_tab = lt_binary 119 | EXCEPTIONS 120 | failed = 1 121 | OTHERS = 2. 122 | endform. 123 | -------------------------------------------------------------------------------- /program/ZTEXTAREA.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Última atualização 09/08/2023 v0.1 4 | * 5 | REPORT ZTEXTAREA. 6 | 7 | DATA: gd_debug TYPE flag. 8 | DATA: go_textarea TYPE REF TO zcl_textarea. 9 | 10 | START-OF-SELECTION. 11 | go_textarea = new zcl_textarea( id_container = 'TEXTAREA1' ). 12 | 13 | CALL SCREEN 9000. 14 | 15 | MODULE pbo_9000 OUTPUT. 16 | SET PF-STATUS 'S9000'. 17 | SET TITLEBAR 'T9000'. 18 | 19 | go_textarea->callme_in_pbo( ). 20 | ENDMODULE. 21 | MODULE pai_9000 INPUT. 22 | CASE sy-ucomm. 23 | WHEN 'LOAD'. 24 | PERFORM load. 25 | WHEN 'SAVE'. 26 | PERFORM save. 27 | WHEN 'LOAD1'. 28 | PERFORM load1. 29 | WHEN 'SAVE1'. 30 | PERFORM save1. 31 | WHEN 'BACK' OR 'UP' OR 'CANCEL'. 32 | LEAVE TO SCREEN 0. 33 | ENDCASE. 34 | ENDMODULE. 35 | FORM load1. 36 | DATA: ls_header TYPE thead. 37 | 38 | CLEAR ls_header. 39 | ls_header-tdid = 'Z001'. 40 | ls_header-tdname = '1'. 41 | ls_header-tdobject = 'ZTX01'. 42 | ls_header-tdspras = 'E'. 43 | 44 | IF gd_debug = 'X'. 45 | BREAK-POINT. 46 | ENDIF. 47 | 48 | go_textarea->load_text( is_header = ls_header ). 49 | ENDFORM. 50 | FORM save1. 51 | DATA: ls_header TYPE thead. 52 | 53 | CLEAR ls_header. 54 | ls_header-tdid = 'Z001'. 55 | ls_header-tdname = '1'. 56 | ls_header-tdobject = 'ZTX01'. 57 | ls_header-tdspras = 'E'. 58 | 59 | IF gd_debug = 'X'. 60 | BREAK-POINT. 61 | ENDIF. 62 | 63 | go_textarea->save_text( is_header = ls_header ). 64 | ENDFORM. 65 | FORM load. 66 | DATA: lt_text TYPE STANDARD TABLE OF char255. 67 | 68 | IF gd_debug = 'X'. 69 | BREAK-POINT. 70 | ENDIF. 71 | 72 | APPEND 'Linha 1' TO lt_text. 73 | APPEND 'Linha 2' TO lt_text. 74 | APPEND 'Linha 3' TO lt_text. 75 | APPEND '' TO lt_text. 76 | APPEND 'Coluna 1 coluna 2 coluna 3 etc' TO lt_text. 77 | 78 | go_textarea->set_table_text( it_text = lt_text ). 79 | ENDFORM. 80 | FORM save. 81 | DATA: lt_text TYPE STANDARD TABLE OF char255. 82 | 83 | IF gd_debug = 'X'. 84 | BREAK-POINT. 85 | ENDIF. 86 | 87 | go_textarea->get_table_text( 88 | IMPORTING 89 | et_text = lt_text 90 | ). 91 | ENDFORM. 92 | -------------------------------------------------------------------------------- /program/ZTREE.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Última atualização 10/08/2023 v0.1 4 | * 5 | REPORT ZTREE. 6 | 7 | DATA: gd_debug TYPE flag. 8 | DATA: go_tree TYPE REF TO zcl_tree. 9 | DATA: gt_node TYPE treemsunot. 10 | DATA: gs_node TYPE treemsuno. 11 | 12 | START-OF-SELECTION. 13 | go_tree = new zcl_tree( id_container_name = 'TREE1' ). 14 | 15 | CLEAR gs_node. 16 | gs_node-node_key = '1'. 17 | "gs_node-relatkey = ''. 18 | gs_node-text = 'Presidente'. 19 | APPEND gs_node TO gt_node. 20 | 21 | CLEAR gs_node. 22 | gs_node-node_key = '2'. 23 | gs_node-relatkey = '1'. 24 | gs_node-text = 'Diretor 1'. 25 | APPEND gs_node TO gt_node. 26 | 27 | CLEAR gs_node. 28 | gs_node-node_key = '3'. 29 | gs_node-relatkey = '1'. 30 | gs_node-text = 'Diretor 2'. 31 | APPEND gs_node TO gt_node. 32 | 33 | CLEAR gs_node. 34 | gs_node-node_key = '4'. 35 | gs_node-relatkey = '2'. 36 | gs_node-text = 'Gerente 1'. 37 | APPEND gs_node TO gt_node. 38 | 39 | CLEAR gs_node. 40 | gs_node-node_key = '5'. 41 | gs_node-relatkey = '4'. 42 | gs_node-text = 'Funcionário 1'. 43 | APPEND gs_node TO gt_node. 44 | 45 | CLEAR gs_node. 46 | gs_node-node_key = '6'. 47 | gs_node-relatkey = '4'. 48 | gs_node-text = 'Funcionário 2'. 49 | APPEND gs_node TO gt_node. 50 | 51 | CLEAR gs_node. 52 | gs_node-node_key = '7'. 53 | gs_node-relatkey = '4'. 54 | gs_node-text = 'Funcionário 3'. 55 | APPEND gs_node TO gt_node. 56 | 57 | CALL SCREEN 9000. 58 | 59 | MODULE pbo_9000 OUTPUT. 60 | SET PF-STATUS 'S9000'. 61 | SET TITLEBAR 'T9000'. 62 | 63 | go_tree->callme_in_pbo( ). 64 | ENDMODULE. 65 | MODULE pai_9000 INPUT. 66 | CASE sy-ucomm. 67 | WHEN 'LOAD'. 68 | PERFORM load. 69 | WHEN 'CLEAN'. 70 | PERFORM clean. 71 | WHEN 'SAVE'. 72 | PERFORM save. 73 | WHEN 'SEL'. 74 | PERFORM selected. 75 | WHEN 'OPEN'. 76 | PERFORM open. 77 | WHEN 'CLOSE'. 78 | PERFORM close. 79 | WHEN 'BACK' OR 'UP' OR 'CANCEL'. 80 | LEAVE TO SCREEN 0. 81 | ENDCASE. 82 | ENDMODULE. 83 | FORM load. 84 | IF gd_debug = 'X'. 85 | BREAK-POINT. 86 | ENDIF. 87 | 88 | go_tree->set_data( it_data = gt_node ). 89 | ENDFORM. 90 | FORM clean. 91 | DATA: lt_node TYPE treemsunot. 92 | 93 | IF gd_debug = 'X'. 94 | BREAK-POINT. 95 | ENDIF. 96 | 97 | go_tree->set_data( it_data = lt_node ). 98 | ENDFORM. 99 | FORM selected. 100 | DATA: ld_node TYPE tm_nodekey. 101 | 102 | IF gd_debug = 'X'. 103 | BREAK-POINT. 104 | ENDIF. 105 | 106 | CLEAR ld_node. 107 | 108 | go_tree->mo_tree->get_selected_node( 109 | IMPORTING 110 | node_key = ld_node " Key of Selected Node 111 | EXCEPTIONS 112 | control_not_existing = 1 " Tree Control Does Not Exist 113 | control_dead = 2 " Tree Control Has Already Been Destroyed 114 | cntl_system_error = 3 " " 115 | failed = 4 " General Error 116 | single_node_selection_only = 5 " Only Allowed with Single Node Selection 117 | others = 6 118 | ). 119 | 120 | IF sy-subrc = 0 AND ld_node IS NOT INITIAL. 121 | MESSAGE |Você selecionou o nó { ld_node }| TYPE 'S'. 122 | ENDIF. 123 | ENDFORM. 124 | FORM close. 125 | go_tree->mo_tree->collapse_all_nodes( ). 126 | ENDFORM. 127 | FORM open. 128 | DATA: lt_node TYPE treemnotab. 129 | DATA: ld_node LIKE LINE OF lt_node. 130 | 131 | IF gd_debug = 'X'. 132 | BREAK-POINT. 133 | ENDIF. 134 | 135 | go_tree->mo_tree->expand_node( 136 | EXPORTING 137 | node_key = '1' 138 | expand_subtree = 'X' 139 | EXCEPTIONS 140 | node_not_found = 1 " Node does not exist 141 | others = 2 142 | ). 143 | ENDFORM. 144 | FORM save. 145 | DATA: lt_node TYPE treemsunot. 146 | 147 | IF gd_debug = 'X'. 148 | BREAK-POINT. 149 | ENDIF. 150 | 151 | lt_node = go_tree->get_data( ). 152 | ENDFORM. 153 | -------------------------------------------------------------------------------- /program/ZVARIAVEIS_GENERICAS.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Ultima atualização 04/08/2023 v0.1 3 | * 4 | * Resumo das definições 5 | * Field Symbol: Aponta para uma variável que tem tipo concreto 6 | * Data: Cria uma variável sem tipo definido e somente depois atribui o tipo 7 | * 8 | REPORT ZVARIAVEIS_GENERICAS. 9 | 10 | DATA: lr_data TYPE REF TO data. 11 | 12 | DATA: lt_sairport TYPE STANDARD TABLE OF sairport. 13 | 14 | FIELD-SYMBOLS: TYPE ANY TABLE. 15 | FIELD-SYMBOLS: TYPE ANY. 16 | FIELD-SYMBOLS: TYPE ANY. 17 | 18 | SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME. 19 | PARAMETERS p_table TYPE string. 20 | SELECTION-SCREEN END OF BLOCK main. 21 | 22 | START-OF-SELECTION. 23 | BREAK-POINT. 24 | 25 | CREATE DATA lr_data TYPE STANDARD TABLE OF (p_table). 26 | "GET REFERENCE OF lt_sairport INTO lr_data. 27 | 28 | ASSIGN lr_data->* TO . 29 | "ASSIGN lt_sairport TO . " variável normal 30 | "ASSIGN ('lt_sairport') TO . " variável normal (dinâmica) 31 | 32 | SELECT * 33 | INTO TABLE 34 | FROM (p_table). 35 | 36 | LOOP AT ASSIGNING . 37 | DO. 38 | ASSIGN COMPONENT sy-index OF STRUCTURE TO . 39 | IF sy-subrc = 0. 40 | WRITE . 41 | ELSE. 42 | EXIT. 43 | ENDIF. 44 | ENDDO. 45 | 46 | NEW-LINE. 47 | ENDLOOP. 48 | 49 | BREAK-POINT. 50 | -------------------------------------------------------------------------------- /youtube/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /youtube/bopf_crud_api.report.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Versão 0.2 4 | * 5 | REPORT ZBOPF. 6 | 7 | START-OF-SELECTION. 8 | DATA: lo_api TYPE REF TO zcl_bopf_so_api. 9 | DATA: lt_message TYPE bapiret2_t. 10 | 11 | DATA: lt_header TYPE zbo_soheader_ctt. 12 | DATA: ls_header TYPE zbo_soheader_cb. 13 | DATA: lt_item TYPE zbo_soitem_ctt. 14 | DATA: ls_item TYPE zbo_soitem_cs. 15 | 16 | lo_api = new zcl_bopf_so_api( ). 17 | 18 | BREAK-POINT. 19 | PERFORM create. 20 | PERFORM read. 21 | PERFORM update. 22 | PERFORM delete. 23 | PERFORM action. 24 | 25 | FORM create. 26 | CLEAR lt_item. 27 | 28 | CLEAR ls_header. 29 | ls_header-soid = 0. 30 | ls_header-customerid = '1'. 31 | ls_header-status = 'N'. 32 | 33 | CLEAR ls_item. 34 | ls_item-itemid = 1. 35 | ls_item-matnr = '100'. 36 | ls_item-maktx = 'Pilha'. 37 | ls_item-quantity = 1. 38 | ls_item-price_uni = `1.00`. 39 | APPEND ls_item TO lt_item. 40 | 41 | CLEAR ls_item. 42 | ls_item-itemid = 2. 43 | ls_item-matnr = '200'. 44 | ls_item-maktx = 'Teclado'. 45 | ls_item-quantity = 2. 46 | ls_item-price_uni = `2.00`. 47 | APPEND ls_item TO lt_item. 48 | 49 | CLEAR lt_message. 50 | lo_api->create( 51 | EXPORTING 52 | is_header = ls_header 53 | it_item = lt_item 54 | IMPORTING 55 | et_message = lt_message 56 | ). 57 | 58 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 59 | TABLES 60 | it_return = lt_message. 61 | ENDFORM. 62 | FORM read. 63 | CLEAR ls_header. 64 | CLEAR lt_item. 65 | 66 | CLEAR lt_message. 67 | lo_api->read_single( 68 | EXPORTING 69 | id_soid = 45 70 | IMPORTING 71 | es_header = ls_header 72 | et_item = lt_item 73 | et_message = lt_message 74 | ). 75 | 76 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 77 | TABLES 78 | it_return = lt_message. 79 | 80 | CLEAR lt_message. 81 | lo_api->read_all( 82 | IMPORTING 83 | et_header = lt_header 84 | et_message = lt_message 85 | ). 86 | ENDFORM. 87 | FORM update. 88 | CLEAR lt_item. 89 | 90 | CLEAR ls_header. 91 | ls_header-soid = 45. 92 | ls_header-customerid = '90'. 93 | ls_header-status = 'F'. 94 | 95 | CLEAR ls_item. 96 | ls_item-soid = ls_header-soid. 97 | ls_item-itemid = 1. 98 | ls_item-matnr = '100'. 99 | ls_item-maktx = 'Pilha MODIFICADO'. 100 | ls_item-quantity = 11. 101 | ls_item-price_uni = `11`. 102 | APPEND ls_item TO lt_item. 103 | 104 | CLEAR ls_item. 105 | ls_item-soid = ls_header-soid. 106 | ls_item-itemid = 2. 107 | ls_item-matnr = '200'. 108 | ls_item-maktx = 'Teclado MODIFICADO'. 109 | ls_item-quantity = 22. 110 | ls_item-price_uni = `22`. 111 | APPEND ls_item TO lt_item. 112 | 113 | * CLEAR ls_item. 114 | * ls_item-soid = ls_header-soid. 115 | * ls_item-itemid = 3. 116 | * ls_item-matnr = '300'. 117 | * ls_item-maktx = 'Celular CRIADO'. 118 | * ls_item-quantity = 3. 119 | * ls_item-price_uni = `3`. 120 | * APPEND ls_item TO lt_item. 121 | 122 | CLEAR lt_message. 123 | lo_api->update( 124 | EXPORTING 125 | is_header = ls_header 126 | it_item = lt_item 127 | IMPORTING 128 | et_message = lt_message 129 | ). 130 | 131 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 132 | TABLES 133 | it_return = lt_message. 134 | ENDFORM. 135 | FORM delete. 136 | CLEAR lt_message. 137 | lo_api->delete( 138 | EXPORTING 139 | id_soid = 45 140 | IMPORTING 141 | et_message = lt_message 142 | ). 143 | 144 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 145 | TABLES 146 | it_return = lt_message. 147 | ENDFORM. 148 | FORM action. 149 | CLEAR lt_message. 150 | lo_api->action( 151 | EXPORTING 152 | id_action = ZIF_ZBO_SO_C=>sc_action-root-fornecer 153 | id_soid = 46 154 | IMPORTING 155 | et_message = lt_message 156 | ). 157 | 158 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 159 | TABLES 160 | it_return = lt_message. 161 | ENDFORM. 162 | -------------------------------------------------------------------------------- /youtube/curso_abap_141.determination.abap: -------------------------------------------------------------------------------- 1 | method /BOBF/IF_FRW_DETERMINATION~EXECUTE. 2 | CLEAR et_failed_key. 3 | CLEAR eo_message. 4 | 5 | DATA: lt_data TYPE ztddchamado. 6 | DATA: ld_id TYPE zsddchamado-chamadoid. 7 | 8 | io_read->retrieve( 9 | EXPORTING 10 | iv_node = is_ctx-node_key 11 | it_key = it_key 12 | IMPORTING 13 | et_data = lt_data 14 | ). 15 | 16 | SELECT MAX( chamadoid ) 17 | FROM zchamado 18 | INTO ld_id. 19 | 20 | ld_id = ld_id + 1. 21 | 22 | LOOP AT lt_data REFERENCE INTO DATA(lr_data) WHERE chamadoid = 0. 23 | lr_data->chamadoid = ld_id. 24 | 25 | TRY. 26 | CALL METHOD io_modify->update 27 | EXPORTING 28 | iv_node = is_ctx-node_key 29 | iv_key = lr_data->key 30 | is_data = lr_data 31 | it_changed_fields = VALUE #( ( ZIF_DD_CHAMADO_C=>sc_node_attribute-zdd_chamado-chamadoid ) ). 32 | CATCH /bobf/cx_frw. 33 | ENDTRY. 34 | 35 | ld_id = ld_id + 1. 36 | ENDLOOP. 37 | endmethod. 38 | -------------------------------------------------------------------------------- /youtube/curso_abap_141.validation.abap: -------------------------------------------------------------------------------- 1 | method /BOBF/IF_FRW_VALIDATION~EXECUTE. 2 | CLEAR eo_message. 3 | CLEAR et_failed_key. 4 | 5 | DATA: lt_data TYPE ztddchamado. 6 | DATA: ls_message TYPE symsg. 7 | 8 | io_read->retrieve( 9 | EXPORTING 10 | iv_node = is_ctx-node_key 11 | it_key = it_key 12 | iv_fill_data = abap_true " Data element for domain BOOLE: TRUE (='X') and FALSE (=' ') 13 | it_requested_attributes = VALUE #( ( ZIF_DD_CHAMADO_C=>sc_node_attribute-zdd_chamado-assunto ) ) 14 | IMPORTING 15 | et_data = lt_data 16 | ). 17 | 18 | eo_message = /bobf/cl_frw_factory=>get_message( ). 19 | 20 | ls_message-msgid = 'FB'. 21 | ls_message-msgno = 420. 22 | ls_message-msgty = 'E'. 23 | 24 | LOOP AT lt_data INTO DATA(ls_data). 25 | IF ls_data-assunto = ''. 26 | CLEAR ls_message-msgv1. 27 | 28 | ls_message-msgv1 = 'Assunto vazio'. 29 | 30 | eo_message->add_message( 31 | EXPORTING 32 | is_msg = ls_message 33 | iv_node = is_ctx-node_key 34 | iv_key = ls_data-key 35 | iv_attribute = ZIF_DD_CHAMADO_C=>sc_node_attribute-zdd_chamado-assunto 36 | ). 37 | 38 | INSERT VALUE #( key = ls_data-key ) INTO TABLE et_failed_key. 39 | ENDIF. 40 | ENDLOOP. 41 | endmethod. 42 | -------------------------------------------------------------------------------- /youtube/curso_abap_151_determination_item.abap: -------------------------------------------------------------------------------- 1 | method /BOBF/IF_FRW_DETERMINATION~EXECUTE. 2 | DATA: lt_data TYPE zbo_soheader_ctt. 3 | DATA: lt_item TYPE zbo_soitem_ctt. 4 | DATA: ld_id TYPE int4. 5 | 6 | io_read->retrieve( 7 | EXPORTING 8 | iv_node = is_ctx-node_key 9 | it_key = it_key 10 | IMPORTING 11 | et_data = lt_item 12 | ). 13 | 14 | io_read->retrieve_by_association( 15 | EXPORTING 16 | iv_node = is_ctx-node_key 17 | it_key = it_key 18 | iv_association = zif_zbo_so_c=>sc_association-item-to_root 19 | iv_fill_data = abap_true 20 | IMPORTING 21 | et_data = lt_data 22 | ). 23 | 24 | READ TABLE lt_data REFERENCE INTO DATA(lr_data) INDEX 1. 25 | ld_id = lr_data->soid. 26 | 27 | LOOP AT lt_item REFERENCE INTO DATA(lr_item) WHERE soid = 0. 28 | lr_item->soid = ld_id. 29 | 30 | TRY. 31 | CALL METHOD io_modify->update 32 | EXPORTING 33 | iv_node = is_ctx-node_key 34 | iv_key = lr_item->key 35 | is_data = lr_item 36 | it_changed_fields = VALUE #( 37 | ( zif_zbo_so_c=>sc_node_attribute-item-soid ) 38 | ). 39 | CATCH /bobf/cx_frw. 40 | ENDTRY. 41 | ENDLOOP. 42 | endmethod. 43 | -------------------------------------------------------------------------------- /youtube/curso_abap_151_determination_root.abap: -------------------------------------------------------------------------------- 1 | method /BOBF/IF_FRW_DETERMINATION~EXECUTE. 2 | CLEAR et_failed_key. 3 | CLEAR eo_message. 4 | 5 | DATA: lt_data TYPE zbo_soheader_ctt. 6 | DATA: ld_id TYPE zbo_soheader-soid. 7 | 8 | io_read->retrieve( 9 | EXPORTING 10 | iv_node = is_ctx-node_key 11 | it_key = it_key 12 | IMPORTING 13 | et_data = lt_data 14 | ). 15 | 16 | SELECT MAX( soid ) 17 | FROM zbo_soheader 18 | INTO ld_id. 19 | 20 | ld_id = ld_id + 1. 21 | 22 | LOOP AT lt_data REFERENCE INTO DATA(lr_data) WHERE soid = 0. 23 | lr_data->soid = ld_id. 24 | lr_data->erdat = sy-datum. 25 | lr_data->erzet = sy-uzeit. 26 | 27 | TRY. 28 | CALL METHOD io_modify->update 29 | EXPORTING 30 | iv_node = is_ctx-node_key 31 | iv_key = lr_data->key 32 | is_data = lr_data 33 | it_changed_fields = VALUE #( 34 | ( zif_zbo_so_c=>sc_node_attribute-root-soid ) 35 | ( zif_zbo_so_c=>sc_node_attribute-root-erdat ) 36 | ( zif_zbo_so_c=>sc_node_attribute-root-erzet ) 37 | ). 38 | CATCH /bobf/cx_frw. 39 | ENDTRY. 40 | 41 | ld_id = ld_id + 1. 42 | ENDLOOP. 43 | endmethod. 44 | -------------------------------------------------------------------------------- /youtube/curso_abap_153_acao_root.abap: -------------------------------------------------------------------------------- 1 | method /BOBF/IF_FRW_ACTION~EXECUTE. 2 | DATA: lt_req_attribute TYPE /bobf/t_frw_name. 3 | DATA: lt_soheader_root TYPE zbo_soheader_ctt. 4 | 5 | CLEAR et_failed_key. 6 | CLEAR eo_message. 7 | CLEAR et_data. 8 | CLEAR ev_static_action_failed. 9 | 10 | INSERT zif_zbo_so_c=>sc_node_attribute-root-status 11 | INTO TABLE lt_req_attribute. 12 | 13 | io_read->retrieve( 14 | EXPORTING 15 | iv_node = zif_zbo_so_c=>sc_node-root 16 | it_key = it_key 17 | iv_fill_data = abap_true 18 | it_requested_attributes = lt_req_attribute 19 | IMPORTING 20 | et_data = lt_soheader_root 21 | ). 22 | 23 | eo_message = /bobf/cl_frw_factory=>get_message( ). 24 | 25 | LOOP AT lt_soheader_root REFERENCE INTO DATA(lr_soheader_root). 26 | CASE is_ctx-act_key. 27 | WHEN zif_zbo_so_c=>sc_action-root-fornecer. 28 | IF lr_soheader_root->status <> '1'. 29 | eo_message->add_message( 30 | EXPORTING 31 | is_msg = value #( 32 | msgid = 'ACM' 33 | msgno = '001' 34 | msgv1 = 'Status deve ser 1 (Novo)' 35 | ) 36 | iv_node = is_ctx-node_key 37 | iv_key = lr_soheader_root->key 38 | iv_attribute = zif_zbo_so_c=>sc_node_attribute-root-status 39 | ). 40 | RETURN. 41 | ENDIF. 42 | lr_soheader_root->status = '2'. 43 | WHEN zif_zbo_so_c=>sc_action-root-faturar. 44 | IF lr_soheader_root->status <> '2'. 45 | eo_message->add_message( 46 | EXPORTING 47 | is_msg = value #( 48 | msgid = 'ACM' 49 | msgno = '001' 50 | msgv1 = 'Status deve ser 2 (FORNECIDO)' 51 | ) 52 | iv_node = is_ctx-node_key 53 | iv_key = lr_soheader_root->key 54 | iv_attribute = zif_zbo_so_c=>sc_node_attribute-root-status 55 | ). 56 | RETURN. 57 | ENDIF. 58 | lr_soheader_root->status = '3'. 59 | ENDCASE. 60 | 61 | io_modify->update( 62 | iv_node = is_ctx-node_key 63 | iv_key = lr_soheader_root->key 64 | is_data = lr_soheader_root 65 | it_changed_fields = lt_req_attribute 66 | ). 67 | ENDLOOP. 68 | endmethod. 69 | -------------------------------------------------------------------------------- /youtube/curso_abap_154_validacao.abap: -------------------------------------------------------------------------------- 1 | method /BOBF/IF_FRW_VALIDATION~EXECUTE. 2 | CLEAR eo_message. 3 | CLEAR et_failed_key. 4 | 5 | DATA: lt_data TYPE zbo_soheader_ctt. 6 | DATA: ls_message TYPE symsg. 7 | 8 | io_read->retrieve( 9 | EXPORTING 10 | iv_node = is_ctx-node_key 11 | it_key = it_key 12 | iv_fill_data = abap_true 13 | it_requested_attributes = VALUE #( 14 | ( zif_zbo_so_c=>sc_node_attribute-root-customerid ) 15 | ) 16 | IMPORTING 17 | et_data = lt_data 18 | ). 19 | 20 | eo_message = /bobf/cl_frw_factory=>get_message( ). 21 | 22 | LOOP AT lt_data INTO DATA(ls_data). 23 | IF ls_data-customerid = 0. 24 | CLEAR ls_message. 25 | ls_message-msgid = 'ACM'. 26 | ls_message-msgno = 001. 27 | ls_message-msgty = 'E'. 28 | ls_message-msgv1 = 'Cliente vazio'. 29 | 30 | eo_message->add_message( 31 | EXPORTING 32 | is_msg = ls_message 33 | iv_node = is_ctx-node_key 34 | iv_key = ls_data-key 35 | iv_attribute = zif_zbo_so_c=>sc_node_attribute-root-customerid 36 | ). 37 | 38 | INSERT VALUE #( key = ls_data-key ) INTO TABLE et_failed_key. 39 | ENDIF. 40 | ENDLOOP. 41 | endmethod. 42 | -------------------------------------------------------------------------------- /youtube/curso_abap_155_ZBOPF.abap: -------------------------------------------------------------------------------- 1 | * 2 | * Autor Vinicius Cesar Dias 3 | * Versão 0.2 4 | * 5 | REPORT ZBOPF. 6 | 7 | START-OF-SELECTION. 8 | DATA: lo_api TYPE REF TO zcl_bopf_so_api. 9 | DATA: lt_message TYPE bapiret2_t. 10 | DATA: ld_soid TYPE int4. 11 | 12 | DATA: lt_header TYPE zbo_soheader_ctt. 13 | DATA: ls_header TYPE zbo_soheader_cs. 14 | DATA: lt_item TYPE zbo_soitem_ctt. 15 | DATA: ls_item TYPE zbo_soitem_cs. 16 | 17 | lo_api = new zcl_bopf_so_api( ). 18 | 19 | BREAK-POINT. 20 | PERFORM create. 21 | PERFORM read. 22 | PERFORM update. 23 | PERFORM delete. 24 | PERFORM action. 25 | 26 | FORM create. 27 | CLEAR lt_item. 28 | 29 | CLEAR ls_header. 30 | ls_header-soid = 0. 31 | ls_header-customerid = 1. 32 | ls_header-status = '1'. 33 | 34 | CLEAR ls_item. 35 | ls_item-itemid = 1. 36 | ls_item-matnr = '100'. 37 | ls_item-maktx = 'Pilha'. 38 | ls_item-quantity = 1. 39 | ls_item-price_uni = `1.00`. 40 | APPEND ls_item TO lt_item. 41 | 42 | CLEAR ls_item. 43 | ls_item-itemid = 2. 44 | ls_item-matnr = '200'. 45 | ls_item-maktx = 'Teclado'. 46 | ls_item-quantity = 2. 47 | ls_item-price_uni = `2.00`. 48 | APPEND ls_item TO lt_item. 49 | 50 | CLEAR lt_message. 51 | lo_api->create( 52 | EXPORTING 53 | is_header = ls_header 54 | it_item = lt_item 55 | IMPORTING 56 | et_message = lt_message 57 | ). 58 | 59 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 60 | TABLES 61 | it_return = lt_message. 62 | ENDFORM. 63 | FORM read. 64 | CLEAR ls_header. 65 | CLEAR lt_item. 66 | 67 | SELECT MAX( soid ) 68 | INTO ld_soid 69 | FROM zbo_soheader. 70 | 71 | CLEAR lt_message. 72 | lo_api->read_single( 73 | EXPORTING 74 | id_soid = ld_soid 75 | IMPORTING 76 | es_header = ls_header 77 | et_item = lt_item 78 | et_message = lt_message 79 | ). 80 | 81 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 82 | TABLES 83 | it_return = lt_message. 84 | 85 | CLEAR lt_message. 86 | lo_api->read_all( 87 | IMPORTING 88 | et_header = lt_header 89 | et_message = lt_message 90 | ). 91 | ENDFORM. 92 | FORM update. 93 | SELECT MAX( soid ) 94 | INTO ld_soid 95 | FROM zbo_soheader. 96 | 97 | CLEAR lt_item. 98 | 99 | CLEAR ls_header. 100 | ls_header-soid = ld_soid. 101 | ls_header-customerid = '90'. 102 | ls_header-status = 2. 103 | 104 | CLEAR ls_item. 105 | ls_item-soid = ls_header-soid. 106 | ls_item-itemid = 1. 107 | ls_item-matnr = '100'. 108 | ls_item-maktx = 'Pilha MODIFICADO'. 109 | ls_item-quantity = 11. 110 | ls_item-price_uni = `11`. 111 | APPEND ls_item TO lt_item. 112 | 113 | CLEAR ls_item. 114 | ls_item-soid = ls_header-soid. 115 | ls_item-itemid = 2. 116 | ls_item-matnr = '200'. 117 | ls_item-maktx = 'Teclado MODIFICADO'. 118 | ls_item-quantity = 22. 119 | ls_item-price_uni = `22`. 120 | APPEND ls_item TO lt_item. 121 | 122 | * CLEAR ls_item. 123 | * ls_item-soid = ls_header-soid. 124 | * ls_item-itemid = 3. 125 | * ls_item-matnr = '300'. 126 | * ls_item-maktx = 'Celular CRIADO'. 127 | * ls_item-quantity = 3. 128 | * ls_item-price_uni = `3`. 129 | * APPEND ls_item TO lt_item. 130 | 131 | CLEAR lt_message. 132 | lo_api->update( 133 | EXPORTING 134 | is_header = ls_header 135 | it_item = lt_item 136 | IMPORTING 137 | et_message = lt_message 138 | ). 139 | 140 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 141 | TABLES 142 | it_return = lt_message. 143 | ENDFORM. 144 | FORM delete. 145 | SELECT MAX( soid ) 146 | INTO ld_soid 147 | FROM zbo_soheader. 148 | 149 | CLEAR lt_message. 150 | lo_api->delete( 151 | EXPORTING 152 | id_soid = ld_soid 153 | IMPORTING 154 | et_message = lt_message 155 | ). 156 | 157 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 158 | TABLES 159 | it_return = lt_message. 160 | ENDFORM. 161 | FORM action. 162 | SELECT MAX( soid ) 163 | INTO ld_soid 164 | FROM zbo_soheader. 165 | 166 | CLEAR lt_message. 167 | lo_api->action( 168 | EXPORTING 169 | id_action = zif_zbo_so_c=>sc_action-root-fornecer 170 | id_soid = ld_soid 171 | IMPORTING 172 | et_message = lt_message 173 | ). 174 | 175 | CALL FUNCTION 'RSCRMBW_DISPLAY_BAPIRET2' 176 | TABLES 177 | it_return = lt_message. 178 | ENDFORM. 179 | --------------------------------------------------------------------------------