Advertisement
Guest User

M410PVNF

a guest
Oct 8th, 2019
811
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 4.31 KB | None | 0 0
  1. #include 'protheus.ch'
  2. #Include 'RwMake.ch'
  3. #include "TopConn.ch"
  4. #include 'parmtype.ch'
  5.  
  6. #define PULA Chr(13) + Chr(10)
  7.  
  8.  
  9. /*/{Protheus.doc}P.E - M410PVNF                                                                          
  10.  
  11.     Este P.E. e' Executado antes da rotina de geração de NF's (MA410PVNFS()).                        
  12.    
  13.     @author: Súlivan Simões Silva
  14.     @since : 28/08/2019
  15.     @version : 1.0
  16.     @Link  : https://tdn.totvs.com/pages/releaseview.action?pageId=6784152
  17.              https://centraldeatendimento.totvs.com/hc/pt-br/articles/360021351991-MP-ADVPL-PE-M410PVNF-Prep-Doc-sa%C3%ADda-no-pedido-de-venda-                              
  18.     @Obs :  /
  19. /*/  
  20. user function M410PVNF()
  21.  
  22.     local aArea     := getArea()
  23.     local lRetorno  := .T.
  24.    
  25.     ConOut("[u_M410PVNF] ++ - Entrou no ponto de entrada M410PVNF")
  26.    
  27.     // Função de validação chamada fora do Ponto de Entrada por questões de organização.
  28.     lRetorno := fValidEst()
  29.  
  30.    
  31.     ConOut("[u_M410PVNF] ++ - Encerrou taferas no ponto de entrada M410PVNF")
  32.    
  33.     restArea(aArea)
  34.        
  35. return lRetorno
  36.  
  37.  
  38. /*
  39.     Summary: Verifica se tem saldo em estoque para poder gerar documento de saída.
  40.     @since : 28/08/2019
  41.     @version : 1.0
  42. */
  43. static function fValidEst()
  44.  
  45.     local aArea     := getArea()
  46.     local aAreaSC5  := SC5->(getArea())
  47.     local aAreaSC6  := SC6->(getArea())
  48.     local aAreaSB2  := SB2->(getArea())
  49.     local cAliasTemp:= "QRYSC9"+right(retCodUsr(),3)
  50.     local cQuerySC9 := ""
  51.  
  52.     local nSaldoEst := 0
  53.     local nQtdLib   := 0         
  54.     local lRetorno  := .T.
  55.    
  56.     //Monto uma consulta na SC9 do pedido agrupando os produtos iguais e desconsidando tes que não movimenta estoque.
  57.     cQuerySC9 := "SELECT C9_PEDIDO, C9_PRODUTO, C9_LOCAL, SUM(C9_QTDLIB) AS C9_QTDLIB"
  58.     cQuerySC9 += "FROM "+RetSqlName("SC9")+" SC9 "
  59.     cQuerySC9 += "INNER JOIN "+RetSqlName("SC6")+" AS SC6 ON C9_FILIAL = C6_FILIAL AND C9_PEDIDO = C6_NUM AND C9_ITEM = C6_ITEM "
  60.     cQuerySC9 += "INNER JOIN "+RetSqlName("SF4")+" AS SF4 ON C6_TES = F4_CODIGO "
  61.     cQuerySC9 += " WHERE C9_FILIAL     = '"+SC5->C5_FILIAL+"' "                                      //Filtra somente filial do pedido.
  62.     cQuerySC9 += "       AND C9_PEDIDO = '"+SC5->C5_NUM   +"' "                                      //Filtra somente pedido que está sendo gerado documento.
  63. //  cQuerySC9 += "       AND SC9.C9_BLEST   = ' '"                                                   //Filtra os que estão sem bloqueio de estoque
  64.     cQuerySC9 += "       AND SC9.C9_BLCRED  = ' '"                                                   //Filtra os que estão sem bloqueio de credito.
  65.     cQuerySC9 += "       AND SC9.C9_NFISCAL = ' '"                                                   //Filtra somente os que não foram gerados nota ainda.
  66.     cQuerySC9 += "       AND SF4.F4_ESTOQUE = 'S'"                                                   //Filtra somente TES que movimenta estoque.
  67.     cQuerySC9 += "       AND SC9.D_E_L_E_T_ = ' ' AND SC6.D_E_L_E_T_ = ' ' AND SF4.D_E_L_E_T_ = ' '" //Filtra somente não deletados.
  68.     cQuerySC9 += " GROUP BY C9_PEDIDO, C9_PRODUTO, C9_LOCAL "
  69.    
  70.     cQuerySC9 := changeQuery(cQuerySC9)
  71.     TcQuery cQuerySC9 New Alias ( cAliasTemp )
  72.    
  73.     //Verifico se tenho estoque suficiente p/gerar as notas.  
  74.     while !( (cAliasTemp)->(eof() ) )
  75.            
  76.         nSaldoEst := posicione("SB2",1, xFilial("SB2") + (cAliasTemp)->C9_PRODUTO + (cAliasTemp)->C9_LOCAL,"B2_QATU")
  77.         nQtdLib   := (cAliasTemp)->C9_QTDLIB
  78.        
  79.         //Se quantidade liberada for maior que estoque atual.
  80.         if( nQtdLib > nSaldoEst )
  81.                
  82.             Aviso("Atenção", "Pedido " + (cAliasTemp)->C9_PEDIDO + " não tem estoque para todos os itens. " + PULA +;
  83.                              "_______________________________________________________________"+ PULA +;
  84.                              "Cod.: " + alltrim((cAliasTemp)->C9_PRODUTO) + PULA +;                                  
  85.                              "Desc.: "+ alltrim(posicione("SB1",1,xFilial("SB1")+(cAliasTemp)->C9_PRODUTO,"B1_DESC"))+ PULA +;
  86.                              "_______________________________________________________________"+ PULA +;
  87.                              "Qdt. Liberada: "+ cValToChar(nQtdLib)         + PULA +;
  88.                              "Saldo em estoque: " + cValToChar(nSaldoEst)   + PULA +;
  89.                              "Armazém: " + (cAliasTemp)->C9_LOCAL          + PULA +;
  90.                              "_______________________________________________________________"+ PULA +;
  91.                              "Estoque é insuficiente para atender o pedido.", {"OK"},3)
  92.                                                                                                                
  93.                     lRetorno := .F.
  94.                 EndIf
  95.        
  96.         SB2->(dbCloseArea())       
  97.         (cAliasTemp)->( dbSkip() ) 
  98.     enddo  
  99.     (cAliasTemp)->( dbCloseArea() )
  100.    
  101.    
  102.     restArea(aArea)
  103.     restArea(aAreaSC5)
  104.     restArea(aAreaSC6)
  105.     restArea(aAreaSB2)
  106.    
  107. return lRetorno
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement