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.