Ver Mensaje Individual
  #2  
Antiguo 09-05-2019
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Reputación: 21
mRoman Va por buen camino
Cita:
Empezado por Saul Rivera Ver Mensaje
otra Consulta mRoman
yo tengo un cxgrid y hay una columna cantidad yo quiero validar esa columna para que me tire un mj de si la cantidad ingresada sobrepasa la existencia en la base de datos ejemplo

if(gvDataDBTableView1CANTIDAD.EditValue > dmMain2.tblExistenciasCANTIDAD_STOCK.AsFloat ) then
begin
ShowMessage('La cantida ingresada supera la existencia de este prodcuto') ;
end;
tengo este codigo en el boton guardar pero no se si lo hice bien
No lo sé...te marca algún error? O efectivamente debe de mandar el error y no lo hace?
Veo que los tipos de datos son diferentes "EditValue" y "AsFloat".

Normalmente este tipo de validaciones las hago dentro del Query (Select), en tiempo de ejecución, construyo el Query y lo ejecuto:
Código Delphi [-]
              qryKardex.SQL.Add('select a.id_producto,');
              qryKardex.SQL.Add('       b.id_articulo_componente,');
              qryKardex.SQL.Add('       e.descripcion_larga,');
              qryKardex.SQL.Add('       b.cantidad, b.cantidad*'+mskCantidad.Text+' as art_necesarios,');
              qryKardex.SQL.Add('       (select c.existencias');
              qryKardex.SQL.Add('        from kardex_detalle c');
              qryKardex.SQL.Add('        where c.cod_articulo=b.id_articulo_componente');
              qryKardex.SQL.Add('          and c.consec=(select MAX(d.consec)');
              qryKardex.SQL.Add('                        from kardex_Detalle d');
              qryKardex.SQL.Add('                        where d.cod_articulo=c.cod_articulo) )-(b.cantidad*'+mskCantidad.Text+') as diferencia,');
              qryKardex.SQL.Add('       (select c.existencias');
              qryKardex.SQL.Add('        from kardex_detalle c');
              qryKardex.SQL.Add('        where c.cod_articulo=b.id_articulo_componente');
              qryKardex.SQL.Add('          and c.consec=(select MAX(d.consec)');
              qryKardex.SQL.Add('                        from kardex_Detalle d');
              qryKardex.SQL.Add('                        where d.cod_articulo=c.cod_articulo) ) as existencias,');
              qryKardex.SQL.Add('       e.control_existencias,');
              qryKardex.SQL.Add('       case when (select f.cod_articulo');
              qryKardex.SQL.Add('                  from kardex f');
              qryKardex.SQL.Add('                  where f.cod_articulo=b.id_articulo_componente)>=1 then ''S''');
              qryKardex.SQL.Add('       else ''N''');
              qryKardex.SQL.Add('       end as con_kardex,');
              qryKardex.SQL.Add('       e.stock_minimo');
              qryKardex.SQL.Add('from producto a,');
              qryKardex.SQL.Add('     producto_componente b,');
              qryKardex.SQL.Add('     articulo e');
              qryKardex.SQL.Add('where a.id_producto=b.id_producto');
              qryKardex.SQL.Add('  and a.id_producto=:cod_art');
              qryKardex.SQL.Add('  and b.id_articulo_componente=e.cod_articulo');
              qryKardex.SQL.Add('  and e.control_existencias=''S''');
              qryKardex.close;
              qryKardex.ParamByName('cod_art').AsString:=qryArticulo.fieldByName('id_producto').AsString;
              qryKardex.Open;
              qryKardex.First;
              While not(qryKardex.Eof) do
              begin

{sigue mas código...validaciones,etc.}

Observa a "mskCantidad.Text":
Código Delphi [-]
              qryKardex.SQL.Add('                        where d.cod_articulo=c.cod_articulo) )-(b.cantidad*'+mskCantidad.Text+') as diferencia,');

Y mas adelante en el código valido algo como lo que tu quieres hacer:
Código Delphi [-]
                           //VALIDA SI SE QUEDO SIN EXISTENCIAS, CUANDO SEA MENOR A 0 EN "DIFERENCIA"
                            if qryKardex.FieldByName('diferencia').AsInteger<0 then
                            begin
                                P_texto:='Te quedaste sin existencias para el articulo: '+qryKardex.FieldByName('id_articulo_componente').AsString+'-'+
                                                                                          qryKardex.fieldByName('descripcion_larga').AsString+chr(13)+
                                         'Existencias actuales: '+qryKardex.fieldByName('Existencias').AsString+chr(13)+
                                         'Articulos por defatult: '+qryKardex.fieldbyName('cantidad').AsString+chr(13)+
                                         'Cant. registrada en este pedido: '+mskCantidad.Text;
                                Application.MessageBox(Pchar(p_texto),'Error',mb_ok+mb_IconError);
                                edBuscar.SetFocus;
                            end;
                            //VALIDAMOS SI LAS EXISTENCIAS SON MENORES AL STOCK_MINIMO
                            if qryKardex.FieldByName('existencias').AsInteger<=
                               qryKardex.FieldByName('stock_minimo').AsInteger then
                            begin
                                Application.MessageBox('Existencias iguales o por debajo del STOCK MINIMO','Importante AVISO',mb_ok+mb_IconExclamation);
                            end;

Espero te sirva Saúl.

Saludos.

p.d. Para cada pregunta que hagas es un hilo diferente. Deberías haber empezado otro hilo con la pregunta que me hiciste. Aquí recomiendan leer la guia de estilo, ya lo hiciste?. Algún moderador que nos apoye con esto?. Gracias.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 09-05-2019 a las 21:34:17.
Responder Con Cita