Minha rotina: preciso de ajuda
Enviado: 26 Mai 2012 00:53
Boa noite...
Estou precisando de uma pequena ajuda dos colaboradores dêsse forum.
Abaixo segue o código da minha rotina (como disse anteriormente, de forma bem arcaica).
Pois bem, a primeira coisa, se possível, seria fazer uma análise superficial da codificação e adequá-la a um modo mais atualizado, mudando o que for necessário. Creio que, com isso eu me atualizaria um pouco.
Mas, na realidade, o que eu quero mesmo é o seguinte: logo no início, na linha
Ao se entrar com o valor de vQtd, se o mesmo for igual a 1 (uma pessoa) a rotina segue normal. Porém, se for maior que 1 (mais de uma pessoa) abriria uma tela ao lado para digitação dos 4 próximos itens (vRefKg, vRefVr, vBebVr, vSobVr) para "tantas quantas forem as pessoas", acumulando a soma de cada item e, ao final, transportá-las para as variáveis da janela anterior.
Para rodar a rotina será preciso alimentar (via dbu) os arquivos TIPPAGTO (ex: pCodi=10, pDesc="Pagamento em R$") e o arquivo PRECOKG com uma data e um valor qualquer.
Espero não estar abusando dos amigos colaboradores.
Antecipadamente, agradeço a todos...
Gilvandi
Estou precisando de uma pequena ajuda dos colaboradores dêsse forum.
Abaixo segue o código da minha rotina (como disse anteriormente, de forma bem arcaica).
Código: Selecionar todos
*---------------------------------------------------------------------------------------
Function Main()
*---------------------------------------------------------------------------------------
#include "hwgui.ch"
STATIC Thisform
PRIVATE vEdit1 := SPACE(10), vEdit2:="",nLancto:=0,nPrecoDia:=0
PRIVATE oEdit1, oEdit2, oData, oQtd, oRefKg, oRefVr, oBebVr, oSobVr, oTpgto
PRIVATE vData,vQtd,vRefKg,vRefVr,vBebVr,vSobVr,vTpgto
PRIVATE vData :=SPAC(10),vQtd :=0,vRefkg:=0,vRefVr:=0,vBebVr:=0,vSobVr:=0,vTpgto:=SPAC(02)
PRIVATE gData :=SPAC(10),gQtd :=0,gRefkg:=0,gRefVr:=0,gBebVr:=0,gSobVr:=0 //,vTpgto:=SPAC(02)
PRIVATE tmesQtd,tmesRefKg,tmesRefVr,tmesBebVr,tmesSobVr
#define BLUE 16711680
#define DARKBLUE 10027008
#define WHITE 16777215
#define CYAN 16776960
#define BLACK 0
#define RED 255
#define GREEN 32768
#define GRAY 8421504
#define YELLOW 65535
REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
DBSETDRIVER( "DBFCDX" )
SET DELETE ON
SET DATE TO BRIT
SET CENT ON
SET EXCL ON
SET CONF ON
OpenArquivos()
PREPARE FONT oFont002 NAME "Time New Roman" WIDTH 12 HEIGHT -14
PREPARE FONT oFont003 NAME "Time New Roman" WIDTH 09 HEIGHT -14
INIT DIALOG TelaVenda1 TITLE "Venda Diaria Analitica" ICON HIcon():AddResource(1004) ;
AT 370,175 SIZE 830,520 FONT HFont():Add( '',0,-13,400,,,) CLIPPER NOEXIT ;
STYLE WS_POPUP+WS_CAPTION+DS_SYSMODAL +DS_CENTER +WS_SYSMENU+WS_MINIMIZEBOX+WS_SIZEBOX
Thisform := TelaVenda1
PegaUltimoLanc()
MontaTelaVenda()
@185, 68 GET oData VAR vData VALID {||VerData(vData)} PICTURE "99/99/9999" ID 307 SIZE 80, 24 TOOLTIP ""
@185,113 GET oQtd VAR vQtd PICTURE "99" SIZE 30, 24 TOOLTIP "" VALID {||vQtd>0}
@185,158 GET oRefKg VAR vRefKg PICTURE "999.999" SIZE 80, 24 TOOLTIP "" VALID {||CalculaPrato(vRefKg)}
* @185,203 GET oRefVr VAR vRefVr PICTURE "999,999.99" SIZE 80, 24 TOOLTIP ""
@185,248 GET oBebVr VAR vBebVr PICTURE "999,999.99" SIZE 80, 24 TOOLTIP ""
@185,293 GET oSobVr VAR vSobVr PICTURE "999,999.99" SIZE 80, 24 TOOLTIP ""
@185,338 GET oTpgto VAR vTpgto VALID {||VerCodPagto(vTpgto)} PICTURE "99" SIZE 30, 24 TOOLTIP ""
ACTIVATE DIALOG TelaVenda1
RETURN
*---------------------------------------------------------------------------------------
Function VerData(vData)
*---------------------------------------------------------------------------------------
nData:=CTOD(vData)
If DAY(nData)=0
MsgInfo("!!! Data invalida !!!","Mensagem de erro")
vData:=SPAC(10)
oData:Refresh()
oData:SetFocus()
Return.f.
EndIf
If!MsgYesNo("Confirma essa data "+vData+"?","Atencao!!!")
vData:=SPAC(10)
oData:Refresh()
oData:SetFocus()
Return.f.
EndIf
//Verificar se tem pre‡o/Kg cadastrado
SELECT PRECOKG
PRECOKG->(DbGoTop())
If!PRECOKG->(DbSeek(DTOS(nData)))
MsgInfo('Nao tem preco/Kg cadastrado para essa data!!!','ATENCAO!!!')
oData:REFRESH()
Return.f.
Else
nPrecoDia:=PRECOKG->pkValo
@189,418 SAY PadL(Alltrim(TRANSFORM(nPrecoDia,"99,999.99")),10) ;
COLOR RED SIZE 70, 30 FONT oFont003 STYLE SS_RIGHT
EndIf
PegaDadosTotalDia(vData)
PegaDadosTotalMes(vData)
oData:DISABLE()
Return.t.
*---------------------------------------------------------------------------------------
Function CalculaPrato(vRefKg)
*---------------------------------------------------------------------------------------
vRefVr=ROUND(nPrecoDia*vRefKg,2)
@138,207 Say PadL(Alltrim(TRANSFORM(vRefVr,"999,999.99")),10) ;
COLOR BLACK SIZE 120, 24 FONT oFont003 STYLE SS_RIGHT
Return Nil
*---------------------------------------------------------------------------------------
Function VerCodPagto(vTpgto)
*---------------------------------------------------------------------------------------
Select TipPagto
TipPagto->(DbGoTop())
If!TipPagto->(DbSeek(vTpgto))
MsgInfo("!!! Tipo de Pagamento Invalido !!!","Mensagem de erro")
vTpgto:=SPAC(02)
oTpgto:Refresh()
oTpgto:SetFocus()
Return.f.
EndIf
MsgInfo("Pagamento em "+TipPagto->pDesc,"Informacao")
If MsgYesNo("CONFIRMA OS DADOS DIGITADOS?","ATENCAO")
GravaLancto()
If!MsgYesNo("Deseja incluir mais lancamentos?","ATENCAO")
GravaDadosArquivo2()
GravaDadosArquivo3()
TelaVenda1:Close()
EndIf
LimpaVars()
EndIf
Return.t.
*-------------------------------------------------
func gravalancto
*---------------------------------------------------------------------
nLancto=nLancto+1
SELECT VENDIA11
APPEND BLANK
VENDIA11->fRegi = StrZero(nLancto,6)
VENDIA11->fData = CTOD(vData)
VENDIA11->fKilo = vRefKg
VENDIA11->fValo = vRefVr
VENDIA11->fQtde = vQtd
VENDIA11->fPgto = vTpgto
VENDIA11->fBebi = vBebVr
VENDIA11->fSobr = vSobVr
@195,385 SAY StrZero(nLancto,6) COLOR BLUE SIZE 70, 30 FONT oFont003 OF TelaVenda1
gQtd =gQtd +vQtd
gRefkg=gRefKg+vRefKg
gRefVr=gRefVr+vRefVr
gBebVr=gBebVr+vBebVr
gSobVr=gSobVr+vSobVr
MostraDados()
Return Nil
*-------------------------------------------------
Function LimpaVars
*---------------------------------------------------------------------
*vData :=SPAC(10)
vQtd :=SPAC(02)
vRefkg:=0
vRefVr:=0
vBebVr:=0
vSobVr:=0
vTpgto:=SPAC(02)
Get_Refresh()
Return Nil
*-------------------------------------------------
Function Get_Refresh
*---------------------------------------------------------------------
Local TelaVenda1:=GetModalHandle()
*oData :Refresh()
oQtd :Refresh()
oRefkg:Refresh()
*oRefVr:Refresh()
oBebVr:Refresh()
oSobVr:Refresh()
oTpgto:Refresh()
SetFocus(TelaVenda1,307)
Return Nil
*-------------------------------------------------
Function PegaUltimoLanc
*---------------------------------------------------------------------
SELECT VENDIA11
VENDIA11->(OrdSetFocus('nlanc'))
VENDIA11->(DbGoBottom())
nLancto=VAL(VENDIA11->fRegi)
Return Nil
*-------------------------------------------------
Function PegaDadosTotalDia(vData)
*---------------------------------------------------------------------
SELECT VENDIA12
VENDIA12->(OrdSetFocus('ndata'))
VENDIA12->(DbGoTop())
* If VENDIA12->(DbSeek(DTOS(nData)))
If VENDIA12->(DbSeek(DTOS(CTOD(vData))))
gData =DTOC(VENDIA12->mData)
gQtd =VENDIA12->mQtde
gRefkg=VENDIA12->mKilo
gRefVr=VENDIA12->mValo
gBebVr=VENDIA12->mBebi
gSobVr=VENDIA12->mSobr
Else
APPEND BLANK
gQtd =0
gRefkg=0
gRefVr=0
gBebVr=0
gSobVr=0
EndIf
@425, 68 SAY vData COLOR BLUE SIZE 100, 30 FONT oFont003 OF TelaVenda1
MostraDados()
Return Nil
*-------------------------------------------------
Function PegaDadosTotalMes(vData)
*---------------------------------------------------------------------
SELECT VENDAMES
VENDAMES->(OrdSetFocus('AnoMes'))
VENDAMES->(DbGoTop())
* If VENDIA12->(DbSeek(DTOS(nData)))
If VENDAMES->(DbSeek(RIGHT(vData,4)+SUBSTR(vData,4,2)))
tmesData =VENDAMES->mesData
tmesQtd =VENDAMES->mesQtde
tmesRefkg=VENDAMES->mesKilo
tmesRefVr=VENDAMES->mesValo
tmesBebVr=VENDAMES->mesBebi
tmesSobVr=VENDAMES->mesSobr
Else
APPEND BLANK
tmesQtd =0
tmesRefkg=0
tmesRefVr=0
tmesBebVr=0
tmesSobVr=0
EndIf
@705, 68 SAY SUBSTR(vData,4,2)+"/"+RIGHT(vData,4) COLOR BLUE SIZE 100, 30 FONT oFont003 OF TelaVenda1
MostraDadosMes()
Return Nil
*-------------------------------------------------
Function MostraDados()
*---------------------------------------------------------------------
/*
@479,113 SAY StrZero(gQtd,5) COLOR BLUE SIZE 65, 30 FONT oFont003 OF TelaVenda1
@473,158 SAY TRANSFORM(gRefKg,"999.999") COLOR BLUE SIZE 65, 30 FONT oFont003 OF TelaVenda1
@420,203 SAY TRANSFORM(gRefVr,"999,999.99") COLOR BLUE SIZE 120, 30 FONT oFont003 OF TelaVenda1
@460,248 SAY TRANSFORM(gBebVr,"999,999.99") COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1
@460,293 SAY TRANSFORM(gSobVr,"999,999.99") COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1
*/
@450,113 SAY StrZero(gQtd,5) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@450,158 SAY PadL(Alltrim(TRANSFORM(gRefKg,"999.999")),10) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@410,203 SAY PadL(Alltrim(TRANSFORM(gRefVr,"999,999.99")),10) COLOR BLUE SIZE 120, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@450,248 SAY PadL(Alltrim(TRANSFORM(gBebVr,"999,999.99")),10) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@450,293 SAY PadL(Alltrim(TRANSFORM(gSobVr,"999,999.99")),10) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
Return Nil
*-------------------------------------------------
Function MostraDadosMes()
*---------------------------------------------------------------------
@720,113 SAY StrZero(tmesQtd,5) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@720,158 SAY PadL(Alltrim(TRANSFORM(tmesRefKg,"999.999")),10) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@680,203 SAY PadL(Alltrim(TRANSFORM(tmesRefVr,"999,999.99")),10) COLOR BLUE SIZE 120, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@720,248 SAY PadL(Alltrim(TRANSFORM(tmesBebVr,"999,999.99")),10) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
@720,293 SAY PadL(Alltrim(TRANSFORM(tmesSobVr,"999,999.99")),10) COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1;
STYLE SS_RIGHT
/*
@739,113 SAY StrZero(tmesQtd,5) COLOR BLUE SIZE 65, 30 FONT oFont003 OF TelaVenda1
@733,158 SAY TRANSFORM(tmesRefKg,"999.999") COLOR BLUE SIZE 65, 30 FONT oFont003 OF TelaVenda1
@680,203 SAY TRANSFORM(tmesRefVr,"999,999.99") COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1
@720,248 SAY TRANSFORM(tmesBebVr,"999,999.99") COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1
@720,293 SAY TRANSFORM(tmesSobVr,"999,999.99") COLOR BLUE SIZE 80, 30 FONT oFont003 OF TelaVenda1
*/
Return Nil
*-------------------------------------------------
Function GravaDadosArquivo2
*---------------------------------------------------------------------
SELECT VENDIA12
VENDIA12->mData = CTOD(vData)
VENDIA12->mKilo = gRefKg
VENDIA12->mValo = gRefVr
VENDIA12->mQtde = gQtd
VENDIA12->mBebi = gBebVr
VENDIA12->mSobr = gSobVr
* ACUMULA DADOS DO DIA NAS VARIAVEIS DO MES
tmesQtd =tmesQtd +VENDIA12->mQtde
tmesRefkg=tmesRefkg+VENDIA12->mKilo
tmesRefVr=tmesRefVr+VENDIA12->mValo
tmesBebVr=tmesBebVr+VENDIA12->mBebi
tmesSobVr=tmesSobVr+VENDIA12->mSobr
Return Nil
*-------------------------------------------------
Function GravaDadosArquivo3
*---------------------------------------------------------------------
SELECT VENDAMES
VENDAMES->mesData = SUBSTR(vData,4,2)+"/"+RIGHT(vData,4)
VENDAMES->mesKilo = tmesRefKg
VENDAMES->mesValo = tmesRefVr
VENDAMES->mesQtde = tmesQtd
VENDAMES->mesBebi = tmesBebVr
VENDAMES->mesSobr = tmesSobVr
Return Nil
*---------------------------------------------------------------------------------------
Function OpenArquivos()
*---------------------------------------------------------------------------------------
Local vTab1:={},vTab2:={},vTab3:={},vTab4:={}
Local vTab5:={},vTab6:={},vTab7:={},vTab8:={}
Local vTab9:={},vTab10:={}
*==== ARQUIVO VENDA DIA 11 =====
If !File("VENDIA11.DBF")
AADD(vTab1,{"fRegi ", "C", 6, 0 })
AADD(vTab1,{"fData ", "D", 8, 0 })
AADD(vTab1,{"fKilo ", "N", 8, 3 })
AADD(vTab1,{"fValo ", "N",14, 2 })
AADD(vTab1,{"fQtde ", "N", 5, 0 })
AADD(vTab1,{"fPgto ", "C", 2, 0 })
AADD(vTab1,{"fBebi ", "N",14, 2 })
AADD(vTab1,{"fSobr ", "N",14, 2 })
dBCreate("VENDIA11.DBF", vTab1)
EndIf
*==== ARQUIVO VENDA DIA 12 =====
If !File("VENDIA12.DBF")
AADD(vTab2,{"mData ", "D", 8, 0 })
AADD(vTab2,{"mKilo ", "N", 8, 3 })
AADD(vTab2,{"mValo ", "N",14, 2 })
AADD(vTab2,{"mQtde ", "N", 5, 0 })
AADD(vTab2,{"mPgto ", "C", 2, 0 })
AADD(vTab2,{"mBebi ", "N",14, 2 })
AADD(vTab2,{"mSobr ", "N",14, 2 })
dBCreate("VENDIA12.DBF", vTab2)
EndIf
*==== ARQUIVO TIPO DE PAGAMENTO =====
If !File("TIPPAGTO.DBF")
AADD(vTab3,{"pCodi ", "C", 2, 0 })
AADD(vTab3,{"pDesc ", "C",30, 0 })
dBCreate("TIPPAGTO.DBF", vTab3)
EndIf
*==== ARQUIVO VENDA MENSAL =====
If !File("VENDAMES.DBF")
AADD(vTab5,{"mesData ", "C", 7, 0 })
AADD(vTab5,{"mesKilo ", "N", 8, 3 })
AADD(vTab5,{"mesValo ", "N",14, 2 })
AADD(vTab5,{"mesQtde ", "N", 5, 0 })
AADD(vTab5,{"mesBebi ", "N",14, 2 })
AADD(vTab5,{"mesSobr ", "N",14, 2 })
dBCreate("VENDAMES.DBF", vTab5)
EndIf
*======= PREÇO DA REFEIÇÃO ========
If !File("PRECOKG.DBF")
AADD(vTab10,{"pkData", "D", 8, 0 })
AADD(vTab10,{"pkValo", "N",10, 2 })
dBCreate("PRECOKG.DBF", vTab10)
EndIf
IF!FILE( 'VENDIA11.CDX' )
USE VENDIA11
INDEX ON DTOS(VENDIA11->fData) TAG nData TO VENDIA11.CDX
INDEX ON VENDIA11->fRegi TAG nLanc TO VENDIA11.CDX
USE
ENDIF
IF!FILE( 'VENDIA12.CDX' )
USE VENDIA12
INDEX ON DTOS(VENDIA12->mData) TAG nData TO VENDIA12.CDX
USE
ENDIF
IF!FILE( 'TIPPAGTO.CDX' )
USE TIPPAGTO
INDEX ON pCodi TAG codigo TO TIPPAGTO.CDX
USE
ENDIF
IF!FILE( 'VENDAMES.CDX' )
USE VENDAMES
INDEX ON RIGHT(MesData,4)+LEFT(MesData,2) TAG AnoMes TO VENDAMES.CDX
USE
ENDIF
IF!FILE( 'PRECOKG.CDX' )
USE PRECOKG
INDEX ON DTOS(pkData) TAG nData TO PRECOKG.CDX
USE
ENDIF
*=======================================================
USE VenDia11 INDEX VenDia11 NEW //SHARED NEW
SET ORDER TO TAG nData
GO TOP
USE VenDia12 INDEX VenDia12 NEW //SHARED NEW
SET ORDER TO TAG nData
GO TOP
USE TipPagto INDEX TipPagto NEW //SHARED NEW
SET ORDER TO TAG Codigo
GO TOP
USE VendaMes INDEX VendaMes NEW //SHARED NEW
SET ORDER TO TAG AnoMes
GO TOP
USE PrecoKg INDEX PrecoKg NEW
SET ORDER TO TAG nData
GO TOP
Return Nil
*---------------------------------------------------------------------
Function MontaTelaVenda()
*---------------------------------------------------------------------
@ 18, 55,275,465 RECT quadro1 OF TelaVenda1 RECT_STYLE 3
@288, 55,545,465 RECT quadro2 OF TelaVenda1 RECT_STYLE 3
@558, 55,815,465 RECT quadro3 OF TelaVenda1 RECT_STYLE 3
@ 50,25 say "VENDA DIARIA" SIZE 220,30 FONT oFont002
@300,25 say "RESUMO DO DIA" SIZE 250,30 FONT oFont002
@570,25 say "RESUMO DO MES" SIZE 250,30 FONT oFont002
@ 30, 70 Say "Data" SIZE 100,20
@300, 70 Say "Data" SIZE 100,20
@570, 70 Say "Mes/Ano" SIZE 100,20
@ 30,115 Say "Pessoas" SIZE 100,20
@300,115 Say "Pessoas" SIZE 100,20
@570,115 Say "Pessoas" SIZE 100,20
@ 30,160 Say "Refeicao (em Kg)" SIZE 140,20
@300,160 Say "Refeicao (em Kg)" SIZE 140,20
@570,160 Say "Refeicao (em Kg)" SIZE 140,20
@ 30,205 Say "Refeicao (valor)" SIZE 140,20
@138,207 Say PadL(Alltrim(TRANSFORM(vRefVr,"999,999.99")),10) ;
COLOR BLACK SIZE 120, 24 FONT oFont003 STYLE SS_RIGHT
@300,205 Say "Refeicao (valor)" SIZE 140,20
@570,205 Say "Refeicao (valor)" SIZE 140,20
@ 30,250 Say "Bebidas (valor)" SIZE 140,20
@300,250 Say "Bebidas (valor)" SIZE 140,20
@570,250 Say "Bebidas (valor)" SIZE 140,20
@ 30,295 Say "Sobremesa (valor)" SIZE 140,20
@300,295 Say "Sobremesa (valor)" SIZE 140,20
@570,295 Say "Sobremesa (valor)" SIZE 140,20
@ 30,340 Say "Forma de Pagto" SIZE 140,20
@ 30,385 Say "Nro.Lancamento" SIZE 140,20
@195,385 SAY StrZero(nLancto,6) COLOR BLUE SIZE 70, 30 FONT oFont003
@ 30,430 Say "Valor preço/Kg" SIZE 140,20
Return Nil
Mas, na realidade, o que eu quero mesmo é o seguinte: logo no início, na linha
Código: Selecionar todos
@185,113 GET oQtd VAR vQtd PICTURE "99" SIZE 30, 24 TOOLTIP "" VALID {||vQtd>0}
Para rodar a rotina será preciso alimentar (via dbu) os arquivos TIPPAGTO (ex: pCodi=10, pDesc="Pagamento em R$") e o arquivo PRECOKG com uma data e um valor qualquer.
Espero não estar abusando dos amigos colaboradores.
Antecipadamente, agradeço a todos...
Gilvandi