Função que verifica se um pedido já foi transmitido via AdvPL

Olá pessoal…

Hoje vou mostrar uma função que desenvolvi, para verificar se um pedido já foi transmitido utilizando o AdvPL.

Essa rotina, você pode usar em pontos de entrada, no fórmulas, ou até mesmo dentro de outros fontes, sendo que ela recebe dois parâmetros, o do pedido e da filial, faz a verificação para ver se a nota existe, e depois verifica na base do TSS se já foi transmitido (a base do tss tem que estar no parâmetro MV_X_BATSS).

//Bibliotecas
#Include "Protheus.ch"
#Include "TopConn.ch"
 
/*/{Protheus.doc} zVerTrans
Função que verifica se um pedido foi transmitido totalmente
@author Atilio
@since 28/05/2015
@version 1.0
    @param cFilTran, Caracter, Código da filial a ser analisada
    @param cPedTran, Caracter, Código do pedido a ser analisado
    @return lRet, Retorno lógico identificando se foi transmitido totalmente o pedido
    @example
    u_zVerTrans('0102', '000001')
/*/
 
User Function zVerTrans(cFilTran, cPedTran)
    Local aArea    := GetArea()
    Local lRet     := .T.
    Local aAreaSM0 := SM0->(GetArea())
    Local cFilBkp  := cFilAnt
    Local cBaseTSS := SuperGetMV('MV_X_BATSS', .F., 'TOTVSTSS.dbo.')
    Local cQryNota := ""
    Local cQrySped := ""
	Local cIdent   := RetIdEnti()
     
    //Posiciono na empresa (para poder pegar o ident)
    cFilAnt := cFilTran
    SM0->(DbGoTop())
    SM0->(DbSeek(cEmpAnt+cFilAnt))
     
    //Monto consulta para pegar as NFs do Pedido
    cQryNota := " SELECT DISTINCT "    + CRLF
    cQryNota += "    D2_SERIE+D2_DOC AS NF "    + CRLF
    cQryNota += " FROM "    + CRLF
    cQryNota += "    "+RetSQLName("SD2")+" SD2 "    + CRLF
    cQryNota += " WHERE "    + CRLF
    cQryNota += "    SD2.D_E_L_E_T_ = '' "    + CRLF
    cQryNota += "    AND D2_FILIAL = '"+cFilTran+"' "    + CRLF
    cQryNota += "    AND D2_PEDIDO = '"+cPedTran+"' "    + CRLF
    TCQuery cQryNota New Alias "QRY_NOT"
     
    //Enquanto tiver notas
    While ! QRY_NOT->(EoF())
        //Agora vou na Sped050 verificar se ela já foi assinada
        cQrySped := " SELECT "                                                                + CRLF
        cQrySped += "     SP50.NFE_ID "                                                        + CRLF
        cQrySped += " FROM "                                                                    + CRLF
        cQrySped += "     "+cBaseTSS+"SPED050 SP50 "                                        + CRLF
        cQrySped += " WHERE "                                                                + CRLF
        cQrySped += "     SP50.NFE_ID        = '"+QRY_NOT->NF+"' "                        + CRLF
        cQrySped += "     AND SP50.ID_ENT    = '"+cIdent+"' "    + CRLF
        cQrySped += "     AND SP50.DOC_CHV  != '' "                                        + CRLF
        cQrySped += "     AND SP50.NFE_PROT != '' "                                        + CRLF
        TCQuery cQrySped New Alias "QRY_SPED"
         
        //Se não tiver registros não foi transmitida
        If QRY_SPED->(EoF())
            lRet := .F.
        EndIf
         
        QRY_SPED->(DbCloseArea())
        QRY_NOT->(DbSkip())
    EndDo
    QRY_NOT->(DbCloseArea())
     
    cFilAnt := cFilBkp
    RestArea(aAreaSM0)
    RestArea(aArea)
Return lRet

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta