Página 1 de 1

comand tree

Enviado: 16 Dez 2016 12:34
por Amparo
ola pessoal

alguém pode me ajudar como entender o TREE

DEFINE TREE ....

o que preciso:
tenho o cadastro de produto, e alguns produtos tem componentes que são acoplados neste produtos, então gostaria de criar um TREE mostrando o produto x mais seus componentes y e destes quais o cliente comprou, um exemplo

produto 30217685 possui os seguintes componentes 30179006, 303207848, 30173870 então quero mostrar o que o cliente tal comprou

estou varrendo a tabela de produto procurando pelo produto que tenha seus componentes, guardo em um vetor, depois procuro por cada componente, e depois procuro se tal cliente comprou.

a estrutura deveria ficar +- assim

+---30217685 TOALHEIRO PRISOL
|
+---30179006 TOALHA 20 MTS SIMPLES
| |---PEDIDO.: 4569 QUANTIDADE.: 20 FATURADO.: 18/09/2016
| |---PEDIDO.: 4865 QUANTIDADE.: 11 FATURADO.: 16/10/2016
+---303207848 - TOALHA 20 MTS DUPLA FACE
|---PEDIDO.: 2856 QUANTIDADE.: 8 FATURADO.: 05/06/2016

e por ai vai, só que não consigo montar esta estrutura, alguém tem ideia ou algum material para leitura, abaixo mostro como estava montando só que não da certo.

Código: Selecionar todos

   COMODATO->( ORDERBY( "CODIGO" ) )
   COMODATO->( ORDSCOPE( TOPSCOPE   , CLIENTES->CODIGO ) )
   COMODATO->( ORDSCOPE( BOTTOMSCOPE, CLIENTES->CODIGO ) )
   COMODATO->( DBGOTOP() )

   IF COMODATO->( KEYCOUNT() ) > 0
      FRM_PEDIDOS.TREE_COMODATO.DeleteAllItems

*      FRM_PEDIDOS.TREE_COMODATO.AddItem( "EQUIPAMENTOS EM COMODATO" , 0 )

      DO WHILE !COMODATO->( EOF() )
         IF EMPTY( COMODATO->DTFIM )
            PRODUTOS->( ORDSETFOCUS( "CODIGO" ) ) 
            PRODUTOS->( DBGOTOP() )
            PRODUTOS->( DBSEEK( COMODATO->PRODUTO ) )

            AADD( ITENS_COMO, { ;
            COMODATO->PRODUTO ,;
            SUBSTR( PRODUTOS->DESCRICAO,1,50 ) ,;
            TRANSFORM( COMODATO->QUANTIDADE, "9999" ) ,;
            DTOC( COMODATO->DTINICIO ) ,;
            DTOC( COMODATO->DTFIM ) } )
         ENDIF

         COMODATO->( DBSKIP() )
      ENDDO

      SETPROPERTY( "FRM_PEDIDOS","FRCOMO","VISIBLE",.T. )
      SETPROPERTY( "FRM_PEDIDOS","TREE_COMODATO","VISIBLE",.T. )

      PRODUTOS->( ORDSETFOCUS( SvOrdPROD ) )
      PRODUTOS->( DBGOTO( SvRecPROD ) )

      FOR I = 1 TO LEN( ITENS_COMO )
        AADD( SEQUE_COMO, { "NODE", ALLTRIM( ITENS_COMO[I,1] ) + "-" + ALLTRIM( ITENS_COMO[I,2] ) } )

        PRODUTOS->( ORDSETFOCUS( "CODIGO" ) ) 
        PRODUTOS->( DBGOTOP() )
        PRODUTOS->( DBSEEK( ALLTRIM( ITENS_COMO[I,1] ) + SPACE( 20 - LEN( ALLTRIM( ITENS_COMO[I,1] ) ) ) ) )

        REFE_ITEN := MONTAVETOR( PRODUTOS->NOTAS )

        FOR X = 1 TO LEN( REFE_ITEN )
	  PRODUTOS->( ORDSETFOCUS( "CODIGO" ) ) 
          PRODUTOS->( DBGOTOP() )
          PRODUTOS->( DBSEEK( REFE_ITEN[X] + SPACE( 20-LEN( REFE_ITEN[X] ) ) ) )

          AADD( SEQUE_COMO, { "NODE1", ALLTRIM( REFE_ITEN[X] ) + "-" + SUBSTR( PRODUTOS->DESCRICAO,1,40 ) } )

          ESTOQUE->( ORDSETFOCUS( "CLIPRODUTO" ) )
          ESTOQUE->( DBGOTOP() )

          IF ESTOQUE->( DBSEEK( CLIENTES->CODIGO + REFE_ITEN[X] + SPACE( 20-LEN( REFE_ITEN[X] ) ) ) )
             PRODUTOS->( DBGOTOP() )
             PRODUTOS->( DBSEEK( ESTOQUE->PRODUTO ) )

             DO WHILE !ESTOQUE->( EOF() ) .AND. ;
                ( CLIENTES->CODIGO + REFE_ITEN[X] + SPACE( 20-LEN( REFE_ITEN[X] ) ) ) = ;
                ( ESTOQUE->EMPRESA + ESTOQUE->PRODUTO)

                IF DTOS( ESTOQUE->DATA ) >= DTOS( DATE()-90 )
                   OITEM := "PEDIDO.: " +  ALLTRIM( ESTOQUE->PEDIDO ) + " - " +;
                   "PRODUTO.: " + ALLTRIM( ESTOQUE->PRODUTO ) + " - " +;
                   "DESCRIÇÃO.: " + SUBSTR( PRODUTOS->DESCRICAO,1,50 ) + " - " +;
                   "QTDE.: " + STRZERO( ESTOQUE->QUANTIDADE,5 ) + " - " +;
                   "DT COMPRA.: " + DTOC( ESTOQUE->D_FATURA )

                   AADD( SEQUE_COMO, { "TREE", OITEM } )
		ENDIF

                ESTOQUE->( DBSKIP() )
             ENDDO
          ENDIF
	NEXT X

        ESTOQUE->( OrdSetFocus( SvOrdESTO ) )
        ESTOQUE->( ORDSCOPE( TOPSCOPE, NIL ) )
        ESTOQUE->( ORDSCOPE( BOTTOMSCOPE, NIL ) )
        ESTOQUE->( DBGOTO( SvRecESTO ) )
      NEXT I 

      PRODUTOS->( ORDSETFOCUS( SvOrdPROD ) )
      PRODUTOS->( DBGOTO( SvRecPROD ) )
   ENDIF

   BEGIN SEQUENCE
    FOR X = 1 TO LEN( SEQUE_COMO )
      DO EVENTS

      IF SEQUE_COMO[X,1] == "NODE"
         FRM_PEDIDOS.TREE_COMODATO.AddItem( SEQUE_COMO[X,2] , 0 )
*         DEFINE NODE SEQUE_COMO[X,2] ID nItemID++
*         END NODE
      ELSEIF SEQUE_COMO[X,1] == "NODE1"
         FRM_PEDIDOS.TREE_COMODATO.AddItem( SEQUE_COMO[X,2] , 1 )
      ELSE
         FRM_PEDIDOS.TREE_COMODATO.AddItem( SEQUE_COMO[X,2] , 2 )
*         TREEITEM SEQUE_COMO[X,2] ID nItemID++
      ENDIF
    NEXT X
   END SEQUENCE

comand tree

Enviado: 17 Dez 2016 23:58
por Claudio Soto
Si utilizas HMG oficial aquí tienes un ejemplo de cómo crear un Tree dinámico y como sincronizarlo con el contenido de un Grid.

http://www.hmgforum.com/viewtopic.php?f=10&t=3903

comand tree

Enviado: 19 Dez 2016 12:08
por Amparo
ola amigos

obrigado por responder Claudio Soto

uso Harbour MiniGUI Extended Edition 16.10 do Gregory

este exemplo existe na pasta da minigui, mas não entendi a lógica usada para montar o TREE

que LÓGICA tem na montagem abaixo?

Form_1.Tree_1.DeleteAllItems

Form_1.Tree_1.AddItem( 'New Root Item 1' , 0 )

Form_1.Tree_1.AddItem( 'New Item 1.1' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.2' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.3' , 1 )

Form_1.Tree_1.AddItem( 'New Root Item 2' , 0 )

Form_1.Tree_1.AddItem( 'New Item 2.1' , 5 )
Form_1.Tree_1.AddItem( 'New Item 2.2' , 5 )
Form_1.Tree_1.AddItem( 'New Item 2.3' , 5 )
Form_1.Tree_1.AddItem( '6666666666' , 6 )
Form_1.Tree_1.AddItem( '7777777777' , 7 )
Form_1.Tree_1.AddItem( '8888888888' , 8 )
Form_1.Tree_1.AddItem( '9999999999' , 9 )
Form_1.Tree_1.AddItem( '1010101010' , 10 )

Form_1.Tree_1.AddItem( 'New Item 1.4' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.4.1' , 5 )

Form_1.Tree_1.AddItem( '6666666666' , 6 )
Form_1.Tree_1.AddItem( '7777777777' , 7 )
Form_1.Tree_1.AddItem( '8888888888' , 8 )
Form_1.Tree_1.AddItem( '9999999999' , 9 )
Form_1.Tree_1.AddItem( '1010101010' , 10 )