Help com For Each em uma Hash Table

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Help com For Each em uma Hash Table

Mensagem por asimoes »

Pessoal,

Preciso de um help nesse For..Each não sei se é possível, a ideia é fazer a cada fim de NUMPROC um subtotal , é possível da forma que eu fiz ?
Tem uma incrementar o oElemento ?, tentei oElemento := oElemento:__EnumIndex() + 1 mas não funcionou
Criei essa função PSAY porque a Hwgui não deixa usar @Prow(),... em uma janela GUI, a função PSAY fica em uma lib externa

Código: Selecionar todos

For EACH oElemento IN ::hFatura_Concessionaria_Fin
    ::cLastProc := oElemento["NUMPROC"]
    Do While ! oElemento:__enumIsLast() .AND. oElemento["NUMPROC"] = ::cLastProc
       nRec := hb_HScan( ::hConcessionarias, {| nKey, cChave | cChave["CODEFEBRABAN"] = oElemento["CODCON"] } )
       PSAY( ::nLin++,01, Transform( oElemento["NUMPROC"], "@R 99.999.999/99-!!" ) + " " + ;
                          SubStr( ::hConcessionarias[hb_NtoS( nRec ), "NOME"], 1, 30) + " " + ;
                          Transform( oElemento["DT_VENCIMENTO"], "@D" ) + " " + ;
                          Transform( oElemento["VALOR"], "@E 999,999,999,999.99" ) )
       If ::nLin + 1 > 55
          Eject()
          ::CabecRelDataPgto()
       End                                    
       nTotOps += oElemento["VALOR"]       
       oElemento := oElemento:__EnumIndex() + 1             
    Enddo
 Next   
 
 
  Processo         Empresa                        Vencimento Valor              Total Ops
  ------------------------------------------------------------------------------------------------
  26.500.742/17-!! CEDAE                          01/12/2017             851,75 
                   CEDAE                          01/12/2017           1.120,64           1.972,39 
  26.500.761/17-!! CEDAE                          10/12/2017             603,12
                   CEDAE                          10/12/2017           1.384,49           1.987,61
  ------------------------------------------------------------------------------------------------
                                                                   Total Geral:           3.960,00

Código: Selecionar todos

FUNCTION PSAY( nRow, nCol, cString )

   hb_Default(@nRow, 0 )
   hb_Default(@nCol, 0 )
   hb_Default(@cString, "" )
   
   @ nRow, nCol SAY cString
   
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Help com For Each em uma Hash Table

Mensagem por JoséQuintas »

Uma idéia....

Código: Selecionar todos

aTotaliza := Array( Len( ::hFatura_Concessionaria_Fin ) )
FOR EACH oElemento IN ::hFatura_Concessionaria_Fin DESCEND
   IF oElement:__EnumIsLast
      aTotaliza[ oElement:__EnumIndex  ] := .T.
      xQuebra := oElement[ NUMPROC ]
   ELSE
      aTotaliza[ oElement:__EnumIndex ] := ( oElement[ NUMPROC ] != xQuebra )
      xQuebra := oELement[ NUMPROC ]
   ENDIF
NEXT   

nTotal := 0
nSubTotal := 0

FOR EACH oElemento IN ::hFatura_Concessionaria_Fin
    nRec := hb_HScan( ::hConcessionarias, {| nKey, cChave | cChave["CODEFEBRABAN"] = oElemento["CODCON"] } )
    nSubTotal += oElemento[ "VALOR" ]
    nTotal    += oElemento[ "VALOR" ]
    PSAY( ::nLin++,01, Transform( oElemento["NUMPROC"], "@R 99.999.999/99-!!" ) + " " + ;
                       SubStr( ::hConcessionarias[hb_NtoS( nRec ), "NOME"], 1, 30) + " " + ;
                       Transform( oElemento["DT_VENCIMENTO"], "@D" ) + " " + ;
                       Transform( oElemento["VALOR"], "@E 999,999,999,999.99" ) + ;
                       iif( aTotaliza[ oElemento:__EnumIndex ], Transform( nSubTotal, "@E 999,999,999,999.99" ), "" ) )
    IF aTotaliza[ oElemento:__EnumIndex ]
       nSubTotal := 0
    ENDIF
    IF ::nLin + 1 > 55
       Eject()
       ::CabecRelDataPgto()
    ENDIF
NEXT
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Help com For Each em uma Hash Table

Mensagem por asimoes »

Quintas,

Funcionou, valeu!
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20420
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Help com For Each em uma Hash Table

Mensagem por JoséQuintas »

Talvez melhor garantir esta parte:

Código: Selecionar todos

( oElement[ NUMPROC ] != xQuebra )
trocar para

Código: Selecionar todos

( ! oElement[ NUMPROC ] == xQuebra )
aquela diferença entre a = b, a == b, sendo os opostos a != b ou ! ( a = b ), ! ( a == b )
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder