Em pleno 2015, resolvi fazer algo que tinha vontade de fazer desde os anos 90. Programação. Tenho feito incontáveis visitas a este fórum, também tenho copiado funções e me aproveitado de duvidas alheias que são sanados pelo nobres usuários. Adquiri livros antigos em Sebos, baixei apostilas e apostilas e tenho me "divertido" bastante. Repito não sou da área e escolhi aprender Clipper pelo saudosismo de um tempo de garoto num balcão de Farmácia onde por telefone um programador de SP me passava orientações "milagrosas" que eu executava na tela preta do DOS e mantinha o sistema funcionando. Guardei isso comigo e agora resolvi aprender um pouco. Enfim estou engatinhando na coisa.
Mas vamos ao problema: criei um sisteminha de controle de estoque para um almoxarifado do orgao que trabalho. Módulos de cadastro de produtos, setores e usuários pronto. Tela de Entradas e Saídas pronto e funcionando. Mas ao tentar fazer uma rotina para consulta as saídas e reimpressão da guia de remessa, empaquei num erro que deve ser simples e obvio, mas pra mim ta difícil.
Ao lançar as saídas, uma função cria um dbf pra ir registrando os itens como numa tela de vendas. Ao final os itens da saída são gravados num DBF onde nele consta também a colunas com Código da saída, setor de destino e usuário que enviou. Noutro DBF registro a Venda totalizada, seu código, seu total, destino, usuário, etc.
Para consultar e reimprimir uma guia de saída, uso a DBEDIT para mostrar o DBF SAÍDAS com uma função para abrir um outro DBEDT com os itens daquela saída em que o cursor estiver posicionado quando dou ENTER. Ate ai tudo bem mas na conclusão da impressão aparecem mais produtos no DBEDT e ao tentar voltar para o DBEDIT anterior ocorre um erro de não localização de uma variável. Essa variável e exatamente um campo do DBF SAÍDAS que gera o primeiro DBEDIT.
Algo como se a área selecionada não estivesse aberta ou o campo não existisse no DBF.
A variavel nao encontrada e SETORDEST, do DBF SAIDAS. Pelo menos e nesta que o programa aborta, nao sei se as demais sao localizadas.
Desculpem-me a extensão do post, prometo ser mais sucinto nos próximos.
Segue o Código, se puderem me ajudar agradeço.
Código: Selecionar todos
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
RESTORE SCREEN FROM TELA1
SET CURSOR OFF
SET SCOREBOARD OFF
SELECT 1
USE SAIDAS
INDEX ON STR(CODSAI,6,0) TO SAIDAS
PUBLIC VETOR1[6],VETOR2[6]
VETOR1[1] = "CODSAI"
VETOR1[2] = "DATASAI"
VETOR1[3] = "SETORDEST"
VETOR1[4] = "TTSAID"
VETOR1[5] = "USUAENV"
VETOR1[6] = "NOMEUSU"
VETOR2[1] = "CàD"
VETOR2[2] = "DATA"
VETOR2[3] = "DESTINO"
VETOR2[4] = "TOTAL"
VETOR2[5] = "MATRICULA"
VETOR2[6] = "ENTREGUE POR"
SELECT 1
SET ORDER TO 1
GOTO TOP
SET COLOR TO W+/R
@ 24,00 SAY " || ENTER: Mostra a Saida Detalhada || ESC: Retorna "
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
@ 0,0 TO 3,79
@ 1,1 CLEAR TO 2,78
@ 1,2 SAY "DATA ATUAL "
@ 2,2 SAY DATE()
@ 1,29 SAY " SEFIN - 6¦ DRRE - SEAP "
@ 2,29 SAY " CADASTRO DE PRODUTOS "
@ 1,65 SAY "HORµRIO ATUAL"
@ 2,65 SAY TIME()
@ 4,0 TO 23,79 DOUBLE
SAVE SCREEN TO DBEDCONSAI
DO DBCONSAI
IF LASTKEY() = 27
CLEAR
*CLOSE DATABASES
RESTORE SCREEN FROM TMENUMOV
RETURN
ENDIF
RETURN
************************************************
PROCEDURE DBCONSAI
DBEDIT(05,01,22,78,VETOR1,"CSAI","@",VETOR2,"ÄÂÄ"," ³ ","ÄÁÄ")
@04,01 CLEAR TO 23,78
RETURN
*******************************************************
FUNCTION CSAI
PARAMETERS modo,campo
IF modo<4
RETURN(1)
ENDIF
dbs = SAVESCREEN(04,01,05,78)
dbt = SAVESCREEN(05,01,22,78)
dba = SAVESCREEN(00,01,25,80)
cExc = "S"
DO CASE
CASE LASTKEY() == 27
RETURN(0)
CASE LASTKEY() == 13
nCodsai = CODSAI
read
DO MOSTRASAIDA
RESTSCREEN(05,01,22,78,dbt)
RETURN(1)
ENDCASE
RETURN(2)
*CLOSE DATABASE
**********************************************************
FUNCTION MOSTRASAIDA
SET CURSOR OFF
SET COLOR TO (W/G,W+/R,B/W+,w+/B,R/W)
DO CRIASAID
SELECT 1
USE SAIDAS
INDEX ON CODSAI TO SAIDAS
SELECT 2
USE SAIDA
INDEX ON STR(ITEM,3,0) TO SAIDA
SELECT 3
USE PRODSAI
INDEX ON STR(CODSAI,6,0) TO PRODSAI
DO WHILE .T.
SELECT 3
USE PRODSAI
INDEX ON STR(CODSAI,6,0) TO PRODSAI
DO WHILE !EOF()
IF CODSAI <> nCodsai
SKIP
LOOP
ENDIF
SELECT 2
APPEND BLANK
REPLACE ITEM WITH PRODSAI->ITEM
REPLACE CODPROD WITH PRODSAI->CODPROD
REPLACE NOMEPROD WITH PRODSAI->NOMEPROD
REPLACE UND WITH PRODSAI->UND
REPLACE QTD WITH PRODSAI->QTD
REPLACE VLUNIT WITH PRODSAI->VLUNIT
REPLACE VLTOT WITH PRODSAI->VLTOT
REPLACE CODSAI WITH PRODSAI->CODSAI
REPLACE DATASAI WITH PRODSAI->DATASAI
SELECT 3
SKIP
ENDDO
DBCOMMIT()
SELECT 2
PUBLIC VETOR1[6],VETOR2[6]
VETOR1[1] = "ITEM"
VETOR1[2] = "CODPROD"
VETOR1[3] = "QTD"
VETOR1[4] = "UND"
VETOR1[5] = "NOMEPROD"
VETOR1[6] = "VLUNIT"
VETOR2[1] = "ITEM"
VETOR2[2] = "CàDIGO"
VETOR2[3] = "QTD"
VETOR2[4] = "UND"
VETOR2[5] = "PRODUTO"
VETOR2[6] = "VALOR"
SELECT 2
SET ORDER TO 1
GOTO TOP
SET COLOR TO W+/R
@ 24,00 SAY " || ENTER: Reimprime a Guia de Saida "
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
@ 0,0 TO 3,79
@ 1,1 CLEAR TO 2,78
@ 1,2 SAY "DATA ATUAL "
@ 2,2 SAY DATE()
@ 1,29 SAY " SEFIN - 6¦ DRRE - SEAP "
@ 2,29 SAY " REIMPRESSAO DE VENDAS "
@ 1,65 SAY "HORµRIO ATUAL"
@ 2,65 SAY TIME()
@ 4,0 TO 23,79 DOUBLE
SAVE SCREEN TO DBEDIMP
DO DBVENDA
IF LASTKEY() = 27
CLEAR
CLOSE DATABASES
RESTORE SCREEN FROM DBEDCONSAI
RETURN
ENDIF
ENDDO
RETURN
************************************************
PROCEDURE DBVENDA
DBEDIT(05,01,22,78,VETOR1,"ISAI","@",VETOR2,"ÄÂÄ"," ³ ","ÄÁÄ")
@04,01 CLEAR TO 23,78
RETURN
*******************************************************
FUNCTION ISAI
PARAMETERS modo,campo
IF modo<4
RETURN(1)
ENDIF
dbs = SAVESCREEN(04,01,05,78)
dbt = SAVESCREEN(05,01,22,78)
dba = SAVESCREEN(00,01,25,80)
cImp = "S"
DO CASE
CASE LASTKEY() == 27
RETURN(0)
CASE LASTKEY() == 13
SET COLOR TO W+/R
@ 20,19 CLEAR TO 22,45
@ 20,19 TO 22,45 DOUBLE
@ 21,20 SAY "RE-IMPRIMIR SAIDA?" GET cImp PICTURE "@!" VALID (cImp $ "SN")
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
READ
IF cImp = "S"
nRelate = nCodsai
dDatasai = DATASAI
read
DO IMPSAIDA
ENDIF
IF cImp = "N"
clear
restore screen from dbedimp
RETURN
ENDIF
RESTSCREEN(05,01,22,78,dbt)
RETURN(1)
ENDCASE
RETURN(2)
CLOSE DATABASE
*************************************************
FUNCTION IMPSAIDA
SET DELETED ON
select 2
nTotali = 0
USE SAIDA
INDEX ON STR(ITEM,3,0) TO SAIDA
go TOP
SUM VLTOT TO nTotali while CODSAI = nCodsai
read
SELECT 3
USE PRODSAI
INDEX ON STR(CODSAI,6,0) TO PRODSAI
DO WHILE .T.
nCodsaii = nRelate
nCodsaif = nCodsaii
cImp = "N"
nPag = 1
READ
IF LASTKEY( ) = 27
EXIT
ENDIF
GO TOP
SEEK STR(nCodsaii,6,0)
IF !FOUND( )
TONE(400,3)
SET COLOR TO BG+/B
@ 9,32 SAY "NAO CADASTRADO"
INKEY(1)
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
LOOP
ENDIF
IF LASTKEY( ) = 27
EXIT
ENDIF
cImp = "S"
read
IF cImp = "S"
DO WHILE .T.
IF !ISPRINTER( )
TONE(400,3)
SET COLOR TO W+/R
@ 20,19 CLEAR TO 22,60
@ 20,19 TO 22,60 DOUBLE
@ 21,20 SAY "PREPARE A IMPRESSORA e ENTER"
tek=INKEY(0)
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
IF tek=27
EXIT
ENDIF
LOOP
ENDIF
SET PRINT TO imp.doc
SET DEVICE TO PRINT
GO TOP
SEEK STR(nCodsaif,6,0)
nCodsetor = CODDEST
cNomesetor = NOMEDEST
nMatricula = MATRICULA
cNomeusu = ENTREGADOR
READ
vcab=.T.
DO WHILE !EOF( )
IF CODSAI > nCodsaif
@ PROW()+2,00 SAY REPLICATE("*",50)
@ PROW() ,51 SAY "TOTAL FINAL.......:" + STR(nTotali,10,2)
@ PROW()+2,00 SAY "ENTREGUE POR: "
@ PROW() ,39 SAY "|"
@ PROW() ,40 SAY "RECEBIDO POR:"
@ PROW()+1,00 SAY cNomeusu
@ PROW() ,39 SAY "|"
@ PROW()+1,00 SAY "MATRICULA: " + STR(nMatricula,11,0)
@ PROW() ,39 SAY "|"
@ PROW()+1,39 SAY "|"
@ PROW()+1,39 SAY "|"
@ PROW()+1,39 SAY "|"
@ PROW()+1,00 SAY "______________________________"
@ PROW() ,39 SAY "|"
@ PROW() ,46 SAY "______________________________"
@ PROW()+1,00 say " Assinatura"
@ PROW() ,39 SAY "|"
@ PROW() ,46 say " Carimbo/Assinatura"
@ PROW()+1,76 SAY "Pag."
@ PROW()+1,70 say nPag
@ PROW()+1,00 SAY REPLICATE("=",80)
EXIT
ENDIF
IF vcab
@ 01,00 SAY REPLICATE("=",80)
@ 02,00 SAY DATE()
@ 02,23 SAY " GOVERNO DO ESTADO DE RONDÔNIA"
@ 02,72 SAY TIME()
@ 03,23 SAY "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
@ 04,23 SAY "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
@ 05,23 SAY " xxxxxxxxxxxxxxxxxx"
@ 06,00 SAY REPLICATE("=",80)
@ 07,23 SAY " GUIA DE REMESSA DE MATERIAIS"
@ 08,00 SAY REPLICATE("=",80)
@ 09,00 SAY "Código do Pedido:" + STR(nCodsaii,6,0)
@ 09,54 SAY "Data da Saída:" + DTOC(dDatasai)
@ 10,00 SAY "SETOR/DESTINO:" + STR(nCodsetor,3,0)
@ 10,20 SAY cNomesetor
@ 11,00 SAY REPLICATE("=",80)
@ 12,00 SAY "ITEM CODIGO UND QTDE PRODUTO Unitario Total"
@ 13,00 SAY REPLICATE("-",80)
vcab = .F.
ENDIF
@ PROW( )+1,01 SAY ITEM
@ PROW( ) ,09 SAY CODPROD
@ PROW( ) ,14 SAY UND
@ PROW( ) ,18 SAY QTD
@ PROW( ) ,26 SAY NOMEPROD
@ PROW( ) ,58 SAY VLUNIT
@ PROW( ) ,70 SAY VLTOT
IF PROW( ) > 60
nPag++
@ PROW( )+1,00 SAY REPLICATE("=",80)
vcab = .T.
ENDIF
SKIP
ENDDO
SET DEVICE TO SCREEN
! C:\WINDOWS\system32\notepad.exe IMP.doc
EJECT
SET COLOR TO W+/R
@ 20,19 CLEAR TO 22,66
@ 20,19 TO 22,66 DOUBLE
@ 21,22 say " IMPRESSAO REALIZADA COM SUCESSO! "
inkey(1)
SET COLOR TO (W/B,W+/R,B/W+,w+/B,R/W)
RETURN
ENDDO
ENDIF
ENDDO
CLEAR
CLOSE DATABASE
RESTORE SCREEN FROM DBEDIMP
RETURN

