Implementação de Validações de Fornecedor no SAP com ABAP Enhancement

Validação de Duplicidade de Fornecedores e Clientes por Nome e CNPJ

O objetivo é implemnetar uma validação robusta para impedir o cadastro duplicado de fornecedores e clientes, utilizando a combinação de "Nome + CNPJ" como critério principal. Isso garante a integridade dos dados no sistema SAP.

Validação de Nome de Fornecedor Duplicado

Para verificar a existência de fornecedores com nomes idênticos, utilizaremos o Business Add-In (BAdI) BUPA_ADDR_CHECK. Este BAdI é acionado para validações de endereço e informações gerais do parceiro de negócios.


METHOD if_ex_bupa_addr_check~check.
 DATA: lv_ok_code TYPE bu_fcode.

 " Recupera o código de operação atual
 CALL FUNCTION 'BUS_LOCATOR_OKCODE'
   IMPORTING
     ev_ok_code = lv_ok_code.

 " Verifica se a operação é de salvamento ou confirmação de volta e se estamos na transação BP
 IF ( lv_ok_code = 'BUS_MAIN_SAVE' OR ( lv_ok_code = 'BUS_MAIN_BACK' AND sy-ucomm = 'YES' ) ) AND
     sy-tcode = 'BP' AND
     sy-mandt IN ('140', '400', '900') AND " Filtra por mandantes específicos
     iv_activity EQ '01' AND " Criação de parceiro de negócios
     is_but000-bu_group = 'S001'. " Verifica o grupo de criação

   FIELD-SYMBOLS: <fs_partner_role> TYPE any.
   " Associa o campo do grupo de parceiros de negócios
   ASSIGN ('(SAPLBUPA_DIALOG_JOEL)BUS_JOEL_MAIN-PARTNER_ROLE') TO <fs_partner_role>.

   " Verifica se o parceiro é um fornecedor específico (exemplo: ZKD001X)
   IF <fs_partner_role> EQ 'ZKD001X'.

     " Consulta para verificar se já existe um fornecedor com o mesmo nome
     SELECT SINGLE *
       FROM lfa1
      WHERE name1 EQ is_but000-name_org1. " is_but000-name_org1 contém o nome organizacional

     " Se um registro for encontrado, exibe uma mensagem de erro
     IF sy-subrc EQ 0.
       MESSAGE 'Um fornecedor com este nome já existe. Por favor, verifique.' TYPE 'E'. " Mensagem de erro
     ENDIF.
   ENDIF.
 ENDIF.
ENDMETHOD.
 

Validação de CNPJ de Fornecedor Duplicado

A validação do CNPJ será implementada através de um "implicit enhancement" no formulário GT_BPTAXNUM_MODIFY dentro do programa LBUPA_BUTX_DIALOG. Esta abordagem permite injetar código na lógica existente sem modificar o programa original.


ENHANCEMENT 1  ZBP_VENDOR_TAXNUM_CHECK.    " Versão ativa

 " Verifica se a transação é 'BP' e os mandantes especificados
 IF sy-tcode EQ 'BP' AND
    sy-mandt IN ('140', '400', '900').

     FIELD-SYMBOLS: <fs_creation_group> TYPE any,
                    <fs_partner_role> TYPE any.

     DATA: lv_operation_code TYPE bu_fcode.

     " Obtém o código da operação atual
     CALL FUNCTION 'BUS_LOCATOR_OKCODE'
       IMPORTING
         ev_ok_code = lv_operation_code.

     " Verifica se a operação é de salvar ou confirmar retorno
     IF ( lv_operation_code = 'BUS_MAIN_SAVE' OR ( lv_operation_code = 'BUS_MAIN_BACK' AND sy-ucomm = 'YES' ) ).
       " Associa os campos de grupo de criação e papel do parceiro
       ASSIGN ('(SAPLBUPA_DIALOG_JOEL)BUS_JOEL_MAIN-CREATION_GROUP') TO <fs_creation_group>.
       ASSIGN ('(SAPLBUPA_DIALOG_JOEL)BUS_JOEL_MAIN-PARTNER_ROLE') TO <fs_partner_role>.

       IF <fs_creation_group> IS ASSIGNED AND <fs_partner_role> IS ASSIGNED.

         " Verifica se o grupo de criação e papel do parceiro correspondem aos critérios
         IF <fs_creation_group> EQ 'S001' AND <fs_partner_role> EQ 'ZKD001X'.

           " Verifica se o CNPJ já existe para o fornecedor atual (em caso de alteração)
           SELECT SINGLE *
             FROM lfa1
            WHERE lifnr EQ dfkkbptaxnum-partner. " dfkkbptaxnum-partner é o ID do fornecedor

           " Se for um novo registro e o CNPJ não estiver vazio
           IF sy-subrc NE 0 AND dfkkbptaxnum-taxnumxl IS NOT INITIAL.
             " Consulta para verificar se já existe outro fornecedor com o mesmo CNPJ
             SELECT SINGLE *
               FROM lfa1
              WHERE stcd5 EQ dfkkbptaxnum-taxnumxl. " stcd5 é o campo para CNPJ

             " Se um registro com o mesmo CNPJ for encontrado, exibe erro
             IF sy-subrc EQ 0.
               MESSAGE 'Um fornecedor com este CNPJ já existe. Por favor, verifique.' TYPE 'E'. " Mensagem de erro
             ENDIF.
           ENDIF.
         ENDIF.
       ENDIF.
     ENDIF.
 ENDIF.
ENDENHANCEMENT.
 

Tags: ABAP BAdI Enhancement Validação de Dados SAP

Publicado em 6-9 00:11 por Thomas