Mostrar o nome do cliente ou fornecedor no Pedido de Venda | Ti Responde 0229

No vídeo de hoje, vamos demonstrar em como criar um campo que exiba o nome do cliente ou fornecedor na tela do pedido de vendas (MATA410).

A dúvida de hoje, nos perguntaram, como poderíamos incluir um campo na SC5 que exibisse o nome do cliente ou fornecedor.

 

Pensando nisso, montamos um exemplo, onde vai ser demonstrado em como criar uma User Function que faça essa tratativa buscando da SA1 ou da SA2 dependendo do tipo do pedido (C5_TIPO).

 

Segue abaixo o vídeo exemplificando:

E abaixo o código fonte desenvolvido:

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} zVid0229
Função que busca o nome do cliente ou fornecedor para colocar no pedido de venda
@type user function
@author Atilio
@since 28/07/2025
@version version
@return cNome, Caractere, Nome do Cliente ou Fornecedor
@obs Se for Contexto Real, passos:
    1. Criar o campo C5_X_NOME do tipo Caractere com o mesmo tamanho do A1_NOME e A2_NOME
    2. Criar um gatilho do campo C5_CLIENTE para o C5_X_NOME acionando u_zVid0229() - Obs.: Se usar o campo loja, criar também um gatilho do campo C5_LOJACLI

    Se for Contexto Virtual, passos:
    1. Criar o campo C5_X_NOME do tipo Caractere com o mesmo tamanho do A1_NOME e A2_NOME
    2. Criar um gatilho do campo C5_CLIENTE para o C5_X_NOME acionando u_zVid0229() - Obs.: Se usar o campo loja, criar também um gatilho do campo C5_LOJACLI
    3. Colocar no Inic. Padrão do campo, a expressão: u_zVid0229()
    4. Colocar no Inic. Browse do campo, a expressão: u_zVid0229()
/*/

User Function zVid0229()
    Local aArea   := FWGetArea()
    Local cNome   := ""
    Local cTipo   := ""
    Local cCodigo := ""
    Local cLoja   := ""

    //Se for uma inclusão ou cópia, pega da memória
    If FWIsInCallStack("a410Inclui") .Or. FWIsInCallStack("a410Copia")
        cTipo   := M->C5_TIPO
        cCodigo := M->C5_CLIENTE
        cLoja   := M->C5_LOJACLI

    //Senão, pega o que está salvo na tabela
    Else
        cTipo   := SC5->C5_TIPO
        cCodigo := SC5->C5_CLIENTE
        cLoja   := SC5->C5_LOJACLI
    EndIf

    //Se o tipo for B ou D, pega da tabela de Fornecedores (SA2)
    If cTipo $ "B;D;"
        DbSelectArea("SA2")
        SA2->(DbSetOrder(1)) // A2_FILIAL + A2_COD + A2_LOJA

        //Se conseguir posicionar
        If SA2->(MsSeek(FWxFilial("SA2") + cCodigo + cLoja))
            cNome := SA2->A2_NOME
        EndIf

    //Senão, pega da tabela de Clientes (SA1)
    Else
        DbSelectArea("SA1")
        SA1->(DbSetOrder(1)) // A1_FILIAL + A1_COD + A1_LOJA

        //Se conseguir posicionar
        If SA1->(MsSeek(FWxFilial("SA1") + cCodigo + cLoja))
            cNome := SA1->A1_NOME
        EndIf
    EndIf

    FWRestArea(aArea)
Return cNome

Bom pessoal, por hoje é só.

 

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação