unit Compras;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  StdCtrls, Forms, DBCtrls, DB, Grids, DBGrids, DBTables, Mask, ExtCtrls,
  Dialogos, Buttons, Menus, ComCtrls, Tabnotbk,checa,conver{, Graficos, Concen};

type
  TFormaCompras = class(TForm)
    DataSource1: TDataSource;
    TablaComprasE: TTable;
    TablaDeta: TTable;
    FuenteTablaDeta: TDataSource;
    TablaProveedor: TTable;
    TablaInventario: TTable;
    TablaComprasD: TTable;
    TablaCuPagar: TTable;
    TablaMovimientosInventario: TTable;
    MainMenu1: TMainMenu;
    Archivo1: TMenuItem;
    Registro1: TMenuItem;
    Nuevo1: TMenuItem;
    Modificar1: TMenuItem;
    Guardar1: TMenuItem;
    Cancelar1: TMenuItem;
    Imprimir1: TMenuItem;
    Reportes1: TMenuItem;
    Ayuda1: TMenuItem;
    TablaDetaCANTIDAD: TFloatField;
    TablaDetaCLAVE: TStringField;
    TablaDetaPRODUCTO: TStringField;
    TablaDetaPRECIO: TCurrencyField;
    TablaDetaDESCUENTO: TFloatField;
    TablaDetaIMPORTE: TCurrencyField;
    Consultas1: TMenuItem;
    Panel1: TPanel;
    BotonGuardar: TSpeedButton;
    BotonNuevo: TSpeedButton;
    BotonBuscar: TSpeedButton;
    BotonImprimir: TSpeedButton;
    BotonSalir: TSpeedButton;
    BotonCambios: TSpeedButton;
    Usuario: TLabel;
    Navegador: TDBNavigator;
    Panel2: TPanel;
    Caja: TScrollBox;
    Label4: TLabel;
    Label6: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Nombre: TLabel;
    Direccion: TLabel;
    Poblacion: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    EditCLDOC_O: TDBEdit;
    EditCLPRV_O: TDBEdit;
    EditFEDOC_O: TDBEdit;
    EditFEREC_O: TDBEdit;
    EditFEPAG_O: TDBEdit;
    EditTIMPU_O: TDBEdit;
    EditDTOTA_O: TDBEdit;
    EditDFINT_O: TDBEdit;
    EditTINDI_O: TDBEdit;
    EditNALMA_O: TDBEdit;
    Detalle: TDBGrid;
    Bevel1: TBevel;
    Uno: TLabel;
    Dos: TLabel;
    EtiSubtotal: TLabel;
    EtiImpuesto: TLabel;
    EtiTotal: TLabel;
    Consecutivo1: TMenuItem;
    TablaUltimo: TTable;
    Label5: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Bevel2: TBevel;
    Bevel3: TBevel;
    Bevel4: TBevel;
    Bevel5: TBevel;
    Bevel6: TBevel;
    Bevel7: TBevel;
    Bevel8: TBevel;
    Bevel12: TBevel;
    Bevel13: TBevel;
    Bevel14: TBevel;
    Bevel15: TBevel;
    Bevel16: TBevel;
    Bevel17: TBevel;
    ImprimePalantilla1: TMenuItem;
    TipoDocumento: TComboBox;
    Genera1: TMenuItem;
    Recepcin1: TMenuItem;
    Temas1: TMenuItem;
    Devolucin1: TMenuItem;
    CancelaMovimiento1: TMenuItem;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    BotonObservacion: TSpeedButton;
    BotonPagos: TSpeedButton;
    TablaObservacion: TTable;
    Eliminar1: TMenuItem;
    Formatos1: TMenuItem;
    EligeFormato1: TMenuItem;
    DiseaFormato1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure EditCLPRV_OExit(Sender: TObject);
    procedure DetalleColEnter(Sender: TObject);
    procedure BotonGuardarClick(Sender: TObject);
    procedure BotonNuevoClick(Sender: TObject);
    procedure Consultas1Click(Sender: TObject);
    procedure EditCLPRV_OKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EditFEDOC_OEnter(Sender: TObject);
    procedure DetalleKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BotonSalirClick(Sender: TObject);
    procedure EditCLDOC_OKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormActivate(Sender: TObject);
    procedure EditNALMA_OKeyPress(Sender: TObject; var Key: Char);
    procedure BotonCambiosClick(Sender: TObject);
    procedure BotonBuscarClick(Sender: TObject);
    procedure NavegadorClick(Sender: TObject; Button: TNavigateBtn);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BotonImprimirClick(Sender: TObject);
    procedure EditFEDOC_OKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EditFEREC_OKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EditFEPAG_OKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure EditCLDOC_OEnter(Sender: TObject);
    procedure EditCLPRV_OEnter(Sender: TObject);
    procedure EditFEREC_OEnter(Sender: TObject);
    procedure EditFEPAG_OEnter(Sender: TObject);
    procedure EditTIMPU_OEnter(Sender: TObject);
    procedure EditDTOTA_OEnter(Sender: TObject);
    procedure EditDFINT_OEnter(Sender: TObject);
    procedure EditTINDI_OEnter(Sender: TObject);
    procedure EditFEREC_OExit(Sender: TObject);
    procedure EditFEPAG_OExit(Sender: TObject);
    procedure EditCLDOC_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditCLPRV_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditFEDOC_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditFEREC_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditFEPAG_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditTIMPU_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditDTOTA_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditDFINT_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditTINDI_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditNALMA_OMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure EditNALMA_OEnter(Sender: TObject);
    procedure TablaDetaAfterInsert(DataSet: TDataSet);
    procedure TablaDetaBeforeInsert(DataSet: TDataSet);
    procedure Consecutivo1Click(Sender: TObject);
    procedure TablaComprasEEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure TablaComprasEPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure EditCLDOC_OExit(Sender: TObject);
    procedure EditFEDOC_OExit(Sender: TObject);
    procedure EditTIMPU_OExit(Sender: TObject);
    procedure EditDTOTA_OExit(Sender: TObject);
    procedure EditDFINT_OExit(Sender: TObject);
    procedure EditTINDI_OExit(Sender: TObject);
    procedure EditNALMA_OExit(Sender: TObject);
    procedure BotonCambiosMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonNuevoMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonGuardarMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonBuscarMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonImprimirMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ImprimePalantilla1Click(Sender: TObject);
    procedure TipoDocumentoChange(Sender: TObject);
    procedure Recepcin1Click(Sender: TObject);
    procedure Temas1Click(Sender: TObject);
    procedure CancelaMovimiento1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure BotonObservacionClick(Sender: TObject);
    procedure BotonPagosClick(Sender: TObject);
    procedure Eliminar1Click(Sender: TObject);
    procedure EligeFormato1Click(Sender: TObject);
    procedure DiseaFormato1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  FormaCompras: TFormaCompras;
  indice:integer;
  suma,impumonto,totaldoc,saldoanterior:Currency;
  meses:array[1..12] of real;
  numeromovimiento:longint;
  Color1:TColor;
  nombreformato:string;

procedure posicionacompras(clave:string);
implementation

uses consulta, ConPromo, ConPro, buscar, cerrar,formato, barras, formatos,describe,
     progreso,AyudaMod, desgloce, edicion, antedi, observa, concupag, cxpd;

{$R *.DFM}

{*****activar botones}

function cobranzacero(numecompra:String):Boolean;
var
borrarcuenta:boolean;
conta:integer;
begin
with FormaCompras do
begin
 TablaCuPagar.SetRange([EditCLDOC_O.Text],[EditCLDOC_O.Text]);
 TablaCuPagar.First;
 borrarcuenta:=False;
{ muestraMensaje(TablaCuentasxCobrar.FieldByName('NUFAC_CC').AsString);}
 conta:=0;
 while not TablaCuPagar.Eof do
 begin
 if (TablaCuPagar.FieldByName('STATU_CP').AsString='C')and (TablaCuPagar.FieldByName('IMCUE_CP').AsFloat= TablaCuPagar.FieldByName('SALDO_CP').AsFloat) then
 borrarcuenta:=True;
 conta:=conta+1;
 TablaCuPagar.Next;
 end;

if conta=0 then cobranzacero:=True;

end;
end;

procedure activabotones(cambios,nuevo,guardar,buscar,imprimir,navegar,cancela:boolean);
begin
with FormaCompras do
begin
BotonCambios.Enabled:=cambios;
Modificar1.Enabled:=cambios;

BotonNuevo.Enabled:=nuevo;
Nuevo1.Enabled:=nuevo;

BotonGuardar.Enabled:=guardar;
Guardar1.Enabled:=guardar;

BotonBuscar.Enabled:=buscar;

BotonImprimir.Enabled:=imprimir;

Navegador.Enabled:=navegar;

CancelaMovimiento1.Enabled:=cancela;

{*****extras******}
 Eliminar1.Enabled:=nuevo;
 Cancelar1.Enabled:=nuevo;
 CancelaMovimiento1.Enabled:=guardar;

{****************}


end;
end;

{*******************}

procedure buscaobservacion(numero:string;tipo:integer);
begin
with FormaCompras do
begin
{case tipo of
0:begin}

  FormaObservaciones.Tag:=0;
  FormaObservaciones.Observacion.Clear;
  TablaObservacion.First;

  if (TablaObservacion.FindKey([numero])) then
  begin
  FormaObservaciones.Observacion.Lines[0]:=TablaObservacion.FieldByName('OBSER_CO').AsString;
  end;
  {MuestraMensaje('No Tiene Observaciones');}
  FormaObservaciones.ShowModal;

  if FormaObservaciones.Tag=1 then
  begin
  TablaObservacion.First;
  if (TablaObservacion.FindKey([numero])) then
  TablaObservacion.Edit
  else
  TablaObservacion.Insert;

  TablaObservacion.FieldByName('CLDOC_CO').AsString:=numero;
  TablaObservacion.FieldByName('OBSER_CO').AsString:=FormaObservaciones.Observacion.Lines[0];
  TablaObservacion.Post;

  end;
{*************************************}
  FormaObservaciones.Tag:=0;
end;

end;



{******modulo de datos encabezado******}

procedure archivodetalle;
type
registrodeta=record
cantidad:real;
clave:string[15];
descripcion:string[40];
precio:real;
descuento:real;
importe:real;
end;
var
arch:File of registrodeta;
datos:registrodeta;
k:integer;
begin

With FormaCompras do
begin
AssignFile(arch,'bufer.tmp');
ReWrite(arch);
TablaDeta.First;
While not TablaDeta.EoF do
begin

Datos.cantidad:=TablaDeta.FieldByName('cantidad').AsFloat;
Datos.clave:=TablaDeta.FieldByName('clave').AsString;
Datos.descripcion:=TablaDeta.FieldByName('producto').AsString;
Datos.precio:=TablaDeta.FieldByName('precio').AsFloat;
Datos.descuento:=TablaDeta.FieldByName('descuento').AsFloat;
Datos.importe:=TablaDeta.FieldByName('importe').AsFloat;

Write(arch,datos);
TablaDeta.Next;

end;
CloseFile(arch);
end;

end;



procedure leebuferencabezado;
type
registrodeta=record
cantidad:real;
clave:string[15];
descripcion:string[40];
precio:real;
descuento:real;
importe:real;

end;


type
registroencabezado=record
Documento:string[15];
clave:string[15];
Nombre:string[60];
Direccion:string[60];
Poblacion:string[40];
FechaDoc:string[12];
FechaRec:string[12];
FechaPag:string[12];
TotalImpusto:string[20];
DescuentoTotal:string[20];
DescuentoFinanciero:string[20];
TotalIndirectos:string[20];
NumeroAlmacen:string[2];
end;

var
arch1:File of registrodeta;
datos1:registrodeta;

arch:File of registroencabezado;
datos:registroencabezado;
k:integer;
begin
With FormaCompras do
begin
AssignFile(arch,'buferEnc.tmp');
Reset(arch);
Read(arch,datos);
{EditCLDOC_O.Text:=Datos.Documento;}

MuestraMensaje(Datos.Nombre);

EditCLPRV_O.Text:=Datos.clave;
Nombre.Caption:=Datos.Nombre;
Direccion.Caption:=Datos.Direccion;
Poblacion.Caption:=Datos.Poblacion;
EditFEDOC_O.Text:=Datos.FechaDoc;
EditFEREC_O.Text:=Datos.FechaRec;
EditFEPAG_O.Text:=Datos.FechaPag;
EditTIMPU_O.Text:=Datos.TotalImpusto;
EditDTOTA_O.Text:=Datos.DescuentoTotal;
EditDFINT_O.Text:=Datos.DescuentoFinanciero;
EditTINDI_O.Text:=Datos.TotalIndirectos;
EditNALMA_O.Text:=Datos.NumeroAlmacen;

CloseFile(arch);

{****datso del detalle*************}
AssignFile(arch1,'bufer.tmp');
Reset(arch1);
for k:=0 to Filesize(arch1) -1 do
begin
seek(arch1,k);
read(arch1,datos1);
TablaDeta.Insert;
TablaDeta.Fields[0].AsFloat:=datos1.cantidad;
TablaDeta.Fields[1].AsString:=datos1.clave;
TablaDeta.Fields[2].AsString:=datos1.descripcion;
TablaDeta.Fields[3].AsFloat:=datos1.descuento;
TablaDeta.Fields[4].AsFloat:=datos1.precio;
TablaDeta.Fields[5].AsFloat:=datos1.importe;
TablaDeta.Post;
end;
CloseFile(arch1);



{*********************************}


end;
end;




procedure generarecepcion;
var
ultimo:integer;
begin
with FormaCompras do
begin
saldoanterior:=0;
TablaComprasE.Last;

{activa;}
{EditCLDOC_O.SetFocus;}

Nombre.Caption:='';
Direccion.Caption:='';
Poblacion.Caption:='';
Caja.Enabled:=True;
ultimo:=TablaComprase.FieldByName('CLDOC_O').AsInteger;
TablaComprase.Insert;
EditFEDOC_O.Text:=DateToStr(Date);
TablaComprase.FieldByName('CLDOC_O').AsInteger:=ultimo+1;
TablaComprase.Post;
TablaComprase.Edit;
leebuferencabezado;
activabotones(False,False,True,False,False,False,True);
BotonNuevo.Tag:=1;

end;
end;

procedure buferencabezado;
type
registroencabezado=record
Documento:string[15];
clave:string[15];
Nombre:string[60];
Direccion:string[60];
Poblacion:string[40];
FechaDoc:string[12];
FechaRec:string[12];
FechaPag:string[12];
TotalImpusto:string[20];
DescuentoTotal:string[20];
DescuentoFinanciero:string[20];
TotalIndirectos:string[20];
NumeroAlmacen:string[2];
end;

var
arch:File of registroencabezado;
datos:registroencabezado;
k:integer;
begin
With FormaCompras do
begin
AssignFile(arch,'buferEnc.tmp');
ReWrite(arch);
Datos.Documento:=EditCLDOC_O.Text;
Datos.clave:=EditCLPRV_O.Text;
Datos.Nombre:=Nombre.Caption;
Datos.Direccion:=Direccion.Caption;
Datos.Poblacion:=Poblacion.Caption;
Datos.FechaDoc:=EditFEDOC_O.Text;
Datos.FechaRec:=EditFEREC_O.Text;
Datos.FechaPag:=EditFEPAG_O.Text;
Datos.TotalImpusto:=EditTIMPU_O.Text;
Datos.DescuentoTotal:=EditDTOTA_O.Text;
Datos.DescuentoFinanciero:=EditDFINT_O.Text;
Datos.TotalIndirectos:=EditTINDI_O.Text;
Datos.NumeroAlmacen:=EditNALMA_O.Text;
write(arch,Datos);
CloseFile(arch);

end;
end;



{****termina datos encabezado**********}

procedure abretabla(tipotabla:char);
begin
with FormaCompras do
begin
if TablaComprasE.State=dsBrowse then TablaComprasE.Close;
if TablaComprasD.State=dsBrowse then TablaComprasD.Close;
if tipotabla='R' then
begin

 TablaComprasE.TableName:='ComprasE.dbf';
 TablaComprasE.Open;
 TablaComprasD.TableName:='ComprasD.dbf';
 TablaComprasD.Open;
 Recepcin1.Enabled:=False;

end;

if tipotabla='O' then
begin

TablaComprasE.TableName:='OrdenCom.dbf';
TablaComprasE.Open;
TablaComprasD.TableName:='OrdenDet.dbf';
TablaComprasD.Open;
 Recepcin1.Enabled:=True;
end;

if tipotabla='D' then
begin

TablaComprasE.TableName:='DevolCom.dbf';
TablaComprasE.Open;
TablaComprasD.TableName:='DevolDet.dbf';
TablaComprasD.Open;
Recepcin1.Enabled:=False;

end;

end;
end;




procedure ponecolor(indi:integer;col1:TColor);
begin
with FormaCompras do
begin
color1:=col1;
TDBEdit(Components[indi]).Color:=ClRed;
end;
end;

procedure quitacolor(indi:integer);
begin
with FormaCompras do
begin
TDBEdit(Components[indi]).Color:=Color1;

end;
end;




procedure actualizaproveedor;
begin
with FormaCompras do
begin
TablaProveedor.Edit;
TablaProveedor.FieldByName('FULCO_P').AsString:=EditFEDOC_O.Text;
TablaProveedor.FieldByName('SALDO_P').AsFloat:=TablaProveedor.FieldByName('SALDO_P').AsFloat+TablaComprasE.FieldByName('IMDOC_O').AsFloat+totaldoc-saldoanterior;
TablaProveedor.FieldByName('COMPR_P').Asfloat:=TablaProveedor.FieldByName('COMPR_P').Asfloat+TablaComprasE.FieldByName('IMDOC_O').Asfloat+totaldoc-saldoanterior;
Tablaproveedor.Post;



end;
end;


procedure asignatipo;
type
datos=record
archivo:String[60];
descrip:String[125];
end;
var
dat:datos;
faltan:Boolean;
arch,arch2:file of datos;
i:integer;
begin
with FormaConsulta do
begin
{MuestraMensaje(leeruta+'\report\Clientes.for');}
AssignFile(arch,leeruta+'\report\comprase.for');
Reset(arch);
Archivo.Items.Clear;
Descripcion.Clear;
faltan:=True;
for i:=0 to FileSize(arch)-1 do
begin
Read(arch,dat);
if FileExists(Dat.archivo) then
Archivo.Items.Append(Dat.archivo)
else
faltan:=False;
end;
CloseFile(arch);


if faltan=False then
begin
AssignFile(arch,leeruta+'\report\Comprase.for');
Reset(arch);
AssignFile(arch2,leeruta+'\report\Cliente2.for');
Rewrite(arch2);

for i:=0 to FileSize(arch)-1 do
begin
Read(arch,dat);
if FileExists(Dat.archivo) then
write(arch2,dat);
end;
CloseFile(arch);
CloseFile(arch2);
{******************}
AssignFile(arch,leeruta+'\report\comprase.for');
Rewrite(arch);
AssignFile(arch2,leeruta+'\report\Cliente2.for');
Reset(arch2);

for i:=0 to FileSize(arch2)-1 do
begin
Read(arch2,dat);
if FileExists(Dat.archivo) then
write(arch,dat);
end;
CloseFile(arch);
CloseFile(arch2);
end;


Archivo.Text:=Archivo.Items[0];
Descripcion.lines.Add(Dat.Descrip);

ReporteDe.Caption:='Reporte de Compras';
Archi.Caption:='Comprase.for';
end;

end;





procedure borramovimientosanteriores;
begin
with FormaCompras do
begin
 TablamovimientosInventario.First;
 while not TablamovimientosInventario.Eof do
 begin
 if (TablamovimientosInventario.FieldByName('BANAF_MI').AsString='C') and (TablamovimientosInventario.FieldByName('REFMO_MI').AsString=EditCLDOC_O.Text) then
 begin
 TablamovimientosInventario.Delete;
{ MuestraMensaje('lo encontre M I');}
 end
 else
 TablamovimientosInventario.Next;
 end;

end;
end;

Procedure MovimientosInventario;
begin
with FormaCompras do
begin
 TablaMovimientosInventario.Insert;
 TablamovimientosInventario.FieldByName('CLDOC_MI').AsInteger:= numeromovimiento;
 TablamovimientosInventario.FieldByName('CLPRO_MI').AsString:= TablaDeta.FieldByName('CLAVE').AsString;
 TablamovimientosInventario.FieldByName('DESCR_MI').AsString:= TablaDeta.FieldByName('PRODUCTO').AsString;
 TablamovimientosInventario.FieldByName('TIMOV_MI').AsInteger:=51;
 TablamovimientosInventario.FieldByName('FEDOC_MI').AsString:= EditFEDOC_O.Text;
 TablamovimientosInventario.FieldByName('REFMO_MI').AsString:= EditCLDOC_O.Text;
 TablamovimientosInventario.FieldByName('CLCOP_MI').AsString:= EditCLPRV_O.Text;
 TablamovimientosInventario.FieldByName('CANTI_MI').AsFloat:= TablaDeta.FieldByName('CANTIDAD').AsFloat;
 TablamovimientosInventario.FieldByName('PUNIT_MI').AsFloat:= TablaDeta.FieldByName('PRECIO').AsFloat;
 TablamovimientosInventario.FieldByName('NALMA_MI').AsString:= EditNALMA_O.Text;
 TablamovimientosInventario.FieldByName('BANAF_MI').AsString:='C';
 TablamovimientosInventario.Post;
 end;

end;

procedure leeencabezado;
begin
With FormaCompras do
begin
Nombre.Caption:=TablaComprasE.FieldByName('NOMBR_O').AsString;
Direccion.Caption:=TablaComprasE.FieldByName('DIREC_O').AsString;
Poblacion.Caption:=TablaComprasE.FieldByName('POBLA_O').AsString;
end;
end;


procedure guardaencabezado;
begin
With FormaCompras do
begin
TablaComprasE.FieldByName('STDOC_O').AsString:='C';
TablaComprasE.FieldByName('SUBTO_O').AsFloat:=suma;
TablaComprasE.FieldByName('IMPMO_O').AsFloat:=impumonto;
TablaComprasE.FieldByName('IMDOC_O').AsFloat:=totaldoc;

TablaComprasE.FieldByName('NOMBR_O').AsString:=Nombre.Caption;
TablaComprasE.FieldByName('DIREC_O').AsString:=Direccion.Caption;
TablaComprasE.FieldByName('POBLA_O').AsString:=Poblacion.Caption;
TablaComprasE.Post;
end;
end;

procedure guardadetalle;
begin
With FormaCompras do
begin
TablaMovimientosInventario.Last;
numeromovimiento:=TablaMovimientosInventario.FieldByName('CLDOC_MI').AsInteger+1;

TablaDeta.First;
while not TablaDeta.Eof do
begin

 MovimientosInventario;
 TablaComprasD.Insert;
 TablaComprasD.FieldByName('CLDOC_OD').AsString:=EditCLDOC_O.Text;
 TablaComprasD.FieldByName('CLPRO_OD').AsString:=TablaDeta.FieldByName('Clave').AsString;
 TablaComprasD.FieldByName('DESCR_OD').AsString:=TablaDeta.FieldByName('Producto').AsString;
 TablaComprasD.FieldByName('CANTI_OD').AsFloat:=TablaDeta.FieldByName('Cantidad').AsFloat;
 TablaComprasD.FieldByName('CUNIT_OD').AsFloat:=TablaDeta.FieldByName('Precio').AsFloat;
 TablaComprasD.FieldByName('PODES_OD').AsFloat:=TablaDeta.FieldByName('Descuento').AsFloat;
 TablaComprasD.FieldByName('NALMA_OD').AsString:=EditNALMA_O.Text;
 TablaComprasD.Post;
 TablaDeta.Next;

end;

end;
end;

procedure borradetalleanterior;
begin
With FormaCompras do
begin
TablaComprasD.First;
while not TablaComprasD.Eof do
begin
 if TablaComprasD.FieldByName('CLDOC_OD').AsString=EditCLDOC_O.Text then
 TablaComprasD.Delete
 else
 TablaDeta.Next;
end;

end;
end;


procedure bufercambios;
type
registrodeta=record
cantidad:real;
clave:string[15];
descripcion:string[40];
precio:real;
descuento:real;
importe:real;
end;
var
arch:File of registrodeta;
datos:registrodeta;
k:integer;
begin
With FormaCompras do
begin
AssignFile(arch,'bufer.tmp');
ReWrite(arch);
TablaDeta.First;
While not TablaDeta.EoF do
begin
Datos.cantidad:=TablaDeta.FieldByName('cantidad').AsFloat;
Datos.clave:=TablaDeta.FieldByName('clave').AsString;
Datos.descripcion:=TablaDeta.FieldByName('producto').AsString;
Datos.precio:=TablaDeta.FieldByName('precio').AsFloat;
Datos.descuento:=TablaDeta.FieldByName('descuento').AsFloat;
Write(arch,datos);
TablaDeta.Next;

end;

if Filesize(arch)>=1 then
for k:=0 to Filesize(arch) -1 do
begin
seek(arch,k);
read(arch,datos);

 TablaInventario.First;
 if TablaInventario.FindKey([datos.clave]) then
 begin
 TablaInventario.Edit;
 TablaInventario.FieldByName('EXIST_I').AsFloat:= TablaInventario.FieldByName('EXIST_I').AsFloat -
 datos.cantidad;
 TablaInventario.Post;
 end;
{MuestraMensaje(FloatToStr(datos.cantidad)+(datos.clave)+(datos.descripcion)+FloatToStr(datos.precio)+
FloatToStr(datos.descuento));}
end;
CloseFile(arch);
end;
end;

procedure ActualizaInventarioCambios;
begin
with FormaCompras do
begin
TablaInventario.First;
 if TablaInventario.FindKey([TablaDeta.FieldByName('Clave').AsString]) then
 begin
 TablaInventario.Edit;
 TablaInventario.FieldByName('EXIST_I').AsFloat:= TablaInventario.FieldByName('EXIST_I').AsFloat+
 TablaDeta.FieldByName('cantidad').AsFloat;
 TablaInventario.Post;
 end;
end;

end;



procedure rutas;
var
  I: Integer;
begin

with FormaCompras do
begin
  for I := 0 to ComponentCount -1 do
    begin
     if Components[I] is TTable  then
       begin
       TTable(Components[I]).DatabaseName:=ruta(8);
       end;
    end;
TablaDeta.DatabaseName:=leeruta;
  for i := 0 to ComponentCount -1 do
    begin
     if Components[i] is TTable  then
       begin
       try
       TTable(Components[i]).Open;
       except
       MuestraMensaje('Ha Ocurrido un Error al Abrir una de las Bases de Datos.');
       end;
       end;
    end;

    end;
end;

procedure sumatotal;
begin
with FormaCompras do
begin
   TablaDeta.First;
   suma:=0;
   if EditTIMPU_O.Text='' then EditTIMPU_O.Text:='0';
   while not TablaDeta.Eof do
   begin
   suma:=suma+TablaDeta.FieldByName('Importe').AsFloat;
   {suma:=suma+(suma*FloatTostr(suma+(suma*StrToFloat(EditTIMPU_O.Text)/100);}
   TablaDeta.Next;
   end;
   EtiSubTotal.Caption:=convierte('###,###,##0.00',FloatTostr(suma),'$');
   impumonto:=suma*StrToFloat(EditTIMPU_O.Text)/100;
   EtiImpuesto.Caption:=convierte('###,###,##0.00',FloatTostr(suma*StrToFloat(EditTIMPU_O.Text)/100),'$');
   totaldoc:=suma+(suma*StrToFloat(EditTIMPU_O.Text)/100);
   EtiTotal.Caption:=convierte('###,###,##0.00',FloatTostr(suma+(suma*StrToFloat(EditTIMPU_O.Text)/100)),'$');
end;

end;

function busca(comp:longint):Boolean;
var
encontrado:Boolean;
begin
encontrado:=True;

with FormaCompras do
begin
TablaCuPagar.CancelRange;
TablaCuPagar.SetRange([IntToStr(comp)],[IntToStr(comp)]);
TablaCuPagar.First;

while (not ((TablaCuPagar.FieldByName('STATU_CP').AsString='C') and (TablaCuPagar.FieldByName('NUDOC_CP').AsString=EditCLDOC_O.Text)))and (not TablaCuPagar.Eof)  do
begin

TablaCuPagar.Next;
if (TablaCuPagar.FieldByName('SALDO_CP').AsCurrency=TablaCuPagar.FieldByName('IMCUE_CP').AsCurrency) then
encontrado:=False;
end;

if (TablaCuPagar.FieldByName('SALDO_CP').AsCurrency=TablaCuPagar.FieldByName('IMCUE_CP').AsCurrency) then
encontrado:=False;

busca:=encontrado;

end;

end;

function borracuentasxpagar(comp:string):Boolean;
var
encontrado:Boolean;
begin
encontrado:=True;


with FormaCompras do
begin
TablaCuPagar.SetRange([comp],[comp]);
TablaCuPagar.First;
while not TablaCuPagar.Eof do
begin
TablaCuPagar.Delete;
end;



end;

end;




procedure generacuentasxpagar(tipo:Char;comp:integer);
begin

With FormaCompras do
begin

if tipo='n' then
begin
TablaCuPagar.Insert;
end;

if tipo='c' then
begin
{MuestraMensaje('cambio');}
busca(comp);
TablaCuPagar.Edit;
{MuestraMensaje(TablaCuPagar.FieldByName('STATU_CP').AsString+'  '+TablaCuPagar.FieldByName('NUDOC_CP').AsString);}
end;

TablaCuPagar.FieldByName('CLPRO_CP').AsString:=EditCLPRV_O.Text;
TablaCuPagar.FieldByName('NOMBR_CP').AsString:=Nombre.Caption;
TablaCuPagar.FieldByName('STATU_CP').AsString:='C';
TablaCuPagar.FieldByName('TIMOV_CP').AsString:='51';
TablaCuPagar.FieldByName('CONCE_CP').AsString:='Compra';
TablaCuPagar.FieldByName('NUCOM_CP').AsString:=EditCLDOC_O.Text;
TablaCuPagar.FieldByName('NUDOC_CP').AsString:=EditCLDOC_O.Text;
{TablaCxP.FieldByName('NUREF_CP').AsString:=EditCLPRO_O.Text;}
sumatotal;
TablaCuPagar.FieldByName('FEAPL_CP').AsString:=EditFEDOC_O.Text;
TablaCuPagar.FieldByName('FEVEN_CP').AsString:=EditFEPAG_O.Text;
{TablaCxP.FieldByName('COBRA_CP').AsString:=EditCLPRO_O.Text;}
TablaCuPagar.FieldByName('IMCUE_CP').AsFloat:=totaldoc;
TablaCuPagar.FieldByName('SALDO_CP').AsFloat:=totaldoc;
TablaCuPagar.FieldByName('CARGO_CP').AsFloat:=totaldoc;
TablaCuPagar.FieldByName('OPERA_CP').AsString:='C';
TablaCuPagar.Post;
end;
end;

Procedure borra;
begin
with FormaCompras do
begin
TablaDeta.First;
while not TablaDeta.Eof do
begin
TablaDeta.Delete;
end;
end;


end;


procedure LeeDetalle;
begin

with FormaCompras do

begin

Borra;
TablaComprasD.SetRange([TablaComprasE.FieldByName('CLDOC_O').AsString],[TablaComprasE.FieldByName('CLDOC_O').AsString]);

TablaComprasD.Last;

while not TablaComprasD.Bof do
begin
TablaDeta.Insert;

TablaDeta.FieldByName('CANTIDAD').AsFloat:=TablaComprasD.FieldByName('CANTI_OD').AsFloat;
TablaDeta.FieldByName('CLAVE').AsString:=TablaComprasD.FieldByName('CLPRO_OD').AsString;
TablaDeta.FieldByName('PRODUCTO').AsString:=TablaComprasD.FieldByName('DESCR_OD').AsString;
TablaDeta.FieldByName('PRECIO').AsFloat:=TablaComprasD.FieldByName('CUNIT_OD').AsFloat;
TablaDeta.FieldByName('DESCUENTO').AsFloat:=TablaComprasD.FieldByName('PODES_OD').AsFloat;

TablaDeta.FieldByName('IMPORTE').AsFloat:=((TablaDeta.FieldByName('DESCUENTO').AsFloat/100)*
TablaDeta.FieldByName('CANTIDAD').AsFloat*TablaDeta.FieldByName('PRECIO').AsFloat)+
TablaDeta.FieldByName('CANTIDAD').AsFloat*TablaDeta.FieldByName('PRECIO').AsFloat;
{TablaDeta.FieldByName('IMPORTE').AsFloat:=TablaDeta.FieldByName('CANTIDAD').AsFloat*TablaDeta.FieldByName('PRECIO').AsFloat-
(TablaDeta.FieldByName('CANTIDAD').AsFloat*TablaDeta.FieldByName('PRECIO').AsFloat*TablaDeta.FieldByName('DESCUENTO').AsFloat/100);}

TablaDeta.Post;
TablaComprasD.Prior;
begin


end;


end;

end;
end;

procedure limpiar;
var
  I: Integer;
begin

with FormaCompras do
begin
  {for I := 0 to ComponentCount -1 do
    begin
     if Components[I] is TDBEdit  then
       TDBEdit(Components[I]).Text :='';
     if Components[I] is TEdit  then
       TEdit(Components[I]).Text :='';

  end;}
  Nombre.Caption:='';
  Direccion.Caption:='';
  Poblacion.Caption:='';
  end;

end;


procedure activa;
begin
with FormaCompras do
begin
Caja.Enabled:=True;
Detalle.Enabled:=True;
end;
end;

procedure desactiva;
begin
with FormaCompras do
begin
Caja.Enabled:=False;
Detalle.Enabled:=False;
end;
end;

procedure cursor1;
begin
With FormaCompras do
begin
if indice < 1 then indice:=1;
case indice of
1:EditCLDOC_O.SetFocus;
2:EditCLPRV_O.SetFocus;
3:EditFEDOC_O.SetFocus;
4:EditFEREC_O.SetFocus;
5:EditFEPAG_O.SetFocus;
6:EditTIMPU_O.SetFocus;
7:EditDTOTA_O.SetFocus;
8:EditDFINT_O.SetFocus;
9:EditTINDI_O.SetFocus;
10:EditNALMA_O.SetFocus;
end;
end;
end;

function costeo(ult,prom,cant,exis:real;tipocosteo:string):Real;
var
valor:Real;
begin
with FormaCompras do
begin
{if tipocosteo='UEPS' then
begin
prom:=ult;
end;}
{***********************}
{if tipocosteo='PEPS' then
begin
prom:=prom;
end;}
{***********************}
tipocosteo:='PROM';
if tipocosteo='PROM' then
begin
{if TablaInventario.FieldByName('TICOS_I').AsString='PROM' then}
prom:=((exis*prom)+(cant*ult))/(exis+cant);
end;

costeo:=prom;

end;
end;



procedure ActualizaInventario;

begin

FormaCompras.TablaDeta.First;
with FormaCompras do
while not TablaDeta.Eof do
begin

 if TablaInventario.FindKey([TablaDeta.FieldByName('Clave').AsString]) then
 begin
 TablaInventario.Edit;

 TablaInventario.FieldByName('CPROM_I').AsFloat:=costeo(TablaDeta.FieldByName('Precio').AsFloat,TablaInventario.FieldByName('CPROM_I').AsFloat,
 TablaDeta.FieldByName('cantidad').AsFloat,TablaInventario.FieldByName('EXIST_I').AsFloat,TablaInventario.FieldByName('TICOS_I').AsString);
 TablaInventario.FieldByName('EXIST_I').AsFloat:=TablaInventario.FieldByName('EXIST_I').AsFloat+
 TablaDeta.FieldByName('Cantidad').AsFloat;
 TablaInventario.FieldByName('ULCOS_I').AsFloat:= TablaDeta.FieldByName('PRECIO').AsFloat;
 TablaInventario.Post;
 end;
  TablaDeta.Next;
end;

end;
{************}

procedure posicionacompras(clave:string);
begin
with FormaCompras do
begin
if FormaCompras.Tag=0 then
begin
rutas;
desactiva;
limpiar;
activabotones(True,True,False,True,True,True,False);
end;
FormaCompras.Tag:=1;
indice:=1;
TablaComprasE.FindKey([clave]);

leeencabezado;
LeeDetalle;
sumatotal;


end;
end;
{****opciones de guardado**************}
procedure guardanuevo(opcion:string);
begin

with FormaCompras do
begin
if opcion='Recepción' then
begin
generacuentasxpagar('n',0);
actualizaproveedor;
guardadetalle;
ActualizaInventario;
guardaencabezado;
end;

if opcion='Orden de Compra' then
begin
{generacuentasxpagar('n',0);}
{actualizaproveedor;}
guardadetalle;
{ActualizaInventario;}
guardaencabezado;
end;

if opcion='Devolución de Compra' then
begin
{generacuentasxpagar('n',0);}
{actualizaproveedor;}
guardadetalle;
{ActualizaInventario;}
guardaencabezado;
end;


borra;
BotonNuevo.Enabled:=True;
BotonGuardar.Enabled:=False;
BotonImprimir.Enabled:=True;
BotonCambios.Enabled:=True;
end;
end;

procedure guardacambio(opcion:string);
begin
with FormaCompras do
begin
if opcion='Recepción' then
begin
generacuentasxpagar('c',StrToInt(EditCLDOC_O.Text));
actualizaproveedor;
borradetalleanterior;
borramovimientosanteriores;
guardadetalle;
ActualizaInventario;
guardaencabezado;
end;

if opcion='Orden de Compra' then
begin

{generacuentasxpagar('c',StrToInt(EditCLDOC_O.Text));}
{actualizaproveedor;}
borradetalleanterior;
{borramovimientosanteriores;}
guardadetalle;
{ActualizaInventario;}
guardaencabezado;
end;

if opcion='Devolución de Compra' then
begin

{generacuentasxpagar('c',StrToInt(EditCLDOC_O.Text));}
{actualizaproveedor;}
borradetalleanterior;
{borramovimientosanteriores;}
guardadetalle;
{ActualizaInventario;}
guardaencabezado;
end;

borra;
BotonNuevo.Enabled:=True;
BotonGuardar.Enabled:=False;
BotonImprimir.Enabled:=True;
BotonCambios.Enabled:=True;
end;
end;



{*************}

procedure TFormaCompras.FormCreate(Sender: TObject);
begin
  {rutas;
  TablaComprasE.Open;
  TablaComprasD.Open;
  TablaDeta.Open;
  TablaProveedor.Open;
  TablaInventario.Open;}
  FormatosPais;
   Recepcin1.Enabled:=False;
  nombreformato:=leeruta+'\consulta\'+ruta(27+1);
   end;

procedure TFormaCompras.EditCLPRV_OExit(Sender: TObject);
begin
quitacolor(EditCLPRV_O.ComponentIndex);
if (TablaProveedor.FindKey([EditCLPRV_O.Text]))and(TablaProveedor.State=dsEdit) then
begin
Nombre.Caption:=TablaProveedor.FieldByName('NOMBR_P').AsString;
Direccion.Caption:=TablaProveedor.FieldByName('DIREC_P').AsString;
Poblacion.Caption:=TablaProveedor.FieldByName('POBLA_P').AsString;

end

else
     begin
     if (TablaProveedor.State=dsEdit) then
     begin
     MuestraMensaje('No existe');
     Nombre.Caption:='';
     Direccion.Caption:='';
     Poblacion.Caption:='';
     EditCLPRV_O.Setfocus;
     end;
end;

end;

procedure TFormaCompras.DetalleColEnter(Sender: TObject);
var valor:Real;
    code:integer;
    cadena:string;
begin

case Detalle.SelectedIndex of

0:begin

  end;


1:begin
if TablaDeta.FieldByName('Cantidad').AsString='' then
  Detalle.SelectedIndex:=Detalle.SelectedIndex-1
  else
  begin
  Val(TablaDeta.FieldByName('Cantidad').AsString,valor,code);
  if code<>0 then
  TablaDeta.FieldByName('Cantidad').AsString:='0';
  end;
  end;

2:begin
if TablaDeta.FieldByName('Cantidad').AsString='' then
  Detalle.SelectedIndex:=Detalle.SelectedIndex-1
  else

  if TablaInventario.FindKey([TablaDeta.FieldByName('Clave').AsString]) then
  begin

  TablaDeta.Edit;
  TablaDeta.FieldByName('Producto').AsString:=  TablaInventario.FieldByName('DSCPR_I').AsString;
  {TablaDeta.FieldByName('PRECIO').AsString:=  TablaInventario.FieldByName('PPUBL_I').AsString;}

  if EditDTOTA_O.Text='' then
  TablaDeta.FieldByName('DESCUENTO').AsString:='0'
  else
  TablaDeta.FieldByName('DESCUENTO').AsString:= EditDTOTA_O.Text;

  TablaDeta.FieldByName('importe').AsFloat:=  TablaDeta.FieldByName('cantidad').AsFloat*
  TablaDeta.FieldByName('Precio').AsFloat-(TablaDeta.FieldByName('cantidad').AsFloat*TablaDeta.FieldByName('Precio').AsFloat*
  TablaDeta.FieldByName('DESCUENTO').AsFloat/100)+0.000;




  Str(TablaDeta.FieldByName('importe').AsFloat:12:4,cadena);
  FormatFloat( CADENA,3);
  TablaDeta.FieldByName('importe').AsString:=cadena;


  Detalle.SelectedIndex:=3;

  end
  else
  begin


  Detalle.SelectedIndex:=Detalle.SelectedIndex-1;
  MuestraMensaje('El Producto No Se encuenta');
  end;

  end;
 5:begin
 TablaDeta.Edit;
 TablaDeta.FieldByName('importe').AsFloat:=  TablaDeta.FieldByName('cantidad').AsFloat*
  TablaDeta.FieldByName('Precio').AsFloat-(TablaDeta.FieldByName('cantidad').AsFloat*TablaDeta.FieldByName('Precio').AsFloat*
  TablaDeta.FieldByName('DESCUENTO').AsFloat/100)+0.001;

  Str(TablaDeta.FieldByName('importe').AsFloat:12:3,cadena);
  TablaDeta.FieldByName('importe').AsString:=cadena;

   end;

end;

end;

procedure regresabufercambios;
type
registrodeta=record
cantidad:real;
clave:string[15];
descripcion:string[40];
precio:real;
descuento:real;
importe:real;
end;
var
arch:File of registrodeta;
datos:registrodeta;
k:integer;
begin
With FormaCompras do
begin
AssignFile(arch,'bufer.tmp');
Reset(arch);
for k:=0 to Filesize(arch) -1 do
begin
seek(arch,k);
read(arch,datos);

 TablaInventario.First;
 if TablaInventario.FindKey([datos.clave]) then
 begin
 TablaInventario.Edit;

 TablaInventario.FieldByName('EXIST_I').AsFloat:= TablaInventario.FieldByName('EXIST_I').AsFloat +
 datos.cantidad;

 TablaInventario.Post;
 end;
{MuestraMensaje(FloatToStr(datos.cantidad)+(datos.clave)+(datos.descripcion)+FloatToStr(datos.precio)+
FloatToStr(datos.descuento));}
end;
CloseFile(arch);
end;
end;


procedure guardatodo(opcion:string);
begin

With FormaCompras do
begin

if BotonNuevo.Tag=1 then
begin
guardanuevo(TipoDocumento.Text);
end;


if BotonCambios.Tag=1 then
begin
guardacambio(TipoDocumento.Text);

end;

limpiar;
BotonCambios.Tag:=0;
BotonNuevo.Tag:=0;
desactiva;
end;
end;

procedure TFormaCompras.BotonGuardarClick(Sender: TObject);
begin
if EditCLDOC_O.Text<>'' then
begin
guardatodo(TipoDocumento.Text);
activabotones(True,True,False,True,True,True,False);
BotonCambios.Tag:=0;
BotonNuevo.Tag:=0;
{******retorna los datos de la ultima factura******}
{TablaComprasE.Last;}
leeencabezado;
LeeDetalle;
sumatotal;
{******************************************}


end
else
MuestraMensaje('Falta el Número de Documento');
end;

procedure TFormaCompras.BotonNuevoClick(Sender: TObject);
var
ultimo:integer;
begin
if caso(StrToInt(usuario.Caption),23) then
begin
saldoanterior:=0;
{**calculando el ultimo*********}
TablaComprasE.Last;
ultimo:=TablaComprasE.FieldByName('CLDOC_O').AsInteger;
{***termina el calculo del último *******}

activa;
EditCLDOC_O.SetFocus;

Nombre.Caption:='';
Direccion.Caption:='';
Poblacion.Caption:='';

TablaComprase.Insert;
EditFEDOC_O.Text:=DateToStr(Date);
TablaComprase.FieldByName('CLDOC_O').AsInteger:=ultimo+1;
TablaComprase.Post;
TablaComprase.Edit;
borra;
activabotones(False,False,True,False,False,False,True);
BotonNuevo.Tag:=1;
end;
end;

procedure TFormaCompras.Consultas1Click(Sender: TObject);
begin
FormaConsulta.TablaConsulta.DataBaseName:=ruta(8);
FormaConsulta.TablaConsulta.IndexName:='ICOMENC';
FormaConsulta.TablaConsulta.TableName:='comprase.dbf';

FormaConsulta.TablaConsulta.Open;
FormaConsulta.TablaConsulta.First;
FormaConsulta.De.Text:=FormaConsulta.TablaConsulta.Fields[0].AsString;
FormaConsulta.TablaConsulta.Last;
FormaConsulta.Hasta.Text:=FormaConsulta.TablaConsulta.Fields[0].AsString;
FormaConsulta.TablaConsulta.First;

FormaConsulta.RutaCampos.Text:=leeruta+'\consulta\comprase.cmp';
FormaConsulta.TipoVista.Text:=leeruta+'\consulta\comprase.vis';
FormaConsulta.Destino.Text:=leeruta+'\tempo\repcom.rep';
FormaConsulta.NumCampo.Caption:='0';
asignatipo;
leearchivocampos(47,61);
FormaConsulta.ShowModal;

end;

procedure TFormaCompras.EditCLPRV_OKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Ord(Char(Key))=113 then
begin
FormaConProvee.Panel1.Tag:=2;
FormaConProvee.ShowModal;
end;
if (Ord(Char(Key))=13) or (Ord(Char(Key))=40) then
begin
indice:=indice+1;
cursor1;
end;
if Ord(Char(Key))=38 then
begin
indice:=indice-1;
cursor1;
end;

end;
procedure TFormaCompras.EditFEDOC_OEnter(Sender: TObject);
begin
ponecolor(EditFEDOC_O.ComponentIndex,EditFEDOC_O.Color);
indice:=3;
EditFEDOC_O.Text:=DateToStr(Date);
Uno.Caption:=comenta(5,'compra.des');
Dos.Caption:=comenta(6,'compra.des');

end;

procedure TFormaCompras.DetalleKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Detalle.Enabled=True then
begin
if Ord(Char(Key))=13 then
begin
if Detalle.SelectedIndex=5 then
begin
Detalle.SelectedIndex:=0;
SumaTotal;
end
else
Detalle.SelectedIndex:=Detalle.SelectedIndex+1;
end;

if Ord(Char(Key))=113 then
begin
Detalle.Tag:=2;
TablaDeta.Post;
TablaDeta.Edit;
FormaConProduct.showModal;
end;
end;
{TablaConProduct.Edit;}
end;

procedure TFormaCompras.BotonSalirClick(Sender: TObject);
begin
Close;
end;

procedure TFormaCompras.EditCLDOC_OKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if (Ord(Char(Key))=13) or (Ord(Char(Key))=40) then
begin
indice:=indice+1;
cursor1;
end;
if Ord(Char(Key))=38 then
begin
indice:=indice-1;
cursor1;
end;
end;

procedure TFormaCompras.FormActivate(Sender: TObject);
begin
if FormaCompras.Tag=0 then
begin
rutas;
desactiva;
limpiar;
leedetalle;
BotonNuevo.Enabled:=True;
BotonGuardar.Enabled:=False;
{BotonImprimir.Enabled:=False;}
BotonCambios.Enabled:=True;

end;
FormaCompras.Tag:=1;
indice:=1;
end;

procedure TFormaCompras.EditNALMA_OKeyPress(Sender: TObject;
  var Key: Char);
begin
if Ord(char(Key))=13 then
begin
Detalle.SetFocus;
Detalle.SelectedIndex:=0;
end;
end;

procedure TFormaCompras.BotonCambiosClick(Sender: TObject);
begin
if caso(StrToInt(usuario.Caption),25) then
begin
activa;

bufercambios;
TablaComprase.Edit;
saldoanterior:=TablacomprasE.FieldByName('IMDOC_O').AsFloat;
activabotones(False,False,True,False,False,False,True);
BotonCambios.Tag:=1;
EditCLDOC_O.SetFocus;
end;
end;

procedure TFormaCompras.BotonBuscarClick(Sender: TObject);
var siguiente:LongInt;
begin
FormaBusqueda.ShowModal;
TablaComprase.FindNearest([FormaBusqueda.CajaBuscar.Text]);
LeeDetalle;
end;

procedure TFormaCompras.NavegadorClick(Sender: TObject;
  Button: TNavigateBtn);
begin
leeencabezado;
LeeDetalle;
sumatotal;

end;

procedure TFormaCompras.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
if (TablaComprase.State=dsEdit)or (TablaComprase.State=dsInsert) then
begin
FormaCerrar.ShowModal;

if FormaCerrar.Tag=1 then
begin
{MuestraMensaje('guardando');}
guardatodo(tipoDocumento.Text);
activabotones(True,True,False,True,True,True,False);
BotonCambios.Tag:=0;
BotonNuevo.Tag:=0;

end;

if FormaCerrar.Tag=2 then
begin
if BotonCambios.Tag<>1 then
TablaComprasE.Delete;

{TablaComprase.Cancel;}
TablaComprasd.Cancel;
FormaCompras.Close;
if BotonCambios.tag=1 then
regresabufercambios;
activabotones(True,True,False,True,True,True,False);{MuestraMensaje(IntToStr(Cambios.Tag));}
BotonCambios.Tag:=0;
BotonNuevo.Tag:=0;

end;

if FormaCerrar.Tag=3 then
Action:=caNone;
FormaCerrar.Tag:=0;
FormaCompras.Tag:=1;

end;
{Cambios.Tag:=0;}
BotonSalir.Tag:=1000;
end;

procedure TFormaCompras.BotonImprimirClick(Sender: TObject);
begin
if ImpresoraLista then
begin
forma(TablaComprase,TablaDeta,nombreformato,'i');

end
else
MuestraMensaje('La Impresora No Se Encuentra Lista...');
end;

procedure TFormaCompras.EditFEDOC_OKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=114 then
EditFEDOC_O.Text:=DateToStr(Date);
if (Ord(Char(Key))=13) or (Ord(Char(Key))=40) then
begin
indice:=indice+1;
cursor1;
end;
if Ord(Char(Key))=38 then
begin
indice:=indice-1;
cursor1;
end;


end;

procedure TFormaCompras.EditFEREC_OKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=114 then
EditFEREC_O.Text:=DateToStr(Date);
if (Ord(Char(Key))=13) or (Ord(Char(Key))=40) then
begin
indice:=indice+1;
cursor1;
end;
if Ord(Char(Key))=38 then
begin
indice:=indice-1;
cursor1;
end;


end;

procedure TFormaCompras.EditFEPAG_OKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=114 then
EditFEPAG_O.Text:=DateToStr(Date);
if (Ord(Char(Key))=13) or (Ord(Char(Key))=40) then
begin
indice:=indice+1;
cursor1;
end;
if Ord(Char(Key))=38 then
begin
indice:=indice-1;
cursor1;
end;


end;

procedure TFormaCompras.EditCLDOC_OEnter(Sender: TObject);
begin
ponecolor(EditCLDOC_O.ComponentIndex,EditCLDOC_O.Color);
indice:=1;
Uno.Caption:=comenta(1,'compra.des');
Dos.Caption:=comenta(2,'compra.des');
end;

procedure TFormaCompras.EditCLPRV_OEnter(Sender: TObject);
begin
ponecolor(EditCLPRV_O.ComponentIndex,EditCLPRV_O.Color);
indice:=2;
Uno.Caption:=comenta(3,'compra.des');
Dos.Caption:=comenta(4,'compra.des');
end;

procedure TFormaCompras.EditFEREC_OEnter(Sender: TObject);
begin
ponecolor(EditFEREC_O.ComponentIndex,EditFEREC_O.Color);
indice:=4;
Uno.Caption:=comenta(7,'compra.des');
Dos.Caption:=comenta(8,'compra.des');
end;

procedure TFormaCompras.EditFEPAG_OEnter(Sender: TObject);
begin
quitacolor(EditFEPAG_O.ComponentIndex);
ponecolor(EditFEPAG_O.ComponentIndex,EditFEPAG_O.Color);
indice:=5;
Uno.Caption:=comenta(9,'compra.des');
Dos.Caption:=comenta(10,'compra.des');
end;

procedure TFormaCompras.EditTIMPU_OEnter(Sender: TObject);
begin
ponecolor(EditTIMPU_O.ComponentIndex,EditTIMPU_O.Color);
indice:=6;
Uno.Caption:=comenta(11,'compra.des');
Dos.Caption:=comenta(12,'compra.des');
end;

procedure TFormaCompras.EditDTOTA_OEnter(Sender: TObject);
begin
ponecolor(EditDTOTA_O.ComponentIndex,EditDTOTA_O.Color);
indice:=7;
Uno.Caption:=comenta(13,'compra.des');
Dos.Caption:=comenta(14,'compra.des');
end;

procedure TFormaCompras.EditDFINT_OEnter(Sender: TObject);
begin
ponecolor(EditDFINT_O.ComponentIndex,EditDFINT_O.Color);
indice:=8;
Uno.Caption:=comenta(15,'compra.des');
Dos.Caption:=comenta(16,'compra.des');
end;

procedure TFormaCompras.EditTINDI_OEnter(Sender: TObject);
begin
ponecolor(EditTINDI_O.ComponentIndex,EditTINDI_O.Color);
indice:=9;
Uno.Caption:=comenta(17,'compra.des');
Dos.Caption:=comenta(18,'compra.des');
end;


procedure TFormaCompras.EditFEREC_OExit(Sender: TObject);
begin
quitacolor(EditFEREC_O.ComponentIndex);
if not fechavalida(EditFEREC_O.Text) then
EditFEREC_O.Text:=DateTimeToStr(Date);
end;

procedure TFormaCompras.EditFEPAG_OExit(Sender: TObject);
begin
quitacolor(EditFEPAG_O.ComponentIndex);
if not fechavalida(EditFEPAG_O.Text) then
EditFEPAG_O.Text:=DateTimeToStr(Date);

end;

procedure TFormaCompras.EditCLDOC_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(1,'compra.des');
Dos.Caption:=comenta(2,'compra.des');
end;

procedure TFormaCompras.EditCLPRV_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(3,'compra.des');
Dos.Caption:=comenta(4,'compra.des');
end;

procedure TFormaCompras.EditFEDOC_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(5,'compra.des');
Dos.Caption:=comenta(6,'compra.des');
end;

procedure TFormaCompras.EditFEREC_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(7,'compra.des');
Dos.Caption:=comenta(8,'compra.des');
end;

procedure TFormaCompras.EditFEPAG_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(9,'compra.des');
Dos.Caption:=comenta(10,'compra.des');
end;

procedure TFormaCompras.EditTIMPU_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(11,'compra.des');
Dos.Caption:=comenta(12,'compra.des');
end;

procedure TFormaCompras.EditDTOTA_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(13,'compra.des');
Dos.Caption:=comenta(14,'compra.des');
end;

procedure TFormaCompras.EditDFINT_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(15,'compra.des');
Dos.Caption:=comenta(16,'compra.des');
end;

procedure TFormaCompras.EditTINDI_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(17,'compra.des');
Dos.Caption:=comenta(18,'compra.des');
end;

procedure TFormaCompras.EditNALMA_OMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
Uno.Caption:=comenta(19,'compra.des');
Dos.Caption:=comenta(20,'compra.des');
end;

procedure TFormaCompras.EditNALMA_OEnter(Sender: TObject);
begin
ponecolor(EditNALMA_O.ComponentIndex,EditNALMA_O.Color);
Uno.Caption:=comenta(19,'compra.des');
Dos.Caption:=comenta(20,'compra.des');
end;



procedure TFormaCompras.TablaDetaAfterInsert(DataSet: TDataSet);
begin
{sumatotal;}
end;

procedure TFormaCompras.TablaDetaBeforeInsert(DataSet: TDataSet);
begin
{Sumatotal;}
end;

procedure TFormaCompras.Consecutivo1Click(Sender: TObject);
var
desde,hastavalor:string;
begin
FormaFormatos.Rangos.Visible:=True;
FormaFormatos.Formatos.Visible:=False;
activacondiciones(true,true,False,False,False,true,true,true,true,'comprase.cmp');
TablaComprasE.First;
desde:=TablaComprasE.FieldByName('CLDOC_O').AsString;
TablaComprasE.Last;
hastavalor:=TablaComprasE.FieldByName('CLDOC_O').AsString;
valoresiniciales('','',desde,hastavalor);

FormaFormatos.ShowModal;
if FormaFormatos.Tag=1 then
begin
condiciones(FormaFormatos.C1.Caption,tipooperador(FormaFormatos.Operador1.Text),FormaFormatos.Valor1.Text,FormaFormatos.T1.Caption,FormaFormatos.C2.Caption,tipooperador(FormaFormatos.Operador2.Text),FormaFormatos.Valor2.Text,FormaFormatos.T2.Caption,FormaFormatos.C3.Caption,tipooperador(FormaFormatos.Operador3.Text),FormaFormatos.Valor3.Text,FormaFormatos.T3.Caption);
Concentrar(TablaComprasE,FormaFormatos.De.Text,FormaFormatos.Hasta.Text,'f','f','f','CLDOC_O','NOMBR_O','IMDOC_O','','','','','','','','','X','','D');
poneetiquetas('Cliente','Nombre','Importe','','','','','','','','');
Poneanchos(20,20,20,20,20,20,20,20,20,20,0);
parametrosgrafica('Gráfica Consecutiva de Documentos(Compras)','Número de Documento','Total por Documento',1);
FormaBarras.Tag:=1;
FormaBarras.Panel2.Tag:=0;
FormaBarras.botonGrafica.Tag:=2;

FormaBarras.Concentrado.Clear;
FormaBarras.Caption:='Reporte Consecutivo de Compras';
FormaBarras.ShowModal;
FormaBarras.Tag:=0;
end;
Formaformatos.Tag:=0;

end;

procedure TFormaCompras.TablaComprasEEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
DatabaseError('No se Pueden Editar los Datos ha Ocurrido un Error');
end;

procedure TFormaCompras.TablaComprasEPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
DatabaseError('No se Pueden Guardar los Datos ha Ocurrido un Error');
end;

procedure TFormaCompras.EditCLDOC_OExit(Sender: TObject);
begin
quitacolor(EditCLDOC_O.ComponentIndex);
end;

procedure TFormaCompras.EditFEDOC_OExit(Sender: TObject);
begin
quitacolor(EditFEDOC_O.ComponentIndex);
end;

procedure TFormaCompras.EditTIMPU_OExit(Sender: TObject);
begin
quitacolor(EditTIMPU_O.ComponentIndex);
end;

procedure TFormaCompras.EditDTOTA_OExit(Sender: TObject);
begin
quitacolor(EditDTOTA_O.ComponentIndex);
end;

procedure TFormaCompras.EditDFINT_OExit(Sender: TObject);
begin
quitacolor(EditDFINT_O.ComponentIndex);
end;

procedure TFormaCompras.EditTINDI_OExit(Sender: TObject);
begin
quitacolor(EditTINDI_O.ComponentIndex);
end;

procedure TFormaCompras.EditNALMA_OExit(Sender: TObject);
begin
quitacolor(EditNALMA_O.ComponentIndex);
end;


procedure TFormaCompras.BotonCambiosMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCompras.Left+BotonCambios.Left,FormaCompras.Top+BotonCambios.Top+BotonCambios.Height,42);
end;

procedure TFormaCompras.BotonNuevoMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCompras.Left+BotonNuevo.Left,FormaCompras.Top+BotonNuevo.Top+Botonnuevo.Height,43);
end;

procedure TFormaCompras.BotonGuardarMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCompras.Left+BotonGuardar.Left,FormaCompras.Top+Botonguardar.Top+Botonguardar.Height,44);
end;

procedure TFormaCompras.BotonBuscarMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCompras.Left+BotonBuscar.Left,FormaCompras.Top+BotonBuscar.Top+BotonBuscar.Height,45);
end;

procedure TFormaCompras.BotonImprimirMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCompras.Left+BotonImprimir.Left,FormaCompras.Top+BotonImprimir.Top+BotonImprimir.Height,46);
end;













procedure TFormaCompras.ImprimePalantilla1Click(Sender: TObject);
begin
FormaCompras.Print;
end;

procedure TFormaCompras.TipoDocumentoChange(Sender: TObject);
begin

if TipoDocumento.Text='Recepción' then
begin
abretabla('R');
Recepcin1.Enabled:=False;
Devolucin1.Enabled:=True;
BotonPagos.Enabled:=True;
BotonObservacion.Enabled:=True;
end;

if TipoDocumento.Text='Orden de Compra' then
begin
abretabla('O');
Recepcin1.Enabled:=True;
Devolucin1.Enabled:=False;
BotonPagos.Enabled:=False;
BotonObservacion.Enabled:=False;
{MuestraMensaje('cambio a oreden');}
end;

if TipoDocumento.Text='Devolución de Compra' then
begin
abretabla('D');
Recepcin1.Enabled:=False;
Devolucin1.Enabled:=False;
BotonPagos.Enabled:=False;
BotonObservacion.Enabled:=False;
end;

LeeDetalle;
sumatotal;

end;

procedure TFormaCompras.Recepcin1Click(Sender: TObject);
begin
archivodetalle;
buferencabezado;
borra;
AbreTabla('R');
TipoDocumento.Text:='Recepción';
generarecepcion;
end;

procedure TFormaCompras.Temas1Click(Sender: TObject);
begin
PoneAyuda(leeruta+'\ayuda\compras.rtf',0);
end;

procedure TFormaCompras.CancelaMovimiento1Click(Sender: TObject);
begin
if (BotonNuevo.Tag=1) then
begin
TablaComprasE.Delete;
borra;
LeeDetalle;
sumatotal;
desactiva;
end;

if BotonCambios.Tag=1 then
begin
regresabufercambios;
TablaComprasE.Cancel;
desactiva;
end;

activabotones(True,True,False,True,True,True,False);
BotonNuevo.Tag:=0;
BotonCambios.Tag:=0;

end;




procedure TFormaCompras.SpeedButton1Click(Sender: TObject);
var
cantiletra:string;
begin
FormaDesglosaTotal.SubTotal.Caption:=EtiSubtotal.Caption;
if EditDTOTA_O.Text='' then EditDTOTA_O.Text:='0';
FormaDesglosaTotal.Descuento.Caption:=convierte('###,###,##0.00',redondear(StrToCurr(EditDTOTA_O.Text)),'$');
FormaDesglosaTotal.Iva.Caption:=EtiImpuesto.Caption;
FormaDesglosaTotal.Total.Caption:=EtiTotal.Caption;
{*****************}
cantiletra:=Traduce(totaldoc);
FormaDesglosaTotal.Letra2.Caption:='';
FormaDesglosaTotal.Letra1.Caption:=cantiletra;
{*****************}
FormaDesglosaTotal.ShowModal;

end;

procedure TFormaCompras.SpeedButton2Click(Sender: TObject);
begin
if FileExists(nombreformato) then
begin
forma(TablaComprasE,TablaDeta,nombreformato,'p');
end
else
MuestraMensaje('El Formato '+nombreformato+'No Existe');
FormaEdicion.Hoja.Tag:=0;
FormaAnteriorEdicion.ShowModal;
end;

procedure TFormaCompras.BotonObservacionClick(Sender: TObject);
begin
buscaobservacion(EditCLDOC_O.Text,BotonNuevo.Tag);
end;

procedure TFormaCompras.BotonPagosClick(Sender: TObject);
begin
if caso(StrToInt(usuario.Caption),6) then
begin
if FormaConsultaCuePagar.Tag=0 then
begin
FormaConsultaCuePagar.TablaDeta.DatabaseName:=ruta(8);
FormaConsultaCuePagar.TablaProveedo.DatabaseName:=ruta(8);
FormaConsultaCuePagar.TablaDeta.Open;
FormaConsultaCuePagar.TablaProveedo.Open;
end;
FormaConsultaCuePagar.Tag:=1;
FormaCxPDetalle.Show;
FormaCXPDetalle.Factura.Text:=EditCLDOC_O.Text;
end;

end;

procedure TFormaCompras.Eliminar1Click(Sender: TObject);
begin
if (not Busca(StrToint(EditCLDOC_O.Text))) then
begin

if (TipoDocumento.Text='Recepción')then
begin
if (cobranzacero(EditCLDOC_O.Text)) then
begin
bufercambios;
borramovimientosanteriores;
borracuentasxpagar(EditCLDOC_O.Text);
end
else
MuestraMensaje('El Documento No Puede Borrarse Tiene Pagos..,');
end;

if (TipoDocumento.Text='Orden de Compra')then
begin
bufercambios;
borramovimientosanteriores;

end;

borradetalleanterior;
TablaComprasE.Delete;
end
else
MuestraMensaje('La Compra no puede Eliminarse porque Tiene Movimientos');


end;

procedure TFormaCompras.EligeFormato1Click(Sender: TObject);
begin
FormaFormatos.Tag:=3;
FormaFormatos.Rangos.Visible:=False;
FormaFormatos.Formatos.Visible:=True;
FormaFormatos.ShowModal;
if FormaFormatos.Tag=3 then
begin
if FileExists(Formaformatos.Rutas.Text) then
begin
nombreformato:=Formaformatos.Rutas.Text;
{forma(TablaFacturaE,TablaFacturaE,Formaformatos.Rutas.Text,'i')}

end
else
MuestraMensaje('El Formato '+Formaformatos.Rutas.Text+' No Existe');
end;
FormaFormatos.Tag:=1;

end;

procedure TFormaCompras.DiseaFormato1Click(Sender: TObject);
begin

FormaFormatos.Rangos.Visible:=False;
FormaFormatos.Formatos.Visible:=True;
FormaFormatos.ShowModal;


end;

end.








