Clipper On Line • Ver Tópico - Migrar Clipper para Harbour.

Migrar Clipper para Harbour.

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

Moderador: Moderadores

 

Migrar Clipper para Harbour.

Mensagempor JoséQuintas » 31 Jan 2016 21:29

#include "inkey.ch"
...
   Set( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE)
   nKey := 0
   DO WHILE nKey != K_ESC
      nKey := Inkey(0)
      DO CASE
      CASE nKey == K_LDBLCLICK .AND. mRow() == 10 .AND. mCol() > 5 .AND. mCol() < 10
            ? "Duplo clique na linha 10, entre as colunas 5 e 10"
      CASE nKey == K_PGUP
      CASE nKey == K_PGDN
      CASE nKey == K_ESC
      ENDCASE
   ENDDO
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Migrar Clipper para Harbour.

Mensagempor rmlazzari » 01 Fev 2016 22:01

Perfeito, caro José Quintas!

Mudei um pouquinho por idiosincrasia minha - prefiro colocar o valor expressamente a incluir um .CH - mas ficou ótimo! A novidade, para mim, foi poder incluir um segundo parâmetro em INKEY(). Já espalhei pelo programa todo... Tudo, agora, pode ser feito com o mouse. :D

Grato!
rmlazzari
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 09 Dez 2013 13:18
Cidade/Estado: são paulo
Curtiu: 35 vezes
Mens.Curtidas: 0 vez

Migrar Clipper para Harbour.

Mensagempor ANDRIL » 03 Fev 2016 12:17

rmlazzari escreveu:Um clique de mouse, então, não é considerado, pelo Harbour, como uma digitação. Pelo menos do jeito em que o exemplo está...

Voce ja tinha ativado o uso do mouse no seu prg? Tinha que estar ativado Set( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE) se não estiver, nada com mouse funcionará.
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar de usuário

ANDRIL
Usuário Nível 5

Usuário Nível 5
 
Mensagens: 1270
Data de registro: 06 Jul 2004 00:44
Curtiu: 12 vezes
Mens.Curtidas: 46 vezes

Migrar Clipper para Harbour.

Mensagempor rmlazzari » 04 Fev 2016 15:11

Não usei esses sets, Andril, mas está funcionando perfeitamente.

Através da mensagem do JoséQuintas, xeretei o inkey.ch do Harbour (confesso detestar arquivos de header, .CH) e descobri que o inkey() aceita um parâmetro além do primiero, que diz respeito ao tempo de de espera. Esse parâmetro determina que tipo de ação de entrada tira o inkey() do estado de espera.

Inkey(0) puramente, por exemplo, só diz que é para ficar aguardando indefinidamente uma ação pelo teclado. Equivale a inkey(0,128). É que 128 diz a inkey() que só é para se mexer se algo vier a partir do teclado. Mas se é para fazer valer entradas também através do mouse, você pode ir somando valores a esse 128, de acordo como que você deseja. Por exemplo, se para sair de um inkey(), em determinada rotina, vale qualquer tecla do teclado ou um movimento qualquer do mouse, seja em que direção for, você soma aos 128 o valor 1. Aí fica assim:

inkey(0,129)

Se te interessa que o inkey() seja liberado, além do teclado, também por um abaixar do botão esquerdo do mouse (mas não o simples movimentar do mouse), é 128 + 2 = 130. Inkey(0,130). Agora, se servem, para sair do inkey(), o teclado, um movimento qualquer do mouse ou o botão esquerdo sendo abaixado, 128 + 1 + 2 = 131, Inkey(0,131).

Sem usar o teclado, se você deseja liberar o inkey() apenas através do mouse, digamos, levantando o botão direito, inkey(0,16).

- "Mas como vou levantar o botão direito se não abaixá-lo antes?"

Para o Harbour, se você definiu inkey(0,16), tanto o abaixar do botão direito quanto o abaixar o esquerdo, teclar algo, mover o mouse... tanto faz, ele despreza, continua em estado de espera. Só aceita sair do inkey(0,16) se você levantar (soltar, release) o botão direito. E prá levantar o botão direito do mouse é fácil: é só abaixá-lo e soltá-lo...

E o que o inkey() devolve, por exemplo, no caso da ação "levantar o botão direito", é 1005. Exemplo:

a := inkey(0)

Se você teclar ESC, a = 27. Se nesse exemplo, você levanta o botão direito do mouse, o programa continua ali, parado, e "a" continua sem valor nenhum. Mas se, por outro lado:

a := inkey(0,16)

Teclou ESC, a = 27. Mas levantou o botão direito do mouse, a = 1005.

Tá tudo isso no inkey.ch do Harbour, tanto as entradas por mouse ou teclado quanto os valores de retorno de inkey(). E se você quiser e tiver paciência, veja esse anexo, uso demais desses recursos nessa minha brincadeira de Sudoku. Veja, principalmente, o JOGAR.PRG. Ali em combino o retorno da inkey() preparada para aceitar ações do mouse com duas outras funções - que para mim também são novidades: mrow() - a linha em que o mouse está quando a ação destrava inkey(), e mcol(), a coluna.

Não repare, por favor: ainda falta fazer um monte de coisas. Mas se você compilar o programa, aceite um dos jogos que já vêm "embutidos" e, por exemplo, dê um clique com o botão direito numa célula do tabuleiro. Ou, ainda na tela de jogo, lá em cima dela, onde diz "Simbolos pendentes", clique com o esquerdo ou com o direito naqueles números lá ;)

E também por favor, se houver alguma crítica, observação, sugestão, faça-a que eu recebo com honra e gratidão.

Grato!

sudoku.zip
(18.23 KiB) Baixado 271 vezes


OBS: Falta um monte de coisas, o CRIAR.PRG ainda não funciona, mas tem duas coisas que me fazer perder o son... bem, demorar um tiquinho a mais antes de dormir: Como sair de uma MEMOEDIT usando o mouse? E como fazer o programa perguntar se é mesmo para sair quando se clica no "X" superior direito da tela? O primeiro não é tão importante mas o segundo... e se eu estiver com dados na memória, esperando apenas um ESC para perguntar se é mesmo prá sair (e assim gravar o que está na RAM pro disco), e vem um engraçadinho e "click!" naquele "X" da janela? Fecha tudo sem salvar nada... :(

Se você ou alguém souber essas respostas, fico muito agradecido!
rmlazzari
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 09 Dez 2013 13:18
Cidade/Estado: são paulo
Curtiu: 35 vezes
Mens.Curtidas: 0 vez

Migrar Clipper para Harbour.

Mensagempor rmlazzari » 09 Fev 2016 22:08

Nova e (quase) definitiva versão. Falta um help, que espero fazer em breve, mesmo porque há "segredos" nas telas.

Por exemplo, se você estiver na tela de jogar (ciano), lá em cima à esquerda tem um indicador: "Simbolos faltantes:" Eu pus "símbolos" porque quando comecei achava que poderia fazer um programa que tratasse tanto de números quando de letras... acabou ficando apenas números. Mas há, acima do tabuleiro, um indicativo de números faltantes e a quantidade dos que já foram colocados. Por exemplo: quantos números "1" faltam? Clique com o botão direito do mouse ali e pronto. Mas quantos "1" já tem? Botão esquerdo naquele lugar.

Quer fazer uma anotação temporária? Por exemplo: A1 definitivamente não é "4". Dê um clique na janela do memoedit(), à direita do tabuleiro. (Se alguém souber como sair de uma memoedit() clicando, por exemplo, fora das coordenadas dela, por favor, me diga...)

Um clique direito numa casa vai mostrar os candidatos da casa. E para quem tem preguiça de tirar a mão do mouse para digitar um número numa casa, um clique esquerdo posiciona o cursor na casa. Um duplo clique direito, vai subtrair o número que está lá. O duplo clique esquerdo, soma.

Nos demais, tanto o teclado quanto o mouse funcionam parecido. Por exemplo: Alt-F10 volta o jogo ao começo. E clicar com o esquerdo em "Alt-F10: Reiniciar o jogo" faz a mesma coisa.

Um comando que não documentei por ser quase tão conhecido quanto Ctrl-C e Ctrl-V foi o Ctrl-Z. Desfazer. Ele volta, uma a uma, as jogadas feitas e recalcula os candidatos das casas adjacentes.

Você pode deixar o "Verimode" (marca registrada, rs... não encontrei outro nome) ligado ou não. Se deixar ligado, ao digitar um número numa casa o sistema aponta se já há esse mesmo número na linha, coluna ou grupo dessa casa. Se não quiser essa "mordomia", desligue-o.

Outra "mordomia": as casas chamadas "fixas", as que o jogo propõe como iniciais também podem ser mudadas, bastando teclar Alt-F12 (ou clicar com o esquerdo na frase), que aí as fixas ficam destravadas. Travar de novo, Alt-F12 de novo. Ficou uma bagunça? Alt-F10: Reiniciar o jogo".

Esse jogo ficou chato? Ou quer deixar este para depois? PgUp (ou, como tudo, clique sobre "PgUp: anterior") ou PgDn para um outro jogo. Pode deixar que, se o jogo em que você está tiver sido mexido, ele pergunta se você quer salvar.

Mas se você quer criar seu próprio jogo do zero, INS na tela ciano te leva a uma tela vazia. Criar Sudokus é bem mais difícil do que eu imaginava... Mas é legal. Agora, dessa tela (agora verde), você também pode importar um monte de jogos já prontos. Alt-X (ou clique sobre). E veja o exemplo em "sudo0001.jxt" e a crítica de sua importação em "sudo0001.err" no mesmo diretório em que o jogo está. Junto com esses exemplos, o PRIMJOGO.PRG e a func "txt2dbf()", em "ARQUIVOS.PRG" contam tudo sobre isso.

Se alguém for ver os programas, não repare na bagunça nem nas redundâncias. Por exemplo, para sair do programa, há a mesma rotina em dois pontos do programa: Uma para quando a tecla ESC for acionada. E outra para quando o usuário clica sobre "ESC: Sair do programa". O mesmo para quase tudo, pode ser acionado por teclado ou por mouse... Nada que uma lógicazinha booleana não resolva, quem quiser tentar...

Bem... taí, quem quiser dar uma xeretada, está sendo divertido e instrutivo prá mim... Tomara seja para mais alguém.

Aproveito e peço ao que fizeram download da versão anterior que desculpem as falhas. E se quiserem e puderem, apontem eventuais falhas, façam críticas, dêm sugestões... Taí.

sudoku.zip
(653.97 KiB) Baixado 252 vezes


Grato.

P.S.: Ainda não encontrei solução para que o programa peça confirmação antes de fechar quando a gente clica no "X" da janela do Windows. Andei vendo jeitos de criar janelas, vários "Hello World!" por aí, mas com cada coordenada absurda: 200 x 400! Sei que é em pixel e não em caracter mas nem imagino algo como "@ 120, 230 say "Tecle aqui..."
rmlazzari
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 09 Dez 2013 13:18
Cidade/Estado: são paulo
Curtiu: 35 vezes
Mens.Curtidas: 0 vez

Migrar Clipper para Harbour.

Mensagempor rmlazzari » 11 Fev 2016 21:14

E como ninguém ainda me xingou... Implementada rotina que no cálculo dos candidatos das casas ainda "vazias", não apenas retira delas os números que constam da mesma linha, coluna e grupo como também faz o seguinte: se numa mesma linha, coluna ou grupo houverem duas casas "vazias" com os mesmos dois candidatos... por exemplo, se na linha A a coluna 1 tiver como candidatos os números "1" e "7" e o mesmo ocorrer com a coluna 2 dessa mesma linha, de todas as outras 7 casas, o programa tira esses dois números do rol de seus candidatos.

Não sei se é possível, no Sudoku, ocorrerem 3 casas numa mesma linha - coluna ou grupo - 2 candidatos iguais, que aí já é Sudoku, não programa de computador... mas nesse caso o programa deixa as 3 casas quietas, só mexe se houver exatamente duas casas com exatamente os mesmos dois candidatos.

Lá vai, prá quem quiser xeretar...

sudoku.zip
Versão de última hora, com acerto ao bug do duplo clique direito (o que subtrai) em células que estivessem vazias.
(716.96 KiB) Baixado 258 vezes


Abraços e grato pela paciência. Além do mouse estão embarcados outros recursos que o Harbour disponibiliza e o Clipper não, mas nem me lembro quais...
Sei que não dá mais para ser Clipper.
rmlazzari
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 64
Data de registro: 09 Dez 2013 13:18
Cidade/Estado: são paulo
Curtiu: 35 vezes
Mens.Curtidas: 0 vez

Migrar Clipper para Harbour.

Mensagempor efurlani » 17 Mar 2016 15:38

Olá a todos,

Sou novo no fórum e em programação clipper mas tenho vários sistemas prontos em clipper5, gostaria de saber passo a passo de como realizar tão migração. Alguém fornece um serviço para fazer tais migrações via acesso remoto? estou realmente desesperado, preciso de soluções, procurei conteúdos, mas são bem desatualizados, e me deixou com mais duvidas tais citarei abaixo:

Qual a versão mais atual ?
Passo a passo dessas migrações?
Oque devo mudar nos meus .PRG's ?
Exemplo tenho diversos arquivos .PRG ligados em extensões .LNK e .RMK, como devo proceder a isso?
Avatar de usuário

efurlani
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 2
Data de registro: 17 Mar 2016 08:51
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Migrar Clipper para Harbour.

Mensagempor JoséQuintas » 17 Mar 2016 17:46

Sou novo no fórum e em programação clipper


A primeira questão é saber se compila com Clipper mesmo.
As vezes acontece de pensar que tem todos fontes, mas não ter.

Basicamente seria compilar de forma parecida, mas já disse que é novo no Clipper, então não sei se vai saber disso.

Baixar o compilador Harbour

Transformar o LNK e RMK em um arquivo HBP.
o HBP vai ter a lista de fontes que entram na compilação, e os parâmetros extras.
Provavelmente eles podem ser encontrados no LNK e RMK.
Se for padrão, geralmente basta a lista de fontes, e mais -m, colocando o programa principal como primeiro da lista.

Se for usar em Windows 32 bits, pode continuar usando o Clipper.

Sobre ter que alterar os fontes, vai depender dos fontes.
Existe um padrão de trabalho, se os fontes seguem o padrão, pode não precisar alterar nada.
Se inventaram coisas diferentes, vai depender dessas "invenções".
No geral, o máximo que precisa é limitar o tamanho da tela, que no Clipper geralmente é 25x80, e no Harbour não tem limite.
SetMode( 25, 80 )

Se é apenas pra resolver algum problema da empresa que trabalha, e prefere contratar o serviço, vá no painel e envie mensagem particular.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Migrar Clipper para Harbour.

Mensagempor Jairo Maia » 18 Mar 2016 08:55

Olá efurlani,

Seja bem vindo ao fórum.

Também ajuda se você postar o conteúdo dos arquivos LNK e RMK para saber se você está usando alguma LIB incompatível que deve ser substituída.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Migrar Clipper para Harbour.

Mensagempor efurlani » 18 Mar 2016 09:14

Segue exemplo dos arquivos .LNK e .RMK, como ficaria em um arquivo .HBP ? E oque devo mudar no meu Main() ?

.RMK
CompOptions := /m

.Prg.Obj:
    Clipper $< $(CompOptions)

Adm_Menu.Obj: Adm_Menu.Prg
Adm_MPar.Obj: Adm_MPar.Prg
Adm_Mchq.Obj: Adm_Mchq.Prg
Adm_MFor.Obj: Adm_MFor.Prg
Adm_MCli.Obj: Adm_MCli.Prg
Adm_MRep.Obj: Adm_MRep.Prg
Adm_MCid.Obj: Adm_MCid.Prg
Adm_MPro.Obj: Adm_MPro.Prg
Adm_MMes.Obj: Adm_MMes.Prg
Adm_MTra.Obj: Adm_MTra.Prg
Adm_MPra.Obj: Adm_MPra.Prg
Adm_MCfo.Obj: Adm_MCfo.Prg
Adm_MPed.Obj: Adm_MPed.prg
Adm_MPe2.Obj: Adm_MPe2.prg

__Parame.Obj:   \SysSys\publico\__Parame.Prg
__Fornec.Obj:   \SysSys\publico\__Fornec.Prg
__Cheques.Obj:  \SysSys\publico\__Cheques.Prg
__Cidade.Obj:   \SysSys\publico\__Cidade.Prg
__Bancos.Obj:   \SysSys\publico\__Bancos.Prg
__Conta.Obj:    \SysSys\publico\__Conta.Prg
__Transp.Obj:   \SysSys\publico\__Transp.Prg
__Repres.Obj:   \SysSys\publico\__Repres.Prg
__Prazos.Obj:   \SysSys\publico\__Prazos.Prg
__Client.Obj:   \SysSys\publico\__Client.Prg
__Produt.Obj:   \SysSys\publico\__Produt.Prg
__MvEsto.Obj:   \SysSys\publico\__MvEsto.Prg
__CFOP.Obj:     \SysSys\publico\__CFOP.Prg
__PdFixo.Obj:   \SysSys\publico\__PdFixo.Prg
__PdItem.Obj:   \SysSys\publico\__PdItem.Prg
__ClasFi.obj:   \SysSys\publico\__ClasFi.Prg
__NotaFi.obj:   \SysSys\publico\__NotaFi.Prg
__NotaIt.obj:   \SysSys\publico\__NotaIt.Prg
__Duplic.obj:   \SysSys\publico\__Duplic.Prg
__Despesas.obj: \SysSys\publico\__Despes.Prg
__Pagame.obj:   \SysSys\publico\__Pagame.Prg
__EntFix.Obj:   \SysSys\publico\__EntFix.Prg
__EntIte.Obj:   \SysSys\publico\__EntIte.Prg
__PcFixo.Obj:   \SysSys\publico\__PcFixo.Prg
__PcItem.Obj:   \SysSys\publico\__PcItem.Prg
__Histor.Obj:   \SysSys\publico\__Histor.Prg
__ConSal.Obj:   \SysSys\publico\__ConSal.Prg
__Precos.Obj:   \SysSys\publico\__Precos.Prg
__Caixa.Obj:    \SysSys\publico\__Caixa.Prg
__Custos.Obj:   \SysSys\publico\__Custos.Prg
__Border.Obj:   \SysSys\publico\__Border.Prg
__CCorre.Obj:   \SysSys\publico\__CCorre.Prg
__Dias.Obj:     \SysSys\publico\__Dias.Prg
__TmpBor.Obj:   \SysSys\publico\__TmpBor.Prg
__Orcame.Obj:   \SysSys\publico\__Orcame.Prg
__OrcAux.Obj:   \SysSys\publico\__Orcaux.Prg
__Comiss.Obj:   \SysSys\publico\__Comiss.Prg
__Catego.Obj:   \SysSys\publico\__Catego.Prg
__Apurac.Obj:   \SysSys\publico\__Apurac.Prg
__Impres.Obj:   \SysSys\publico\__Impres.Prg
__DupPK.Obj:    \SysSys\publico\__DupPK.Prg
__Os.Obj:       \SysSys\publico\__Os.Prg
__Tecnic.Obj:   \SysSys\publico\__Tecnic.Prg
__Bdupli.Obj:   \SysSys\publico\__Bdupli.prg
__Agend.Obj:   \SysSys\publico\__Agend.prg

Adm_Menu:
          RtLink @Adm.Lnk



.LNK
File Adm_Menu

File \SysSys\funcoes\funfil
File \SysSys\funcoes\Func97
File \SysSys\funcoes\Extenso
File \SysSys\funcoes\FuncSeq

File __Parame
File __Fornec
File __Cheques
File __Cidade
File __Bancos
File __Conta
File __Transp
File __Repres
File __Prazos
File __Client
File __Produt
File __MvEsto
File __CFop
File __PdFixo
File __PdItem
File __ClasFi
File __NotaFi
File __NotaIt
File __Duplic
File __Despes
File __Pagame
File __EntFix
File __EntIte
File __PcFixo
File __PcItem
File __Histor
File __Caixa
File __ConSal
File __Precos
File __Custos
File __Border
File __CCorre
File __Dias
File __TmpBor
File __Catego
File __ORCAME
File __ORCAux
File __Comiss
File __Apurac
File __Impres
File __DupPK
File __Os
File __Tecnic
File __Bdupli
File __Agend

File Adm_Rinv
File Adm_Repv
File Adm_Gnfs
File Adm_Rnf
File Adm_Ctab
File Adm_Rcos
File Adm_Rdup

Lib  clipper
Lib  extend
Lib  dbfntx
Lib  NovTerm
Lib  Ezequiel
Lib  Er_Graf
Lib  EfLib



Exemplo do meu main()

* ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
* ³  Sistema..... Sistema De GERENCIAMENTO TEXTIL - Indaiatuba Textil    ³
* ³  Arquivo..... ADM_MENU                                               Â³
* ³  Data........ 10/063/2004                                            ³
* ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

Set Proc To ADM_MENU
Parameters Empresa

#Include "Inkey.Ch"

Public NomEmp,Abreviado, Var_In_Get

Funcao=GBL_Inic(.T.)
If Type("Empresa")="U"
   Return(0)
   GBL_Negoc =0
   GBL_Teste =.T.
Else
   GBL_Negoc =Val(Empresa)
   GBL_Teste =.F.
Endif

Empresa := Val(Empresa)
******** Importante : Definicao De Casas Decimais Para Calculos  **********
SET DECIMALS TO 2
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*

Gbl_PkDados    :=  '\SYSADM\CLE\DADTESTE\'
Gbl_PkIndices  :=  '\SYSADM\CLE\INDTESTE\'

Gbl_DOS        :=  '\SYSADM\CLE\DADOS\OS\'
Gbl_IOS        :=  '\SYSADM\CLE\INDICES\OS\'

Gbl_DRE        :=  '\SYSADM\CLE\DADOS\RE\'
Gbl_IRE        :=  '\SYSADM\CLE\INDICES\RE\'

Gbl_DRS        :=  '\SYSADM\CLE\DADOS\RS\'
Gbl_IRS        :=  '\SYSADM\CLE\INDICES\RS\'

Gbl_Dados      :=  '\SYSADM\CLE\DADOS\'
Gbl_Indices    :=  '\SYSADM\CLE\INDICES\'
Gbl_Dpar       :=  '\SYSADM\CLE\PARAMETR\'
Gbl_IPar       :=  '\SYSADM\CLE\PARAMETR\'
Gbl_Relat      :=  '\SYSADM\RELATORI\'
Gbl_Banco      :=  '\SYSADM\CLE\BANCOS\'
Gbl_Export     :=  '\SYSADM\CLE\EXPORTA\'
Gbl_DUser      :=  '\SYSADM\CLE\DADUSER\'
Gbl_IUser      :=  '\SYSADM\CLE\INDUSER\'

If A_Parame() > 0
   CloseDBF()
   Return
Endif

Sele &_Parame
Set Order To 1
Go 1
NomEmp     := Par_Emp
If Empresa == 20
   X_Par_Emp  := Repli("*", 40)
Else
   X_Par_Emp  := Par_Emp
Endif
Gbl_Empres := Nomemp
Abreviado  := Par_Abr
DataPara   := Par_Dat
X_Par_Dat  := Par_Dat

CloseDBF()
M_Emp :=StrZero(Gbl_Negoc,3)

Set Cent On
Set Epoch To 1990
A=Adapter()
If (A>1)
   ColorBack(16)
Endif

AT01 := {.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,;
         .T.,.T.,.T.,.T.,.T.,.T.,.T.,.F.}
MO01 := {"Tabela ",;
        " Parametros               -MPAR ",;
        " Fornecedores             -MFOR ",;
        " Clientes                 -MCLI ",;
        " Representantes           -MREP ",;
        " Cidades                  -MCID ",;
        " Insumos                  -MINS ",;
        " Transportadora           -MTRA ",;
        " Prazo de Pagamento       -MPRA ",;
        " C.F.O.P.                 -MCFO ",;
        " Plano De Contas Despesas -MDES ",;
        " Classificacao Fiscal     -MCLF ",;
        " Tabela Do Icms           -MICM ",;
        " Embalagens               -MEMB ",;
        " Cotacao De Dolar         -MDOL ",;
        " Login Do Sistema         -     ",;
        "."}

AT02 := {.T.,.F.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,;
         .T.,.F.,.T.,.F.}
MO02 := {"Financeiro ",;
        " ÄÄÄÄÄÄÄÄ   Bancos     Ã„ÄÄÄÄÄÄÄÄ ",;
        " Bancos                    -MBAN ",;
        " Conta Corrente            -MCCO ",;
        " Historico Banc rio        -MHIS ",;
        " Historico De Liquidacoes  -MHLI ",;
        " Operacoes Bancarias       -MOPE ",;
        " Lancamentos Bancarios     -MLCA ",;
        " Gera Saldo Conta Corrente -MENC ",;
        " Extrato Conta Corrente    -REXT ",;
        " Transferencia De Arquivos -MARQ ",;
        "."}

AT03 := {.T.,.F.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,;
         .T.,.F.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,;
         .T.,.F.}
MO03 := {"Gerencia ",;
        " ÄÄÄÄÄÄÄÄÄ   Receber   Ã„ÄÄÄÄÄÄÄÄÄ ",;
        " Duplicatas … Receber       -MDRE ",;
        " Cadastro De Duplicatas     -MDUP ",;
        " Bordero Duplicatas Receber -MBDU ",;
        " Historico Das Baixas       -MBAI ",;
        " Liquidacao Por Banco       -MLIQ ",;
        " Dup. Em Aberto Vencimento  -RDVE ",;
        " Dup. Em Aberto Clientes    -RCLI ",;
        " Dup. Em Aberto Bancos      -RBAN ",;
        " Dup. Recebidas Data        -RVPG ",;
        " ÄÄÄÄÄÄÄÄÄ   A Pagar   Ã„ÄÄÄÄÄÄÄÄÄ ",;
        " Duplicatas … Pagar         -MDPA ",;
        " Cadastro de Pagamentos     -MMDE ",;
        " Bordero Duplicatas … Pagar -MBPA ",;
        " Historico Das Baixas       -MBAP ",;
        " Pagamento Por Vencimento   -RPVE ",;
        " Pagamento Por Fornecedor   -RPFO ",;
        " Pagamento Por Bancos       -RPBA ",;
        " Dupls Emis /Lcto /Pgto     -RPGO ",;
        "."}

AT04 := {.T.,.T.,.T.,.T.,.T.,.T.,.T.,;
         .T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.F.}
MO04 := {"Gerencia II ",;
        " Faturamento -Cliente       -RFAT ",;
        " Faturamento -Representante -RFAR ",;
        " Ranking De Clientes        -RRAN ",;
        " Ranking De Produtos        -RPRO ",;
        " Kilos & Metros Faturados   -RFA2 ",;
        " Duplicatas Por Emissao     -RDUE ",;
        " Duplicatas Em Aberto(Emiss)-RDEM ",;
        " Faturamento Por Dolar      -RFDO ",;
        " Pagamentos  Por Dolar      -RPDO ",;
        " Kilos & Metros Fat.(NOVO)  -MFAT ",;
        " Pagamentos Em Aberto(GERAL)-RPGE ",;
        "."}

AT05 := {.T.,.T.,.T.,.T.,.F.}
MO05 := {"Gerencia III ",;
        " Relacao De Notas - Compras -RNFC ",;
        " Apuracao De ICMS e IPI     -RICM ",;
        " Despesa Conta Cont bil     -RDCC ",;
        "."}

AT06 := {.T.,.T.,.T.,.T.,.T.,.F.}
         
MO06 := {"Util ",;
         " Informa‡äes Sobre O Sistema       ",;
         " Reorganizacao De Arquivos         ",;
         " Impressao de Duplicatas      -RDUP ",;
         " Impressoras                  -MIMP ",;
         " Log de Cancelamentos         -MLOG ",;
         "."}

IniTela()

If Get_Usuario() # 0
   FimTela()
   Set Color to &CorFinal
   Clear
   Cancel
Endif

Fun00 := A_Parame()
Fun01 := A_Impres()
Fun02 := A_Usuarios()

If Fun00+Fun01+Fun02 > 0
   CloseDbf()
   Return(0)
Endif

SetLpt()

Set Color To &CorFinal
Clear
LeData()

CloseDbf()

Menu()

FimTela()
Set Color To &CorFinal
Clear
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu()
Public PItem,SItem
PItem := 1
SItem := 1
QMenu := 6
MontaTelaB("MàDULO : FATURAMENTO",RTrim(Abreviado) , "        ",Date(),"  "," ",RTrim(Nomemp)+ " (ADMIN v.2608)")
Mostra(24,71,'SYSADM-'+STR(EMPRESA,2),415)
IniMenu()

Do While .T.
   MontaMenu(QMenu,01,01,"MO","AT",@PItem,@SItem)
   If PItem == 0 .Or. (PItem == 1 .And. SItem == 18)
      Exit
   Endif
   Do Case
   Case PItem == 1
      Menu1()
   Case PItem == 2
      Menu2()
   Case PItem == 3
      Menu3()
   Case PItem == 4
      Menu4()
   Case PItem == 5
      Menu5()
   Case PItem == 6
      Menu6()
   Endcase
   RestMenu()
Enddo
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu1()
Do Case
Case SItem == 1
   _Exe("Adm_MPar",Gpw_Nivel,FMenu,NMenu)
Case SItem == 2
   _Exe("Adm_MFor",Gpw_Nivel,FMenu,NMenu)
Case SItem == 3
   _Exe("Adm_MCli",Gpw_Nivel,FMenu,NMenu)
Case SItem == 4
   _Exe("Adm_MRep",Gpw_Nivel,FMenu,NMenu)
Case SItem == 5
   _Exe("Adm_MCid",Gpw_Nivel,FMenu,NMenu)
Case SItem == 6
   _Exe("Adm_MIns",Gpw_Nivel,FMenu,NMenu)
Case SItem == 7
   _Exe("Adm_MTra",Gpw_Nivel,FMenu,NMenu)
Case SItem == 8
   _Exe("Adm_MPra",Gpw_Nivel,FMenu,NMenu)
Case SItem == 9
   _Exe("Adm_MCfo",Gpw_Nivel,FMenu,NMenu)
Case SItem == 10
   _Exe("Adm_Mdes",Gpw_Nivel,FMenu,NMenu)
Case SItem == 11
   _Exe("Adm_MClf",Gpw_Nivel,FMenu,NMenu)
Case SItem == 12
   _Exe("Adm_Micm",Gpw_Nivel,FMenu,NMenu)
Case SItem == 13
   _Exe("Adm_MEmb",Gpw_Nivel,FMenu,NMenu)
Case SItem == 14
   _Exe("Adm_MDol",Gpw_Nivel,FMenu,NMenu)
Case SItem == 15
   Login()
EndCase
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu2()
Do Case
Case SItem == 2
    _Exe("Adm_MBan",Gpw_Nivel,FMenu,NMenu)
Case SItem == 3
    _Exe("Adm_MCco",Gpw_Nivel,FMenu,NMenu)
Case SItem == 4
    _Exe("Adm_Mhis",Gpw_Nivel,FMenu,NMenu)
Case SItem == 5
    _Exe("Adm_MhLi",Gpw_Nivel,FMenu,NMenu)
Case SItem == 6
    _Exe("Adm_MOpe",Gpw_Nivel,FMenu,NMenu)
Case SItem == 7
    _Exe("Adm_MLca",Gpw_Nivel,FMenu,NMenu)
Case SItem == 8
    _Exe("Adm_Menc",Gpw_Nivel,FMenu,NMenu)
Case SItem == 9
    _Exe("Adm_Rext",Gpw_Nivel,FMenu,NMenu)
Case SItem == 10
    _Exe("Adm_MArq",Gpw_Nivel,FMenu,NMenu)
EndCase
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu3()
Do Case
Case SItem == 2
    _Exe("Adm_Mdre",Gpw_Nivel,FMenu,NMenu)
Case SItem == 3
    _Exe("Adm_MDup",Gpw_Nivel,FMenu,NMenu)
Case SItem == 4
    _Exe("Adm_MBDu",Gpw_Nivel,FMenu,NMenu)
Case SItem == 5
    _Exe("Adm_MBai",Gpw_Nivel,FMenu,NMenu)
Case SItem == 6
    _Exe("Adm_MLiq",Gpw_Nivel,FMenu,NMenu)
Case SItem == 7
    _Exe("Adm_RDve",Gpw_Nivel,FMenu,NMenu)
Case SItem == 8
    _Exe("Adm_RCli",Gpw_Nivel,FMenu,NMenu)
Case SItem == 9
    _Exe("Adm_RBan",Gpw_Nivel,FMenu,NMenu)
Case SItem == 10
    _Exe("Adm_RVpg",Gpw_Nivel,FMenu,NMenu)

Case SItem == 12
    _Exe("Adm_MdPa",Gpw_Nivel,FMenu,NMenu)
Case SItem == 13
    _Exe("Adm_MMde",Gpw_Nivel,FMenu,NMenu)
Case SItem == 14
    _Exe("Adm_MBpa",Gpw_Nivel,FMenu,NMenu)
Case SItem == 15
    _Exe("Adm_MBap",Gpw_Nivel,FMenu,NMenu)
Case SItem == 16
    _Exe("Adm_RPve",Gpw_Nivel,FMenu,NMenu)
Case SItem == 17
    _Exe("Adm_RPfo",Gpw_Nivel,FMenu,NMenu)
Case SItem == 18
    _Exe("Adm_RPba",Gpw_Nivel,FMenu,NMenu)
Case SItem == 19
    _Exe("Adm_RPgo",Gpw_Nivel,FMenu,NMenu)
EndCase
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu4()
Do Case
Case SItem == 1
    _Exe("Adm_RFat",Gpw_Nivel,FMenu,NMenu)
Case SItem == 2
    _Exe("Adm_RFar",Gpw_Nivel,FMenu,NMenu)
Case SItem == 3
    _Exe("Adm_RRan",Gpw_Nivel,FMenu,NMenu)
Case SItem == 4
    _Exe("Adm_RPro",Gpw_Nivel,FMenu,NMenu)
Case SItem == 5
    _Exe("Adm_RFa2",Gpw_Nivel,FMenu,NMenu)
Case SItem == 6
    _Exe("Adm_RDue",Gpw_Nivel,FMenu,NMenu)
Case SItem == 7
    _Exe("Adm_RDem",Gpw_Nivel,FMenu,NMenu)
Case SItem == 8
    _Exe("Adm_RFdo",Gpw_Nivel,FMenu,NMenu)
Case SItem == 9
    _Exe("Adm_RPdo",Gpw_Nivel,FMenu,NMenu)
Case SItem == 10
    _Exe("Adm_MFat",Gpw_Nivel,FMenu,NMenu)
Case SItem == 11
    _Exe("Adm_RPGE",Gpw_Nivel,FMenu,NMenu)
EndCase
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu5()
Do Case
Case SItem == 1
    _Exe("Adm_RNfc",Gpw_Nivel,FMenu,NMenu)
Case SItem == 2
    _Exe("Adm_Ricm",Gpw_Nivel,FMenu,NMenu)
Case SItem == 3
    _Exe("Adm_RDcc",Gpw_Nivel,FMenu,NMenu)
Case SItem == 4
    _Exe("Adm_RLog",Gpw_Nivel,FMenu,NMenu)
EndCase
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Menu6()
Do Case
Case SItem == 1
    _Exe("Sobre",Gpw_Nivel,FMenu,NMenu)
Case SItem == 2
    Reorganiza()
Case SItem == 3
    _Exe("Adm_RDUP",Gpw_Nivel,FMenu,NMenu)
Case SItem == 4
    _Exe("Adm_MImp",Gpw_Nivel,FMenu,NMenu)
Case SItem == 5
    _Exe("Adm_MLog",Gpw_Nivel,FMenu,NMenu)
EndCase
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Helps()
Local Campos[20]

Set Key K_F2 To

// CLIENTES
If Var_in_Get=="M_Cli_Codi" .Or. Var_in_Get=="M_Ped_Clie" .Or. Var_in_Get=="M_Dev_Cli";
    .Or. Var_in_Get=="M_Clie" .Or. Var_in_Get=="M_Os_Clie" .Or. Var_in_Get=="M_Dup_Clie";
    .Or. Var_in_Get=="M_Cli_Fatu" .Or. Var_in_Get=="M_Che_Clie" .Or. Var_in_Get=="M_Cli";
    .Or. Var_in_Get=="M_Pre_Clie" .Or. Var_in_Get=="M_Nf_Desti" .Or. Var_in_Get=="M_Nf_Orde";
    .Or. Var_in_Get=="M_T_CLIEN" .Or. Var_in_Get=="M_Ind_Clie" .Or. Var_in_Get=="M_Ind_Desti";
    .Or. Var_in_Get=="M_Deb_Clie"
    Sele &_Cliente
    Campos[01]="Help De CLIENTES"
    Campos[02]="Fantasia~Cli_Fant~@!~2"
    Campos[03]="Codigo~Cli_Codi~99999~1"
    Campos[04]="."
    HelpD(05,10,_Cliente,2,Campos,3,"Cli_Codi")
Endif

// FORNECEDOR
If Var_in_Get=="M_For_Codi" .Or. Var_in_Get=="M_For_Rzso"  .Or. Var_in_Get=="M_Forn";
   .Or. Var_in_Get=="M_Pag_Forn" .Or. Var_in_Get=="M_BDu_For" .Or. Var_in_Get=="M_BCh_For";
   .Or. Var_in_Get=="M_Est_For" .Or. Var_in_Get=="G_Forn" .Or. Var_in_Get=="M_Ins_Forn";
   .Or. Var_in_Get=="M_Pec_For" .Or. Var_in_Get=="M_Cus_Forn" .Or. Var_in_Get=="M_Mat_UFor";
   .Or. Var_in_Get=="M_Mve_Forn" .Or. Var_in_Get=="M_Ins_Dono"
    Sele &_Fornece
    Campos[01]="Help De FORNECEDORES"
    Campos[02]="Fantasia~For_Fant~@!~3"
    Campos[03]="Codigo~For_Codi~99999~1"
    Campos[04]="Razao Social~For_Rzso~@!~2"
    Campos[05]="."
    HelpD(05,10,_Fornece,3,Campos,3,"For_Codi")
Endif

// DUPLICATA
If Var_in_Get=="M_Dbi_Dupl"
    Sele &_Duplica
    Set Order To 1
    Campos[01]="Help De DUPLICATAS"
    Campos[02]="Duplicata~Dup_Codi~999999~3"
    Campos[03]="Sequ.~Dup_Sequ~99~1"
    Campos[04]="Valor~Dup_Sald~999,999.99~2"
    Campos[05]="Vencimento~Dup_Vcto~99/99/9999~2"
    Campos[06]="."
    HelpD(05,10,_Duplica,1,Campos,3,"Dup_Codi")
Endif

// CIDADE
If Var_in_Get=="M_For_Ccid"  .or. Var_in_Get=="M_Cli_Cdci"  .or. Var_in_Get=="M_Rep_Cida" .Or. Var_in_Get=="M_Cid_Codi"  .or. Var_in_Get=="M_Cid_Desc"  .or. Var_in_Get=="M_Tra_Coc"  .Or. Var_in_Get=="M_Ban_Cida";
    .Or. Var_in_Get=="M_Cli_CdCi" .Or. Var_in_Get=="M_Cli_CidE" .Or. Var_in_Get=="M_Cli_PCid";
    .Or. Var_in_Get=="M_Fil_Cida" .Or. Var_in_Get=="M_Fil_PCid" .Or. Var_in_Get=="M_Par_CCi"
    Sele &_Cidade
    Campos[01]="Help De CIDADE "
    Campos[02]="Desc.~Cid_Desc~@!~2"
    Campos[03]="Codigo~Cid_Codi~99999~1"
    Campos[04]="Uf~Cid_Esta~@!"
    Campos[05]="Ibge~Cid_Ibge~99999999"
    Campos[06]="."
    HelpD(05,10,_Cidade,2,Campos,2,"Cid_Codi")
Endif

// PAIS 
If Var_in_Get=="M_Pai_Codi" .Or. Var_in_Get=="M_Cid_Pais"
    Sele &_Pais
    Campos[01]="Help De PAISES"
    Campos[02]="Pais~Pai_Desc~@!~2"
    Campos[03]="Codigo~Pai_Codi~9999~1"
    Campos[04]="."
    HelpD(05,10,_Pais,2,Campos,2,"Pai_Codi")
Endif

// BANCOS
If Var_in_Get=="M_For_Banc" .or. Var_in_Get=="M_Con_Ban" .Or. Var_in_Get=="M_Banc";
    .Or. Var_in_Get=="M_Cai_Ban" .Or. Var_in_Get=="M_Pag_Bco" .Or. Var_in_Get=="M_Ban_Codi";
    .Or. Var_in_Get=="M_Che_Banc" .Or. Var_in_Get=="M_Dup_Bco" .Or. Var_in_Get=="M_BCh_Ban";
    .Or. Var_in_Get=="M_Bdu_Ban" .Or. Var_in_Get=="M_BPa_Ban" .Or. Var_in_Get=="M_Pag_BcoE";
    .Or. Var_in_Get=="M_Ent_Ban"
    Sele &_Bancos
    Campos[01]="Help De BANCOS"
    Campos[02]="Banco~Ban_Raza~@!~2"
    Campos[03]="Codigo~Ban_Codi~9999~1"
    Campos[04]="."
    HelpD(05,10,_Bancos,2,Campos,2,"Ban_Codi")
Endif
// CENTRO DE LUCRO
If Var_in_Get=="M_Nf_Cluc"  .Or. Var_in_Get=="M_Luc_Codi" .Or. Var_in_Get=="M_Cluc"
    Sele &_CentroLucro
    Campos[01]="Help De CENTRO DE LUCRO"
    Campos[02]="Centro De Lucro~Luc_Nome~@!~2"
    Campos[03]="Codigo~Luc_Codi~9999~1"
    Campos[04]="."
    HelpD(05,10,_CentroLucro,2,Campos,2,"Luc_Codi")
Endif

// TRANSPORTADORA
If Var_in_Get=="M_Cli_Tran" .or. Var_in_Get=="M_Tra_Cod" .or. Var_in_Get=="M_Tra_Rso";
   .Or. Var_in_Get=="M_Nf_Trans" .Or. Var_in_Get=="M_Tran" .Or. Var_in_Get=="M_Rede";
   .Or. Var_in_Get=="M_Nf_Rede" .Or. Var_in_Get=="M_Pec_Tra" .Or. Var_in_Get=="M_Cli_Rede"
    Sele &_Transpo
    Campos[01]="Help De TRANSPORTADORAS"
    Campos[02]="Transportadora~Tra_Rso~@!~2"
    Campos[03]="Codigo~Tra_Cod~99999~1"
    Campos[04]="Placa~Tra_Pla~@!"
    Campos[05]="."
    HelpD(05,10,_Transpo,2,Campos,2,"Tra_Cod")
Endif

// CONDICÇO DE PAGAMENTO
If Var_in_Get=="M_Pra_Cod" .Or. Var_in_Get=="M_Ped_CPag" .Or. Var_in_Get=="M_Cli_CPag";
    .Or. Var_in_Get=="M_Nf_Praz" .Or. Var_in_Get=="M_Pec_Pag" .Or. Var_in_Get=="M_Ent_Pgt";
    .Or. Var_in_Get=="M_Cond" .Or. Var_in_Get=="M_Entr" .Or. Var_in_Get=="M_Est_Pra"
    Sele &_Prazos
    Campos[01]="Help De PRAZO DE PAGAMENTO"
    Campos[02]="Cod.~Pra_Cod~999~1"
    Campos[03]="Dias~Pra_C01~999"
    Campos[04]="Dias~Pra_C02~999"
    Campos[05]="Dias~Pra_C03~999"
    Campos[06]="Dias~Pra_C04~999"
    Campos[07]="Dias~Pra_C05~999"
    Campos[08]="Dias~Pra_C06~999"
    Campos[09]="."
    HelpD(05,10,_Prazos,2,Campos,2,"Pra_Cod")
Endif

// REPRESENTANTES
If Var_in_Get=="M_Rep_Codi" .Or. Var_in_Get=="M_Rep_Repr" .Or. Var_in_Get=="M_Cli_Repr";
    .Or. Var_in_Get=="M_Nf_Repr" .Or. Var_in_Get=="M_Dup_Repr".Or. Var_in_Get=="M_Repr"
    Sele &_Repres
    Campos[01]="Help De REPRESENTANTES"
    Campos[02]="Representante~Rep_Raza~@!~2"
    Campos[03]="Cod.~Rep_Codi~99999~1"
    Campos[04]="."
    HelpD(05,10,_Repres,2,Campos,2,"Rep_Codi")
Endif

// CONTA CORRENTE
If Var_in_Get=="M_Con_Codi" .Or. Var_in_Get=="M_Cai_Con" .Or. Var_in_Get=="M_BPa_Con";
    .Or. Var_in_Get=="M_BCh_Con" .Or. Var_in_Get=="M_BDu_Con" .Or. Var_in_Get=="M_Dup_Conta";
    .Or. Var_in_Get=="M_Bdu_Con" .Or. Var_in_Get=="M_Ent_Con"
    Sele &_Conta
    Campos[01]="Help de CONTA CORRENTE"
    Campos[02]="Titular~Con_Tit~@!~2"
    Campos[03]="Conta~Con_Codi~999999999999~1"
    Campos[04]="Dig.~Con_DCon~9"
    Campos[05]="."
    HelpD(05,10,_Conta,2,Campos,2,"Con_Codi")
Endif

// CFOP
If Var_in_Get=="M_Cfo_Codi" .Or. Var_in_Get=="M_Cfo_Desc" .Or. Var_in_Get=="M_Nf_CCfo" .Or. Var_in_Get=="M_Cli_Cfop";
    .Or. Var_in_Get=="M_CCfo"
    Sele &_Cfop
    Campos[01]="Help De C.F.O.P."
    Campos[02]="Descricao~Cfo_Desc~@!~2"
    Campos[03]="Codigo~Cfo_Codi~99999~1"
    Campos[04]="Natureza 1~Cfo_Nat1~9999"
    Campos[05]="Natureza 2~Cfo_Nat2~9999"
    Campos[06]="Reducao~Cfo_Redu~999.99"
    Campos[07]="Aliquota~Cfo_AIcm~999.99"
    Campos[08]="."
    HelpD(05,10,_Cfop,2,Campos,2,"Cfo_Codi")
Endif

// DESPESAS
If Var_in_Get=="M_Des_Codi" .Or. Var_in_Get=="M_Pag_Conta" .Or. Var_In_Get == "M_Eti_Cont";
    .Or. Var_In_Get == "M_For_Desp" .Or. Var_In_Get == "M_Pci_Des" .Or. Var_In_Get == "M_Ins_Cont";
    .Or. Var_In_Get == "M_Mat_Cont" .Or. Var_In_Get == "M_Cus_Cont"
    Sele &_Despesas
    Campos[01]="Help De DESPESAS"
    Campos[02]="Despesa~Des_Nome~@!~2"
    Campos[03]="Conta~Des_Codi~9.99.999.9999~1"
    Campos[04]="."
    HelpD(05,10,_Despesas,2,Campos,2,"Des_Codi")
Endif

// HISTORICO
If Var_in_Get=="M_His_Codi" .Or. Var_in_Get=="M_Cai_His"
    Sele &_Historico
    Campos[01]="Help De HISTORICOS"
    Campos[02]="Historico~His_Desc~@!~2"
    Campos[03]="Conta~His_Codi~999~1"
    Campos[04]="Tipo~His_Tipo~@!"
    Campos[05]="."
    HelpD(05,10,_Historico,2,Campos,2,"His_Codi")
Endif

//  MATERIAIS                 
If Var_in_Get=="M_Mat_Codi"
    Sele &_MATERIAIS
    Campos[01]="Help De MATERIAIS "
    Campos[02]="Material~Mat_Nome~@!~2"
    Campos[03]="Codigo~Mat_Codi~999999~1"
    Campos[04]="."
    HelpD(05,10,_MATERIAIS,2,Campos,2,"MAT_Codi")
Endif

//  EMITENTE
If Var_in_Get=="M_Emi_Codi"
    Sele &_Emiten
    Campos[01]="Help De EMITENTES"
    Campos[02]="Emitente~Emi_Nome~@!~2"
    Campos[03]="Codigo~Emi_Codi~999999~1"
    Campos[04]="CGC~Emi_Cpf~99999999999999"
    Campos[05]="."
    HelpD(05,10,_Emiten,2,Campos,2,"Emi_Codi")
Endif

//  CLIENTES  &  FORNECEDORES
If Var_in_Get=="M_Nf_Clie"
    If M_Nf_Tipo == "D" .OR. M_Nf_Tipo == "R"
       Sele &_Fornece
       Campos[01]="Help De FORNECEDORES"
       Campos[02]="Fantasia~For_Fant~@!~3"
       Campos[03]="Codigo~For_Codi~99999~1"
       Campos[04]="Razao Social~For_Rzso~@!~2"
       Campos[05]="."
       HelpD(05,10,_Fornece,3,Campos,3,"For_Codi")
    Else
       Sele &_Cliente
       Campos[01]="Help De CLIENTES"
       Campos[02]="Fantasia~Cli_Fant~@!~2"
       Campos[03]="Codigo~Cli_Codi~99999~1"
       Campos[04]="."
       HelpD(05,10,_Cliente,2,Campos,3,"Cli_Codi")
    Endif
Endif

//  CLIENTES  &  FORNECEDORES
If Var_in_Get == "M_Ent_For"
    If M_Ent_Tip == "F"                       
       Sele &_Fornece
       Campos[01]="Help De FORNECEDORES"
       Campos[02]="Fantasia~For_Fant~@!~3"
       Campos[03]="Codigo~For_Codi~99999~1"
       Campos[04]="Razao Social~For_Rzso~@!~2"
       Campos[05]="."
       HelpD(05,10,_Fornece,3,Campos,3,"For_Codi")
    ElseIf M_Ent_Tip == "C"                       
       Sele &_Cliente
       Campos[01]="Help De CLIENTES"
       Campos[02]="Fantasia~Cli_Fant~@!~2"
       Campos[03]="Codigo~Cli_Codi~99999~1"
       Campos[04]="."
       HelpD(05,10,_Cliente,2,Campos,3,"Cli_Codi")
    Endif
Endif

//  INSUMOS  &  MATERIAIS  &  PRODUTOS DE TERCEIROS
If Var_in_Get == "M_Eti_Pro" .Or. Var_in_Get == "M_Pci_Pro" .Or. Var_in_Get == "M_Mve_Prod";
    .Or. Var_in_Get == "M_Est_Pro" .Or. Var_in_Get == "M_Cot_Prod"
    M_In_Get := ""
    If Var_in_Get == "M_Eti_Pro"
       M_In_Get := M_Eti_Tip
    ElseIf Var_In_Get == "M_Pci_Pro"
       M_In_Get := M_Pci_Tip
    ElseIf Var_In_Get == "M_Mve_Prod"
       M_In_Get := M_Mve_TPro
    ElseIf Var_In_Get == "M_Est_Pro"
       M_In_Get := M_Est_Tip
    ElseIf Var_In_Get == "M_Cot_Prod"
       M_In_Get := M_Cot_Tipo
    Endif
    If M_In_Get == "M"
       Sele &_Materiais
       Campos[01]="Help De MATERIAIS"
       Campos[02]="Material~Mat_Nome~@!~2"
       Campos[03]="Codigo~Mat_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Materiais,2,Campos,2,"Mat_Codi")
    ElseIf M_In_Get == "I"
       Sele &_Insumo
       Campos[01]="Help De INSUMOS"
       Campos[02]="Insumo~Ins_Nome~@!~2"
       Campos[03]="Codigo~Ins_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Insumo,2,Campos,2,"Ins_Codi")
    ElseIf M_In_Get == "T"
       Sele &_ProTerceiro
       Campos[01]="Help De TECIDOS DE TERCEIRO"
       Campos[02]="Ordem~Pro_Ord~@!"
       Campos[03]="Largura~Pro_Lar~9.999"
       Campos[04]="Cliente~Pro_nCli~@!~4"
       Campos[05]="Codigo~Pro_Cod~@!~1"
       Campos[06]="."
       HelpD(05,12,_ProTerceiro,2,Campos,1,"Pro_Cod")
    Endif
Endif

   // PRODUTO
If Var_in_Get=="M_Ins_Codi" .Or. Var_in_Get=="M_Prod" .Or. Var_in_Get=="M_Prec";
    .Or. Var_in_Get=="M_Pdi_Prod" .Or. Var_in_Get=="M_Ose_Pro" .Or. Var_in_Get=="M_Osi_Pro";
    .Or. Var_in_Get=="M_Sdo_Pro" .Or. Var_in_Get=="M_Ins_Equi"   
    Sele &_Insumo
    Campos[01]="Help De INSUMOS"
    Campos[02]="Insumo~Ins_Nome~@!~2"
    Campos[03]="Codigo~Ins_Codi~999999~1"
    Campos[04]="."
    HelpD(05,10,_Insumo,2,Campos,2,"Ins_Codi")
Endif

//  PROCESSOS
If Var_in_Get == "M_Nfi_Prod"
    If M_Nfi_Tipo == "P"
       Sele &_Proces
       Campos[01]="Help De PROCESSOS INDUSTRIAIS "
       Campos[02]="Processo~Pi_Nome~@!~2"
       Campos[03]="Conta~Pi_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Proces,2,Campos,2,"Pi_Codi")
    Endif
    If M_Nfi_Tipo == "M"
       Sele &_Materiais
       Campos[01]="Help De MATERIAIS"
       Campos[02]="Material~Mat_Nome~@!~2"
       Campos[03]="Codigo~Mat_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Materiais,2,Campos,2,"Mat_Codi")
    Endif
//  If M_Nfi_Tipo == "T"
//     Sele &_ProTerceiro
//     Set Filter To Pro_Cli = M_Nf_Clie
//     Campos[01]="Help De TECIDOS DE TERCEIRO"
//     Campos[02]="Produto~Pro_Des~@!~2"
//     Campos[03]="Largura~Pro_Lar~9.999"
//     Campos[04]="Gramatura~Pro_Gra~9.99999"
//     Campos[05]="Cliente~Pro_nCli~@!~4"
//     Campos[06]="Codigo~Pro_Cod~@!~1"
//     Campos[07]="."
//    HelpD(05,12,_ProTerceiro,2,Campos,1,"Pro_Cod")
//     Set Filter To
//  Endif
    If M_Nfi_Tipo == "T"
       Sele &_Tecido
       Set Filter To Pro_Cli = M_Nf_Clie
       Campos[01]="Help De TECIDOS CLEBA"
       Campos[02]="Ordem~Pro_Ord~@!~2"
       Campos[03]="Tecido~Subs(Pro_Des,1,20)~@!"
       Campos[04]="Cor~Pro_Cor~@!"
       Campos[05]="Preco~Pro_Pre~9999.99~4"
       Campos[06]="Cl.Fiscal~Pro_Clfs~@!~1"
       Campos[07]="."
       HelpD(05,12,_Tecido,5,Campos,1,"Pro_Cod")
       Set Filter To
    Endif

    If M_Nfi_Tipo == "I"
       Sele &_Insumo
       Campos[01]="Help De INSUMOS"
       Campos[02]="Insumo~Ins_Nome~@!~2"
       Campos[03]="Codigo~Ins_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Insumo,2,Campos,2,"Ins_Codi")
    Endif
Endif

// INSUMOS & Materiais
If Var_in_Get == "M_Cus_Prod"
    If M_Cus_Tipo == "M"
       Sele &_Materiais
       Campos[01]="Help De MATERIAIS"
       Campos[02]="Material~Mat_Nome~@!~2"
       Campos[03]="Codigo~Mat_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Materiais,2,Campos,2,"Mat_Codi")
    Endif
    If M_Cus_Tipo == "I"
       Sele &_Insumo
       Campos[01]="Help De INSUMOS"
       Campos[02]="Insumo~Ins_Nome~@!~2"
       Campos[03]="Codigo~Ins_Codi~999999~1"
       Campos[04]="."
       HelpD(05,10,_Insumo,2,Campos,2,"Ins_Codi")
    Endif
Endif

//  PROCESSOS           
If Var_in_Get == "M_Pre_Proc"
    Sele &_Proces
    Campos[01]="Help De PROCESSOS INDUSTRIAIS "
    Campos[02]="Processo~Pi_Nome~@!~2"
    Campos[03]="Codigo~Pi_Codi~999999~1"
    Campos[04]="."
    HelpD(05,10,_Proces,2,Campos,2,"Pi_Codi")
Endif

// FAMILIA
If Var_In_Get == "M_Ins_Fami"
    Sele &_Familia
    Set Order To 2
    Campos[01] = "Help De FAMILIAS DE PRODUTOS QUIMICOS"
    Campos[02] = "Familia~Fam_Nome~@!~2"
    Campos[03] = "Codigo~Fam_Codi~99999~1"
    Campos[04] = "."
    HelpD(05,12,_Familia,2,Campos,1,"Fam_Codi")
Endif

// HISTORICO DE LIQUIDACOES
If Var_in_Get == "M_Hli_Codi"
    Sele &_HistoLiq
    Campos[01]="Help De HISTORICO DE LIQUIDACOES"
    Campos[02]="Historico~Hli_Desc~@!~2"
    Campos[03]="Codigo~Hli_Codi~999~1"
    Campos[04]="."
    HelpD(05,10,_HistoLiq,2,Campos,2,"Hli_Codi")
Endif

// OPERACOES                 
If Var_in_Get == "M_Ope_Codi" .Or. Var_in_Get == "M_Dup_Oper" .Or. Var_in_Get == "M_Bdu_Ope"
    Sele &_Operacoes
    Campos[01]="Help De OPERACOES"
    Campos[02]="Operacao~Ope_Nome~@!~2"
    Campos[03]="Codigo~Ope_Codi~9999~1"
    Campos[04]="."
    HelpD(05,10,_Operacoes,2,Campos,2,"Ope_Codi")
Endif

// CLASSIFICACAO FISCAL
If Var_in_Get == "M_CLA_CODI" .Or. Var_in_Get == "M_Nfi_Clfi"
    Sele &_ClasFisc
    Campos[01]="Help De CLASSIFICACAO FISCAL"
    Campos[02]="Desc.Clas.~Cla_Desc~9999.99.99~2"
    Campos[03]="Codigo~Cla_Codi~999~1"
    Campos[04]="."
    HelpD(05,10,_ClasFisc,2,Campos,2,"Cla_Codi")
Endif

// TIPOS DE VENDAS     
If Var_in_Get == "M_Ven_Codi" .Or. Var_in_Get == "M_Dev_Vend" .Or. Var_in_Get == "M_Nfi_Vend"
    Sele &_Vendas
    Campos[01]="Help De TIPOS DE VENDAS"
    Campos[02]="Tipo De Venda~Ven_Nome~@!~2"
    Campos[03]="Codigo~Ven_Codi~99~1"
    Campos[04]="."
    HelpD(05,10,_Vendas,2,Campos,2,"Ven_Codi")
Endif

// TIPOS DE EMBALAGENS
If Var_in_Get == "M_Nf_Emba" .Or.   Var_in_Get == "M_Emb_Codi"
    Sele &_Embalagem
    Campos[01]="Help De EMBALAGENS "
    Campos[02]="Tipo De Venda~Emb_Nome~@!~2"
    Campos[03]="Codigo~Emb_Codi~99999~1"
    Campos[04]="."
    HelpD(05,10,_Embalagem,2,Campos,2,"Emb_Codi")
Endif

// PRODUTO DE TERCEIRO   
If Var_in_Get == "M_Ind_Arti"
    Sele &_ProTerceiro
   If Var_In_Get == "M_Ind_Arti" 
      Set Filter To Pro_Cli == M_Ind_Clie
   Endif
    Campos[01]="Help De PRODUTOS DE TERCEIRO"
    Campos[02]="Produto~Pro_Des~@!~2"
    Campos[03]="Largura~Pro_Lar~9.999"
    Campos[04]="Gramatura~Pro_Gra~9.99999"
    Campos[05]="Cliente~Pro_nCli~@!~4"
    Campos[06]="Codigo~Pro_Cod~@!~1"
    Campos[07]="."
    HelpD(05,12,_ProTerceiro,2,Campos,1,"Pro_Cod")
   Set Filter To
Endif

// FILIAIS   
If Var_in_Get == "M_Fil_Codi" .Or. Var_in_Get == "M_Nf_Fili" .Or. Var_in_Get == "M_Fili"
    Sele &_Filial
    Campos[01]="Help De FILIAIS"
    Campos[02]="Cliente~Fil_Clie~99999"
    Campos[03]="Endereco~Fil_Ende~@!"
    Campos[04]="Codigo~Fil_Codi~99"
    Campos[05]="."
    HelpD(05,10,_Filial,1,Campos,2,"Fil_Codi")
Endif

// PRECOS
If Var_In_Get == "M_Pre_Codi"
    Campos[01]="Help Da TABELA DE PRECOS"
    Campos[02]="Cor~Pre_Cor~@!~2"
    Campos[03]="Artigo~SubStr(Pre_Arti,1,20)~@!"
    Campos[04]="Processo~Pre_Npi~@!"
    Campos[05]="Cliente~Pre_Clie~9999999"
    Campos[06]="Codigo~Pre_Codi~999999~4"
    Campos[07]="Preco~Pre_V5~99999.99"
    Campos[08]="Preco~Pre_V10~99999.99"
    Campos[09]="Preco~Pre_V20~99999.99"
    Campos[10]="."
    HelpD(05,10,_Precos,2,Campos,2,"Pre_Codi")
Endif

// USUARIOS                 
If Var_In_Get == "M_Usu_Nome"
    Campos[01]="Help De USUARIOS"
    Campos[02]="Usuario~Usu_Nome~@!~1"
    Campos[03]="."
    HelpD(05,10,_Usuarios,1,Campos,1,"Usu_Nome")
Endif

// ICMS             
If Var_in_Get == "M_Icm_Uf"
    Sele &_Icms
    Campos[01]="Help de ICMS"
    Campos[02]="Uf~Icm_Uf~@!~1"
    Campos[03]="Aliquota~Icm_Aliq~99.99"
    Campos[04]="."
    HelpD(05,10,_Icms,1,Campos,1,"Icm_Uf")
Endif

Set Key K_F2 To Helps

Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Insert()
LOCAL ITela, Linha, Coluna

If Var_In_Get == "M_Nf_Clie"  .Or. Var_In_Get == "M_Che_Clie"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_MCli(.F.,"Nota Fiscal")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Clie"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Nf_Repr"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mrep(.F.,"Nota Fiscal")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Repr"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Cli_Repr"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mrep(.F.,"Clientes")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Repr"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Nf_Praz"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mpra(.F.,"Nota Fiscal")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Praz"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Cli_CPag"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mpra(.F.,"Clientes")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Praz"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Nf_Trans"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mtra(.F.,"Nota Fiscal")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Trans"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Cli_Tran"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mtra(.F.,"Clientes")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Trans"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Cli_Rede"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mtra(.F.,"Clientes")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Trans"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Nf_Rede"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mtra(.F.,"Nota Fiscal")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_Rede"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Nf_Ccfo"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mcfo(.F.,"Nota Fiscal")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_CCfo"
   SetPos(Linha,Coluna)
Endif
If Var_In_Get == "M_Cli_Cfop"
   ITela  := EfSaveScreen(00,00,24,79)
   Linha  := Row()
   Coluna := Col()
   Adm_Mcfo(.F.,"Clientes")
   EfRestScreen(00,00,24,79,ITela)
   Var_In_Get = "M_Nf_CCfo"
   SetPos(Linha,Coluna)
Endif

Set Key K_F2 TO Helps

Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Login
//If Abr_Pass() # 0
//   CloseDbf()
//   Return(0)
//Endif
//If !Call_Pass()
//   Closedbf()
//Endif

Get_Usuario()

CloseDbf()
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Sobre
Local Tsobre
If A_Parame() > 0
   CloseDBF()
   Return
Endif
IniMemo(_Parame)
Sele &_Parame
Set Order To 1
Dbseek("001")
Inimemo(_Parame)

TSobre=EfSaveScreen(00,00,24,79)
CorJam3=CORQUA-1
Jan3(07,11,19,70,"SYS-ADM SISTEMA DE CONTROLE ADMINISTRATIVO",2)
Mostra(09,17,"Este software esta licensiado para a empresa ",248)
Mostra(10,17,X_Par_Emp                                      ,249)
Mostra(11,17,"CNPJ "+M_Par_Cgc+ "`a partir de 14/11/2001"   ,248)
Mostra(12,17,"pela SYSPLACE COMPUTADORES E SISTEMAS LTDA-ME",248)
Mostra(13,17,"sob o nro. ADM-02050010002. ",248)
Mostra(16,17,"Suporte : (19) 3408-0207 // 3405-8831  ",249)
Mostra(17,17,"E-Mail Suporte : suporte@sysplace.com.br",249)
INKEY(0)
EfRestScreen(00,00,24,79,Tsobre)
CloseDbf()
Return

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function LeData()
LOCAL MTela, M_Data

If X_Par_Dat == Date()
   Return(0)
Endif

MTela := EfSaveScreen(00,00,24,79)
Do While .T.
   Jan3(09,15,13,65," D A T A   D O   S I S T E M A ", 2)
   Mostra(11,17,"Data Atual ..: " ,240)
   Mostra(12,17,"Nova Data ...: " ,240)
   Mostra(13,17,"(99)Confirma (88)Abandona : " ,240)

   M_Opc := 0
   M_Data := Date()

   Set Color To &CorDispl
   @11,33 Say X_Par_Dat

   Set Color To &CorEntra
   @12,33 Get M_Data
   Read 
   If M_Data < X_Par_Dat
      Aviso("ATENCAO !!!  DATA DIGITADA MENOR QUE A DATA ATUAL  !!! ")
   Endif
   Set Color To &CorDispl
   @12,33 Say M_Data

   Do While M_Opc # 99 .And. M_Opc # 88
      Set Color To &CorEntra
      @13,46 Get M_Opc Pict '99'
      Read
   Enddo
   If M_Opc == 99
      Sele &_Parame
      Set Order To 1
      If DbSeek("001")
         Bloqueia(5)
         Repla  Par_Dat  With   M_Data
         Libera(5)
      Endif
      CloseDbf()
   Endif
   Exit
Enddo
EfRestScreen(00,00,24,79,MTela)
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Reorganiza()
Run Cd\SYSADM\CLE\INDICES
Run Del *.Ntx
Run Cd\SYSADM\CLE\INDTESTE
Run Del *.Ntx
Run Cd\SYSADM\CLE\SISTEMAS
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function D_User
Bloqueia(5)
Repla  D_Usuario  With  Gpw_User
Libera(5)
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function G_User
Bloqueia(5)
Repla  G_Usuario  With  Gpw_User
Libera(5)
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function Get_Usuario()
PUBLIC Gpw_User, Gpw_Sist, Gpw_Nivel, M_User, Gpw_Excl

If A_Usuarios() # 0
   CloseDbf()
   Return(1)
Endif

Do While .T.
   Jan3(10,20,16,60,"Login "+Abreviado,2)
   Mostra(13,28, "USUARIO ..: "    ,240)
   Mostra(14,28, "SENHA.....: "    ,240)
   Mostra(13,40,  SPACE(10)        ,240)
   Mostra(14,40, Repli(chr(15),8)  ,031)

   M_User := Space(10)

   Set Color To B/W,W+/B
   @13,40 Get M_User Pict '@!'
   Read
   If Empty(M_User)
      Loop
      //Return(1)
   Endif
   Sele &_Usuarios
   Set Order To 1
   If !DbSeek(M_User)
      Aviso("ATENCAO !!! USUARIO "+M_User+" NAO CADASTRADO  < ENTER >")
      Loop
   Endif
   Inimemo(_Usuarios)

   If Empty(M_Usu_Admi)
      Aviso("ATENCAO !!!  UTILIZACAO DESTE SISTEMA NAO E PERMITIDA !!! ")
      Return(1)
   Endif
   Senha := Usu_Senh

   P_Get := Get_Pass(14, 40)
   If Len(P_Get) < 8
      P_Get := (P_Get + Space(8 - Len(P_Get)))
   Endif
   Pass := F_Cripto(P_Get, 8)
   If Pass # M_Usu_Senh
      Aviso("ATENCAO !!! SENHA DE ACESSO AO SISTEMA ESTA INCORRETA !!!")
      Loop
   Endif
   Gpw_Nivel :=  9
   Gpw_User  :=  M_Usu_Nome
   Gpw_Excl  :=  M_Usu_Excl
   Gpw_Sist  :=  "A"
   Exit
Enddo
Sele &_Usuarios
Use
CloseDbf()
Return(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function SetLpt()

Sele &_Parame
Go 1
Inimemo(_Parame)

Sele &_Usuarios
Set Order To 1
If !DbSeek(Gpw_User)
   Aviso("ATENCAO !!!  USUARIO "+Gpw_User+" NAO CADASTRADO < ENTER >")
   Return(0)
Endif
M_Pass_Impr := Usu_Impr

Sele &_Impress
Set Order To 1
If !DbSeek(M_Pass_Impr)
   Aviso("ATENCAO !!!  IMPRESSORA NAO CADASTRADA < ENTER >")
   Return(0)
Endif
Inimemo(_Impress)
ReTurn(0)

* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Function LogDel(M_Arqu, M_Item, M_Area)
Sele &_Log
Set Order To 1
DbAppend()
Bloqueia(5)
Repla  Log_Usua  With  Gpw_User
Repla  Log_Sist  With  Gpw_Sist
Repla  Log_Data  With  Date()
Repla  Log_Hora  With  Time()
Repla  Log_Arqu  With  M_Arqu
Repla  Log_Item  With  M_Item 
Libera(5)
Sele &M_Area
Return(0)

Return(0)

Avatar de usuário

efurlani
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 2
Data de registro: 17 Mar 2016 08:51
Cidade/Estado: São Paulo
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Migrar Clipper para Harbour.

Mensagempor Jairo Maia » 18 Mar 2016 10:20

Olá efurlani,

Montar o .HBP com as informações passadas é até simples, o problema é que isso não é tudo. Como você tem pressa, sugiro você aceitar a sugestão do José, que é contratar um desenvolvedor (ele se propos a isso, veja na mensagem dele) para resolver essa migração, uma vez que como você deixou claro não é um profissional da área.

Porém, a princípio, você precisa explicar o que faz cada uma dessas libs:
Lib NovTerm
Lib Ezequiel
Lib Er_Graf
Lib EfLib
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Migrar Clipper para Harbour.

Mensagempor JoséQuintas » 18 Mar 2016 12:25

E tem também uns OBJ na lista, significa módulo compilado mas sem fonte disponível.

Numa explicação básica:

PRG: fonte Clipper que pode ser compilado com Clipper ou Harbour

OBJ: ao compilar o PRG, é criado um OBJ correspondente.

LIB: podem ser agrupados OBJ e serem agrupados numa LIB, prontos pra uso.

EXE: Junta OBJ, LIB pra gerar o programa propriamente dito.

Pra chegar ao EXE, OBJ e LIB precisam ser do mesmo compilador. Ou é tudo Clipper, ou é tudo Harbour.

Nos seus arquivos, há o uso dos três. PRG, OBJ e LIB

PRG -> ok, vai gerar OBJ

OBJ -> Se tem PRG, gera OBJ, se não tem.... não pode ser usado o OBJ do Clipper pra isso

LIB -> Se tem PRG, chega a uma LIB pra Harbour, se não tem... não pode ser usada a LIB do Clipper pra isso.

Tem LIB que faz parte do Clipper, que tem equivalente no Harbour.
Tem LIB conhecida que fizeram equivalente no Harbour.
E tem LIB que qualquer um pode criar, essas só quem criou é que normalmente pode fornecer outra equivalente.

Então é possível que você não tenha todos os fontes necessários, já que parte da geração usa diretamente OBJ e LIB sem PRG correspondente.
Pode ser que estejam em alguma pasta separada, ou pode ser que o programador não as deixou.
Também pode ser que foram acrescentadas na geração, mas não são usadas.... é difícil mas não impossível.

Basicamente no Harbour é criar um arquivo HBP contendo a lista de arquivos PRG, sendo o principal o primeiro da lista.
Acho que antes de mexer no fonte, vai ter que confirmar se tem todos os PRGs necessários, ou o que poderia fazer para o que faltar.
Criado esse HBP, é compilar e ver as mensagens de erro mostrando o que está faltando.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Migrar Clipper para Harbour.

Mensagempor JoséQuintas » 18 Mar 2016 12:39

Em formato HBP, mostrando a parte com origem desconhecida:

Adm_Menu.Prg
Adm_MPar.Prg
Adm_Mchq.Prg
Adm_MFor.Prg
Adm_MCli.Prg
Adm_MRep.Prg
Adm_MCid.Prg
Adm_MPro.Prg
Adm_MMes.Prg
Adm_MTra.Prg
Adm_MPra.Prg
Adm_MCfo.Prg
Adm_MPed.prg
Adm_MPe2.prg

\SysSys\publico\__Parame.Prg
\SysSys\publico\__Fornec.Prg
\SysSys\publico\__Cheques.Prg
\SysSys\publico\__Cidade.Prg
\SysSys\publico\__Bancos.Prg
\SysSys\publico\__Conta.Prg
\SysSys\publico\__Transp.Prg
\SysSys\publico\__Repres.Prg
\SysSys\publico\__Prazos.Prg
\SysSys\publico\__Client.Prg
\SysSys\publico\__Produt.Prg
\SysSys\publico\__MvEsto.Prg
\SysSys\publico\__CFOP.Prg
\SysSys\publico\__PdFixo.Prg
\SysSys\publico\__PdItem.Prg
\SysSys\publico\__ClasFi.Prg
\SysSys\publico\__NotaFi.Prg
\SysSys\publico\__NotaIt.Prg
\SysSys\publico\__Duplic.Prg
\SysSys\publico\__Despes.Prg
\SysSys\publico\__Pagame.Prg
\SysSys\publico\__EntFix.Prg
\SysSys\publico\__EntIte.Prg
\SysSys\publico\__PcFixo.Prg
\SysSys\publico\__PcItem.Prg
\SysSys\publico\__Histor.Prg
\SysSys\publico\__ConSal.Prg
\SysSys\publico\__Precos.Prg
\SysSys\publico\__Caixa.Prg
\SysSys\publico\__Custos.Prg
\SysSys\publico\__Border.Prg
\SysSys\publico\__CCorre.Prg
\SysSys\publico\__Dias.Prg
\SysSys\publico\__TmpBor.Prg
\SysSys\publico\__Orcame.Prg
\SysSys\publico\__Orcaux.Prg
\SysSys\publico\__Comiss.Prg
\SysSys\publico\__Catego.Prg
\SysSys\publico\__Apurac.Prg
\SysSys\publico\__Impres.Prg
\SysSys\publico\__DupPK.Prg
\SysSys\publico\__Os.Prg
\SysSys\publico\__Tecnic.Prg
\SysSys\publico\__Bdupli.prg
\SysSys\publico\__Agend.prg

-m

#**** faltam
#File \SysSys\funcoes\funfil
#File \SysSys\funcoes\Func97
#File \SysSys\funcoes\Extenso
#File \SysSys\funcoes\FuncSeq

#File Adm_Rinv
#File Adm_Repv
#File Adm_Gnfs
#File Adm_Rnf
#File Adm_Ctab
#File Adm_Rcos
#File Adm_Rdup

#Lib NovTerm
#Lib Ezequiel
#Lib Er_Graf
#Lib EfLib
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Migrar Clipper para Harbour.

Mensagempor JoséQuintas » 18 Mar 2016 12:52

Complemento:

O RMK contém a lista de PRGs, então foi só colocar o nome dentro do HBP

O LNK contém a lista dos OBJs e das LIBs.
Para os OBJs de mesmo nome do PRG, eles já são acrescentados, então não precisa acrescentar nada no HBP

Os indicados com FILE são OBJ, precisa do PRG pra criar, procure PRGs com esses nomes nas pastas.
Se existir, acrescente o nome do PRG na lista

Os indicados com LIB... são LIB, provavelmente gerados através de uma lista de PRGs.

NovTerm.LIB pode ser uma LIB pra trabalhar com terminal Novell, se for isso pode ser dispensada, mas os fontes podem precisar alteração
Ezequiel .LIB, pelo nome, provavelmente criada pelo programador, procure PRGs ou RMK ou LNK
Er_Graf.LIB, pode ser do programador ou de terceiros, procure PRGs ou RMK ou LNK
EfLib .LIB, pode ser do programador ou de terceiros, procure PRGs ou RMK ou LNK

Agora é pesquisar as pastas pra encontrar isso que falta.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Migrar Clipper para Harbour.

Mensagempor CMartins » 24 Mar 2016 20:31

Boa Noite, Boa Páscoa a todos

De um ano atrás para cá migrei todo o meu sistema em Clipper 5.2 para Harbour (console)
com a ajuda de alguns colegas daqui. Tava indo até bem...

De uma semana para cá não consigo compilar mais nada(?). Qualquer tentativa dá como resultado a mensagem mostrada no arquivo em anexo,
na qual inclui o SETHB (sh.bat). (Não descobri como incluir a imagem da tela aqui!)

Já re-instalei o harbour (harbour-nightly-win) , o que não mudou nada!

Acredito que seja alguma besteira idiota na configuração, mas estou há uma semana me debatendo e não consigo descobrir o que aconteceu!

Se alguém tiver alguma ideia por favor me diga. Já estou apelando até para mãe de santo...

Estou usando Windows 7

Abs
Carlos
CMartins
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 6
Data de registro: 22 Abr 2015 12:29
Cidade/Estado: Rio de Janeiro
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Anterior Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 5 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