Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit taller03 ;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes , SysUtils , Forms , Controls , Graphics , Dialogs , StdCtrls , Grids ,
- ExtCtrls , ComCtrls , Buttons ;
- type
- { TfrmDeposito }
- TfrmDeposito = class(TForm )
- btbModificarSeleccion : TBitBtn ;
- btbMostrarPrecio : TBitBtn ;
- btbMostrarDescripcion : TBitBtn ;
- btbSalir : TBitBtn ;
- btbBuscar1 : TBitBtn ;
- btbAlertaStock1 : TBitBtn ;
- btbGuardar : TBitBtn ;
- ckbActivo : TCheckBox ;
- cmbTipo1 : TComboBox ;
- edtBusqueda : TEdit ;
- edtDescripcion : TEdit ;
- edtCodigo1 : TEdit ;
- edtPrecio1 : TEdit ;
- edtStock1 : TEdit ;
- edtStockMinimo1 : TEdit ;
- edtTipoA1 : TEdit ;
- edtTipoB1 : TEdit ;
- edtTipoC1 : TEdit ;
- gpbTipoMinimo : TGroupBox ;
- gpbStringGrid : TGroupBox ;
- grdDeposito1 : TStringGrid ;
- imgUnju : TImage ;
- lblMensajeBusqueda : TLabel ;
- lblCodigo1 : TLabel ;
- lblCodigo2 : TLabel ;
- lblDescripcion : TLabel ;
- lblPrecio1 : TLabel ;
- lblStock1 : TLabel ;
- lblTipo1 : TLabel ;
- lblStockMInimo1 : TLabel ;
- lblTipoA1 : TLabel ;
- lblTipoB1 : TLabel ;
- lblTipoC1 : TLabel ;
- lblTipoProducto1 : TLabel ;
- lblEstado : TLabel ;
- lblTitulo1 : TLabel ;
- memDescripcion : TMemo ;
- memCodigo : TMemo ;
- memEstado : TMemo ;
- memStock : TMemo ;
- memPrecio : TMemo ;
- memTipo : TMemo ;
- pgcCargarBuscar : TPageControl ;
- pnlPrincipal : TPanel ;
- pnlUnju : TPanel ;
- tbsCargar : TTabSheet ;
- tbsBuscar : TTabSheet ;
- procedure btbAlertaStock1Click (Sender : TObject );
- procedure btbBuscar1Click (Sender : TObject );
- procedure btbGuardarClick (Sender : TObject );
- procedure btbModificarSeleccionClick (Sender : TObject );
- procedure btbMostrarDescripcionClick (Sender : TObject );
- procedure btbSalirClick (Sender : TObject );
- procedure btbMostrarPrecioClick (Sender : TObject );
- procedure btnSalirClick (Sender : TObject );
- procedure edtCodigoChange (Sender : TObject );
- procedure edtPrecioChange (Sender : TObject );
- procedure edtStockChange (Sender : TObject );
- procedure edtTipoAChange (Sender : TObject );
- procedure edtTipoProductoChange (Sender : TObject );
- procedure FormCreate (Sender : TObject );
- procedure imgUnjuClick (Sender : TObject );
- procedure lblStockClick (Sender : TObject );
- procedure pnlUnjuClick (Sender : TObject );
- private
- public
- end;
- TString10 = String[10];
- Tstring50 = String[50];
- TArticulo = record //Tipo Registro de Articulos
- Codigo, Stock: integer;
- Precio_Unitario: real;
- Tipo_Articulo : char;
- descripcion: Tstring50;
- estado: TString10;
- end;
- TListaArticulos = Array[1..100] of TArticulo; // Tipo vector de Articulos
- var
- frmDeposito : TfrmDeposito ;
- Lista_Articulos : TListaArticulos;
- Nro_Articulos,i ,countA, countB, countC, minimoStock,seleccionado : integer;
- modificar : boolean;
- implementation
- {$R *.lfm}
- { TfrmDeposito }
- function BuscarEstado(): string;//Asigna el estado en palabras al registro estado;
- begin
- if frmDeposito.ckbActivo.Checked then
- BuscarEstado:='Activo'
- else
- BuscarEstado:='Inactivo';
- end;
- function Obligatorios(): boolean;//Valida Todos los Datos.
- var
- valido: boolean;
- begin
- valido := true;
- if(frmDeposito.edtCodigo1.Text = '') then
- valido := false;
- if(frmDeposito.edtDescripcion.Text = '') then
- valido := false;
- if(frmDeposito.cmbTipo1.ItemIndex = -1) then
- valido := false;
- if(frmDeposito.edtPrecio1.Text = '') then
- valido := false;
- if(frmDeposito.edtStock1.Text = '') then
- valido := false;
- Obligatorios := valido;
- end;
- function existeCodigo(CodigoA: integer): boolean; //Verifica que no se repiten códigos.
- var
- existe : boolean;
- begin
- existe := false;
- i := 1;
- while ( i <= Nro_Articulos) and not(existe) do
- begin
- if(CodigoA=Lista_Articulos[i].Codigo) then
- existe := true;
- i := i + 1;
- end;
- existeCodigo := existe;
- end;
- procedure restaContadorTipo(corresponde:Char);//Resta el Tipo contador que corresponde.
- begin
- if corresponde='A' then
- countA:=countA-1;
- if corresponde='B' then
- countB:=countB-1;
- if corresponde='C' then
- countC:=countC-1;
- end;
- procedure ContadorTipoRenovar(Ti: String; anterior:Char);//Refresca Tipo contador si se modifica.
- begin
- if Ti[1]=anterior then
- restaContadorTipo(Ti[1])
- else
- restaContadorTipo(anterior);
- end;
- function StrToChar(Ti:String): char;//Cuenta cada tipo de Articulo y transforma a Char el Item que se selcciono.
- begin
- if Ti[1]='A' then
- countA:=countA+1;
- if Ti[1]='B' then
- countB:=countB+1;
- if Ti[1]='C' then
- countC:=countC+1;
- StrToChar:=Ti[1];
- end;
- procedure leerArticulo(var arti: TArticulo);//Llena la variable del tipo Registro.
- begin
- arti.Codigo :=StrToInt(frmDeposito.edtCodigo1.Text);
- arti.descripcion :=frmDeposito.edtDescripcion.Text ;
- arti.Tipo_Articulo :=StrToChar (frmDeposito.cmbTipo1.Items[frmDeposito.cmbTipo1.ItemIndex]);
- arti.estado :=BuscarEstado;
- arti.Precio_Unitario := StrToFloat(frmDeposito.edtPrecio1.Text);
- arti.Stock :=StrToInt(frmDeposito.edtStock1.Text);
- end;
- procedure agregarArticulo(arti: TArticulo);//Agrega una variable ,del tipo de registro, al Vector.
- begin
- Nro_Articulos := Nro_Articulos + 1;
- Lista_Articulos[Nro_Articulos] := arti;
- end;
- procedure llenarStringGrid(pocisionVector: integer; fila: integer);//Se muestran datos para "una fila" de StringGrid.
- var
- CodigoString, PrecioUnitarioString, StockString: String;
- begin
- Str(Lista_Articulos[pocisionVector].Codigo, CodigoString);
- Str(Lista_Articulos[pocisionVector].Precio_Unitario:7:2, PrecioUnitarioString);
- Str(Lista_Articulos[pocisionVector].Stock, StockString);
- frmDeposito.grdDeposito1.Cells[1, fila] := CodigoString;
- frmDeposito.grdDeposito1.Cells[2, fila] := Lista_Articulos[pocisionVector].descripcion;
- frmDeposito.grdDeposito1.Cells[3, fila] := Lista_Articulos[pocisionVector].Tipo_Articulo;
- frmDeposito.grdDeposito1.Cells[4, fila] := Lista_Articulos[pocisionVector].estado;
- frmDeposito.grdDeposito1.Cells[5, fila] := PrecioUnitarioString;
- frmDeposito.grdDeposito1.Cells[6, fila] := StockString;
- end;
- procedure mostrarArticulos();//Muestra todos los Articulos en StringGrid.
- var
- fila: integer;
- begin
- frmDeposito.grdDeposito1.RowCount := 1;
- for i:= 1 to Nro_Articulos do
- begin
- frmDeposito.grdDeposito1.RowCount := frmDeposito.grdDeposito1.RowCount + 1;
- fila := frmDeposito.grdDeposito1.RowCount - 1;
- llenarStringGrid(i,fila);
- end;
- end;
- function MenorStock(numeroPosicion: integer;valorminimo: integer):integer;//Obtiene el valor del menor Stock del Vector.
- var
- min: integer;
- begin
- min:=valorminimo;
- if (Lista_Articulos[numeroPosicion].Stock<min) then
- min:=Lista_Articulos[numeroPosicion].Stock;
- MenorStock:=min;
- end;
- function MinimoRenovar():integer;//Refresca minimoStock si se modifica.
- var
- nuevominimo: integer;
- begin
- nuevominimo:=Lista_Articulos[1].Stock;
- for i:=2 to Nro_Articulos do
- begin
- nuevominimo:=MenorStock(i,nuevominimo);
- end;
- MinimoRenovar:=nuevominimo;
- end;
- procedure mostrarStockMinimo();//Muestra los Articulos que tienen menor el Stock en comun ,en StringGrid.
- var
- fila: integer;
- begin
- frmDeposito.grdDeposito1.RowCount := 1;
- for i:= 1 to Nro_Articulos do
- begin
- if Lista_Articulos[i].Stock=minimoStock then
- begin
- frmDeposito.grdDeposito1.RowCount := frmDeposito.grdDeposito1.RowCount + 1;
- fila := frmDeposito.grdDeposito1.RowCount - 1;
- llenarStringGrid(i,fila);
- end;
- end;
- end;
- procedure mostrarSmyTipos();//Muestra Stock minimo y numero de cada tipo.
- begin
- frmDeposito.edtStockMinimo1.Text:=IntToStr(minimoStock);
- frmDeposito.edtTipoA1.Text:=IntToStr(countA);
- frmDeposito.edtTipoB1.Text:=IntToStr(countB);
- frmDeposito.edtTipoC1.Text:=IntToStr(countC);
- end;
- procedure intercambio(var p1: TArticulo; var p2: TArticulo);//Intercambia los registros que hay en el vector
- var
- aux : TArticulo;
- begin
- aux := p1;
- p1 := p2;
- p2 := aux;
- end;
- //procedure particion(primer: integer;ulti: integer); //Particion para el metodo Quick
- //var
- // Derecha, Izquierda, pivot: integer;
- // auxiliar : TArticulo;
- //begin
- // Derecha:=primer;
- // Izquierda:=ulti;
- // pivot:=Lista_Articulos[(primer+ulti) div 2].Codigo;
- // repeat
- // while (Lista_Articulos[Derecha].Codigo <pivot) do
- // Derecha:=Derecha+1;
- // while (Lista_Articulos[Izquierda].Codigo >pivot) do
- // Izquierda:=Izquierda-1;
- // if Derecha<=Izquierda then
- // begin
- // //intercambio(Lista_Articulos[Derecha],Lista_Articulos[Izquierda]);
- // auxiliar:= Lista_Articulos[Derecha];
- // Lista_Articulos[Derecha]:=Lista_Articulos[Izquierda];
- // Lista_Articulos[Izquierda]:=auxiliar;
- // Derecha:=Derecha+1;
- // Izquierda:=Izquierda-1;
- // end;
- // until Derecha>Izquierda;
- // if primer<Izquierda then
- // particion(primer, Izquierda);
- // if Derecha<ulti then
- // particion(primer, ulti)
- //end;
- procedure ordenarShell2();//Ordenar ascendentemente por metodo shell
- var
- salto,j: integer;
- hecho: boolean;
- begin
- salto:= Nro_Articulos;
- while (salto>1) do
- begin
- salto:= salto div 2;
- repeat
- hecho:=True;
- for j:=1 to (Nro_Articulos-salto) do
- begin
- i:= j+salto;
- if (Lista_Articulos[j].Codigo > Lista_Articulos[j+1].Codigo) then
- begin
- intercambio(Lista_Articulos[j], Lista_Articulos[j+1]);
- hecho:= false;
- end;
- end;
- until hecho;
- end;
- end;
- //procedure ordenarQuick(); //Ordena Ascendentemente por metodo Quick
- //var
- // primero, ultimo: integer;
- //begin
- // primero:=1;
- // ultimo:=Nro_Articulos;
- // if primero<ultimo then
- // particion(primero,ultimo);
- //end;
- function busquedaBinaria(): integer;//Cuenta cada tipo de Articulo y transforma a Char el Item que se selcciono.
- var
- encontro:boolean;
- pInicial, pFinal, pMedio: integer;
- begin
- encontro:=false;
- pInicial:=1;
- pFinal:=Nro_Articulos;
- busquedaBinaria:=-1;
- while (encontro=false) and (pInicial<=pFinal) do
- begin
- pMedio:=(pInicial+pFinal) div 2;
- if Lista_Articulos[pMedio].Codigo=StrToInt(frmDeposito.edtBusqueda.Text) then
- begin
- encontro:=True;
- busquedaBinaria:=pMedio;
- end
- else
- begin
- if Lista_Articulos[pMedio].Codigo<StrToInt(frmDeposito.edtBusqueda.Text) then
- pInicial:=pMedio+1
- else
- pFinal:=pMedio-1;
- end;
- end;
- end;
- procedure mostrarCodigo();//Muestra el Articulo a Buscar por Código, en StringGrid.
- var
- posicionEcontrada: integer;
- begin
- frmDeposito.grdDeposito1.RowCount := 1;
- ordenarShell2();
- posicionEcontrada:= busquedaBinaria();
- if posicionEcontrada<>-1 then
- begin
- frmDeposito.lblMensajeBusqueda.Visible :=False;
- frmDeposito.grdDeposito1.RowCount := frmDeposito.grdDeposito1.RowCount + 1;
- llenarStringGrid(posicionEcontrada,1);
- end
- else
- begin
- frmDeposito.lblMensajeBusqueda.Caption :='No existe'+#13+'el código solicitado';
- frmDeposito.lblMensajeBusqueda.Visible :=True;
- end;
- end;
- procedure llenarArticuloRamdom();//Llena la variable del tipo Registro.
- var
- artic:TArticulo;
- j:integer;
- begin
- j:=0;
- while (j<=9) do
- begin
- artic.Codigo :=StrToInt (frmDeposito.memCodigo.Lines[j]);
- artic.descripcion :=frmDeposito.memDescripcion.Lines[Random(frmDeposito.memDescripcion.Lines.Count)];
- artic.Tipo_Articulo :=StrToChar (frmDeposito.memTipo.Lines[Random(frmDeposito.memTipo.Lines.Count)]);
- artic.estado :=frmDeposito.memEstado.Lines[Random(frmDeposito.memEstado.Lines.Count)];
- artic.Precio_Unitario :=StrToFloat(frmDeposito.memPrecio.Lines[Random(frmDeposito.memPrecio.Lines.Count)]);
- artic.Stock :=StrToInt(frmDeposito.memStock.Lines[Random(frmDeposito.memStock.Lines.Count)]);
- agregarArticulo(artic);
- mostrarArticulos();
- if Nro_Articulos=1 then
- minimoStock:=Lista_Articulos[1].Stock
- else
- minimoStock:=MenorStock(Nro_Articulos,minimoStock);
- mostrarSmyTipos();
- j:=j+1;
- end;
- frmDeposito.btbModificarSeleccion.Enabled :=True;
- end;
- procedure habilitarBotones(siono:boolean);//Habilita o no todos los botones menos el guardar;
- begin
- frmDeposito.btbBuscar1.Enabled :=siono;
- frmDeposito.btbAlertaStock1.Enabled :=siono;
- frmDeposito.btbMostrarDescripcion.Enabled :=siono;
- frmDeposito.btbMostrarPrecio.Enabled :=siono;
- frmDeposito.btbModificarSeleccion.Enabled :=siono;
- end;
- procedure TfrmDeposito .edtCodigoChange (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .btnSalirClick (Sender : TObject );//Salir.
- begin
- close;
- end;
- procedure TfrmDeposito .btbAlertaStock1Click (Sender : TObject );
- begin
- if Nro_Articulos<>0 then
- mostrarStockMinimo();
- end;
- procedure TfrmDeposito .btbBuscar1Click (Sender : TObject );
- begin
- if Nro_Articulos<>0 then
- if edtBusqueda.Text<>'' then
- mostrarCodigo()
- else
- begin
- lblMensajeBusqueda.Caption :='Ingrese un código'+#13+' por favor';
- lblMensajeBusqueda.Visible :=True;
- end;
- end;
- procedure TfrmDeposito .btbGuardarClick (Sender : TObject );
- var
- articulo: TArticulo;
- filaselecionada: integer;
- begin
- if(not Obligatorios()) then
- ShowMessage('Debe ingresar todos los campos')
- else if modificar=False then
- begin
- if (existeCodigo(StrToInt(edtCodigo1.Text))) then
- ShowMessage('Codigo ya existe')
- else
- begin
- lblMensajeBusqueda.Visible :=False;
- leerArticulo(articulo);
- agregarArticulo(articulo);
- mostrarArticulos();
- btbModificarSeleccion.Enabled :=True;
- if Nro_Articulos=1 then
- minimoStock:=Lista_Articulos[1].Stock
- else
- minimoStock:=MenorStock(Nro_Articulos,minimoStock);
- mostrarSmyTipos();
- end;
- end
- else
- begin
- if (edtCodigo1.Text<>IntToStr(Lista_Articulos[seleccionado].Codigo)) and (existeCodigo(StrToInt(edtCodigo1.Text)))then
- ShowMessage('Codigo ya existe')
- else
- begin
- lblMensajeBusqueda.Visible :=False;
- ContadorTipoRenovar(frmDeposito.cmbTipo1.Items[frmDeposito.cmbTipo1.ItemIndex],Lista_Articulos[seleccionado].Tipo_Articulo);
- for i:=1 to (grdDeposito1.RowCount-1) do
- begin
- if IntToStr(Lista_Articulos[seleccionado].Codigo)=grdDeposito1.Cells[1,i] then
- filaselecionada:=i;
- end;
- leerArticulo(articulo);
- Lista_Articulos[seleccionado] := articulo;
- llenarStringGrid(seleccionado,filaselecionada);
- minimoStock:=MinimoRenovar();
- mostrarSmyTipos();
- modificar:=False;
- btbGuardar.Caption :='Guardar Producto';
- habilitarBotones(True);
- end;
- end;
- end;
- procedure TfrmDeposito .btbModificarSeleccionClick (Sender : TObject );
- var
- codin, mos: String;
- begin
- if grdDeposito1.RowCount=1 then
- ShowMessage('No se puede seleccionar nada')
- else
- begin
- habilitarBotones(False);
- frmDeposito.lblMensajeBusqueda.Caption :='Modifique en la'+#13+'pestaña Producto';
- frmDeposito.lblMensajeBusqueda.Visible :=True;
- mos:=IntToStr(grdDeposito1.Row);
- codin:=grdDeposito1.Cells[1,grdDeposito1.Row];
- for i:= 1 to Nro_Articulos do
- begin
- if Lista_Articulos[i].Codigo=StrToInt(codin) then
- begin
- seleccionado:=i;
- end;
- end;
- ShowMessage('Fila Selecionada = ('+mos+') y Código selecionado '+codin);
- if(seleccionado<>0) then
- begin
- modificar :=True;
- edtCodigo1.Text:=IntToStr(Lista_Articulos[seleccionado].Codigo);
- edtDescripcion.Text :=Lista_Articulos[seleccionado].descripcion;
- cmbTipo1.Text:=Lista_Articulos[seleccionado].Tipo_Articulo;
- if (Lista_Articulos[seleccionado].estado='Activo')then
- ckbActivo.Checked:=True
- else
- ckbActivo.Checked:=False;
- edtPrecio1.Text:=FloatToStr(Lista_Articulos[seleccionado].Precio_Unitario);
- edtStock1.Text :=IntToStr(Lista_Articulos[seleccionado].Stock);
- btbGuardar.Caption :='Modificar Producto';
- end;
- end;
- end;
- procedure ordenarShell();//Ordenar ascendentemente por metodo shell
- var
- salto,j: integer;
- hecho: boolean;
- begin
- salto:= Nro_Articulos;
- while (salto>1) do
- begin
- salto:= salto div 2;
- repeat
- hecho:=True;
- for j:=1 to (Nro_Articulos-salto) do
- begin
- i:= j+salto;
- if (Lista_Articulos[j].descripcion > Lista_Articulos[j+1].descripcion) then
- begin
- intercambio(Lista_Articulos[j], Lista_Articulos[j+1]);
- hecho:= false;
- end;
- end;
- until hecho;
- end;
- end;
- procedure TfrmDeposito .btbMostrarDescripcionClick (Sender : TObject );
- begin
- ordenarShell ();
- mostrarArticulos();
- end;
- procedure TfrmDeposito .btbSalirClick (Sender : TObject );
- begin
- close;
- end;
- procedure ordenarSeleccion(); //Ordena descendentemente por metodo Seleccion
- var
- j,k: integer;
- y: real;
- begin
- for i:=1 to (Nro_Articulos-1) do
- begin
- k:=i;
- y:=Lista_Articulos[i].Precio_Unitario;
- for j:=(i+1) to Nro_Articulos do
- begin
- if (Lista_Articulos[j].Precio_Unitario>y) then
- begin
- k:=j;
- y:=Lista_Articulos[j].Precio_Unitario;
- end;
- end;
- intercambio(Lista_Articulos[k], Lista_Articulos[i]);
- Lista_Articulos[i].Precio_Unitario:=y;
- end;
- end;
- procedure TfrmDeposito .btbMostrarPrecioClick (Sender : TObject );
- begin
- ordenarSeleccion ();
- mostrarArticulos();
- end;
- procedure TfrmDeposito .edtPrecioChange (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .edtStockChange (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .edtTipoAChange (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .edtTipoProductoChange (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .FormCreate (Sender : TObject );//formulario;
- begin
- randomize;
- countA:=0;
- countB:=0;
- countC:=0;
- modificar :=False;
- llenarArticuloRamdom();
- end;
- procedure TfrmDeposito .imgUnjuClick (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .lblStockClick (Sender : TObject );
- begin
- end;
- procedure TfrmDeposito .pnlUnjuClick (Sender : TObject );
- begin
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement