PDA

Ver la Versión Completa : Problemas de condicional If


whatson
15-12-2007, 02:08:59
Gracias por atender este mensaje. No he podido lograr que cuando no se encuentre el articulo, me ponga en la LabelError "Clave de Articulo no encontrada"

Le agradezco cualquier comentario.



if Key = VK_RETURN then begin
FormPrincipal.ZQueryProds.Open;
with FormPrincipal.ZQueryProds do begin
If ZQueryProds.Locate('ARTICULO', EditVentas.Text,[loCaseInsensitive]) then begin
.......resto del codigo.........

end;
end
else begin
FormPrincipal.LabelError.Caption := 'Clave de articulo no encontrada';
end;
end;

ixMike
15-12-2007, 02:17:12
Hola Whatson. Bienvenido al club.

El problema está en un punto coma que has puesto antes del esle. Al poner ahí el puntocoma, el else hace referencia a if key = vk_return.

¡Un despite lo tiene cualquiera! ;)


Saludos, y pásate por aquí siempre que lo necesites.



Edito: ahora que lo veo, también sobra un end antes del else. Es decir, quita el "end;" y ponlo después de "LabelError.Caption..." (ves lo que decía de los despistes... :D)

whatson
15-12-2007, 02:42:04
Te agradezco Tu respuesta , en verdad creo que seria necesario pasar todo el codigo para que lo veas:

if Key = VK_RETURN then begin
FormPrincipal.ZQueryProds.Open;
with FormPrincipal.ZQueryProds do begin

If ZQueryProds.Locate('ARTICULO', EditVentas.Text,[loCaseInsensitive]) then begin

// Acciones para una nueva venta
// Voy a obtener el nuevo consecutivo
with FormPrincipal.ZTableConsec do begin
Locate('DATO', 'PARTVTA', [loCaseInsensitive]);
Edit;
FieldByName('Consec').AsInteger :=
FieldByName('Consec').AsInteger + 1;
SIGUIENTE := FieldByName('Consec').AsInteger ;
Post;
end;

FormPrincipal.ZQueryPartsVta.Append;
FormPrincipal.ZQueryPartsVta.FieldByName('VENTA').asString := FormPrincipal.ZQueryVenta.FieldByName('VENTA').asString;
FormPrincipal.ZQueryPartsVta.FieldByName('ARTICULO').asString := EditVentas.Text ;
FormPrincipal.ZQueryPartsVta.FieldByName('CANTIDAD').asString := '1';
FormPrincipal.ZQueryPartsVta.FieldByName('OBSERV').asString := FieldByName('DESCRIP').asString;
FormPrincipal.ZQueryPartsVta.FieldByName('Precio').AsCurrency := FieldByName('Precio1').asCurrency;
FormPrincipal.ZQueryPartsVta.FieldByName('ID_SALIDA').asInteger := SIGUIENTE;
FormPrincipal.ZQueryPartsVta.Post;
FormPrincipal.ZQueryPartsVta.FieldByName('IMPORTE').asCurrency := FieldByName('Precio1').asCurrency;
EditVentas.Clear;
end
else begin
FormPrincipal.LabelError.Caption := 'Clave de articulo no encontada';
end;
end;
EditVentas.Clear;
end;


end;

xEsk
15-12-2007, 05:51:08
Hola whatson, solo como nota para el futuro, es recomendable usar las etiquetas DELPHI cuando pongas código, así será mucho mas fácil entender el código.

Saludos!

whatson
15-12-2007, 19:05:22
Gracias por la recomendacion.
De cualquier forma, Les pido de nuevo su ayuda, ya que no he podido resolverlo.

ixMike
16-12-2007, 00:53:26
Gracias por la recomendacion.
De cualquier forma, Les pido de nuevo su ayuda, ya que no he podido resolverlo.

Creí que ya lo tenías:

Te agradezco Tu respuesta , en verdad creo que seria necesario pasar todo el codigo para que lo veas:



Este código (que es igual que tuyo, pero más "limpio") debería estar bien:


//Si este código está dentro de algún procedure TFormPrincipal.LoQueSea no es necesario poner dentro FormPrincipal.Tabla
if Key = VK_RETURN then //Si se pulsa ENTER
begin
with FormPrincipal.ZQueryProds do
begin
Open;
If Locate('ARTICULO', EditVentas.Text,[loCaseInsensitive]) then
begin
with FormPrincipal.ZTableConsec do
begin
Locate('DATO', 'PARTVTA', [loCaseInsensitive]);
Edit;
FieldByName('Consec').AsInteger := FieldByName('Consec').AsInteger + 1;
SIGUIENTE := FieldByName('Consec').AsInteger ;
Post;
end; //With FormPrincipal.ZTableConsec do
With FormPrincipal.ZQueryPartsVta do
begin
Append;
FieldByName('VENTA').asString := FormPrincipal.ZQueryVenta.FieldByName('VENTA').asString;
FieldByName('ARTICULO').asString := EditVentas.Text ;
FieldByName('CANTIDAD').asString := '1';
FieldByName('OBSERV').asString := FieldByName('DESCRIP').asString;
FieldByName('Precio').AsCurrency := FieldByName('Precio1').asCurrency;
FieldByName('ID_SALIDA').asInteger := SIGUIENTE;
Post;
FieldByName('IMPORTE').asCurrency := FieldByName('Precio1').asCurrency;
EditVentas.Clear;
end; //With FormPrincipal.ZQueryPartsVta do
end //If Locate
else
//begin -> para una sola línea el begin/end después de un else no es necesario
FormPrincipal.LabelError.Caption := 'Clave de articulo no encontada';
//end;
end; //with FormPrincipal.ZQueryProds do
EditVentas.Clear;
end; //If Key = VK_RETURN


Ahora, funciona sólo si estás seguro de que todo lo que se encuentre en ZQueryProds como "ARTICULO" es seguro que también está en ZTableConsec como "DATO", sino, pues necesitarías hacer esta pequeña modificación:


If Locate('ARTICULO', EditVentas.Text,[loCaseInsensitive]) then
begin
with FormPrincipal.ZTableConsec do
begin
If Locate('DATO', 'PARTVTA', [loCaseInsensitive]) then
begin
Edit;
FieldByName('Consec').AsInteger := FieldByName('Consec').AsInteger + 1;
SIGUIENTE := FieldByName('Consec').AsInteger ;
Post;
end //El otro Locate
else
FormPrincipal.LabelError.Caption := 'Clave de articulo no encontada';
end; //With FormPrincipal.ZTableConsec do

{...}

end //If Locate
else
//begin -> para una sola línea el begin/end después de un else no es necesario
FormPrincipal.LabelError.Caption := 'Clave de articulo no encontada';
//end;
end; //with FormPrincipal.ZQueryProds do
EditVentas.Clear;
end; //If Key = VK_RETURN


Nota: repásate el uso de with ... do.
Nota 2: identa tu código (esto es, deja espacios a la izquierda, más espacios cuanto más subniveles de begins, ifs, fors y demás utilices), así será más legible (para los demás y para ti mismo).


Saludos.

whatson
17-12-2007, 19:42:58
ixMike
Gracias. El principal problema fue el mal estilo de programacion, asi como una linea mal colocada en el evento onChange del EditVentas.

Gracias de Nuevo a Todos.
Problema resuelto.

microbiano
18-08-2010, 21:57:15
para un estilo de programacion mas estructurado puedes usar el CNPACK muy bueno que te ayuda a la justificacion del lineas de codigo asi como algunos usos mas.

la liga es:

www.cnpack.org/
http://www.cnpack.org/showlist.php?id=39&lang=en

o en su caso mandame un correo y te lo paso