Introducción
Este pequeño programa da de alta cuentas bancarias para clientes y proveedores en SAP R/3 de modo rápido y sencillo. Es fácilmente adaptable para las necesidades de cada uno.
Entre otras particularidades, da la opción de generar IBAN automáticamente, asume la existencia de cuentas duplicadas como Warning y no como Error, y la asignación automática de Tipo de Banco.
En caso de tener que borrar cuentas, se debe realizar una rutina muy parecida utilizando el módulo de funciones FIN_AP_AR_DELETE_BANK.
El código
REPORT zanadircuentasbancarias. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME. PARAMETERS kunnr LIKE kna1-kunnr. PARAMETERS lifnr LIKE lfa1-lifnr. SELECTION-SCREEN ULINE. PARAMETERS banks LIKE lfbk-banks. PARAMETERS bankl LIKE lfbk-bankl. PARAMETERS bankn LIKE lfbk-bankn. PARAMETERS bkont LIKE lfbk-bkont. PARAMETERS koinh LIKE lfbk-koinh. SELECTION-SCREEN ULINE. PARAMETERS makeiban AS CHECKBOX. PARAMETERS modotest AS CHECKBOX. SELECTION-SCREEN END OF BLOCK b01. START-OF-SELECTION. DATA retorno TYPE subrc. DATA it_ebpp_messages TYPE TABLE OF ebpp_messages WITH HEADER LINE. PERFORM bank_acc_create USING kunnr lifnr banks bankl bankn bkont koinh makeiban modotest CHANGING it_ebpp_messages[] retorno . "mostramos mensajes, si los hay (en éxito no hay) LOOP AT it_ebpp_messages. WRITE: / it_ebpp_messages-msgty, it_ebpp_messages-msgid, it_ebpp_messages-msgno. ENDLOOP. "commit or rollback IF retorno = 0 AND modotest NE 'X'. COMMIT WORK AND WAIT. ELSE. ROLLBACK WORK. ENDIF. * _ _ _ *| |__ __ _ _ __| | __ __ _ ___ ___ ____ _____ __ _ |_ ___ *| '_ \/ _` | '_ \ |/ / / _` | __| __| / __|'__|_ \ _` |__| _ \ *| |_) |(_| | | | | < | (_| |(__ (__ | (__ || __/(_| ||_ __/ *|_.__/\__,_|_| |_||\_\ \__,_|___|___| \___|| \___|__,_|__|___| * as seen in http//glob.cranf.net * this ascii title created using http://ascii.cranf.net * compact your batch-input recordings using htpp://bic.cranf.net FORM bank_acc_create USING pkunnr plifnr "cliente o proveedor pbanks LIKE lfbk-banks "país banco pbankl LIKE lfbk-bankl "código banco pbankn LIKE lfbk-bankn "cuenta pbkont LIKE lfbk-bkont "código control pkoinh LIKE lfbk-koinh "titular piban "crear iban X/space ptest "test X/space CHANGING pitmessages TYPE ebpp_messages_t "mensajes preturn TYPE subrc "retorno tipo subrc . "cargamos la estructura lfbk DATA lfbk TYPE lfbk. CLEAR lfbk. lfbk-banks = pbanks. lfbk-bankl = pbankl. lfbk-bankn = pbankn. lfbk-bkont = pbkont. lfbk-koinh = pkoinh. "dependiendo si cliente o deudor... DATA koart TYPE koart. IF NOT pkunnr IS INITIAL. koart = 'D'. lfbk-lifnr = pkunnr. ELSE. koart = 'K'. lfbk-lifnr = plifnr. ENDIF. " seleccionamos automáticamente un tipo de banco bvtyp DATA nextbvtyp LIKE knbk-bvtyp. CLEAR nextbvtyp. IF koart = 'D'. SELECT MAX( bvtyp ) FROM knbk INTO nextbvtyp WHERE kunnr = lfbk-lifnr AND bvtyp >= '0000' AND bvtyp < '9999'. ENDIF. IF koart = 'K'. SELECT MAX( bvtyp ) FROM lfbk INTO nextbvtyp WHERE lifnr = lfbk-lifnr AND bvtyp >= '0000' AND bvtyp < '9999'. ENDIF. IF nextbvtyp IS INITIAL. lfbk-bvtyp = '0001'. ELSE. lfbk-bvtyp = nextbvtyp + 1. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lfbk-bvtyp IMPORTING output = lfbk-bvtyp. ENDIF. "llamamos a la función de creación CALL FUNCTION 'FIN_AP_AR_ADD_BANK' EXPORTING i_koart = koart i_bankdata = lfbk i_checkmodus = ptest TABLES t_messages = pitmessages. DATA wamessages LIKE LINE OF pitmessages. "prescindimos del error de cuenta duplicada, sólo warning LOOP AT pitmessages INTO wamessages. IF wamessages-msgid = 'WEBFI_MASTER' AND ( wamessages-msgno = '309' "cuenta duplicada, sólo warning OR wamessages-msgno = '310' ). wamessages-msgty = 'W'. MODIFY pitmessages FROM wamessages. ENDIF. ENDLOOP. "decidimos returncode preturn = 0. "asumimos fue bien LOOP AT pitmessages INTO wamessages WHERE msgty = 'E'. preturn = 4. "error al crear EXIT. ENDLOOP. "creación de IBAN IF preturn = 0 AND piban = 'X'. DATA bnka TYPE bnka. CLEAR bnka. "lee info del banco CALL FUNCTION 'READ_BANK_ADDRESS' EXPORTING bank_country = lfbk-banks bank_number = lfbk-bankl IMPORTING bnka_wa = bnka EXCEPTIONS not_found = 1 OTHERS = 2. IF sy-subrc = 0. DATA tiban TYPE tiban. CLEAR tiban. MOVE-CORRESPONDING lfbk TO tiban. CALL FUNCTION 'CONVERT_BANK_ACCOUNT_2_IBAN' EXPORTING i_bank_account = tiban-bankn i_bank_control_key = tiban-bkont i_bank_country = tiban-banks i_bank_number = bnka-bnklz i_bank_key = bnka-bankl IMPORTING e_iban = tiban-iban EXCEPTIONS no_conversion = 1 OTHERS = 2. IF sy-subrc = 0. tiban-ernam = sy-uname. tiban-erdat = sy-datum - 1. "yesterday... IF koart = 'D'. tiban-tabname = 'KNBK'. ENDIF. IF koart = 'K'. tiban-tabname = 'LFBK'. ENDIF. tiban-tabkey = lfbk-lifnr. "mismo para D/K MODIFY tiban FROM tiban. "DB!!! IF sy-subrc = 0. preturn = 0. ELSE. preturn = 1. "error DB ENDIF. ELSE. preturn = 2. "error al crear IBAN ENDIF. ELSE. preturn = 3. "error al leer banco ENDIF. ENDIF. ENDFORM. "bank_account_create
Deja un comentario