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.