Clipper On Line • Ver Tópico - Ajuda com a criação de uma Grid
Página 1 de 1

Ajuda com a criação de uma Grid

MensagemEnviado: 22 Dez 2019 19:51
por Fernando Almeida
Não consigo detetar onde se encontra o erro de data type mismatch que se me apresenta nesta grid.
Uso a Minigui Unicode 3.4.4.

Adianto que estou a usar o formulário,Fmg e como tal ele é criado com essas linhas todas
Se alguém me puder ajudar, eu fico muito agradecido.

DEFINE GRID Grid_Pedidos
        ROW    156
        COL    600
        WIDTH  576
        HEIGHT 335
        ITEMS grid_data_Items()
        VALUE 1
        WIDTHS grid_data_widths()
        HEADERS grid_data_headers()
        FONTNAME "Arial"
        FONTSIZE 11
        TOOLTIP ""
        ONCHANGE Nil
        ONGOTFOCUS Nil
        ONLOSTFOCUS Nil
        FONTBOLD .F.
        FONTITALIC .F.
        FONTUNDERLINE .F.
        FONTSTRIKEOUT .F.
        ONDBLCLICK Nil
        ONHEADCLICK Nil
        ONQUERYDATA QueryTest()
        MULTISELECT .T.
        ALLOWEDIT .F.
        VIRTUAL .F.
        DYNAMICBACKCOLOR grid_data_DynamicBackColor()
        DYNAMICFORECOLOR Nil
        COLUMNWHEN grid_data_columnwhen()
        COLUMNVALID Nil
        COLUMNCONTROLS grid_data_columncontrols()
        SHOWHEADERS .T.
        CELLNAVIGATION .T.
        NOLINES .F.
        HELPID Nil
        IMAGE { 'Imagens\br_ok.bmp', 'Imagens\br_no.bmp' }
        JUSTIFY grid_data_justify()
        ITEMCOUNT 5
        BACKCOLOR NIL
        FONTCOLOR NIL
        HEADERIMAGES Nil
        ROWSOURCE Nil
        COLUMNFIELDS Nil
        ALLOWAPPEND .F.
        ALLOWDELETE .F.
        BUFFERED .F.
        DYNAMICDISPLAY Nil
        ONSAVE Nil
        LOCKCOLUMNS 0
    END GRID


Segue em seguida as rotinas que o preenchem:
FUNCTION grid_data_columnwhen()
LOCAL aColumnWhen

    // { || .T. } PERMITE A EDICAO
    // { || .F. } NAO PERMITE A EDICAO

   aColumnWhem := { { || .F. },;
                    { || .T. },;
                    { || .T. },;
                    { || .T. },;
                    { || .T. },;
          { || .F. },;
                    { || .T. } }

RETURN aColumnWhen

FUNCTION grid_data_columncontrols()
LOCAL aColumnControls

   aColumnControls := { { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","CHARACTER" },;
                        { "TEXTBOX","NUMERIC","99,999.99" },;
                        { "TEXTBOX","NUMERIC","$ 99,999.99" },;
         { "TEXTBOX","NUMERIC","99" },;
         { "TEXTBOX","NUMERIC","$ 99,999.99" },;
                        { 'CHECKBOX' , 'Sim' , 'Não' } }

RETURN aColumnControls

FUNCTION grid_data_Items()
LOCAL aColumnItems

   aColumnItems := { '',;
                     "DOSE DE BACALHAU A MODA DA CASA LOMBO",;
                     2.00,;
                     9.00,;
                     0,;
                     18.00,;
                .t. }

RETURN aColumnItems

FUNCTION grid_data_headers()
LOCAL aheaders

   aheaders := { "V",;
                 "Descrição ",;
       "Quantidade",;
                 "Preco Unit.",;
                 "Desc",;
                 "Valor Total",;
                 "Pagar" }

RETURN aheaders

FUNCTION grid_data_widths()
LOCAL awidths := {}

   aWidths := { 0,220,90,90,20,100,40 }

RETURN awidths

FUNCTION grid_data_justify()
LOCAL ajustify := {}

   ajustify := { GRID_JTFY_LEFT,;
                 GRID_JTFY_LEFT,;
                 GRID_JTFY_RIGHT,;
                 GRID_JTFY_RIGHT,;
                 GRID_JTFY_RIGHT,;
       GRID_JTFY_RIGHT,;
                 GRID_JTFY_CENTER }

RETURN ajustify

FUNCTION grid_data_DynamicBackColor()
LOCAL aDynamicBackColor := {}

   aDynamicBackColor := { bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
                          bBackColor,;
           bBackColor,;
                          bBackColor }

RETURN aDynamicBackColor

Procedure QueryTest()

If This.QueryColIndex == 1
   If Int ( This.QueryRowIndex / 2 ) == This.QueryRowIndex / 2
     This.QueryData := 0
   Else
      This.QueryData := 1
   EndIf
Else
   This.QueryData := Str ( This.QueryRowIndex ) + ',' + Str ( This.QueryColIndex )
EndIf
Return

Ajuda com a criação de uma Grid

MensagemEnviado: 22 Dez 2019 23:34
por MSDN
Para ajudar, por favor poste o erro inteiro ( print de tela ).

Ajuda com a criação de uma Grid

MensagemEnviado: 23 Dez 2019 13:16
por Fernando Almeida
Bom dia, segue abaixo o erro e a rotina de abertura de pedido de vendas.
#include "hmg.ch"

declare window Main

Function main_button_pedidos_de_venda_action
Local varQtExiste :=2
Local varQtMinima :=5

   IF IsWindowActive("Pedido_de_Vendas")
      DoMethod("Pedido_de_Vendas","MINIMIZE")
     DoMethod("Pedido_de_Vendas","RESTORE")
     DoMethod("Pedido_de_Vendas","SETFOCUS")
   ELSE   
     Load Window Pedido_de_Vendas
      Center Window Pedido_de_Vendas
      Activate Window Pedido_de_Vendas
   ENDIF
Return Nil


[img]image1.png[/img]

Ajuda com a criação de uma Grid

MensagemEnviado: 24 Dez 2019 09:36
por susviela@bol.com.br
061   LOCAL awidths := {}
062   
063      aWidths := { 0,220,90,90,20,100,40 }
064   
065   RETURN awidths


Ai no array tem 7 itens... confere isso.

Ajuda com a criação de uma Grid

MensagemEnviado: 24 Dez 2019 10:27
por JoséQuintas
Eu não aguentaria muito tempo usar uma coisa dessas.......
Talvez assim:

FUNCTION GridGeral( nElemento )

   LOCAL aRetorno := {}, aTheGrid := { ;
      { 0,   "V",         "",                 .F., bBackColor, GRID_JTFY_LEFT,  { "TEXTBOX", "CHARACTER" } }, ;
      { 220, "DESCRIÇÃO", "DOSE DE BACALHAU", .T., bBackColor, GRID_JTFY_LEFT,  { "TEXTBOX", "CHARACTER" } }, ;
      { 90,  "QUANT",     2.00,               .T., bBackColor, GRID_JTFY_LEFT,  { "TEXTBOX", "NUMERIC", "99,999.99" } }, ;
      { 90,  "UNITARIO",  9.00,               .T., bBackColor, GRID_JTFY_RIGHT, { "TEXTBOX", "NUMERIC", "$ 99,999.99" } }, ;
      { 20,  "DESC",      0,                  .T., bBackColor, GRID_JTFY_RIGHT, { "TEXTBOX", "NUMERIC", "99" } }, ;
      {100,  "TOTAL",     18.00,              .F., bBackColor, GRID_JTFY_RIGHT, { "TEXTBOX", "NUMERIC", "$ 99,999.99" } }, ;
      { 40,  "PAGAR",     .T.,                .T., bBackColor, GRID_JTFY_CENTER,{ "CHECKBOX", "SIM", "NÃO" } } }

   AEval( aTheGrid, { | e | AAdd( aRetorno, e[ nElemento ] } )
   
   RETURN aRetorno


E usar direto ou funções intermediárias:
FUNCTION grid_data_columnwhen();       RETURN GridGeral( 4 )
FUNCTION grid_data_columncontrols();   RETURN GridGeral( 7 )
FUNCTION grid_data_Items();            RETURN GridGeral( 3 )
FUNCTION grid_data_headers();          RETURN GridGeral( 2 )
FUNCTION grid_data_widths();           RETURN GridGeral( 1 )
FUNCTION grid_data_justify();          RETURN GridGeral( 6 )
FUNCTION grid_data_DynamicBackColor(); RETURN GridGeral( 5 )


Isso evitaria tamanhos errados em cada array.

Nota:
Qualquer semelhança com TBrowse console.... não é mera coincidência... rs

Ajuda com a criação de uma Grid

MensagemEnviado: 24 Dez 2019 11:22
por MSDN
O TBrowse fez escola, de tão bom que é, na MiniGUI também tem um componente TBRowse, os exemplos de uso ficam na pasta : C:\MiniGUI\SAMPLES\Advanced e começam os nomes das pastas por Tsb_ . Se no modo console já dá pra fazer muita coisa, imagina com esse !

Ajuda com a criação de uma Grid

MensagemEnviado: 24 Dez 2019 11:36
por JoséQuintas
Faltou o principal:

Pela mensagem de erro, o tamanho de algum array não está do tamanho que deveria ser.
Dá uma revisada na criação, e também em alguma atualização que possa fazer nos arrays.

Item Size Mismatch = tamanho do item não "bate"

Não sei se pode ser o tamanho do array de produtos... não tem produtos e está tentando acessar o primeiro...

Ajuda com a criação de uma Grid

MensagemEnviado: 26 Dez 2019 22:27
por Fernando Almeida
Boa noite prezados colegas, vi as vossas respostas ao meu pedido e agradeço imenso o tempo que disponibilizaram.

Em relação ao tamanho das matrizes, elas estão todas com o mesmo tamanho, 7 itens.

Quanto a arrumação, eu pretendo fazer isso no fim, agora estou a usar o form para desenhar a tela de apresentação de vendas em modo gráfico e por isso ainda não retirei as linhas que são dispensáveis.
Aproveito e pergunto se alguém me pode fornecer a rotina de ordenação de cabeçalhos pois eu li aqui a algum tempo atras um colega referindo-se a uma rotina criada por um programador ucraniano muito bom, mas não me lembro do nome.
Era só para fazer uma comparação com o que criei para ordenar as colunas da grid e ver o que podia melhorar no que fiz, apesar de estar a funcionar bem.
Eu vou postar aqui a rotina e vocês que já dominam bem a linguagem me dizem o que acham.
FUNCTION OrdenaGrid( oPassagem, n_Col, oValPesq )
Local aTwoMat :={}, i, lFound :=.f. 
Local oTotLn  :=Main.Grid_Documentos.ItemCOUNT
Local oOrdem  :=OrdName()

If oPassagem==2    //Caso seja para apresentar em modo
   FOR i :=Main.Grid_Documentos.ItemCOUNT TO 1 STEP -1
      AADD( aTwoMat, Main.Grid_Documentos.Item(i) )
   NEXT i
Else
    FOR i :=1 TO Main.Grid_Documentos.ItemCOUNT
      AADD( aTwoMat, Main.Grid_Documentos.Item(i) )
   NEXT i
Endif

DoMethod("Main", "Grid_Documentos", "deleteAllItems")

FOR i :=1 TO oTotLn
   ADD Item { aTwoMat[i][1], aTwoMat[i][2] } TO Grid_Documentos OF Main
NEXT i   
Main.Grid_Documentos.Refresh

// FA?O A PROCURA DO VALOR DA CELULA ONDE SE ENCONTRAVA COM A NOVA MATRIZ ORDENANDA //
FOR i:=1 TO Main.Grid_Documentos.ItemCount
    IF Main.Grid_Documentos.Item(i)[n_Col] == &oValPesq
      Main.Grid_Documentos.Value :={ i, n_Col }
      lFound :=.t.
      Exit
   ENDIF
NEXT i

IF lFound==.f.
   Main.Grid_Documentos.Value :={ 1,1 }
ENDIF

Main.Grid_Documentos.SetFocus 
Return oPassagem

Esta foi a forma que eu encontrei para fazer a ordenação das colunas de uma grid.
Eu estive ausente durante estes últimos 6 anos da programação, mas sinto a falta e decidi voltar a desenvolver software.
É evidente que estou a iniciar e como tal ainda não tenho muita experiencia com esta linguagem em modo gráfica, peço a vossa compreensão e ajuda. Tenho interesse porque tenho algumas aplicações de gestão comercial feitas em clipper 5.2e e tenho interesse em converte-las para modo gráfico.

Ajuda com a criação de uma Grid

MensagemEnviado: 27 Dez 2019 15:49
por Fernando Almeida
Me desculpem mas fiz a troca por esta rotina de ordenação de colunas na Grid.
Com menos linhas e riscos, julgo eu.

FUNCTION OrdenaGrid( oPassagem, n_Col, oValPesq )
Local i, lFound :=.f. 
Local oTotLn :=Main.Grid_Documentos.ItemCOUNT
Local oOrdem :=OrdName()

If oPassagem==2
   
   Asort(matDocsTwo,,, { | a, b | a[ n_Col ] > b[ n_Col ] } )
   
Else
   
   Asort(matDocsTwo,,, { | a, b | a[ n_Col ] < b[ n_Col ] } )

Endif

DoMethod("Main", "Grid_Documentos", "deleteAllItems")

FOR i :=1 TO oTotLn
   ADD Item { matDocsTwo[i][1], matDocsTwo[i][2] } TO Grid_Documentos OF Main
NEXT i   
Main.Grid_Documentos.Refresh

// FAÇO A PROCURA DO VALOR DA CELULA ONDE SE ENCONTRAVA COM A NOVA MATRIZ ORDENANDA //
FOR i:=1 TO Main.Grid_Documentos.ItemCount
    IF Main.Grid_Documentos.Item(i)[n_Col] == &oValPesq
      Main.Grid_Documentos.Value :={ i, n_Col }
      lFound :=.t.
      Exit
   ENDIF
NEXT i

IF lFound==.f.
   Main.Grid_Documentos.Value :={ 1,1 }
ENDIF
Main.Grid_Documentos.SetFocus 
Return( oPassagem ) 


Se algum colega achar necessario alguma correção, eu agradeço sugestões.

Pedido de ajuda na emissão de email.

MensagemEnviado: 16 Set 2020 01:37
por Fernando Almeida
Boa noite,

Prezados, aproveito para cumprimentar todos sem exceção.

Venho desta forma pedir a V. ajuda na resolução de um problema que me apareceu na rotina de envio de email.
Há algum tempo atrás quando elaborei este aplicativo de manutenção de N/Fiscais geradas pelo AcbrMonitor, acrescentei uma rotina de compactação e envio de email para o contador da informação relativa ao mês em causa.
A rotina durante algum tempo enviava um email por dia.

Agora não consigo enviar nenhum email e dá o seguinte erro apresentado abaixo, após a imagem da rotina com os dados de envio:
Se alguem me puder ajudar, eu fico muito agradecido.
Aproveito e como já não uso este espaço a muito tempo, gostaria que me dissessem como posso apresentar as imagens diretamente na mensagem. Sei que devo usar o botão Img aqui nas opções desta rotina mas depois como posso selecionar a imagem pretendida, eu já não me lembro como é.
Se estou a fazer o processo com muitos erros, peço que compreendam e fico receptivo a algumas instruções que me possam dar.