#include 'Protheus.ch'
#include 'topconn.ch'
User Function RateioJur()
Local nLinha := 0, nI := 0
Local aCoors := FWGetDialogSize(oMainWnd)
Local cTitulo := "Incluir Rateio"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo 2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no modelo2 - Padrao: {44,5,118,315}
Local lRetMod2 := .F. // Retorno da função Modelo2 - .T. Confirmou / .F. Cancelou
Private aCols := {}
Private aHeader := {}
Private cFilTitAnt
Private cSeqAnt
Private dDtSeqAnt
nOpc := 3
// Montagem do aHeader
AADD(aHeader,{"ID do Rateio" ,"ZZN_ID","@!",6,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"Empresa" ,"ZZN_EMPRES","@!",2,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"Filial" ,"ZZN_FILIAL","@!",2,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"Percentual" ,"ZZN_PERCEN","@E 999.99",6,2,"AllwaysTrue()","","N","","R"})
AADD(aHeader,{"Valor Rateio" ,"ZZN_VALOR","@E 9,999,999,999,999.99",16,2,"AllwaysTrue()","","N","","R"})
AADD(aHeader,{"Histórico" ,"ZZN_HIST","@!",40,0,"AllwaysTrue()","","C","","R"})
AADD(aHeader,{"C. Custo" ,"ZZN_CCUSTO","@!",9,0,"AllwaysTrue()","","C","","R"})
nUsado := Len(aHeader)
// Montagem do aCols
aCols := {}
dbSelectArea("ZZN")
dbSetOrder(1)
If ZZN->(dbSeek(SUBSTRING(SE2->E2_ARQRAT,1,2)+SUBSTRING(SE2->E2_ARQRAT,3,10)+SUBSTRING(SE2->E2_ARQRAT,13,18)))
cID := ZZN->ZZN_ID
cFilTitAnt := ZZN->ZZN_FILIAL
While ZZN->(!Eof()) .AND. ALLTRIM(ZZN->ZZN_FILIAL/*+DTOS(ZZN->ZZN_DTSEQ)+ZZN->ZZN_SEQUEN*/) == ALLTRIM(SE2->E2_FILIAL)
AADD(aCols,Array(Len(aHeader)+1))
For nI := 1 To Len(aHeader)
aCols[Len(aCols),nI] := FieldGet(FieldPos(aHeader[nI,2]))
Next
aCols[1][nUsado+1] := .F.
ZZN->(dbSkip())
End
Endif
If Len(aCols) == 0
aCols := Array(1,nUsado+1)
nUsado := 0
dbSelectArea("SX3")
dbSeek("ZZN")
While !Eof() .And. (x3_arquivo == "ZZN")
nUsado += 1
Do Case
Case alltrim(x3_campo) == 'ZZN_FILIAL'
aCols[1][nUsado] := cID
Case alltrim(x3_campo) == 'ZZN_FILIAL'
aCols[1][nUsado] := SPACE(2)
Case alltrim(x3_campo) == 'ZZN_EMPRES'
aCols[1][nUsado] := SPACE(2)
Case alltrim(x3_campo) == 'ZZN_PERCEN'
aCols[1][nUsado] := 0
Case alltrim(x3_campo) == 'ZZN_VALOR'
aCols[1][nUsado] := 0
Case alltrim(x3_campo) == 'ZZN_HIST'
aCols[1][nUsado] := SPACE(40)
Case alltrim(x3_campo) == 'ZZN_CCUSTO'
aCols[1][nUsado] := SPACE(9)
EndCase
SX3->(dbSkip())
End
aCols[1][nUsado+1] := .F.
Endif
cLinhaOk := "ExecBlock('aRLinOk',.f.,.f.)"
cTudoOk := "ExecBlock('aRTudOk',.f.,.f.)"
aCols[1][Len(aHeader)+1] := .F. // Linha não deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk,,,,,{aCoors[1],aCoors[2],aCoors[3],aCoors[4]},.T.)
IF lRetMod2
//MsgInfo("Você confirmou a operação","MBRW2SX5")
For nLinha := 1 to len(aCols)
If aCols[nLinha,8]
LOOP
Endif
Reclock("ZZN",.T.)
ZZN->ZZN_ID := cID
ZZN->ZZN_FILIAL := cFilTitAnt
ZZN->ZZN_PERCEN := aCols[nLinha,1]
ZZN->ZZN_VALOR := aCols[nLinha,2]
ZZN->ZZN_HIST := aCols[nLinha,3]
ZZN->ZZN_CCUSTO := aCols[nLinha,4]
MsUnLock()
Next nLinha
ENDIF
return
User Function aRLinOk()
Local nI
For nI := 1 To Len(aCols[n])-1
If !EMPTY(aCols[n,6]) .AND. aCols[n,4] == 0
Alert('Preencha o campo: '+aHeader[3,1]+"")
Return .F.
Endif
If EMPTY(aCols[n,6]) .AND. aCols[n,4] > 0
Alert('Preencha o campo: '+aHeader[6,1]+"")
Return .F.
Endif
Next
Return .T.
User Function aRTudOk()
Local nI
Local nPorct := 0
Local lCC := .T.
For nI := 1 to Len(aCols)
If !aCols[nI,8]
nPorct += aCols[nI,3]
If EMPTY(aCols[nI,6])
lCC := .F.
Endif
Endif
Next
If nPorct <> 100
Alert('O Percentual total é diferente de 100%, verificar!')
Return .F.
Elseif !lCC
Alert('Existe algum C. Custo em branco, verificar!')
Return .F.
Endif
deleteReg()
Return .T.
Static Function deleteReg()
dbSelectArea("ZZN")
dbSetOrder(1)
If ZZN->(dbSeek(SUBSTRING(SE2->E2_ARQRAT,1,2)+SUBSTRING(SE2->E2_ARQRAT,3,10)+SUBSTRING(SE2->E2_ARQRAT,13,18)))
While ZZN->(!Eof()) .AND. ALLTRIM(ZZN->ZZN_FILIAL) == ALLTRIM(SE2->E2_FILIAL)
If ALLTRIM(ZZN->ZZN_FILIAL) == ALLTRIM(SE2->E2_FILIAL)
Reclock("ZZN", .F.)
ZZN->(dbDelete())
MSUNLOCK()
Endif
ZZN->(dbSkip())
Enddo
EndIF
Return