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

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"

//Constantes
#Define STR_PULA		Chr(13)+Chr(10)

/*/{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 := ""
	
	//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 "	+ STR_PULA
	cQryNota += "    D2_SERIE+D2_DOC AS NF "	+ STR_PULA
	cQryNota += " FROM "	+ STR_PULA
	cQryNota += "    "+RetSQLName("SD2")+" SD2 "	+ STR_PULA
	cQryNota += " WHERE "	+ STR_PULA
	cQryNota += "    SD2.D_E_L_E_T_ = '' "	+ STR_PULA
	cQryNota += "    AND D2_FILIAL = '"+cFilTran+"' "	+ STR_PULA
	cQryNota += "    AND D2_PEDIDO = '"+cPedTran+"' "	+ STR_PULA
	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 "																+ STR_PULA
		cQrySped += " 	SP50.NFE_ID "														+ STR_PULA
		cQrySped += " FROM "																	+ STR_PULA
		cQrySped += " 	"+cBaseTSS+"SPED050 SP50 "										+ STR_PULA
		cQrySped += " WHERE "																+ STR_PULA
		cQrySped += " 	SP50.NFE_ID        = '"+QRY_NOT->NF+"' "						+ STR_PULA
		cQrySped += " 	AND SP50.ID_ENT    = '"+StaticCall(SPEDNFE,GetIdEnt)+"' "	+ STR_PULA
		cQrySped += " 	AND SP50.DOC_CHV  != '' "										+ STR_PULA
		cQrySped += " 	AND SP50.NFE_PROT != '' "										+ STR_PULA
		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

Esses e outros códigos, estão disponíveis gratuitamente no nosso GitHub, acesse em github.com/dan-atilio/AdvPL.

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

About Dan_Atilio

Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor do projeto Terminal de Informação, onde são postados tutoriais e notícias envolvendo o mundo da tecnologia.

Deixe uma resposta

%d blogueiros gostam disto: