Página 1 de 1

INCLUSÃO / FOR...NEXT

Enviado: 21 Mai 2007 13:23
por Netavin
Bom dia amgios ! Uma boa semana para todos!

Colegas, eu tenho uma rotina de inclusão, onde uso o laço For ...Next para isso. Só é possível porque sei de antemão quantos registros vou incluir. E essa quantidade varia de 1 até 21 ítens. Mas eu gostaria de eliminar o passo inicial, que seria contar os ítens a incluir. Nesse caso, creio que deveria abandonar esse método( For...next). Poderiam me dar uma idéia de outro procedimento ?

Grato!

[]´s

Netavin.

Enviado: 21 Mai 2007 13:41
por Pablo César
Caro Netavin, boa semana pra você também !;

Poderia colocar seu exemplo. Por quê você gistaria de eliminat o FOR ... NEXT ?. Não estou entendendo ao que você se refere. :-o

Re: INCLUSÃO / FOR...NEXT

Enviado: 21 Mai 2007 13:46
por Maligno
Netavin escreveu:Nesse caso, creio que deveria abandonar esse método( For...next). Poderiam me dar uma idéia de outro procedimento ?
Um laço será de uso obrigatório ou não dependendo de onde e como vêm esses dados. Se você não especificar isso, não tem como opinar a respeito. :)

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 21 Mai 2007 14:00
por Pablo César
Digamos que para o seu caso, a utilização do FOR... NEXT seja para estar em looping e contando os casos. podendo mesmo a utilizar um DO WHILE de 1 ao 21 também.

Se a intenção é eliminar alguma verificar que condiciona a inclusão, você poderá fazé-la dentro do LOOPING, colocando as condições dentro dela.

Se a condição de cada elemento, for simples, faça um DO CASE.
Agora se são várias condições, e ela até possam serem combinadas ou entrelaçadas. Isto é, uma condição depende da outra: faça com IFs e crie inicialamente uma variável "negativa" que ora passando por esses IFs venham a atribuir essa mesma variável como "verdadeira". Exemplo:

FOR I=1 TO 21
VFACA:=.F.
IF ..
VFACA=.T.
ELSE
IF VFACA=.T. .AND. VCPODE() // Poderias colocar uma função de consulta que retorne .T. ou .F.
VFACA:=.T.
ENDIF
ENDIF
NEXT

Mas como saber bem o que você está precisando se sabemos quais seria a sua necessidade. Coloque seu exemplo ou código fonte e iremos ajudá-lo.

Um clip-abraço :)Pos

Enviado: 21 Mai 2007 14:21
por sygecom
Buenas...
E essa quantidade varia de 1 até 21 ítens. Mas eu gostaria de eliminar o passo inicial, que seria contar os ítens a incluir. Nesse caso, creio que deveria abandonar esse método( For...next).
Tche, eu não entendi...bem o que vc quer...mas abaixo tem um exemplo de como faço para usar FOR/NEXT.

Veja um exemplo abaixo:

Código: Selecionar todos

*INICIO DO EXEMPLO1
vdata1=date()
vdata2=date()+30
vdif=vdata1-vdata1
vCOD=1

FOR i=1 to vdif
      REPL DATA WITH DATA1
      REPL COD  WITH VCOD
NEXT
DBCOMMIT()
DbUnlock()
*FIM DO EXEMPLO1

*INICIO DO EXEMPLO2
vdata1=date()
vdata2=date()+30
vdif=vdata1-vdata1
vCOD=1
vCAMPO=0

vARQ:={}
FOR i=1 to vdif
    vCAMPO=vCAMPO+1 
    aadd( vARQ, {vCAMPO,      "N", 6,0} )
NEXT
aadd( vARQ, {"DESCRICAO","C" ,50,0} )
aadd( vARQ, {"DATA_VENC", "D",  8,0} )
aadd( vARQ, {"VALOR",         "N", 12,2} )
DBcreate("C:\TEMP.DBF", vARQ)
*FIM DO EXEMPLO2
Tche. foi como eu disse não entendi...exatamente o que vc quer...mas ai esta dois simples exemplos...

Abraços
Leonardo Machado

Enviado: 21 Mai 2007 14:30
por Maligno
Duvido muito que alguém vá entender o teor do problema que aflige o colega até ele especificar exatamente do que se trata. Se a gente for ficar especulando o que poderia ser, até pode ser que alguém acerte um "chute". Mas até isso acontecer, essa thread vai longe. :)

[]'s
Maligno
http://www.buzinello.com/prg

Enviado: 21 Mai 2007 14:37
por sygecom
Duvido muito que alguém vá entender o teor do problema que aflige o colega até ele especificar exatamente do que se trata. Se a gente for ficar especulando o que poderia ser, até pode ser que alguém acerte um "chute". Mas até isso acontecer, essa thread vai longe. :)
Verdade Maligno, olha como ficou a do Colega SCOM sobre os registro em Branco....

Abraços
Leonardo Machado

Enviado: 21 Mai 2007 14:41
por Maligno
sygecom escreveu:olha como ficou a do Colega SCOM sobre os registro em Branco....
Sim, mas foi bem diferente. Lá houve uma discussão paralela que nada tinha a ver com o problema do colega.

[]'s
Maligno
http://www.buzinello.com/prg

For next

Enviado: 22 Mai 2007 08:49
por Netavin
Bom dia a todos!
Sei q a melhor maneira de analisar é vendo os códigos. É que toma tanto espaço. Quando programava em MBasic, trocentos anos atrás, o For ...next para mim tinha outras utilizações. Eu não imaginava que poderia utilizá-lo como uso agora nesta rotina de inclusão. Porisso estou achando q não é o melhor caminho. Apenas isso. Mas está aí a rotina. Funciona 90%. Não me permite, por exemplo, voltar ao Get anterior se eu precisar.

/* >>> InclusÆo de Toras no Estoque <<< */
/*****************************************/
Function INCL_EST
PUBLIC VEND
Set Key -4 to Con_esse /* Pesquisa nome de essˆncias */
Set Key -5 to
Set Cursor off
Use CADTORA Index placa,esse,roma

If !File("Placa.ntx")
Index on Plac to Placa
Else
Set Index to placa
Endif
If !File("esse.ntx")
Index on esse to esse
Else
Set Index to esse
Endif
If !File("roma.ntx")
Index on roma to roma
Else
Set Index to roma
Endif
Set Index to placa,esse,roma
Reindex
OrdSetFocus(1)
Set Uniq on

Do While .t.
Set Color to
Set Escape on
Set Cursor on

/* Cria vari veis */
Tm3 :=0
Tpg :=0
MARC :=0
VDTEN :=DATE() /* Data de cadastro do Romaneio */
VROMA :=0 /* N§ do romaneio */
ro_imp:=0
VQTD :=0 /* Quantidade de toras do Romaneio */
VVEND :=Space(15) /* Nome do vendedor/Toreiro */
VFRET :=Space(15) /* Nome do freteiro se houver */
Linha :=22

LIN46()

@ 46,53 Say "<F5>"
Setcolor("W/N")
@ 46,58 Say "Lista das Essencias"
Setcolor("B/W,W/B")

/* Desenha o quadro */
DispBox(16,00,43,79,chr(219),"BG/W")
DispBox(43,00,45,79,chr(219),"bg/w")
@ 17,01 Clear to 42,78
@ 44,01 Clear to 44,78
@ 48,03 Say PADC(" Entrada de toras no estoque ",75)
Setcolor("N/W,W/B")
Set Cursor on
@ 18,03 Say "Data:" Get vdten
@ 18,21 Say "N§ romaneio:" Get vroma Pict "99999" Valid (N_roma(vroma))
@ 18,41 Say "Qtde :" Get VQTD Pict "99" Valid(C_QDE(VQTD)) When Dica(19,40,"Qte itens")
@ 18,53 Say "Toreiro:" Get vvend Pict "@!" Valid !empty(vvend)
@ 19,52 Say "Freteiro:" Get VFRET Pict "@!" Valid Dicafinal()
Setcolor("r/w")
@ 20,01 Say Repl("-",78)
Setcolor("N/W,W/B")
Save Screen to Limpadica
Read
Set Cursor off
Restore Screen From Limpadica

If Lastkey() = 27
Tone(1700,1)
Alert("Opera‡Æo abortada!")
DbCloseAll()
Rest Screen from Tel1
Exit
Endif
For X = 1 to VQTD
VPLAC=0 /* N§ da plaqueta */
VESSE=Space(16) /* Nome da essˆncia */
VDIAM=0 /* Diƒmetro da tora */
VCOMP=0 /* Comprimento da tora */
VDESC=0 /* Desconto em Cm */
VTDES=0 /* Total do desconto e M3 */
VTTM3=0 /* Total da tora em M3 */
VVLM3=0 /* Valor por M3 em R$ */
VVLPG=0 /* Valor pago na tora */
@ 21,02 Say "Placa"
@ 21,10 Say "Esp‚cie"
@ 21,29 Say "Diƒm"
@ 21,36 Say "Comp"
@ 21,44 Say "Desc"
@ 21,51 Say "Vlr/M3"
@ 21,60 Say "Ttl M3"
@ 21,70 Say "Vlr pago"
Set Cursor on
@ Linha,02 Get VPLAC Pict "99999" Valid !EMPTY(VPLAC>0)
Read
Set Cursor off
If Lastkey() = 27
Tone(1700,1)
Alert("Romaneio Cancelado!")
DbCloseAll()
Rest Screen from Tel1
Exit
Endif

Seek VPLAC

If Found()
Set Cursor off
Tone(1800,1)
Alert("Plaqueta j cadastrada!")
Tone(1700,1)

If OPC:=Alert("Continuar?",{"Sim","NÆo"},"W/B") = 1
X = X - 1
Set Cursor on
Loop
Else
DbCloseAll()
Rest Screen from Tel1
Exit
Endif
Else
Setcolor("N/BG")

If X = VQTD
@ 45,18 Clear to 45,63
@ 45,18 Say " Cadastrando £ltimo item do romaneio n§ "+Alltrim(STR(VROMA))
Else
@ 45,18 Say " Cadastrando item n§ "+Alltrim(str(x))+"/"+Alltrim(STR(VQTD))+" do Romaneio n§ "+Alltrim(str(vroma))+" "
Endif
Set Cursor on
Setcolor("N/W,W/B")
@ Linha,10 Get VESSE Pict "@!" Valid((TEM(VESSE)))
@ Linha,29 Get VDIAM Pict "9.99" Valid Diametro(VDIAM)
@ Linha,36 Get VCOMP Pict "99.99" Valid Valida(VCOMP)
@ Linha,44 Get VDESC Pict "9.99" Valid (VDESC < vdiam)
@ Linha,51 Get VVLM3 Pict "@E 999.99" Valid Verif_vlr(VVLM3)
Read
Set Cursor off

If Lastkey()=27
Tone(1700,1)
Alert("Romaneio cancelado!")
Exit
Endif

/* >>>> Aqui ‚ feito o c lculo da tora <<<< */

VTDES:=(vdesc^2)*vcomp*0.7854
VTTM3:=((vdiam^2)*vcomp*0.7854)-(vdesc^2)*vcomp*0.7854
VVLPG:=VTTM3*VVLM3

SetColor("w/b")

@ Linha,60 Say Transform(vttm3, "@e 99.999")
@ Linha,70 Say Transform(vvlpg, "@e 9,999.99")

Setcolor("N/W,W/B")
ro_imp=vroma /* Informa‡Æo para a fun‡Æo Impr_ro2 */
ro_ven=vvend /* Idem */

do while .t.

If travarquivo(5)
Appe Blank
Repl PLAC WITH VPLAC,DTEN WITH VDTEN,ROMA WITH VROMA,;
ESSE WITH VESSE,DIAM WITH VDIAM,COMP WITH VCOMP,;
DESC WITH VDESC,TDES WITH VTDES,TTM3 WITH VTTM3,;
VEND WITH VVEND,FRET WITH VFRET,VLM3 WITH VVLM3,;
VLPG WITH VVLPG
Else
loop
Endif

exit
enddo

Tone(1800,1)
Alert("Cadastro",,"W/B")
Commit
Endif

Linha++
Tm3:=Tm3+vttm3
Tpg:=Tpg+vvlpg
@ 44,46 Say "Totais:" + Transform(Tm3,"@e 9,999.999") + " M3"
@ 44,67 Say "R$ " + Transform(Tpg,"@e 9,999.99")
Next

Set Cursor off
Tone(1600,1);Tone(1600,2);Tone(1600,3)
Alert("Fim do Romaneio "+Alltrim(STR(VROMA)),,"w/g")
Setcolor("bg/bg")
@ 45,01 Clear to 45,78
Tone(1700,1)

If Opc:=Alert("Deseja Imprimir?",{"Sim","NÆo"},"w/bg")=1
Set Cursor off
Impr_ro2()
Tone(1700,1)
Set Cursor off
mais:=Alert("Mais Romaneios?",{"Sim","NÆo"})
If mais = 1
Loop
Else
DbCloseAll()
Exit
Endif
Else
Tone(1700,1)
Set Cursor off
opc:=Alert("Mais Romaneios?",{"Sim","NÆo"}, "w/bg")

If opc = 1
Loop
Else
DbCloseAll()
Rest Screen from Tel1
Exit
Endif

Endif

Enddo
DbCloseAll()
Return

[]´s

Netavin

Enviado: 22 Mai 2007 09:13
por Pablo César
Caro colega Netavin,

Pelo que eu conseguí entender, você precisa fazer uma inclusão na qual um dos itens podem ser multiplos e você faz através de um looping (neste caso FOR...NEXT) para tratar cada um deles. Neste caso eu diria que você poderia trabalhar tranquilamente com VETORES. Bem... não sei se você viu, mas eu tenho uma grande tendência a utilizar TBROWSEs. Eu faria tomando o conceito PAI + FILHOS para a inclusão, fazendo através de variáveis+vetores. Esta seria para mim a unica forma de você poder NAVEGAR entre os seus GETs.

Se você tiver paciência, empenho e ainda quiser fazer assim terei todo prazer de lhe ajudar. Tome em conta que você irá resolver uma limitação de navegação acrescentando novas técnicas de programação OOP com TBROWSE.

Mas seria muito melhor você colocar o seu código-fonte, utilizando os recursos de edição/exibição e que mantenha as suas devidas endentações para melhor comprensão do seu código. Se quiser saber a respeito: Clique aqui (Produzir código ou texto com uma largura fixa).

Espero que surjam outras sugestões dos colegas para que você tenha mais opções e escolher a mais apropriada para você. É só dizer...

Um clip-abraço :)Pos

Enviado: 22 Mai 2007 09:42
por sygecom
Maligno escreveu:
sygecom escreveu:olha como ficou a do Colega SCOM sobre os registro em Branco....
Sim, mas foi bem diferente. Lá houve uma discussão paralela que nada tinha a ver com o problema do colega.
Até foi diferente desse caso aqui, mas a discussão não foi paralela.....era sobre exatamente o que o colega poderia esta passando ou pecando....

Abraços
Leonardo Machado

Enviado: 22 Mai 2007 10:22
por Pablo César
Gentlemen ! Por favor ! Esse tipo de debate não tá com nada !.
:(Neg
Vamos utilizar os nossos neurônios para ajudar ao colega aqui... vamos lá... :)Pos

For ... next

Enviado: 22 Mai 2007 10:50
por Netavin
ok Pablo !
Sua técnica já me chamou a atenção sim.
Rapaz, não sei nada de Tbrowse e Vetores. Acho que é porque nunca precisei, ou achava que não precisava. Mas lhe afirmo que vou começar a estudar esse assunto ainda hoje.
Eu não sabia como postar código de maneira certa e correta. Vi o link. Nas próximas oportunidades farei uso.

Grato a todos!

[]´s

Netavin.

Re: For ... next

Enviado: 22 Mai 2007 11:10
por Pablo César
Netavin escreveu:Mas lhe afirmo que vou começar a estudar esse assunto ainda hoje.
Que bom. Sei que você sabe... o conhecimento não ocupa espaço e eu ajudarei ao colega para que domine esse dragão !.
Netavin escreveu:Eu não sabia como postar código de maneira certa e correta. Vi o link. Nas próximas oportunidades farei uso.
Desculpe ser chato mas veja que ainda dá... Pra re-editar ver aqui

Para o seu aprendizado e resolver esta sua questão, acho que seria de muita utilidade se nos passasse parte do seu CADTORA.DBF. Veja como eu fiz colocando apenas alguns registros em forma de texto e depois importar para o DBF criado. Isso vai estimular a executar esse módulo seu e deixar ele funcionando. Veja aqui o exemplo

Um clip-abraço :)Pos