Alta cuentas bancarias cliente/proveedor

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
Publicado en: SAP Sin comentarios ▼

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

[c] Alberto Viñuela Miranda / Cranfcom 2013-2014

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.