Página 1 de 1
Cadastrando o produto chamando de outro modulo.
Enviado: 03 Abr 2005 12:54
por clebermano
Prezados amigos.
Tenho a seguinte situacao
Tenho um modulo de entradas de notas fiscais.
Quando o codigo do produto nao existe eu dou mensagem nao encontrado.
Eu gostaria que deste modulo eu chamasse minha rotina de cadastro e ja cadastrasse na hora
Fiz alguns testes e aconteceu o seguinte.
Se eu chamar a procedure asssim por exemplo.
if eof()
do produto
loop
endif
ae disgrama tudo.
eu gostaria de saber se tem como de dentro do meu modulo de entradas, eu pudesse aproveitar de alguma maneira meu programa de cadastro, sem ter que fazer uma rotina dentro do modulo de entradas.
Agradeco pela atencao.
Enviado: 03 Abr 2005 14:16
por Clipper
Prezado Colega
Isso é relativamente simples de fazer, só vai depender de como você projetou seu sistema, lembre-se que para você usar dessa forma precisará inicializar as váriaveis inerentes ao respectivo cadastro, abrir e restaurar as telas, etc... creio que seu problema maior será quanto a abertura do cadastro, pois é provável que você já abra o cadastro de produtos na rotina de notas fiscais e também abra-os noa rotina de cadastro, dessa forma o arquivo seria aberto 2 vezes o que não é aceito pelo Clipper versão 5.1 e 5.2, com uma certa dose de paciência crio que vocÊ conseguirá facilmente.
Até logo.
Marcelo
Enviado: 03 Abr 2005 22:39
por clebermano
bom vou dar uma estudada na solucao obrigado.
Enviado: 03 Abr 2005 23:56
por janio
Olá Clebermano
Eu utilizo algo semelhante ao que vc tá precisando... e tem funcionado até o momento.
Eu tenho um cadastro de CIDADES e outro cadastro de CLIENTES
No cadastro de clientes, verifico se a cidade do cliente já está cadastrada... se não... deixei a opcao de o usuário, através da tecla de função F03, cadastrar a nova cidade....
O que se deve estar atento é que após chamar a rotina de cadastro de cidades... ao voltar ao cadastro de clientes.... deve-se reabrir todos os arquivos relativos ao cadastro de clientes novamente...
veja,
Código: Selecionar todos
@ 10,15 GET vCIDCLI PICT "@E 9,999" WHEN BUSCA_CID() .AND. CAD_CID() VALID VER_CID()
READ
*** ----------------------------------------------- ***
*** ----------------------------------------------- ***
STATIC FUNCTION BUSCA_CID
MENSAGEM(lf,ci,cf,"<F02> PROCURA CIDADE - <F03> CADASTRA CIDADE")
SET KEY -1 to busca_cidade
RETURN .t.
*** ----------------------------------------------- ***
*** ----------------------------------------------- ***
STATIC FUNCTION BUSCA_CIDADE
SELECT CIDADE
DBSETORDER(2)
GOTO TOP
save screen to BUSCID
PRIVATE GETliST:={}
pesquisa = space(25)
CORES(2)
MENSAGEM(lf,ci,cf,"Digite a Cidade:")
@ lf-01,ci+19 GET pesquisa PICT "!!!!!!!!!!!!!!!!!!!!" Color('&vCOR_GET')
READ
IF LASTKEY() = 27
MENSAGEM(lf,ci,cf,"")
RETURN .F.
ENDIF
IF pesquisa <> space(30)
goto top
SET softseek on
seek pesquisa
SET softseek off
ENDIF
PRIVATE VETCAMPO[1], VETCAB[1]
VETCAMPO[1]:="CIDADE+' | '+ESTADO"
VETCAB[1] :="Cidade Uf"
WIN(07,30,14,66,, vCOR_DBE, vCOR_DB1)
CORES(4)
dbedit(08,31,13,65,VETCAMPO,,,VETCAB,"=")
IF LASTKEY() = 27
SETCOLOR( "" )
RESTORE SCREEN FROM BUSCID
BUSCA_CIDADE()
RETURN (.f.)
ENDIF
vCIDCLI := CODIGO
KEYBOARD CHR(13)
DBSETORDER(1)
RESTORE SCREEN FROM BUSCID
MENSAGEM(lf,ci,cf,"")
RETURN .t.
*** ----------------------------------------------- ***
*** ----------------------------------------------- ***
STATIC FUNCTION CAD_CID
SET KEY -2 to CADCID
RETURN (.t.)
*** ----------------------------------------------- ***
*** ----------------------------------------------- ***
STATIC FUNCTION CADCID
PRIVATE GETLIST:={}
SAVE SCREEN TO CADCID
P16CCID() // aki chamo o meu PRG de cadastro de CIDADES
RESTORE SCREEN FROM CADCID
// reabro todos os arquivos do cadastro de CLIENTES
DBSELECTAREA(1)
DBUSEAREA(,,[A16CLI],[CLIENTE], .T.)
DBSETINDEX("A16CLI")
DBSELECTAREA(2)
DBUSEAREA(,,[A16CID],[CIDADE], .T.)
DBSETINDEX("A16CID")
DBSELECTAREA(3)
DBUSEAREA(,,[A16SGM],[SEGMENTO], .T.)
DBSETINDEX("A16SGM")
DBSELECTAREA(4)
DBUSEAREA(,,[A16OAR],[TITULOS], .T.)
DBSETINDEX("A16OAR")
RETURN .T.
*** ----------------------------------------------- ***
*** ----------------------------------------------- ***
STATIC FUNCTION VER_CID
SELECT CIDADE
DBSETORDER(1)
GOTO TOP
DBSEEK(vCIDCLI)
IF !FOUND()
MSG("** CIDADE NAO CADASTRADA **", , vCOR_MSG, vCOR_MS1)
RETURN .f.
ELSE
@ li+06,ci+49 SAY CIDADE PICT "!!!!!!!!!!!!!!!!!!!!" Color('&vCOR_MOS')
@ li+06,ci+71 SAY ESTADO PICT "!!" Color('&vCOR_MOS')
ENDIF
RETURN .T.
Janio
Enviado: 04 Abr 2005 01:51
por evolver
Cleber eu costumo fazer códigos cujo reaproveitamento seja tão alto que acabe criando uma rotina pra fazer um monte de coisas.
Tente criar seu cadastro de produtos mais ou menos seguindo essa idéia.
Código: Selecionar todos
procedure cad_produtos
local GetList:={} // isso fará com que os gets abertos aqui não se misturem
local v_arquant:=alias() // grave a área de travalho anterior
local v_tela_antiga:=savescreen(0,0,24,79) //tela
local v_posyant=row(),v_posxant=col() // posicao do cursor
// coloque aqui sua tela de cadastro,
// forma de gravar o produto, etc...
select(v_arquant)
restscreen(0,0,24,79,v_tela_antiga)
devpos(v_posyant,v_posxant)
return
Acho que isso dai já te dá uma bela força pra ter uma idéia de como criar módulos de programas onde um é chamado dentro de outro. É mais ou menos o que o jânio quis passar, só dei uma boa simplificada.
Enviado: 04 Abr 2005 08:42
por clebermano
Nossa, muito obrigado, ficou bastante claro, obrigado a todos
Enviado: 18 Abr 2005 20:04
por lucimauro
Caro amigo
eu ja uso isso a muito tempo em meus sistemas, neles eu posso chamar qualquer cadastrado dentro de outro!
Se voce nao tinver consequido, me mande um e-mail , que la posso lhe mandar umas rotinas ok.
t+
Abraços
Lucimauro@sobral.org