#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