unit falmacendetalle2BIS; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DBCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Mask, db, DBTables, OleCtrls, Grids, DBGrids,variants,tiposdefinidos, ActnList, ImgList, ComCtrls, ToolWin,STRUTILS,FORDEN, ExtDlgs,MATH; type TALMACENDETALLE2BIS = class(TForm) DSALMACENDETALLE2: TDataSource; ToolBar1: TToolBar; bsalir: TToolButton; ActionList1: TActionList; AAltas: TAction; ABajas: TAction; AConsultas: TAction; AModificaciones: TAction; ASalir: TAction; ImageList1: TImageList; OpenPictureDialog1: TOpenPictureDialog; ALISTADO: TAction; Label2: TLabel; ToolButton1: TToolButton; ToolButton2: TToolButton; Panel1: TPanel; DBGrid1: TDBGrid; Label5: TLabel; LVarios: TLabel; Luno: TLabel; Lnum: TLabel; Edit3: TEdit; bACEPTAR: TButton; bCancelar: TButton; Label1: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure BSalirClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure PRIMERO1Click(Sender: TObject); procedure ANTERIOR1Click(Sender: TObject); procedure SIGUIENTE1Click(Sender: TObject); procedure BListadoClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); procedure DSalmacendetalle2DataChange(Sender: TObject; Field: TField); procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure ToolButton3Click(Sender: TObject); procedure DBGrid1TitleClick(Column: TColumn); procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure DBGrid1DblClick(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure DBGrid1CellClick(Column: TColumn); procedure bACEPTARClick(Sender: TObject); procedure bCancelarClick(Sender: TObject); private { Private declarations } F1ENTRA :BOOLEAN; SORDEN:STRING; public { Public declarations } ver: string; ARORDEN : TORDEN; numero:string; Valor :string; Cantidad : string; end; var ALMACENDETALLE2BIS: TALMACENDETALLE2BIS; implementation uses FDLGCLIENTE, RUTINAS, UDMgs, FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FLISTADOS, fprevio, FDLGARTICULOSAUX; {$R *.DFM} procedure TALMACENDETALLE2BIS.BListadoClick(Sender: TObject); var bookmark:tbookmark; begin bookmark:= dmgs.cdsq_almacendetalle2.GetBookmark ; DSalmacendetalle2.DataSet := NIL; // HACE FALTA LISTADOS := tLISTADOS.Create(nil); PREVIO := TPREVIO.Create(NIL); LISTADOS.FRDB.DataSet := DMGS.CDSQ_almacendetalle2; // Path := ExtractFilePath(ParamStr(0)); IF NOT FMENU.VISTACLIENTE THEN LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\almacendetalle2.frf'); LISTADOS.frReport1.Preview := PREVIO.frPreview1; LISTADOS.frReport1.ShowReport; PREVIO.ShowModal; DSalmacendetalle2.DataSet := DMGS.CDSQ_almacendetalle2; LISTADOS.Free; LISTADOS := NIL; PREVIO.FREE; PREVIO := NIL; dmgs.cdsq_almacendetalle2.gotobookmark(bookmark); dmgs.cdsq_almacendetalle2.FreeBookmark(bookmark); end; //*******************************************************************// //*******************************************************************// procedure TALMACENDETALLE2BIS.FormCreate(Sender: TObject); begin NUMERO := ''; try dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name); except end; DMGS.CDSQ_almacendetalle2.CLOSE; ARORDEN := TORDEN.Create(NIL); ARORDEN.CDS := DMGS.CDSQ_almacendetalle2; ARORDEN.nombre := 'CDSQ_almacendetalle2'; { DBCheckBox1.DataSource := Dsalmacendetalle2; DBCheckBox1.DataField := 'imprime'; DBCheckBox1.Visible := False; DBCheckBox1.Color := DBGrid1.Color; DBCheckBox1.Caption := ''; DBGRID1.Fields [0].Visible := false; } //explained later in the article // DBCheckBox1.ValueChecked := 'Yes a Winner!'; // DBCheckBox1.ValueUnChecked := 'Not this time.'; End; procedure TALMACENDETALLE2BIS.FormDestroy(Sender: TObject); begin try dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name); except end; DMGS.CDSQ_almacendetalle2.close; ARORDEN.FREE; ARORDEN := NIL; end; procedure TALMACENDETALLE2BIS.FormShow(Sender: TObject); begin IF (NUMERO <> '') AND (STRTOINT(NUMERO)> 0) THEN BEGIN IF arorden.sORDEN = '' THEN arorden.SORDEN := ' order by fecha_caducidad, cantidad'; WITH DMGS.CDSQ_almacendetalle2 DO BEGIN DMGS.valmacendetalle2.id := NUMERO; DMGS.valmacendetalle2.ORDEN := ARORDEN.SORDEN;//' ORDER BY ID_ARTICULO'; dmgs.valmacendetalle2.TIPO := '1'; OPEN; END; dmgs.PCANTIDAD := 0; DMGS.CDSQ_ALMACENDETALLE2.First; WHILE not dmgs.CDSQ_ALMACENDETALLE2.eof do begin IF DMGS.CDSQ_ALMACENDETALLE2.RecordCount > 0 THEN dmgs.PCANTIDAD := dmgs.PCANTIDAD + DMGS.CDSQ_ALMACENDETALLE2CANTIDAD.AsFloat; dmgs.CDSQ_ALMACENDETALLE2.NEXT; if dmgs.CDSQ_ALMACENDETALLE2.Eof then try // para evitar el error de memoria bloqueada en el server. DMGS.CDSQ_ALMACENDETALLE2.GetNextPacket ; except end; end; DMGS.CDSQ_ALMACENDETALLE2.First; END; F1ENTRA := FALSE; lnum.Caption := cantidad; edit3.Text := cantidad; if (strtoint(cantidad)>1) then begin lvarios.Visible := true; luno.visible := false; end else begin lvarios.Visible := false; luno.visible := true; end; edit3.SetFocus; end; procedure TALMACENDETALLE2BIS.FormKeyPress(Sender: TObject; var Key: Char); VAR AUXI:INTEGER; begin if (ActiveControl=nil) and (key=#13) then begin Perform(WM_NextDLGCtl, 0, 0); key:=#0; end; if (key = #13) and not (DMGS.CDSQ_almacendetalle2.State in [dsedit,dsinsert]) then begin // if dbgrid1.Focused then IF (ACTIVECONTROL IS TDBGRID) THEN begin if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then begin DMGS.CDSQ_almacendetalle2.next; IF DMGS.CDSQ_almacendetalle2.EOF THEN // BALTAS.Click; dbgrid1.selectedindex := 0; end else dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1; end else Perform(WM_NextDLGCtl, 0, 0); key:=#0; end; // if not (activeControl is TDBEdit) then IF (( NOT (DMGS.CDSQ_almacendetalle2.State IN [DSEDIT,DSINSERT]))) THEN begin if ( key <> #27 ) AND (NOT (DMGS.CDSQ_almacendetalle2.ACTIVE)) then key:=#0; end; end; procedure TALMACENDETALLE2BIS.BSalirClick(Sender: TObject); begin close; SELF.ModalResult:=mrOk; end; procedure TALMACENDETALLE2BIS.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=38 then CambiarControl(self,false); if key=40 then CambiarControl(self,true); end; procedure TALMACENDETALLE2BIS.PRIMERO1Click(Sender: TObject); begin DMGS.CDSQ_almacendetalle2.first; end; procedure TALMACENDETALLE2BIS.ANTERIOR1Click(Sender: TObject); begin DMGS.CDSQ_almacendetalle2.Prior; end; procedure TALMACENDETALLE2BIS.SIGUIENTE1Click(Sender: TObject); begin DMGS.CDSQ_almacendetalle2.next; end; procedure TALMACENDETALLE2BIS.FormClose(Sender: TObject; var Action: TCloseAction); begin if (DMGS.CDSQ_almacendetalle2.State in [dsedit,dsinsert]) AND (NOT dmgs.ralmacendetalle2.BUSCANDO) then DMGS.CDSQ_almacendetalle2.Post; Action := caFree; end; procedure TALMACENDETALLE2BIS.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); begin IF DMGS.CDSQ_almacendetalle2.Eof THEN try // para evitar el error de memoria bloqueada en el server. DMGS.CDSQ_almacendetalle2.GetNextPacket ; except end; end; procedure TALMACENDETALLE2BIS.DSalmacendetalle2DataChange(Sender: TObject; Field: TField); begin IF ((DMGS.CDSQ_almacendetalle2.Eof) AND (NOT (DMGS.CDSQ_almacendetalle2.STATE IN [DSEDIT,DSINSERT]))) THEN BEGIN try // para evitar el error de memoria bloqueada en el server. DMGS.CDSQ_almacendetalle2.GetNextPacket ; except end; END; end; procedure TALMACENDETALLE2BIS.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const azul = TColor($FFFFEE);//C1 0000ff rojo ; 00ff00 verde feo ; $ff0000 azul azul2 = TColor($FFFF0F); otro = TColor($2492FF); rojo =TColor($8080FF); verde =TColor($E0FFBB); VAR Check,REG: Integer; begin if ((DMGS.CDSQ_almacendetalle2.RecNo mod 2 )= 0)then If (gdFocused in State) OR (DBGRID1.SelectedRows.CurrentRowSelected ) then BEGIN dbgrid1.canvas.brush.color := OTRO;//clblue DBGRID1.Canvas.Font.Color := CLYELLOW; END else BEGIN dbgrid1.canvas.brush.color := azul//clPaleGreen; END ELSE If (gdFocused in State) then dbgrid1.canvas.brush.color := otro;//clblue // else dbgrid1.canvas.brush.color := azul2;//clPaleGreen; dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State) ; //******************************************************* If (TRIM(Column.Field.Dataset.FieldbyName('IMPRIME').ASSTRING) = '0') then begin REG:=Column.Field.Dataset.RecNo; if ((DMGS.CDSQ_ALMACENDETALLE2.RecordCount mod 2 )= 0)then If (gdFocused in State) then dbgrid1.canvas.brush.color := otro//clblue else dbgrid1.canvas.brush.color := rojo//clPaleGreen; ELSE If (gdFocused in State) then dbgrid1.canvas.brush.color := otro//clblue else dbgrid1.canvas.brush.color := rojo//clPaleGreen; end; If (TRIM(Column.Field.Dataset.FieldbyName('IMPRIME').ASSTRING) = '1') then begin if ((DMGS.CDSQ_ALMACENDETALLE2.RecordCount mod 2 )= 0)then If (gdFocused in State) then dbgrid1.canvas.brush.color := otro//clblue else dbgrid1.canvas.brush.color := verde//clPaleGreen; ELSE If (gdFocused in State) then dbgrid1.canvas.brush.color := otro//clblue else dbgrid1.canvas.brush.color := verde//clPaleGreen; end; dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State); if Column.FieldName = 'IMPRIME' then begin DBGrid1.Canvas.FillRect(Rect); Check := 0; IF ((DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsSTRING='1') OR (DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsSTRING='0')) THEN if DMGS.CDSQ_ALMACENDETALLE2['IMPRIME'] then Check := DFCS_CHECKED ELSE CHECK:=0; DrawFrameControl(DBGrid1.Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK or Check); end else DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; procedure TALMACENDETALLE2BIS.ToolButton3Click(Sender: TObject); BEGIN ARORDEN.ShowModal; end; procedure TALMACENDETALLE2BIS.DBGrid1TitleClick(Column: TColumn); var aux:string; begin // CON ESTA FUNCION ORDENO ASCENDENTE Y DESCENDENTE LAS COLUMNAS // AL PULSAR SOBRE EL TITULO aux := uppercase(column.Field.Name); IF AUX = 'CDSQ_almacendetalle2FECHA_CADUCIDAD' THEN IF dmgs.CDSQ_almacendetalle2.IndexFIELDNameS = '' THEN dmgs.CDSQ_almacendetalle2.IndexFIELDNameS := 'FECHA_CADUCIDAD' // ORDENA ASCENDENTE ELSE DMGS.CDSQ_almacendetalle2.IndexName := 'FECHA_CADUCIDAD'; // ORDENA DESCENDENTE IF AUX = 'CDSQ_almacendetalle2NUMEROSERIE' THEN IF dmgs.CDSQ_almacendetalle2.IndexFIELDNameS = '' THEN dmgs.CDSQ_almacendetalle2.IndexFIELDNameS := 'NUMEROSERIE' // ORDENA ASCENDENTE ELSE DMGS.CDSQ_almacendetalle2.IndexName := 'NUMEROSERIE'; // ORDENA DESCENDENTE IF AUX = 'CDSQ_almacendetalle2CANTIDAD' THEN IF dmgs.CDSQ_almacendetalle2.IndexFIELDNameS = '' THEN dmgs.CDSQ_almacendetalle2.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE ELSE DMGS.CDSQ_almacendetalle2.IndexName := 'CANTIDAD'; // ORDENA DESCENDENTE END; procedure TALMACENDETALLE2BIS.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); VAR PT :TGRIDCOORD; begin PT := DBGRID1.MouseCoord(X,Y); IF PT.Y=0 THEN DBGRID1.Cursor := CRHANDPOINT ELSE DBGRID1.Cursor := CRDEFAULT; END; procedure TALMACENDETALLE2BIS.DBGrid1DblClick(Sender: TObject); begin // hacer que se seleccionen todos, y se deseleccionen. dmgs.cdsq_almacendetalle2.First; while not dmgs.cdsq_almacendetalle2.Eof do begin dmgs.cdsq_almacendetalle2.Next; end; end; procedure TALMACENDETALLE2BIS.ToolButton2Click(Sender: TObject); begin modalresult:= mrok; end; procedure TALMACENDETALLE2BIS.DBGrid1CellClick(Column: TColumn); begin if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='IMPRIME' then BEGIN DMGS.RALMACENDETALLE2.PREGUNTA := FALSE; DMGS.RALMACENDETALLE2.PREGUNTAEDIT := FALSE; DMGS.CDSQ_ALMACENDETALLE2.Edit; IF ((DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString = '0') OR (DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString = '')) THEN DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString := '1' ELSE DMGS.CDSQ_ALMACENDETALLE2IMPRIME.AsString := '0'; DMGS.CDSQ_ALMACENDETALLE2.Post; END; end; procedure TALMACENDETALLE2BIS.bACEPTARClick(Sender: TObject); var aux:integer; begin aux := 0; try aux := strtoint(edit3.Text); if ((aux > strtoint(cantidad)) or (aux<0)) then begin showmessage('La cantidad debe estar entre 0 y '+cantidad); edit3.SetFocus; edit3.Text := cantidad; end else self.modalresult := mrok; except showmessage ('El valor no es válido'); edit3.Text := cantidad; edit3.SetFocus; end; valor := edit3.Text; end; procedure TALMACENDETALLE2BIS.bCancelarClick(Sender: TObject); begin self.modalresult := mrcancel; valor := '0'; end; end. procedure TFDIARIO.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const clPaleGreen = TColor($CCFFCC); clPaleRed = TColor($CCCCFF); otro = TColor($2492FF); azul = TColor($FFFFC1);//0000ff rojo ; 00ff00 verde feo ; $ff0000 azul azul2 = TColor($FFFF0F); verde2 =TColor($CCFF33); rojo2=TColor($4F4FFF); begin end;