PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
PE para Impostos em Pedido de Vendas
Versão:
12.1.25
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário GT_MATOS GT_MATOS em 06/05/2021, 17:08 h
Local: SP  Registro: 27/04/2016  Postagens: 1
GT_MATOS

Olá!

Criei um campo de nome C6_XIMPOSTOS para calcular os impostos no pedido de vendas com o ponto de entrada M410LIOK e a uma User Function, de acordo com os respectivos fontes abaixo;

Porém está travando o serviço do Protheus;

Alguém poderia verificar e auxiliar em que eu possa ter errado na função?

Fonte para o ponto de entrada:

/*P.E.: M410LIOK
Descr.: Validação da linha do Pedido de Venda*/

#include ‘protheus.ch‘

User Function M410LIOK()
    Local lRet := .T.

    //Atualiza o Item
    M->C6_XIMPOST := u_TribItemPv(M->C6_NUM,2)
    GetDRefresh()
Return lRet

//- User Function

/*/{Protheus.doc} TribItemPv
Função que retorna o valor dos tributos do item do Pedido de Vendas
/*/

//Bibliotecas
#include ‘protheus.ch‘
#include ‘topConn.ch‘

User Function TribItemPv(cNumPed)
    Local nDesconto := 0
    Local cNumPed := SC6->C6_NUM

    MaFisIni(SC5->C5_CLIENTE,; //1-Codigo Cliente/Fornecedor
        SC5->C5_LOJACLI,;       //2-Loja do Cliente/Fornecedor
        "C",;                   //3-C:Cliente , F:Fornecedor
        SC5->C5_TIPO,;          //4-Tipo da NF
        SC5->C5_TIPOCLI,;       //5-Tipo do Cliente/Fornecedor
        MaFisRelImp("MTR700",{"SC5","SC6"}),;    //6-Relação de Impostos que suportam no arquivo
        ,;                      //7-Tipo de complemento
        ,;                      //8-Permite incluir impostos no Rodapé .T./.F.
        "SB1",;                 //9-Alias do cadastro de produtos
        "MATA461")              //10-Nome da rotina que está utilizando a função

    nItem := 0
    nValIcmSt := 0

    DbSelectArea("SC6")
    DbGoTop()
    DbSetOrder(1)
    DbSeek(xFilial("SC6")+cNumPed)

    While !Eof() .AND. SC6->C6_FILIAL = xFilial("SC6") .AND. SC6->C6_NUM == cNumPed
        DbSelectArea("SC6")
    EndDo

Mensagem do Enviar e-mail Abrir o Perfil do usuário DON.JUNIOR DON.JUNIOR em 06/05/2021, 19:09 h
Local: RJ  Registro: 24/01/2016  Postagens: 152
Você precisa do campo C6_XIMPOST preenchido no momento da digitação ? se sim ok, mas outra possibilidade seria um gatilho, (mesmo que chamando um .prw); do contrário faz no final (tudok da vida), assim você não compromete o processo padrão... só uma dica.

Lembre-se que cada ponto de entrada tem uma função específica, esse por exemplo é para validação, tanto que o retorno é booleano. Não que seja proibido fazer assim, mas é uma boa prática.


Como não colocou detalhes do erro, e você está usando algumas funções internas (MaFisRelImp,MaFisIni, etc) e não tem GetArea() RestArea() na sua rotina, pode está desposicionando algum registro ou tabela e consequentemente travando.

Se feito no final como falei, não correria esse risco.

Resposta longa e genérica, mas acredito ter ajudado minimamente.

Att.
Don Junior

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário MDENILSON MDENILSON em 10/05/2021, 08:52 h
Local: SP  Registro: 19/02/2021  Postagens: 3
Falta o

dbskip()

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal