PDA

Ver la Versión Completa : No corre


silviodp
11-12-2006, 12:11:50
Hola a todos, alguien puede ver este codigo y decirme como solucionarlo para que se ejecute ya que me da error en el ELSE //(4), y puedo hacerlo andar.

procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
n,m:Variant;
begin //(1)
If Key=#13 Then
begin //(2)
ModuloDatos.TblComprobantes.Active:=True;
If ModuloDatos.TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then
begin //(3)
If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then
begin //(4)
m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];
If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then
begin
TxtSocio.Text:=m;
end;
n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];
If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then
begin
TxtPeriodo.Text:=n;
end;
TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
Confirmar.SetFocus
Else //(4)
begin
ShowMessage('La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!');
(Sender as TDBEdit).SelectAll;
end
Else //(3)
begin
ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
(Sender as TDBEdit).SelectAll;
end; //(3)
end; //(1)
end;


Muchas gracias, saludos.

Silvio.-

Neftali [Germán.Estévez]
11-12-2006, 12:18:42
...ya que me da error en el ELSE //(4)

¿Y qué error te da?

rcarrillom
11-12-2006, 12:54:34
A primera vista a riego de equivocame, antes del Else //4,falta el end que cierra al begin //4

silviodp
11-12-2006, 13:12:53
Uno de los errores que da es mas o menos: "END expected but ELSE", pero si le pongo el END como sugirio rcarrillom, me da otro error ya probe agregando END en todas partes y no hay forma que funcione...

Bicho
11-12-2006, 13:19:25
Hola, parece que está claro,

Cuenta los BEGIN que hay en la función (8) y los END que has puesto (6), te faltan 2.
Prueba a indentar el código para meter los bloques begin-end unos dentro de otros para poder separarlos y tenerlos más claro visiblemente y no te ocurrirá este tipo de errores, que por otra parte es muy común en tipo de código como el que has puesto, con multitud de condiciones.

Ej:

If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then
begin //(4)
m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];
If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then
begin
TxtSocio.Text:=m;
end;
n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];
If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then
begin
TxtPeriodo.Text:=n;
end;
TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
Confirmar.SetFocus;
end;


Espero te sirva.

Saludos

kuan-yiu
11-12-2006, 13:23:37
Te faltan 2 "end", creo que uno antes de cada "else".

Ñuño Martínez
11-12-2006, 13:28:44
...ya que me da error en el ELSE //(4)¿Y qué error te da?

Que haya que preguntar esto a un principiante ya es molesto, ¡pero a alguien que ya lleva 200 mensajes en este foro!

Lo siento, pero es que me saca de quicio :mad: .

silviodp
11-12-2006, 15:26:22
Bueno a mi tambien me sacaste de quicio la verdad!!!!, si pregunto es porque probe un monton de formas y no funciona, no me queda otra alternativa, de ultima el foro es para que nos ayudemos, sino tenes ganas ni siquiera contestes..., quien te crees que sos????????, no sabia que Bill Gate se hacia llamar Ñuño Martinez...

silviodp
11-12-2006, 15:29:49
Solo queria que vieran el codigo ya que por ahi ven errores en el mismo que no me doy cuenta..., nada mas que eso, igual, gracias.

Bicho
11-12-2006, 15:37:10
Jod... comó está la peña últimamente, es que no se puede decir nada a nadie.
Vamos hombre, que estamos en Navidad (casi casi),

Felices fiestas a todos,

Un abrazo

silviodp
11-12-2006, 16:12:41
La verdad que ultimamente hay bastante mala onda en el foro!!!!!

Casimiro Notevi
11-12-2006, 16:34:07
La verdad que ultimamente hay bastante mala onda en el foro!!!!!
¿en qué lo notaste? :confused:
¿verdad que algunos no se dan por aludidos? :D

Lo que hay oir/leer :eek:

Albano
11-12-2006, 16:57:15
Prueba a indentar el código para meter los bloques begin-end unos dentro de otros para poder separarlos y tenerlos más claro visiblemente y no te ocurrirá este tipo de errores
La verdad es que necesitas un poco mas de orden en la manera de redactar tu codigo y tus preguntas en el foro silviodp y con 200 mensajes debes de tener la experiencia de que "mientras mas detalles des en tus hilos, mas rápido obtienes respuesta".
Aqui ya no te debe marcar el error que mencionas.
procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
n,m:Variant;
begin //(1)
If Key=#13 Then
begin //(2)
ModuloDatos.TblComprobantes.Active:=True;
If ModuloDatos.TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then
begin //(3)
If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then
begin //(4)
m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];
If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then TxtSocio.Text:=m;
n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];
If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then TxtPeriodo.Text:=n;
TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
Confirmar.SetFocus
end
Else //(4)
begin
ShowMessage('La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!');
(Sender as TDBEdit).SelectAll;
end;
end
Else //(3)
begin
ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
(Sender as TDBEdit).SelectAll;
end; //(3)
end; //(2)
end; //(1)

Bicho
11-12-2006, 17:05:38
Todo son maneras de trabajar más cómodamente, yo además de indentar el código suelo colocar los begins en la misma linea del condicional, ya que se que el begin esta siempre en la primera linea, pero no donde está el END. Al tenerlo indentado veo claramente el condicional y el END.
Además otra a la que me acostumbro mucho últimamente es a dejar una linea en blanco siempre antes de un condicional o de cualquier bloque begin-end. Vease:

procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
n,m:Variant;
begin //(1)

If Key=#13 Then begin //(2)
ModuloDatos.TblComprobantes.Active:=True;

If ModuloDatos.TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then begin //(3)

If ModuloDatos.TblComprobantes.FieldValues['Estado']<>'P' Then begin //(4)
m:=ModuloDatos.TblComprobantes.FieldValues['Cod_soc'];

If ModuloDatos.TblSocios.Locate('Cod_soc',m,[]) Then TxtSocio.Text:=m;

n:=ModuloDatos.TblComprobantes.FieldValues['Cod_periodo'];

If ModuloDatos.TblPeriodos.Locate('Cod_periodo',n,[]) Then TxtPeriodo.Text:=n;

TxtImporte.Text:=ModuloDatos.TblComprobantes.FieldValues['Importe'];
Confirmar.SetFocus
end
Else begin//(4)
ShowMessage('La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!');
(Sender as TDBEdit).SelectAll;
end;
end
Else begin//(3)
ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
(Sender as TDBEdit).SelectAll;
end; //(3)
end; //(2)
end; //(1)


Cita:
Originalmente Escrito por silviodp
La verdad que ultimamente hay bastante mala onda en el foro!!!!!

¿en qué lo notaste?
¿verdad que algunos no se dan por aludidos?

Ahí le has dado. :D La verdad es que yo no iba por lo que había escrito Ñuño, pero en fin...

Paz hermanos.

Saludos

Ñuño Martínez
11-12-2006, 17:47:10
La verdad es que yo no iba por lo que había escrito Ñuño, pero en fin...

Paz hermanos.

Ciertamente, hoy no debí salir de casa... :(

silviodp
11-12-2006, 18:00:21
Bueno muchas gracias, lo voy a probar...
Disculpen las molestias ocasionadas no fue mi intención, por ahi con 500 mensajes aprendo, gracias a la gente perfecta yo puedo aprender.
Saludos.-

Lepe
11-12-2006, 19:54:37
silviodp ¿no tienes las GExperts (http://www.google.es/url?q=http://www.gexperts.org/tour/&sa=X&oi=smap&resnum=1&ct=result&cd=2&usg=__NoewJ2qr_aJR22gC0BxlfEBLRbg=) instaladas?

Tiene una opción maravillosa: pones el ratón en un begin pulsas CTRL + ALT + < cursor derecho > y te salta a su end correspondiente.

El hecho de "leerte la cartilla" por el mal identado es una crítica constructiva aunque no lo creas, un buen identado hace que encuentres los errores rápidamente, además de ser una de las principales bases en programación.

Añade un :
With Modulodatos do
y verás como el código se clarifica muchísimo más, porque hace las líneas más cortas y por ende lees más rápido.

Si a esto le añades el acceso a campos persistentes tu código quedaría así:

procedure TForm14.DBEdit2KeyPress(Sender: TObject; var Key: Char);
Var
n,m:Variant;
begin //(1)

If Key=#13 Then
with ModuloDatos do
begin //(2)
TblComprobantes.Active:=True;
If TblComprobantes.Locate('Numero',TxtNumero.Text,[]) Then
begin //(3)
If TblComprobantesEstado.Value <>'P' Then
begin //(4)
m:=TblComprobantesCod_soc.Value;
If TblSocios.Locate('Cod_soc',m,[]) Then
TxtSocio.Text:=m;
n:=TblComprobantesCod_periodo.Value;
If TblPeriodos.Locate('Cod_periodo',n,[]) Then
TxtPeriodo.Text:=n;
TxtImporte.Text:=ModuloDatos.TblComprobantesImporte.Value;
Confirmar.SetFocus
end
Else
begin//(4)
ShowMessage('La factura Nº '+TxtNumero.Text+' ya fue cobrada!!!');
(Sender as TDBEdit).SelectAll;
end;
end
Else
begin//(3)
ShowMessage('Factura no encontrada. Verifique el Número de la misma.');
(Sender as TDBEdit).SelectAll;
end; //(3)
end; //(2)
end; //(1)


Fíjate también que he eliminado las líneas en blanco porque hace que tu vista pierda el identado.

Personalmente me gusta colocar el begin debajo de su if ya que aumenta la percepción visual de ese identado; además deja claro que lleva su begin correspondiente y por tanto hay más de una línea de código afectada. Si pones el begin al final de la línea, se olvida muchas veces al leerlo.

Creo que ambas formas de poner el begin pertenecen a estandares distintos, solo es cuestión de decidirse por uno de ellos.

Puede que te parezcan tonterías, el tiempo me dará la razón ;).

Otra cosita más, cuando hiciste ese código estabas algo dormido....
'La factura Nº'+' '+TxtNumero.Text+' '+'ya fue cobrada!!!'
los espacios en blanco que añades a txtnumero se pueden quitar y añadir en el lado izquierdo y derecho, ahorrando 2 concatenaciones de Strings :D

Saludos

DANY
11-12-2006, 21:20:00
Simplemente de acuerdo con el primer comentario de nuño martinez.
Cual es la duda si vos mismo sabes que estan mal los begin end?.
Queres que te resuelvan el trabajo?.
no es una cuestion de mala onda del foro.
A mi siempre me ayudaron, a decir verdad, mas de lo que ayude.
pero siempre con preguntas conceptuales que estoy seguro de que con su sola lectura ayudaban a los demas.
perdon por mi opinion, soy medio zurdo como dicen en latinoamerica.
Saludos...

silviodp
11-12-2006, 21:42:22
DANY yo dije que alguna vez no me ayudaron???, solo que hay formas y formas de decir las cosas, ademas no quiero que ni vos ni nadie haga mi trabajo, (apenas que podras con el tuyo...), solo que pedi ayuda porque habia probado varias formas y no andaba, obvio que sabia que el problema era con el begin-end..., además nunca me ayudaste en nada vos.
Insisto en algo: hay veces que por mas que las cosas sean obvias, para algunos, por ahi para otros no tanto y hay que responder amablemente, no hacerse el "hombre" porque no nos vemos y estamos lejos...

DANY
11-12-2006, 21:46:01
La verdad nunca es triste, lo que no tiene es remedio...
La verdad no ofende.

silviodp
11-12-2006, 21:54:12
Ya lo creo que no ofende, sabio tambien...???, que genio che!!!!, cuando te cruce me das tu autografo???, por favor...

DANY
11-12-2006, 22:01:42
Por respeto al foro, la calidad del mismo y a la ayuda que te brindaron todos.
Me parece que no deberias agredir a los participantes.
Si te sientes agredido es por que debe ser verdad lo que te dicen. Si no, no te sentirias afectado y dirias:"a palabras tontas oidos sordos".

Albano
11-12-2006, 22:07:34
Por respeto a los foristas deberían reservarse esas palabras que no tienen nada que ver con el tema, el foro no es para estas "alegatas"... Si lo que quieren es alegar, yo diría que lo mas conveniente para todos es que se pasen sus correos y se mandem mails.

DANY
11-12-2006, 22:10:05
Tienes razon. Mil disculpas a todos.

Casimiro Notevi
11-12-2006, 22:46:41
Bueno, paz por favor, parece que todo ha sido un mal entendido, Ñuño Martínez sólo pretendía dar un pequeño toque de atención a silviodp, pero de buena manera, sin mala intención. Y como aquí sólo vemos las palabras escritas pero no podemos ver los "gestos" y sonrisas del que escribe, pues sucedió que silviodp lo entendió "de otra manera". Pero no hubo mala intención, eso es seguro.

Y en relación al "problema", el de los "begin end", yo escribo mi código exactamente como lo ha hecho Lepe, creo que es la manera más cómoda para "no perderse".

Ñuño Martínez
12-12-2006, 01:00:50
Gracias, Casimiro, y mis disculpas a todos. Siempre olvido que en los textos escritos es dificil poner entonación, y por mucho que lo intente, no sale.

Si alguna vez nos encontramos, silviodp, te invito a una cena para quitarte el mal sabor de boca y para que veas que no soy tan mal chico. Así que si te pasas por Madrid, avisa. Eso sí, si se apunta más gente que sea "a escote" que mi (micro)sueldo no llega a tanto.

Aquí está mi mano.