Clipper On Line • Ver Tópico - Help com For Each em uma Hash Table

Help com For Each em uma Hash Table

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

Moderador: Moderadores

 

Help com For Each em uma Hash Table

Mensagempor asimoes » 12 Dez 2017 15:17

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

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

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Help com For Each em uma Hash Table

Mensagempor JoséQuintas » 12 Dez 2017 17:28

Uma idéia....

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, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Help com For Each em uma Hash Table

Mensagempor asimoes » 12 Dez 2017 18:41

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Help com For Each em uma Hash Table

Mensagempor JoséQuintas » 12 Dez 2017 18:47

Talvez melhor garantir esta parte:

( oElement[ NUMPROC ] != xQuebra )


trocar para

( ! 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, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 13 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro