Salve salve....
Ponto de entrada FT600EXE- ( Cadastro de Oportunidade de Venda)
FT600EXE - Preenchimento proposta word
#INCLUDE "TOTVS.CH" /*/{Protheus.doc} FT600EXE Preenchimento proposta word @type function @author Eurai Rapelli @since 2023.01.01 /*/ User Function FT600EXE() Local aArea := GetArea() //Armazena area atual Local hWord := ParamIXB[1] //Objeto usado para preenchimento Local cProposta := Space(TamSX3("CJ_PROPOST")[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 lMsDocument := SuperGetMv("MV_FTMSDOC",,.F.) //Define se a proposta comercial sera vinculada ao banco de conhecimento 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. 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) 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 := SA1->A1_NOME cEndereco := SA1->A1_END cBairro := SA1->A1_BAIRRO cCidade := SA1->A1_MUN cUF := SA1->A1_EST cDescEnt := 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 := SUS->US_NOME cEndereco := SUS->US_END cBairro := SUS->US_BAIRRO cCidade := SUS->US_MUN cUF := SUS->US_EST cDescEnt := SUS->US_NREDUZ Endif Endif cNomeWord := '' cNomeWord := 'P'+cProposta If lMsDocument //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Faz revisao do documento pelo banco de conhecimento. ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ OLE_SetDocumentVar(hWord,'cRevisao' ,Ft600Rev(cProposta)) Else OLE_SetDocumentVar(hWord,'cRevisao' ,cRevisao) EndIf //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Descricao da Oportunidade de Venda ³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ OLE_SetDocumentVar(hWord,'cDesOport',Capital(POSICIONE("AD1",1,xFilial("AD1")+ADY->ADY_OPORTU,"AD1_DESCRI"))) //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ //³ Atualiza variaveis do cabecalho - Variaveis³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ OLE_SetDocumentVar(hWord,'cProposta' ,'P'+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 variaveis do item - Tabela³ //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ 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 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 RestArea(aARea) Return /* ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºPrograma ³Ft600Rev ºAutor ³Vendas CRM º Data ³ 29/12/10 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDesc. ³Cria revisao do documento. º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºUso ³ Ft600Exe º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß */ 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 Local lPdf := R600ImpPDF() //Verifica se o tipo de impressão será PDF DbSelectArea("ACB") DbSetOrder(2) If lPdf If !DbSeek(xFilial("ACB")+Upper(cNomeWord+'.pdf')) cRevisao := cNomeWord Return(cRevisao) Else While ACB->(!Eof()) cLocRev := ' - R'+cValToChar(nCount) If !DbSeek(xFilial("ACB")+Upper(cNomeWord+cLocRev+'.pdf')) cRevisao := cNomeWord+cLocRev Exit EndIf nCount++ ACB->(DbSkip()) End EndIf Else 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 EndIf Return(cRevisao) /* ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºPrograma ³Ft600Tip09 ºAutor ³Vendas CRM º Data ³ 12/01/11 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDesc. ³Inicializa o vetor aTipo09 com as parcelas previamente º±± ±±º ³salvas. º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºUso ³Ft600Exe º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß */ 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) /* ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ±±ÉÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍ»±± ±±ºPrograma ³Ft600CroFin ºAutor ³Vendas CRM º Data ³ 12/01/11 º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºDesc. ³Monta o Cronograma Financeiro. º±± ±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±± ±±ºUso ³Ft600Exe º±± ±±ÈÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ±± ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß */ 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)
Gostou? Compartilhe com seus amigos e deixe um comentário! 😎
Um abraço, e até a próxima