Bem Vindo Visitante Lista de Usuários

 Todos os Fórums
  ADVPL

Enviar para a impressoraImprimir   

Subject Ponto de Entrada para validar itens da NF SD1
Mensagem do Enviar e-mail Abrir o Perfil do usuário MARIOMXPX MARIOMXPX em 1/11/2017 as 18:08 hs
Local: MS   Registrada: 10/21/2016  Postagem: 44
Bom dia,

Qual seria o ponto de entrada apropriado para validar os itens da NF de entrada no momento de inclusão do documento?

eu preciso criar uma solução que valida se os itens da NF de entrada possuem referencia a algum pedido de compra (D1_PEDIDO), se não possuir devo abrir uma tela solicitando uma senha que apenas os administradores conheçam. O proposito dessa customização é não deixar o comprador incluir notas de entrada sem o
pedido de compra, pois ao fazer isso estava burlando o limite de compra diária imposto a ele no cadastro como comprador e aprovador

Obrigado

Mensagem do Enviar e-mail Abrir o Perfil do usuário CDL CDL em 1/11/2017 as 22:03 hs
Local: SP   Registrada: 2/19/2008  Postagem: 1050
O Ponto de Entrada é o MT100LOK.

Você não precisa mandar abrir uma tela pedindo senha, cria um parâmetro no SX6, Ex.: MV_XUSRPC tipo C, aonde vc colocaria o ID dos usuários permitidos a lançar linha no Documento de Entrada sem PC.

Aí no PE vc faz a validação.

Lembrando que nesse ponto de entrada vc tem que usar as Variaveis, AHEADER e ACOLS.

Sds,

Raphael - D.E.M.A.

Mensagem do Enviar e-mail Abrir o Perfil do usuário MARCELO_LA MARCELO_LA em 1/12/2017 as 07:45 hs
Local: SC   Registrada: 11/18/2005  Postagem: 583
Mario,

Acredito que a sua solução na verdade seja implementar a obrigatoriedade do pedido de compra, através do parâmetro MV_PCNFE que obriga as notas a terem Pedido de compra.
Para as exceções que não precisam de pedido de compra, tem o parâmetro MV_TESPCNF.
E caso seja necessário você pode usar o Ponto de entrada MT103TPC que pode ter a lógica necessária para ficar na exceção de não precisar de pedido de compra, e neste caso usaria o exemplo do Raphael, onde você poderia verificar se o usuário tem permissão de lançar sem pedido ou não e o retorno do PE MT103PC é a própria TES do item posicionado, já que este ponto de entrada é validado por linha.

At.

Marcelo Alberto Lauschner

Mensagem do Enviar e-mail Abrir o Perfil do usuário MARIOMXPX MARIOMXPX em 1/12/2017 as 18:20 hs
Local: MS   Registrada: 10/21/2016  Postagem: 44
Marcelo, eu pensei nessa solução. mas o problema é que algumas TES são usadas tanto pelo comprador quanto pela gerencia para dar entrada em notas, porém a gerencia da entrada nas notas sem pedido de compra, como contas de energia. Eu teria que duplicar várias TES para poder separar as operações do comprador e da gerencia. e inserir uma infinidade de TES como exceções.

Obrigado pela dica

Raphael vou tentar esta solução, obrigado.

Mensagem do Enviar e-mail Abrir o Perfil do usuário MARCELO_LA MARCELO_LA em 1/12/2017 as 20:26 hs
Local: SC   Registrada: 11/18/2005  Postagem: 583
Mario,

Mas o PE MT103TPC você pode justamente tratar esta regra de exceção para os usuários que não precisem usar Pedido de compra.

Ative o parâmetro MV_PCNFE e use o PE abaixo.

User Function MT103TPC()

local _TesAtu := aCols[_ind,aScan(aHeader,{|x| UPPER(AllTrim(x[2]))=="D1_TES" })]
local cTes := ''     

If __cUserId $ "000000"
cTes := _TesAtu
Endif


return cTes


At.

Marcelo Alberto Lauschner

Mensagem do Enviar e-mail Abrir o Perfil do usuário MARIOMXPX MARIOMXPX em 1/16/2017 as 18:12 hs
Local: MS   Registrada: 10/21/2016  Postagem: 44
Obrigado pelas dicas

Meu código ficou assim:

//Bloquear inclusão de NF de entrada sem pedido de compra ou requisição
user function MT100LOK()             
     //pega a requisição e o pedido
     local _Zreq := ALLTRIM(aCols[n,aScan(aHeader,{|x| UPPER(AllTrim(x[2]))=="D1_ZREQ" })])
     local _Pedido := ALLTRIM(aCols[n,aScan(aHeader,{|x| UPPER(AllTrim(x[2]))=="D1_PEDIDO" })])

     local lZreq := .F.
     local lPedido := .F.    
     local lRet := .F.     
                   
    //parametro que contem os usuarios que nao precisam de pedido de compra ou requisicao para incluir NFE
     If __cUserId $ getMv('MV_PCUSR')
          lRet := .T.

     elseif (LEN(_Zreq) = 6 .OR. LEN(_Pedido) = 6)
          dbSelectArea('SC7')
          dbSetOrder(1)
          dbGoTop()     
          lPedido = if(dbSeek(xFilial('SC7')+_Pedido),.T.,.F.)
          dbCloseArea()
          
          dbSelectArea('ZZ1')
          dbSetOrder(1)
          dbGoTop()     
          lPedido = if(dbSeek(_Zreq),.T.,.F.)
          dbCloseArea()   
          
          if (lPedido = .T. .OR. lZreq = .T.)
               lRet = .T.     
          else
                msgAlert('Documentos de entrada apenas com pedido de compra ou requisição.', 'Operação não permitida!')   
          endif
     else       
          msgAlert('Documentos de entrada apenas com pedido de compra ou requisição.', 'Operação não permitida!')
          lRet := .F.
     endif     
return lRet

Para participar do Fórum você precisa efetuar login primeiro
Caso você não esteja registrado registre-se para participar do fórum

 Mudar para Fórum