Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas de condicional If (https://www.clubdelphi.com/foros/showthread.php?t=51429)

whatson 15-12-2007 02:08:59

Problemas de condicional If
 
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.


Código:


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

Cita:

Empezado por whatson (Mensaje 252879)
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:

Cita:

Empezado por whatson (Mensaje 252879)
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:

Código Delphi [-]
//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:

Código Delphi [-]
    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

Puedes usar CNPack
 
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


La franja horaria es GMT +2. Ahora son las 05:32:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi