Cita:
Empezado por Saul Rivera
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
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
[-]
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;
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.