Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

FT600IMP - Impressão Customizada da Proposta Comercial

Características do Requisito

Linha de Produto:

Microsiga Protheus®

Segmento:

Serviços

Módulo:

Faturamento

Rotina:

Rotina

Nome Técnico

FATA600

Proposta Comercial

Descrição

Ponto de Entrada que realiza a impressão customizada da proposta comercial. 
Sem a utilização deste PE é utiliza a rotina padrão FATR600. 

 

 

 

 

 

 

 


Ponto de Entrada

Descrição:

FT600IMP - Impressão customizada da Proposta Comercial

Eventos:

Impressão

Programa Fonte:

FATN600.PRW

Função:

A600Impr()

 

Bloco de código
languagecpp
titleExemplo
#INCLUDE "PROTHEUS.CH"
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} FT600IMP
RDMAKE para Impressao Customizada da Proposta Comercial 
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Nil
/*/
//-------------------------------------------------------------------------------------
User Function FT600IMP()
	Private cNomeFile	:= 'PROPOSTA-COMERCIAL.dot'
	Private cPath		:= GetTempPath(.T.)
	Private cFullPath	:= cPath + cNomeFile
	Private cSrvPath	:= alltrim(GetNewPar("MV_DOCAR","\system\modelos\"))
	Private cSrvFull	:= cSrvPath + cNomeFile
	
	Processa( {|| U_VlMoPrp() })	
Return
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} VlMoPrp
RDMAKE para Impressao Customizada da Proposta Comercial 
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Nil
/*/
//-------------------------------------------------------------------------------------
User Function VlMoPrp()
	If U_CpDotPrp()
		U_GrDocPrp()
	Else
		MsgStop('Erro na execução da copia do arquivo Modelo do Microsoft Word para a estação de trabalho')
	EndIf
Return
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} CpDotPrp
Funcao responsavel por promover a copia do arquivo DOT da impressao de orcamentos 
do servidor Protheus para a Estacao de Trabalho do Usuario. Arquivo fica armazenado no diretorio
TEMP da estacao local. Sempre apaga o arquivo caso ele exista na estacao 
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Lógico
/*/
//-------------------------------------------------------------------------------------
User Function CpDotPrp()
	Local nTry	:= 5
	Local nI 	:= 1
	Local lOk	:= .T.
	
	//Verifica se o arquivo existe. Se existe, apaga ele.
	If File(cNomeFile) 
		For nI := 1 to nTry 
			If FErase(cFile) <> -1
				lOk := .T.
				exit
			Else
				lOk := .F.
				Sleep(1000)
			EndIf
		Next nT
	EndIf
	
	//Copia o Arquivo para a estacao
	If lOk
		lOk := CpyS2T(cSrvFull,cPath,.T.) 
	EndIf
	
Return lOk
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} GrDocPrp
RDMAKE para Impressao Customizada da Proposta Comercial 
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Nil
/*/
//-------------------------------------------------------------------------------------
User Function GrDocPrp(cPath,cNomeFile)
Local aArea			:= GetArea()						//Armazena area atual
Local hWord 		:= Nil								//Objeto usado para preenchimento
Local cProposta		:= Space(TamSX3("ADY_PROPOS")[1])	//Numero da proposta comercial
Local cDtEmissao	:= Space(TamSX3("CJ_EMISSAO")[1])	//Data de emissao
Local cCodigo		:= Space(TamSX3("A1_COD")[1])		//Codigo da entidade (cliente ou prospect)
Local cLoja			:= Space(TamSX3("A1_LOJA")[1])		//Loja
Local cNome 		:= Space(TamSX3("A1_NOME")[1])		//Nome
Local cEndereco		:= Space(TamSX3("A1_END")[1])   	//Endereco
Local cBairro		:= Space(TamSX3("A1_BAIRRO")[1])    //Bairro
Local cCidade		:= Space(TamSX3("A1_MUN")[1])  		//Cidade
Local cUF			:= Space(TamSX3("A1_ESTADO")[1])  	//Estado (UF)
Local cPRevisa		:= ' '                              //Revisao dos itens da proposta comercial gravado na tabela ADZ
Local aTipo09		:= {}								//Array que armazena o tipo de pagamento 9
Local aCronoFin		:= {}								//Array que armazena o cronograma financeiro
Local cRevisao		:= ' '                              //Controla a revisao do documento
Local nTotProsp		:= 0								//Total da proposta comercial
Local nI			:= 0                               	//Usado no laco do While
Local nX            := 0                                //Usado no laco do For
Local nY			:= 0								//Usado no laco do While
Local nCount		:= 0								//Incremento para utilizar no itens de cond. pagto.
//Monta a conexao com o arquivo WORD
hWord	:= OLE_CreateLink()
OLE_NewFile(hWord, cFullPath)
cProposta	:= ADY->ADY_PROPOS
cPRevisa	:= ADY->ADY_PREVIS
cDescEnt	:= Space(30)
cDtEmissao	:= Dtoc(ADY->ADY_DATA)
aTipo09		:= Ft600Tip09(cProposta,cPRevisa)
aCronoFin	:= Ft600CroFin(cProposta,cPRevisa,aTipo09)
//Busca dados do cliente
If ADY->ADY_ENTIDA == "1"
	dbSelectArea("SA1")
	dbSetOrder(1)
	If	dbSeek(xFilial("SA1")+ADY->ADY_CODIGO+ADY->ADY_LOJA)
		cCodigo		:= ADY->ADY_CODIGO
		cLoja		:= ADY->ADY_LOJA
		cNome 		:= Replace(alltrim(SA1->A1_NOME),"  "," ")
		cEndereco	:= alltrim(SA1->A1_END)
		cBairro		:= alltrim(SA1->A1_BAIRRO)
		cCidade		:= alltrim(SA1->A1_MUN)
		cUF			:= alltrim(SA1->A1_EST)
		cDescEnt	:= alltrim(SA1->A1_NREDUZ)
	Endif
Else
	dbSelectArea("SUS")
	dbSetOrder(1)
	If	dbSeek(xFilial("SUS")+ADY->ADY_CODIGO+ADY->ADY_LOJA)
		cCodigo		:= ADY->ADY_CODIGO
		cLoja		:= ADY->ADY_LOJA
		cNome 		:= alltrim(SUS->US_NOME)
		cEndereco	:= alltrim(SUS->US_END)
		cBairro		:= alltrim(SUS->US_BAIRRO)
		cCidade		:= alltrim(SUS->US_MUN)
		cUF			:= alltrim(SUS->US_EST)
		cDescEnt	:= alltrim(SUS->US_NREDUZ)
	Endif
Endif
cNomeWord	:=	''
cNomeWord	:= 'P'+cProposta
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Descricao da Oportunidade de Venda         ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
OLE_SetDocumentVar(hWord,'cRevisao'	,cPRevisa)
OLE_SetDocumentVar(hWord,'cDesOport',Capital(POSICIONE("AD1",1,xFilial("AD1")+ADY->ADY_OPORTU,"AD1_DESCRI")))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza variaveis do cabecalho - Variaveis³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
OLE_SetDocumentVar(hWord,'cCabec'		,'Teste')
OLE_SetDocumentVar(hWord,'cProposta'	,cProposta)
OLE_SetDocumentVar(hWord,'cDtEmissao'	,cDtEmissao)
OLE_SetDocumentVar(hWord,'cCodigo'		,cCodigo)
OLE_SetDocumentVar(hWord,'cNome'		,cNome)
OLE_SetDocumentVar(hWord,'cEndereco'	,cEndereco)
OLE_SetDocumentVar(hWord,'cBairro'		,cBairro)
OLE_SetDocumentVar(hWord,'cCidade'		,cCidade)
OLE_SetDocumentVar(hWord,'cUF'			,cUF)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza tabela de itens da proposta³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
DbSelectArea("ADZ")
DbSetOrder(3)
If dbSeek(xFilial("ADZ")+cProposta+cPRevisa) 
	
	While ADZ->(!Eof()) .and. xFilial("ADZ") == ADZ->ADZ_FILIAL .AND. cProposta == ADZ->ADZ_PROPOS
		
		nI++
		
		OLE_SetDocumentVar(hWord,"cProd"+Alltrim(str(nI))  ,Alltrim( Posicione("SB1",1,xFilial("SB1")+ADZ->ADZ_PRODUT,"B1_DESC") ) )
		OLE_SetDocumentVar(hWord,"nQuant"+Alltrim(str(nI)) ,Transform(ADZ->ADZ_QTDVEN,"999,999,999.99"))
		OLE_SetDocumentVar(hWord,"nValUni"+Alltrim(str(nI)),Transform(ADZ->ADZ_PRCVEN,"@E 999,999,999.99"))
		OLE_SetDocumentVar(hWord,"nTotal"+Alltrim(str(nI)) ,Transform(ADZ->ADZ_TOTAL,"@E 999,999,999.99"))
		
		nTotProsp += ADZ->ADZ_TOTAL
		
		ADZ->(dbSkip())
		
	Enddo
	
	OLE_SetDocumentVar(hWord,'nTotProsp',Transform(nTotProsp,"@E 999,999,999.99"))
	
Endif
If nI > 0
	//Executa a macro para atualizar os itens
	OLE_SetDocumentVar(hWord,'nItens_Proposta',alltrim(Str(nI)))
	OLE_ExecuteMacro(hWord,"Itens_Proposta") 
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Proposta de Servicos               ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
DbSelectArea("AF1")
DbSetOrder(4)
If DbSeek(xFilial("AF1")+cProposta)
	DbSelectArea("AF5")
	DbSetOrder(1)
	
	If DbSeek(xFilial("AF5")+AF1->AF1_ORCAME)
		OLE_SetDocumentVar(hWord,"cLine",AllTrim(AF5->AF5_DESCRI)) 
		While AF5->(!EOF()) .AND.  xFilial("AF5")+ AF1->AF1_ORCAME == AF5_FILIAL + AF5_ORCAME
			
			nY++
			
			If AF5->AF5_STATUS <> '2'
				
				If Len(AF5_EDT) == 2  
					OLE_SetDocumentVar(hWord,"cLine"+Alltrim(str(nY)),AllTrim(AF5->AF5_DESCRI))
				End
				If Len(AF5_EDT) > 2   
					OLE_SetDocumentVar(hWord,"cLine"+Alltrim(str(nY)),AllTrim(AF5->AF5_DESCRI))
					DbSelectArea("AF2")
					DbSetOrder(2)
					If  DbSeek(xFilial("AF2")+AF5->AF5_ORCAME+AF5->AF5_EDT)
						While AF2->(!EOF()) .AND. xFilial("AF2")+ AF5->AF5_ORCAME + AF5->AF5_EDT == AF2_FILIAL + AF2_ORCAME + AF2_EDTPAI
							nY++
							
							OLE_SetDocumentVar(hWord,"cLine"+Alltrim(str(nY)),Space(2)+AllTrim(AF2->AF2_DESCRI))
							AF2->(DbSkip())
						End
					EndIf
				EndIf
			EndIf
			AF5->(DbSkip())
		End
		
	EndIf
	
EndIf

If nY > 0
	
	OLE_SetDocumentVar(hWord,'nItens_PServico',alltrim(Str(nY))) 
	OLE_ExecuteMacro(hWord,"Itens_PServico") 
	
Endif

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza a condicoes de pagamento  ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
For nX := 1 To Len(aCronoFin)
	
	OLE_SetDocumentVar(hWord,"cParcela"+Alltrim(str(nX)),aCronoFin[nX][1])
	OLE_SetDocumentVar(hWord,"dVencto"+Alltrim(str(nX)) ,aCronoFin[nX][2])
	OLE_SetDocumentVar(hWord,"nValor"+Alltrim(str(nX)) ,Transform(aCronoFin[nX][3],"@E 999,999,999.99"))
	
	nCount++
Next nX
If nCount > 0
	
	OLE_SetDocumentVar(hWord,'nItens_Cond_Pgto',alltrim(Str(nCount))) 
	OLE_ExecuteMacro(hWord,"Cond_Pgto") 
	
Endif
//Atualiza todos os campos do documento DOT (Refresh)
OLE_UpDateFields(hWord)
//Trava o Protheus enquanto o Word Estiver Aberto
While .T.
	If OLE_WordIsOk(hWord)
		Sleep(1000)
	Else
		OLE_CloseLink(hWord)
		exit
	EndIf
EndDo
RestArea(aARea)
Return
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} Ft600Rev
Cria revisao do documento.
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Caracter
/*/
//-------------------------------------------------------------------------------------
Static Function Ft600Rev(cProposta)
Local cLocRev		:= '' 	   				//Localiza a se existe docs de revisao no servidor
Local cRevisao 		:= '' 					//Revisao do documento
Local cNomeWord		:= "P"+cProposta   		//P+Numero da Proposta
Local nCount 		:= 1  					//Incremento

DbSelectArea("ACB")
DbSetOrder(2)
If !DbSeek(xFilial("ACB")+Upper(cNomeWord+'.doc'))
	cRevisao := cNomeWord
	Return(cRevisao)
Else
	While ACB->(!Eof())
		cLocRev := ' - R'+cValToChar(nCount)
		If !DbSeek(xFilial("ACB")+Upper(cNomeWord+cLocRev+'.doc'))
			cRevisao := cNomeWord+cLocRev
			Exit
		EndIf
		nCount++
		ACB->(DbSkip())
	End
EndIf
Return(cRevisao)
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} Ft600Tip09
Inicializa o vetor aTipo09 com as parcelas previamente salvas.
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Array
/*/
//-------------------------------------------------------------------------------------
Static Function Ft600Tip09(cProposta,cPRevisa)
Local aArea		:= GetArea()
Local aAreaSCJ	:= SCJ->(GetArea())
Local aAreaSCK	:= SCK->(GetArea())
Local aProdutos := {}
Local aTipo09	:= {}
Local nIt		:= 0
Local nNumParc	:= SuperGetMv("MV_NUMPARC")
Local cProxParc	:= ""
Local dDtVenc	:= Nil
Local nVlParc	:= 0
Local nPc		:= 0

dbSelectArea("SE4")	
dbSetOrder(1)
DbSelectarea("SCJ")	
DbSetOrder(1)
DbSelectArea("SCK")
DbSetOrder(1)  		

DbSelectArea("ADZ")
DbSetOrder(3)   
If dbSeek(xFilial("ADZ")+cProposta+cPRevisa) 
	
	While ADZ->(!EOF()) .AND. ADZ_FILIAL == xFilial("ADZ")  .AND. ADZ_PROPOS == cProposta
		aAdd(aProdutos,{ADZ_PRODUT,ADZ_ORCAME,ADZ_ITEMOR,ADZ_ITEM})
		ADZ->(DbSkip())
	End
	
EndIf
For nIt := 1 to Len(aProdutos)
	
	If  SCK->(DbSeek(xFilial("SCK") + aProdutos[nIt][02] + aProdutos[nIt][03] + aProdutos[nIt][01]))
		
		SCJ->(DbSeek(xFilial("SCJ") + SCK->CK_NUM + SCK->CK_CLIENTE + SCK->CK_LOJA ))
		
		SE4->(DbSeek(xFilial("SE4") + SCJ->CJ_CONDPAG))
		
		If	SE4->E4_TIPO == "9"
			
			cProxParc := "0"
			
			For nPc:=1 To nNumParc
				
				cProxParc := Soma1(cProxParc)
				
				dDtVenc := &("SCJ->CJ_DATA"+cProxParc)
				nVlParc	:= &("SCJ->CJ_PARC"+cProxParc)
				
				If	nVlParc > 0
					aadd( aTipo09,{SCK->CK_PRODUTO, dDtVenc , nVlParc ,SCJ->CJ_CONDPAG, aProdutos[nIt][04] } )
				Endif
				
			Next
			
		Endif
		
	EndIf
	
Next nIt
RestArea(aAreaSCJ)
RestArea(aAreaSCK)
RestArea(aArea)
Return(aTipo09)
//-------------------------------------------------------------------------------------
/*/{Protheus.doc} Ft600CroFin
Monta o Cronograma Financeiro.
@author  TOTVS SP
@version P12
@since 	 13/09/2016
@return  Array
/*/
//-------------------------------------------------------------------------------------
Static Function  Ft600CroFin(cProposta,cPRevisa,aTipo09)
Local aArea			:= GetArea()
Local aVencto 		:= {}
Local aCronoAtu		:= {}
Local nC			:= 0
Local nA			:= 0
Local nI			:= 0
Local nPosData		:= 0
Local cTipoPar		:= SuperGetMv("MV_1DUP")
Local cSequencia    := " "
Local aProdutos		:= {}
Local aCronoFin		:= {}

DbSelectArea("ADZ")
DbSetOrder(3) 
If dbSeek(xFilial("ADZ")+cProposta+cPRevisa) 
	
	While ADZ->(!EOF()) .AND. ADZ_FILIAL == xFilial("ADZ")  .AND. ADZ_PROPOS == cProposta
		aAdd(aProdutos,{ADZ_PRODUT,ADZ_TOTAL,ADZ_CONDPG,ADZ_DT1VEN})
		ADZ->(DbSkip())
	End
	
EndIf

For nI:=1 To Len(aProdutos)
	
	dbSelectArea("SE4")
	dbSetOrder(1)
	IF	dbSeek(xFilial("SE4")+aProdutos[nI][03]) 
		
		If	E4_TIPO <> "9"
			
			//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
			//³ Atualiza cronograma financeiro para condicao diferente do tipo 9³
			//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
			aVencto := Condicao(aProdutos[nI][02],aProdutos[nI][03],0,dDatabase,0)
			
			For nA:=1 To Len(aVencto)
				
				If	!Empty(aProdutos[nI][04]) .AND. aProdutos[nI][04] <> dDataBase .AND. nA == 1
					aVencto[nA,1] := aProdutos[nI][04]
				Endif
				
				nPosData := aScan( aCronoAtu, { |x| x[1] == aVencto[nA,1] } )
				
				If	nPosData == 0
					aadd(aCronoAtu,{aVencto[nA,1],aVencto[nA,2]})
				Else
					aCronoAtu[nPosData,2] += aVencto[nA,2]
				Endif
				
			Next nA
			
		Endif
		
	Endif
	
Next nI
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza cronograma financeiro para condicao de pagamento tipo 9³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If	Len(aTipo09)>0
	
	For nA:=1 To Len(aTipo09)
		
		If	Len(aCronoAtu)>0
			nPosData := aScan( aCronoAtu, { |x| x[1] == aTipo09[nA,2] } )
		Else
			nPosData := 0
		Endif
		
		If	nPosData == 0
			aadd(aCronoAtu,{aTipo09[nA,2],aTipo09[nA,3]})
		Else
			aCronoAtu[nPosData,2] += aTipo09[nA,3]
		Endif
		
	Next nA
	
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Trata o iniciador da parcela inicial ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If	cTipoPar == "A"
	cSequencia	:= "9"
Else
	cSequencia	:= "0"
Endif
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Ordena as parcelas pela data de vencimento ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCronoAtu := ASort(aCronoAtu,,,{|parc1,parc2|parc1[1]<parc2[1]})
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Atualiza cronograma financeiro ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
For nC:=1 To Len(aCronoAtu)
	
	cSequencia := Soma1(cSequencia)
	
	If	nC == 1
		aadd(aCronoFin,{"",CtoD(Space(8)),0})
		aCronoFin[nC,1] := cSequencia
		aCronoFin[nC,2] := aCronoAtu[nC,1]
		aCronoFin[nC,3] := aCronoAtu[nC,2]
	Else
		AAdd(aCronoFin,{cSequencia,aCronoAtu[nC,1],aCronoAtu[nC,2] })
	Endif
	
Next nC
RestArea(aArea)
Return(aCronoFin)