Meu modo de trabalho
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
- Geração de um html pra colocar num site. Com isso, ao acessar o site o usuário vai escolhendo a configuração do computador, e a página já vai mostrando todos os cálculos. É gerado a partir do cadastro de produtos
- Teste de filtro, nem postei por aqui ainda, ficou legal
- Gerar harbourdoc.com.br, é gerar um PDF de toda documentação que está cadastrada no harbourdoc.com.br - isso mesmo é uma opção do aplicativo que tenho instalado em todos os clientes, mas só eu tenho acesso.
- Acesso remoto - uso em máquinas aonde o adminstrador escondeu o acesso ao menu do Windows
- Modo Deus - pra acesso total às configurações do Windows - mesmo motivo
- Teclado virtual - pra mostrar o teclado virtual do Windows. Pode ser interessante num telefone celular sem teclado compatível com Windows, assim uso o do próprio Windows.
- Teste de filtro, nem postei por aqui ainda, ficou legal
- Gerar harbourdoc.com.br, é gerar um PDF de toda documentação que está cadastrada no harbourdoc.com.br - isso mesmo é uma opção do aplicativo que tenho instalado em todos os clientes, mas só eu tenho acesso.
- Acesso remoto - uso em máquinas aonde o adminstrador escondeu o acesso ao menu do Windows
- Modo Deus - pra acesso total às configurações do Windows - mesmo motivo
- Teclado virtual - pra mostrar o teclado virtual do Windows. Pode ser interessante num telefone celular sem teclado compatível com Windows, assim uso o do próprio Windows.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Só pelas opções de teste, já dá pra imaginar as opções "não teste".
No meu aplicativo TUDO tem cadastro, não deixo nada pra acessar via meu "dbase" embutido.
Mesmo que use uma vez por ano, ou até menos que isso.... tá lá o cadastro.
E mesmo que só eu use, só na minha senha, tem opção.
Cadastro de UFs, por exemplo, tem lá com pushbutton, toda atualizada de acordo com meu padrão de trabalho. Quando será que vamos precisar cadastrar UF?
Tá fácil programar um cadastro, já fica tudo disponível e pronto.
Posso ou não liberar para o usuário, tanto faz.
Acho que tem até listagem disso.
No meu aplicativo TUDO tem cadastro, não deixo nada pra acessar via meu "dbase" embutido.
Mesmo que use uma vez por ano, ou até menos que isso.... tá lá o cadastro.
E mesmo que só eu use, só na minha senha, tem opção.
Cadastro de UFs, por exemplo, tem lá com pushbutton, toda atualizada de acordo com meu padrão de trabalho. Quando será que vamos precisar cadastrar UF?
Tá fácil programar um cadastro, já fica tudo disponível e pronto.
Posso ou não liberar para o usuário, tanto faz.
Acho que tem até listagem disso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Isso me lembrou da geração de manual.
Só o menu de opções, que seria o índice, vai até a página 8
Não tem visual gráfico?
Tudo bem, é totalmente automático.
Aperto F1 no aplicativo, em qualquer máquina, minha ou do cliente, digito o texto e pronto, vai pro manual disponível pra todo mundo, on-line ou pra impressão.
Isso é bem melhor que um manual bonito e desatualizado.
Isso também ficou disponível pro aplicativo da imobiliária, afinal, ele herdou todas as bibliotecas do JPA.
E de acordo com a senha do usuário.
Na minha senha, completo
Na senha do administrador do cliente, todas as opções do cliente
Na senha de qualquer usuário, só do que ele pode mexer.
Não liberei pra ninguém.
Se algum dia alguém perguntar por manual impresso... eu imprimo, ou posso até liberar a opção.
Já pensei em liberar alteração pra cliente, pra eles mesmos irem fazendo anotações, mas não fiz.
Também está preparado pra isso. O sistema guarda todas as "versões" de cada texto. Se o usuário apagar tudo, eu apenas deleto o registro que ele incluiu em branco, e tá tudo restaurado.
Só o menu de opções, que seria o índice, vai até a página 8
Não tem visual gráfico?
Tudo bem, é totalmente automático.
Aperto F1 no aplicativo, em qualquer máquina, minha ou do cliente, digito o texto e pronto, vai pro manual disponível pra todo mundo, on-line ou pra impressão.
Isso é bem melhor que um manual bonito e desatualizado.
Isso também ficou disponível pro aplicativo da imobiliária, afinal, ele herdou todas as bibliotecas do JPA.
E de acordo com a senha do usuário.
Na minha senha, completo
Na senha do administrador do cliente, todas as opções do cliente
Na senha de qualquer usuário, só do que ele pode mexer.
Não liberei pra ninguém.
Se algum dia alguém perguntar por manual impresso... eu imprimo, ou posso até liberar a opção.
Já pensei em liberar alteração pra cliente, pra eles mesmos irem fazendo anotações, mas não fiz.
Também está preparado pra isso. O sistema guarda todas as "versões" de cada texto. Se o usuário apagar tudo, eu apenas deleto o registro que ele incluiu em branco, e tá tudo restaurado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Se eu lembrar de mais alguma coisa coloco por aqui.
O mais legal do aplicativo não é o que se vê, é o que não se vê.
Ah é...
No caso de um cliente novo, basta eu colocar os XMLs de NFE numa pasta, e pedir pra importar.
O aplicativo já cadastra clientes, produtos, notas fiscais, movimentação de estoque, pedidos, financeiro, etc.
Só fica faltando dar baixa no financeiro.
Se for empresa bagunçada, XMLs espalhados pelas máquinas, tudo bem.
O sistema também permite vasculhar todas as pastas, e já organiza todos os XMLs válidos em uma pasta, separando mês a mês em subpastas.
É por aí...
Ter deixado a parte gráfica de lado, e ter me dedicado ao restante foi bom.
Depois até sobrou tempo pra mexer com a parte gráfica... rs
O mais legal do aplicativo não é o que se vê, é o que não se vê.
Ah é...
No caso de um cliente novo, basta eu colocar os XMLs de NFE numa pasta, e pedir pra importar.
O aplicativo já cadastra clientes, produtos, notas fiscais, movimentação de estoque, pedidos, financeiro, etc.
Só fica faltando dar baixa no financeiro.
Se for empresa bagunçada, XMLs espalhados pelas máquinas, tudo bem.
O sistema também permite vasculhar todas as pastas, e já organiza todos os XMLs válidos em uma pasta, separando mês a mês em subpastas.
É por aí...
Ter deixado a parte gráfica de lado, e ter me dedicado ao restante foi bom.
Depois até sobrou tempo pra mexer com a parte gráfica... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Opções do menu:
Fácil acrescentar opções, ou transferir de um lugar pro outro, ou até duplicar se necessário.
Fica tudo num único array.
Daí saem informações para:
- montagem do menu conforme senha de acesso
- configurar senhas de acesso
- menu Windows
- Help on line
- manual em PDF
Aquela única variável PUBLIC que mostrei, m_Prog, ela sai desse menu, é o nome do módulo em uso.
Código: Selecionar todos
MenuOption( "Movto" )
MenuDrop()
MenuOption( "Pedidos/Notas Fiscais" )
MenuDrop()
MenuOption( "Orçamentos/Pedidos", "P0600PED" )
MenuOption( "Emissor JPA", "PEMISSOR" )
MenuOption( "Nota Fiscal (Serviços)", "PNOT0010" )
MenuOption( "Consulta a Notas Fiscais", "PNOT0020" )
MenuOption( "Gera Pedido de Retirada", "PNOT0030" )
MenuOption( "Rel.Romaneio de NFs", "PNOT0050" )
MenuOption( "Manifesto Eletrônico", "PJPMDF" )
Fica tudo num único array.
Daí saem informações para:
- montagem do menu conforme senha de acesso
- configurar senhas de acesso
- menu Windows
- Help on line
- manual em PDF
Aquela única variável PUBLIC que mostrei, m_Prog, ela sai desse menu, é o nome do módulo em uso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Mostrar uma alteração do menu na prática.
Acrescentei esta linha no fonte do menu.
salvo, e digito C <ENTER>
Executo, coloco usuário/senha e lá está ela
Entro na configuração de senhas/acessos e.... lá está ela
Só acrescentei a opção, o módulo não existe. Se eu abrir essa opção no menu:
Vejam, só acrescentei uma única linha no fonte.
Já tem configuração de acesso, tela pronta pra uso em multithread, com título, espaço pra mensagem, parte central limpa, está pronto pra eu trabalhar no fonte
E a Multithread? Nem mexi com isso, o menu faz isso automático.
Variáveis públicas, configurações, etc. para o módulo? Nem mexi com isso, o menu faz isso automático.
Seu eu criar um fonte com Inkey(0), basta teclar F1 e já posso atualizar as informações do help on-line para o módulo. (que também sairão no manual em PDF)
Mas por acaso dá pra fazer isso em menu Windows?
Meu menu Windows é opcional, mas sempre pronto pra uso. Quando digo pronto, é pronto mesmo.
se eu clicar no "JPA Update - Upload versão", isso já vai pra internet.
Se o cliente clicar no "JPA Update - Download versão", isso já vai estar na máquina dele.
Uma única linha, e dois clicks, e já fica instalado no cliente !!!!!
A opção ainda não serve pra nada, tudo bem, foi só pra mostrar a facilidade.
Acrescentei esta linha no fonte do menu.
salvo, e digito C <ENTER>
Executo, coloco usuário/senha e lá está ela
Entro na configuração de senhas/acessos e.... lá está ela
Só acrescentei a opção, o módulo não existe. Se eu abrir essa opção no menu:
Vejam, só acrescentei uma única linha no fonte.
Já tem configuração de acesso, tela pronta pra uso em multithread, com título, espaço pra mensagem, parte central limpa, está pronto pra eu trabalhar no fonte
E a Multithread? Nem mexi com isso, o menu faz isso automático.
Variáveis públicas, configurações, etc. para o módulo? Nem mexi com isso, o menu faz isso automático.
Seu eu criar um fonte com Inkey(0), basta teclar F1 e já posso atualizar as informações do help on-line para o módulo. (que também sairão no manual em PDF)
Mas por acaso dá pra fazer isso em menu Windows?
Meu menu Windows é opcional, mas sempre pronto pra uso. Quando digo pronto, é pronto mesmo.
se eu clicar no "JPA Update - Upload versão", isso já vai pra internet.
Se o cliente clicar no "JPA Update - Download versão", isso já vai estar na máquina dele.
Uma única linha, e dois clicks, e já fica instalado no cliente !!!!!
A opção ainda não serve pra nada, tudo bem, foi só pra mostrar a facilidade.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Meu modo de trabalho
Bom dia José...
Quando você fala em melhorias no browse do harbour para trabalhar em rede, o que você melhorou ?
Obg
Rubens
Quando você fala em melhorias no browse do harbour para trabalhar em rede, o que você melhorou ?
Obg
Rubens
"Eu e minha casa servimos ao Senhor e você
"
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Uma coisa simples: RLOCK()
Sem isso não dá pra alterar em rede, dá erro.
Eu uso muito pouco, por isso esquecia de que precisava travar o registro pra usar o browse do Harbour.
Acrescentando RLock() ficou resolvido, acho que em dois lugares do Browse.prg.
Sem isso não dá pra alterar em rede, dá erro.
Eu uso muito pouco, por isso esquecia de que precisava travar o registro pra usar o browse do Harbour.
Acrescentando RLock() ficou resolvido, acho que em dois lugares do Browse.prg.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Agora coloquei conteúdo no ptesforum.prg
Independente de jpcadas1class(), que é classe, a rotina de validação equivale a uma função.
Antes eu usava uma função ClienteOk(), depois agrupei tudo que era sobre cliente numa única classe, mas dá no mesmo.
salvei, digitei <C> ENTER.
O fonte só tem abrir arquivo, o GET, e a validação, vamos lá ver funcionando.
A tela, ok, já era esperado
Ao digitar um cliente sem cadastro
Caso digite F9, que é pra pesquisa, o browse dos clientes.
É exatamente o fonte que postei em funcionamento.
No browse dos clientes, o mesmo disponível em todo aplicativo:
pode ser em ordem de código, ordem alfabética, ordem CNPJ, pesquisar texto, ir digitando texto e filtrando,filtro de palavras, etc.
Antigamente usava botões nesse browse, mas retirei. Achei que ficou feio, e só ocupando espaço.
Nota: por isso estranho quando vejo fazerem uma rotina de tbrowse pra cada fonte.
Código: Selecionar todos
PROCEDURE PTESFORUM
LOCAL mCliente := Space(6), GetList := {}
IF .NOT. AbreArquivos( "jpcadas" )
RETURN
ENDIF
@ 5, 10 SAY "Cliente....." GET mCliente PICTURE "@K 99999" VALID JPCADAS1Class():Valida( @mCliente )
READ
CLOSE DATABASES
RETURN
Antes eu usava uma função ClienteOk(), depois agrupei tudo que era sobre cliente numa única classe, mas dá no mesmo.
salvei, digitei <C> ENTER.
O fonte só tem abrir arquivo, o GET, e a validação, vamos lá ver funcionando.
A tela, ok, já era esperado
Ao digitar um cliente sem cadastro
Caso digite F9, que é pra pesquisa, o browse dos clientes.
É exatamente o fonte que postei em funcionamento.
No browse dos clientes, o mesmo disponível em todo aplicativo:
pode ser em ordem de código, ordem alfabética, ordem CNPJ, pesquisar texto, ir digitando texto e filtrando,filtro de palavras, etc.
Antigamente usava botões nesse browse, mas retirei. Achei que ficou feio, e só ocupando espaço.
Nota: por isso estranho quando vejo fazerem uma rotina de tbrowse pra cada fonte.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Só voltando um pouco pra trás, esqueci de mencionar.
Quando deu aquele erro de faltar o módulo.... o sistema me enviou este email.
Mesmo na minha máquina mantenho isso.
Quando deu aquele erro de faltar o módulo.... o sistema me enviou este email.
Mesmo na minha máquina mantenho isso.
Código: Selecionar todos
Windows: Windows 7 6.1 SP1
Computer Name: JOSEJPA
Windows User: joseq
Logon Server: \JOSEJPA
User Domain: josejpa
Error BASE/1001 Undefined function: PTESFORUM
Called from DO(0)
Called from DOPRG(144)
Called from (b)RUNMODULE(111)
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Error on 17/01/16 10:34:11
JPA: 2016.01.14.1410
Login JPA: JOSEQ
Alias:
Harbour: Harbour 3.4.0dev (0a127e0) (2016-01-15 01:54)
Compiler: Microsoft Visual C++ 16.0.40219 (32-bit)
GT: WVG
Folder: d:\CDROM\DADOS\SISTEMAS\
Windows: Windows 7 6.1 SP1
Computer Name: JOSEJPA
Windows User: joseq
Logon Server: \JOSEJPA
User Domain: josejpa
Error BASE/1001 Undefined function: PTESFORUM
Called from DO(0)
Called from DOPRG(144)
Called from (b)RUNMODULE(111)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Agora voltemos ao tbrowse.
lembrando do início do aplicativo:
Teclou F9, chama rotina de pesquisa, se vale pro aplicativo, vale pra esta nova tela.
A rotina de pesquisa verifica o nome da variável do GET e desvia pra rotina correspondente, nesse caso de clientes.
Chamei de GridSelection(), só porque dá pra considerar sendo uma grid, e é pra seleção.
Esta tem algo mais, mas tudo bem, já foi, vai ela mesmo.
Achei interessante acrescentar esta parte:
Se esse arquivo não estiver aberto, já abre automático (esqueci dele).
Além de resolver o problema, o sistema ainda registra como erro, e me manda um email avisando que eu esqueci de colocar no fonte pra abrir esse arquivo.
A rotina não sabe qual arquivo está posicionado, então salva a área atual, muda pra área de clientes e depois volta para o que estava antes.
A rotina não sabe em qual índice está posicionado, então altera pra ordem alfabética e depois volta o que estava antes.
Se foi escolhido um cliente, a rotina faz o KEYBOARD do código + ENTER. Isso vai entrar no GET.
Os campos que aparecerão no tbrowse
De acordo com certas condições, as cores de cada cliente serão diferentes.
E a chamada à rotina de tbrowse propriamente dita.
Esse detalhe a mais é porque misturo vários cadastros em um. O de clientes, usa tipo="1", é o que esse parâmetro indica
Resumindo: a rotina nova usou tudo que já estava disponível. Bastou seguir o padrão do aplicativo.
(E o sistema me avisou que esqueci de abrir o jpclista, preciso acrescentar no AbreArquivos(), é aonde tem a descrição de status de clientes, usada pra complemento nesse browse)
lembrando do início do aplicativo:
Código: Selecionar todos
SET KEY K_F9 TO Pesquisa
Código: Selecionar todos
cVarName := Lower( ReadVar() )
...
CASE cVarName $ "mcliente" // .AND. m_Prog == "PTESFORUM"
JPCADAS1Class():GridSelection()
...
Chamei de GridSelection(), só porque dá pra considerar sendo uma grid, e é pra seleção.
Esta tem algo mais, mas tudo bem, já foi, vai ela mesmo.
Código: Selecionar todos
METHOD GridSelection() CLASS JPCADAS1Class
LOCAL nCont, nSelect := Select(), cOrdSetFocus, oTBrowse
IF Select( "jpclista" ) == 0
SELECT 0
AbreArquivos( "jpclista" )
WriteErrorLog( "Faltou abrir jpclista", 2 )
ENDIF
SELECT jpcadas
oTBrowse := { ;
{ "Nome", {|| jpcadas->cdNome } }, ;
{ "Apelido", {|| jpcadas->cdApelido } }, ;
{ "Código", {|| jpcadas->cdCodigo } }, ;
{ "UF", {|| jpcadas->cdUf } }, ;
{ "Cidade", {|| jpcadas->cdCidade } }, ;
{ "Ref.Mapa", {|| jpcadas->cdMapa } }, ;
{ "Endereço", {|| jpcadas->cdEndereco } }, ;
{ "Número", {|| jpcadas->cdNumero } }, ;
{ "Complemento", {|| jpcadas->cdCompl } }, ;
{ "Cnpj", {|| jpcadas->cdCnpj } } }
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], {|| iif( ! Encontra( jpcadas->cdStatus, "jpclista", "numlan" ) .OR. Val( jpcadas->cdStatus ) < 2, { 1, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "0", { 3, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "1", { 4, 2 }, { 7, 2 } ) ) ) } )
NEXT
cOrdSetFocus := ordSetFocus()
ordSetFocus( "jpcadas2" )
FazBrowse( oTBrowse,, "1" )
IF LastKey() != K_ESC .AND. ! Eof()
KEYBOARD jpcadas->cdCodigo + Chr( K_ENTER )
ENDIF
ordSetFocus( cOrdSetFocus )
SELECT ( nSelect )
RETURN NIL
Código: Selecionar todos
IF Select( "jpclista" ) == 0
SELECT 0
AbreArquivos( "jpclista" )
WriteErrorLog( "Faltou abrir jpclista", 2 )
ENDIF
Além de resolver o problema, o sistema ainda registra como erro, e me manda um email avisando que eu esqueci de colocar no fonte pra abrir esse arquivo.
Código: Selecionar todos
nSelect := Select()
...
SELECT ( nSelect )
Código: Selecionar todos
cOrdSetFocus := ordSetFocus()
ordSetFocus( "jpcadas2" )
...
ordSetFocus( cOrdSetFocus )
Código: Selecionar todos
IF LastKey() != K_ESC .AND. ! Eof()
KEYBOARD jpcadas->cdCodigo + Chr( K_ENTER )
ENDIF
Os campos que aparecerão no tbrowse
Código: Selecionar todos
oTBrowse := { ;
{ "Nome", {|| jpcadas->cdNome } }, ;
{ "Apelido", {|| jpcadas->cdApelido } }, ;
{ "Código", {|| jpcadas->cdCodigo } }, ;
{ "UF", {|| jpcadas->cdUf } }, ;
{ "Cidade", {|| jpcadas->cdCidade } }, ;
{ "Ref.Mapa", {|| jpcadas->cdMapa } }, ;
{ "Endereço", {|| jpcadas->cdEndereco } }, ;
{ "Número", {|| jpcadas->cdNumero } }, ;
{ "Complemento", {|| jpcadas->cdCompl } }, ;
{ "Cnpj", {|| jpcadas->cdCnpj } } }
Código: Selecionar todos
FOR nCont = 1 TO Len( oTBrowse )
AAdd( oTBrowse[ nCont ], {|| iif( ! Encontra( jpcadas->cdStatus, "jpclista", "numlan" ) .OR. Val( jpcadas->cdStatus ) < 2, { 1, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "0", { 3, 2 }, ;
iif( Trim( jpclista->csBloqueio ) == "1", { 4, 2 }, { 7, 2 } ) ) ) } )
NEXT
Código: Selecionar todos
FazBrowse( oTBrowse,, "1" )
Resumindo: a rotina nova usou tudo que já estava disponível. Bastou seguir o padrão do aplicativo.
(E o sistema me avisou que esqueci de abrir o jpclista, preciso acrescentar no AbreArquivos(), é aonde tem a descrição de status de clientes, usada pra complemento nesse browse)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Aproveitando:
São rotinas relativamente simples, mas o principal ORGANIZADAS, cada uma trata de seu "assunto".
pesquisa tá em pesquisa, validação tá em validação, browse de clientes nas rotinas de clientes, e o browse padrão na rotina dele.
O browse de clientes pode alterar área em uso e alterar índice, mas devolve tudo do jeito que estava antes.
Cada rotina tratando de seu "assunto", as outras não precisam se preocupar.
SET KEY
ReadVar()
SELECT
SET ORDER ( ou dbOrdSetFocus() )
KEYBOARD
Não tem nada avançado aí, tudo existe no Clipper.
Só fiz uso de coisas que sempre existiram.
Facita muito os campos de arquivo estarem padronizados, usar como ALIAS o próprio nome do arquivo, usar a ordem pelo NOME.
Atenção a isso quem usa
SELECT A, SELECT B, SELECT 1, SELECT 2, SET ORDER TO 0, SET ORDER TO 1
Ah é... em multithread sem problema, cada thread tem seu JPCADAS, por exemplo.
Se encaixou no meu padrão de programação direitinho.
Pelo que comentaram GTWVW precisa alias diferentes. Tudo bem também, se estiver padronizado, de repente só usar Substr( Alias(), 5 ) ou algo assim.
Também poderia radicalizar: a pesquisa também em thread separada, e abrir arquivo só pra ela.... não sei se facilitaria ou se compensa.
São rotinas relativamente simples, mas o principal ORGANIZADAS, cada uma trata de seu "assunto".
pesquisa tá em pesquisa, validação tá em validação, browse de clientes nas rotinas de clientes, e o browse padrão na rotina dele.
O browse de clientes pode alterar área em uso e alterar índice, mas devolve tudo do jeito que estava antes.
Cada rotina tratando de seu "assunto", as outras não precisam se preocupar.
SET KEY
ReadVar()
SELECT
SET ORDER ( ou dbOrdSetFocus() )
KEYBOARD
Não tem nada avançado aí, tudo existe no Clipper.
Só fiz uso de coisas que sempre existiram.
Facita muito os campos de arquivo estarem padronizados, usar como ALIAS o próprio nome do arquivo, usar a ordem pelo NOME.
Atenção a isso quem usa
SELECT A, SELECT B, SELECT 1, SELECT 2, SET ORDER TO 0, SET ORDER TO 1
Ah é... em multithread sem problema, cada thread tem seu JPCADAS, por exemplo.
Se encaixou no meu padrão de programação direitinho.
Pelo que comentaram GTWVW precisa alias diferentes. Tudo bem também, se estiver padronizado, de repente só usar Substr( Alias(), 5 ) ou algo assim.
Também poderia radicalizar: a pesquisa também em thread separada, e abrir arquivo só pra ela.... não sei se facilitaria ou se compensa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Um resumo geral até aqui:
- Não preciso me preocupar com menu
- Não preciso me preocupar com tela
- Não preciso me preocupar com multithread
- Não preciso me preocupar com tbrowse que já existe
- Não preciso me preocupar com validação que já existe
- validação nova é fácil
- tbrowse novo é fácil
- o sistema se corrige automático e me avisa pra corrigir o fonte, quanto a dbf
- em caso de erro, recebo por email e também no celular, e já resolvo.
Como eu digo sempre, é deixar fonte fácil, que tudo vai mais fácil.
- Não preciso me preocupar com menu
- Não preciso me preocupar com tela
- Não preciso me preocupar com multithread
- Não preciso me preocupar com tbrowse que já existe
- Não preciso me preocupar com validação que já existe
- validação nova é fácil
- tbrowse novo é fácil
- o sistema se corrige automático e me avisa pra corrigir o fonte, quanto a dbf
- em caso de erro, recebo por email e também no celular, e já resolvo.
Como eu digo sempre, é deixar fonte fácil, que tudo vai mais fácil.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Ë repetido mas tudo bem.
Coloquei em práticas que facilitam, mas de qualquer forma faz parte do meu modo de trabalho.
Recebi este erro por email, estava tentando descobrir há algum tempo.
Pra facilitar, coloquei depois pra também gravar no erro qual o comando SQL que causou o erro.
Agora descobri qual é: não previ endereço em branco nesta opção.
Tranquilo, a checagem -w3 -es2 me avisou.
Um pedaço do fonte ficou diferente do outro.
Já aproveito pra deixar os dois iguais.
Então adicionais pra minha forma de trabalho:
- Meus erros por email me ajudam
- Rotinas que coloco no EXE me ajudam
- A compilação -w3 -es2 me ajuda
- O git me ajuda
Os dois primeiros comecei a usar nos tempos do Clipper.
Os dois últimos podem ser usados com o Clipper, mas só conheci no Harbour.
São vários ajudantes, disponíveis pra todo mundo, e a maioria não usa.
Comentário adicional:
O erro foi só num dos blocos.
É que aproveitei pra melhorar o outro bloco.
Sou eu que vou mexer no fonte, então estou melhorando pra mim.
Multiplique isso por 365 dias por ano, vários anos... dá pra melhorar muuuuito, só fazendo um pouquinho por vez.
Está aí: Acrescente aos meus ajudantes EU MESMO.
O melhor ajudante de um programador é ele mesmo, porque é ele próprio que pode se ajudar.
Coloquei em práticas que facilitam, mas de qualquer forma faz parte do meu modo de trabalho.
Recebi este erro por email, estava tentando descobrir há algum tempo.
Pra facilitar, coloquei depois pra também gravar no erro qual o comando SQL que causou o erro.
Agora descobri qual é: não previ endereço em branco nesta opção.
Na hora de mexer, cometi um erro, apaguei uma linha a mais.rro executando comando:-2147217900 [MySQL][ODBC 3.51 Driver][mysqld-5.6.25-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' ORDER BY ENDERECO' at line 1
--------------------------------------------------------------------------------
SELECT ENDERECO, CLASSI, NUMERO FROM ALUGUEL WHERE MID( CLASSI, 1, 2 ) IN ( 'AR', 'CR', 'SR' ) AND ENDERECO LIKE ''%' ORDER BY ENDERECO;
Called from ADOCLASS:EXECUTE(218)
Called from CONSULTAALUGUELCLASS:NAVEGAALUGUEL(423)
Called from CONSULTAALUGUELCLASS:CONSULTA01(105)
Called from VHLAL01(49)
Called from DO(0)
Called from BOXMENU(519)
Called from MAINMENU(368)
Called from MAIN(161)
Tranquilo, a checagem -w3 -es2 me avisou.
E depois, por precaução, dei uma conferida nas alterações pelo GIT.Harbour 3.4.0dev (0a127e0) (2016-01-15 01:54)
Copyright (c) 1999-2016, https://github.com/vszakats/harbour-core/
Compiling 'VHLAL01.prg'...
VHLAL01.prg(646) Warning W0032 Variable 'CPALAVRA' is assigned but not used in function 'MYSQLENDERECOLIKE(642)'
No code generated.
Um pedaço do fonte ficou diferente do outro.
Já aproveito pra deixar os dois iguais.
Então adicionais pra minha forma de trabalho:
- Meus erros por email me ajudam
- Rotinas que coloco no EXE me ajudam
- A compilação -w3 -es2 me ajuda
- O git me ajuda
Os dois primeiros comecei a usar nos tempos do Clipper.
Os dois últimos podem ser usados com o Clipper, mas só conheci no Harbour.
São vários ajudantes, disponíveis pra todo mundo, e a maioria não usa.
Comentário adicional:
O erro foi só num dos blocos.
É que aproveitei pra melhorar o outro bloco.
Sou eu que vou mexer no fonte, então estou melhorando pra mim.
Multiplique isso por 365 dias por ano, vários anos... dá pra melhorar muuuuito, só fazendo um pouquinho por vez.
Está aí: Acrescente aos meus ajudantes EU MESMO.
O melhor ajudante de um programador é ele mesmo, porque é ele próprio que pode se ajudar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
O único lado ruim é que não resolvi o problema.
Nos dois casos, já está testando se endereço está vazio.
Como em todos os "LIKE" tem checagem, só resta algum caractere inválido no endereço.
Vou ter que rever minha GETSYS, e a rotina de checagem, pra descobrir qual pode ser o caractere.
A não ser que o usuário lembre o que digitou.
Ou se eu conseguir colocar o Harbour pra conferir.... talvez dê....
Nota:
Pelo menos a checagem evitou de estragar mais.
É que postei aqui após a alteração, mas fui dar uma última olhada antes de finalizar, justamente por estar fazendo as duas coisas ao mesmo tempo.
Nos dois casos, já está testando se endereço está vazio.
Como em todos os "LIKE" tem checagem, só resta algum caractere inválido no endereço.
Vou ter que rever minha GETSYS, e a rotina de checagem, pra descobrir qual pode ser o caractere.
A não ser que o usuário lembre o que digitou.
Ou se eu conseguir colocar o Harbour pra conferir.... talvez dê....
Nota:
Pelo menos a checagem evitou de estragar mais.
É que postei aqui após a alteração, mas fui dar uma última olhada antes de finalizar, justamente por estar fazendo as duas coisas ao mesmo tempo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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/