Ponto de Entrada – M460NUM

Exemplo do Ponto de Entrada M460NUM.

Exemplo do Ponto de Entrada:

//Bibliotecas
#Include "Protheus.ch"

/*-----------------------------------------------------------------------------*
 | P.E.:  M460NUM                                                              |
 | Desc:  Função para alterar a sequencia de documentos antes da transmissão   |
 | Link:  http://tdn.totvs.com/pages/releaseview.action?pageId=6784193         |
 *-----------------------------------------------------------------------------*/

User Function M460NUM()
	Local aArea		:= GetArea()
	Local cQrySped	:= ""
	Local lAmbOfic	:= IIf(Alltrim(Upper(GetEnvServer())) $ Alltrim(Upper(GetNewPar("MV_X_AMBIE",""))),.T.,.F.)	//Verifica se esta usando ambiente oficial
	Local cBaseTSS	:= Iif(lAmbOfic, "TOTVSTSS.dbo.", "TSS_TST.dbo.")
	Local lExist		:= .T.
	Local cNumNovo	:= cNumero
	Local cFilSped	:= cFilAnt
	
	//Se vier do cálculo de documentos do TMS
	If Alltrim(FunName()) $ "TMSA200;"
		While lExist
			cQrySped := " SELECT "+Chr(13)+Chr(10)
			cQrySped += " 	SP50.NFE_ID "+Chr(13)+Chr(10)
			cQrySped += " FROM "+Chr(13)+Chr(10)
			cQrySped += " 	"+cBaseTSS+"SPED050 SP50 "+Chr(13)+Chr(10)
			cQrySped += " WHERE "+Chr(13)+Chr(10)
			cQrySped += " 	SP50.NFE_ID = '"+cSerie+cNumNovo+"' "+Chr(13)+Chr(10)
			cQrySped += " 	AND SP50.ID_ENT = '"+StaticCall(SPEDNFE,GetIdEnt)+"' " 
			TCQuery cQrySped New Alias "QRY_SPED"
			
			//Se não tiver registro, finaliza o laço, senão, soma 1 ao número
			If QRY_SPED->(EoF())
				lExist := .F.
			Else
				cNumNovo := Soma1(cNumNovo)
			EndIf
			QRY_SPED->(DbCloseArea())
		EndDo
		
		//Se os números tiverem divergentes, atualiza a SX5
		If cNumNovo != cNumero
			cLog := "Filial: "+cFilAnt+Chr(13)+Chr(10)
			cLog += "Série: "+cSerie+Chr(13)+Chr(10)
			cLog += "Número Original: "+cNumero+Chr(13)+Chr(10)
			cLog += "Número Novo: "+cNumNovo+Chr(13)+Chr(10)
			cLog += "Usuário: "+RetCodUsr()//+" - "+UsrRetName(RetCodUsr())
		
			
			//Se conseguir posicionar no registro, atualiza colocando sempre o próximo número disponível
			DbSelectArea("SX5")
			SX5->(DbSetOrder(1))
			If SX5->(DbSeek(cFilSped + '01' + cSerie ))
				RecLock("SX5", .F.)
					X5_DESCRI	:= Soma1(cNumNovo)
					X5_DESCENG	:= Soma1(cNumNovo)
					X5_DESCSPA	:= Soma1(cNumNovo)
				MsUnlock()
			Endif
			
			//Atualizando a numeração atual
			cNumero := cNumNovo
		EndIf
	EndIf
	
	RestArea(aArea)
Return .T.

Observações:

– Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
– Se tiver sugestões de rotinas, pode entrar em contato;

Links:

Pesquisa no TDN

Etiquetas

Receba novidades

Seja VIP e receba novidades exclusivas por e-Mail gratuitamente.