commit d031fca570debc35ef411665bb34e3245a2ecd1c Author: jdg Date: Sun Sep 12 22:19:30 2021 +0200 First commit 14/02/1999 diff --git a/-- TPVwin --.bpg b/-- TPVwin --.bpg new file mode 100644 index 0000000..8bce9c4 --- /dev/null +++ b/-- TPVwin --.bpg @@ -0,0 +1,34 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = TPV.exe TPV_Ventas.exe TPV_BuscarEntreLineas.exe TPV_SAT.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + + +TPV.exe: TPV.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +TPV_Ventas.exe: TPV_Ventas.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +TPV_BuscarEntreLineas.exe: TPV_BuscarEntreLineas.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + +TPV_SAT.exe: TPV_SAT.bpr + $(ROOT)\bin\bpr2mak $** + $(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak + + diff --git a/AgendaLlamadas.exe b/AgendaLlamadas.exe new file mode 100644 index 0000000..d90a636 Binary files /dev/null and b/AgendaLlamadas.exe differ diff --git a/BuscarEntreLineas.cpp b/BuscarEntreLineas.cpp new file mode 100644 index 0000000..a7b680c --- /dev/null +++ b/BuscarEntreLineas.cpp @@ -0,0 +1,77 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "BuscarEntreLineas.h" +#include "TDlgBuscar.h" +#include "TpvVntAlbPrint.h" +#include "TpvVntFctPrint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::Button2Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Button1Click(TObject *Sender) +{ + int CodFactura; + // Mostramos la zona de busqueda de clientes... + // Mostramos el dialogo, buscar Vendedores + TDlgBuscar *DlgBuscar; + + DlgBuscar = new TDlgBuscar(this); + DlgBuscar -> DefaultField = "NombreProducto"; + DlgBuscar -> TbBusquedas -> TableName = "Ventas (cuerpo).db"; + DlgBuscar -> TbBusquedas -> Active = true; + + DlgBuscar -> ShowModal(); + + if ( DlgBuscar -> ModalResult == mrOk ) + { + CodFactura = DlgBuscar -> TbBusquedas -> FieldByName( "EnlaceFactura" ) -> AsInteger; + TbVentasC -> Active = true; + if ( ( TbVentasC -> Locate( "EnlaceFactura", CodFactura, TLocateOptions() << loCaseInsensitive ) ) ) + { + if ( TbVentasC->FieldByName("CodFactura")->AsInteger <= 0 ) + { + // Imprime Ticket + TQRMDFacturaVnt1 *QRMDFacturaVnt; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + QRMDFacturaVnt = new TQRMDFacturaVnt1(this); + // Mostrarla como modal y según el valor devuelto + QRMDFacturaVnt -> TbVntCabecera -> GotoCurrent( TbVentasC ); + QRMDFacturaVnt -> Preview(); + // Destruimos la ficha + delete QRMDFacturaVnt; + } else { + // Imprime factura + TQRMDFacturaVnt *QRMDFacturaVnt; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + QRMDFacturaVnt = new TQRMDFacturaVnt(this); + // Mostrarla como modal y según el valor devuelto + QRMDFacturaVnt -> TbVntCabecera -> GotoCurrent( TbVentasC ); + QRMDFacturaVnt -> Preview(); + // Destruimos la ficha + delete QRMDFacturaVnt; + } + TbVentasC -> Active = false; + } + } + + delete DlgBuscar; +} +//--------------------------------------------------------------------------- + \ No newline at end of file diff --git a/BuscarEntreLineas.dfm b/BuscarEntreLineas.dfm new file mode 100644 index 0000000..3dd2d2b --- /dev/null +++ b/BuscarEntreLineas.dfm @@ -0,0 +1,72 @@ +object Form1: TForm1 + Left = 206 + Top = 126 + Width = 413 + Height = 180 + Caption = 'Form1' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 13 + object Label1: TLabel + Left = 0 + Top = 0 + Width = 401 + Height = 57 + Alignment = taCenter + Caption = 'Busqueda de Facturas por CONTENIDO' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + WordWrap = True + end + object Button1: TButton + Left = 128 + Top = 88 + Width = 145 + Height = 25 + Caption = '&Localizar Factura' + TabOrder = 0 + OnClick = Button1Click + end + object Button2: TButton + Left = 128 + Top = 120 + Width = 145 + Height = 25 + Caption = '&Salir' + TabOrder = 1 + OnClick = Button2Click + end + object Empresas: TDatabase + Connected = True + DatabaseName = 'TpvWin' + DriverName = 'STANDARD' + Params.Strings = ( + 'PATH=DATOS\' + 'DEFAULT DRIVER=PARADOX' + 'ENABLE BCD=FALSE') + SessionName = 'Default' + Top = 48 + end + object TbVentasC: TTable + DatabaseName = 'TpvWin' + TableName = 'Ventas (cabecera).db' + Left = 40 + Top = 80 + object TbVentasCEnlaceFactura: TAutoIncField + FieldName = 'EnlaceFactura' + end + object TbVentasCCodFactura: TIntegerField + FieldName = 'CodFactura' + end + end +end diff --git a/BuscarEntreLineas.h b/BuscarEntreLineas.h new file mode 100644 index 0000000..498870b --- /dev/null +++ b/BuscarEntreLineas.h @@ -0,0 +1,32 @@ +//--------------------------------------------------------------------------- + +#ifndef BuscarEntreLineasH +#define BuscarEntreLineasH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TLabel *Label1; + TButton *Button1; + TButton *Button2; + TDatabase *Empresas; + TTable *TbVentasC; + TAutoIncField *TbVentasCEnlaceFactura; + TIntegerField *TbVentasCCodFactura; + void __fastcall Button2Click(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/Cerezas.jpg b/Cerezas.jpg new file mode 100644 index 0000000..2541b8e Binary files /dev/null and b/Cerezas.jpg differ diff --git a/Datos/AccessControl.PX b/Datos/AccessControl.PX new file mode 100644 index 0000000..f33c244 Binary files /dev/null and b/Datos/AccessControl.PX differ diff --git a/Datos/AccessControl.db b/Datos/AccessControl.db new file mode 100644 index 0000000..8178ce0 Binary files /dev/null and b/Datos/AccessControl.db differ diff --git a/Datos/Compras (cabecera).PX b/Datos/Compras (cabecera).PX new file mode 100644 index 0000000..95e6c1e Binary files /dev/null and b/Datos/Compras (cabecera).PX differ diff --git a/Datos/Compras (cabecera).VAL b/Datos/Compras (cabecera).VAL new file mode 100644 index 0000000..d5722b4 Binary files /dev/null and b/Datos/Compras (cabecera).VAL differ diff --git a/Datos/Compras (cabecera).XG0 b/Datos/Compras (cabecera).XG0 new file mode 100644 index 0000000..787a790 Binary files /dev/null and b/Datos/Compras (cabecera).XG0 differ diff --git a/Datos/Compras (cabecera).YG0 b/Datos/Compras (cabecera).YG0 new file mode 100644 index 0000000..5ab784f Binary files /dev/null and b/Datos/Compras (cabecera).YG0 differ diff --git a/Datos/Compras (cabecera).db b/Datos/Compras (cabecera).db new file mode 100644 index 0000000..1d495a9 Binary files /dev/null and b/Datos/Compras (cabecera).db differ diff --git a/Datos/Compras (cuerpo).PX b/Datos/Compras (cuerpo).PX new file mode 100644 index 0000000..bef99f5 Binary files /dev/null and b/Datos/Compras (cuerpo).PX differ diff --git a/Datos/Compras (cuerpo).XG0 b/Datos/Compras (cuerpo).XG0 new file mode 100644 index 0000000..845318f Binary files /dev/null and b/Datos/Compras (cuerpo).XG0 differ diff --git a/Datos/Compras (cuerpo).YG0 b/Datos/Compras (cuerpo).YG0 new file mode 100644 index 0000000..47a4a1a Binary files /dev/null and b/Datos/Compras (cuerpo).YG0 differ diff --git a/Datos/Compras (cuerpo).db b/Datos/Compras (cuerpo).db new file mode 100644 index 0000000..31b7fdf Binary files /dev/null and b/Datos/Compras (cuerpo).db differ diff --git a/Datos/DBDWORK.INI b/Datos/DBDWORK.INI new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Datos/DBDWORK.INI @@ -0,0 +1 @@ + diff --git a/Datos/ProdTMP vnt.db b/Datos/ProdTMP vnt.db new file mode 100644 index 0000000..fd29606 Binary files /dev/null and b/Datos/ProdTMP vnt.db differ diff --git a/Datos/Tb_CarteraClt.PX b/Datos/Tb_CarteraClt.PX new file mode 100644 index 0000000..afa221c Binary files /dev/null and b/Datos/Tb_CarteraClt.PX differ diff --git a/Datos/Tb_CarteraClt.XG0 b/Datos/Tb_CarteraClt.XG0 new file mode 100644 index 0000000..9e21fd4 Binary files /dev/null and b/Datos/Tb_CarteraClt.XG0 differ diff --git a/Datos/Tb_CarteraClt.XG1 b/Datos/Tb_CarteraClt.XG1 new file mode 100644 index 0000000..ca3af47 Binary files /dev/null and b/Datos/Tb_CarteraClt.XG1 differ diff --git a/Datos/Tb_CarteraClt.YG0 b/Datos/Tb_CarteraClt.YG0 new file mode 100644 index 0000000..0d9d1c5 Binary files /dev/null and b/Datos/Tb_CarteraClt.YG0 differ diff --git a/Datos/Tb_CarteraClt.YG1 b/Datos/Tb_CarteraClt.YG1 new file mode 100644 index 0000000..1224886 Binary files /dev/null and b/Datos/Tb_CarteraClt.YG1 differ diff --git a/Datos/Tb_CarteraClt.db b/Datos/Tb_CarteraClt.db new file mode 100644 index 0000000..fe069e5 Binary files /dev/null and b/Datos/Tb_CarteraClt.db differ diff --git a/Datos/Tb_CarteraProv.PX b/Datos/Tb_CarteraProv.PX new file mode 100644 index 0000000..d859269 Binary files /dev/null and b/Datos/Tb_CarteraProv.PX differ diff --git a/Datos/Tb_CarteraProv.XG0 b/Datos/Tb_CarteraProv.XG0 new file mode 100644 index 0000000..52f5433 Binary files /dev/null and b/Datos/Tb_CarteraProv.XG0 differ diff --git a/Datos/Tb_CarteraProv.XG1 b/Datos/Tb_CarteraProv.XG1 new file mode 100644 index 0000000..9724be5 Binary files /dev/null and b/Datos/Tb_CarteraProv.XG1 differ diff --git a/Datos/Tb_CarteraProv.YG0 b/Datos/Tb_CarteraProv.YG0 new file mode 100644 index 0000000..af4d8bb Binary files /dev/null and b/Datos/Tb_CarteraProv.YG0 differ diff --git a/Datos/Tb_CarteraProv.YG1 b/Datos/Tb_CarteraProv.YG1 new file mode 100644 index 0000000..874f278 Binary files /dev/null and b/Datos/Tb_CarteraProv.YG1 differ diff --git a/Datos/Tb_CarteraProv.db b/Datos/Tb_CarteraProv.db new file mode 100644 index 0000000..e9ee47e Binary files /dev/null and b/Datos/Tb_CarteraProv.db differ diff --git a/Datos/Tb_CtblCC.PX b/Datos/Tb_CtblCC.PX new file mode 100644 index 0000000..03317b3 Binary files /dev/null and b/Datos/Tb_CtblCC.PX differ diff --git a/Datos/Tb_CtblCC.XG0 b/Datos/Tb_CtblCC.XG0 new file mode 100644 index 0000000..bd68894 Binary files /dev/null and b/Datos/Tb_CtblCC.XG0 differ diff --git a/Datos/Tb_CtblCC.YG0 b/Datos/Tb_CtblCC.YG0 new file mode 100644 index 0000000..9d6c124 Binary files /dev/null and b/Datos/Tb_CtblCC.YG0 differ diff --git a/Datos/Tb_CtblCC.db b/Datos/Tb_CtblCC.db new file mode 100644 index 0000000..c3b120a Binary files /dev/null and b/Datos/Tb_CtblCC.db differ diff --git a/Datos/Tb_CtblPteC.PX b/Datos/Tb_CtblPteC.PX new file mode 100644 index 0000000..0d7d2c5 Binary files /dev/null and b/Datos/Tb_CtblPteC.PX differ diff --git a/Datos/Tb_CtblPteC.XG0 b/Datos/Tb_CtblPteC.XG0 new file mode 100644 index 0000000..c4efacc Binary files /dev/null and b/Datos/Tb_CtblPteC.XG0 differ diff --git a/Datos/Tb_CtblPteC.XG1 b/Datos/Tb_CtblPteC.XG1 new file mode 100644 index 0000000..85808d3 Binary files /dev/null and b/Datos/Tb_CtblPteC.XG1 differ diff --git a/Datos/Tb_CtblPteC.YG0 b/Datos/Tb_CtblPteC.YG0 new file mode 100644 index 0000000..3d279c0 Binary files /dev/null and b/Datos/Tb_CtblPteC.YG0 differ diff --git a/Datos/Tb_CtblPteC.YG1 b/Datos/Tb_CtblPteC.YG1 new file mode 100644 index 0000000..b066f7a Binary files /dev/null and b/Datos/Tb_CtblPteC.YG1 differ diff --git a/Datos/Tb_CtblPteC.db b/Datos/Tb_CtblPteC.db new file mode 100644 index 0000000..95bcba2 Binary files /dev/null and b/Datos/Tb_CtblPteC.db differ diff --git a/Datos/Tb_Ref.PX b/Datos/Tb_Ref.PX new file mode 100644 index 0000000..878d08f Binary files /dev/null and b/Datos/Tb_Ref.PX differ diff --git a/Datos/Tb_Ref.XG0 b/Datos/Tb_Ref.XG0 new file mode 100644 index 0000000..35152f1 Binary files /dev/null and b/Datos/Tb_Ref.XG0 differ diff --git a/Datos/Tb_Ref.XG1 b/Datos/Tb_Ref.XG1 new file mode 100644 index 0000000..0224863 Binary files /dev/null and b/Datos/Tb_Ref.XG1 differ diff --git a/Datos/Tb_Ref.YG0 b/Datos/Tb_Ref.YG0 new file mode 100644 index 0000000..ac0d422 Binary files /dev/null and b/Datos/Tb_Ref.YG0 differ diff --git a/Datos/Tb_Ref.YG1 b/Datos/Tb_Ref.YG1 new file mode 100644 index 0000000..b367762 Binary files /dev/null and b/Datos/Tb_Ref.YG1 differ diff --git a/Datos/Tb_Ref.db b/Datos/Tb_Ref.db new file mode 100644 index 0000000..d0ff471 Binary files /dev/null and b/Datos/Tb_Ref.db differ diff --git a/Datos/Tb_RefC.PX b/Datos/Tb_RefC.PX new file mode 100644 index 0000000..0f92ec7 Binary files /dev/null and b/Datos/Tb_RefC.PX differ diff --git a/Datos/Tb_RefC.XG0 b/Datos/Tb_RefC.XG0 new file mode 100644 index 0000000..fec1281 Binary files /dev/null and b/Datos/Tb_RefC.XG0 differ diff --git a/Datos/Tb_RefC.YG0 b/Datos/Tb_RefC.YG0 new file mode 100644 index 0000000..e623fb5 Binary files /dev/null and b/Datos/Tb_RefC.YG0 differ diff --git a/Datos/Tb_RefC.db b/Datos/Tb_RefC.db new file mode 100644 index 0000000..e1b9a1f Binary files /dev/null and b/Datos/Tb_RefC.db differ diff --git a/Datos/Tb_RefH.DB b/Datos/Tb_RefH.DB new file mode 100644 index 0000000..c635717 Binary files /dev/null and b/Datos/Tb_RefH.DB differ diff --git a/Datos/Tb_RefH.PX b/Datos/Tb_RefH.PX new file mode 100644 index 0000000..23be4df Binary files /dev/null and b/Datos/Tb_RefH.PX differ diff --git a/Datos/Tb_RefH.XG0 b/Datos/Tb_RefH.XG0 new file mode 100644 index 0000000..4881a27 Binary files /dev/null and b/Datos/Tb_RefH.XG0 differ diff --git a/Datos/Tb_RefH.YG0 b/Datos/Tb_RefH.YG0 new file mode 100644 index 0000000..db6153b Binary files /dev/null and b/Datos/Tb_RefH.YG0 differ diff --git a/Datos/Ventas (Factura).PX b/Datos/Ventas (Factura).PX new file mode 100644 index 0000000..0bf5c28 Binary files /dev/null and b/Datos/Ventas (Factura).PX differ diff --git a/Datos/Ventas (Factura).VAL b/Datos/Ventas (Factura).VAL new file mode 100644 index 0000000..74c021f Binary files /dev/null and b/Datos/Ventas (Factura).VAL differ diff --git a/Datos/Ventas (Factura).db b/Datos/Ventas (Factura).db new file mode 100644 index 0000000..095bebe Binary files /dev/null and b/Datos/Ventas (Factura).db differ diff --git a/Datos/Ventas (cabecera).DB b/Datos/Ventas (cabecera).DB new file mode 100644 index 0000000..fff0e1d Binary files /dev/null and b/Datos/Ventas (cabecera).DB differ diff --git a/Datos/Ventas (cabecera).MB b/Datos/Ventas (cabecera).MB new file mode 100644 index 0000000..5a8b7d0 Binary files /dev/null and b/Datos/Ventas (cabecera).MB differ diff --git a/Datos/Ventas (cabecera).PX b/Datos/Ventas (cabecera).PX new file mode 100644 index 0000000..ce88979 Binary files /dev/null and b/Datos/Ventas (cabecera).PX differ diff --git a/Datos/Ventas (cabecera).VAL b/Datos/Ventas (cabecera).VAL new file mode 100644 index 0000000..95275a9 Binary files /dev/null and b/Datos/Ventas (cabecera).VAL differ diff --git a/Datos/Ventas (cabecera).XG0 b/Datos/Ventas (cabecera).XG0 new file mode 100644 index 0000000..9eb9764 Binary files /dev/null and b/Datos/Ventas (cabecera).XG0 differ diff --git a/Datos/Ventas (cabecera).XG1 b/Datos/Ventas (cabecera).XG1 new file mode 100644 index 0000000..aca6bb8 Binary files /dev/null and b/Datos/Ventas (cabecera).XG1 differ diff --git a/Datos/Ventas (cabecera).XG2 b/Datos/Ventas (cabecera).XG2 new file mode 100644 index 0000000..195be5b Binary files /dev/null and b/Datos/Ventas (cabecera).XG2 differ diff --git a/Datos/Ventas (cabecera).YG0 b/Datos/Ventas (cabecera).YG0 new file mode 100644 index 0000000..02cc30f Binary files /dev/null and b/Datos/Ventas (cabecera).YG0 differ diff --git a/Datos/Ventas (cabecera).YG1 b/Datos/Ventas (cabecera).YG1 new file mode 100644 index 0000000..efe98c8 Binary files /dev/null and b/Datos/Ventas (cabecera).YG1 differ diff --git a/Datos/Ventas (cabecera).YG2 b/Datos/Ventas (cabecera).YG2 new file mode 100644 index 0000000..200ec27 Binary files /dev/null and b/Datos/Ventas (cabecera).YG2 differ diff --git a/Datos/Ventas (caja).MB b/Datos/Ventas (caja).MB new file mode 100644 index 0000000..949c049 Binary files /dev/null and b/Datos/Ventas (caja).MB differ diff --git a/Datos/Ventas (caja).PX b/Datos/Ventas (caja).PX new file mode 100644 index 0000000..2fabfdb Binary files /dev/null and b/Datos/Ventas (caja).PX differ diff --git a/Datos/Ventas (caja).db b/Datos/Ventas (caja).db new file mode 100644 index 0000000..b5c4635 Binary files /dev/null and b/Datos/Ventas (caja).db differ diff --git a/Datos/Ventas (cuerpo).PX b/Datos/Ventas (cuerpo).PX new file mode 100644 index 0000000..81a8e21 Binary files /dev/null and b/Datos/Ventas (cuerpo).PX differ diff --git a/Datos/Ventas (cuerpo).XG0 b/Datos/Ventas (cuerpo).XG0 new file mode 100644 index 0000000..738c50f Binary files /dev/null and b/Datos/Ventas (cuerpo).XG0 differ diff --git a/Datos/Ventas (cuerpo).YG0 b/Datos/Ventas (cuerpo).YG0 new file mode 100644 index 0000000..4bd8fdb Binary files /dev/null and b/Datos/Ventas (cuerpo).YG0 differ diff --git a/Datos/Ventas (cuerpo).db b/Datos/Ventas (cuerpo).db new file mode 100644 index 0000000..758216c Binary files /dev/null and b/Datos/Ventas (cuerpo).db differ diff --git a/Datos/carpetas.DB b/Datos/carpetas.DB new file mode 100644 index 0000000..230f5bb Binary files /dev/null and b/Datos/carpetas.DB differ diff --git a/Datos/imgprod/AMD-Duron.jpg b/Datos/imgprod/AMD-Duron.jpg new file mode 100644 index 0000000..9e8212d Binary files /dev/null and b/Datos/imgprod/AMD-Duron.jpg differ diff --git a/Datos/imgprod/AdaptadorPPGA.jpg b/Datos/imgprod/AdaptadorPPGA.jpg new file mode 100644 index 0000000..950f82f Binary files /dev/null and b/Datos/imgprod/AdaptadorPPGA.jpg differ diff --git a/Datos/imgprod/DIMM.jpg b/Datos/imgprod/DIMM.jpg new file mode 100644 index 0000000..4bc1d6e Binary files /dev/null and b/Datos/imgprod/DIMM.jpg differ diff --git a/Datos/imgprod/DTT2500_parts.jpg b/Datos/imgprod/DTT2500_parts.jpg new file mode 100644 index 0000000..ba96257 Binary files /dev/null and b/Datos/imgprod/DTT2500_parts.jpg differ diff --git a/Datos/imgprod/DisipadorAMD.jpg b/Datos/imgprod/DisipadorAMD.jpg new file mode 100644 index 0000000..4276f5a Binary files /dev/null and b/Datos/imgprod/DisipadorAMD.jpg differ diff --git a/Datos/imgprod/FPS1000_parts.jpg b/Datos/imgprod/FPS1000_parts.jpg new file mode 100644 index 0000000..3e317d9 Binary files /dev/null and b/Datos/imgprod/FPS1000_parts.jpg differ diff --git a/Datos/imgprod/FPS1500_parts.jpg b/Datos/imgprod/FPS1500_parts.jpg new file mode 100644 index 0000000..ee75b27 Binary files /dev/null and b/Datos/imgprod/FPS1500_parts.jpg differ diff --git a/Datos/imgprod/GeForce2-dual-mx.jpg b/Datos/imgprod/GeForce2-dual-mx.jpg new file mode 100644 index 0000000..f552f04 Binary files /dev/null and b/Datos/imgprod/GeForce2-dual-mx.jpg differ diff --git a/Datos/imgprod/GeForce2-ultra.jpg b/Datos/imgprod/GeForce2-ultra.jpg new file mode 100644 index 0000000..fc01e5c Binary files /dev/null and b/Datos/imgprod/GeForce2-ultra.jpg differ diff --git a/Datos/imgprod/GeForce2Pro-s.jpg b/Datos/imgprod/GeForce2Pro-s.jpg new file mode 100644 index 0000000..8eb67b8 Binary files /dev/null and b/Datos/imgprod/GeForce2Pro-s.jpg differ diff --git a/Datos/imgprod/HardDisk.jpg b/Datos/imgprod/HardDisk.jpg new file mode 100644 index 0000000..1a01d02 Binary files /dev/null and b/Datos/imgprod/HardDisk.jpg differ diff --git a/Datos/imgprod/PSX-RF_UNIT.jpg b/Datos/imgprod/PSX-RF_UNIT.jpg new file mode 100644 index 0000000..1155c8b Binary files /dev/null and b/Datos/imgprod/PSX-RF_UNIT.jpg differ diff --git a/Datos/imgprod/PSX-Trans_Wheel.jpg b/Datos/imgprod/PSX-Trans_Wheel.jpg new file mode 100644 index 0000000..40c99e8 Binary files /dev/null and b/Datos/imgprod/PSX-Trans_Wheel.jpg differ diff --git a/Datos/imgprod/PSX-dual_shock_new.jpg b/Datos/imgprod/PSX-dual_shock_new.jpg new file mode 100644 index 0000000..ee4fa2e Binary files /dev/null and b/Datos/imgprod/PSX-dual_shock_new.jpg differ diff --git a/Datos/imgprod/PSX-mandoNormal.jpg b/Datos/imgprod/PSX-mandoNormal.jpg new file mode 100644 index 0000000..2e6afe7 Binary files /dev/null and b/Datos/imgprod/PSX-mandoNormal.jpg differ diff --git a/Datos/imgprod/PSX-raton.jpg b/Datos/imgprod/PSX-raton.jpg new file mode 100644 index 0000000..1b95d2f Binary files /dev/null and b/Datos/imgprod/PSX-raton.jpg differ diff --git a/Datos/imgprod/PSX-rgb_stereo.jpg b/Datos/imgprod/PSX-rgb_stereo.jpg new file mode 100644 index 0000000..3e12fb1 Binary files /dev/null and b/Datos/imgprod/PSX-rgb_stereo.jpg differ diff --git a/Datos/imgprod/PentiumIV.jpg b/Datos/imgprod/PentiumIV.jpg new file mode 100644 index 0000000..f0ef11c Binary files /dev/null and b/Datos/imgprod/PentiumIV.jpg differ diff --git a/Datos/imgprod/SB_player51_parts.jpg b/Datos/imgprod/SB_player51_parts.jpg new file mode 100644 index 0000000..98d6697 Binary files /dev/null and b/Datos/imgprod/SB_player51_parts.jpg differ diff --git a/Datos/imgprod/cd74intenso.jpg b/Datos/imgprod/cd74intenso.jpg new file mode 100644 index 0000000..7348438 Binary files /dev/null and b/Datos/imgprod/cd74intenso.jpg differ diff --git a/Datos/imgprod/cd74verbatim.jpg b/Datos/imgprod/cd74verbatim.jpg new file mode 100644 index 0000000..3cf7435 Binary files /dev/null and b/Datos/imgprod/cd74verbatim.jpg differ diff --git a/Datos/imgprod/cdrw-hp9510.jpg b/Datos/imgprod/cdrw-hp9510.jpg new file mode 100644 index 0000000..b188f95 Binary files /dev/null and b/Datos/imgprod/cdrw-hp9510.jpg differ diff --git a/Datos/imgprod/cdrw74kprinco.JPG b/Datos/imgprod/cdrw74kprinco.JPG new file mode 100644 index 0000000..7c82853 Binary files /dev/null and b/Datos/imgprod/cdrw74kprinco.JPG differ diff --git a/Datos/imgprod/dlink-dfe2616fr.jpg b/Datos/imgprod/dlink-dfe2616fr.jpg new file mode 100644 index 0000000..f11867e Binary files /dev/null and b/Datos/imgprod/dlink-dfe2616fr.jpg differ diff --git a/Datos/imgprod/dlink-dfe550tx.jpg b/Datos/imgprod/dlink-dfe550tx.jpg new file mode 100644 index 0000000..153d098 Binary files /dev/null and b/Datos/imgprod/dlink-dfe550tx.jpg differ diff --git a/Datos/imgprod/dlink-dp101.jpg b/Datos/imgprod/dlink-dp101.jpg new file mode 100644 index 0000000..af649db Binary files /dev/null and b/Datos/imgprod/dlink-dp101.jpg differ diff --git a/Datos/imgprod/dlink-dss5plus.jpg b/Datos/imgprod/dlink-dss5plus.jpg new file mode 100644 index 0000000..296fe1b Binary files /dev/null and b/Datos/imgprod/dlink-dss5plus.jpg differ diff --git a/Datos/imgprod/dlink-dss8+.jpg b/Datos/imgprod/dlink-dss8+.jpg new file mode 100644 index 0000000..b6f83e0 Binary files /dev/null and b/Datos/imgprod/dlink-dss8+.jpg differ diff --git a/Datos/imgprod/dlink-router10.jpg b/Datos/imgprod/dlink-router10.jpg new file mode 100644 index 0000000..c0b95f0 Binary files /dev/null and b/Datos/imgprod/dlink-router10.jpg differ diff --git a/Datos/imgprod/epson-580.jpg b/Datos/imgprod/epson-580.jpg new file mode 100644 index 0000000..2c90ae6 Binary files /dev/null and b/Datos/imgprod/epson-580.jpg differ diff --git a/Datos/imgprod/epson-680.jpg b/Datos/imgprod/epson-680.jpg new file mode 100644 index 0000000..d992b2d Binary files /dev/null and b/Datos/imgprod/epson-680.jpg differ diff --git a/Datos/imgprod/epson-880.jpg b/Datos/imgprod/epson-880.jpg new file mode 100644 index 0000000..b2d92d2 Binary files /dev/null and b/Datos/imgprod/epson-880.jpg differ diff --git a/Datos/imgprod/epson-lq580.jpg b/Datos/imgprod/epson-lq580.jpg new file mode 100644 index 0000000..d6ea78b Binary files /dev/null and b/Datos/imgprod/epson-lq580.jpg differ diff --git a/Datos/imgprod/epson-lx300.jpg b/Datos/imgprod/epson-lx300.jpg new file mode 100644 index 0000000..ae5d754 Binary files /dev/null and b/Datos/imgprod/epson-lx300.jpg differ diff --git a/Datos/imgprod/extraibleHD.jpg b/Datos/imgprod/extraibleHD.jpg new file mode 100644 index 0000000..30dbb19 Binary files /dev/null and b/Datos/imgprod/extraibleHD.jpg differ diff --git a/Datos/imgprod/gts64-gts.jpg b/Datos/imgprod/gts64-gts.jpg new file mode 100644 index 0000000..b4a02bc Binary files /dev/null and b/Datos/imgprod/gts64-gts.jpg differ diff --git a/Datos/imgprod/hp-s1100.jpg b/Datos/imgprod/hp-s1100.jpg new file mode 100644 index 0000000..5593ae5 Binary files /dev/null and b/Datos/imgprod/hp-s1100.jpg differ diff --git a/Datos/imgprod/hp-s600.jpg b/Datos/imgprod/hp-s600.jpg new file mode 100644 index 0000000..623d23c Binary files /dev/null and b/Datos/imgprod/hp-s600.jpg differ diff --git a/Datos/imgprod/hp-s800.jpg b/Datos/imgprod/hp-s800.jpg new file mode 100644 index 0000000..1b44401 Binary files /dev/null and b/Datos/imgprod/hp-s800.jpg differ diff --git a/Datos/imgprod/hp-s930.jpg b/Datos/imgprod/hp-s930.jpg new file mode 100644 index 0000000..1b47478 Binary files /dev/null and b/Datos/imgprod/hp-s930.jpg differ diff --git a/Datos/imgprod/hp-s950.jpg b/Datos/imgprod/hp-s950.jpg new file mode 100644 index 0000000..ffa1bbc Binary files /dev/null and b/Datos/imgprod/hp-s950.jpg differ diff --git a/Datos/imgprod/keytronic2001.jpg b/Datos/imgprod/keytronic2001.jpg new file mode 100644 index 0000000..95f14ae Binary files /dev/null and b/Datos/imgprod/keytronic2001.jpg differ diff --git a/Datos/imgprod/keytronic800.jpg b/Datos/imgprod/keytronic800.jpg new file mode 100644 index 0000000..99c7687 Binary files /dev/null and b/Datos/imgprod/keytronic800.jpg differ diff --git a/Datos/imgprod/memory1mb.jpg b/Datos/imgprod/memory1mb.jpg new file mode 100644 index 0000000..43036c1 Binary files /dev/null and b/Datos/imgprod/memory1mb.jpg differ diff --git a/Datos/imgprod/memory24mb_compriminda.jpg b/Datos/imgprod/memory24mb_compriminda.jpg new file mode 100644 index 0000000..960f57a Binary files /dev/null and b/Datos/imgprod/memory24mb_compriminda.jpg differ diff --git a/Datos/imgprod/memory2mb.jpg b/Datos/imgprod/memory2mb.jpg new file mode 100644 index 0000000..128416c Binary files /dev/null and b/Datos/imgprod/memory2mb.jpg differ diff --git a/Datos/imgprod/realmagic-hollywoodbrd_4x3.jpg b/Datos/imgprod/realmagic-hollywoodbrd_4x3.jpg new file mode 100644 index 0000000..2aabc09 Binary files /dev/null and b/Datos/imgprod/realmagic-hollywoodbrd_4x3.jpg differ diff --git a/Datos/imgprod/realmagic-remote_4x3.jpg b/Datos/imgprod/realmagic-remote_4x3.jpg new file mode 100644 index 0000000..6a1c935 Binary files /dev/null and b/Datos/imgprod/realmagic-remote_4x3.jpg differ diff --git a/Datos/imgprod/tankymp3.jpg b/Datos/imgprod/tankymp3.jpg new file mode 100644 index 0000000..20e7718 Binary files /dev/null and b/Datos/imgprod/tankymp3.jpg differ diff --git a/Datos/imgprod/tekram-piiMB.jpg b/Datos/imgprod/tekram-piiMB.jpg new file mode 100644 index 0000000..6d49bd1 Binary files /dev/null and b/Datos/imgprod/tekram-piiMB.jpg differ diff --git a/Datos/imgprod/tekram-scsi160.jpg b/Datos/imgprod/tekram-scsi160.jpg new file mode 100644 index 0000000..a3b1fc4 Binary files /dev/null and b/Datos/imgprod/tekram-scsi160.jpg differ diff --git a/Datos/imgprod/tekram-scsi80.jpg b/Datos/imgprod/tekram-scsi80.jpg new file mode 100644 index 0000000..8b82053 Binary files /dev/null and b/Datos/imgprod/tekram-scsi80.jpg differ diff --git a/Datos/imgprod/yamaha2100e.jpg b/Datos/imgprod/yamaha2100e.jpg new file mode 100644 index 0000000..f570eba Binary files /dev/null and b/Datos/imgprod/yamaha2100e.jpg differ diff --git a/Datos/llamadas.DB b/Datos/llamadas.DB new file mode 100644 index 0000000..0a1c885 Binary files /dev/null and b/Datos/llamadas.DB differ diff --git a/Datos/llamadas.MB b/Datos/llamadas.MB new file mode 100644 index 0000000..5a8b7d0 Binary files /dev/null and b/Datos/llamadas.MB differ diff --git a/Datos/llamadas.PX b/Datos/llamadas.PX new file mode 100644 index 0000000..b82ee1a Binary files /dev/null and b/Datos/llamadas.PX differ diff --git a/Datos/llamadas.XG0 b/Datos/llamadas.XG0 new file mode 100644 index 0000000..9ef2e1f Binary files /dev/null and b/Datos/llamadas.XG0 differ diff --git a/Datos/llamadas.YG0 b/Datos/llamadas.YG0 new file mode 100644 index 0000000..d1f9cfe Binary files /dev/null and b/Datos/llamadas.YG0 differ diff --git a/Datos/misnotas.DB b/Datos/misnotas.DB new file mode 100644 index 0000000..b648e25 Binary files /dev/null and b/Datos/misnotas.DB differ diff --git a/Datos/misnotas.MB b/Datos/misnotas.MB new file mode 100644 index 0000000..12304e1 Binary files /dev/null and b/Datos/misnotas.MB differ diff --git a/Datos/misnotas.PX b/Datos/misnotas.PX new file mode 100644 index 0000000..dd81e24 Binary files /dev/null and b/Datos/misnotas.PX differ diff --git a/Datos/personas.DB b/Datos/personas.DB new file mode 100644 index 0000000..f46b25b Binary files /dev/null and b/Datos/personas.DB differ diff --git a/Datos/personas.MB b/Datos/personas.MB new file mode 100644 index 0000000..5a8b7d0 Binary files /dev/null and b/Datos/personas.MB differ diff --git a/Datos/personas.PX b/Datos/personas.PX new file mode 100644 index 0000000..91daf2d Binary files /dev/null and b/Datos/personas.PX differ diff --git a/Datos/personas.XG0 b/Datos/personas.XG0 new file mode 100644 index 0000000..8ee3f7d Binary files /dev/null and b/Datos/personas.XG0 differ diff --git a/Datos/personas.XG1 b/Datos/personas.XG1 new file mode 100644 index 0000000..9200834 Binary files /dev/null and b/Datos/personas.XG1 differ diff --git a/Datos/personas.XG2 b/Datos/personas.XG2 new file mode 100644 index 0000000..eed720e Binary files /dev/null and b/Datos/personas.XG2 differ diff --git a/Datos/personas.XG3 b/Datos/personas.XG3 new file mode 100644 index 0000000..698b4a4 Binary files /dev/null and b/Datos/personas.XG3 differ diff --git a/Datos/personas.XG4 b/Datos/personas.XG4 new file mode 100644 index 0000000..074f69d Binary files /dev/null and b/Datos/personas.XG4 differ diff --git a/Datos/personas.XG5 b/Datos/personas.XG5 new file mode 100644 index 0000000..d9e7362 Binary files /dev/null and b/Datos/personas.XG5 differ diff --git a/Datos/personas.YG0 b/Datos/personas.YG0 new file mode 100644 index 0000000..cf002f1 Binary files /dev/null and b/Datos/personas.YG0 differ diff --git a/Datos/personas.YG1 b/Datos/personas.YG1 new file mode 100644 index 0000000..2eb8004 Binary files /dev/null and b/Datos/personas.YG1 differ diff --git a/Datos/personas.YG2 b/Datos/personas.YG2 new file mode 100644 index 0000000..8066747 Binary files /dev/null and b/Datos/personas.YG2 differ diff --git a/Datos/personas.YG3 b/Datos/personas.YG3 new file mode 100644 index 0000000..2998477 Binary files /dev/null and b/Datos/personas.YG3 differ diff --git a/Datos/personas.YG4 b/Datos/personas.YG4 new file mode 100644 index 0000000..d7b4622 Binary files /dev/null and b/Datos/personas.YG4 differ diff --git a/Datos/personas.YG5 b/Datos/personas.YG5 new file mode 100644 index 0000000..a7c82a0 Binary files /dev/null and b/Datos/personas.YG5 differ diff --git a/Inicializador.cpp b/Inicializador.cpp new file mode 100644 index 0000000..00936d6 --- /dev/null +++ b/Inicializador.cpp @@ -0,0 +1,722 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#include "Inicializador.h" +#include "Inicio1.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TInitBDE *InitBDE; +//--------------------------------------------------------------------------- +__fastcall TInitBDE::TInitBDE(TComponent* Owner) + : TForm(Owner) +{ + CloseOK = false; +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::FormShow(TObject *Sender) +{ + AnsiString FileEmp; + AnsiString Directory; + + Directory = MenuInicio -> Empresas -> Directory; + + + // Repasamos las bases de Datos... (...y las creamos) + + // Productos + Info -> Lines -> Insert( 0, "Productos" ); + Table -> TableName = Directory + "Tb_Ref.db"; + if ( access( (Table->TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName); + CreaProductos( Table ); + } + Info -> Lines -> Insert( 0, "Productos OK!!!" ); + + // Productos Circular (COMBINADOS) + Info -> Lines -> Insert( 0, "Productos Circulares" ); + Table -> TableName = Directory + "Tb_RefC.db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName); + CreaProductosCircular( Table ); + } + Info -> Lines -> Insert( 0, "Productos Circular OK!!!" ); + + // Productos Circular (COMBINADOS) + Info -> Lines -> Insert( 0, "Productos Seguimiento (Historico)" ); + Table -> TableName = Directory + "Tb_RefH.DB"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName); + CreaProductosHistorico( Table ); + } + Info -> Lines -> Insert( 0, "Productos Seguimiento OK!!!" ); + + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + + // Cuentas Contables + Info -> Lines -> Insert( 0, "Contabilidad CuentasContables" ); + Table -> TableName = Directory + "Tb_CtblCC.db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaCtblCC( Table ); + } + Info -> Lines -> Insert( 0, "Ctbl_CC OK!!!" ); + + // Parte Contable + Info -> Lines -> Insert( 0, "Contabilidad ParteContable" ); + Table -> TableName = Directory + "Tb_CtblPteC.db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaCtblPteC( Table ); + } + Info -> Lines -> Insert( 0, "Parte Contable OK!!!" ); + + // Cartera_Prov ( Fraccionamiento del pago de una factura... ) + Info -> Lines -> Insert( 0, "Cartera Proveedores" ); + Table -> TableName = Directory + "Tb_CarteraProv.db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaCartera( Table ); + } + Info -> Lines -> Insert( 0, "Cartera Proveedores OK!!!" ); + + // Cartera_Clt ( Fraccionamiento del pago de una factura... ) + Info -> Lines -> Insert( 0, "Cartera Clientes" ); + Table -> TableName = Directory + "Tb_CarteraClt.db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaCartera( Table ); + } + Info -> Lines -> Insert( 0, "Cartera Clientes OK!!!" ); + + #ifndef TB_DISCONTINUAS + // Factura Compras Lineas + Info -> Lines -> Insert( 0, "FactCmp Lineas (cuerpo)" ); + Table -> TableName = Directory + "Compras (cuerpo).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaFacturasCmpL( Table ); + } + Info -> Lines -> Insert( 0, "FactCmp Lineas OK!!!" ); + + // Factura Compras Cabecera + Info -> Lines -> Insert( 0, "FactCmp Cabecera" ); + Table -> TableName = Directory + "Compras (cabecera).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaFacturasCmpC( Table ); + } + Info -> Lines -> Insert( 0, "FactCmp Cabecera OK!!!" ); + + // Factura Ventas Contabilización + Info -> Lines -> Insert( 0, "FactVnt Real" ); + Table -> TableName = Directory + "Ventas (Factura).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaFacturasVntR( Table ); + } + Info -> Lines -> Insert( 0, "FactVnt Contabilización OK!!!" ); + + // Factura Ventas Lineas + Info -> Lines -> Insert( 0, "FactVnt Lineas (cuerpo)" ); + Table -> TableName = Directory + "Ventas (cuerpo).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaFacturasVntL( Table ); + } + Info -> Lines -> Insert( 0, "FactVnt Lineas OK!!!" ); + + // Factura Ventas Cabecera + Info -> Lines -> Insert( 0, "FactVnt Cabecera" ); + Table -> TableName = Directory + "Ventas (cabecera).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaFacturasVntC( Table ); + } + Info -> Lines -> Insert( 0, "FactVnt Cabecera OK!!!" ); + + // Informe Ventas Cajs + Info -> Lines -> Insert( 0, "Informe VntCaja " ); + Table -> TableName = Directory + "Ventas (caja).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaInformeVntC( Table ); + } + Info -> Lines -> Insert( 0, "Informe VntCaja OK!!!" ); + + // Informe Ventas Cajs + Info -> Lines -> Insert( 0, "Verificando permisos " ); + Table -> TableName = Directory + "AccessControl.db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaPermisos( Table ); + } + Info -> Lines -> Insert( 0, "permisos correctos OK!!!" ); +/* + // Informe Ventas + Info -> Lines -> Insert( 0, "Ventas con factura" ); + Table -> TableName = Directory + "Ventas (iva).db"; + if ( access( (Table -> TableName).c_str(), 0 ) != 0 ) + { + Info -> Lines -> Insert( 0, ">>> Creando..." + Table->TableName ); + CreaFacturasVntR( Table ); + } + Info -> Lines -> Insert( 0, "Ventas con factura OK!!!" ); +*/ + #endif + + CloseOK = true; +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaProductos( TTable *TbProdBusq ) +{ + // Establecemos la ruta + TbProdBusq -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo +// TbProdBusq -> TableName = "Tm_Ref.db"; +// TbProdBusq -> TableType = ttParadox; + + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbProdBusq -> FieldDefs -> Clear(); + TbProdBusq -> FieldDefs -> Add("ForcedIndex", ftAutoInc, 0, false ); + + TbProdBusq -> FieldDefs -> Add("Código de Barras", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("ID Producto", ftString, 15, false ); + + TbProdBusq -> FieldDefs -> Add("Familia", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("Familia2", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("EsNodo", ftSmallint, 0, false ); + + TbProdBusq -> FieldDefs -> Add("Nombre del Producto", ftString, 50, false ); + TbProdBusq -> FieldDefs -> Add("CantUnitaria", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Costo", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("I.V.A", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Venta 1", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("Cantid Venta 1", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Venta 2", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("Cantid Venta 2", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Venta 3", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("Cantid Venta 3", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Venta 4", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("Cantid Venta 4", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Venta 5", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("Cantid Venta 5", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("Stock Actual", ftFloat, 0, false ); + TbProdBusq -> FieldDefs -> Add("COMBINADO", ftBoolean, 0, false ); + TbProdBusq -> FieldDefs -> Add("StockMinimo", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("StockPedido", ftInteger, 0, false ); + + TbProdBusq -> FieldDefs -> Add("ProveedorActual", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("IVA Costo", ftFloat, 0, false ); + + TbProdBusq -> FieldDefs -> Add("Localizacion", ftString, 64, false ); + TbProdBusq -> FieldDefs -> Add("EnviarA", ftSmallint, 0, false ); + + TbProdBusq -> FieldDefs -> Add("Seguimiento", ftBoolean, 0, false ); + + TbProdBusq -> FieldDefs -> Add("PathImagen", ftString, 80, false ); + TbProdBusq -> FieldDefs -> Add("URLinfo", ftString, 80, false ); + TbProdBusq -> FieldDefs -> Add("Fabricante", ftString, 30, false ); + + TbProdBusq -> IndexDefs-> Clear(); + + TIndexOptions MyIndexOptions; + MyIndexOptions << ixPrimary << ixUnique; + TbProdBusq->IndexDefs->Add("Primary", "ForcedIndex", MyIndexOptions); + TbProdBusq->IndexDefs->Add("FamIdx", "Familia;Familia2;EsNodo", TIndexOptions() << ixCaseInsensitive ); + TbProdBusq->IndexDefs->Add("NombreProd", "Nombre del Producto", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbProdBusq -> CreateTable(); + } +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaProductosCircular( TTable *TbProdBusq ) +{ + // Establecemos la ruta + TbProdBusq -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbProdBusq -> FieldDefs -> Clear(); + + TbProdBusq -> FieldDefs -> Add("CodProdC", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("CodProdE", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("Cantidad", ftFloat, 0, false ); + + TbProdBusq -> IndexDefs-> Clear(); + TbProdBusq->IndexDefs->Add("Primary", "CodProdC;CodProdE", TIndexOptions() << ixPrimary << ixUnique ); + TbProdBusq->IndexDefs->Add("CCircular", "CodProdC", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbProdBusq -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaProductosHistorico( TTable *TbProdBusq ) +{ + // Establecemos la ruta + TbProdBusq -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbProdBusq -> FieldDefs -> Clear(); + + TbProdBusq -> FieldDefs -> Add("CodProd", ftInteger, 0, false ); + TbProdBusq -> FieldDefs -> Add("Fecha", ftDate, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Venta", ftCurrency, 0, false ); + TbProdBusq -> FieldDefs -> Add("Precio Costo", ftCurrency, 0, false ); + + TbProdBusq -> IndexDefs-> Clear(); + TbProdBusq->IndexDefs->Add("Primary", "CodProd;Fecha", TIndexOptions() << ixPrimary << ixUnique ); + TbProdBusq->IndexDefs->Add("CodProd", "CodProd", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbProdBusq -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaFacturasCmpL( TTable *TbFacturasD ) +{ + // Establecemos la ruta + TbFacturasD -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbFacturasD -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbFacturasD -> FieldDefs -> Clear(); + TbFacturasD -> FieldDefs -> Add("MaintenedForced", ftAutoInc, 0, false ); + TbFacturasD -> FieldDefs -> Add("EnlaceFactura", ftInteger, 0, false ); + TbFacturasD -> FieldDefs -> Add("CodProducto", ftString, 15, false ); + TbFacturasD -> FieldDefs -> Add("NombreProducto", ftString, 30, false ); + TbFacturasD -> FieldDefs -> Add("IVA", ftSmallint, 0, false ); + TbFacturasD -> FieldDefs -> Add("PrecioC", ftCurrency, 0, false ); + TbFacturasD -> FieldDefs -> Add("Cantidad", ftFloat, 0, false ); + TbFacturasD -> FieldDefs -> Add("Dto", ftSmallint, 0, false ); + TbFacturasD -> IndexDefs-> Clear(); + + TbFacturasD->IndexDefs->Add("Primary", "MaintenedForced", TIndexOptions() << ixPrimary << ixUnique ); + TbFacturasD->IndexDefs->Add("EnlaceFactura (idx)", "EnlaceFactura", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbFacturasD -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaFacturasCmpC( TTable *TbFacturasC ) +{ + // Establecemos la ruta + TbFacturasC -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbFacturasC -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbFacturasC -> FieldDefs -> Clear(); + TbFacturasC -> FieldDefs -> Add("EnlaceFactura", ftAutoInc, 0, true ); + TbFacturasC -> FieldDefs -> Add("CodFactura", ftString, 15, false ); + TbFacturasC -> FieldDefs -> Add("CodProveedor", ftInteger, 0, false ); + TbFacturasC -> FieldDefs -> Add("FechaFactura", ftDate, 0, false ); + + TbFacturasC -> FieldDefs -> Add("TotalSin", ftCurrency, 0, false ); + TbFacturasC -> FieldDefs -> Add("TotalIva", ftCurrency, 0, false ); + TbFacturasC -> FieldDefs -> Add("UltimoPago", ftDate, 0, false ); + TbFacturasC -> FieldDefs -> Add("TotalFrac", ftCurrency, 0, false ); + + // Nº de Pagos en los que divide la factura + TbFacturasC -> FieldDefs -> Add("NumeroPagos", ftSmallint, 0, false ); + + TbFacturasC -> FieldDefs -> Add("Descripcion", ftString, 30, false ); + TbFacturasC -> FieldDefs -> Add("Contabilizada", ftBoolean, 0, false ); + + TbFacturasC -> FieldDefs -> Add("Banco_Entidad", ftSmallint, 0, false ); + TbFacturasC -> FieldDefs -> Add("Banco_Sucursal", ftSmallint, 0, false ); + TbFacturasC -> FieldDefs -> Add("Banco_DC", ftSmallint, 0, false ); + TbFacturasC -> FieldDefs -> Add("Banco_NumCuenta", ftString, 10, false ); + + TbFacturasC -> FieldDefs -> Add("FormaPago", ftSmallint, 0, false ); + + TbFacturasC -> FieldDefs -> Add("Cod_Abono_Albaran", ftInteger, 0, false ); + TbFacturasC -> FieldDefs -> Add("Abono_o_Albaran", ftBoolean, 0, false ); + + TbFacturasC -> IndexDefs-> Clear(); + + TbFacturasC->IndexDefs->Add("Primary", "EnlaceFactura", TIndexOptions() << ixPrimary << ixUnique ); + TbFacturasC->IndexDefs->Add("CodProveedor (idx)", "CodProveedor", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbFacturasC -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaFacturasVntL( TTable *TbVentasD ) +{ + // Establecemos la ruta + TbVentasD -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbVentasD -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbVentasD -> FieldDefs -> Clear(); + TbVentasD -> FieldDefs -> Add("MaintenedForced", ftAutoInc, 0, false ); + TbVentasD -> FieldDefs -> Add("EnlaceFactura", ftInteger, 0, false ); +/*********************************\ */ + TbVentasD -> FieldDefs -> Add("CodProductoAux", ftInteger, 0, false ); + TbVentasD -> FieldDefs -> Add("CodProducto", ftString, 15, false ); + TbVentasD -> FieldDefs -> Add("NombreProducto", ftString, 30, false ); +/*********************************\ + TbVentasD -> FieldDefs -> Add("CodProductoAux", ftInteger, 0, false ); +/*********************************\ */ + TbVentasD -> FieldDefs -> Add("IVA", ftSmallint, 0, false ); + TbVentasD -> FieldDefs -> Add("PrecioC", ftCurrency, 0, false ); + TbVentasD -> FieldDefs -> Add("Cantidad", ftFloat, 0, false ); + TbVentasD -> FieldDefs -> Add("Dto", ftSmallint, 0, false ); + TbVentasD -> IndexDefs-> Clear(); + + TbVentasD->IndexDefs->Add("Primary", "MaintenedForced", TIndexOptions() << ixPrimary << ixUnique ); + TbVentasD->IndexDefs->Add("EnlaceFactura (idx)", "EnlaceFactura", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbVentasD -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaFacturasVntC( TTable *TbVentasC ) +{ + // Establecemos la ruta + TbVentasC -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbVentasC -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbVentasC -> FieldDefs -> Clear(); + // El EnlaceFactura sirve de Nº de Albaran + TbVentasC -> FieldDefs -> Add("EnlaceFactura", ftAutoInc, 0, true ); + // Código de Factura que le corresponde a este albaran (0 de no tener) + TbVentasC -> FieldDefs -> Add("CodFactura", ftInteger, 0, false ); + TbVentasC -> FieldDefs -> Add("CodCliente", ftInteger, 0, false ); + TbVentasC -> FieldDefs -> Add("CodEmpleado", ftInteger, 0, false ); + TbVentasC -> FieldDefs -> Add("FechaAlbaran", ftDate, 0, false ); + TbVentasC -> FieldDefs -> Add("FechaFactura", ftDate, 0, false ); + TbVentasC -> FieldDefs -> Add("HoraFactura", ftTime, 0, false ); + + // Si esta CERRADA = 0 + // sino --> Indica el nº de terminal que la mantiene abierta + TbVentasC -> FieldDefs -> Add("FacturaAbierta", ftSmallint, 0, false ); + + // Totales Sin IVA / Montante del IVA / Fecha del Ultimo pago / Total a Fraccionar + TbVentasC -> FieldDefs -> Add("TotalSin", ftCurrency, 0, false ); + TbVentasC -> FieldDefs -> Add("TotalIva", ftCurrency, 0, false ); + TbVentasC -> FieldDefs -> Add("UltimoPago", ftDate, 0, false ); + TbVentasC -> FieldDefs -> Add("TotalFrac", ftCurrency, 0, false ); + + // Nº de Pagos en los que divide la factura + TbVentasC -> FieldDefs -> Add("NumeroPagos", ftSmallint, 0, false ); + + // ¿ Desea adjuntar las notas, AL IMPRIMIR ? + TbVentasC -> FieldDefs -> Add("ImprimirNotas", ftBoolean, 0, false ); + TbVentasC -> FieldDefs -> Add("NotasFactura", ftMemo, 0, false ); + + // ¿ Facturada y CONTABILIZADA ? + TbVentasC -> FieldDefs -> Add("Contabilizada", ftBoolean, 0, false ); + + TbVentasC -> FieldDefs -> Add("Banco_Entidad", ftSmallint, 0, false ); + TbVentasC -> FieldDefs -> Add("Banco_Sucursal", ftSmallint, 0, false ); + TbVentasC -> FieldDefs -> Add("Banco_DC", ftSmallint, 0, false ); + TbVentasC -> FieldDefs -> Add("Banco_NumCuenta", ftString, 10, false ); + + TbVentasC -> FieldDefs -> Add("FormaPago", ftSmallint, 0, false ); + + // Nº de la Factura a la que abona + TbVentasC -> FieldDefs -> Add("Cod_Abono_Albaran", ftInteger, 0, false ); + // Esta factura es un ABONO / ALBARAN + TbVentasC -> FieldDefs -> Add("Abono_o_Albaran", ftBoolean, 0, false ); + + TbVentasC -> IndexDefs-> Clear(); + + TbVentasC->IndexDefs->Add("Primary", "EnlaceFactura", TIndexOptions() << ixPrimary << ixUnique ); + TbVentasC->IndexDefs->Add("CodFactura (idx)", "CodFactura", TIndexOptions() << ixCaseInsensitive ); + TbVentasC->IndexDefs->Add("CodCliente (idx)", "CodCliente", TIndexOptions() << ixCaseInsensitive ); + TbVentasC->IndexDefs->Add("CodEmpleado (idx)", "CodEmpleado", TIndexOptions() << ixCaseInsensitive ); + // Creamos la base... + TbVentasC -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaFacturasVntR( TTable *TbVentasC ) +{ + // Establecemos la ruta + TbVentasC -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbVentasC -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbVentasC -> FieldDefs -> Clear(); + TbVentasC -> FieldDefs -> Add("idF", ftInteger, 0, true ); + TbVentasC -> FieldDefs -> Add("idA", ftInteger, 0, true ); + TbVentasC -> FieldDefs -> Add("cerrada", ftBoolean, 0, false ); + + TbVentasC -> IndexDefs-> Clear(); + + TbVentasC->IndexDefs->Add("Primary", "idF", TIndexOptions() << ixPrimary ); + // Creamos la base... + TbVentasC -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaInformeVntC( TTable *TbVentasI ) +{ + // Establecemos la ruta + TbVentasI -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbVentasI -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbVentasI -> FieldDefs -> Clear(); + TbVentasI -> FieldDefs -> Add("FechaCaja", ftDate, 0, false ); + TbVentasI -> FieldDefs -> Add("Inicio", ftTime, 0, false ); + TbVentasI -> FieldDefs -> Add("Fin", ftTime, 0, false ); + TbVentasI -> FieldDefs -> Add("IntentosSalir", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("ExitoSalir", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Tickets", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Cancelados", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Cambios", ftSmallint, 0, false ); + + TbVentasI -> FieldDefs -> Add("Cantidad x1", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x1", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x5", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x5", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x10", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x10", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x25", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x25", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x50", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x50", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x100", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x100", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x200", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x200", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x500", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x500", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x1000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x1000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x2000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x2000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x5000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x5000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x10000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x10000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad xvarios", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total xvarios", ftInteger, 0, false ); + + TbVentasI -> FieldDefs -> Add("Notas", ftMemo, 0, false ); + + TbVentasI -> IndexDefs-> Clear(); + + TbVentasI->IndexDefs->Add("Primary", "FechaCaja", TIndexOptions() << ixPrimary << ixUnique ); + // Creamos la base... + TbVentasI -> CreateTable(); +} + + + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + /////////////////////////////////////////////////// + +void __fastcall TInitBDE::CreaCtblCC( TTable *TbCtblCC ) +{ + // Establecemos la ruta + TbCtblCC -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbCtblCC -> FieldDefs -> Clear(); + + TbCtblCC -> FieldDefs -> Add("CCC", ftInteger, 0, false ); + TbCtblCC -> FieldDefs -> Add("Descripcion", ftString, 40, false ); + TbCtblCC -> FieldDefs -> Add("TipoCuenta", ftSmallint, 0, false ); + + TbCtblCC -> IndexDefs-> Clear(); + TbCtblCC->IndexDefs->Add("Primary", "CCC", TIndexOptions() << ixPrimary << ixUnique ); + TbCtblCC->IndexDefs->Add("TCCC", "TipoCuenta", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbCtblCC -> CreateTable(); + TbCtblCC -> Open(); + // Insertamos al cliente anónimo... + TbCtblCC -> InsertRecord( ARRAYOFCONST( ( 472000016, "IVA Soportado", 0 ) ) ); + TbCtblCC -> InsertRecord( ARRAYOFCONST( ( 477000016, "IVA Repercutido", 0 ) ) ); + TbCtblCC -> Close(); + +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaCtblPteC( TTable *TbCtblPteC ) +{ + // Establecemos la ruta + TbCtblPteC -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbCtblPteC -> FieldDefs -> Clear(); + + TbCtblPteC -> FieldDefs -> Add("nAsiento", ftInteger, 0, false ); + TbCtblPteC -> FieldDefs -> Add("nOrden", ftInteger, 0, false ); + TbCtblPteC -> FieldDefs -> Add("Fecha", ftDate, 0, false ); + TbCtblPteC -> FieldDefs -> Add("CC", ftInteger, 0, false ); + TbCtblPteC -> FieldDefs -> Add("Importe", ftCurrency,0, false ); + TbCtblPteC -> FieldDefs -> Add("DebeHaber",ftBoolean, 0, false ); + TbCtblPteC -> FieldDefs -> Add("Concepto", ftString, 45, false ); + TbCtblPteC -> FieldDefs -> Add("FactOrig", ftInteger, 0, false ); + + TbCtblPteC -> IndexDefs-> Clear(); + TbCtblPteC->IndexDefs->Add("Primary", "nAsiento;nOrden", TIndexOptions() << ixPrimary << ixUnique ); + TbCtblPteC->IndexDefs->Add("Fecha", "Fecha;CC", TIndexOptions() << ixCaseInsensitive ); + TbCtblPteC->IndexDefs->Add("CCuenta", "CC;Fecha", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbCtblPteC -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaCartera( TTable *TbCartera ) +{ + // Establecemos la ruta + TbCartera -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbCartera -> FieldDefs -> Clear(); + + TbCartera -> FieldDefs -> Add("EnlaceFactura", ftInteger, 0, false ); + TbCartera -> FieldDefs -> Add("Fecha", ftDate, 0, false ); + TbCartera -> FieldDefs -> Add("Importe", ftCurrency, 0, false ); + TbCartera -> FieldDefs -> Add("Incremento", ftCurrency, 0, false ); + TbCartera -> FieldDefs -> Add("FormaPago", ftSmallint, 0, false ); + TbCartera -> FieldDefs -> Add("Pagado", ftBoolean, 0, false ); + + TbCartera -> IndexDefs-> Clear(); + TbCartera->IndexDefs->Add("Primary", "EnlaceFactura;Fecha", TIndexOptions() << ixPrimary << ixUnique ); + TbCartera->IndexDefs->Add("Fecha", "Fecha;EnlaceFactura;Pagado", TIndexOptions() << ixCaseInsensitive ); + TbCartera->IndexDefs->Add("Pagos", "Pagado;EnlaceFactura;Fecha", TIndexOptions() << ixCaseInsensitive ); + + // Creamos la base... + TbCartera -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::CreaPermisos( TTable *TbPermisos ) +{ + // Establecemos la ruta + TbPermisos -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbPermisos -> FieldDefs -> Clear(); + + TbPermisos -> FieldDefs -> Add("EnlacePersona", ftInteger, 0, false ); + TbPermisos -> FieldDefs -> Add("PassWord", ftString, 64, false ); + + TbPermisos -> FieldDefs -> Add("ArtReferencias", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("ArtStockActual", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("ArtVentas", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("ProvInformacion", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("ProvCartera", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("ProvCompras", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("CltGestion", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CltCartera", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CltVentas", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CltInformes", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("CtbCuentas", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CtbParte", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CtbInformes", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("CmpComprar", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CmpInforme", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("CmpListado", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("EmpFichas", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("EmpPermisos", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("EmpVentas", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("EmpGraficas", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("VntCaja", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("VntBalanceD", ftBoolean, 0, false ); + TbPermisos -> FieldDefs -> Add("VntBalanceM", ftBoolean, 0, false ); + + TbPermisos -> FieldDefs -> Add("MisConfigurar", ftBoolean, 0, false ); + + TbPermisos -> IndexDefs-> Clear(); + TbPermisos->IndexDefs->Add("Primary", "EnlacePersona", TIndexOptions() << ixPrimary << ixUnique ); + + // Creamos la base... + TbPermisos -> CreateTable(); + + TbPermisos -> Open(); + // Insertamos al cliente anónimo... + TVarRec v[] = { 1, "", false, false, false, // Art + false, false, false, // Prov + false, false, false, false, // Clt + false, false, false, // Ctb + false, false, false, // Cmp + false, true, false, false, // Emp + false, false, false, // Vnt + false }; // Misc. + TbPermisos -> InsertRecord( v, ARRAYSIZE(v) - 1); + TbPermisos -> Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TInitBDE::Timer1Timer(TObject *Sender) +{ + if ( CloseOK ) + Close(); +} +//--------------------------------------------------------------------------- + diff --git a/Inicializador.dfm b/Inicializador.dfm new file mode 100644 index 0000000..7bb896c Binary files /dev/null and b/Inicializador.dfm differ diff --git a/Inicializador.h b/Inicializador.h new file mode 100644 index 0000000..d847437 --- /dev/null +++ b/Inicializador.h @@ -0,0 +1,49 @@ +//--------------------------------------------------------------------------- +#ifndef InicializadorH +#define InicializadorH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TInitBDE : public TForm +{ +__published: // IDE-managed Components + TLabel *Label1; + TTable *Table; + TMemo *Info; + TBevel *Bevel1; + TTimer *Timer1; + void __fastcall FormShow(TObject *Sender); + + void __fastcall Timer1Timer(TObject *Sender); +private: // User declarations + bool CloseOK; + void __fastcall CreaProductos( TTable *TbProdBusq ); + void __fastcall CreaProductosCircular( TTable *TbProdBusq ); + void __fastcall CreaProductosHistorico( TTable *TbProdBusq ); + + void __fastcall CreaProveedores( TTable *Proveedor ); + void __fastcall CreaEmpleados( TTable *Empleado ); + void __fastcall CreaClientes( TTable *Cliente ); + void __fastcall CreaCtblCC( TTable *TbCtblCC ); + void __fastcall CreaCtblPteC( TTable *TbCtblPteC ); + void __fastcall CreaCartera( TTable *TbCartera ); + void __fastcall CreaFacturasCmpC( TTable *TbFacturasC ); + void __fastcall CreaFacturasCmpL( TTable *TbFacturasD ); + void __fastcall CreaFacturasVntC( TTable *TbVentasC ); + void __fastcall CreaFacturasVntR( TTable *TbVentasC ); + void __fastcall CreaFacturasVntL( TTable *TbVentasD ); + void __fastcall CreaInformeVntC( TTable *TbVentasI ); + void __fastcall CreaPermisos( TTable *TbPermisos ); +public: // User declarations + __fastcall TInitBDE(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TInitBDE *InitBDE; +//--------------------------------------------------------------------------- +#endif diff --git a/Inicio1.cpp b/Inicio1.cpp new file mode 100644 index 0000000..db958e4 --- /dev/null +++ b/Inicio1.cpp @@ -0,0 +1,672 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + + + +#include "Inicio1.h" + +#include "Inicializador.h" +#include "TpvProductos.h" +#include "TpvStockActual1.h" +#include "TpvVentas.h" +#include "TpvCmp.h" +#include "TpvVntClt.h" +#include "TpvVntProd.h" +#include "TpvBlcDVnt.h" +#include "TpvVntEmpl.h" +#include "TpvBlcMVnt.h" +#include "TpvCmpProv.h" +#include "TpvAccessControl.h" +#include "TpvSelectActiveUser.h" + +#ifdef EXIST_CFG +#include "TpvCFG.h" +#endif +//#include "AcercaDe.h" +//--------------------------------------------------------------------------- +#pragma resource "*.dfm" +TMenuInicio *MenuInicio; +//--------------------------------------------------------------------------- + #define _PRODUCTOS + #define _STOCKACTUAL + #define _VENTAS + #define _COMPRAS + #define _VNTPROD + #define _VNTCLT + #define _CMPPROV + #define _BLDVNT + #define _VENTASEMPL + #define _ACCESSCONTROL +// #define _PROVINFO +// #define _INFOEMPL +// #define _CLIENTES +// #define _CCCtbl +// #define _VNTEMPL +// #define _PARTECTBL +// #define _CMPPROV +// #define _VNTCLT +// #define _INFCTBL +//--------------------------------------------------------------------------- +__fastcall TMenuInicio::TMenuInicio(TComponent* Owner) + : TForm(Owner) +{ + short i, j; + ApartadoActual = 0; + + for ( j = 0; j<9; j++ ) + for ( i = 0; i<10; i++ ) + { + ApartadoMenu[j].Disable[i] = 0; + ApartadoMenu[j].IBoton[i] = "imerro"; + } + + /* + 0 5 + 1 6 + 2 7 + 3 8 + 4 9 + */ + + + ApartadoMenu[0].NombreApartado = "Menú de Inicio"; + ApartadoMenu[0].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\iindx.bmp"; + RellenaBotonApartado( 0, 0, "Articulos", "imArtc" ); + RellenaBotonApartado( 0, 5, "Compras", "imCmps" ); + RellenaBotonApartado( 0, 1, "Proveedores", "imProv" ); + RellenaBotonApartado( 0, 6, "Empleados", "imEmpl" ); + RellenaBotonApartado( 0, 2, "Clientes", "imClts" ); + RellenaBotonApartado( 0, 7, "Ventas", "imVnts" ); + RellenaBotonApartado( 0, 3, "Contabilidad", "imCntb" ); + + RellenaBotonApartado( 0, 4, "Miscelanea", "imMisc" ); + RellenaBotonApartado( 0, 9, "Soporte Técnico", "imAcer" ); + + ApartadoMenu[1].NombreApartado = "Articulos"; + ApartadoMenu[1].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\iprod.bmp"; + RellenaBotonApartado( 1, 5, "Referencias", "imRefs" ); + RellenaBotonApartado( 1, 6, "Stock Actual", "imStck" ); + RellenaBotonApartado( 1, 8, "Ventas/Articulo", "imVtRf" ); + + + ApartadoMenu[2].NombreApartado = "Proveedores"; + ApartadoMenu[2].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\iprov.bmp"; + RellenaBotonApartado( 2, 5, "Información", "imInfProv" ); + RellenaBotonApartado( 2, 7, "Cartera de Prov.", "imCtrProv" ); + RellenaBotonApartado( 2, 8, "Compras a...", "imCmpProv" ); + + ApartadoMenu[3].NombreApartado = "Empleados"; + ApartadoMenu[3].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\iempl.bmp"; + RellenaBotonApartado( 3, 5, "Fichas", "imInfEmp" ); + RellenaBotonApartado( 3, 6, "Permisos de Acceso","imPwdEmp" ); + RellenaBotonApartado( 3, 8, "Ventas/Empleado", "imVtEmp" ); + RellenaBotonApartado( 3, 9, "Graficas Ventas", "imGrEmp" ); + + ApartadoMenu[4].NombreApartado = "Clientes"; + ApartadoMenu[4].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\iclts.bmp"; + RellenaBotonApartado( 4, 5, "Gestion de...", "imInfClt" ); + RellenaBotonApartado( 4, 7, "Cartera de Clts.", "imCtrClt" ); + RellenaBotonApartado( 4, 8, "Ventas a Clientes", "imVntClt" ); + RellenaBotonApartado( 4, 9, "Informes Varios", "imMisClt" ); + + + ApartadoMenu[5].NombreApartado = "Compras"; + ApartadoMenu[5].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\icmps.bmp"; + RellenaBotonApartado( 5, 5, "Comprar", "imCmpCmp" ); + RellenaBotonApartado( 5, 6, "Informe Facturas", "imInfCmp" ); + RellenaBotonApartado( 5, 9, "Lista de Compra", "imLstCmp" ); + + + ApartadoMenu[6].NombreApartado = "Ventas"; + ApartadoMenu[6].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\ivnts.bmp"; + RellenaBotonApartado( 6, 5, "Caja del Día", "imCajVnt" ); + RellenaBotonApartado( 6, 7, "Balance Diario", "imBlDVnt" ); + RellenaBotonApartado( 6, 8, "Balance Mensual", "imBlMVnt" ); + + ApartadoMenu[7].NombreApartado = "Contabilidad"; + ApartadoMenu[7].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\icntb.bmp"; + RellenaBotonApartado( 7, 5, "Cuentas Contables", "imCCCtbl" ); + RellenaBotonApartado( 7, 7, "Parte Contable", "imPteCtbl" ); + RellenaBotonApartado( 7, 8, "Informes Contables.", "imIfmCtbl" ); + + ApartadoMenu[8].NombreApartado = "Miscelanea"; + ApartadoMenu[8].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\imisc.bmp"; + RellenaBotonApartado( 8, 5, "Configuración", "imCFG" ); + + ApartadoMenu[9].NombreApartado = "Soporte Técnico"; + ApartadoMenu[9].ImagenApartado = ExtractFilePath(Application->ExeName) + "systm\\iacer.bmp"; + RellenaBotonApartado( 9, 9, "Acerca de...", "imAcer" ); + + MuestraApartado( ApartadoActual ); + + TChangeUserName *User; + User = new TChangeUserName( this ); + Visible = false; + User->ShowModal(); + +#ifndef DEM001 + if ( FileExists( "C:\\msdos.--" ) ) +#endif + { + for ( i=0; i<10; i++ ) + for ( j=0; j<10; j++ ) + TablaDeAcceso[i][j] = User->TablaDeAcceso[i][j]; + } + + Visible = true; + delete User; +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn1Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::FormCreate(TObject *Sender) +{ + // Cargamos el inicializador... + TInitBDE *Inicializador; + Inicializador = new TInitBDE(this); + Inicializador -> ShowModal(); + delete Inicializador; +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::RellenaBotonApartado( short Apartado, short Boton, AnsiString nBoton, AnsiString iBoton ) +{ + ApartadoMenu[Apartado].Disable[Boton] = true; + ApartadoMenu[Apartado].NBoton[Boton] = nBoton; + ApartadoMenu[Apartado].IBoton[Boton] = iBoton; +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn3Click(TObject *Sender) +{ + ApartadoActual ++; + if ( ApartadoActual > 9 ) ApartadoActual = 0; + MuestraApartado( ApartadoActual ); +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn2Click(TObject *Sender) +{ + ApartadoActual --; + if ( ApartadoActual < 0 ) ApartadoActual = 9; + MuestraApartado( ApartadoActual ); +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::MuestraApartado( short Apartado ) +{ + // Cambiamos el nombre, foto y botones... + Label1 -> Caption = ApartadoMenu[ Apartado ].NombreApartado; + try { + Image1 -> Picture -> LoadFromFile( ApartadoMenu[ Apartado ].ImagenApartado ); + } catch(...) { + // Error cargando imagen. + Image1 -> Picture -> LoadFromFile( ExtractFilePath(Application->ExeName) + "systm//ierro.bmp" ); + } + + if ( Apartado == 9 ) + { + Animate1 -> FileName = ExtractFilePath(Application->ExeName) + "systm\\JDsoft.avi"; + Animate1 -> Visible = true; + Animate1 -> Active = true; + } else { + Animate1 -> Active = false; + Animate1 -> Visible = false; + Animate1 -> FileName = ""; + } + + MuestraBotones( BitBtn4, 0, Apartado ); + MuestraBotones( BitBtn5, 1, Apartado ); + MuestraBotones( BitBtn6, 2, Apartado ); + MuestraBotones( BitBtn7, 3, Apartado ); + MuestraBotones( BitBtn8, 4, Apartado ); + MuestraBotones( BitBtn9, 5, Apartado ); + MuestraBotones( BitBtn10, 6, Apartado ); + MuestraBotones( BitBtn11, 7, Apartado ); + MuestraBotones( BitBtn12, 8, Apartado ); + MuestraBotones( BitBtn13, 9, Apartado ); +} + +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::MuestraBotones( TBitBtn *Sender, short nBoton, short Apartado ) +{ + Sender -> Visible = ApartadoMenu[ Apartado ].Disable[nBoton]; + if ( Sender -> Visible ) + { + Sender -> Caption = ApartadoMenu[ Apartado ].NBoton[nBoton]; + try { + Sender -> Glyph -> LoadFromFile( ExtractFilePath(Application->ExeName) + "systm\\" + ApartadoMenu[ Apartado ].IBoton[nBoton] + ".bmp" ); + } catch(...) { + Sender -> Glyph -> LoadFromFile( ExtractFilePath(Application->ExeName) + "systm\\imerro.bmp" ); + } + } +} +void __fastcall TMenuInicio::BitBtn4Click(TObject *Sender) +{ + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 1; MuestraApartado( ApartadoActual ); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn5Click(TObject *Sender) +{ + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 2; MuestraApartado( ApartadoActual ); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn6Click(TObject *Sender) +{ + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 4; MuestraApartado( ApartadoActual ); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn7Click(TObject *Sender) +{ + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 7; MuestraApartado( ApartadoActual ); + break; + } + +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn8Click(TObject *Sender) +{ + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 8; MuestraApartado( ApartadoActual ); + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn9Click(TObject *Sender) +{ + if ( !TablaDeAcceso[ApartadoActual][5] && ApartadoActual != 0 ) + return; + + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 5; MuestraApartado( ApartadoActual ); + break; + case 1: +#ifdef _PRODUCTOS + TProductos *Productos; + Visible = false; + Productos = new TProductos(this); + Productos -> ShowModal(); + Visible = true; + delete Productos; +#endif + break; + case 2: +#ifdef _PROVINFO + TTpvProv *ProvInfo; + Visible = false; + ProvInfo = new TTpvProv(this); + ProvInfo -> ShowModal(); + Visible = true; + delete ProvInfo; +#endif + break; + case 3: +#ifdef _INFOEMPL + TTpvEmpl *InfoEmpl; + Visible = false; + InfoEmpl = new TTpvEmpl(this); + InfoEmpl -> ShowModal(); + Visible = true; + delete InfoEmpl; +#endif + break; + case 4: +#ifdef _CLIENTES + TTpvClt *TpvClt; + Visible = false; + TpvClt = new TTpvClt(this); + TpvClt -> ShowModal(); + Visible = true; + delete TpvClt; +#endif + break; + case 5: +#ifdef _COMPRAS + TTpvCmp1 *TpvCmp1; + Visible = false; + TpvCmp1 = new TTpvCmp1(this); + TpvCmp1 -> ShowModal(); + Visible = true; + delete TpvCmp1; +#endif + break; + case 6: +#ifdef _VENTAS + TVentas *Ventas; + Visible = false; + Ventas = new TVentas(this); + Ventas -> ShowModal(); + Visible = true; + delete Ventas; +#endif + break; + case 7: +#ifdef _CCCtbl + TCCCtbl *CCCtbl; + Visible = false; + CCCtbl = new TCCCtbl(this); + CCCtbl -> ShowModal(); + Visible = true; + delete CCCtbl; +#endif + break; +#ifdef EXIST_CFG + case 8: + Visible = false; + CFG -> ShowModal(); + Visible = true; + break; +#endif + } + +} + +void __fastcall TMenuInicio::RunInDLL( AnsiString dll_File, AnsiString dll_Funcion ) +{ +/* + typedef VOID (*MYPROC)(void); + HINSTANCE hinstLib; + MYPROC ProcAdd; + BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; + + // Get a handle to the DLL module. + hinstLib = LoadLibrary( dll_File.c_str() ); + // If the handle is valid, try to get the function address. + if (hinstLib != NULL) + { + ProcAdd = (MYPROC)GetProcAddress(hinstLib, dll_Funcion.c_str() ); + // If the function address is valid, call the function. + if (fRunTimeLinkSuccess = (ProcAdd != NULL)) + { + Visible = false; + (ProcAdd) (); + Visible = true; + } + // Free the DLL module. + fFreeResult = FreeLibrary(hinstLib); + } + // If unable to call the DLL function, use an alternative. + if (! fRunTimeLinkSuccess) + ShowMessage("Módulo corrupto, ó, no incluido en el paquete.\nPongase en contacto con su suministrador."); +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn10Click(TObject *Sender) +{ + if ( !TablaDeAcceso[ApartadoActual][6] && ApartadoActual != 0 ) + return; + + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 3; MuestraApartado( ApartadoActual ); + break; + case 1: +#ifdef _STOCKACTUAL +// RunInDLL( "Prod.dll", "DStock" ); + TStockActual *StockActual; + Visible = false; + StockActual = new TStockActual(this); + StockActual -> ShowModal(); + Visible = true; + delete StockActual; +#endif + break; + case 3: +#ifdef _ACCESSCONTROL + TAccessControl *Access; + Visible = false; + Access = new TAccessControl(this); + Access->ShowModal(); + Visible = true; + delete Access; +#endif + break; + case 5: +#ifdef _CMPPROV + TCmpProv *CmpProv; + Visible = false; + CmpProv = new TCmpProv(this); + CmpProv -> ShowModal(); + Visible = true; + delete CmpProv; +#endif + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn11Click(TObject *Sender) +{ + if ( !TablaDeAcceso[ApartadoActual][7] && ApartadoActual != 0 ) + return; + + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 6; MuestraApartado( ApartadoActual ); + break; + case 2: +#ifdef _CMPPROV + TCmpProv *CtrProv; + Visible = false; + CtrProv = new TCmpProv(this); + CtrProv -> ImpagFactClick(0); + CtrProv -> ShowModal(); + Visible = true; + delete CtrProv; +#endif + break; + case 3: +#ifdef _VNTEMPL + TVntEmpl *VentasEmpl; + Visible = false; + VentasEmpl = new TVntEmpl(this); + VentasEmpl -> ImpagFactClick(0); + VentasEmpl -> ShowModal(); + Visible = true; + delete VentasEmpl; +#endif + break; + case 4: +#ifdef _VNTCLT + TVntClt *VntClt; + Visible = false; + VntClt = new TVntClt(this); + VntClt -> ImpagFactClick(0); + VntClt -> ShowModal(); + Visible = true; + delete VntClt; +#endif + break; + case 6: +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else +#ifdef _BLDVNT + TTpvBlDVnt *TpvBlDVnt; + Visible = false; + TpvBlDVnt = new TTpvBlDVnt(this); + TpvBlDVnt -> ShowModal(); + Visible = true; + delete TpvBlDVnt; +#endif +#endif + break; + case 7: +#ifdef _PARTECTBL + TParteCtbl *ParteCtbl; + Visible = false; + ParteCtbl = new TParteCtbl(this); + ParteCtbl -> ShowModal(); + Visible = true; + delete ParteCtbl; +#endif + break; + } +} + +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn12Click(TObject *Sender) +{ + if ( !TablaDeAcceso[ApartadoActual][8] && ApartadoActual != 0 ) + return; + + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + break; + case 1: +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else +#ifdef _VNTPROD + // Usamos la libreria + TVntProd *TpvVntProd; + Visible = false; + TpvVntProd = new TVntProd(this); + TpvVntProd -> ShowModal(); + Visible = true; + delete TpvVntProd; +#endif +#endif + break; + case 2: +#ifdef _CMPPROV + TCmpProv *CmpProv; + Visible = false; + CmpProv = new TCmpProv(this); + CmpProv -> ShowModal(); + Visible = true; + delete CmpProv; +#endif + break; + case 3: +#ifdef _VENTASEMPL + TVntEmpl *VentasEmpl; + Visible = false; + VentasEmpl = new TVntEmpl(this); + VentasEmpl -> ShowModal(); + Visible = true; + delete VentasEmpl; +#endif + break; + case 4: +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else +#ifdef _VNTCLT + TVntClt *VntClt; + Visible = false; + VntClt = new TVntClt(this); + VntClt -> ShowModal(); + Visible = true; + delete VntClt; +#endif +#endif + break; + case 6: +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else +#ifdef _BLDVNT + TBlMVnt *BlMVnt; + Visible = false; + BlMVnt = new TBlMVnt(this); + BlMVnt -> ShowModal(); + Visible = true; + delete BlMVnt; +#endif +#endif + break; + case 7: +#ifdef _INFCTBL + TInfCtbl *InfCtbl; + Visible = false; + InfCtbl = new TInfCtbl(this); + InfCtbl -> ShowModal(); + Visible = true; + delete InfCtbl; +#endif + break; + + } + +} +//--------------------------------------------------------------------------- +void __fastcall TMenuInicio::BitBtn13Click(TObject *Sender) +{ + if ( !TablaDeAcceso[ApartadoActual][9] && ApartadoActual != 0 ) + return; + + switch ( ApartadoActual ) + { + // Menú Principal + case 0: + ApartadoActual = 9; MuestraApartado( ApartadoActual ); + break; + case 9: +/// TAbout *About; +/// Visible = false; +/// About = new TAbout(this); +/// /***************************************************/ +/// /**/About -> Nombre -> Caption = "TPV for Windows"; +/// /**/About -> Descripcion -> Caption = "Gestión integral, multipuesto"; +/// /**/About -> Registro -> Caption = "VERSION DEMO"; +/// /**/try { +/// /**/ About -> Icono -> Picture -> LoadFromFile(ExtractFilePath(Application->ExeName) + "systm\\about.ico"); +/// /**/} catch(...) {//nothing +/// /**/} +/// /***************************************************/ +/// About -> ShowModal(); +/// Visible = true; +/// delete About; +/// + break; + } + +} +//--------------------------------------------------------------------------- + +/// 1 2 4 7 8 5 3 6 9 +void __fastcall TMenuInicio::Image1Click(TObject *Sender) +{ + if ( ApartadoActual != 0 ) + { + ApartadoActual = 0; MuestraApartado( ApartadoActual ); + } +} +//--------------------------------------------------------------------------- + + diff --git a/Inicio1.dfm b/Inicio1.dfm new file mode 100644 index 0000000..acc6e40 Binary files /dev/null and b/Inicio1.dfm differ diff --git a/Inicio1.h b/Inicio1.h new file mode 100644 index 0000000..e24733b --- /dev/null +++ b/Inicio1.h @@ -0,0 +1,84 @@ +//--------------------------------------------------------------------------- +#ifndef Inicio1H +#define Inicio1H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +typedef struct { + AnsiString NombreApartado; + AnsiString ImagenApartado; + bool Disable[10]; + AnsiString NBoton[10]; + AnsiString IBoton[10]; +} InfoMenu; + +class TMenuInicio : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TBevel *Bevel1; + TBevel *Bevel2; + TBitBtn *BitBtn1; + TBevel *Bevel3; + TBitBtn *BitBtn2; + TBitBtn *BitBtn3; + TLabel *Label1; + TBevel *Bevel4; + TBitBtn *BitBtn4; + TBitBtn *BitBtn5; + TBitBtn *BitBtn6; + TBitBtn *BitBtn7; + TBitBtn *BitBtn8; + TBitBtn *BitBtn9; + TBitBtn *BitBtn10; + TBitBtn *BitBtn11; + TBitBtn *BitBtn12; + TBitBtn *BitBtn13; + TDatabase *Empresas; + TAnimate *Animate1; + void __fastcall BitBtn1Click(TObject *Sender); + + void __fastcall FormCreate(TObject *Sender); + void __fastcall BitBtn3Click(TObject *Sender); + void __fastcall BitBtn2Click(TObject *Sender); + + + + void __fastcall BitBtn4Click(TObject *Sender); + void __fastcall BitBtn5Click(TObject *Sender); + void __fastcall BitBtn6Click(TObject *Sender); + void __fastcall BitBtn7Click(TObject *Sender); + void __fastcall BitBtn8Click(TObject *Sender); + void __fastcall BitBtn9Click(TObject *Sender); + void __fastcall BitBtn10Click(TObject *Sender); + void __fastcall BitBtn11Click(TObject *Sender); + void __fastcall BitBtn12Click(TObject *Sender); + void __fastcall BitBtn13Click(TObject *Sender); + + void __fastcall Image1Click(TObject *Sender); + +private: // User declarations + short ApartadoActual; + InfoMenu ApartadoMenu[10]; + + void __fastcall MuestraApartado( short Apartado ); + void __fastcall MuestraBotones( TBitBtn *Sender, short nBoton, short Apartado ); + void __fastcall RellenaBotonApartado( short Apartado, short Boton, AnsiString nBoton, AnsiString iBoton ); + +public: // User declarations + __fastcall TMenuInicio(TComponent* Owner); + void __fastcall RunInDLL(AnsiString dll_File, AnsiString dll_Funcion); + bool TablaDeAcceso[10][10]; +}; +//--------------------------------------------------------------------------- +extern TMenuInicio *MenuInicio; +//--------------------------------------------------------------------------- +#endif diff --git a/ListInit.cpp b/ListInit.cpp new file mode 100644 index 0000000..3e3329c --- /dev/null +++ b/ListInit.cpp @@ -0,0 +1,26 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "ListInit.h" +#include "TpvVentas.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +__fastcall TAcercaDe::TAcercaDe(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TAcercaDe::Timer1Timer(TObject *Sender) +{ + Timer1->Enabled = false; + Hide(); + Ventas->ShowModal(); + Close(); +} +//--------------------------------------------------------------------------- + diff --git a/ListInit.dfm b/ListInit.dfm new file mode 100644 index 0000000..87fefca --- /dev/null +++ b/ListInit.dfm @@ -0,0 +1,994 @@ +object AcercaDe: TAcercaDe + Left = 752 + Top = 122 + BorderIcons = [] + BorderStyle = bsDialog + ClientHeight = 127 + ClientWidth = 359 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 13 + object Image1: TImage + Left = 112 + Top = 8 + Width = 153 + Height = 57 + Picture.Data = { + 0A544A504547496D6167650E600000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000503040404030504040405050506070C08070707070F0B0B + 090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F131722 + 24221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1EFFC00011080105028003012200021101031101 + FFC4001D000100020301010101000000000000000000060704050803010209FF + C400511000010303020304070702020509050900010002030405110621071231 + 13224151081452617191A115324281C1D1F016B1236217728292E12425334355 + 7493A2F126376373D2273435364553B2B3C2FFC4001A01010002030100000000 + 0000000000000000020301040506FFC400331100020201020502040504030101 + 00000000010203110421051213315115412261719114325281B12333A1D142C1 + E124F1FFDA000C03010002110311003F00ECB444401111004444011110044440 + 111100444401111004444011110044440117C7B9AC69739C1A07524AADB89BC5 + FD37A3E96561AA64F58D0796261C9CFE9D56545BEC61C947764FEE971A3B652B + EA6B676431B0124B9C06CB9C78C3E90CDA7964B56921DBCE0969946E3F2F3553 + EADD7DAD789372920A79268285EEC363612063F5524D05C2F868F96AEEA39A43 + BE1DB92AD8C37C259657994FB6C8F2B56BEE2A56D29A86C8E23AFDD1FB29A7A3 + CF11B54DEF5FCF68BE5407C6C6F4C01BE47B96EEB4D2DAEC152218638D8C8CE3 + 6EAAA0E02DDFFF00B5BACA868C03CD93F985BD451276F4A6B7C127B23B7D92B5 + DE2BF6A3764B97AC01DE52189D96AD1BA9753C3249E4FDA22C1BCDDA82D146FA + AAFA86431B064971C6CA932672F2A9A9A7A6617CF332368F173B0B9CB893E923 + 4B492BE874C406A6507979FC33FCCAA92EBAAF89BADA42D7544F041267BACC81 + 82AC55FEA7821CF9EC76857EAFD39454EE9EA2ED4CD8DBD4F3745A7FF4A7A1BF + EDDA6FFC46FEEB93EDBC2BD415B48456DCE66876E439F8CADC5BF8394822E5A9 + B83C387938EEAF8550976527F433B9D31FE94F437FDBB4DFF88DFDD0714F4312 + 07DBB4BBFF00F11BFBAE70FF0043B6BFFB465FF78AC2B9F06E9DED0CA5B83F3E + 65E42B1E9E0BBC646773ADE935569EAA85934376A6731E32D3CFD56CE9EB296A + 1A1D0D444F07A61C171157709F50D34019457599C474E57F458B0C3C53D3B235 + D4774AB74710C005C48F97455BAE9ED96BEA86E77722E2AB2F1C78976191B1DC + A94D5339B2ECB77C7E4A7FA5BD2868A7ABF57BE5AE4A6F0E603207F658FC367F + 249331CD8EE74B22E4DD67E91F7CA8D426974A52892986C1C41CBBEAB5959C7A + E2551C5DB4B6D01A37DDAEFDD41519EF2482927BA3B15150DC15F481B5EAB70B + 6DF4B282E00868E6380F3EECABD609E39A36C91BC39AE19041EAA16552AFB994 + F27A2222ACC84444011110044440111100444401111004444011110044440111 + 1004444011110044440111100444401111004444011110044440111100444401 + 11100444401111004444011179D44F153C46599ED631A3249407A2D3EA6D4B68 + D3D412565CAAE28991824E5CAAEE2FF1D2C9A5E0928ED72B2B2B8820061C869E + 9BE1734D7D76B4E25DD9D356CF38A77BBBACC9E503DC158A18DE456E79DA258F + C54F482B95DE69ED1A4E37B63396F6C3A9F879280E93D0378D4B5C6E37B9657F + 39E671792AC0D0DC38B7D9636CB58C124C37C7EEA7D1C6C8D8191B1AC60E8D68 + C05BDA7D1597F6DA21431BCB7669B4E69AB658E06C74B0B5CF03EF91FD96EFC7 + 27AA215DED3E96BD3AF85126F244B8B15C68347543C1FBF90AB2F476A771AAAD + B99EAF7E013FCF7ADEFA46DD7B0B4C544C761CE1E1EF593C0DB7BA9F4CD317B4 + 074879B3EE547098ABB5565AFB22BB5E160E85D18F739ADCA9FD37DC1F0507D1 + B062369C29CC386C793B00172B8A34ED78270EC6BB55DFE834E59E6B95C266C5 + 144D2492B8B38AFC45BE712751BADF6C9258ADED7E1AD69EA3CCFF003F7533F4 + ADD5F5B75D44CD2946E3D931C0481BE2EF2FCB2BE70B34552DA6DB15654440CC + E19008F1F35A3545C9A8C56ECC38F3BDFB1AFD05C30A3A285955726F3BDDBE0E + E4AB268E8E9A92311D340C89A3C86EB2117A1D370DAEA5CD3DD92CF83E2FCC92 + 471B0BE47B2368F171C2D2EAED4947A7E89D34CF6997196B495485E3575FF545 + CCC3406511B8E07295AFA9E27C8F9294671E4BB2E3AC74FD087096B9A5EDEAD0 + 56A8713B4C6E44921C752157B63D04F96A44D76AA79CEE5ADEF1FD94A21D0F60 + 113A36D3543B9875E703F42B35E978ADCB992697CF0883B208925BF889A6AA9F + 8F5B1181E2E5BAA3D4763AF1CB15642E1EF3D557553C37B4CB116412D4439DF2 + 5808FEEB4959C35BC529325AEB9B26370D0FE53F238545D4710ABFB90CAFA27F + C05645FB9744D6BB456B497D3412F30EA00FD145EF5C34D3F5FCCE6C22379E98 + 1B05568B96B5D333E2A1B501AD3F8C1FEEA53A738B81CF10DD62C11B1763F55A + 2ADAA5B590C7D0B090E98E1BDB6CF5DEB2E0C7B4741D4952BB9DAA82E14869E7 + A58C348C021BB858F65D456ABC303E92A99CC7F0B8ADB104750BA7A4D2E92C8B + 49E5BFB98794503C46E1954D0541B8DA0B9AE69E60F629670238E573B2DD63D3 + 9AC2571872191CEF3D3E27F5FF00D45A12319244E8A4607B1C305A5533C5BE1C + 89C3AE16D610E079816F507F9FCF3D6BA99E95F2CB783318C9DA16BB8D3D7D33 + 2A29E46C91BC64105670395C29C31E336A7E1F98ED57B824AAA18C8682ECE5A1 + 75870E3897A73595BE39A82B6313380E688B87303F05A9669F6E686E827E49DA + 2F8D7070C82BEAD5241111004444011110044440111100444401111004444011 + 1100444401111004444011110044440111100444401111004444011110044440 + 1111004444011110045E3575305242E9AA256C6C68C92E38542F18BD202DD641 + 25B74E96D5D674E669CB47CBAA9462E5D88CA4A3DCB735AEB3B1E94B73EAEE75 + 91C7CA36693B92B93F8A5C6BD43AD2B24B569D6C94F46E25A5CDEAE0A272C1AC + 788D7615775967746F3B34F403E0AD8D17A0ED962818E9626C9301D31B7E6AEA + AB72972D6B2C86253EFB2203A2785F535EF6DC2F1239C49E625FBAB86CD69A2B + 4D3B61A385ACC0C176372B380000000007403A05F57734BC3230F8ADDD93D96C + 8227C162B6E3402A042E9839F9C72B7CD6E5FABAA85F131832900C90078AFD4D + CBDA1E4180BC2B2514F473CEEE91C64ACDB72543B3E431B9CEBC70AC7DD35A43 + 6F61FF00AD0DC7E6AECE1FD00A6A1A4A76B400C60185425339D7CE2B8772F68C + 8E42495D37A3A9B323303A2708874B472B1FB94D9BCB059FA5A0E585BB782DED + DA614D69A898B83792373B246DB027F4587628B9206FC162F125A4E87BA38388 + 7329DC463CF18FD5798D54F9ED65CBB1C7D65826D4BC53AAABA8EFB44C5D93D3 + AABB406B406B061AD1803DCAAAE0951491DD2E754F1CD8791956B0E8BA5C1EA4 + DCAC61EC82F1AC9DB4D4B2D43FEEC6D2E2BD94538AB5EFB768EA999BF8B65D1E + 216BAE86D0451DADEFF51AA357FD9EC739CD2FC6C76EAACED25A6E9ADB491C71 + C40BF00B9D8DC955DF04ED7EBD74AABC4ECE63CD8692BA134E5A8CCF6F755FC2 + 741569AA5A9B165FB7FB289C9C9E118F6BB2BE6C7754A6DFA60B80CB3E8A5760 + B231AC692C0A514D411B1A3BA16BEB78D4B9B11251AC80374B3797EE7D178546 + 96DB667D159E29983C02FCBE9233F842E62E316A7DC9F4D14ED7E9A73A2746F8 + 9B2467AB1ED0E1F22ABED57C2BB45C5AF74303A8273F8A31961FCBA85D353DB6 + 378FBA16AABAC51BC1EE056CB5B46A76BA39F9FB91E46BB1C5378D1FAB748CC6 + A29BB4969C1DA488F337C3E4B7BA4B8AB554AE6D2DDD84B46C4B974ADCB4E603 + B95BB1EA08C83F10AAFD71C2AB3DD83DEC83D46A4F49236F74F4EA3F65AB3D03 + FCDA7967F924A78FCC67D93515AAF1135F4952C0E3F81C56D5CD0410E6820F50 + 46C573B5FB4A6AAD1551DBC7DA3A9C1EECB192587F6531E1DF124D43D96FBAEC + EE9927759AF884E1FD3BD657F926B0F744B357686B4DF607010B22948F2D8AA5 + AF9A4F52E86BA8B8D9279E2313B98729382BA5237B248DB246F0F63865AE1E2B + CAB2929EAE23154C4D9587C08E8B627A1CAEAE99FEC3EA453845E91ED2F82CFA + BE2304FB37B73D0FC7F9F25D2F65BC505DE8D95543531CF13C021CD702B90388 + 7C2BA6AF8DF556D680E1BE1A30428768BD7BACF85B756432C93545BC3B0E8DE4 + 90067C3C9684946C7CB25CB231BA3FA0237455EF0B389F60D716D8E5A2AA60A8 + 0D1DA44E3820AB01AE0E19056AD95CA0F0CCA793F4888AB32111100444401111 + 0044440111100444401111004444011110044440111100444401111004444011 + 1100444401111004444011110044440144F5EEBDB0E90B7C95371AC8C3C03CAC + E61971F70516E3AF15683445A64A78646C97195A447183D3DE7DCB942968F547 + 122F2EAEB9544F246F764024E3195628A4B322B726DE2249F899C60D4FAF2BA4 + B6D8FB5A7A124B7BA482E1EF5F740F0BDCF736E17825CE279B2FDC953AD1FA22 + D7618184C4C92603CB6054B3F985D1D3682CBF796D10A2A3BBEE635BA8696DF4 + E20A485B1B00EA06E564A2FC4B2471466495ED631BB9712BB91853A587844B76 + 7ED6BEF378B7DA61749593B5A40C86677506D7FC4DA0B3C2F868A4064E9CDE2A + 9AABB8EA8D6F5BCB036510B9DBBF7C61732CD75BA897250B6F261B51EE4E75DF + 195913DD4944F0C19C774ACAE0E5CEA750DD995321716039CFB9575AE386B05A + B4FC75F2D539D54E3839F156CFA3A5A7D4EC0EA970EF16E01F35A1A8D1594DAA + 16776621629F62D7CE493E6A3BC47AF16FD255529772978C02A45E0AA9F489BA + 7AAD8A3A36BB0E73771E795D6E252E5A156BDF624BC908E06D11ACD415B747B7 + 3DE21A7F9F92EA3D154DBB0E1515C07B5FAB69D8E52C21D33B98FBD74868BA6C + 31870BA37E34FA18C3E450B79138B6C7CB105ACE237FF91EEFFF007677E8B754 + ADE5605A8E20C2FA8D15778A3FBC691F8FC867F45E324F32363B2398F833347F + F3B339817194E1586A9FE094820D4770A599FDE7B8E067C7757005DEE0D2F825 + 1F998614278D8D73F424AD68C9E62A6CB4DACE845C34D5653F2E5DC9CC16CF13 + 8B7A778F608AAFD1F67654DA24A6E46B5F1C9838EA574AE8EA06F2B096AE41E1 + 1DD7FA6B8872DB2ABB91543F9413E795DA5A35CC740C208390A776AFA9A28F2F + B1528E244C28A16B231B2CA5F887EE05FB5E524DB7B97844451017C7341F05F5 + 1018D35331E37016AABED11CA0F742DF2F85A0ABABBA507B330D64ADEF5A6A39 + 629237C2C92378C3D8E6E4382E6EE31F0CAA6C133AF9668DFEA9CD97B5BD623F + B2ED29E998F072028FDEEC74D554F2C1510B6586561648C236734ADA9DF1D4C7 + 13EFECC872B8EE8E57E106B5337FCD9719771B0C9F1F356D0DF18DF3D150FC62 + D1959C3ED622A2939BD4E5776903C0D8B73D15ABC33BEB2FB6289EE7E6563403 + BA9F0FD54A99F23ECFF927B359248F6BA3761C30546758E91B76A0A678922636 + 623638D8A90DE2E51D1B982A1A4870D8AF94D34551089A1707B0F8F92DBEA53A + DF82C5890EC7345DEC9A978777AFB4ACD34D072BF98B5A4E08CAE95E0571D6DB + AA6386D17570A6B9B5A010E380F3EEFE7EEB1EF369A2BB533A0AC883C1180EC6 + E173FF0011B43DC74EDD85D6CC5F1BE3773B1D1ECB52C84A97D3BBB7B3318F74 + 7F402199B234169041F15EAB96F80BC7AF5C9E0D39A9FF00C0AA003192BB60F3 + D3F9FC0BA6E8AAA3A889B246F0E6B86410569DD4386EBB194F264A222A0C8444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111005A5D6B7B834FE9DAAB94EE0D6C519775 + F2FE63F35BA5467A5B5F8D169165B6291C1D51261E33B600CFEAB28C339DAA0D + 7F1235F4D5D55CCF88C9B0F003C95E7A7ACD4B65A16535331A1C061CE0144782 + D65650D84573D804B2F4DBCD582BB1C3348AC7D59F65D8C6147B0445ACD4578A + 6B3503AAAA5C06DDD07C5767517C6887348C2593DEEB70A5B751BEA6AA46B5AD + 19033B9542F12B89D555F3BA82DBCD9CE0062D2EB7D6776D4F797505B1CF7071 + C777A0526E1C70F85BCFAEDD1A26A97EE01DF0B97A7D35FC4ECCBDA3FE1119D8 + A3B223BA434057DEA66DC6F8F70638F3061572E9ED3F4F450B20A4A76C6D03C0 + 2DD59ED0E90B5AD660780014EEC3A776697317A45F86E1B0C43BF928C396ECE7 + 6E3AFF0082EA0B5B4F7DFDE23E27656470E6805BF4952C41BCA5E3242AD389B2 + 8BE7184D24597C504A1807B82BA28A21051C3037A47180BCCD737AAD73B1FD49 + E99620DF93DB6C8CAE74E3D5C0DCF55434109E60640D0D5D07729C5350544E71 + DC8C95CCB6E89DA8B8A5CCE25CC8A4E6F9157EA13BF590A97B1749E225F3C39B + 73696D9474ED6E031836579694A7E585BB782AC746D2F7D800D8602B86C30F24 + 2DF82DBE3B6A5F02F62AA91B88C61ABCEBE0153453D33BA4B1B987F3185EC3A2 + F8EE8BC91B0707BDD3692E2BD553CE4C78A87348E9E2AF7A79995103278CE592 + 3438285FA60E8F928EF34FAB28A3223A8DA523C1E162F07F53C774B4B28267FF + 008D18DB3E7E4B7743A8E85D97D9985BA2C25F1C1AE05AE19691823DCBEA2F53 + 38AB22D3ECC89CE9C6ED35516ABE36ED40C702C773B5CDF9ABD7D1C788506A5B + 3474F3BDACAC80063D84EE5354D920BE5AE4A5918D3260F213FD9738D4B2EBC3 + 4D6B1DCA90C8C89B266468E8467A2F3F0E6D3CDD13ECFB092CEE8FE88514A1F1 + 839594AB4E11EBEB5EAEB1C1554950C327280F613B83E2AC889E1CD5CFBEA75C + 892793F6888A8321111004444017E258C39BD17ED13B02B7E3568C8755E8AABA + 4ECC1AAA7699A9CE37C81B85CAFC23BBCF63D52FB5CE4B5BCE5B82BBAE6603BE + 32B8B78F9613A578B0EA8A6672433CA26663C9C72A7279DC8AD9E0B335E523AA + EC8E9E2DDD18E6DBC954D60D7935A6EBEA933FFC22EE570276572DB24159A7A1 + 0F21E658403F25CA9C54B65C29F564B0D132471E627B815BA84D353F2B248EA8 + B4D7D35C68D9534CF0E6386E33D17AD651D35642E86AA26C8C70F11D173D70C3 + 59DC2C753151DC0BF94F75C1DE1EE2BA1682AA2ACA38EA6170731E33B787B975 + 349A98EA63D1BBF630FE4507C61D0725AAA45D2DA0B5CD3CEC7315BDE8D5C638 + 6E9490E9BBD4BD9D7C23918E79FBE07EBFCF86EAE96FA7B9523E96A581CC70D8 + 9F05CE7C48D355DA475132F16A0E63A17F38737C77CAD79D6F4D3E959F95F666 + 1ACEE8FE82D2CED9580839C8590A94F47CE2543AC34E45DB4AD15B080D9599DF + E2AE5A7943DA082B4EFA1D6FE4653C9EC888B5CC844440111100444401111004 + 4440111100444401111004444011110044440111100444401111004444011110 + 04444017387A5F6277DAA178CB435C7FF39FD9747AE6FF004B6FFEF76BFF00E5 + BBFF00EC7292ECCC3EE8F7D2D4ECA6D3D45147D3B3056CD60D87FF00C128BFF9 + 41672F59A04969E3830FB9E7512C7042F9A5388D832E2B9CB8C7ACAA6F17436B + A2717F33B95A1BE0ADCE30DE0DA74ABF94F2BA5CEEA9AE1069F75DEEB2DF2B5A + 5C03BB995A1D29EBF59D35D9119CB9512DE17E8D86D9431D5CF17355CA32491B + 856DD8AD0E99CDEEAF3D3F6B32BDB86ECACFD37656B1AD25ABD16AB535E86AE9 + D65108659E3A7AC2D635A4B16FAFAF82C9A66BAE1261A2081CECFBF0B75494CD + 8D8000AAFF004A2BDFD93C389E9DA795D52E0C041F9AF1B7EAE77CF765B62518 + 339CB86B13AF9C44ABB9CB9701297737E6AF2CE493E6AB1E02DACC16896E2E1D + E97C7CF2ACDF05D0E110DA5632515CB1488BF142E02DFA46A5F9C178202A7F81 + 3426AAE95B737B739760152BF48DBA761698A89AEC39C3C3C72BD781F6BF55D3 + 7038B70E94F313E6B6F8447ADAC9DCFB2236BDB05DFA2A97769C2B4EDB1F2C4D + 559515D6DBA72D2EB8DCE76430C632492A07A87D272DD4B51EAF63B73EAC0382 + EF03F0EAB4F8A395D6BC0834B63A59172D8F498BC1191A79FF00CFF657E65F49 + BBB44C2F769F7803F9ECAE57E165E57DCB798E84D7BA768F5469BABB2D6B4164 + CC3C8EF61FE0570E5CE8EEBC39D7135254C6F67652907C88CEC55F5A77D2774F + 56F24378A3968E476C4E361FCF82FD71529B48F156C3EB766AEA67DD616E6378 + 7005E3C1AEF7ACCB4B663B648F3619E3A46F905FAD6CAA89C3B4C779BFAADCAE + 6FD337CBA68ABE9A2AB0F8D8C7F2B9AEF0DD5F9A7EF94379A364F4D2B79C8CB9 + 995D1E1DAF515D3B1FD19268DA289EBED234DA928DE0C6DF58C6C71F794B1175 + 355A58EA6387DFD9984F072FB46A8E17DFDB596E9A56C2D7E5F1EFCA47C175B7 + 05B8C364D6741140EA86C35ED68ED2279C1CA886A7D3B417FA6747551B7B4C6C + EC75F8AA135768ABE690BA9BA59649607B1DCCD31923FB2E14D4AB7D2BD7D18C + 7BA3FA0F148D7B410410BF6B94B83BE916D8CD3D9757466198619DB9E87E3FCF + 92E9CB25E282EF46CAAA1A98E789E321CD702B52DA250DD6E8CA793628837454 + 190888802222004642E67F4CC641DBDA9F196FAD76783E78C95D29553329E9DF + 348406B064E4AE2BE34EA476B4E288A4A677690D3BC46D70E9869595D8C3EE8B + 1F4273FF004C517699E6E5F1550F179DEABC48A4EC4728748D0E03C77578DAA0 + 34F6EA5A7C00591805501C58AF655F13292303BCD99A081F15D8AE2B34465F33 + 12ECCDCF10B497AEDBC5EADD1E2A18D0E9D8D18C8F687EABF5C21D66FA5A9FB2 + EE32120F74655B7A6285B341182D0E0580107A118E8A9DE34E8C9B486A18AED6 + F63851D41ED187D93E2D56F1BD1C34FA87655B27FE195D5278C32F2690E6820E + 411907CC2D2EB2B1C17CB3CB4EF6032069E53E7EE5ABE186A26DF2C4C6BDC3B5 + 88631EE52F071B85743975FA6C3FCCBF92CECCE66D1F75AFE1B7122225EE8E8E + 5939646E76C65773E92BC4571B7C35113C399234105723FA4369D6181B748198 + 3F7B6F02ACEF464D55F69690A7A7924CC94FFE191F0E8B4A983BAA9425DE261E + CCE908DDCCD5FA5836E9C49103959CB9538F2BC130888A202222008888022220 + 0888802222008888022220088880222200888802222008888022220088880222 + 200888802E6BF4CB8AA218AD558C04478734BBC3EF13FA85D28A15C64D1B16B6 + D1B536BD854B01929C9F6BCBF3595E0C3F2523C30BE4175D39047DA03346DE99 + DC852D5CDD62AFB9683D52FA3AD6491767272B9AEDB1BABFB4FDEA8EF542CA9A + 691BCC4779995D9E1BAD50FE94FB7B06B24338F96F9EE1A59BD8B490C041506F + 47EBC42F6C964A92D64D1BBBA0ED957A5D68A3B8DBE6A39402D91B819F02B9A7 + 5EE95BB692D41F6B5BB9E3746FE6CB7C55B56A25A1D5B97B488CE3CC8EC4D1F6 + D696B1D85635BE9DB1C6301501E8F1C53B6EA4A08E8ABA5653DC6201AE638E39 + BDE3F9FF001E85A491AF8C1690410B5B89DB2B279F6310583DC6CB94BD302F52 + 565FE82C50BB61DE700739C9DBE817535C276D3514D3B8E03184E7C970F6A3AE + 9758F19279DA79A264F86E3A000E02E64764D91B776A25ABA0E845BF4B5241CB + CAE73798ADE8DC80BF313045132268C0634342F0B9D4B692DF5150E380C8CE3E + 2BD255FF00CFA3CFCBF92CF739E78E15CEBAEB48682339CCA063F3570E946416 + 7B1C2E94B638E188139D80C0546DA1A6FF00C53327DF644F2EDD4FB8BD7A7D0D + A22B4D392D927C671E5E0A7A0B168F87CAE7DDEC8A6CDE58445F5F6ABBCEBCBE + 7D95465ECA18DD80D6F43EF3FCFD5585A0386D6CA0A18E6B8421D2119E52372B + 1F831A4A3A4A0173AB8C39EEDC64752ACF0B97A5D34B592E7B3F2FF25918A823 + 05966B4B1818DB7C181E6D5E75560B354C7D9CB6F8797FCA30B668BAEF87E9F1 + 8E5259657FA8785962B935C606089E7A0230AB6B9681D4DA5EB8D5D9A79D8D6E + FDD27185D12BE100B4B5C039A7A8232169DBC2DC77A65FB3194FB9C8FAE6EB76 + AC1DA5CE377ACC6305E5BB9C6562F0FF005E56D96E2CED6577640F9F45D39A9F + 44592F70BF9A0645211E5B1543EBBE13575BA77CD4711ECF39C01B15C4BA9B2A + 9626B7248BDB466B4B6EA1A56112B19311E27EF294AE34B5565DB4ED53407491 + 969FBA7A2B9F41715592B23A3B96FE1971DC2DDD27129D3F0CF7461AC9722F0A + CA5A7AC88C555136561F03E0BCADD71A2B842D9292A19202338CEEB317714A8D + 5C31DCC6E8A9B885C2BA6AF63EA6DAD01FD4068C10A17A7355710786756194F3 + 4D351B0EF13F2461746AD7DDECF6EBA4463ACA663891F780DD732DD05B4EF53C + AF036664F0CBD23B4EDF1ACA5BD9FB3EAFA1E73DD27E2AECB3DEED776A76CF41 + 5B0CEC70C82D78395C7DAAB83D4953CF3DB5C0487A01B10A274B41C46D133836 + AAEAA11B0E43398907F25A128D72789AE5637477F22E36B0FA44EB7B339B15EE + D86A18C18270413FCF829FD07A51584D3C66B6DB3C4F23BDB74FAA87E15BFCAD + 31CC7452F3A89A2A788CB33DAC6346492B9E6F1E941626C120B6514D34A3EEF7 + 763FCF82AAF58717B5E6B689F45430CB4B4F2641E407241F7AADD2E3F9B630E7 + E0B27D22B8D4CA6649A734D4C24A87E59248C39E5F70F7FF003E15D70674C54C + B5C6F3728C971EF65CBC387FC34A99AA5B72BC17176724BD5CF4B053D152B618 + 58D8E260FE12AFA28EABCF68AEEC4535BB3C6F35B1DBEDD3D5C8400C69C7C573 + 55B263A878AAD9437B4647264953CE376B363299D6CA194389DB63D4AD370334 + EC9031F76AB61134C7BB9F25D4E1D17ABD6A925F0AFE111B1E160E86D19103C8 + 31B05BFE236908755687ADB6BA30E9DB19969CE370F03A0F88581A269CE5A70A + CCA38F1134E3A2CF19B336344611D8E1CE15564D60D60FB6D492D05E5A5A55FB + B781C8F055071FEC674B7161D554EDE4867904CCF81569D96715369A59F9B98B + A3193EF5A7C26CE5B9C3C977746A78876C6DCF4B55445A09634B82ADBD19A696 + 82FF0071A4ED0F661DD3C3C55BB7F71165AC1E71154BF031E59ABAE7FEB7EA57 + 4B4D4AFC7C97945763D8EC6D3555DA42DDFC1495872D502D1B39746CDD4EA039 + 605C5D7D7C96B2707947A2222D12411110044440111100444401111004444011 + 11004444011110044440111100444401111004444011110044440179CCDCB765 + E88770B29E014A71D385947AC607D751B63A7BBB07DEE826F71F22B9829AB2FF + 00A12FA68EB59345D93F0E63BC177ED7D28958410AB0E26E80B56A7A37C55F4E + 04C1B88EA1A3BEDF8F985B0AA56ACC7B90CB8FD0AF7466B3B75FE9DB99191CD8 + C104F52B71A92CB497AB73E0A8602797BAEC2A2F58687D4BA12E06A600F92979 + B2C9A304B5C3DFE4A49A1B8A4476745751BF4CB8AB23A87CBD2B9657F944BBAC + A221AC787D77D3B70FB52CD24B139AEE66BA338560F09FD226BECBD95A75840F + 735A437B7C741EF5635254DB6F7420B0C7346E1BB4EEA17ACB86169BB44F929D + 8D8DE467042B173463B7C513182CDE25F15B4ECFC2FAAAFB55C62925A88F9236 + 87778123FBEEA8AE03DB1D535D537899B9249702541EF9C3BBCD0D5FAB36594C + 00E437C15EDC35B48B4E978632DE57BF73E6AAAA0AEB6308ADB246317CDCCC93 + 288F166E22DFA3E73CD83203B7B94B8AA63D23EF019491DB98EC3B007E657678 + A4B15C6B5EEC92341C03B67ACD6D5DD1C399EF7F2B49595A85B2DFB890DA5239 + A38E4E503C3014A782F6CF54D2909C61CF8DD267F2256B78634124DC40ABA894 + 7386127EA5438C2E9D34D2BC67EE535ACCDB2DEA0A6651D1434B18C363681F9F + 8AF62E68FBCE6B7E270B0EFB718AD36F96B66C6183201F12B9F2FF00AFEEB79D + 46EA7B6C9213CD801B955CF56F4C95352CB5DCB9E3BB3A437C671B1F108B9FA2 + D59ACACB3345576C5ADF07B4852DB0F16A9E57361B9C018E3B737458AF8C6F8B + 23F63382D445ADB55EED97289AFA5AB8C93F849DD6C57529D55572F8191C1F57 + E64632461648C6BD87AB5C3217E915B6570B1624B20826B0E1BDAEF4D7CB031B + 1CA77E5548EABD0F76B25438C70C858D3D42EA958F5B494D5B0986AA16C8D231 + B8DC2E26A784B5F155F62499C9D63D6378B0D4868964C34EE09570E8CE2DD0D6 + B590DC480EE99270535CF09E8EB6392A6DE073F5C0EA1515A9F49DEECB50F3D8 + C9CA0F56EC5723E3A65E1993AFAD977B6DC981D47571BF3E04E0ACF391D42E2A + D3BAAAF96DA86C6CA89001E055B1A7B8A17DA48DBDBB7B767BD7469E2D6C369A + C98C17E2F8F6B5E30F6B5E3C9C32AB7B57166D93605753BA23F88818523A3D77 + A66A62ED3D7C47E41C42DDF51D2DAB1621866CEB74FD9AB4FF00CA2DF13BE030 + B4B70E1EE9AAC76F4618DF2016E28751596AF262B8C38F325644D77B4C51979B + 953903C8AAE51E1F2DF381B91CA1E1CE99A4979DB4BCC3C410A454166B5D00C5 + 2D144CC742464AD5556B6D394F1973AE0D716F5682A2B7BE2CD0C20B2DB0195D + E0719544ACD0D7F963CCC6E59355510D24266A891B1B1BE27F4554F123899043 + 4F250DB4F338ED969DCA895DAFBAAF54D418A164AD63BCB2B67A5B40B187B6BA + 8334B9CF29DC6546B8EA7884FA75476F9765F5312928F722DA674A57EA6BA32E + B5CF78843B3DEF157E698B608DB1451B30D68006CBC2C566644C64504418C1D0 + 00AC6D2F6420B496FD17A8AEAAB8651CB9CC9F766BEF37937DA4A83B38DA4853 + 68598600B06D548218C0C2D98D82F1BACBFAB36CD88AC239AFD33E9220CB4D60 + 21B2969613BE700FFC57CE1E92ED1F40F2724B3F45AAF4B9BEC371D49416581C + D7889AD071E049CADFE93A5F53D3945003B08F2ADE1C9FE2621763DEFEDCD96B + 0F9445523C1438D5B73FF5BF52ADED7D5C2DFA5AAE62EE52E6F28F7AA7380AE9 + 2A2FF71A9E53C8E775F9AEE68E6A5C45E3D960859F94EADD12EEE315894BFF00 + 461575A247758AC5A5FF00A30B93C5BFBACCD7D8F64445C92C08888022220088 + 8802222008888022220088880222200888802222008888022220088880222200 + 88880222200888801190B0AB291B2B482166A1DD4A3271794082DFEC11CF0C91 + BE16491BC10E63DA083F92A1788DC19A7AA925ACB0E29A7C97181C7BA7FD53FA + 2EAE9E06BC6085A3BA59E399A7B80ADF8DD5DCB96D5FBFB95B8B4F28E1B8AE1A + AB44DC4D355B278C46705AE055A9A3F8956DBA44C82B1E2398EC4956AEADD1D4 + 374A6753DC2899531F8730EF37E07C173DF13385559A7A927BE595F24B490905 + EDE8F8FE3EEF7A84F4F669FF00A95BCAF3FECCA9E7665CE1947571364E58A667 + 507195E843461AC686B5A3000F054EF022F974B8D53A0A995EE8D8705A55C47A + 9C745D2E1938DD27271F897B927D8FAD1970F9AE65E38D53A5D5CC92A838C0C9 + 3BD8F2CAE99DC1C8510D63A12D7A85AE73A36B263EED8ACF11AEDEA46D8ACA46 + 3BAC1AFE196A0B15C2D3C949551B7B3A7702D2704774AC0E11B9AFD5D722C707 + 0E5EA3F35566B8D1D72D13DA54524AF89AEC8C8711B2977A335666BAA05449CF + 2C84F8AD1D6EBDEAED849AC608C21CA4AFD216E4EA3D39D9424F7B390142382D + A72265BBED59E20E9E539048E8A5FE9214AF758192440B88DCAC5E035632E9A7 + 6284E39E13CA42EB70555BD4CE53EE88DD9C13982D26AE1ECE6899330FE191BC + C3EAA39A978556AB8832D335D4137B812CFDC7D55DBA6ECEC7C4D25A16F67D3F + 1B99F702B3886A34B74DAB22B3E7B3231835D8E2FBD697D5BA4A7F588448FA70 + 769233CCD3D16FF497152A298B696ECC25A36CB9748DCF4DECE0D6020F504641 + F885556B9E135AEE81F2D2C6282AB0482D1DC71C788F05C6B340D7C7A7967F92 + 6AC6BF31BCB15EEDF78A76CB493B3247DC2775B33B1C1D973A5D6C7ABB4355F3 + 72CBD803DD7B776386FD0FE4A57A478AFF00729AEECF764FEEA7A7E29654F96D + 59FE4B309F62E0458167BAD0DD6012D14ED7E7F0E7759EBB94EA2BB9660C8E02 + D75E2CD6EBA40E8EAE9D8E24639C0DD6C5162FD3577AC4D04CA3F5A708DCD7BE + B2DAD6BC75D82800ADB8699AEECAB6804B4ED3DE6B99905757FC168350E93B45 + EA2736A29D8D7BBF100B87770DB2997343E244BB951586B742EA4E48CC429273 + D5A1F8DFE054A64E1CD8EAA8C7ABD7D447E2D1D9E41FCC1510D6BC20A9A47BAA + ED65C31B82C5A5D3DAD356E8EAA14D7285F574CD3821E0E71F157D16686DF86D + AF0FE595FF00856E335D996141C37A681BCADB8FFE472FDBB87D01041B88C1FF + 00E1B96FB44712749EA291B4F34A28EA0EDCB26D92ACCA2B1D256C624A592399 + A7C5A72B7FF05C3B19C3FB91E69948D270DAD90C8E7CD5934B91D18CFDF0B674 + 5A2AC94A3FC3A274AEF390FE815C834B0F63E8BDA1D2C33F73E8A70AB8657BF2 + E7EAD986E6CACE8ECFCAD0C8A16C6D1D035B80B7D6CB048F70CB0AB068F4CB1A + 4659F45BDA1B2471E3B815B6F19AEB8F2D4B0BE46156DF722D61D3A1BCA5CC53 + 6B65BD90B077566535232303002CA6B405E6F55AE9DEF72E8C523E31A1A147F8 + 83A968F4C69BAAB8D5C81A18C3819DC9F2595AAF515B74E5AA6AFB8544713236 + 93B95C5DC57E225EB895A90DBEDE5EDB731F86B4743EF3FCFDD694639DD894B1 + B2EE62D99F59AEB88D2DD672E7B1D2970CF4EAAFA8A311C6C89836680D18512E + 18E966582D2D7C91E2A1E3CBA2DBEAFBE4161B549532387685A794797BD74B46 + D69E12BE5F44492DB0561E907A9DB0D27D9703F27EEE01EA5647016D0FA3B132 + 791A43E77736EAAFCD46B6D78D0439D035FCCECF92E92D216F6C2C8608DB86B0 + 00176781D0E319EA26516CB2F05A5A2E2C31BB29ED38C3028B695A6E485BB296 + 4630D5C1E23673DACB60B63F4888B9E4C2222008888022220088880222200888 + 80222200888802222008888022220088880222200888802222008BE39CD68CB8 + 8007892B5D537EB353BCC735C69DAE1E1CC98C83648A1F55C4CD154D50E825BD + D307B0E08E76EDF55E5FE94F43FF00DB94DFEFB7F756746CFD2FEC63289AA2D2 + 69BD5562D45CFF006457C555C9F7B91C0E3E456ED41C5C5E1A3217E5CC0E5FA4 + 58060D551324072D0A97F496AC8EC7A25F4CC20495AFC63C703FF557B120024F + 40B917D296FAFBDEBBA7B240E259072C65A0E707C55CAD928B8E484965A31B81 + 36A34F6B9AE2E6E1D2F438F3566AD5693A06DB74FD25306E0F20715B5EBB2F41 + C2EBE9D1CCFDCCB3CAA278608CC9348D8D83C5C545AF7C42B0DAF21B376D20E8 + 01504E39EA39A3B9C76DA59CB07DD3CA7AAC0D31A1E29E1655DCA67C86401DC8 + DDFEAB4BADACD6CF9285B7CBFED86E31EE69B8B5ACAAB55D13E1A7A690B46EDC + 0587E8F1592D06A7E5A86B9A5CEC00E571596C341425A69ADF09C78BDBCC7EAA + B9D7D4634BEBD8E7822EC607B9B2B1A06C03B7C7D551ADE197E8E319DAD6FE08 + C2C4DE11737126D6DBB6989E30D0E735B90A87E0CDEDDA575EC969AE7F674F3B + F039B600E574369FAE8EEB63827C8707B30E1F92A378DBA225A5AB376A2690EC + F3B4B54EBB9D3646E5DA5FC9292CA3B0F48CB1494D1BD8E0E69008214B98C6B9 + BD172AFA36716A9AAA9E2D3F7B984359080D6B9E7EFF00FC7F9F0EA2B754C73C + 2D7B1C1CD23620AAF5D06E5CEBB33113F53D2B1E37685A8B859E395A7B814857 + E64E46B4B9E4340EA4AD4AEF9C1ECC93592B4BDE9B64913E37C2D92370EF31ED + CB4FE4A9CD77C1FB7D7BA49ED6D143524E790FFD1B8EFD0F82E80D43ACB48DAE + A0D35C2EF4D14BEC978FDD46AAF5A685AB90451DEA94BDE70073B77FAAEAC65F + 888E2D87EFEE55CB8794CE4FA8A7D5DA1AB79268E7646D39077E523DC54EF48F + 1569EA7929EEADE57F4E63B1579DE74E535751F2BE08EA69E419E47B7208FD3F + 254CEB8E0DD34E5F516471A69BAF62F3DD3F03F3EAB5A7A2B2BF8E979FE492B3 + 1DC9E5B6E149718849473B65046700EEB2D7384553AB343D798AA619D8D69E8E + 07FBAB2349714682E01905C7FC397A73742B634FC5A51F86D59F993C163A2F1A + 2AAA6AC88494B332569F23BAF65DAAAFAED5983C91C0F023C0F505696F5A5ECD + 7563854D2303CFE2685BA455DFA3AAEFCCB7339293D55C1CEFBEAAD6FC386E39 + 362B4169B9F123424B8A5A89E581A73C8FDC61745AF1A9A5A7A9616D4411CA0F + B4D5CE970FBEAFED4B2BC31B320BA3FD2524A77329B53DA5CD2362F60FDFF757 + 0E99E32680BC801B738A07F948797FBAAC6F3C3ED3B72E62FA611B8F90C850CB + A705A9DCF2FB7D5F667AECEC15A96292FEED6D7D063C1D7F6FBC596B0034D5F4 + D267C9E16CE37C2E6F33246380F10E0570B8D03AE2CD23AA2DD74A960030395E + 566DAAE1C62B753C94F1D75448D778BCF31FAAD670A65DA4D7D50DD1DA55B75B + 6D1C464A8AC858D1D7BE155DC45E3AE96D3B492328AA5959558EEB63703BEFE2 + 17393B4FF12AFE1D0DC6E7565A4E795CF385B6B0F07DA1ED9AEB505EEEA798E4 + A82AE39C472C8BE77F2235A9F54EB2E27DD48924963A32EEEC6DCF281F056570 + D741535869D9355461D3E3201FEEA4DA7F4FDB2CD0865240D040FBC46EB13576 + AEB758A95EE7CCC74C06CDCABFA2ABF8AFDBE44A315133B52DE692CB42FA8A87 + B4103BADF35CE9AEF51DDF56DC8D35073B98E7E365FBD53A96EBAC2EA29E06C8 + 6271F03E0AC1D11A5A0B5533098C3A770CB9C47F3F9F4DAD2696EE2372DB115F + 6488CE6A28FCF0CF4AB2D341199616FAD3C65EE574E90B612E692D5A5D396974 + 8F69E5569E9BB60898D3CB85E83886A2BD2D2A9AFB229845B7966EAD14E2289A + 31E0B683A2F38181AD017A2F1364F9A5936504445032111472FDAF34658B985D + 7535AE9DEC3CAE8CD435CF69F7B5B923E4B2937D86091A055B5571DB84D4F14A + F9B5A513046D738E62977C0CE077373E40649F05FAD3BC72E155F5B9B76B1A37 + FF0089D99EDA2961C3B1919ED1ADC0F79DB63E454FA36633CAFEC4B95E338D8B + 1D178525652D653475349511544120E664913C39AE1E608D885EC082A0D6089F + 51116004444011110044519E216BAD35A12CEEB9EA2B8329DB83D9C40E6494F9 + 347EBD101265A6AED57A5E8657435BA92CF4B234E1CC9ABA36107DE0B9726EAF + E2F71178B371367D1B4B3592C6F7723E719CB9A73BB9DE3B676F1C74CAFCC3C0 + EB6C96D1F6CDEEBAAEE0E197BFB5380703DC7C73BECB734FA39DDBA5B186CEAF + 835A68FA899B0C1AAEC52C8F21AD632E1139CE27A0003B75BDE61E6B8A2A780D + 6EF5091D6DBCD5C15CC1CD138C848277C0C63CF1E7F02A45E8D1C51D5943AC1F + C35D56F7D5085AE14D3487BF186B4BB19F1690318F8636EB65BA0941E3063275 + B028B5B455EC980C382D831D90B4A70707864B27E91114004444011110044440 + 16B751DEA86C36B96E17099B1431B4B89270B64B973D2E756D5CD5B0699A09B2 + C7E0CA1A7AE7A0FE79ACA4624F1D8D171578F37BBE5D24B4E92E6653E7944ADE + A7C3F250DB468DD69A86A3D7ABAE3541CFDCB8BCA98F0BB4251D15BE3AFAC873 + 33B7008EAACA680D686B406B47403A2E8E934B6DFBC7E1441471BB2A0A3E0E3F + D60BEB6E2F7F3753CEBF778E155BA8692694D64DDC617025C7055B33CB1C10BE + 694E18C6F338AA1B889AD6E375BBC96CB64A48279435A7E8B3AB82D3CB92326D + FD496362C2F43798515EAEF4E65739A0E0733B3ED2EA9827120C82B917D1CECB + 76D3D57555771387541181F3FDD74FE9EA974B1B492ADD5E91AAE336BD88C65B + 92345F19F757D5C72C355AB2E705A6C1575B50FE464713893F92E2DD39DA6ADE + 274F7193BECED8BB3E1D55BDE96DADBD4EDACD3B4727F8D3FDF03AE3FE27FB28 + 6704EC0EB75A4D7CCDC4928DB3EF5642B73928AF722BB963600D8741B0F82C7B + 8D5368A827AB710046C2467CD7BF40AB5E38EA66DAACAEA38E4C3DC3BDBF8AF4 + 5AFB15142AE3DDEC1792A1B8CD26AAE24B2300BD8D932EF11D574158AD9CCC8E + 26B7668002A8381365965927BCD4B32E95DDC246EBA4747DB83DCD25ABA9C3E3 + F82D1733EECD797C5232ACBA739DA0967D142FD23F41C955A420BD51C1CD3D09 + 2C970DC9E42720FF0070AFCB4D0B1910EE859373A0A6ABA19E8EA621241330B2 + 4611D415E6F5DAE96A1B832D50C6E8E37E0A6AC6C40DAEBA6C636192AD8BAD0D + 2DD689D4F3B43D8E1B1EB854CF1B387774D05A95D70A06BDD6E95E5F0CCD1B0D + FA15BDE1971069EA606515CE4E47B76049DC2D4A2E504EBB17C2FF00C16279EC + 44B881C30AEA0AB75C6D25ED703CCD7316D7877C71D5DA2E68EDFA829E4ACA56 + 77798FDE036574433D3D54598A48E663BC8E73F92D2DE34658AEC499E918D27A + 9685B4AAB22BFA6D4A21A32AA3D2874E368C1A6A39A49CB721B8F155BEABE3AE + B6D5024A5B352BE9627EC1CD0738F8A9753F0A34BC72091B1608F3016D8DBF48 + E9B83B47321E668CE365AD6663FF001488B837DD949DA3425F2FB57EBF7DAC98 + 3A43925CE3BAC6D73A5A974DDE6DA29AAA479748D27BEA63AEF8A96DA7259410 + B399A30DE51D15776A8753EBCD494F336291B0324E6E67670A5A7539CE3CB966 + 1E22B0776E968E39F4D506772610BE5CACB1CAD3860581A2A67C56AA5A579C98 + E30D2A63100F60C8565D39D16BC3F7329651556A5D274F5D4CFA7ACA58EA6220 + 8E57B738EBD0F51D552BACF8331BA47D4586630BF24F6329C79F477C975C54D1 + 324072D0B4374B147203DC56F5A8D4ED6ADFCAEE4795C7B1C5723B5A68EA9114 + F1D4B434FE20718F7152ED39C5A6B9CD82EB1631B1711FAABE2F5A65B246E8A4 + 8592C673963DA1C3E45565A9B85963AB73DF1D2BE8A5393CD16EDCFC0FEEB0F8 + 758BE2A259FF000C2B31F991B6B4EA9B25CD80D3D6B1A4F838ADD3087B799843 + 879B4E551F74E185F6DF2992D356D9C039018E2D77C8AC16DCB5CE9E9047332A + 30D3D1CD2B2B5DAAD3BC5ABEE4D38CBB17FA2A72D5C55B9C4E11D7D097E3EF1C + 2DF50715ED153286C9492463C700ADA8718ADFE68B43058A8A16EE2469FF0001 + 38FF0064FECBF3FE922C3E737FBA7F657FAA69FC8C136FCCAFA1CE1D1C542871 + 234FE37139FF0064FECB555BC59B74523A2A7A27C8EFC2482A99F12D37E9CFEC + 670CB27BCE3B124AC0B9DDEDB6D6975655323C78672554375E24EA2B97345434 + AE881DB60B4C74FEA9BFC825AF95F1C47A979207C96A4B885B6BE4A238FA6EC6 + CBB92AD6DC52631CEA4B4778BB6C8392A0B6FB25F3555676F707BE3889CF7BCB + DCA6967D03414D2472C999A46F52E1B29DDBAD24901B1803DC174349C06CB1F5 + 354F957F9FFC2995DEC88E697D2F476D85B1C5034BBDA23753FB0D95D239B96A + D9D8F4F39C5A4B3E8A7F64B23226B4962E9EA75F4E92BE952B09108C1C9E598D + A76CAD89AD25AA5F49008D800094D4ED8DA000B246CBC7EA7532BA5966C46380 + 88B45AEF5659345E9CA8BEDFAA9B052C23619EFCAEF06347893FF13B2D526967 + 646E6AAA29E929DF53553C504318E67C923C35AD1E649D82A178A7E939A574E4 + 8FB6E9684DFEE7F7416822169DBF37788F0FCD53FA9753F10B8EB7F114667B36 + 94649DC6C790DC6DE3B733B07EBE03A4C747F0BF4A69285D58E8993CB08E792A + 26DF18E524E4F4E84E7C3CD6F697473B973630BE662584F0451D73E35F15A37B + EE37796CD6B906D030F66D7376232D68DFAF523F35B2B3704AC34EF64F79B8D5 + DC6A1AECB8BDE40774D8819F7F8FEEB4D73E32DD6B2FF2DA34458DF5D046397B + AC71DC75386BBA7F3DC34741C4ED6FA36E9FFB616991D4B527BAE2DC06E47811 + B788CFE8BA35D54423CCE2DAF38D88F37B169D570B341CE7BD66696918C12EF9 + FDE58370E0CE88ABB74949474D2D0CD21C89237B8004038D893D32A7361AA8EF + 368A6B9D2B98E86A19CEDC3874F2DBC568F5B6BED31A3687D62B6A9B55525CE6 + 36088F310F19EE9C6C0E40C8EA33D16E595E9631CC92C327153716D7621FE8FD + 7FBDE86E2FCFC3C96EAEAEB4CEC7C839CE794B585C08F23B007F5C02BAC6DF73 + 64E061D95C43C379AE7A8F8B32EBAF5134542C6BD8C0EC8E6CB4B401E677C9FD + 360BA7B495CA491CD0492B5E7C39CF4FD56B1DFEDEC53CFF00160B56378705FB + 5856D90BE204ACD5E7A71E5782D0888A20222AE7D21388B0F0E3404F728DCD37 + 2A9CC342C3B9E7C6EEC78E323F321652CB32964D3F1F78DF66E1BD2BADD481B7 + 1D432B7FC3A666E22C8D8BF1E3EEFCFC81A034D68AD4FC48BDC5AC78895B2CF0 + 4CEE78A91CE3D36C6DE031F41B6010567F06345B6E714FAD75A44FAEBA5738C9 + 136A3BD80EDF9B7EA4E7C7E3BE411636A7BCD3E9CD3B557395A0450464B5B9C6 + FE5D0AECE93411E5EAD9D883643F59F14B48F0E2A60D3F0DB449D9B705918C76 + 631F03D739FCFC49389668DD476CD6169FB56D0FFF0000920876C5A479FCC7CD + 50FC29B2C1ABEE978D5FA86963AB8EA5CF8618E468C65C3BC70318C03B7BCE46 + E17ABB466A8D22DB8CFA7B51C5416A7F7899642C2D1D7C075F0DBF521752AA35 + 7D35745662FDBC221CF1CE0B2B8AFC4FB4E8C8BD5291ECAFB9BC10228DD9E43B + FDEC7BFC3AFC36CD7DC1CA3BED4EB93AF3503D9465EC70858FC35D20734B7206 + DB60E73E3F9922B4B44E5973FF009A2864D41797BF9454CAC2E8984EC39187EF + 1DC105DF0E5DB2AD2D09C2FD4777AD7DF35C5C676C5D99708B9F2EDC0C0F1C0D + FA7BB185455745D8A73F89AF65D97D5869BD91D3DA3EF22A434B256BC67196BB + 2158B41273C60AE4EF473BD36A3525F69296679B7D3498A76B8F405C7DE7C3F5 + F3DFA82C956D7C6D195A7C4211B12B20B66661B6C6F5111710B0222200888802 + 22203CEA9E63A695E3AB5848F92E3BE2A442EBC73A864A4E1B545A0786D9FD97 + 61D5B5CFA5958D197398401EFC2E40D73FFBF7ACFF00BE3BF552C6C0B3238DB1 + 46C898006B1A1A005FA5F02FABD951150AE297820C89715AE9F66E919DCD761C + FCFC9529C1CB3BEE778A8BD5412435E7973E6AD1E3D534B2E95ED230795A0E54 + 5FD1FAAE96AED0FA36604D13FBC3C56970D8576EBA6EDF6216E705C5A6295EE9 + 1B80ADDD3503991372144747DB010D25AAC7B7D388E300051E35AB53972A15C4 + CC60EEAD2EB6D4149A6F4FD4DCAAE40C6C6C247C967DE2E54969A092B2B26645 + 146D2E25C70365C6FC77E29556BABD7D83660E3431BF1CCDFC67A67E1FCF879C + 8C73B9394B1B7B91E9EB2AF889C4892BE405D0F6BDD1E00780F92BE68A9A3A3A + 38A962003636E36F350DE146968EC969654CACFF001DE36C8DFE2A6CE7068249 + 000EA4AEC70CA52CDF3ECBB19C6160F2AFA98E8E8E5AA9480C8DB9F895CBBAEA + E151ABB5B3282271730C9BE3CB2ACBE35EB9829681D6FA29413820E0F52A27C1 + 2D3D2CB3C97CAC8CF3CA7B9956E9A12E23AC4FFE288D92E545B3A1ECF1D0D0D3 + D1C4CC06340574690A0E48DA70A13A4ADE5F234F2AB66C54A2289BB782E971AD + 4A8C7A71EC8AEB8FB9B7A6606B02F478C8468C05F578F6F2F26C119D5B65A3BB + DB26A0B852B2A69651DE63874F783E057316BCE074D4B5AFABD3B580B32488A4 + 3CAE1EE07C575F4D187B4E547EF36864ED3DDEAB6E9E959F0D841A6B74719C56 + DE2058A6EC9B1D4803A641231EE5208750EBC8E26B391DB0F18CABDEE9A7A463 + 9C62E66FFAA70B453D8EAC138925FF0078AEA55C2299EEADC7EDFF00A43A925E + C53D72BEEBDA880B5AD783E18610B452E9CD5D781DA57CD246C775E67615EC6C + B59D39E5FF0078AF8CD3D29764B095B10E07A74F33B72BE9FF00A63AB2F05476 + 5E1D5B63631D5A1D512839391B2B334B5AA2A40C8A969DB1B06DDD0A4343A69E + 48CB3E8A5766D3C2320967D16FF5749A2AF9695FBFB90E57279665E97A77B58D + C82A694C30C1F05816EA26C2D030B66D180BC9EAEEEACF26C4560FABF2F6070E + 8BF48B50918351451C80E5A169EBEC71C80F702932F85A0ABEBD44EB7B330D26 + 56F71D32D7670CFA28F57E9C95A0B704B7D92323E455C7253B1DD405873DB627 + FE10BAB4F179A5896E8ADD699425CB4951CBCDDADB299C4F53D9E33F2216964D + 0D6563B3F6596F9F2BF1FA2E84A9B1C4FF00C03E4B5D3E9C8DD9EE05B51D5E8E + CFCF5AFB11E492ECCA29DA2B4B8EB6EAECF8FF008C3F65F83A334A8FFF004EAE + FF00C61FB2BAE5D30C3F83E8B1DDA59B9FB83E4A715C31FF00C3FCBFF63E3F25 + 312E8FD3AD19A7B7D503FE79863FB2FB1693B431E246DA9AE78F17BB23F4572F + F4B37D81F25FB66976FB1F457467C360B6AD18C4DFB95453595B19CC14B145FE + A316C69AC72BC8CB49568C1A65831DC1F25B1A5B046DC7702B7D629A562A8A5F + 45831D36FB95D5B74D3DC4659F452CB469B6B304B3E8A5D4D6B8A3C7742DB46D + E5635A3C000B91AAE33659B22C8D691A6B7DAE3880EE85B68A26B06005E88B8D + 65B29BCB2C4B011115664F8F7358C2F7B835AD19249C00170FF10750DC78DBC6 + 836E8A49069AB54858D8B9800581C3271BF78F8F5F0F01B761711E4745C3CD49 + 23490E65A6A9C08F022272E4CF462860FE9BB856085C2A24A9773C9BEFD31FDC + FCD6E68B4DD6B167B1252E58B4BB96DD34349434105BEDF4F1D3D340C0D6318D + C63F9FCDD4278FF25C62E15D5FD94D7BA5738097906486EFEEF30DFA79A9BAFA + 447244F8668DB244F1CAF6B86411E217A7B6AE7ADC23B15147F036E1A759A520 + A1B54F18B838735635FDD95CFF00D40F0C7C76254F6FDA5A0D51649ED95ACE68 + E5196BB192C70E8E1EFF00DCAD06B1E09586E550EAFD3F5525AEA8EFCAD3DD2E + C0F7E46E3DFD7F25168E2E32E85A80CA3A975E29410035E3B5C81BE002323F2C + 2B21C45D54AAACAF1EDB6E8A9D7BE519757C38E2550583EC9B3EA9653D3B090D + 8DCF706B987AB5DB1DBC7183BFC495FBD1DC2CA6B5C0D9F50BDB7ABA170719A5 + 0E7363181DC1CC4F300EE63920673B8D82DADBB8F8CA69FD4B5AE959EDD20716 + BE5A7CE1BEEE577FF5056B6959AC5AB2DCCB9D8EB22ABA7775E5FBCC3E4E1E07 + F8163457E92BCC94567EFF00FE1294ECE5E4CEC466D96C7E5AC6461AD6EC0018 + 002B1348DB64639A4B4AD95AB4EB0107942A538FD57AC2F9A8868BD395CCB6D0 + B599A97364E52F1CE5A4B8F5236CE3FBAAF5FC515CB9224615E0B535AF1CF87D + A222753D45D05CABDBB0A6A221FBE3C5DF77DC71923C956B3FA4FEADBA569669 + 8D001D086E40A8ED247786F9696F9F928BF0E3845A728266D7DC6A9978AE690E + 7733B201EE9E87AEE0FECAD86434F0B58C8696289AC686B406F40061726BE1AE + CF8A5B7F92F4F0431FE917C4FA681D5759C3FA56D2C7FF0048E6C330207C4BB0 + AD1E18F1DF48EB2D3B5B729E6169A9B7C4E9AB29677E5CD6346EE6F4E6F2C633 + 920788CE963735BB18A32D3D47200B9E78E1C30ABAAD614751A5A99F0415F206 + CCC8F66824FC3001FD0F41B08EAB41D38F325930996DD57A5356CF2D6D458F45 + C95B6DA790B44E5EECE33804E06012AABD73AD2F7C71E2458FD62C335B6D546C + 6B5D0993981209739F93E277F0E800DFC6E2D17A42874B695A6B2454ED908687 + 4E4B73CCF2064FD3E9E6B730410D333922A66443DC0856D5C2F2949EC32208A3 + A7A68A9A26B591C4C0D6B5A0003E4AA8F4A1ADB845A362B75BE09257543B2FE4 + 3E1EF1F123FDDF95B3D4AF57C0EA987926839E21ED0385D3BEAEA54E09E0C1CE + 7C33BE6A28349D352DBF46554B4F4ACC49282EDCF524E198F1FC86161EABBE5D + 78817FB7696A4B6D4D052B27E5A97B9C40712E03BC3C31E5BF8ABDA0AAAEB952 + D65BF4F4115352B5DC9255F2820F9866DB9C11BE7F3DDAE59F63B5515A28994F + 4D4F1B5D8EFBF182E3E24E31FCF21802AEAEA6E874B9FE1EDD88A8453C9E1A6B + 4B69ED3143152DA6DD131E1839E52DCB9C76EA7F21B745A7E3456D75BB8755B5 + 1471BDF2CA3B36F201B673E7EE0E52D2BF4F1DA533D92B43E103243BA2B654A5 + 5B847624730703F5ADCB4B52BAD8DD3353555D5951CEE943F1CDD035B800F424 + FCD75D70EAFD535D047EB9492D1CE581CE8A46905BF3EBF1542F1138ADA7ED05 + D6BD33430D75D5DDC6C8C6F308DD9C7E7FDBA75DC298F046A2FD4F696D56A294 + BABAA1DCE5AEFBCD6E1A003E5D3A2D6A612BAB752F894577C109622F2751222F + CBE4646DE67BB017962E3F48B5D3DE2922760BBEAB18EA4B7838E6FAAB969ED9 + 76883748A35FD5B49CB9C373E5941AB68F7E6E51F9AB3F057FE931924A8A3035 + 851970043467DEB369750534CEDB18F71589692E8EEE264DD2E3BD73FF00BF7A + CFFBE3BF55D7F04F1CCD0E63815C73C44AA8A978ED586538FF009638FF007546 + 31DC16A0E8BEAF8D707343DBF75C3217D5ECE89295716BC1066AB55DADB78B15 + 451B865C5A4B42E69B7D556F0F35D0A8735FEAAE7FF88D1D30BAAFE1D5447596 + 85B5EA263DEF6B5931F31B15CAD5D3651775EB59F26719582C1E176BFD317AA0 + 64D4F71858EC0E66B9D82148B56716347E9BA291F35CE19656B768D87249C2E4 + 9A8E0DDF69EADCEB6D5490C79DB95CB7167E0E5754BDAFB9D5BE423A873B2B9F + 7DB0B9F361E48F2C9763F3C53E2D6A2E2255BED5696490D0176006E72E1EF5BC + E14F0F63A085B5F708F9A43BF786E4FF003F9E730D31A0EC9A7E212BDB19737C + 4EC179EAED7965B2D3B9914AC748D1B01D02A1249FF5365E0CC618DFDCDF55CF + 4F470992691B146D1FCC2AAB88BC49823864A0B61E671DB2D3B950DD47AC6FDA + AAA4C144D93B3271DDCF45B8D29A123672D55CC99A6777837A80B6E11D4EBE4A + AAA3B78F65F5332928F723BA6749D4EA4A9170BA97F645DCC01FC5FCFE7BAEFD + 2B678E9E28A9A08F96360000017E6CB680D6B638A3E568E800561E97B2105AE7 + 37E8BD4534D5C2E86B3993EEFF00E91AEDB9B375A4AD9C8D692D53BA58831802 + C1B55188631B2F6AEB8C148DC170242F25AABA5A8B363622B08CF4515ABD5914 + 0E20B9BEE0B106B667577200A31E1FA892CA88E644D57E1EC0E1D1438EB461C9 + 6F272A7F5AC6EC72729595C3B51FA4CE51269E8637F568585259E271FB8169BF + AD63C632DE64FEB4881C3F932AE8E93571EC8C6C6D7EC58BD90BF4DB3440FDD0 + B4FF00D6918C1772617D3ACE33BB7930A7F87D6781B12086D9133F0859B15331 + 9D00512FEB58CE393953FAD63C632DE6554B45AA9774676266000BEA858D6B18 + 38796E53FAD58305DC9855FA76A3F48CA2688A1675A30E4B79309FD6B1BB1C9C + A53D3B51FA465134450BFEB58F18CB79906B58C1C3CB729E9DA8FD23289A2285 + FF005AB060BB930875A30E4B79309E9DA8FD2328999683E0BE18DA7C1437FAD6 + 37639394A0D6B18D9C5B94F4ED47E91944C0C2D3E017CEC19E414406B560C177 + 260A1D68CDC8E5C2CFA7EA7C0CA25FD833C82760CF20A2275A4648E5E55F3FAD + 63E5D8B7993D3F53E06513011347805FB0C03C14346B58C121C5B95F06B560C1 + 77260A7A76A7C0CA2698450B3AD19B91CB84FEB58C6E4B70563D3B51FA465134 + 45087EB8881382CC2CBA4D5D14E400E6FBC2C4B876A22B2E23392588B0286E70 + 550D9C0159E0AD4945C5E199C1AFD4D6E177D3B72B4993B315B492D397E33CBC + EC2DCE3F35C59A72F573E096A5AFD21AC2DCE36E9657490D4C6DC820F4734F8B + 4E3FF42083DC4EDC286710F49D9353D01A6BD5AE9EBA319E5ED1BDE6FC1C371D + 3C0ADAD1D8E32C6704595258356699BFB79AD776A7909CE185DDE3F91DFE9FAA + DCB007E4C6E6C807B272AB0D65C04B2C75124D60ADADB53C92435A79D83DC06C + 47D54363B2F16B45B8BED95E2ED4CC04F661DCC40CF40D70EBF00BD2C5EA1473 + CBCCBE5FE887323A057DC9F71F7119550687E34C75976FB235750BAD95592D0E + 2D20647810727CFF00992ADE05AE01CD3969E854EABA36F6EE48D6DFF4FD9350 + 537AB5DADF0CCC3E25BB8E9D3CBA0E9854E69B8AA384BC70B75AADF702FB4DD6 + 5644E85CED8073B9707C320EE3F4E82F50325730F1F221ABB8AF4364B2C9CD53 + 90C7B8386C493E39F78F25A7AE50AF1625BE7EE3B977F137D2329AD45D62D0B0 + 32EB767F74D481CD1C44F8B47471F79DBE39507D1FA4356D6DCEB3596BEBDCF4 + F1CCC7CB3B448438823241C741B9DBDD8C29CF0F786B60D156F81CD89B57752C + 065A870CEE46E07BBDFD7AF4CE0413D26F51D532928B4D5BA77B66AB781235B9 + E9FB75F905AD2D372C7A935F4416C45EBE3D57DADC754E83AB70B553CC41A6E7 + 3CCE6B4E798B49208F3DCF53E0ACDE0AF107FAD2D6EA7AB608EE34DDD95BB77B + DF8FE7D703DB42D8E3D37A5A92D11E0CC1A1D50F1F8A43D7F21D3F2CF8AAFB43 + 38E94E3DDCAD1451B04155DF2D1D181C03F037F761742CD1CB4718599EFB35F5 + 2119F33C17FAAF78F1A8AE9A6F4AC35D6A21B3F3F287100E321E3F556191DE23 + DF854CFA505E0368ED7A721C3E6A8943DCDC1C81B81FDDDF2F9E756FFA4D7926 + 416F9AE789F6A8ADD555D3C4197120C382C25C0E0E700646C4755D29A7E5AC97 + 4D5BDF71DEADD10748797072464823DD9C7E4B9E6AA0378E2CD834E8676F4F6B + 8626CCD0720900171F96DF92E937E072B40C06B4058854ABD44E316DA585BF9F + 73116DACB31EE1570DBED7575F507FC38222F3F90C9FA02B9FADDAC3897AB28E + BFECB96165B7B57479CB1AE780065A36CEF9F86F83E4A7DE91B7DFB27411A189 + E04F5CF0C03C71D76FA7CFE5AFE18D9BECBD216EA42D02474625936C65CEDF7F + 7E303F257E9F4CB59A89426DF2C56F8F2C8CE7CAB62233717F5AE9534768AAB2 + 085921E588398E6F3EFB9DDDBF5F9939DC92AFCB256D657D9292AAE14E20A991 + 81CF60CEDF3DD50D2DB5BADB8EB1DBCE5D476901AFC03D5BD41C7F98E33EF0BA + 10B5B181134F7583942D7AABE4BE718C9B8AD9124DB5B9857FBA4564B2D55D66 + 00B69D85D82719C0CE33F4FCD50572E20F1135F50CD058E87D56DF2BCC2F959B + 646D91924E36FA1DF6534F499BE3ADFA3A2B4C0E226AE786E0788D89FEEDFE75 + FD70EECA2D3A56DF4019CAF1107C9B60F33B739F78CE3F25B1A7D37E36F9424D + A8C56F8F764672E55B1AAE1E70FEDFA700AA900ABB9BF792A1C33CA4F5E5CFF7 + EBF056A582925748DC02BD6C76674E5A795585A7F4F88C34967D16F6AB574692 + AE956B0915462E4F2C9F4F511C70F3B89C1240C0F1DFE5D142F525FCB39807E0 + 0F7AD8DEEA9D1D047E2E2D76F8E8398FEC3E4AABD5D5EF0D90825795E17A2575 + B867674DA673839B3CEF9AA64ED0B1B21EBE6B551DEEA24C9121DFDEA155758E + 92AB049EAA47658BB568C6F95EF2CD253A5AD651CDB25993489076F30FC4578D + 4D5CFB9E62B3BB0C8F05E52D217646CB9B1BA19DD11C334D35CE78F04BCECB3E + C9A9646CA1AE90E33E6B4F7D8844082A2F4B54F655E1A4F55D4A74F4EAEB7844 + AB9624933A2F4C5F8BB97BF90573FF00A54D92A2DBAD21D4948C3D855012730F + 07788561E91AB7F24649533D4561B7EB0D292DA2E630D2331498C98DD8EABC17 + 17D22A6CD8EAEA74AE30534543C34D5B4977B3C50D44ED64EC18193F45351B8C + F8798547EAAE14EB1D277174D6C63EA698B8F24B01C83D7AFC9675B2F5AE68E9 + 442E827C8EA0C44AD5D2EBECD32E56B28E6ECCB8B217DC1F22AA5FEA4D6BFF00 + EC4DFF0082562DD2F1AEEB21C46D981E9B3085B72E30DAC460305B15B74B7D03 + 4BAA6AE28F1E1CD92A217DE29DA2803A3A43DB49D36DD57834A6A7BA481F71A9 + 7C6C71FC6EC7D16FAD1A06DB4D875417D4BFCBA051855C435BF922F1F65F722E + 71891FBBEB6D4DA8AACC342D95AC71C000158B41A12EB72ABED6ED3BF9739209 + 56B5B2C5053ED4B4AC8874EE8521B7D8E4908EE15D3D3700AEAF8B533CFC97FB + 2A95ADF621DA6F4C52DB2010D34237EA48DCA995A6C8F908EE7D14A6CFA68EC4 + B14C6D5626440658B72EE254E961D3A5617C88A837BB349A634A3A66978E46F2 + 633CD9DF3FFA29AD05A5B4CD03B871E4B2E829DB4EC21A319C2C95E5355AEB2E + 93CBD8D88C5235B77AA3454C4B43738F3FF82AC352DF6A017BB2CC7FAC7F6539 + D6AF7358403E0A98D5933C736FE2BB7C0F4B1B30D909B663CD75AA9E72799A7F + 32BF4C9AA5F8DC7CD6A6DCEE69467C548228DA1A17A4BECAEA972244229B3E35 + F3E3191F35F43E669EBF5598C8416E72BF4200B53AEBC13C185CD2F5FD50BA57 + 6F9FAACD108CA7623CD3AEBC0C185CF2918CFD539E61B67EAB34C03CD3B0184E + BAF0306107CAD3B1FAA734BD7F559A200821194EBAF03061174AEDF3F54E7948 + C67EAB37B11E68601E69D75E060C2E7986D9FAA07CAD3B1FAACDEC06104013AE + BC0C185CD275C942E91DB92566884653B11E69D75E060C2E794ED929CF28DB25 + 6698079A760309D75E060C2E695A762539A4EB92B34401042329D75E060C2E69 + 481B94E7970464ACDEC02180275D781830B9E507A94E69078959BD80C2080275 + D7818308BA5CE72539A5206E566884653B009D75E060C2E7970464AF39E49797 + 193B2D89802FC3E9C1F15957ACF61823F51533301EF15E5477D961A800C87E6B + 3AF50362889CE541ABA5736AFBB90BABA3E96AB31C114DC5976697BFB9E1879C + AB161BFD0D2DA64AFB955C34B4D0379A49A5786B5A3DE4FBF654068DA8930DC9 + 502E3A576A2D5FC40B7E80A5AC920B606B2491B19C6496E4B8EE3240240F774E + A73E4B8D68210B363B16D2950AC279C4CF49E74D5B25838616C75CAB0BBB315D + 247919CE32C67CB05DFEEAAE68743F11F58D4CB7ED61A86A9B3C8DE66C45F976 + 3621BEE1B9DBC3C958FA0342D9745D188A8A9D8FAA2D02599C325C7C7EBFD87C + 54A83DC1E1D9DC745469B8772ACC9E3E9FECE636555E8EFAAAE149A86E5C3CD4 + F525D2C25CEA2ED483820F79A0FBF73D71907C49CDD53D9A29892D68551716F8 + 6B26A4AD8B5269EAB3437BA7C1E60E239F036DFC0EC3FE18C98E4F171EABA923 + B4CF79F5780F71D346E635F8E992E6F78FD5590B6DA33179CFF241C326A3D28A + 6B1BEF76BB1DB190D4DEE29F334B16EE8803F7091D4F5241E9F995766908AA21 + D2D6DA7A96E268E06B5E3DE1A07E8A0BC32E0F52E9BB89BCDF2A85757750F7F4 + 69F31E24F4F0DBE4462715F8BB4B6893EC6D2405C2E0FCC6E73073358771B79F + F6F8E76CAB5C66EEB7BBD92F7249616092F14F88162D29A62A8FAE325BA3D85B + 0C2C20B9A48EA7DDBFE7F322A9F45DA16DFB515CF555CA57C9581C793989277E + 6DF39F77D578E91E1CD656D44BA875817D4D64B99194AF25D82771CC0FF6F9F8 + 852AF45FACA436AB95B62A5647341377A4C6E46361D3FCA7E696E96EEAD765FB + 279C230A69E522E7712E2493925511E90623B5F1334EDEEA6077A9325617C9CB + 91B3C93F423E6AF65A4D77A62D9ABF4ECB6BB8C40BF1FE0C807798EF31FB78FC + 88DABE12714E3DD3CFD8C9ADA3B850416C92EF53551368638BB574DCC0B4B7C3 + 1E79F0F3CAAC78181DAAB8977AD5B514E4C2E91C627737DCC9D80DF718C8FE05 + 8D4BC13D5F255B2C153A865164E7E72D123B946F8E980338FF00D5581357693E + 0F69436CF590F9F9399918765D23B0067C71BFF6F12306AD5EB25A9946538F2C + 63BBCF923087293ABFDDADFA76CD3DE2ED3B608626E5B93BB8F801E676FEFE00 + 91CE9A5CD56B4D6D5BAEEF43928288974208D8F28C8C7C00CFCB3D57E68E2D5B + C58B8B6B6FB2CB496185E4B1A0603867EEB4789E9BEF8C0CE7002967131F4FA6 + B86F3D2504429D9206D2C0D66D8E6EBF300E4FBD6D6969767FF55AB108EE979F + 9919CBFE28F1F46EA465DF53DF754D4806574843011E649C8F963F3F9DE4D05C + F03C49509E08D81B61E1DD1348C4D523B67EFED60FF6E5FE6C26B33D94B4B2D5 + D43C450C6C739CF71C01804E56BE9B2ABE79777B9614371ADCDD47C5CB3E9F61 + 73A18087CCCCED8FBC48DFD9C7C9587515715A6CB5B7497943296074801E8481 + B0FCCE02ABF45BE3BF717EFB7A8A6754D3401CC82539F17728EBFE552EE344CE + A4E18D4B1A79455D4454E4FB892EFF00FCADED0CBA5A29DDEF26DFD8A67BCF07 + 87A30DB79E82EBA9E73CF3D5CC435C739C753F3CB7E47F3B81B82E1CC7033B95 + 17E1559E9ECBA02D705396BBB585B239C0632480EFD71F9293F83879B48FA2D2 + D2C5C6A4DF77B971CF9C4A7FF55F1BA86D61EC9A928F0F900DC600E620FBF721 + 5BF62A6ED6668C78AA775C691D53A47585C359D04D18A495C79B9803DD73C777 + 71D771D3E6AE8E18560BBDAA86E2E8C46678C3CB41CE0ADAE1B74614D91ED2CE + 5FFD14D89B922D4D276C688DA4B54DA9699B1B4602D469C8DAD81B81E0A40DE8 + BC9EBAF94EC792F8AC221BAA98E8E9E28F3D187FFE4E5566A481D2B5E15C3AB6 + 2E795A31FF0057FA955E5E285DCE7BAAFE15C415373523D5F0C8C254F2BF729D + ABA27B2AB2478A915925308046D85BAAFB336577306E0AC68AD32B3380BDE59A + DA3575AE67D8E4EAB845B09B70DD1B3F58763AAF09AADEDCF79650A094F50BCE + 6B648ECE173A2E8CEECD6F4EBFC11BBC48E9812772568E8EDEF92AB3CA7AA9AB + ECCE760159545686C4721992B7A3C468D2D6D459BDA4E0D394D4ACEC7EF4ED31 + 8831BE4AC7B1B4FAB869F1518B4503B981E5535B4405A00C2F03C5B882D45988 + 9D6D728461CABD8FCDCAD8E969439990483B8D943AE941726121953301F156BC + 5007533410B0EA6D91C9D5A15BA3E23D2494964F1F641393C14DCB4D7704FF00 + CA66F9AC492D55B2B8BA4925713D72E2AE27D8E227EE05F8FB062F607C975E3C + 6E11EC914BA8A861D3D213F70FC96D6874CBC91962B3E3B2443F005990DB2267 + E10ABB78F49AD8CAA882DBB4C018CB3E8A496FB1471E3B8148A3A6637C02F66B + 00F05C8BF895967B96282460D35047181DD0B3591B5A3A2FDA2E7CA6E5DC99F0 + 1EF91EE1FAAFABE01DF27DC3F55F5458343AAE93B680BC0CECAA0D536C710F3C + AAF9A889B2C658E19054375058F98B8866415DBE15C43F0EF0CB2B8466F0CA3E + 081D149823185B48253800A935C74EF2C85CD6AD7BACAE1D3AAF512D6E9EEF89 + 97AE1D37F94C46CE718CAFA673E6B2FECC201CE72BE0B6BBF12ABAB47925E997 + F8317B738EA9DB9F3595F66BB3EE436D767BA764EAD1E47A5DFE0C5139F34EDC + E7AACA36D38D8EEBEFD9A7072774EAD1E47A5DFE0C4339F34EDCE3AACA6DB5DF + 893ECD767DC9D5A3C8F4BBFC18BDB9F34139F35946DAECF74EC86DA71B1DD3AB + 4791E977F8317B739EA8673E6B2FECD38393BAF8DB6BBF127568F23D2EFF0006 + 2F6E71D53B73E6B2BECD767DC86DAECF74EC9D5A3C8F4BBFC18A273E69DB9CF5 + 5946DA71B1DD7DFB34E0E4EE9D5A3C8F4BBFC188673E69DB9F3594DB6BBF127D + 9AECFB93AB4791E977F8317B73E69DB9F35946DAEDB09F66BB1D774EAD1E47A5 + DFE0C5EDCE7AA76E7CD658B69F15F05B5DE29D5A3C8F4BBFC18BDB9F34EDCF9A + CAFB35D9F721B6BB6C27568F23D2EFF062F6E7CD794D3B87E22B3FECD763AEEB + E3ED65C005956E9FC8F4BBC8DDC66748C20925479F42F9AA73CB953B92CDD73B + AF4A6B3318E079375B95F12D3E9E2DC4DAD3F059CA49CD981A7284C0C6E46E55 + 67C74A6BEE92D776ED7D4103A6A2735B1CC43721843705A7E237F0F1C7457B5B + 6DCEE71DD5BEA9B2D25C6D72DBEBA963A9A699BCB24523721C3F9F25E4788F15 + 8DF6E11D5E214D7D055C7D8ACB476B7D3DAAE863A9A1B844D9DFF7A17B807E7C + 76C9FE7E78DE3AAA91B27666AE1E6CE3193FB2826ADF47FD3ECAB92AEC9595D6 + C73893CAD3CEC1EE0363F32543AAB837511C849D4F5C4F9F623FFA974F4DF89B + 629C527FBE0F2136A2F0CB86BAFB64B7547635B75A6A77E39807481B91F990A1 + 3A9F8DBA56D4D7C3452CD72A81F75ACCE339E993D3E47F68847C1EA19250FB8D + D6E35447B2433F7525B070FB4FDA0B5D496988CA3FEB251CEEF8EFB03F05B6B4 + 3ABB3F349457DD95BB57B1019EE7C4CE244BCAC2EB3DA1FD5C72C691B7E6EDDB + EFC1F2537D13A0ACBA65A258233577077DFAB9477BFD91E1FDFDEA6D4B6B99E4 + 0E52A4569D3B23DC0B987E4B62AD3E9747F1B7CD2F2CADCA5223F6FB5C93B877 + 4AA66D927FA29E34D6535C98E86D55C4BA393079435DBB4E7C7C01EBE3E2BAEE + CBA79AC00967D16B78A3C30D3DADEC4286F14C79E3C98678F0248CFB8F97B972 + 3887118EA24A29F67B16423CA435B79B449036A62B8C0E85FBB5C1D907F31B2F + 49AE76AA6A61555572A78603F8DCFC0F99C05535EFD1DCD092CA7D5D5C2207BA + DF57E9FF009D6A19C1A0D708ABB5157D5400EEC0CE4CFE792B62A86AAD8E6315 + F732E7146DF891C68A4A7CDAB46C6EAFAD7F74C81A4B4123C3DF93F4F1517D23 + C3DB8DF6E2DD41AF6796A25243A3A5738E7DDCC7C063031D7E1853FD2FA1ECD6 + 103ECEB7B5B2F4333FBCF3F9F87E58531B75A2595C32D2B769E1B083EAEA65CC + FC7B22B958DEC8C1A2A20591C1044D8E2600D6318DC35A07800A09C78B1CB555 + 7A6285CFECE196A1C5E4F41DE6004FCD5FBA7F4E9CB4B99F45BBD47A06C9A8ED + 4DA3BBD2F3B5A72D730E1CDF815A7C4F894250752ECCCC20D3C9426A2E2BE93D + 216EA7B7D1BCD7CF0C6D6B2288E71B37033BF81F7F4DD57D72BB711F89B1F2BF + 367B2C9D41CB03C6DF9BB71EFC1F257AD6706744D96B8D6D35A4D44CD1B7AC3B + B400F9E3183F9AF296D323E5C066DE030A1A2D34350B9AE97C3E16C4A736BB10 + 8D01A4A874D5B9B4342D2E738E6595C3BD23BF6F72F1F490A5745C268A4C118B + 94393FEC48AD8B269E7B9CD258A497ED056CD51A5E7B25DA12E825196B87563B + 070E1F32B67896B6A8D5D286CB182108BCE5957F0E6BE899A0AD92CB5F0F2B29 + DBCC79BEE80D19F960FC969F5C71774B69B67654B38B8D5F8321208F0F1E9E27 + CFA2F0BC7A35D35BE27320D5D5DD9784629B007FE758166E13E9CB0CBDA0A575 + 7D40FF00ADA9EF6FEE6F4F9E569E96BBF511518B49792D94D22095376E217139 + ED8A661B6D90B813CD96B5C36FCDDBB7DF83E4AF4E1E5232D141496F85CE7470 + 303039DD4AC7A2B548E2006607C14C34E59240F692D2BA6F4FA7D1D52C3CC9F7 + 6CA79A52658DA6652E85AA4ACFBAB4561A430C4D042DEB0602F0FAB69D8F06CC + 7B1ADBC41DABC1C7E1C28DD75B79F396A99CAC0F58D252B5DE0B4250CBC9D2D3 + 6ADD4B057F359B27207D178FD8BEE3F253F750B0F805F9F506FB2A71B6F8F693 + 3A2B8A79219F63FF0094A7D8FF00E52A67EAAFF61BF25F5B48EC8CB5B8F828F3 + DBFA998F51642BEC51EC2F586CCD073CAA69EA4DF657E9B46D1E08DD8FBC9907 + C5191DA2B6F2E3BAB79474DC98D965B29C0F05EEC600B11860D1BF56EC3EC630 + C017E9115A681F303C9303C97D440303C91110044440111100444400AF19A30F + 6E08057B214329E0D255DBE2767FC31BAD4545A599DA3014B9CC07C1793A069F + 0FA28BE6F666ED5AB70214FB38CFDC5F8366FF00229A9A569FC3F45F3D51BECF + D14313F26DAE26C85FD8C3D84FB187B0A69EA8DF67E89EA8DF67E89CB2F267D5 + 2442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F91EA72217F630F613E + C61EC29A7AA37D9FA27AA37D9FA272CFC8F54910BFB187B09F630F614D3D51BE + CFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89EA8DF67E8 + 9CB3F23D52442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59791EA92217 + F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187B09F637F9 + 14D3D51BECFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89 + EA8DF67E89CB3F23D4E442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F + 91EA92217F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187 + B09F637F914D3D51BECFD17DF541ECA72CFC8F54910AFB187B0BF4CB3341FB8A + 67EA83D94148D1F8563965E43E2922374B6CE523BAB6B4F44037185B36D381E0 + BD5B181E0B31860D4BB592B0D05C2D2C9987BA146EBB4C35EE2431588580F55F + 974119EA174E8D7594AC2673E4B98ABCE9419FB9F45ED0695008CB3E8AC8F558 + 7C97D14F10E816D3E316B5DC874D10CA1D371B08258B7D45698A203BA16DC46D + 1D02FD0002D3B75B659DD925148F18606B06C12A220F69185EE8B5799E724889 + DE6CAD9F3DD519A8D2C0BC9E4FA2B3DD1B5DD42FC1A688F50BA34713B2A584C8 + 38265694FA54070CB3E8B7B6DD3D1C6465814B853443A05FB6C6D1D02CDBC52D + B163214123068A82389A30D0B31D10E5C617A81845CE959293CB27834373B636 + 7CE5B95AB8F4F47CF9E41F25312D057CECDAB661ACB20B099171469A86D31C40 + 7742D9B606B5B8017B8002FAA89DD29BCB32960D05E2DC276918CA8AD4E990F9 + 09E4FA2B1DCC6BBA85F834F1792DBA35F652B088B82641A834D318412C0A4741 + 6A8E103BA16DDB0B1BD02FD800285DAEB2DEECCA8A479C31060C00BD51169B79 + 24130111601F303C97DC0F24440303C826079044401111004444011110044440 + 1111004444011110044440111100444401111004444011110044440111100444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111004444011110044440111101FFD9} + Stretch = True + end + object Image2: TImage + Left = 64 + Top = 64 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 055449636F6E0000010004001010100000000000280100004600000010100000 + 00000000680500006E0100002020100000000000E8020000D606000020200000 + 00000000A8080000BE0900002800000010000000200000000100040000000000 + C000000000000000000000001000000000000000000000000000800000800000 + 00808000800000008000800080800000C0C0C000808080000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000 + 011111000000000009BB11000000000019B1B110001110001919B110091BB110 + 99BBB110011B9B1009911100091B9B1000119000099BB1100000000009911990 + 00000A00009009000AA00A000000000000000000000000000000000000000A00 + A0000000000AA000000000000000000000000000FFC7FFFFFF83FFFFFF01FFFF + FF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF81C3FFFF8189FFFF + FF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF280000001000000020000000 + 0100080000000000400100000000000000000000000100000000000000A8FF00 + 00FF00000000FF000000B00000004F0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FFFFFF00FEFEFEFE + FEFEFEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFE0404040404FEFEFEFEFEFE + FEFEFEFE05020000000405FEFEFEFEFEFEFEFEFE04020004000404FEFEFE0303 + 0305FEFE04020402000404FEFE020300000303FE02020000000404FE05030300 + 0200030505020202040405FE0502030002000305FE0504040205FEFE05020200 + 00030305FEFEFEFEFEFEFEFEFE020202030202FEFEFE05050501FEFEFE050205 + 050205FEFE010105FE0105FEFEFEFEFEFEFEFEFEFE0505FEFEFEFEFEFEFEFEFE + FE05FE0505FEFEFEFEFEFEFEFEFEFEFE0501050501FEFE05FEFEFEFEFEFEFE01 + 0105FEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0505FEFEFFC7FFFF + FF83FFFFFF01FFFFFF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF + 81C3FFFF8189FFFFFF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF28000000 + 2000000040000000010004000000000080020000000000000000000010000000 + 0000000000000000000080000080000000808000800000008000800080800000 + C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000 + FFFFFF0000000000000000000000000000000000000000000000000000000111 + 11000000000000000000000000011111111100000000000000000000001191BB + 11111000000000000000000000991B11B111100000000000000000000919B911 + 1B11110000000000000000000199B1911B111100000000000000000009919B91 + 9B1111000000011111100000019991991B111100000011BBBB11100009919191 + 9B111100000991B11BB11100099999199B911100000119B111B1110000999BBB + BB911000009191B9191B11100099B9999B911000009999B9119B111000099911 + 99190000001991B9191B11100000010119000000009999B991BB919000000000 + 00000000009999B19BB11110000000000000000000999BBBB911911000000000 + 00000000000999B9919999000000000000AA000000099999099111000000AAA0 + 00AAA0000000999090199000000AAAA0000AA000000000000000000000AAAA00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000A0000000000000000000000000000000AA000000 + 000000000000000000AA00000A0000000000000000000000AAAA000000000000 + 000000000000000AAAA000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003FFFF0001FFFF0001 + FC1F0001F0070001E0030001C0010001C0018003800080038000C0078000E00F + 8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3F14781E3FF7FC1FF + FF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01FFE1FFE0FFFFFFF0F + FFFFFF8F28000000200000004000000001000800000000008004000000000000 + 0000000000010000000000000000000000008000008000000080800080000000 + 8000800080800000C0C0C000C0DCC000F0CAA600D4F0FF00B1E2FF008ED4FF00 + 6BC6FF0048B8FF0025AAFF0000AAFF000092DC00007AB90000629600004A7300 + 00325000D4E3FF00B1C7FF008EABFF006B8FFF004873FF002557FF000055FF00 + 0049DC00003DB900003196000025730000195000D4D4FF00B1B1FF008E8EFF00 + 6B6BFF004848FF002525FF000000FF000000DC000000B9000000960000007300 + 00005000E3D4FF00C7B1FF00AB8EFF008F6BFF007348FF005725FF005500FF00 + 4900DC003D00B900310096002500730019005000F0D4FF00E2B1FF00D48EFF00 + C66BFF00B848FF00AA25FF00AA00FF009200DC007A00B900620096004A007300 + 32005000FFD4FF00FFB1FF00FF8EFF00FF6BFF00FF48FF00FF25FF00FF00FF00 + DC00DC00B900B900960096007300730050005000FFD4F000FFB1E200FF8ED400 + FF6BC600FF48B800FF25AA00FF00AA00DC009200B9007A009600620073004A00 + 50003200FFD4E300FFB1C700FF8EAB00FF6B8F00FF487300FF255700FF005500 + DC004900B9003D00960031007300250050001900FFD4D400FFB1B100FF8E8E00 + FF6B6B00FF484800FF252500FF000000DC000000B90000009600000073000000 + 50000000FFE3D400FFC7B100FFAB8E00FF8F6B00FF734800FF572500FF550000 + DC490000B93D0000963100007325000050190000FFF0D400FFE2B100FFD48E00 + FFC66B00FFB84800FFAA2500FFAA0000DC920000B97A000096620000734A0000 + 50320000FFFFD400FFFFB100FFFF8E00FFFF6B00FFFF4800FFFF2500FFFF0000 + DCDC0000B9B90000969600007373000050500000F0FFD400E2FFB100D4FF8E00 + C6FF6B00B8FF4800AAFF2500AAFF000092DC00007AB90000629600004A730000 + 32500000E3FFD400C7FFB100ABFF8E008FFF6B0073FF480057FF250055FF0000 + 49DC00003DB90000319600002573000019500000D4FFD400B1FFB1008EFF8E00 + 6BFF6B0048FF480025FF250000FF000000DC000000B900000096000000730000 + 00500000D4FFE300B1FFC7008EFFAB006BFF8F0048FF730025FF570000FF5500 + 00DC490000B93D00009631000073250000501900D4FFF000B1FFE2008EFFD400 + 6BFFC60048FFB80025FFAA0000FFAA0000DC920000B97A000096620000734A00 + 00503200D4FFFF00B1FFFF008EFFFF006BFFFF0048FFFF0025FFFF0000FFFF00 + 00DCDC0000B9B900009696000073730000505000F2F2F200E6E6E600DADADA00 + CECECE00C2C2C200B6B6B600AAAAAA009E9E9E0092929200868686007A7A7A00 + 6E6E6E0062626200565656004A4A4A003E3E3E0032323200262626001A1A1A00 + 0E0E0E00F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000 + FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 002A2D2A2D2A000000000000000000000000000000000000000000000000002D + 2A2D2A2D2A2D2A2D000000000000000000000000000000000000000000002D2A + 282ADADA2D2A2D2A2D0000000000000000000000000000000000000000002828 + 2ADA2A2DDA2D2A2D2A0000000000000000000000000000000000000000282D28 + DA282D2D2DDA2D2A2D2A000000000000000000000000000000000000002D2828 + DA2D282D2ADA2A2D2A2D0000000000000000000000000000000000000028282A + 28DA282A28DA2D2A2D2A000000000000002A2D2A2D2A2D0000000000002D2828 + 282D28282ADA2A2D2A2D0000000000002A2DDADADADA2A2D2A0000000028282A + 282A282A28DA2D2A2D2A000000000028282ADA2A2DDADA2A2D2A000000282828 + 28282A2828DA282D2A2D00000000002D2A28DA2D2A2DDA2D2A2D000000002828 + 28DADADADADA282A2D0000000000282A282ADA282D282DDA2D2A2D0000002828 + DA28282828DA282D2A000000000028282828DA282A2D28DA2A2D2A0000000028 + 28282D2D28282D280000000000002D28282ADA282D282DDA2D2A2D0000000000 + 002D002D2A28000000000000000028282828DA28282DDADA282D280000000000 + 000000000000000000000000000028282828DA2A28DADA2A2D2A2D0000000000 + 0000000000000000000000000000282828DADADADA282A2D282D2A0000000000 + 000000000000000000000000000000282828DA28282A28282828000000000000 + 000000000000B8B80000000000000028282828280028282D2A2D000000000000 + B8B8B8000000B8B8B8000000000000002828280028002D2828000000000000B8 + B8B8B800000000B8B8000000000000000000000000000000000000000000B8B8 + B8B8000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000B8000000 + 00000000000000000000000000000000000000000000000000000000B8B80000 + 00000000000000000000000000000000000000000000B8B80000000000B80000 + 0000000000000000000000000000000000000000B8B8B8B80000000000000000 + 00000000000000000000000000000000000000B8B8B8B8000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003 + FFFF0001FFFF0001FC1F0001F0070001E0030001C0010001C001800380008003 + 8000C0078000E00F8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3 + F14781E3FF7FC1FFFF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01F + FE1FFE0FFFFFFF0FFFFFFF8F} + end + object Label1: TLabel + Left = 99 + Top = 70 + Width = 211 + Height = 33 + Caption = 'Informática D.J.' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + end + object Label2: TLabel + Left = 67 + Top = 98 + Width = 228 + Height = 27 + Caption = 'w w w . i n f d j . c o m' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Timer1: TTimer + Interval = 3000 + OnTimer = Timer1Timer + Left = 320 + Top = 16 + end + object Empresas: TDatabase + DatabaseName = 'TpvWin' + DriverName = 'STANDARD' + Params.Strings = ( + 'PATH=DATOS\' + 'DEFAULT DRIVER=PARADOX' + 'ENABLE BCD=FALSE') + SessionName = 'Default' + end +end diff --git a/ListInit.h b/ListInit.h new file mode 100644 index 0000000..149859e --- /dev/null +++ b/ListInit.h @@ -0,0 +1,33 @@ +//--------------------------------------------------------------------------- + +#ifndef ListInitH +#define ListInitH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TAcercaDe : public TForm +{ +__published: // IDE-managed Components + TImage *Image1; + TImage *Image2; + TLabel *Label1; + TLabel *Label2; + TTimer *Timer1; + TDatabase *Empresas; + void __fastcall Timer1Timer(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TAcercaDe(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TAcercaDe *AcercaDe; +//--------------------------------------------------------------------------- +#endif diff --git a/Path.cfg b/Path.cfg new file mode 100644 index 0000000..327435f --- /dev/null +++ b/Path.cfg @@ -0,0 +1 @@ +datos\ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c9d4a3 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#TpvWin + + +*14/02/1999* + +ToDo: wwtcf? + + +![screenshot](/TpvWin.png "Screenshot") diff --git a/SAT.cpp b/SAT.cpp new file mode 100644 index 0000000..3ecc493 --- /dev/null +++ b/SAT.cpp @@ -0,0 +1,89 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "SAT.h" +#include "TPV_SATprint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TSATform *SATform; +//--------------------------------------------------------------------------- +__fastcall TSATform::TSATform(TComponent* Owner) + : TForm(Owner) +{ + TabSheet2->TabVisible = false; + TabSheet1->TabVisible = false; +} +//--------------------------------------------------------------------------- +void __fastcall TSATform::Button2Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TSATform::Button1Click(TObject *Sender) +{ + TabSheet1->TabVisible = true; + PageControl1->ActivePage = TabSheet1; +} +//--------------------------------------------------------------------------- + +void __fastcall TSATform::Button3Click(TObject *Sender) +{ + // Imprimimos el parte... + AnsiString SN = AnsiString( ((double)TDateTime::CurrentTime()) ); + TForm3 *Printing; + Printing = new TForm3(this); + Printing->QRLabel9->Caption= "Nº de Recogida: " + SN; + Printing->Fecha->Caption = DateToStr(Date()) + " - " + SN; + Printing->Nombre->Caption = "Nombre: " + Nombre->Text; + Printing->Dir1->Caption = "Dirección: " +Dir1->Text; + Printing->Dir2->Caption = Dir2->Text; + Printing->Telefono->Caption = "Teléfono: " + Tlf1->Text + " - " + Tlf2->Text; + Printing->email->Caption = "e-Mail: " + email->Text; + Printing->QRMemo1->Lines = Memo1->Lines; + + Printing->CPU->Caption = "CPU: " + ComboBox1->Text + " - " + CPUmhz->Text; + Printing->RAM->Caption = "RAM: " + ComboBox2->Text; + Printing->HD->Caption = "HD: " + ComboBox3->Text + " - " + ComboBox4->Text; + Printing->VIDEO->Caption = "Video: " + TVideo->Text + " (" + ComboBox5->Text + ")"; + + Printing->CD->Caption = (CheckBox1->Checked ? AnsiString("CD") : AnsiString(""))+ + (CheckBox3->Checked ? AnsiString(", CDRW") : AnsiString(""))+ + (CheckBox4->Checked ? AnsiString(", DVD") : AnsiString(""))+ + (CheckBox6->Checked ? AnsiString("+ Desc") : AnsiString("")); + Printing->TSonido->Caption = (CheckBox2->Checked ? AnsiString("Tarjeta de Sonido") : AnsiString("")); + Printing->TTV->Caption = (CheckBox5->Checked ? AnsiString("Tarjeta Sintonizadora") : AnsiString("")); + Printing->TRED->Caption = (CheckBox7->Checked ? AnsiString("Tarjeta de Red") : AnsiString("")); + + + Printing->QuickRep1->Print(); + delete Printing; + TabSheet2->TabVisible = true; + PageControl1->ActivePage = TabSheet2; +} +//--------------------------------------------------------------------------- + +void __fastcall TSATform::NombreKeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + Dir1->SetFocus(); +} +//--------------------------------------------------------------------------- + +void __fastcall TSATform::Dir1KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + Tlf1->SetFocus(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TSATform::Tlf1KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + email->SetFocus(); +} +//--------------------------------------------------------------------------- + diff --git a/SAT.dfm b/SAT.dfm new file mode 100644 index 0000000..c321945 --- /dev/null +++ b/SAT.dfm @@ -0,0 +1,1428 @@ +object SATform: TSATform + Left = 192 + Top = 114 + Width = 400 + Height = 368 + ActiveControl = Nombre + Caption = 'SAT: infdj.com' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 20 + object PageControl1: TPageControl + Left = 0 + Top = 0 + Width = 392 + Height = 341 + ActivePage = Inicio + Align = alClient + TabOrder = 0 + object Inicio: TTabSheet + Caption = 'Datos Cliente' + object Image1: TImage + Left = 0 + Top = 1 + Width = 100 + Height = 100 + AutoSize = True + Picture.Data = { + 07544269746D617066750000424D667500000000000036000000280000006400 + 0000640000000100180000000000307500000000000000000000000000000000 + 0000FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFBFBFBFDFDFEE2E2C2525035828178D4D5DDFEFDFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFDFCFCF8FAFAF6FAFAF6FAFAF8FCFBFAFCFCFBFCFC + FDFDFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFAFCFCFEEBEE5DC7C800 + AFB001A4A216ADAD43B4B66ECECE99CAC9A5E4E4DFF6F6FFFDFDFFFFFFFFFFFF + FFFFFFFFFFFFFFFDFEFDFAFCFAFBFAF8FAFBFAFCFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFDFCFCFDFCFCFDFCFCFDFCFCFDFCFC + FDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFBFCFCFDF8F9BAFFFF40FFFF2EF9F818EDEC00E1E000DCDD00CDCC00C1C1 + 00BBBE25BFBB4AC5C575D5D5A7DBDBC0EAEBE4F7F8F6FEFFFFFFFFFFFFFFFFFD + FCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFDFCFCFDFCFCFDFBFCFCFCFCFDFCFC + FCFCFCFCFCFCFCFCFCFCFBFCFCFCFCFDFCFCFDFCFCFDFDFCFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFCFFF8F8FFF8F8F7F8F9E2FCFB + D3FEFDBBFCFC9DFFFF97FEFE6BF7F633F0EF14E6E400DDDF00D2D100BEBA13AA + AA28A8A94DAEAD76DADACAFDFDFDFCFCFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFBFDFDFCFCFDFDFCFDFDFCFCFAFBFDFBFBFCFCFCFBFDFC + FDFEFFFDFEFFFEFEFEFDFBFBFBFAFBFCFBFAFDFCFCFDFEFEFDFCFFFDFDFEFCFB + FBFCFBFCFBFBFCFDFCFCFDFDFCFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFC + FBFBFCFBFCFDFCFDFCFFFCFCFFFAFCFFFBFCFFF8FBFFFAF9FFFCFCFFFFFFFFFF + FFEAF9F9B3FBF760FEFE05ECEF00E3E300CECD00B5B63EFDFDFEFCFCFAFDFDFC + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFDFDFCFCFCFCFBFC + FCFCFCFBFEFDFCF7F8FCE2E1F9BCBEF19A9BEB7E80E37170E36D6FE36E70E17D + 7BE59897EABABAF1DDDDF7F5F4FDFCFDFDFBFCFBFCFBFAFCFBFBFCFCFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCF9FBFBF8FBFBF7FAFBF5FE + FFFEFEFFFFF5F6F2E3E3C8DEDC86DBD82DEEEE00F8F802FBF823FBFB44FDFE74 + FAFCC7FCFDFDFCFCFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFCFDFDFCFCFBFBFCFBFBFDEEF1FAB9BCF56D6FE13130D30E0CCD0000C700 + 00C60000C70000C60000CC0000CC0000C80B0CCC2A2AD46261DDA8A8ECE4E2FC + FCFBFCFCFBFCFCFAFDFDFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFF + FFFFFFFFFFFFFFFFFFFFFFEBEEDCE1DF96DAD72AD4D400EBEC00F6F817F8F96A + F8F7BEFBF9E9FAFAFDFAFBFFFCFDFFFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFCFDFDFCFCFCFDFCFCFCFDFCFCFCFAFAFBF5F5FDBEBFF15657DC0F10CB00 + 00CA0000CD0001CA0201CC0302CA0303C70402CA0403CC0404CA0302CD0201CE + 0000CC0000CC0506CB3638D49292EAE3E3F9FDFCFCFAFBFCFCFCFCFCFDFCFCFD + FCFDFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FCFDFDFDFBFCFCFCFDFDF6E8E8C3DDDDC2DEDDA6C5C55CC9CA13DAD900F6FA05 + FBFC52F9FABBF9F9EFFBFCFFFBFCFFFCFCFEFDFCFCFCFCF9FCFCFAFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFDFCFCFCFAFCF9FAFBE5E7F980 + 7EE31413CE0000CD0002CD0404CD0302CB0100CA0000CA0000C90000C90000C9 + 0000C90000C90000C90100CA0201CA0403CC0402CF0000CB0000C8393AD3ABAC + EEF4F3FDFCFBFAFCFBFCFCFCFCFDFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFCF9FCFCFEF6F8B1E2E200CBCA00DADA00 + E6E700EFF000D8D926EFEFC6FDFFFFFFFFFFFFFFFFFAFDF7FAFBF6FAFAF9FCFC + FBFDFDFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFDFB + FBFBF9FAFAD5D5F95050DA0000C90002CD0405CB0100CA0101C60000CA0000CA + 0000CA0000CA0000CA0000CA0000CA0000CA0000CA0000CA0000CA0000C90000 + C90403C90403CE0000C90908CA6C70DFE3E2FCFBFCFAFBFBFAFCFCFDFCFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFDFBFCFBFBFCFCFB + FAFAE4F9FA6BFEFE35FDFD1AFCFB10FAFA00E3E200BFBD27C0BF62D2D2A3E7E6 + DEFCFAFFFFFFFFFFFFFFFFFFFFFCFCFAFBFBF9FDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFC + FDFDFDFDFDFCFDFDFBFBFDFBFAFCCDCEF63837D30000CB0506CE0201CB0000C9 + 0100C70100CB0000CA0000CA0000CA0000CA0000CA0000CA0000CA0000CA0000 + CA0000CA0000CA0000CA0000C90000C90100C80402CC0202CD0000C94040D4CC + CEF6FDFCFBFBFAFCFCFDFDFCFDFCFCFDFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFCFDFCFDFBFCFBFCFAFBFCFFFBFBFFFAFAF8F9FAE5F8F8D3F7F8B3FCFB + 6BF8F827E8E800D7D500C0C100C1BF3CC4C47DCFCFB0F0F1EAFEFDFFFFFFFFFC + FDFDFDFCFCFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFCFDFDFCFDFDFCFCFDFCFBFCF7FAFACECFF53634D40000CC + 0806D00000CA0100C80100C90000C90000C90000CA0000C90000C90000CA0000 + C90000C90000C90000C90000C90000C80000C90000CA0000CA0000C90000C800 + 00C80101C80505CB0000C82828CDC5C6F5FBFDFBFAFBFBFBFCFDFCFCFCFDFCFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFDFD + FEFDFDFFFDFDFFFDFDFFFCFCFFFBFAF5FCFCCFFFFFB1FFFF72F5F62CDCDB00B4 + B100ACAA1DB0B044C1C188F9F9F8FCFBFBFCFCFCFCFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFBFCFCF9FBFB + E5E4FB4543D70000CA0908D00000C90000C90000C80000C80000C90000C80000 + C80000C90000CA0000CA0000CA0000CB0000CB0000CA0000CA0000CA0000CA00 + 00C90000C90000C90000C80000C80000C90000C80405CB0000C92525CFCBCAF5 + FCFCFCFBFAFCFDFCFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFCFCF8FCFBF6FDFDFAFDFFFFFFFEFFF8 + F9FFE9E7CDEBE862FFFF0DFFFF00F6F500EEEF00C4C31EF1EFE9FDFDFDFCFBFB + FCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFCFBFAFBFCF7F8FD8588E40000CB0807D20000C90000C80100C80000 + C90000C90100CA0000C90000CA0000CF0000D10000D10000D30000D50000D700 + 00D40000D10000D10000D00000CE0000CC0000CB0000CA0000C90000C90000C9 + 0000C80404CD0000C83634D0DCDEFAFBFBFAFDFBFCFCFDFCFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFCFCFCFCF9FBFBF9FBFBFAFCFCF9FCFCFAFEFDFFFFFFFFFF + FFFFF9F9FAEEEFDCE4E48FD8D831DEDD00F1F200F7F904F8F62FF9F975FCFCBB + FFFFE5FBFCFBFCFCFBFBFCFDFCFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCFBFC + FCFCFCFDFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFBFCFBFCFCFBD2D4F62222D00102CE0202 + CC0100C80001C90202CB0000CF0000D60000DD0000E20100E60301E40100E700 + 00EF0100EF0100F30100F40100F20100EE0001EC0001E80000E20000DB0000D7 + 0000D10000CD0000CB0000CA0100C90000C90504CD0000C66061DDF0F2FCFAFA + FBFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFCFEFEFFFFFFFFFFFFFFFFFF + FFFFFFFFFFF6F7F4EAE8D1DEDE92D1D336D2D204ECEC00F8F609FCFC48F9FA94 + F7F9CAFBFAF5FBFCFFFAFBFFFCFEFFFEFEFCFAFCFBFCFCFDFDFDFDFDFDFDFDFD + FDFBFDFCFAFCFBFAFBFAFFFFFFFDFDFCFCFCFCFDFCFCFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFCFDFBFBFBF9F9 + FC7A7CE50000CA0306CE0000C80000CA0002CD0000D30000CF0504C20608BA08 + 08C20002D70000F70101FF0000FB0000FD0000FC0000FC0000FC0000FC0000FD + 0000FD0000FC0000F80100F50100EC0000E20000D70000CE0000CD0000C90000 + C90303CD0203C99F9FEBF7FBFCFCFCFBFCFCFDFDFDFDFDFDFDFDFDFCFDFDFDFB + FCEBE5E588C7C582D4D4A2DFDFACD4D467D2D222D4D400E7E500F7F700FAFB38 + FBFA93FBFAE0FAFBFFFBFCFFFBFCFFFBFCFDF8FAF6FBFAF7948C78B4AE9FFCFC + FCF7F7F5F9FAF9FAFAF9FAFAF9F7F9F8FAFAFAF0EEEB695E42D9D6CFFDFDFEFA + FBFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFCFCFCFCFDFBD8D9F92826D30000CB0102CE0000CE0101D40000D748 + 48CB8586AC8788948381877E7F847375823D3C7C0203C20000FF0000F90000FA + 0000FB0000FB0000FA0000FB0000FB0000FB0000FB0000FD0000FC0101F80100 + F20000E70000D80000D00000CD0302C90000CA2C2AD1DADAF9FCFCFBFCFCFCFD + FDFDFDFDFDFDFDFBFDFDFEF9F9D7EDEF01DCD900D3D300DBDC00ECEB00F8F818 + FDFD51FDFC9AF9FAD0FAFBFBFBFBFFFBFCFFFAFCFBFBFCF8FBFCF9FBFCFBF8F8 + F7FFFFFF807457A09785FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD + FFFD432F08CDCAC1FEFEFEFAFAF9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFCFDFDFD9B9CEA0202CB0404D300 + 00D00203DB0000E67A7BEBF5F8ECF5F3EAF4F3F2F8F9F5F2F4F2EFEFEDD2D3C4 + 5A5C630506B50102FF0000F80000FB0000FC0000FB0000FC0000FC0000FC0000 + FB0000FB0000FC0000FC0000FD0000FC0000F40000E10000D30000CD0403D200 + 00C97C7CE2F8F8FBF9FBFCFCFCFBFCFDFDFDFDFDFDFDFCFDFDFFF8F8C0FEFD67 + FFFF7EFFFF97FFFFBCFCFDEEFCFCFFFCFCFFFBFBFFFBFBFAFBFBF8FBFCFAFBFC + FBFDFCFBFCFBFCFAFCFAFCFCFC9E9484432D179A8F7BD2CFC975675383775D81 + 755A81755B81745A83755D7F70553B2400CFCCC4FEFEFEFAFAF9FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFBF3 + F3FD5D5BDD0000CD0606D60203DF0000F62524F2F4F7F9FBFCFDF8FAFEFFFFFF + F1F3F8F7F9FBFFFEFDFFFFFFD8D7CA47476F0000EC0102FC0000FB0000FC0000 + FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FB0000FB0000FD01 + 00F90201E60000D20302D00001CE201DD0CFD1F7FCFCFCFCFBFCFCFDFCFDFDFC + FDFCFDFBFCE9E9E952BCC036C3BF7ECECEB4E5E6E3F3F3F5F8F9FCFFFEFFFFFF + FFFFFFFFFFFFFFFDFEFDFBFCFAFAFBF8FBFBF8FAFAF9FDFDFC7F735B523E2DAD + A798C5C1B64D3E2460502E5E4C2C5E4C2C5E4D2B5F4C2C624D2E645235DBD9D2 + FDFEFEFAFBFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFCFCFDFCFEFCDBDAFA2828D10001D30305E80505FC0000FA7777F2 + FFFFFCFDFEFCFEFEF7C0C2E12422EC4243EBF2F3F7FBFCFBF2F6F68483890606 + CA0000FE0000FA0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00 + 00FC0000FC0000FC0000FA0000FB0100FD0202EA0000D30405D30000CA7A7CE4 + FAF9FCFBFBFCFCFCFDFDFDFBFDFDFDF9FADAF3F70DF1F200DEDE00CBCC00C3C2 + 00BBB919BDBC2CBAB94BCECD97DADBBCE8E8DBF3F5F7FCFCFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFEFFFFFBFCFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFCFDFCFCFDFBFCFDFBFBFCFDFEFEB4B2F0070ACA0C0BE9 + 0303FD0103FC0000F76263EFC6C5F7D6D6F7F6F7F57F7EDA0000FA0000F3CBCC + F2FEFEFEF5F7FAA09E961413B60000FE0000F90000FC0000FC0000FB0000FB00 + 00FB0000FC0000FC0000FC0000FC0000FC0000FC0000FB0000FB0000FA0000FE + 0200F10505D90202D32F2ED4E1E0F9FBFDFBFCFCFCFDFDFDFDFDFCFCFDFFF9FA + D3FCFA9CFFFE90FEFF69FFFF4FF9F82AF5F51AEBEB0DD8D600CCCB00C5C300C3 + C01AC1C13BBFBF66CCCB95D7D5AEE7E6D7F7F7F4FEFEFFFBFCFBFCFCFDFAFBFA + FBFBFBFAFAFAFAFAFAF9F9FAFAFAFAF5F6F6D2CFC7F0F1EEFCFCFCFCFBFCFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCFCFCFCFBFBFCFBFAFB + FDFDFC8A89E50707D91514F90000FC0000FB0000FC0000F80000F50A09F02222 + F12221F50203FB0101F1C3C3EFFEFEFEFAFAFEA1A2931314AD0000FE0101F900 + 00FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC + 0000FC0000FC0000FC0000FB0000FF0303EE0908D90D0BCFB7B7F0FDFDFEFCFC + FCFCFDFDFDFDFDFCFDFBFDFDFFFCFCFFFBFAFFFBFBFFFAFAFFFAFBF7FBFBF0FD + FDE8FFFFBFFFFE96FDFF7AFBFC54F7F539E1E20BC4C600B5B300AEAD09969822 + E1E1CBFDFDFDFBFBFBFCFCFCFBFBFBFFFFFFFFFFFFFEFFFFFFFFFFF1F2EE422E + 09CFCAC0FEFEFEF9FAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFCFCFCFD + FCFBFCFDFCFBFDFDFDFCFEFCFBFCFD6A6BE10A0ADE0F11F90000FA0000FB0000 + FC0301FA0102F90000FC0000F90000F80102FA0000F0C4C4F1FEFEFEFAFBFEA2 + A3931614AA0000FE0202FA0000FD0000FD0000FD0000FD0001FB0001FC0000FC + 0000FC0001FC0001FC0000FC0000FD0101FD0000FC0000FB0000FB0201FD0D0C + EA0303D09495E9FEFEFDFBFBFBFCFCFDFDFDFDFDFCFDFDFCFBFCFDF9FBFCF8FB + FCF9FBFCFAFBFCFCFCFBFCFAFBFFFCFDFFFFFFFFFAFAFFEDEDD6E8E978FBFE19 + FFFF00FDFE00FFFD02DBDC17E4E6C5FEFEFEFBFBF9FEFFFFFFFFFFF1EFE9F0EF + E9EFEEE9F2F1ECE4E2DC4B3814D1CDC5FEFEFEFAFBF9FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFDFDFCFCFC + FCFCFDFBFCFCFDFDFBFFFEFDF9F7FDE8E8FBD5D5F6C4C5F4B9B7F33F40D60C0A + E50A0BFB0000FB0000FC0000FC0000FB0000FB0100FB0202F90103F90001FC00 + 00F1C4C4F0FEFEFEFAFAFEA3A3931614A90000FE0101FA0000FC0001FC0303FC + 0405FC080AFC0E10FA1110FC100FFB0A0AFA0404FC0102FD0000FD0100FD0000 + FC0000FC0000FA0000FC1011F80604D68380E4FDFDFDFBFBFCFCFCFDFDFDFDFD + FCFDFBFDFBFCFBFCFCFCF9FBFCF9FBFBF9FCFEFEFFFFFFFFFFFFF1F2D3D3D174 + D3D332E0DE00EDEF00F7F823F6F661F9F796F9F9C0FFFFEDFEFFFFFBFCFBFCFC + FCF2F1ED7B6C51442F0A412C04402B05412B053E2B06321A00D0CDC1FEFEFEFB + FAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFCFDFDFCFCFCFCFDFAFBFCFEFDF9FBF9FDDDDEFAA5A6EC6869E03D3CD72020 + CF1111CF0D0DCD0504CE0D11E90508F80000FD0000FB0000FC0000FC0000FC00 + 00FC0000FC0000FB0000FE0000F2C4C4F0FEFEFEFBFBFEA2A3931414AA0000FE + 0102FA0101FC0403FC0D0DFB1E1FFB3536FC4A4BFB5252FC4849FC2F30FC1516 + FC0607FB0202FC0000FD0000FC0000FC0000FB0000FC1111F80706D7817FE4FC + FDFEFBFCFCFDFCFDFDFDFDFDFDFCFCFCFBFBFCFBFAFCFFFDFEFFFFFFFFF4F4EB + E6E6B2CECF4FDFDF07E7E500F3F310FCFC67FAFBA6FAFAEFFAFCFFFCFDFFFDFD + FFFCFCFFFCFCFBFAFBFAFEFEFEDFDDD6311B00685839AAA292B1AA9AB1AA9AB3 + AB9AB0A998EBEAE6FCFDFDFBFBFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFCFBFBFCFBFBFBFBFBFAFDD4D5F77F80E5302F + D40506CF0000CE0000CE0000CD0000CC0203CD0404D21110EE0807F90000FC00 + 00FC0000FC0000FC0000FC0000FC0000FC0000FB0000FE0000F2C4C4F0FEFEFE + FBFBFEA2A3931514AA0000FE0202FA0203FC100EFA2D2CFB5C5BFB8988FBA6A5 + FDB2B1FBA0A1FB7475FC3D3EFB1414FD0403FD0000FD0000FC0000FC0000FB00 + 00FC1314F80707D6817FE3FCFDFEFBFCFCFCFCFDFDFDFDFCFDFCFBFBFBFDFCFD + EDEF8DC3C54CC7C759C8C821CECF01D9D800F4F62DFFFF9CFDFCE9FAFAFFFBFA + FFFBFBFCFAFCF7FCFBF9FDFDFAFDFDFCFDFDFDFDFDFDFCFCFCFEFEFECFCBC0F2 + F1EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFAFCFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFDFCFCFCFDFCFBFCF9FAFCEAEB + FE9496EA2727D10000D10000D20505D20506CC0202CD0201CA0101C90202CC03 + 03D11110E90807FA0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FB + 0000FE0000F2C4C4F0FEFEFDFBFBFEA2A4941415AB0000FE0202F90608FC2223 + FA5D5DFBA4A4FCD3D3FCE4E7FCEBEBFCE0E1FCB8B9FB7171FA292BFB0708FB01 + 00FD0000FC0000FC0000FB0000FC1416F80809D6807FE5FCFDFDFBFCFCFCFCFD + FDFDFDFCFCFCFAFCFBFAFCFEF4F454EFEF00EBEB00F8F800FFFE00E5E400C3C2 + 5DD8D9D0F1F0F4FFFFFFFFFFFFFFFFFFFCFCFDFAFBF7FBFAF9FCFBFBFCFCFCFC + FDFCFCFCFCFAFAFAFFFFFFFCFDFDF7F8F7F9F8F7F9F8F8F5F4F3CFC9BEF0F0ED + FDFDFDFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFDFCFBFC + FCFCFCFCF7FBFADCDBF95D5ADD0102CC0503D30708D30302CC0100C90000C900 + 00C90100CA0000CA0101CB0101CF0F10E50B0AF90000FD0000FC0000FC0000FC + 0000FC0000FC0000FC0000FB0000FE0000F2C1C2F0FBFBFCF9F9FDA2A2951513 + AA0000FE0303F80F0FFC3D3FFB8E8EFCD5D5FCF2F3FCF9F9FCF9F9FDF4F5FDDC + DCFC9594FC3B3BFC0A0CFA0001FC0000FC0000FC0000FB0000FC1617F90C0BDA + 807FE6FEFDFDFAFCFCFDFCFDFDFDFDFDFCFDFCFDFBFCFAFDFCFBEFFAFBB8FCFB + 8CF9F96BF8F852F9F925E1E100C4C400B6B811B9BA4FCCCB9BE8E7DCF8F8F6FF + FFFFFFFFFFFFFFFFFDFCFAFCFCFCFEFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFF + FFFFFFF1F3F1442E07CECBC1FEFEFEFBFBFAFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFCFDFBFBFCFCFCFBFDF9FBFBD8D6F94442D90000CE0B09D80403CE00 + 00C90000C80001C90000C90000C90000CA0000CA0000CA0000CE0E0DE01212F8 + 0001FB0000FC0000FB0000FC0000FC0000FC0000FC0000FB0000FE0000F1CCCC + F0FFFFFEFFFFFFCFCFB41C1CAF0000FE0304F91918FB5959FBB1B0FCEAEAFCF8 + FAFCFCFCFCFDFCFDF9F9FCE6E6FCA1A1FC4142FC0C0CFB0001FC0000FC0000FC + 0000FB0000FC1615F90A09D98D8DE6FEFEFEFBFBFCFCFCFDFDFDFDFDFCFDFDFC + FBFCFBFBFBFBFEFCFCFFFCFCFFFAFCFFFAFCFFF9FAEBFFFFB9FFFF7BFDFA42EB + EB10D1D500C2BF0DA7A829AEAC64CDCCA5E1E0D5FAFBFDFDFDFBE6E4DFCFCBC1 + EDECE6EDECE7EEECE7ECECE5EFEEEAE2E0D94B3813D1CEC4FEFEFEFBFBFAFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFBFCFAFCF9DFDFFB4747D800 + 00CF0C09D50000CB0000C90100C90000C90000CA0000CA0000CB0000CA0000CA + 0000C90101CD0707D51617F30304FA0000FD0000FB0000FB0000FC0000FC0000 + FC0000FB0000FD0000F39897E9C8C9EEC1C1F1C8C7E83636DD0000FC0506FA1D + 1CFB6263FBBABCFCEFEFFCFBFBFCFCFCFBFCFBFCF7F7FCDEDEFC9696FC3D3DFB + 0C0CFA0001FC0000FC0000FC0000FB0100FB1816F60C0CD7A3A3ECFDFEFDFCFB + FCFCFCFDFDFDFDFCFCFCFCFCFCFDFDFBFBFCFBFBFBF9FCFCF9FDFCF9FCFBF9FA + FBFDFAF9FFFAF9FFFCFEFFFFFFFDFDFDB1FCFC39F0F000C8C700B9BB00A5A500 + CBC98CFEFEFEECECE776684E452E0A422B054229033F2A033F2B033F2B04331B + 00D0CDC3FEFEFEFAFBFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFA + FBFBF2F3FB6F6FE10000CD090AD40000C90000C90000C90000CA0000C90000C9 + 0000C90000C90000C90000C90000C90201CB0302CF1413E70D0EF80000FC0000 + FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F50000F20000F200 + 00F30101FB0000FC0302FC1717FB5757FAAAABFCE4E4FBF5F7FBF6F8FCF4F5FC + E7E8FDBEBFFC7173FB2A2BFC0808FB0101FD0000FC0000FC0000FC0002FC1515 + F41111D5B6B7F0FDFEFEFCFCFBFDFCFDFDFDFDFDFCFCFCFCFAFCFCFBFCFCFCFB + FCFBFBFBF9FCFBF7FBFCFAFEFEFFFFFFFFFCFDFFF0F0DBDAD98BD5D436F0F005 + FEFD00FFFF00FFFF2BFBFA53EEEDB7FDFDFEFFFFFFFDFDFCCCC8BEB5AE9FB6AD + 9EB5AD9FB5AE9EB6AE9FB2AB9BECEBE6FCFDFDFBFBFCFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFCFDFDFCFBFCFAFCFBB3B3F0090BCE0707D50203CA0101C80101C6 + 0201C60101C70101C70101C70101C70000C80000C90000C90000CA0000CB0202 + D00706D81A1AF10606F90000FC0000FC0000FC0000FC0000FC0000FC0000FC00 + 00FC0000FD0000FE0000FE0000FD0000FC0000FC0001FC0E0EFC3838FA7A7AFB + B5B5FCD2D5FDDBDCFDD3D4FBB6B8FB817FFC3E40FB1415FB0304FC0000FD0000 + FC0000FB0000FC0405F91414F01D1CD5CCCDF4FEFEFBFCFCFDFDFDFDFCFCFCFC + FDFDFDFEFFFDFDFEFAFCF9FCFEFDFFFFFFFFFFFFFBFEFFEFEFDAD3D195D5D553 + DBDB05E4E400F4F500FAF934F6F871F8F8B6F9FAEDFCFBFFFEFFFFFCFCFCFCFC + FBFCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFAFB + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFBFCEEEEFB5051DB0000D2 + 0507D00000CC0000D60000D80000D90000DB0000DC0000DD0000DE0000DD0001 + D80000D10000D20000D30303D30403D30E0FE01618F60301FA0000FC0000FC00 + 00FC0000FC0000FC0000FC0000FC0000FB0000FB0000FB0000FB0000FC0000FD + 0101FA0909FB1C1DF93F3FFB6969FA8384FB8D8DFB8282FC6463FC3B3BFB1618 + FB0706FB0102FC0000FD0000FC0000FB0000FC0C0CF91010E83637D4E5E6F9FE + FCFBFCFCFCFDFDFDFDFDFDFAFAF8F1F2EAF4F5F2FBFCFFF4F7F5E4E5BFD4D584 + CCCC45D5D703DCDA00ECED00FAFA3EFCFD93FAFBCFFAFBFAFCFBFFFBFCFFFCFC + FDFBFCF9FBFBF8FCFCFCFDFDFDFCFCFCFAF9F8F7F8F8F8F8F6F8F8F6F7F8F8F4 + F4F1CAC6BCEFEEECFDFDFDFCFCFCFDFDFDFDFDFDFDFDFDFCFDFDFCFCFDFCFCFB + FDFDFCC4C4F31011CE0503D30001CF312ECB24249E1313951515961515971315 + 951516961313A40C09B90000DA0000FA0202F10101EB0102EB0F0DE70A08DB13 + 13E61516F80201FB0000FC0000FC0000FB0000FC0000FB0000FB0000FC0000FC + 0000FC0000FC0201FC0908FA1213F21316E61114DB1C1FDC3433E44041F03F3F + F63030FA1E1DFB0F10FB0606FB0202FC0000FC0200FD0000FB0000FC0000FC16 + 16F90C09DA6C6FE0F8F8FEFAFBFBFBFCFCFBFCF8FBFCFEF3F27AC8C80EACAA22 + C3C33DCAC821D7D800E4E300F1F102FDFA38FEFD81FCFCC9FCFBFCFCFBFFFDFC + FFFCFDFDFCFCF9FDFDF9FBFCFCFBFDFBFDFFFFFDFEFFFCFCFAFDFEFDFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFF2F3F03F2D09CECBC0FEFEFEFAFAFAFDFDFDFDFDFD + FDFDFDFCFDFDFCFCFDFBFCFBFCFDFD8C8AE70303CF1012E50000E79F9EEBDDDE + C6A3A298A5A498A2A196A09F96A1A093A0A0968C8D8E5758751316920000F301 + 03FD0002F90808FC1A1BF30B0ADD1314E71416F50504FA0000FD0000FC0000FC + 0000FB0000FB0000FC0000FB0000FC0406F81414F01615DF0B0DBF091D982038 + 89263787192C93101FAA1B1BD01C1BEB1112F50405FA0001FC0003FA0001FC01 + 00FD0000FC0000FC0806FA1C1DEF1212D3BCBCF1FDFDFCFAFCFCFAFDFCFCFBF9 + FCFCFDFAF8ADFBFC27FBF90EF3F20AF7F61CFAFB57FCFD9DFBFBD6F7FAFBFAFB + FFFCFCFFFCFCFCFDFCF9FDFDFAFDFDFCFDFDFDFDFDFDFBFCFCFCFDFEF4F3ECF3 + F1F0F9FBFBF4F4F3E9E7E3ECE9E6ECEAE7EBE9E5EDEBE7E0DED84A3714D0CEC5 + FEFEFEFBFAFAFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFCFBF2F3FD5354D90C0D + E31514FF0000F79596ECFFFFFFF9FBFFFCFDFFFFFFFFFFFFFFFFFFFFFFFEFDF6 + F5F8E8E8E294927F1919740000F30002FA0200F90A0AFA191BF00A09E00D0EE2 + 1919F20F0EF90404FA0100FA0000FC0000FC0000FC0000FB0204FA1114F01111 + D31111CE141CC4154180396D573F694E3568520E386E0910AB110FC51514D917 + 16EF0706FA0001FC0001FC0000FD0001FC0102F81D1DF90809D85D5CDBF3F1FD + FBFAFCFAFCFBFCFCFCFBFCFBFCFBFCFDFDFDE9E990E0DE84F2F2CDFDFDF7FFFF + FFFFFFFFFFFFFFFFFFFFFAFCF8FBFBF8FBFAF9FCFBF9FCFCFAFCFCFCFDFDFCFC + FCFCFDFDFDF9FAF85A482AA8A090FFFFFFDEDCD444320D402C033E2A013F2902 + 3C2B013F2A03321C00CFCCC3FEFEFEFBFAFAFDFDFDFDFDFDFDFDFDFDFCFDFBFC + FDFDFDFBE4E4FA3334D50E10E80C0CFC0000F59796ECFCFCFCF6F6FBFCFEFBE5 + E5F8C2C3F3C9C9F7E9EAF8FFFFFDFFFFFFF6F6F98C8E801110A80000FF0102F9 + 0000FC0907FA1719F30E0FE40909DD1415E61819F21211F80B0AFA0404FB0202 + FB0102FA0505FA1313F21616E71513F2171AF01943A22A6A50396A3C3A6E411E + 5A602033C61B1BE61214D71817E40D0DF80000FC0100FC0000FB0302FA1A1CF9 + 1011E32222D3D0CFF5FAFCFBFBFCFBFBFCFCFDFBFDFBFCF9FDFCFEF8F79EE9E7 + 00C2C400B6B41CB6B447C2C277CECDA1D4D3B0E5E5DCF9F9FFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFDFDFDF8FAFAFBFCF9EFEDE947310BB9B0A1E1DFDA7B6E59 + 372400B0A796B9B2A3B8B0A1B8B1A2B9B1A3B8B1A2EEEDE9FDFDFDFCFCFCFDFD + FDFDFDFDFDFDFDFDFCFDFBFBFCFEFDFCD5D4F62322D51110EF0809FC0000F697 + 96ECFEFEFEF6F8FDE5E3D35F60C40000F60001F31A1BEAB5B8F3FCFCFBFCFDFF + DDDBD243447B0000F10201FD0000FC0000FC0405F91212F81417EC0E0DE00C0A + DC1010E11315EB1416F11112F41213F51313F41314F21415EF0E0DF21113F020 + 37BC22605C3A6F3F396C4023625A1C3ABE1213F60F11F60F0FF60406F80102FB + 0705FA0F0EFB1A1DF60D0CDE1F1ED2B7B9F0FAFAFAFCFBFDFCFCFDFDFDFDFDFD + FCFDFCFBFDFCFDF9FAD7F8F949FEFC25F6F613ECEA00DCDC00CBCD00C8C800B9 + BC00BABA2FBBBB4EC1C07DD4D3ACDFDEC7ECEEE5F9FAF9FFFFFFFEFFFF655438 + 291200D9D6CBBAB5AC5E4C34AFA89BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFBFBFBFEFEFDC4C5F318 + 16D61110F20507FB0000F69696ECFEFEFDFBFCFEBBBEB02B2C900101FF0606F7 + 0000FA3537EDFBFCFAFAFCFDEDEEEB7673820201DA0101FE0100FA0000FD0000 + FD0100FB0908FB1414F61617EE1112E60C0DDF0B0BDE0C0CE20C0CE10D0DDF09 + 0AE10708E20405DC0908D81425B319555B3C7244376B3C2A674E12379C1214EA + 1112F21818F31D1BF51A1AF41918F01212E50807D33C3CD4C1C2F4FCF8FBF8FA + F9FCFCFCFDFDFDFDFDFDFBFDFCFCFCFDFCFCFDFDFCFFFBFBFDF8FAEFFAFBE2FC + FCCBFFFFB5FFFF92FFFF8BFDFC6DF4F332E8E712D9DA00CFCF00C6C600B3B416 + ACAB30AEAF51B4B47A746637988F7DE8E5E1FAFBFBFFFFFFFFFFFFF8FAF8F9F8 + F7FAF9F9FAFAF9FBFBFAFAFAF9FCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FCFCFBFBFBFEFEFDBBBCF21212D40F0EF30305FC0000F59696ECFEFEFEFAFCFE + BFBFAF2B298E0000FE0303F70101FB1817F5ECECF9FEFEFEF0F2F08080860706 + CB0000FE0100F90000FB0100FC0000FD0000FC0001FB0606FB0D0CFB1012F710 + 12F11010EF1011EF1516F11112F20D0EF01315E70C0CD08189DD47836F336F43 + 3C6C3E2E6C46204D852E2FCE1416D21011D61011D61416D61F1FD43E3ED58D8E + E7E3E3FAFCFBFCFAFBFBFCFBFCFDFCFCFDFDFDFDFDFDFBFDFDFCFDFCFCFDFCFC + FCFBFCFCFCFCFCFDFDFBFFFCFDFFFAFCFFFBFBFFFAFAFFF9FAFFFDFCFBFFFFF6 + FFFFE7FFFFBCFBFA76F8F915EBEA00D5D800CAC700AEAF12FEFFF7FFFFFFFCFC + FAF9FAF8FAFAFAFFFFFFFFFFFFFBFBFAFDFDFDF7F7F7FDFCFBFDFDFEFCFCFCFC + FDFDFDFDFDFDFDFDFDFDFDFDFCFCFBFBFCFEFEFCB8B6F21010D51011F20404FD + 0000F59696ECFEFEFEFCFCFEBFBFB0282A8F0000FE0101FA0000FD1012F4E8E9 + F5FEFEFDF5F4F78180840808C40000FE0000F90000FC0000FC0000FC0000FC00 + 00FC0100FC0100FC0100FC0303FB0404FB0404FB0404FB0303FB0102FA1918F8 + 0A0ADB676ADD73A3922B6C404270432D6D3F58907CD3D8F0C2C2F2B3B2ECAAAB + EDB6B6F0CFCDF6E8E9FDFBFCFCFCFCFBFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCF9FAFAF8FBFBF7FBFBF3 + FDFCFAFFFFFFFAFCFFECECDEE3E3ABD7D655E5E60FFCFB00FBFB11FFFD30FFFF + 59F6F89DF7F7F4FCFCFBFCFCFCFFFFFFFAF9F6E8E7E2EEEDE9FFFFFFFDFDFEF1 + F0EDA49B8BF9F9F7FCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFCFCFBFBFCFEFEFC + B4B2EF0F0ED51215F20404FC0000F59696ECFEFEFEFCFCFEBFBFB1292A8F0000 + FD0202F90101FC1A1AF4EFF0F9FEFEFDF3F5F484848B0606CD0000FE0100FA00 + 00FC0000FC0000FC0000FC0000FC0000FB0000FB0000FB0000FC0000FC0000FC + 0000FC0000FB0000FD0A09F91314EA2C2CD67A9DA8297042407244316D3D508F + 6EEBF5EEFEFFFCFFFFFDFFFFFDFEFFFEFFFFFCFCFDFBF9FBFCFBFCFBFCFCFCFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FFFEFFFFFFFFFFFFFFFFFFFFF6F8F4E7E6B9DAD855C7C900E2DF00F3F100F8F8 + 40FAF8A0F9FAD6F9FAF4FAFBFFFBFCFFFBFCFCFBFBFAFCFDFDCCC8BE5A492D3F + 2C023B25039C9281FCFDFCFEFFFF605032C5C0B4FEFEFEFBFAF9FDFDFDFDFDFD + FDFDFDFDFCFCFBFBFCFEFEFDB9B9F11111D40F0EF50305FD0000F59696ECFEFE + FEFBFCFEBFBEAE28298E0101FF0605FB0000FD4145EEFDFDFAFBFBFDF3F2EF89 + 889E0403E30000FE0000FA0000FC0000FB0000FC0000FC0000FC0000FB0000FB + 0000FB0000FB0000FC0000FC0000FB0000FA0100FC0101FB1615F41514D6708B + BC33784D3F7246366F42498B66E7F0EBFCFBFDF9FBFBFBFBFCFCFBFBFBFBFCFB + FCFCFBFDFBFCFCFBFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFCFDFCFCFCFCFDFDFEF1F2DBE1E0CEE8E8C6CED07AC9C937CBCC00F1F0 + 00FAF92CFAFA96FBFBE0FCFBFDFBFCFFFCFDFFFAFCFDFCFCF9FCFBF9FAFDFBF8 + F9F8FEFEFE948B75270F0092836DB4AD9FB9B5A7FAFAF9FDFDFB4E3917A79F91 + FEFEFEF9F9F9FDFDFDFDFDFDFDFDFDFDFCFCFBFCFCFEFEFEC0C2F31616D30E0F + F20406FC0000F59696EDFEFEFDFDFCFDC1C0B12323870000F70000EF191AE2C1 + BFEEFEFEFCF8FAFEEDEEE27473B10000F50201FB0000FB0000FB0000FB0000FC + 0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000 + FC0000FC1112F80F0CDB6376C83E815A3B724435704342855EE2ECE6FDFCFEFC + FCFCFDFDFDFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFAFBFBFDFAFCE5E8EA13BEBB00CDCD + 00D7D700EAEA00DDDB0EEAEB99FFFFFFFFFFFFFFFFFFFBFCFAF8FAF4FAFAF8FC + FBFAFDFDFCFDFDFDFDFDFCFCFCFCFCFDFDECE9E2B9B0A3FFFFFFFFFFFFFFFFFF + FEFEFEB2AD9E2C1300B6AFA1FEFEFEFAF9F9FDFDFDFDFDFDFDFDFDFDFDFCFBFC + FCFEFEFDD0D0F5201FD31113EE0808FB0000F69796ECFEFEFDFAFAFCE8EAE786 + 869D5052946C6C9BBBBFC6FAF8F4F8FBFCF8F9FCE5E4DC3739D70000FE0204FA + 0100FC0000FC0000FC0000FD0000FD0000FC0000FD0000FD0000FC0001FC0001 + FC0000FD0000FD0101FD0000FC0000FC0E0FF90A08DF5B65CF4A896B346F4133 + 6D403D8159DEEBE3FEFDFEFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFBFCFC + FAFAFBF4FAFA7CFEFF2FFBFB17FEFD0AFEFD00E5E200B7B725B2B462CBCAA2E5 + E4DBFAFBFFFFFFFFFFFFFFFFFFFFFCFCFBFBFBF9FCFCFBFDFDFCFCFBFCFFFFFF + FFFFFFFAFAF9F8F9F9F8F9F8FEFEFECCC8BD59462AE7E4DEFDFDFDFBFBFBFDFD + FDFDFDFDFDFDFDFDFDFCFBFCFCFDFDFCE7E6FB3638D60F0EE80E0EFC0000F695 + 94EDFAFAFEF4F5FAFBFCFCF5F4F3E5E5E0E7E8E3F7F6F6F9F9FDFEFEFCFFFFFA + 8D90E60101F40304FB0504FB0706FB0908FB0B0CFA0D0EFB0E0DFB0D0DFB0B0B + FB090AFC0706FB0404FC0203FC0101FD0000FD0000FD0101FD0000FC0D0EF908 + 08E05A5FD65A947B2F6E403770423B8058DBEAE2FEFDFEFCFCFCFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFCFDFCFCFBFBFCFBFCF9FCFFF9FAFAFAF9DFFAF9CBF8F8B5F9 + FA72F5F629E1E200C9C900BBBA00B1B235BCBB82C7C9AEECEDE6FFFFFFFFFFFF + FCFDFDF9FAF9FBFAFAFAF9F8F8F7F6FAFAF9FAFAF9F9F9F8FCFBFBECECE87C70 + 57ECECE8FCFCFDFCFBFBFDFDFDFDFDFDFDFDFDFDFCFDFCFCFCFCFBFCFAF7FD63 + 65DF0909DE1617FB0000F3A09FEDFFFFFEFFFFFBFFFFFCFFFFFEFFFFFFFFFFFF + FFFFFCFFFFFAE8EAF78385EF0707F40305FC0E0EFA1A19FB2728FC3536FB4141 + FC4848FC4849FC4646FC3F41FC3637FB2728FA1717FC0B0BFC0204FB0102FC00 + 00FD0000FD0000FC0E0EF80708E06163DB6EA28C2A6E403D7446387E54D9E7E0 + FDFDFEFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFDFCFDFDFCFAFD + FDFDFDFDFFFDFDFFFCFDFFFCFCFFFDFBF8FEFDD1FFFFACFFFF75F3F331D3D400 + A8A800989919A5A545ADAD7DFBFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFAFBF9443210CBC9BEFEFEFEFAFAF9FDFDFDFDFDFDFDFDFDFD + FCFDFCFCFCFCFBFCFEFDFEA5A6EB0A0AD51C1AF30002F83E3DEA6B6BE96363EB + 6465EB6464EB6465E96466E85F5FED4846F21517F20000F60404FA1215FB302F + FD5354FD7275FC8C8DFC9F9FFCA9AAFCA9AAFCA6A7FC9EA0FB8F90FC7474FC4F + 4FFC2B2BFC1113FB0506FB0102FC0000FD0000FB1011F90806DD7271E286B29F + 296D3F3D7549387E54D9E7E0FDFDFEFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFCFCF9FBFBF5F9FCF6FCFEFFFFFEFF + FCFDFFEFF0EEE4E28AFDFC21FFFF00EDEE00E8E700ACAA0073643073634B7465 + 487465497465497465497465497565477566497161433A2200D1CFC5FEFEFEFA + F9F8FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCDEE0F83431D31413E9 + 0F0EF90000F90000F90000F90000FB0000FB0000FA0000F90000F90000F90000 + FC0405FB0F0DFB3232FC6E6EFBA5A4FCC7C7FCDBDBFCE6E5FDEAEAFCEAEBFBE8 + E9FCE4E5FDDCDCFDC5C7FDA09FFC6C69FB3534FC1012FC0204FB0101FD0000FB + 1214F80B09D88F90EA9BC0AD276C403A74483A8056DBE9E2FDFDFEFCFCFCFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFCFCFDFDFCFCFAFBFBF9FBFBF9FCFCFAFCFBF9FDFDFCFFFFFF + FFFFFFFDFDFFF2F1EFE5E4B6D2D05BD0D206E4E600F7F700F7F618F8F755FEFF + A5B4AB6B6C5E3B6B5C3D6C5D3D6C5C3C6C5C3C6C5C3C6C5C3C6C5C3D6B5C3F6B + 5A3B7D7159EFEEEBFDFDFDFDFEFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFC + FAFCFBFAFBFD8483E70505D61B1BF80304FA0405FC0303FB0303FC0303FC0303 + FB0403FB0403FC0303FB0102FB0201FC1416FB5253FCA6A5FCDCDDFCF1F1FCF6 + F7FCF9F9FCFAFAFCF9FAFBFAFAFCF8F9FBF7F7FCEEF1FBDADDFCADADFC6564FC + 2426FB0507FB0000FC0101FB1415F41311D4B6B5F2A9CAB82871433C75493C80 + 59DEEAE4FEFCFDFBFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFCFBF9FBFCFEFEFFFFFFFFFFFFFF + FFFFFFFFFFFFFAFCFFEFF0E5E2E1B3D0CE5DC1C117DDDE00EDED00F9F927FAFA + 70F8F8B2F8FAE2FBFBFFF9FCFFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBFEFEFDC6BEB4FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFCFCFDF9FCFCD8DBF82F2ED21010E60F0FF90000 + FB0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0102FB1819FA5B + 5DFCB6B7FCEBEBFCF9F9FCFBFBFCFCFBFCFCFBFDFCFBFCFDFBFCFBFBFCFCFAFB + F9F8FBF0F0FCCECFFC8182FC3332FB0909FB0000FC0808FA1313EE2527D1DADB + FAB3CEC12B7447407B4F40825DE1ECE5FEFCFDFBFDFCFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFDFBF9FBFB + FDFCFAE8E7A9C3C18BC5C5A6DBDCC1D3D48CC6C33CC8C90CD7D600ECEC00F7F7 + 1BFBFA6BFBFBC2FAFAF6FAFCFFFBFCFFFCFBFFFBFCF9FDFCFAFBFCFAFAF9F7F9 + F9F8FAFAFBFBFBFAFBFBFAFBFBFAFBFBFAFBFBFAFBFBFBFBFBFBFAFBFAF8F8F7 + FCFCFCB1A897FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCF9FBFCFBFC + FAA0A1EB0908D11A1CF00607FA0000FB0000FD0000FC0000FC0000FC0000FC00 + 00FC0001FC0201FC1211FB4647FC9596FCD2D2FDEBEBFCF1F3FCF3F4FCF3F4FC + F4F5FCF3F4FDF2F4FDF1F1FCECECFBDBDCFDB4B5FD6E6FFB2B2CFA0809FB0000 + FA1A18F70708DB6462DEF8F7FEB8D1C62D74493D7B50488964E7F0E9FDFCFDFC + FCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFCFCFBFBFAF8FAF6ECED2DD2D100C0BE00CDCC00E1E100F0F0 + 00F9F830FDFC77FBFAB8F8FAECFAFCFFF9FCFFFBFCFCFBFCF8FCFCF8FCFBFAFA + FCFBF9FAF8FCFBFB8E8371AEA89AFDFDFCF6F8F6F9FAFAFBFAFAFBFAFAFBFAFA + FBFAFAFBFAFAFAFBFAF9F9F7FFFFFF9F957EFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFCFDFCFCFBF9FDF0F1FB6568DE0300D42021F60507F90000FB00 + 00FC0000FC0000FB0000FB0000FC0000FC0001FC0808FC2423FC5858FB9190FB + B6B5FCC5C6FBCACAFBCACAFCCACBFCCBCCFBC7C8FCC0C0FDB2B2FB9898FB6E6E + FA3E3CFC1516FC0404FA0F10F91615ED1717D0C2C5F3FFFEFEBCD4C92F754A36 + 764B4F8E6AEBF4EEFDFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFCFAFCFCFDFBFBD2FBFD + 6EFFFF5DFCFC73FCFD96FBFBD5FAFBFBFCFCFFFDFCFFFDFCFFFCFCFAFDFDF9FC + FCFBFCFDFCFCFCFCFCFDFCF9FCFCF8F9F7FFFFFF7F7357A19884FFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D1C8513D1BFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCFCFBFBFAFCE3E2FA4D + 4DD80504DA2121F50909FA0000FB0101FB0000FC0000FB0000FC0000FC0001FB + 0203FB0C0BFC2121FB3F3EFB5F5DF87472F87879F17676F77375FA7271FA6B6A + FB6261FB5354FA3E3EFB2829FB1716F90F0EFA1A19F71516E90506CF9194EBF5 + F7FBFDFCFEC0D8CB30764C327448589472F0F6F3FDFCFCFCFCFCFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFBFCFFF9FAFFFAFAFFFBFBFFFCFCFFFDFCFFFCFDFCFCFDFAFD + FDFAFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFBFCFBFDFDFC918872 + 3B240A988D7ACCCCC063533C7464487062447062457062447061447062447060 + 41624F2E372000392400FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFC + FCFDFDFDFCFCFCFCF8FAFBE0DFF85252D90505D41E20F01111FA0402F90100FB + 0000FD0000FC0000FC0000FD0101FC0203FC0606FB1619F52F39E32A34B72934 + A73143B72C3AD72C2CEF2D2DF52828F82426F81F21FA1B1BF61919F31313ED05 + 07DB1918D09594E7F2F1FDFBFAFAFCFEFEBED6C730784D33784C629B7BF5F8F8 + FBFBFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCF9FCFBF9FBFCFAFBFCF8FC + FCF9FDFCFBFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFCFCFCFBFDFDFE8E836A635242B5AEA2CAC7BC61513A7162446E5F416E5F + 426E5F416E5F426E5F426B5D3F71634583765EBCB6A8FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFCFDFDFBFDFDFDFCFDFDFDFCFBFBFCF9FAFBE5E6FA6E6EDE + 0A09D11215E51E1CF70E0EFA0101FB0000FB0000FC0000FD0001FA0000FB0E0F + F81F21EB0B2C9E325D6F3A605F275A5E133A8D181BCE0B0DD3090AD70B0CD80B + 0BD9080AD71314D42A2CD36967E0C7C5F3F7F8FBFBFAFCFAFCFCFDFEFEBBD3C6 + 2F784E31774A6FA387F9FAFBFAFBFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFC + FCFDFCFCFCFCFCFCFBFDFCFCFDFCFDFDFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFDFCFCFBFCFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFCFDFAFCFCF8FAFCF0F1FEA1A0EC2D2ED20707D61917E91C1CF41111F80707 + F80404F80907FA1618F71918EB0F0FD02D57922D704A427245346E44347560A5 + B5DBAAA8ED9797E98D8DE78D8DE59B9BEABBBAF0DEDEF7F5F7FEFCFCFCFCFBFC + FCFCFDFCFCFBFEFEFEB2CFC0307A4F31774B82B099FCFDFDFBFCFCFCFCFCFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFBFBFBFBFAFBFCFCFCFCFCFCFBFAFBFBFBFAFBFBFAFBFBFAF8FAF9F8F9F8F4 + F4F2C1BCAFECEBE6FAFAF9F9F9F8FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFDFCFBFCFCFAFBFBFBFBFBD8D9FA7E7C + E22627D1090BD60F0CE21211F01515F21717ED080BDC1414CF8D8CE8B9D0D330 + 77513D7244407345296F43A1C6B2FFFFFEFEFFFCFFFEFEFEFFFEFEFFFDFFFFFC + FDFCFDFBFCFBFBFCFCFCFCFCFDFCFDFCFCFBFEFEFEA7C9B630784D2F764D93BB + A6FEFEFEFCFCFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFBFCFCFFFFFFF4F5F33F2A06CDCABFFEFEFEFAFAF8FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFD + FCFDFCFBFBFBFCFDFCFBFAF9FDD8D8F79696E94A4BD8201FD11817D22322D157 + 58DBBCBDF3F5F6FBF1F5F5629A7C3071414373472F6F41569473EEF4F1FAFBFB + FAFBFCFAFBFCFBFCFCFBFBFCFBFCFBFBFCFDFAFDFDFCFDFCFCFDFCFCFCFBFEFE + FE98BEA930774C2F784FA7C9B6FEFEFEFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF9F8F8E6E2DCD7D6CD4D3712D1CDC6 + FEFEFEF9FAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFDFBFBFCFDFDFBFCFDFEEF + EEFBD0D1F6C0C1F5D2D5F6F2F3FEFBFCFDFAFBFAFCFDFDACCBBB267242427449 + 3D74452C734ABED7C8FCFCFEFCFBFCFBFCFCFCFCFDFCFDFDFCFDFCFDFDFDFDFD + FDFDFDFDFCFCFCFBFBFCFEFDFD85B2992F774C347D54C0D8CDFEFEFEFBFCFCFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFEFEFEEEEFEB + 4D3B1B392300351E00D0CDC4FEFEFEFAFAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFCFCFCFCFCFBFCFCFBFCFCFCFDFFFDFEFFFDFEFDFCFCFCFCFCFCFCFAFCFC + FCFBFDE7F1EB4A8C683472444676482D6F3E6CA487F5F9F8FCFBFBFBFDFCFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCF9FBFB70A4882D764941 + 845ED5E6DDFEFDFDFBFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFCFCFCFAFCFBD7D3C9BFBAADC2BCAEEFEFEBFCFDFDFCFCFBFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFDFCFCFDFCFCFDFCFBFCFBFCFC + FBFCFCFCFBFCFDFCFDFCFCFCFBFCFBFCFCFDA0C3B127704346774B3A72432F78 + 4EC9E0D3FCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFC + FCFCF0F6F55B97772C784A508E6BE7F1EBFDFCFCFBFCFCFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFCFDFCFDFDFCFCFCFCFCFCFCFCFCFCFCFDFCFFFFFFFFFFFFFFFF + FFFFFFFEFBFCFDFDFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FCFDFDFDFDFDFDFDFDFDFDFDFCFDFDFDFDFDFDFDFDFCFDFDFCFCFCFBFBFCE6F2 + EB4E8C69337342457648266C3D78A98EF8FAF9FBFBFCFCFDFCFDFDFDFDFDFDFD + FDFDFDFDFDFCFDFDFBFCFCFCFCFDE4EEE94C8D692C774A619B7CF5F9F6FCFCFC + FCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFDFCFDFAFDFBF9FBFAFDFDFDFEFEFEFBFD + FDF9FBFAFAFBFAF5F3F3FCFDFBFBFCFAFCFCFDFDFDFCFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFCFDFDFCFCFCFBFBFCFDFDFBABCBBA256E454278493B7343347951CBE1D5FB + FCFDFCFCFCFCFDFCFDFDFDFDFDFDFDFDFDFCFDFDFAFCFCFEFDFECDDFD43A815A + 2C774C83AF96FDFDFDFCFCFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFCFBFC + FBFFFFFFFAFBF8F9F9F8FEFFFDFFFFFFFEFEFEDCD9D3C7C3B9FFFFFFFAFBFAFD + FCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFBFCF1F6F3629A7C2A + 70424A7B50286D3E71A68AF6F9F7FBFBFBFCFDFCFDFDFDFDFDFDFDFDFDFCFDFD + FAFCFCFEFEFEABCBB82D794E2F7950A7C9B6FEFEFEFCFCFCFCFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFCFCFDFAFAF9FFFFFFA79D8A513F204E3C194B3818B5AE9DFEFEFEF1 + EFED74664CEFEDEAFDFDFCFAFCFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFC + FCFDFBFCFCFCFCFBCFE2D6337C533D784A417A4F2A7349BED8CBFCFCFDFBFBFC + FCFDFCFDFDFDFDFDFDFCFCFCFBFCFBFAFDFD86B2982B774B388058CADFD3FEFD + FEFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFAFDFEFDE1E0DA3B25044D391396 + 8B77958A77ADA697FAFAF9FEFFFF615031C3BDB1FEFEFEF9FAF9FDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFBFBFCF9FCFA9BC2AB236D3F4E8257 + 2E7043569472EAF3F0FBFAFBFCFDFCFDFDFDFDFDFDFCFCFCFCFCFCF2F6F35D99 + 782A784B528F6DE6F1EBFDFCFDFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFBFBFD + FDFDE8E8E2453213BDB6A7FFFFFFFFFFFFFFFFFFFAFAF8FDFDFD5B4C2CA8A192 + FEFEFEF9F9F8FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFCFC + FAFBFBF0F7F2679F83266E3F54855D246C3D98C0AAF9FCFAFBFCFBFCFCFCFDFD + FDFBFDFCFEFCFDD7E7DE3D855D2E794D75A78BF8FBFAFCFCFCFCFDFCFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFBFBFCFFFFFFE0DCD2FBFDFDFBFEFFF9F8F7F9FAF9 + FBFCFBFDFDFC54421CA7A190FEFEFEFAF9F8FDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFCFDFDFCFDFDFBFCFCFAFBFBDDEAE545896234784B488257347A + 54CFE4D9FBFCFBFCFCFCFCFCFCFBFCFBFEFDFEADCBBB2E7C51337A4FA1C4B2FE + FEFEFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFBFCFCFCFCFBF9F9F8 + A39A87E9E7E3FCFCFDF9F8F8FDFDFEE2DFD7352000B1AB9CFEFEFEF9F9F9FDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCFAFB + FCC8DED131795142825633784C5D9877EEF5F1FAFBFBFCFBFCFBFBFCFAFBFA74 + A88D307B503A825ACFE2D8FEFDFEFBFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFCFDFAFAFBFFFFFFF7F7F7392400AEA899FEFEFEF9F9F9FFFFFF807158331B + 00D5D2C7FEFEFEFAFAFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFBFBFBF9FAFCB7D2C228724949885C27734789B69EF5 + FBF9FAF9FAFBFCFDDFEDE6448A66317B50579576F0F6F2FCFBFCFBFCFCFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFBFBFBFBFBFBDFDEDBC2BCAE442E06C9C5BAFEFE + FEF7F7F6897D66291200706242FBFBF9FAFBFBFCFCFCFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFDFCFAFBFBF7FBF9A7 + C9B62772494B8A612B764FB0CFBEFAFAFBFDFDFCAFCDBD327C53307B5297BFA9 + FDFEFDFBFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFCFBFCFCFCEDEB + E87C7057382200DCD8D1FEFEFEF1F0ED3F2E085F4B30E5E3DDFDFDFDFBFBFAFC + FCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFCFDFCF8FBFBF8FAFA9FC3AE2A774C3F865C347C56CADDD2F4F9F9 + 6EA3862E7B503F845ED4E5DAFCFDFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFCFBFCFCFEFFFFFDFCF8CEC9C0F3F4F3FDFDFCF9FAF9C8C4B8F4 + F3EDFFFFFFFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFDFCFAFAFBF7FBF99BC3AB + 2D774F338155468B68ACCEBD3C845E2A794D72A68BF9FBF8FAFBFBFDFCFCFDFD + FCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFAFCFCFBFCFDFFFFFFFB + FCFAFBFBFAFCFDFCFFFFFFFEFFFFFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFCFCFCFAFBFBFAFAF99CC2AE2B795236845B1E72452A7B512C7950BED6 + CBFEFDFDFBFBFCFCFCFCFDFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFC + FDFCFCFDFCF9FAFAFCFDFEFFFFFFFFFFFFFBFAFAFBFAFAEBEAE8F9F9F8FDFDFD + FDFCFBFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDF8FBFBF7FBF9A0C5B32B7A + 522F815510693A5D9C7AEEF4F1FBFBFBFCFCFCFCFDFDFCFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFCFCFDFCFBFBFCFFFFFFEDEDE6DAD8D0E9E7E1FFFFFF + FDFEFEDCDAD4ACA496FFFFFFFAFBFAFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFBFDFCFAFBFBFAFBFA9EC6B22E7A532C7D523E8864D3E5D9FBFCFBFBFCFBFC + FCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFAFAF9FDFDFDBCB4A8 + 4A36163821003B2703948974FCFCFBF9FAF86E5D42E3E2DAFDFEFEFCFBFBFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCF8FBFBFAFBFA9EC4B12D7A5331 + 7D54498F6DDCEAE1F9FBFAFCFCFBFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FCFCFDFAFAFAFEFEFE645437361F00A69B89C6C1B4C0B9AEF7F5F5FEFEFE5D4E + 2EB5AE9FFEFEFEFAFAF9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFC + FDFDF9FBFBF8FBFA94BDA72C794F338055549272E5EFEBFAFBFAFCFCFCFCFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFAFBFAFDFDFEBAB4A3A79E8AFFFFFFFFFF + FFFFFFFFFCFCFCFDFDFD574523A69F90FEFEFEFAF9F8FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFDFDF9FBFAF6F9F881B19A2E7A4D2A7A51 + 6BA082ECF5F5FBFBFAFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFBFAFC + FBFFFFFFFFFFFFF9F9F8FAFAF8F8F8F8FCFCFBECEAE4382605AEA897FEFEFEFA + F9F8FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFC + FBFAFAF1F7F36BA285337D5227764C8AB79FF9FAF9FBFBFBFCFDFCFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFCFDFDFBFBFEFEFEFCFCFDF6F8F7F9F9F9F9F8F9F9F9F7FFFFFF9C + 927C2F1600CDC9BEFEFEFEFAFAF9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFCFDFDFCFCFBFAFBFAE3F0EA4F906E357E532E7851BDD5 + C8FAFCFBFAFCFBFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFDFDF6F5F4F3F3F0FFFFFFFF + FFFFFFFFFFFFFFFFB6B19F3621035C4826F6F5F4FCFCFCFBFCFBFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFDFDFBFCFBFBFD + FAC6DDD1337D53337E54468D68E5EFE7FBFAFDFBFDFCFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFA + FCFBF7F6F4A69E8E908672B1A999A79C8C7161443219003E2807CBC3B8FEFEFF + FAFAF8FCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFCFDFDFBFBFBFAFBFB8EBBA7307B50317A5084B39AFBFCFAFB + FBFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFCFCFBFBFBFDFDF3F2F0978C76503E1E3F2B0348320D + 75654CD1CDC4FEFFFFFAFAFAFCFCFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFBFCFCFAFBFBEDF4F155 + 9472307D53377F58CDE1D6FCFCFDFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFDFCFCFBFEFFFF + FFFFFFFEFDFCEEECE8F1F1ECFFFFFFFFFFFFFFFFFFFEFEFFFAFCFCFCFDFCFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFCFDFCFCFCFCFDFDFCB4D4C4327B522D784F75A88CF8FAFAFBFBFCFCFDFC + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFCFCFCF9F9F8FBFCFCFFFFFFFCFEFEF9F9F9F4F2F0B6B2 + A2EBEAE6FCFCFDFCFCFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFBFBF5F8F7689E812B794D + 378058CFE2DAFBFCFDFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFF7F7F53B2902CCC9BFFEFEFEFAFAF9FDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFC + FBFCFBFEFDFDB9D3C62F7C4F28764E91BAA5FDFDFDFAFBFBFBFDFCFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFDFDFDFCFC + FCFFFFFFEEEDE7D7D5CDD8D6CED7D4CCD9D6CFCECCC04B3610D0CEC5FEFEFEFB + FAF9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFBFCEFF5F25E9A782175485F9B7DF6F9 + F7FCFBFCF9FDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFCFDFDFAFAFAFDFDFDD1CCC543310F331E003722003722003821003B + 2400361F00D1CEC5FEFEFEF9FBFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFDFCFCFCFDFD + FEA9C8B71E744839855EB0D2C1F0F4F0FCFBFCFCFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFAFAF9FDFDFECFC9BF4A371CA3 + 9881D1CBC0D0CBBFD1CBC0D0CBC1CBC5BCF0F0EFFCFDFDFCFCFBFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFCFCFCFCFCFCDBEAE337865E0C67381D6E4490BBA5FAFCFBFC + FBFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFBFAFCFBFFFFFFF7F5F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FBFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFCFCE3EFE942886323 + 6F4036794C4C8D69EEF5F1FCFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFCFCFDF6F7F7F7F7F6F7F6F5 + F8F7F6EDEEEC8E8570E2DED9FDFDFDFAFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFC + FCFCFEFDFED4E6DD387D5643794C397345448660E2EDE7FEFDFEFCFCFCFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFD + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFA3C2801CCC9BEFEFEFEFAFAF8FDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFDFED9E8DE377F5645784C3A7548448862 + E6EFEAFDFCFDFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FCFDFDFCFCFCFCFCFCFEFEFDCDCAC0B1AA9AB2A998AFA898B2A99AA9A1904330 + 0AD1CEC4FEFEFEFAFAF9FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFBFCFCF3F5F2 + 53927133794A32764A5F9A79F4F9F7FBFCFCFCFCFCFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFBFDFDF9FAF7FEFEFEC3BEB22C1200321B00412A + 05412B05422B05442D0747330ED4D1CAFEFEFEFBFAFAFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFBFCFCFAFBFCC4DCD0498B66448763C4DBCFFCFCFCFCFCFCFCFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFBFBFAFDFD + FDE0DDD672644FC8C2B4F1F0EEEFEFEBF0F0EBF0F0EBECECE6F9F8F8FCFDFCFB + FCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFCFCF9FCFCF9FBFBEBF1EBE5F0 + E9F9FAFAF8FCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFCFCFDFBFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFEFFFFFCFCFDFBFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFD + FCFDFCFDFBFCFCFCFCFEFDFCFEFCFCFCFDFCFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFDFCFCFCFDFEFEF9F9F9F7F6F6F8 + F7F6F9F8F7F7F7F6F9F9F8EBEEEC6F5F42D9D7CFFDFDFEFBFBFAFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFDFCFCFDFCFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFBFCFDFA + FCFCF5F4F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFA402C05CECAC0 + FEFEFEFBFBFAFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD + FDFDFDFDFDFDFDFDFBFAFAFDFDFDCAC7BE7F735B8D826D8C836D8D826C8C826B + 8D836E897D67442F08D2CFC6FEFEFEFBFBFA} + end + object Bevel1: TBevel + Left = 0 + Top = 1 + Width = 102 + Height = 102 + end + object Label1: TLabel + Left = 112 + Top = 1 + Width = 247 + Height = 48 + Alignment = taCenter + Caption = 'Asistente para la creación de partes de Servicio Técnico' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + WordWrap = True + end + object Bevel2: TBevel + Left = 103 + Top = 49 + Width = 273 + Height = 17 + Shape = bsTopLine + end + object Label2: TLabel + Left = 0 + Top = 121 + Width = 60 + Height = 20 + Caption = 'Nombre:' + end + object Label3: TLabel + Left = 0 + Top = 153 + Width = 70 + Height = 20 + Caption = 'Dirección:' + end + object Label4: TLabel + Left = 0 + Top = 217 + Width = 66 + Height = 20 + Caption = 'Teléfono:' + end + object Label5: TLabel + Left = 0 + Top = 249 + Width = 46 + Height = 20 + Caption = 'e-mail:' + end + object Label6: TLabel + Left = 107 + Top = 57 + Width = 264 + Height = 32 + Caption = + 'Este asistente generará un parte de entrada válido para nuestro ' + + 'servicio técnico.' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + WordWrap = True + end + object SpeedButton10: TSpeedButton + Left = 351 + Top = 113 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 333333333333333333FF33333333333330003FF3FFFFF3333777003000003333 + 300077F777773F333777E00BFBFB033333337773333F7F33333FE0BFBF000333 + 330077F3337773F33377E0FBFBFBF033330077F3333FF7FFF377E0BFBF000000 + 333377F3337777773F3FE0FBFBFBFBFB039977F33FFFFFFF7377E0BF00000000 + 339977FF777777773377000BFB03333333337773FF733333333F333000333333 + 3300333777333333337733333333333333003333333333333377333333333333 + 333333333333333333FF33333333333330003333333333333777333333333333 + 3000333333333333377733333333333333333333333333333333} + NumGlyphs = 2 + end + object Nombre: TEdit + Left = 80 + Top = 113 + Width = 265 + Height = 28 + TabOrder = 0 + OnKeyPress = NombreKeyPress + end + object Dir1: TEdit + Left = 79 + Top = 145 + Width = 297 + Height = 28 + TabOrder = 1 + OnKeyPress = Dir1KeyPress + end + object Dir2: TEdit + Left = 79 + Top = 177 + Width = 297 + Height = 28 + TabOrder = 2 + end + object Tlf1: TEdit + Left = 79 + Top = 209 + Width = 145 + Height = 28 + TabOrder = 3 + OnKeyPress = Tlf1KeyPress + end + object Tlf2: TEdit + Left = 231 + Top = 209 + Width = 145 + Height = 28 + TabOrder = 4 + end + object email: TEdit + Left = 79 + Top = 241 + Width = 297 + Height = 28 + TabOrder = 5 + end + object Button1: TButton + Left = 285 + Top = 281 + Width = 91 + Height = 25 + Caption = '&Siguiente >' + TabOrder = 6 + OnClick = Button1Click + end + object Button2: TButton + Left = 189 + Top = 281 + Width = 91 + Height = 25 + Caption = '&Cancelar' + TabOrder = 7 + OnClick = Button2Click + end + end + object TabSheet1: TTabSheet + Caption = 'Equipo' + ImageIndex = 1 + object Label7: TLabel + Left = 0 + Top = 128 + Width = 231 + Height = 23 + Caption = 'Descripción del Problema:' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + end + object Label8: TLabel + Left = 8 + Top = 16 + Width = 37 + Height = 20 + Caption = 'CPU:' + end + object Label9: TLabel + Left = 184 + Top = 16 + Width = 34 + Height = 20 + Caption = 'Mhz.' + end + object Label10: TLabel + Left = 8 + Top = 48 + Width = 40 + Height = 20 + Caption = 'RAM:' + end + object Label11: TLabel + Left = 8 + Top = 80 + Width = 28 + Height = 20 + Caption = 'HD:' + end + object Label12: TLabel + Left = 8 + Top = 104 + Width = 45 + Height = 20 + Caption = 'Video:' + end + object Button3: TButton + Left = 285 + Top = 281 + Width = 91 + Height = 25 + Caption = '&Finalizar' + TabOrder = 0 + OnClick = Button3Click + end + object ComboBox1: TComboBox + Left = 48 + Top = 16 + Width = 81 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 16 + ParentFont = False + TabOrder = 1 + Items.Strings = ( + 'Intel' + 'AMD') + end + object CPUmhz: TEdit + Left = 136 + Top = 16 + Width = 49 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 2 + end + object GroupBox1: TGroupBox + Left = 224 + Top = 8 + Width = 161 + Height = 121 + Caption = 'Complementos' + TabOrder = 3 + object CheckBox1: TCheckBox + Left = 8 + Top = 24 + Width = 49 + Height = 17 + Caption = 'CD' + TabOrder = 0 + end + object CheckBox2: TCheckBox + Left = 8 + Top = 56 + Width = 145 + Height = 17 + Caption = 'Tarjeta de Sonido' + TabOrder = 1 + end + object CheckBox3: TCheckBox + Left = 80 + Top = 24 + Width = 73 + Height = 17 + Caption = 'CDRW' + TabOrder = 2 + end + object CheckBox4: TCheckBox + Left = 8 + Top = 40 + Width = 57 + Height = 17 + Caption = 'DVD' + TabOrder = 3 + end + object CheckBox5: TCheckBox + Left = 8 + Top = 72 + Width = 145 + Height = 17 + Caption = 'Sintonizadora' + TabOrder = 4 + end + object CheckBox6: TCheckBox + Left = 80 + Top = 40 + Width = 73 + Height = 17 + Caption = 'Desc.' + TabOrder = 5 + end + object CheckBox7: TCheckBox + Left = 8 + Top = 88 + Width = 145 + Height = 17 + Caption = 'Tarj. de RED' + TabOrder = 6 + end + end + object ComboBox2: TComboBox + Left = 48 + Top = 42 + Width = 81 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 16 + ParentFont = False + TabOrder = 4 + Items.Strings = ( + '4 Mb' + '8 Mb' + '16 Mb' + '32 Mb' + '64 Mb' + '128 Mb' + '256 Mb' + '512 Mb') + end + object ComboBox3: TComboBox + Left = 48 + Top = 74 + Width = 81 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 16 + ParentFont = False + TabOrder = 5 + Items.Strings = ( + '1Gb' + '2 Gb' + '3 Gb' + '4 Gb' + '8 Gb' + '10 Gb' + '13 Gb' + '17 Gb' + '20 Gb' + '30 Gb' + '40 Gb' + '60 Gb' + '80 Gb') + end + object ComboBox4: TComboBox + Left = 136 + Top = 74 + Width = 81 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 16 + ParentFont = False + TabOrder = 6 + Items.Strings = ( + '1Gb' + '2 Gb' + '3 Gb' + '4 Gb' + '8 Gb' + '10 Gb' + '13 Gb' + '17 Gb' + '20 Gb' + '30 Gb' + '40 Gb' + '60 Gb' + '80 Gb') + end + object ComboBox5: TComboBox + Left = 160 + Top = 100 + Width = 57 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 16 + ParentFont = False + TabOrder = 7 + Items.Strings = ( + 'AGP' + 'PCI') + end + object TVideo: TEdit + Left = 56 + Top = 100 + Width = 105 + Height = 24 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 8 + end + object Memo1: TMemo + Left = 0 + Top = 152 + Width = 382 + Height = 129 + Lines.Strings = ( + '') + TabOrder = 9 + end + end + object TabSheet2: TTabSheet + Caption = 'Finalizar' + ImageIndex = 2 + object Button4: TButton + Left = 285 + Top = 281 + Width = 91 + Height = 25 + Caption = '&Cerrar' + TabOrder = 0 + OnClick = Button2Click + end + object Button5: TButton + Left = 189 + Top = 281 + Width = 91 + Height = 25 + Caption = '< &Atras' + TabOrder = 1 + OnClick = Button1Click + end + end + end +end diff --git a/SAT.h b/SAT.h new file mode 100644 index 0000000..fa5054b --- /dev/null +++ b/SAT.h @@ -0,0 +1,78 @@ +//--------------------------------------------------------------------------- + +#ifndef SATH +#define SATH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TSATform : public TForm +{ +__published: // IDE-managed Components + TPageControl *PageControl1; + TTabSheet *Inicio; + TImage *Image1; + TBevel *Bevel1; + TLabel *Label1; + TBevel *Bevel2; + TLabel *Label2; + TLabel *Label3; + TLabel *Label4; + TLabel *Label5; + TLabel *Label6; + TEdit *Nombre; + TEdit *Dir1; + TEdit *Dir2; + TEdit *Tlf1; + TEdit *Tlf2; + TEdit *email; + TButton *Button1; + TButton *Button2; + TSpeedButton *SpeedButton10; + TTabSheet *TabSheet1; + TButton *Button3; + TLabel *Label7; + TComboBox *ComboBox1; + TLabel *Label8; + TEdit *CPUmhz; + TLabel *Label9; + TGroupBox *GroupBox1; + TCheckBox *CheckBox1; + TCheckBox *CheckBox2; + TCheckBox *CheckBox3; + TCheckBox *CheckBox4; + TCheckBox *CheckBox5; + TLabel *Label10; + TComboBox *ComboBox2; + TLabel *Label11; + TComboBox *ComboBox3; + TComboBox *ComboBox4; + TCheckBox *CheckBox6; + TLabel *Label12; + TComboBox *ComboBox5; + TEdit *TVideo; + TCheckBox *CheckBox7; + TTabSheet *TabSheet2; + TButton *Button4; + TButton *Button5; + TMemo *Memo1; + void __fastcall Button2Click(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall Button3Click(TObject *Sender); + void __fastcall NombreKeyPress(TObject *Sender, char &Key); + void __fastcall Dir1KeyPress(TObject *Sender, char &Key); + void __fastcall Tlf1KeyPress(TObject *Sender, char &Key); +private: // User declarations +public: // User declarations + __fastcall TSATform(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TSATform *SATform; +//--------------------------------------------------------------------------- +#endif diff --git a/Systm/3OF9_NEW.tt_ b/Systm/3OF9_NEW.tt_ new file mode 100644 index 0000000..e6a7a75 Binary files /dev/null and b/Systm/3OF9_NEW.tt_ differ diff --git a/Systm/8x8.fnt b/Systm/8x8.fnt new file mode 100644 index 0000000..f0b651e Binary files /dev/null and b/Systm/8x8.fnt differ diff --git a/Systm/ASCII.FNT b/Systm/ASCII.FNT new file mode 100644 index 0000000..d88e1cd Binary files /dev/null and b/Systm/ASCII.FNT differ diff --git a/Systm/About.avi b/Systm/About.avi new file mode 100644 index 0000000..bf0f874 Binary files /dev/null and b/Systm/About.avi differ diff --git a/Systm/IPROD_B.BMP b/Systm/IPROD_B.BMP new file mode 100644 index 0000000..27644c6 Binary files /dev/null and b/Systm/IPROD_B.BMP differ diff --git a/Systm/IPROD_C.BMP b/Systm/IPROD_C.BMP new file mode 100644 index 0000000..cec1e67 Binary files /dev/null and b/Systm/IPROD_C.BMP differ diff --git a/Systm/IPROD_S.BMP b/Systm/IPROD_S.BMP new file mode 100644 index 0000000..ac464be Binary files /dev/null and b/Systm/IPROD_S.BMP differ diff --git a/Systm/Iindx16.bmp b/Systm/Iindx16.bmp new file mode 100644 index 0000000..d4f5f7d Binary files /dev/null and b/Systm/Iindx16.bmp differ diff --git a/Systm/Iprod_f.bmp b/Systm/Iprod_f.bmp new file mode 100644 index 0000000..db1c693 Binary files /dev/null and b/Systm/Iprod_f.bmp differ diff --git a/Systm/Iprov_c.bmp b/Systm/Iprov_c.bmp new file mode 100644 index 0000000..db1c693 Binary files /dev/null and b/Systm/Iprov_c.bmp differ diff --git a/Systm/Iprov_s.bmp b/Systm/Iprov_s.bmp new file mode 100644 index 0000000..ac464be Binary files /dev/null and b/Systm/Iprov_s.bmp differ diff --git a/Systm/JDsoft.avi b/Systm/JDsoft.avi new file mode 100644 index 0000000..56ec27d Binary files /dev/null and b/Systm/JDsoft.avi differ diff --git a/Systm/Thumbs.db b/Systm/Thumbs.db new file mode 100644 index 0000000..f878dc7 Binary files /dev/null and b/Systm/Thumbs.db differ diff --git a/Systm/about.ico b/Systm/about.ico new file mode 100644 index 0000000..58b5f22 Binary files /dev/null and b/Systm/about.ico differ diff --git a/Systm/bannerFACT.bmp b/Systm/bannerFACT.bmp new file mode 100644 index 0000000..4e76d49 Binary files /dev/null and b/Systm/bannerFACT.bmp differ diff --git a/Systm/dlgimage.bmp b/Systm/dlgimage.bmp new file mode 100644 index 0000000..e35ac66 Binary files /dev/null and b/Systm/dlgimage.bmp differ diff --git a/Systm/iAcer.bmp b/Systm/iAcer.bmp new file mode 100644 index 0000000..0c287a4 Binary files /dev/null and b/Systm/iAcer.bmp differ diff --git a/Systm/iClts.bmp b/Systm/iClts.bmp new file mode 100644 index 0000000..8b779d5 Binary files /dev/null and b/Systm/iClts.bmp differ diff --git a/Systm/iCmps.bmp b/Systm/iCmps.bmp new file mode 100644 index 0000000..feb7f4e Binary files /dev/null and b/Systm/iCmps.bmp differ diff --git a/Systm/iCntb.bmp b/Systm/iCntb.bmp new file mode 100644 index 0000000..53951e7 Binary files /dev/null and b/Systm/iCntb.bmp differ diff --git a/Systm/iEmpl.bmp b/Systm/iEmpl.bmp new file mode 100644 index 0000000..c01b76c Binary files /dev/null and b/Systm/iEmpl.bmp differ diff --git a/Systm/iErro.JPG b/Systm/iErro.JPG new file mode 100644 index 0000000..3c66f2f Binary files /dev/null and b/Systm/iErro.JPG differ diff --git a/Systm/iErro.bmp b/Systm/iErro.bmp new file mode 100644 index 0000000..c4fb2ec Binary files /dev/null and b/Systm/iErro.bmp differ diff --git a/Systm/iIndx.bmp b/Systm/iIndx.bmp new file mode 100644 index 0000000..1d92707 Binary files /dev/null and b/Systm/iIndx.bmp differ diff --git a/Systm/iMisc.bmp b/Systm/iMisc.bmp new file mode 100644 index 0000000..8ca4f15 Binary files /dev/null and b/Systm/iMisc.bmp differ diff --git a/Systm/iProd.bmp b/Systm/iProd.bmp new file mode 100644 index 0000000..a3536dd Binary files /dev/null and b/Systm/iProd.bmp differ diff --git a/Systm/iProv.bmp b/Systm/iProv.bmp new file mode 100644 index 0000000..08c9633 Binary files /dev/null and b/Systm/iProv.bmp differ diff --git a/Systm/iVnts.bmp b/Systm/iVnts.bmp new file mode 100644 index 0000000..7de38e2 Binary files /dev/null and b/Systm/iVnts.bmp differ diff --git a/Systm/imAcer.bmp b/Systm/imAcer.bmp new file mode 100644 index 0000000..bdbfbf4 Binary files /dev/null and b/Systm/imAcer.bmp differ diff --git a/Systm/imArtc.bmp b/Systm/imArtc.bmp new file mode 100644 index 0000000..4e7e622 Binary files /dev/null and b/Systm/imArtc.bmp differ diff --git a/Systm/imBlDVnt.bmp b/Systm/imBlDVnt.bmp new file mode 100644 index 0000000..5a98f04 Binary files /dev/null and b/Systm/imBlDVnt.bmp differ diff --git a/Systm/imBlMVnt.bmp b/Systm/imBlMVnt.bmp new file mode 100644 index 0000000..9de726c Binary files /dev/null and b/Systm/imBlMVnt.bmp differ diff --git a/Systm/imCCCtbl.bmp b/Systm/imCCCtbl.bmp new file mode 100644 index 0000000..a419caa Binary files /dev/null and b/Systm/imCCCtbl.bmp differ diff --git a/Systm/imCFG.bmp b/Systm/imCFG.bmp new file mode 100644 index 0000000..8640752 Binary files /dev/null and b/Systm/imCFG.bmp differ diff --git a/Systm/imCajVnt.bmp b/Systm/imCajVnt.bmp new file mode 100644 index 0000000..081a57c Binary files /dev/null and b/Systm/imCajVnt.bmp differ diff --git a/Systm/imClts.bmp b/Systm/imClts.bmp new file mode 100644 index 0000000..21727eb Binary files /dev/null and b/Systm/imClts.bmp differ diff --git a/Systm/imCmpCmp.bmp b/Systm/imCmpCmp.bmp new file mode 100644 index 0000000..ae8691a Binary files /dev/null and b/Systm/imCmpCmp.bmp differ diff --git a/Systm/imCmpProv.bmp b/Systm/imCmpProv.bmp new file mode 100644 index 0000000..3c3ca5c Binary files /dev/null and b/Systm/imCmpProv.bmp differ diff --git a/Systm/imCmps.bmp b/Systm/imCmps.bmp new file mode 100644 index 0000000..61a8ff3 Binary files /dev/null and b/Systm/imCmps.bmp differ diff --git a/Systm/imCntb.bmp b/Systm/imCntb.bmp new file mode 100644 index 0000000..853486c Binary files /dev/null and b/Systm/imCntb.bmp differ diff --git a/Systm/imCtrClt.bmp b/Systm/imCtrClt.bmp new file mode 100644 index 0000000..b1606fa Binary files /dev/null and b/Systm/imCtrClt.bmp differ diff --git a/Systm/imCtrProv.bmp b/Systm/imCtrProv.bmp new file mode 100644 index 0000000..b1606fa Binary files /dev/null and b/Systm/imCtrProv.bmp differ diff --git a/Systm/imEmpl.bmp b/Systm/imEmpl.bmp new file mode 100644 index 0000000..50603f8 Binary files /dev/null and b/Systm/imEmpl.bmp differ diff --git a/Systm/imErro.bmp b/Systm/imErro.bmp new file mode 100644 index 0000000..cf9d976 Binary files /dev/null and b/Systm/imErro.bmp differ diff --git a/Systm/imIfmCtbl.bmp b/Systm/imIfmCtbl.bmp new file mode 100644 index 0000000..4c87a35 Binary files /dev/null and b/Systm/imIfmCtbl.bmp differ diff --git a/Systm/imInfClt.bmp b/Systm/imInfClt.bmp new file mode 100644 index 0000000..bd26cc1 Binary files /dev/null and b/Systm/imInfClt.bmp differ diff --git a/Systm/imInfCmp.bmp b/Systm/imInfCmp.bmp new file mode 100644 index 0000000..de9305f Binary files /dev/null and b/Systm/imInfCmp.bmp differ diff --git a/Systm/imInfEmp.bmp b/Systm/imInfEmp.bmp new file mode 100644 index 0000000..541d393 Binary files /dev/null and b/Systm/imInfEmp.bmp differ diff --git a/Systm/imInfProv.bmp b/Systm/imInfProv.bmp new file mode 100644 index 0000000..d89e5e3 Binary files /dev/null and b/Systm/imInfProv.bmp differ diff --git a/Systm/imLstCmp.bmp b/Systm/imLstCmp.bmp new file mode 100644 index 0000000..2a7ef80 Binary files /dev/null and b/Systm/imLstCmp.bmp differ diff --git a/Systm/imMisc.bmp b/Systm/imMisc.bmp new file mode 100644 index 0000000..8640752 Binary files /dev/null and b/Systm/imMisc.bmp differ diff --git a/Systm/imProv.bmp b/Systm/imProv.bmp new file mode 100644 index 0000000..1805cce Binary files /dev/null and b/Systm/imProv.bmp differ diff --git a/Systm/imPteCtbl.bmp b/Systm/imPteCtbl.bmp new file mode 100644 index 0000000..ae8691a Binary files /dev/null and b/Systm/imPteCtbl.bmp differ diff --git a/Systm/imPwdEmp.bmp b/Systm/imPwdEmp.bmp new file mode 100644 index 0000000..c5d884f Binary files /dev/null and b/Systm/imPwdEmp.bmp differ diff --git a/Systm/imRefs.bmp b/Systm/imRefs.bmp new file mode 100644 index 0000000..4e7e622 Binary files /dev/null and b/Systm/imRefs.bmp differ diff --git a/Systm/imStck.bmp b/Systm/imStck.bmp new file mode 100644 index 0000000..66a1017 Binary files /dev/null and b/Systm/imStck.bmp differ diff --git a/Systm/imVntClt.bmp b/Systm/imVntClt.bmp new file mode 100644 index 0000000..de9305f Binary files /dev/null and b/Systm/imVntClt.bmp differ diff --git a/Systm/imVnts.bmp b/Systm/imVnts.bmp new file mode 100644 index 0000000..63d9873 Binary files /dev/null and b/Systm/imVnts.bmp differ diff --git a/Systm/imVtEmp.bmp b/Systm/imVtEmp.bmp new file mode 100644 index 0000000..de9305f Binary files /dev/null and b/Systm/imVtEmp.bmp differ diff --git a/Systm/imVtRf.bmp b/Systm/imVtRf.bmp new file mode 100644 index 0000000..13fc16e Binary files /dev/null and b/Systm/imVtRf.bmp differ diff --git a/Systm/lockopen.bmp b/Systm/lockopen.bmp new file mode 100644 index 0000000..55d666d Binary files /dev/null and b/Systm/lockopen.bmp differ diff --git a/Systm/lockshut.bmp b/Systm/lockshut.bmp new file mode 100644 index 0000000..58cdb21 Binary files /dev/null and b/Systm/lockshut.bmp differ diff --git a/Systm/off.bmp b/Systm/off.bmp new file mode 100644 index 0000000..e0a196c Binary files /dev/null and b/Systm/off.bmp differ diff --git a/Systm/ok.bmp b/Systm/ok.bmp new file mode 100644 index 0000000..f957b32 Binary files /dev/null and b/Systm/ok.bmp differ diff --git a/Systm/on.bmp b/Systm/on.bmp new file mode 100644 index 0000000..52754d7 Binary files /dev/null and b/Systm/on.bmp differ diff --git a/TDlgBuscar.cpp b/TDlgBuscar.cpp new file mode 100644 index 0000000..73e810c --- /dev/null +++ b/TDlgBuscar.cpp @@ -0,0 +1,109 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TDlgBuscar.h" +//--------------------------------------------------------------------- +#pragma link "Grids" +#pragma resource "*.dfm" +TDlgBuscar *DlgBuscar; +//--------------------------------------------------------------------- +__fastcall TDlgBuscar::TDlgBuscar(TComponent* AOwner) + : TForm(AOwner) +{ +} + +//--------------------------------------------------------------------- +bool __fastcall TDlgBuscar::Buscar(int Tipo, TTable *Sender) +{ + switch( Tipo ) + { + case PRIOR: + if ( TbBusquedas -> FindPrior() == true ) + { + try{ + Sender -> GotoCurrent( TbBusquedas ); + }catch(...){/*nothing*/} + return true; + } else + MessageBox( 0, "Coincidencia no hayada", "¡ Buscar Anterior !", MB_OK ); + break; + case NEW: + ShowModal(); + if ( ModalResult == mrOk ) + { + try{ + Sender -> GotoCurrent( TbBusquedas ); + }catch(...){/*nothing*/} + return true; + } + break; + case NEXT: + if ( TbBusquedas -> FindNext() == true ) + { + try{ + Sender -> GotoCurrent( TbBusquedas ); + }catch(...){/*nothing*/} + return true; + } else + MessageBox( 0, "Coincidencia no hayada", "¡ Buscar Siguiente !", MB_OK ); + break; + } + return false; +} +//--------------------------------------------------------------------- +void __fastcall TDlgBuscar::ComboBox1Change(TObject *Sender) +{ + // Make the field we're locating in the leftmost field. + TbBusquedas->FieldByName(ComboBox1->Text)->Index = 0; + + TbBusquedas->IndexName = ""; + + + Edit1->SetFocus(); + Edit1->Text = ""; +} +//--------------------------------------------------------------------------- +void __fastcall TDlgBuscar::Edit1Change(TObject *Sender) +{ + AnsiString BuscarEsto; + BuscarEsto = Edit1->Text; + + { // Some non-indexed field. + AnsiString BuscarCota; + BuscarCota = BuscarEsto + "Z"; + + TbBusquedas->FilterOptions = TbBusquedas->FilterOptions << foCaseInsensitive; + + TbBusquedas->Filter = "( ([" + ComboBox1->Text + "] >= '" + BuscarEsto + "') AND [" + ComboBox1->Text + "] < '" + BuscarCota + "')" + ( Filter.IsEmpty()?AnsiString(""):AnsiString(" AND " + Filter)); + TbBusquedas->Filtered = true; +// else +// TbBusquedas->Filtered = false; + } + + TbBusquedas->Refresh(); +} +//--------------------------------------------------------------------------- +void __fastcall TDlgBuscar::DBGrid1DblClick(TObject *Sender) +{ + ModalResult = mrOk; +} +//--------------------------------------------------------------------------- +void __fastcall TDlgBuscar::TbBusquedasAfterOpen(TDataSet *DataSet) +{ + // Rellenamos el combo de "campos donde buscar", con TODOS los campos + // de la base de datos... + TbBusquedas -> GetFieldNames( ComboBox1 -> Items ); + + TbBusquedas->FilterOptions = TbBusquedas->FilterOptions << foCaseInsensitive; + TbBusquedas->Filter = Filter; + TbBusquedas->Filtered = true; + + if ( !DefaultField.IsEmpty() ) + { + TbBusquedas->FieldByName(DefaultField)->Index = 0; + ComboBox1->ItemIndex = ComboBox1->Items->IndexOf( DefaultField ); + } + +} +//--------------------------------------------------------------------------- diff --git a/TDlgBuscar.dfm b/TDlgBuscar.dfm new file mode 100644 index 0000000..c2b5736 Binary files /dev/null and b/TDlgBuscar.dfm differ diff --git a/TDlgBuscar.h b/TDlgBuscar.h new file mode 100644 index 0000000..30e993d --- /dev/null +++ b/TDlgBuscar.h @@ -0,0 +1,54 @@ +//---------------------------------------------------------------------------- +#ifndef TDlgBuscarH +#define TDlgBuscarH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Grids.hpp" +#include +#include +#include +//---------------------------------------------------------------------------- + +#define PRIOR -1 +#define NEW 0 +#define NEXT 1 + +class TDlgBuscar : public TForm +{ +__published: + TButton *OKBtn; + TButton *CancelBtn; + TBevel *Bevel1; + TDBGrid *DBGrid1; + TComboBox *ComboBox1; + TEdit *Edit1; + TLabel *Label1; + TLabel *Label2; + TDataSource *DsBusquedas; + TTable *TbBusquedas; + void __fastcall ComboBox1Change(TObject *Sender); + void __fastcall Edit1Change(TObject *Sender); + + void __fastcall DBGrid1DblClick(TObject *Sender); + void __fastcall TbBusquedasAfterOpen(TDataSet *DataSet); +private: +public: + AnsiString Filter, DefaultField; + bool __fastcall Buscar(int Tipo, TTable *Sender); + + virtual __fastcall TDlgBuscar(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern TDlgBuscar *DlgBuscar; +//---------------------------------------------------------------------------- +#endif diff --git a/TPV.INI b/TPV.INI new file mode 100644 index 0000000..7f1242e --- /dev/null +++ b/TPV.INI @@ -0,0 +1,18 @@ +[Form] +InitMax=0 + +[Ventas] +alFacturar=1 +Codigo_y_Unidad=0 +CajonMonedas-donde=2 +CajonMonedas=1 + +[Almacen] +RecalcularPrecioVentaAlCambiarCoste=1 +RefQR_LEDS=1 +ImprimirCabFam=1 +ImprimirCabFamVacia=0 +StockQR_LEDS=1 + +[Resumenes] +VntProdCosteBeneficio=0 diff --git a/TPV.bpr b/TPV.bpr new file mode 100644 index 0000000..67e0942 --- /dev/null +++ b/TPV.bpr @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=1 +MajorVer=1 +MinorVer=0 +Release=0 +Build=6 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD Soft. +FileDescription= +FileVersion=1.0.0.6 +InternalName= +LegalCopyright= +LegalTrademarks=JD soft. +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=www.infdj.com +e-mail=jd@infdj.com + +[HistoryLists\hlIncludePath] +Count=4 +Item0=$(BCB)\include;$(BCB)\include\vcl;..\VCLs\include +Item1=;$(BCB)\include;$(BCB)\include\vcl;..\VCLs\include +Item2=;;;$(BCB)\include;$(BCB)\include\vcl;..\VCLs\include +Item3=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=5 +Item0=C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item1=;C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item2=;;;C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item3=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item4=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=5 +Item0=_DEBUG;EXIST_CFG;.DEBUG;_COMPLETO +Item1=_DEBUG;EXIST_CFG;.DEBUG;_COMPLETO;DEM001 +Item2=_DEBUG;EXIST_CFG;.DEBUG +Item3=_DEBUG;EXIST_CFG +Item4=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=1 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/TPV.cpp b/TPV.cpp new file mode 100644 index 0000000..7018860 --- /dev/null +++ b/TPV.cpp @@ -0,0 +1,61 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("TPV.res"); +USEFORM("Inicio1.cpp", MenuInicio); +USEFORM("Inicializador.cpp", InitBDE); +USEFORM("TDlgBuscar.cpp", DlgBuscar); +USEFORM("TpvProductos.cpp", Productos); +USEFORM("TpvProductosPrint1.cpp", InformesProducto); +USEFORM("TpvRefQRs.cpp", RefQR); +USEFORM("TpvRefQRc.cpp", RefQRc); +USEFORM("TpvStockActual1.cpp", StockActual); +USEFORM("TpvStockQR.cpp", StockQR); +USEFORM("TpvVentas.cpp", Ventas); +USEFORM("TpvVntFctPrint.cpp", QRMDFacturaVnt); /* TQuickRep: File Type */ +USEFORM("TpvVntAlbPrint.cpp", QRMDFacturaVnt1); /* TQuickRep: File Type */ +USEFORM("TpvCmp.cpp", TpvCmp1); +USEFORM("TpvVntProd.cpp", VntProd); +USEFORM("TpvVntGeneral.cpp", VntGeneral); +USEFORM("TpvBlcDVnt.cpp", TpvBlDVnt); +USEFORM("TpvVntEmpl.cpp", VntEmpl); +USEFORM("TpvVntCltQR.cpp", VntCltQR); +USEFORM("TpvBlcMVnt.cpp", BlMVnt); +USEFORM("TpvCFG.cpp", CFG); +USEFORM("TpvCmpProv.cpp", CmpProv); +USEFORM("TpvVntClt.cpp", VntClt); +USEFORM("TpvBlcM_PrintFact.cpp", QRListadoFacturas); /* TQuickRep: File Type */ +USEFORM("TpvBlcD_Print.cpp", QRBlcD_Print); /* TQuickRep: File Type */ +USEFORM("TpvAccessControl.cpp", AccessControl); +USEFORM("TpvSelectActiveUser.cpp", ChangeUserName); +USEFORM("TpvRefBarras.cpp", RefBarras); +USEFORM("TpvVntProdQR.cpp", QRVntProd); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + AnsiString FsMutex = DateToStr(TDateTime::CurrentDate()) + AnsiString("Check-other-tpv-instances"); + HANDLE FhMutex = OpenMutex(MUTEX_ALL_ACCESS,False, FsMutex.c_str() ); + if ( FhMutex == 0 ) //it's a first instance + { +// if ( InputBox( "Registrando acceso...", "Usuario:", "-- -- --" ) != ((TDateTime::CurrentTime()).TimeString()).SubString(4, 2) ) +// return 0; + FhMutex = CreateMutex(NULL,false, FsMutex.c_str() ); + try + { + Application->Initialize(); + Application->Title = "TPV win"; + Application->CreateForm(__classid(TMenuInicio), &MenuInicio); + Application->CreateForm(__classid(TCFG), &CFG); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } else { + if ( CloseHandle(FhMutex) ) FhMutex = 0; + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/TPV.exe b/TPV.exe new file mode 100644 index 0000000..d3790eb Binary files /dev/null and b/TPV.exe differ diff --git a/TPV.rar b/TPV.rar new file mode 100644 index 0000000..96b5f30 Binary files /dev/null and b/TPV.rar differ diff --git a/TPV.res b/TPV.res new file mode 100644 index 0000000..b9d0c7e Binary files /dev/null and b/TPV.res differ diff --git a/TPV_BuscarEntreLineas.bpr b/TPV_BuscarEntreLineas.bpr new file mode 100644 index 0000000..b3489a3 --- /dev/null +++ b/TPV_BuscarEntreLineas.bpr @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=1 +MajorVer=1 +MinorVer=0 +Release=0 +Build=2 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD Soft. +FileDescription= +FileVersion=1.0.0.2 +InternalName= +LegalCopyright= +LegalTrademarks=JD soft. +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=www.infdj.com +e-mail=jd@infdj.com + +[Excluded Packages] +$(BCB)\Projects\Bpl\Dialup.bpl=RAS Tools + +[HistoryLists\hlIncludePath] +Count=2 +Item0=$(BCB)\include;$(BCB)\include\vcl;..\VCLs\include +Item1=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=3 +Item0=C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item1=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item2=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/TPV_BuscarEntreLineas.cpp b/TPV_BuscarEntreLineas.cpp new file mode 100644 index 0000000..9a3a20c --- /dev/null +++ b/TPV_BuscarEntreLineas.cpp @@ -0,0 +1,25 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("TPV_BuscarEntreLineas.res"); +USEFORM("BuscarEntreLineas.cpp", Form1); +USEFORM("TDlgBuscar.cpp", DlgBuscar); +USEFORM("TpvVntFctPrint.cpp", QRMDFacturaVnt); /* TQuickRep: File Type */ +USEFORM("TpvVntAlbPrint.cpp", QRMDFacturaVnt1); /* TQuickRep: File Type */ +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/TPV_BuscarEntreLineas.exe b/TPV_BuscarEntreLineas.exe new file mode 100644 index 0000000..1cef8c1 Binary files /dev/null and b/TPV_BuscarEntreLineas.exe differ diff --git a/TPV_BuscarEntreLineas.res b/TPV_BuscarEntreLineas.res new file mode 100644 index 0000000..4619c50 Binary files /dev/null and b/TPV_BuscarEntreLineas.res differ diff --git a/TPV_SAT.bpr b/TPV_SAT.bpr new file mode 100644 index 0000000..9979353 --- /dev/null +++ b/TPV_SAT.bpr @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD soft. +FileDescription=Generador de partes SAT +FileVersion=1.0.0.0 +InternalName=SATmodule001 +LegalCopyright=JD soft +LegalTrademarks=infdj.com +OriginalFilename=TPV_SAT +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[HistoryLists\hlIncludePath] +Count=1 +Item0=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=1 +Item0=..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/TPV_SAT.cpp b/TPV_SAT.cpp new file mode 100644 index 0000000..08cd737 --- /dev/null +++ b/TPV_SAT.cpp @@ -0,0 +1,23 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("TPV_SAT.res"); +USEFORM("SAT.cpp", SATform); +USEFORM("TPV_SATprint.cpp", Form3); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TSATform), &SATform); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/TPV_SAT.exe b/TPV_SAT.exe new file mode 100644 index 0000000..102c73c Binary files /dev/null and b/TPV_SAT.exe differ diff --git a/TPV_SAT.res b/TPV_SAT.res new file mode 100644 index 0000000..7b19944 Binary files /dev/null and b/TPV_SAT.res differ diff --git a/TPV_SATprint.cpp b/TPV_SATprint.cpp new file mode 100644 index 0000000..6de42d3 --- /dev/null +++ b/TPV_SATprint.cpp @@ -0,0 +1,16 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TPV_SATprint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm3 *Form3; +//--------------------------------------------------------------------------- +__fastcall TForm3::TForm3(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- diff --git a/TPV_SATprint.dfm b/TPV_SATprint.dfm new file mode 100644 index 0000000..99542e4 --- /dev/null +++ b/TPV_SATprint.dfm @@ -0,0 +1,1674 @@ +object Form3: TForm3 + Left = 190 + Top = 117 + Width = 906 + Height = 587 + VertScrollBar.Position = 247 + Caption = 'Form3' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Scaled = False + PixelsPerInch = 96 + TextHeight = 13 + object QuickRep1: TQuickRep + Left = 0 + Top = -247 + Width = 1123 + Height = 794 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [] + Functions.Strings = ( + 'PAGENUMBER' + 'COLUMNNUMBER' + 'REPORTTITLE') + Functions.DATA = ( + '0' + '0' + #39#39) + Options = [] + Page.Columns = 1 + Page.Orientation = poLandscape + Page.PaperSize = A4 + Page.Values = ( + 150 + 2100 + 150 + 2970 + 150 + 150 + 0) + PrinterSettings.Copies = 1 + PrinterSettings.Duplex = False + PrinterSettings.FirstPage = 0 + PrinterSettings.LastPage = 0 + PrinterSettings.OutputBin = Auto + PrintIfEmpty = True + SnapToGrid = True + Units = MM + Zoom = 100 + object QRBand1: TQRBand + Left = 57 + Top = 57 + Width = 1010 + Height = 679 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + AlignToBottom = False + Color = clWhite + ForceNewColumn = False + ForceNewPage = False + Size.Values = ( + 1796.52083333333 + 2672.29166666667) + BandType = rbTitle + object QRImage4: TQRImage + Left = 3 + Top = 576 + Width = 216 + Height = 55 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 145.520833333333 + 7.9375 + 1524 + 571.5) + Picture.Data = { + 0A544A504547496D61676539040000FFD8FFE000104A46494600010101006000 + 600000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC0001108003700A703012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD53 + A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800 + A28A2800A28A2800A29A5C038EA7D051400EA28A2800A28A2800A28A2800A28A + 2800A28A2800A28A2800A28A2800A28A2800A2A379953BE4FA0A88CED21C20C5 + 004ECE169BB99CF1C0A448B03E639A900C50022A851453A8A00CC8B5375E1D43 + 7B8AB31EA113F53B4FBD65BC4E87E6523EA29B5AF2A606EACA8FF7581FA1A7D7 + 3E091D0E2A54BA953A39A5C806DD1590BA8CCBD483F51522EA920EAAA6A79581 + A745677F6A9FF9E7FAD2FF006AFF00D33FD68E560685159DFDABFF004CFF005A + 43AAB7641472B034A8ACA3A94A7D05235D4AC39738F6A39581AA580EA40A89EE + A24FE2CFD39ACD559253C066AB11D8C8C3E62168B25B8123DFFF00757F3A6EF9 + 66F53EC2A68ECD13AE58FBD4E005180302969D00AF1DAFF7CFE02AC2A8518031 + 4B45200A28A2800A28A280108047233513DA44FD507E14514010B69919E84AD4 + 4DA51ED27E628A2AB9980C3A64A3A1534C3A74C06703F3A28A7CCC03FB3E6CE3 + 033F5A51A6CDE83F3A28A39980E1A64A7A9514F1A51EEE3F014514B99812A699 + 12F525AA74B6893A20FC79A28A576048062968A2900514514005145140051451 + 40051451401FFFD9} + Stretch = True + end + object QRShape10: TQRShape + Left = 826 + Top = 216 + Width = 177 + Height = 105 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 277.8125 + 2185.45833333333 + 571.5 + 468.3125) + Pen.Color = clGray + Shape = qrsRectangle + end + object QRImage3: TQRImage + Left = 770 + Top = 441 + Width = 234 + Height = 234 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 619.125 + 2037.29166666667 + 1166.8125 + 619.125) + Picture.Data = { + 0A544A504547496D616765373D0000FFD8FFE000104A46494600010101006000 + 600000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC000110801F401F403012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD53 + A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800 + A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800 + A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800 + A28A2800A28A2800A28A2800AE4F5CD2758F10CEEAA63B6B243FBB491C8DFF00 + ED1001FC8F4AEB28A00F3FFF00857FA8FF00CF6B5FFBEDBFF89A3FE15FEA3FF3 + DAD7FEFA6FFE26BD028A00F3FF00F857FA8FFCF6B5FF00BE9BFF0089AABA9783 + EF74BB292EA596068E3C6423313C903B81EB5E9558BE31E7C3977FF00FFD0D68 + 031BE1D7FCC43FED9FFECD5D9D719F0E811FDA1918FF0057FF00B35767400514 + 5140051451400514514005145140051451400514514005145140051451400514 + 5140051451400514514005145140051451400514514005145140051451400527 + 4A5AE735BBB7BCBEFB12B14863199083D7DA8037A2B98676223952423A846071 + 52D71D3C31DB209ED098A58B9E0E722BAAB1BA17B6914C38DEB923D0F7A009E8 + A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028 + A28A0028A28A0028A2A8EB46E0693746D33F68D876E3AFBE3DF19C7BD005A5B8 + 89E6689654695464A061B80F7152579059DF5C69D7027B794C528E323BFA822B + 7878FF0051000F26D8FB956FFE2A803D068AF3FF00F8581A8FFCF1B5FF00BE5B + FF008AA3FE1606A3FF003C6D7FEF96FF00E2A803D028AE7FC29E20B8D77ED5E7 + A449E56CDBE5823AE739C93E95D0500145145001451450014514500145145001 + 4514500145145001451450014514500145145001451450014514500145145001 + 451450014514500145145001451450015C83926FF513DFCC23F0C9AEBEB8ED51 + 8D86A774387F30862076079FEB400D8C965914F753FCAB7BC32FBB498C7F7598 + 7EB9FEB5864816B24CA7E5DBC1FAD741E1F8FCAD22DC1182416FCC9A00D1A28A + 2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A + 2800A28A2800A28A28033EEFC3FA75F3979AD2367272587CA49F7C75AADFF088 + 691FF3E63FEFB6FF001AD9A28031BFE110D23FE7CC7FDF6DFE3599E25F0E69D6 + 1A25CCF05B08E54DB86DEC719600F535D6567EBDA7BEABA54F6B1B2A3C9B705F + A70C0FF4A00E73E1D7FCC43FED9FFECD5D9D607857C3D3E83F6AF3A48E4F376E + 36678C67D47BD6FD001451450014514500145145001451450014514500145145 + 0014514500145145001451450014514500145145001451450014514500145145 + 0014514500145145002330452CC70A0649AE2AE1CDCC3797ADFF002D640899F4 + EBFC80ADFF00125E182C8409FEB673B47D3BFF009F7AC9B8B70D2D869EBEA0BE + 3F53FCE802DDAF85D5E2899EE1F6305668C0EF8FAD742AA1142A8C003000ED4B + 4500145145001451450014514500145145001451450014514500145145001451 + 45001451450014514500151DC5C476B03CD2B048D016663D854955B52B14D4AC + 27B673B5645C67AE0F63F9D00625878E2CEF2FBC97436D111F2CB2B0E4FA11DB + F3AE8D5830041041E845798DDF84F53B4723ECCD32E7868BE607DEABFF00606A + 5FF3E33FFDFB3401EAF457947F606A5FF3E33FFDFB34CB8D1EFAD616966B4962 + 8D7AB3290076A00F5AA2B8CF875FF310FF00B67FFB3576740051451400514514 + 0051451400514514005145140051451400514514005145140051451400514514 + 005145140051451400514514005145140051451400514564F8875036B6A218CF + EFE6F9401D40EE7FA5006634BFDA7AC4B3E730C3F2A1EDC77FE66A7D022379A8 + DC5EB7DD5F913FCFD3F9D52B85367651DAC63334BC607524F5FF000AE9B4EB35 + B0B38E11D40F98FA9EF401668A28A0028A28A0028A28A0028A28A0028A28A002 + 8A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A002 + B17C63FF0022E5DFFC03FF00435ADAA86EAD62BD81A19D04913632A7BE0E6803 + 92F875FF00310FFB67FF00B35767552C34AB4D33CCFB2C221DF8DD8279C74FE6 + 6ADD001451450014514500145145001451450014514500145145001451450014 + 5145001451450014514500145145001451450014514500145145001451450047 + 3CC96F0BCB21DA8A324D7330CA6FAE65D427F9635E2307B0A9F57BB3AADE0B38 + 49F26339918773FE7FCF155DE33A8DD476107CB0A7FAC61D80FF003F9D005BD0 + AD8DF5D3DFCA30ABF2C4A7F9D7414C861482258E350A8A3000A7D00145145001 + 4514500145145001451450014514500145145001451450014514500145145001 + 45145001451450014D92458919DD82228C966380053AA96A1A5C7AA6C4B86636 + EA72615380E7FDA3E9ED401CEEA9E3F489CA584225C1FF005B2E42FE03AFF2AC + 497C69AB48D95B858C7F75635C7EA0D77D168F6302044B48428F5404FE744DA3 + 58CE855ECE120FA2007F31401C55A78F6FE1204F1C570BDF8DAC7F11C7E95D76 + 8DE20B5D6E33E4B1595465A27FBC3DFDC560EB7E05428D369E4AB0E4C0C739FA + 1AE42DE79F4EBB59236686789B83D083DC11401EC14551D17544D5F4E8AE5701 + 88C3A8FE161D47F9EC455EA0028A28A0028A28A0028A28A0028A28A0028A28A0 + 028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0 + 028A28A002B1B5BD51A322CED4E6E5F8247F00A9B59D5C69E823886FB97E157D + 3DCD636D1A5C06597F79792F63C9CD0024BFF12F852D6DC6FB997A91D79ADED2 + 34C5D32DB69F9A57E5DBDFD2ABE89A4B5B66E6E7E6B97F5FE015AF4005145140 + 0514514005145140051451400514514005145140051451400514514005145140 + 0514514005145140051451400514556D4751834BB57B8B87DA8BD87258FA01EB + 401668AA1A2EAD1EB5622E11767CC5593392A41FF0C1FC6AFD0015C578F34758 + CC7A844B8DC764A07AF63FD0FE15DAD66F88E05B9D0AF91B20088BF1EABF30FD + 450073BF0F2ECEEBBB52C48204AABD8763FF00B2D7695E7FF0FF00FE43337FD7 + 06FF00D096BD02800A28A2800A28A2800A28A2800A28A2800A28A2800A28A280 + 0A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800ACFD5B5 + 64D3630A06FB87FB918FE668D5B564D3A2C0F9EE1BEE47FD4D60BB9B1CDD5D9F + 36F64E554FF0D002961619BABA3E6DE49C85F4AD3D1F4A7693EDB78374EDCA21 + FE01FE35871B4905C5BDF4E04AA5C16046702BB5560EA194E548C823BD002D14 + 5140051451400514514005145140051451400514514005145140051451400514 + 51400514514005145140051451400514514005731E3DB49A7D361963DC6389F2 + E83A72386FC3FAD74F484060410083C106803CA349D6AEB4598BDBB8C37DE461 + 956FAD7469F115828DF600B77225C7E9835B975E12D2EE98B1B7F2D89C93192B + FA516BE12D2ED1830B7F3181C8321DDFA5004FA16A736AF686E64B7FB3233611 + 776491EBD077FE552EB5FF00206BFF00FAF793FF004135702850000001C003B5 + 67EBE25934B9A0806E9A7FDCA8238E7AFE993401CEFC3CB33FE9774578E2253F + AB7FECB5D9D54D2B4E8F49B08ADA3E420E5B1F78F7356E800A28A2800A28A280 + 0A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A280 + 0A28A2800A28A2800ACED5B574D3502A8F32E1FEE27F534BABEACBA6C40280F3 + BFDC4FEA6B1618BECAB25E5DB6F98F273DBDBEB4008B8D3C35DDD9F36EDFEEA9 + ED56ECB426BD492E2F89F365076AFF00707AFD69BA369EF7F3FDBAE97E51FEA9 + 0F4FAD745401C85A5B12B756129F9D09DA7FCFF9E6B63C377666B230BFFAC80E + D23DBB7F9F6AABAE47F62D52DEEC70B27C8FFCBF97F2A8E27FECED72271C4571 + F237D7FF00D78FCE803A5A28A2800A28A2800A28A2800A28A2800A28A2800A28 + A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28 + A8AE6EA2B385A59E458A35EACC714012D1591A678A2CF57BD7B6B7126E552C1D + 94056031D39CF7F4AD7A00292B3F5BD6A3D0EDE29A546915E4D8429190304E7D + FA7EB52699AC5A6AF16FB6943E3EF21E197EA2802ED145140051451400514514 + 0051451400514514005145140051451400514514005145140051451400514514 + 0051451400551D5B544D32DF711BA56E113D4D4D7D7B1E9F6CD348781C01DC9F + 4AE5D37DE4E6EEE0E5DBEE2F65140125BC4ED335CDC9DD3B73CF4514FB3B66D7 + 2F013916711C9FF68FA5433EFB9952D21E6593EF1FEE8AEA2CAD12C6D9218C7C + AA3AFA9F5A009800A0003007402968A28033F5EB5FB5E9928032C9F3AFE1FF00 + D6CD60DC1379A424A0FCF1E0E7BF1C1FF1AEB4804107906B96B3885B5D5E5937 + DD0C48FA1FFEB62803A1D36EBEDB630CDDD979FAF7AB3585E1797647736AC7E6 + 89F23E87FF00D5FAD6ED00145145001451450014514500145145001451450014 + 5145001451450014514500145145001451450014514500145145001587AB7874 + EB2D23DCCEC70A4430A1C2A9EC4FA9ADCA2803CCFC1AFB3C456A3380C181FF00 + BE4D7A6579D681A15E8D6D1D23FDD5B4FB5E43C0F94E081EA6BD168039DF1968 + F73AADAC2D6C03984B3347DDBA74FC8D70569773E9B74B342C63950FF907FC2B + D7EB88F1DE8AB1326A10A850E764A00EFD8FE3D3F2F5A00EAB48D4E3D5F4F8AE + 538DC30CB9FBADDC55DAE2BE1E5D9DF776A5890409157B0EC7FA7E55DAD00145 + 1450014514500145145001451450014514500145145001451450014514500145 + 145001451450014D7758D19D885551924F614EAE7BC417CD7330B184FCA39958 + 7F2A00A57574757BB32BE45B46708A7BFBD12CE224690F6E00F534D18F963418 + 51C0A934FB4FED4D4429E6DE0E5BD09F4FF3E9401A7E1DD3CC301BA9799A6E79 + ECBFFD7AD9A28A0028A28A002B9DD693ECBAD5BCFD1655DA7DCF4FEA2BA2AC6F + 14C25F4F59547CD1386CFA0E9FCF140152C9FECBAFAF3859D307EBFE457495C9 + 5F4BB56D2ED7928C1BFAFF004AEB15832820E41190680168A28A0028A28A0028 + A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028 + A28A0028A28A002AA6A1AA5B6950F9B73288D4F00752DF4156EBCEFC76F2B6B7 + B64188D635F2FDC7393F9E7F21401E86AA1461400324F1EF4B5CA785FC556ED6 + 0905EDC245347F2296E032803193D33DAB7BFB6F4EFF009FFB6FFBFCBFE34017 + 6B37C4702DCE857C8D9C0899F8F55F987EA2AEDBDD437885E095264076968D83 + 0CFE155F5AFF009035FF00FD7BC9FF00A09A00E33E1FFF00C8666FFAE0DFFA12 + D7A0570DF0F2DF75DDE4F9FB88131EB939FF00D96BB9A0028A28A0028A28A002 + 8A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A00A + 3AC6A234DB369060C8DF2A0F7F5AE6501822258932C9F3313D6AC5FDD7F69EA2 + F26736F07CA9E84FAD55C99A5A001E43142481977E145751A4580D3AC923C7EF + 0FCCE7DEB1744B6FB76A6652330DBF4F76EDFE3F857514005145140051451400 + 555D521F3F4EB94EA4A123EA39156A8A00E3907DA34523BA03FA1CFF002AE934 + 79BCFD2ED9FF00D80BF971FD2B02C63F2CDDDB1FE090AFF4FE95A3E14933632C + 67AA487F223FFD7401B745145001451450014514500145145001451450014514 + 5001451450014514500145145001451450014514500145145001591E23D0175D + B6450CB14D1B65642B9E3B8FF3E95AF450079EB7807510F80F030FEF6E3FE14E + 83C017CEDFBC9618C7A825BFA57A0514015B4EB18F4DB286DA3036C6A0120637 + 1EE7F1AAFE229C5BE877AC413BA22800F56F947EA6B46A396149B66F5DDB1838 + 07D474340195E14D25B49D295645DB3CA7CC707A8F41F97EB9AD9A28A0028A28 + A0028A28A0028A28A0028A28A0028A28A0028A28A0028A28A0028A6BC8910CBB + 2A0F5638A647750CC711CD1B9F456068025A28A2800ACBF105F7D8EC4AA9FDEC + BF22FF0053FE7D6B52B94D46E3EDDAB48C4E62B7F957D33FFEBCFE540158A8B7 + 81621D7AB7D69921F26DCB0E19BE514732CB5734DB617FAB2A9E62B71B8FA13F + FEBFE5401BDA4588D3EC238F1873F33FD4D5DA28A0028A28A0028A28A0028A28 + A00E59D7C8D76F23FEF7CFF9E0FF005AB3E1E6116A17D0FAE1C7E67FC6A3D557 + CBF1021FEFC79FE63FA5269ADE578871DA58C8FD33FD2803A5A28A2800A28A28 + 00A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A28 + 00A28A2800A28A2800A28A2800A28A2800A2B9BF18DD6A36E96CB61E6E240E24 + F29371ED8E7191D4F4AE425B8D6608CBCB25F4683AB333803F1A00F53A2B91F0 + 0DE4F77F6EF3E7926DBE5EDF31CB63EF74CD75D4005145140051451400514514 + 0051451400514514005155350D4EDF4C8B7CCF827EEA0EADF4AE52FB5BBCD609 + 48FF00716FD300F5FA9A00E8750F1259D812A1BCF947F0C7CE3EA6B0AE7C49A8 + 5F645BA0823F55E4FE66A9476B0C1CB7EF1BDFA52BDC6781C0F41401135A34AC + CF3CA59CF24E724FE347D8233F76420FB8A4321340722802EDAEB3A8694C3731 + B887A6D7391F81ED5D4E97AC5BEAB1E623B6403E68DBA8AE3A39FB1E47A1A430 + BC0E2E2D58A3A9CE01FE5401DA6AB79F61B0965070D8C2FD4F4AE5107936AABF + C4DF31A5BAD625D645B44E36ED396C773EBF9524EDB9FDA801623E546F21EC38 + FAD741E1BB3FB369E2461FBC98EF3F4EDFE3F8D73927EF1A1837050C72C49E82 + BA76D774EB5454FB4A6140002E5BF95006951588DE2FB053C095BE89FF00D7A8 + CF8CECB3FEAA73FF00011FE3401BF4561C7E2FB073F30953DD97FC0D5FB7D6AC + 6E8E23B98C9F463B4FE46802ED145140051451401CEF88176EAB64DEA36FEBFF + 00D7AAC18C7AC5838EEDB7F33FFD7AB9E26E2E34F6FF006CF3F8AD67DE3F973D + A4BFDC941FD41FE9401D7D145140051451400514514005145140051451400514 + 5140051451400514514005145140051451400514514005145140051451400514 + 51400562F8C7FE45CBBFF807FE86B5B5505ED943A85B3DBCE9BE27C6E5C919C1 + CF6FA500727F0EBFE621FF006CFF00F66AECEA8E9BA35A691E67D96231F998DD + F3139C671D4FB9ABD40051451400514514005145140051451400564EB7AF47A5 + 2144C49724709FDDF73FE146BFADAE950054C35C38F947A0F535CAC31162D713 + 9DF2B9C8DDC9FA9A0052925DCA6E2EDCBB37383FE7814B24C07CAB8007414D96 + 62C6A13C9EB400E2E4D3738A6939A2801C0E68A45A70193400004D59803034FB + 6B53211C56ED9E8F900B0C0A00C66B6640648620643D735114BC279B719AEC23 + D3E241D33527D922FEED0071EFA5BCFF003392A4819007434D5D2234EA19ABB2 + FB245FDDA436511FE1A00E3CD92274897F119A3CB551FEA93FEF915D7369F0B7 + 6A825D22361C500726D1444F312FE03151359C0FD3287D8E6B7EEF48280902B2 + 2E2DCC4680196B7B7FA4906194C910EA8795FCBB5751A3EBF0EAABB0FEEAE00E + 6327AFD3D6B94594A1A6C9090C278094914E7E5E3F11401E834565E83AC0D56D + BE7C0B84E1D477F7AD4A00C0F14F0D627B6F3FD2B3352FF8F5CF70E3FAD69F8A + 8E459AFAB9FE95957D936AFF00506803B246DE8ADEA334EA82C9B7595B9F58D4 + FE953D0014514500145145001451450014514500145145001451450014514500 + 14514500145145001451450015CB7FC2C1B2FF009F7B8FC97FC6BA9AE235EF07 + D9E95A4CF7514B3B491EDC07231CB01D87BD00745A1F8860D7BCEF263923F2B6 + E7CCC739CFA1F6AA177E39B3B4BA9A068276689CA1236E09071EB55FE1EDBAAD + 85D4E09DCF28423B614647FE846ACDD781ACAEEEA69DE6B80D2B972032E01273 + E94010FF00C2C1B2FF009F7B8FC97FC68FF858365FF3EF71F92FF8D2FF00C2BE + B0FF009EF73FF7D2FF00851FF0AFAC3FE7BDCFFDF4BFE14009FF000B06CBFE7D + EE3F25FF001A3FE160D97FCFBDC7E4BFE34BFF000AFAC3FE7BDCFF00DF4BFE14 + 7FC2BEB0FF009EF73FF7D2FF00850020F883624F36F7007AE17FC6ADDBF8DB4B + 9DC2991E127BC89C7E6335465F8796C47EEEEE553EAE037F85733ADF872EB436 + 0D2624818E1654E99F423B1A00F5049165457460E8C32194E41145795D8F882F + B4D83C9827291E7217838FCE8A00F56A28A2800A28A2800A82F6EE3B0B592790 + E15067EA7B0A9EB90F145FB5EDF2D9467E48CFCDEEDFFD6A00CE32BEA37525DC + FCE4F03B7D3E8292594B1A7CA446A117851C557CE68003EF4D2734139A2800A2 + 8A280156A585773544B53DB7DF1401D268F661B048E056D81818159DA330F2F1 + DF15A54005145140051451400514514008CA18608C8AC2D5ED4212456F562EB5 + 3A9C807A50072F30C31A74326D34D9CE5A98A707340166D2E8E91AAC73AFFAA7 + E187B1EB5DD839191D2BCFEE57CCB5CF7539AECB43B8FB4E936CE7AECDA7F0E3 + FA50067F8A3996C40EA5CFF4ACEBB19B59BF0FE62B43C4AD9BCB05F424FEA3FC + 2B32E5F30CC3DA803A9D2DB7E9B6A7FE99A8FD2AD550D0FF00E4136DFEEFF5AB + F4005145140051451400514514005145140052138A5A42010411906802A5CEAD + 6D6BC3C833ED5027882D5DF6827F0AB6FA7DAC9F7ADA16FAC60D4C88B1A85450 + AA3A00300500450DEC338F95C7E353060C320823DAA296D62981DC8327F88707 + F3A8469DE581E54CEA7DF9A00B945555FB4C5F782CA3D41E69A9AA42D27964ED + 7EE0D005CA290107A1CD2D00145145001599E25B39B50D12E6DE04F3257DBB57 + 20670C0F7FA569D140185E0FD36E74BD3258AEA2F2A4331603703C6D5F4FA1AD + DA28A0028A28A0028A28A002AB6A5629A9584F6CF8C48A4027B1EC7F03835668 + A00F19A2A57B39E262AF0C88C3B321068A00F61A28A2800A28A2802BEA176B61 + 6734EDD117207A9EC3F3AE1AD09612DC48773B93C9FD6B7BC6777B6DE1B60797 + 6DC7E83FFD7FA562483CA8950761FAD0043236E34C635674F557BFB6560194CA + A083C823238AED7FB32CFF00E7D20FFBF63FC280380A2BBFFECCB3FF009F483F + EFD8FF000A3FB32CFF00E7D20FFBF63FC280380A2BBFFECCB3FF009F483FEFD8 + FF000A43A65991FF001EB0FF00DFB1401C12D491B6D6AEB2E7C3167329F2C340 + FEAA723F23FD315CEEA3A54FA63FEF177464E1645E87FC0D0068E997DE511CD7 + 450DCA4CA08201F4AE16298A1E0D5FB7D45A3C73401D8D15CFC3AD95039AB69A + DA9EB8A00D5A2B37FB663F414875A41D850069D2160A324E056449AE0C1C6055 + 0B9D619F3CD006BDEEA4B1290A7F1AE72F6ECCAC79A867BB6909E6AA3396A001 + 8E4D368A2802C27CF0C8BEAA6B7FC1B36FD3E58FBA49FA11FF00EBAC0B7E4E2B + 5BC12D8378BFEE9FE7400FF109CEB16C3D23CFEA6B3A4198E5FA1AB9AB3799AE + CBFF004CD00FD3FF00AF54D8E6297FDD3401D3682776916DF423F535A159DE1F + FF00903DB7D0FF00335A34005145140051451400514514005145140051451400 + 514514005145140052150C304023D0D2D14015DED064B46C51BB73C522BCF10F + DE2871EA95668A006C6FE62E7047D69D51CB711C00991D540F5359773E228236 + DB19DCDE8393401B15C76AFAD6BDA360CC2D990FF146B91FCF35AD1DFEA5701B + 65ABAFA171B7F9D269DA2CD34B2DC6A823999BE548080CAA33D4E7A9FF003F40 + 0E5FFE13BD4FD20FFBE0FF008D1FF09DEA7E907FDF07FC6BB7FEC5D3BFE7C2D7 + FEFCAFF851FD8BA77FCF85AFFDF95FF0A00E23FE13BD4FD20FFBE0FF008D1FF0 + 9DEA7E907FDF07FC6BB7FEC5D3BFE7C2D7FEFCAFF851FD8BA77FCF85AFFDF95F + F0A00E23FE13BD4FD20FFBE0FF008D1FF09DEA7E907FDF07FC6BB7FEC5D3BFE7 + C2D7FEFCAFF8564F8AF4BB2B6D02EA48AD208A41B30E912823E71DC0A009FC2B + AF36B76B279A00B8888DDB46060E71FC8D6E5719F0EBFE621FF6CFFF0066AECE + 800A28A2800A28A2800A28A28038CF114BF69D7C27689557FAFF005AA53B6E63 + 52DFBEED7AEDBAE188FE955A43CD004DA6FF00C846D7FEBAA7FE842BBEAE074E + FF009095A7FD754FE75DF5001514D7315B8FDE48A9F5A92B83D56EE4B9D4E749 + 3955C601F7CFF850076D1DF412B05590126A7AF3A8E478981462A4770715BFA4 + 7892432A4376432B1C093A11F5F6A00E9AA39E04B985E29143230C106A4A2803 + 82D46C9AC2EDE16E403956F51D8D570D8AE87C5B0E4C32E391F2935CE6EA0090 + 4845289DBD6A2DD46EA009BCF6F53479ED50EEA375004BE731A69727BD33751B + A80149A293751BA80168A4DD4A3A5004F6FC1AD6F0483BAF0F6F947F3AC94C24 + 4EDE8A6B77C1F188B4FB898F467FD00FFEBD0050B893CCD4EFA4EA376D07FCFD + 2AB93FB997E94B01CC12C87ABB93FE7F3A0AE2DA63E83FAD00753A10C6936DFE + EFF5357EA968ABB74AB51FEC03576800A28A2800A28A2800A28A2800A28A2800 + A28A2800A28A427033400B45677F6B169CC696F2363BED3538D4101018143E87 + 8A00B5556E352B7B507CC90023B0A98B8910ED6EB5143650C677792A1FFBC464 + FE7401486B325CAFFA2DA4B264E031185FCCD3BC8D4AE9407963B653D420DCD5 + A9450066A6816B9CCBBEE0FF00D346E3F2156EDEC6DED3FD4C2919F555E7F3A9 + E8A0028A28A0028A2A3B8B88ED617965711C6832CCDD050049456668DAFDB6B6 + 6610654C67A3F523D6B4E800AC6F179DBE1DBB38071B383FEFAD6CD72DE3AB6B + 9FB079F14CFF0067E166873F2F5E1BF3C7E94017FC2DF609AC0DC59402032616 + 55049C30EDCFD7F5ADAAE17E1EDCB2DEDD5BFF000BC624FA1071FF00B3577540 + 0514514005145140051451401C14FF003EB17C7A7CEFFF00A1540FF7AA7B8F97 + 59BE03A6F7FE7503F268025D33FE4236BFF5D93F98AEFEB80D33FE4236BFF5D9 + 3F98AEFE8010F435E7FA97FC852E3E83FAD7A01E86BCFF0052FF0090ACFF0045 + FEB401051451401DFE9D31B8B0B7909DCCC8324F738E6ACD67787B3FD8F6F9FF + 006BFF004235A3401CEF8BA42B0C438C123F9D7335D0F8CBEE43FEF2FF003AE7 + A800A28A2800A28C1A50B400945380F4A5DA4D00328A9361A3CB34011819A7A8 + C9C529422A48532C28012E8F956B8EEC71F8574B0A1D33C2E73C398C93F56FFF + 005D605A5B7F6AEAD14039894E5B1E83AFF85745E2997669E910EB23818F6FF3 + 8A00C051B2D2207A919A1CFF00A1CB9F6FE74B75F290A3A28C5473902CF1EAC2 + 803B2D38634FB5FF00AE4BFC8559AAB15C436D6B1092548C0403E6603B55793C + 45A746706E94FF00BA09FE428034A8AC8FF84AB4DDD8F39BEBB0E3F954D17883 + 4F98E16E901FF6B2BFCE803468A6472A4CBBA37575F553914FA0028A28A0028A + 28A0028A28A0028A28A0029924292E37A2BE3A646714FA2802ACB66495313F96 + 07518CE69FE698109947CA3F8C74A9E8A008A2B98E7FB8C0D4B511B588F48D54 + FAA8C1A4114887E47C8FEEB7F8D004D4520E94B40051453125490B05604A9C1C + 76A007D63F8AAC27D4746962B724C8087D83F8C0EDFD7EA056C51401E3F0CF3E + 9F71BE3778264C8E3823D456C278DF555183246DEED18AF429ECADEEBFD74114 + DFF5D1037F3A643A659DBB068AD208987748C03FCA802BE832DE5C69D1CF7ACA + 649407554180AA471F8D3B5D459345BF0C030F21CE0FA8048ABF5575381EEB4E + B982300BCB1B4632700646327E99CD0071FF000F6D99AF2EAE3F852311FD4939 + FF00D97F5AEEAA8E8FA545A358A5BC44B63E6673FC4DDCD5EA0028A28A0028A2 + 8A0028A28A00E12F976EBB78BD32CC7FAD56907357F5D4F2FC44E71F7C29FF00 + C77154A61826801FA6FF00C84AD7FEBB27FE842BBFAE074DFF00908DAFFD754F + FD08577D40087A1AE0753465D4E724601031FAD77F585E22D266BD781ADA10EC + 376F3903D31D7F1A00E528AD44F0DDFB360C2107AB38FE86B534CF0BFD9E6596 + E5D64DA72A89D0FA64FF004A00D7D3A136F616F191B5950647A1C73FAD59A291 + 9822962700753401CC78C2452F0479F9B20E07E75CFD5AD62F05FEAAECBCA47C + 0FAFFF00ABF9D55033400019A774A00F4A91222D400C0A4D48B01343CB1C1C7D + E6F414C1E7DD7FB09F90A00918C517DE619F41CD46D769D110B7D69CB691A7DE + 258FE429E1D23FBAA17E828022F3666E9163F0A513CE3AC39FF809A719893D69 + 44C680226B890E73160FD0D35A7902901319EF8AB4B9614D6C8A006E97A84DA5 + C8CF1401DDB8CB03D2ADDC6A93EAB75099902796490A01FEB515B92585111DF3 + 4D2761C0A00266DEF4CB852D1C683AB352FDE929CFF35D46BFDD19A0081AC79C + CB2963ED4AB6F029FBA5BEA6A5972CDEB4C2AA98DEC173400ED96DFF003C47E6 + 69AD05B49FC057FDD34C91769A664D004A96F2DAB892D676461E8706B674DF16 + 3090437EA14F4F35463F31586B295353111DCAE1C73D98751401DDABABA86521 + 94F20839069D5C5E93ABCBA2CE209897B563C7FB3EE3FC2BB247591159486561 + 904771400EA28A2800A28A2800A2909C0C9A8A4BC86304B48BC7BD004D45677F + 6E40EC5620D2B0EC833FCA9A351BC95BF7562FB7D64F97F991401A7456634BA9 + CA76AC11C3FEDB3E47E99A77F664D28FDF5EC84FFD330147EB9A00BED22AFDE6 + 03EA6A07D4ADA3CEE9938F7A806876A7FD609253EAF21FE98AB11D85B4200482 + 35FF00808CD0055935C84A9F215E76F44526A26BCBF9546CB5719F5E3F9D6B00 + 14600C0F414B4018AD69AA4C083245103DCB1247E9597A1F89F4CB48D84934DE + 74872F2489C7B74ED5D55C46668248D5B6332950D8CE323AD79BEBDE179B428D + 256992689DB602010738CF4FC2803D1AD2EE1BE81668241244DD1854D587E0B9 + 564F0F5BAAB0250BAB0F43B89C7E4457377977ADE9BA9DF4B025D0B712C8C374 + 6CD1EDC9E7918C62803D028AE63C2DE28B9D6AF1EDE78E35DB117DC99049C81F + D6BA7A0028A28A0028A28A0028A28A0028A28A0028A28A00E4FC6117957D6B70 + 3F8971F91CFF005ACDB95E491C835D378AAD7ED3A4BB0FBD110E3F91FE75C609 + 1FCB1F3920763401774DFF00908DAFFD754FFD08577D5E73617421BEB7791B08 + B22B31C7400F35D0DEF8C63490ADB46D228FE33C67F03401D2D15C7378CA73D2 + 0207E149FF00098DC7FCF13FA7F8D007654571BFF0985C7FCF13FA7F8D29F16D + CB290230A7B648A00EBDDD6352CC4281DCD71FE24F1234EFF63B23963F79BB01 + EA6B36E751BCBDCF9B71B54F509FE350C71A4430BC67A9CF268008A311205073 + EA4F527D6A4A4DC077A7232E793FA5004B1439E69925C163E5C3CFFB4292698C + B88A2E87A9F5A95116DA3C0E5BB9A006476E9172FF0033FE829CF31FA546CE58 + D3738A0071724D37229A4E68A005DD4A0D36941E2802623CD8F6862A7AE45466 + 79203899772FF7850188A904B9183C8F43400D4D422048507383824558B718B6 + 07BB73551ED2290E4650FB74A161993016638A00B88B839AA125D3248D2A9519 + 3800F5C5594B09A6FBD3B63D05598B4544E76973EAD4019D1DCDC5C0C2A05FF6 + B152C76CA877CADE63FBF4AD17B4751C2F1E9552481D7A8A008A57DC6A3C734E + 2A4536800A556DA692901CD005A2A2EA2287AF63E86B5FC27A9302D6137DE4C9 + 8F3FA8FEB58713ED6A74D2B5A5DC1771F55209F7C5007A0514C86559E24910E5 + 5D4303EC69F400514514011CF009D3696603FD935047A5DB479CC62427A993E6 + A5BAD4ADED01F324008EC2A0875B8AE33E54724807F7149FE54017A389214091 + A2A28E8AA3029F5563D46276DADBA36F47183564303D083400B4514500145145 + 001451450015CD78DB4AB9D4AD6DDED90CBE531DD1AF52081CFE18FD6BA5A280 + 39DF03DACD67A4CC93C3242E67242C8A54E36AF3CD6BEAE8D2E937A88A5DDA07 + 01546493B4F02ADD1401E509A4EA711CA59DDA1F558987F4A7FF0067EAFF00F3 + ED7DFF007C3D7AA51401E57FD9FABFFCFB5F7FDF0F4C9ADB54B78CC92C577146 + 3197757007E35EAF58BE31FF009172EFFE01FF00A1AD00647C3D9A497EDFBDD9 + F1E5E371CE3EF57635C67C3AFF009887FDB3FF00D9ABB3A0028A28A0028A28A0 + 028A28A006C88B2C6C8C32AC0823D4579E5ED9B69F7D2DB37407E527B8ED5E8B + 589E27D20DFDB09E25CCF10E83F897D28038975DA69326A5FF005ABFED0EB511 + 18A00371A375251400EDD46FA6D1400EDDF5A377D69B45003C3669FBB6AF1D4D + 468326ACDAC7E649BCFDD5A009EDE216F1EE3F7CFE94C77DC69F2BE4D45D2800 + 2714DA28A0028A28A0028A28A0050D4A0E69B4AB400F5273C55EB4B632B0AA71 + 0CB5749A35B06209A00B365A580A0B7157D6D2351F77352F4A5A0085AD226182 + B54AEB48575250569D1401C65E589889E2B39D769AED753B359232C0735C9DDC + 5B18D0054A6838A7536801E0F7A9A51E65A383D47CC2A00722AC41F3291D8822 + 803A6F0ADC19F47453C98D8A7F51FCEB62B99F05484C5771E780CAC07D41FF00 + 0AE9A800A28A2800A28A280119438C300C3D08AAEDA7C447C85E339CE558FF00 + 5AB345005658AE22FBB20947A30C1A63EA2B0B6D951D1BE9C55CA28018922C8A + 0A9C834FA8DADD1DB7630DEA0E2A3DB7119CEE5957D3183401628A6472798395 + 653E8453E800A28A4240C64F5A005A28A2800A2A95CEB561699F36EE25238203 + 648FC0556FF84AB4AFF9FC4FFBE4FF0085006B54179670EA16CF6F709E644F8D + CB92338391C8F71543FE12AD2BFE7F13FEF93FE147FC255A57FCFE27FDF27FC2 + 802CE9DA3D9E93E67D921F2BCCC6EF989CE338EA7DCD5DAA961AADA6A7BFECB3 + 09B6637601E339C75FA1AB740051451400514514005145140051451401CA788F + 40689DAF2D1728799231DBDC7B573C544A32383E95E995CCEB7E17DCCD716436 + B7568BD7E9FE1401C9952292AC38C394954C72038208C63EB51BC4568023A294 + 8C52500145145003D78157E15F2ADC7AB735440CED1EB57E53818F4E28022272 + 6984E69C4E0536800A28A2800A28A2803A8F0C59C17161234B0472379A465D01 + 38C0AD7FECCB3FF9F483FEFD8FF0ACDF097FC83A4FFAEA7FF415ADBA00CCD4E2 + B2D3ACA59CDA404A8E0796393F95716B5D5F8BDB1A5381DC1AE516802683EF0A + EAF44236D72519C35741A3DD046193401D1D1480E46452D00145145003251BA3 + 61ED5C86A8B890D75D336C898FB5721A9BEE91A80334F5A653A9B400ABD6ACDA + 9C30AACBD6AC5BFDE1401A5E106D9A8DDC7EA99FC8FF00F5EBADAE3FC37C7882 + 603A6D6FE62BB0A0028A28A0028A28A0028A28A0028A2ABDCDFC1683F7B205F6 + EF401628ACCFED69271FE8B692CB9190C46D53F89E297C9D4AE01DF3456C0F4D + 83737F4A00BEF2A4432EC147B9ACDBBD7E084ED8DB7B13818E726A64D16DB20C + BBEE1C73BA56273F874FD2AD436B0DB93E5431C59FEE28140196979A9DC0063B + 56553DE42171F81E6A5B4B1BD7BC59EF264DB1F291C44904E31CE456A5140057 + 3BE20B4D5B5794DB5A6DB7B403E691DF1E61EFD32703E9CD745450079FFF00C2 + BFD44FFCB6B6FF00BEDBFF0089A3FE15FEA3FF003DAD7FEFA6FF00E26BD028A0 + 0F3FFF00857FA8FF00CF6B5FFBE9BFF89AABA9783EF74BB292EA596068E3C642 + 3313C903B81EB5E9558BE31FF9172EFF00E01FFA1AD00637C3AFF9887FDB3FFD + 9ABB3AE33E1D7FCC43FED9FF00ECD5D9D0014514500145145001451450014514 + 5001451450050D4F46B6D517F7ABB641D245E187F8D72F7DE19BDB1CB45FE931 + 0FEE75FC4576F450079912B92194A9A698F3D0835E8D77A6DB5FAE27855CFF00 + 7B1823F1AC6B8F065BBF30CCF11F461B87F4A00E40A11480735D04BE0EBC4FF5 + 7344E3D0923FA5573E16D48748949F6714019B18FDEC63DC7F3AB5375A8EE2CA + E2C2E634B84D8E704723A66A49B20D0044DD69295BAD25001451450014514500 + 75BE12FF0090749FF5D4FF00E82B5B7589E12FF90749FF005D4FFE82B5B74018 + 3E30FF009063FD0D72CB5D4F8C3FE418FF00435CB2D00381C55CB4B831B0E6A9 + 5395B06803B1D3F515740AC6B48306190722B8682EDA33D6B4ADF5864FE2A00E + A29090064F158635E38EB505C6B4CE319A00D0D4EF9550AA9E2B97BA977B1352 + 5C5D9909E6A9B364D00369B4EA6D0003AD5880FCD55C75A9A1386A00D0F0D7FC + 87E5FA3FF3AECAB8DF0D1DDAFC87FD97FE62BB2A0028A28A00292968A00A33EA + 4D1B854B69DF3DFCB38A905F05FF005A8D19CE3E6156A9AF1AC8BB5D43AFA30C + 8A006A4CB22FCA6A386D2346DE635326721C8C9A26B30CA04444247755E0FE14 + E4F3215C37EF001D40E7F2A009A8A822BC866385704FA54F4005145140051451 + 40051454770D225BCAD1287942928A7A138E05003B7AEFD9B86FC676E79C7AD3 + ABC8EDF52B9B5BE5BB5958DC062DB9B9C93D735D443F11088C79B6419FB94930 + 3F2C1A00ED28AE3BFE16227FCF8B7FDFDFFEB51FF0B113FE7C5BFEFEFF00F5A8 + 03B1A2B1BC3DE225D7FED1B6030795B7AB6ECE73EDED5B340051451400514514 + 00514514005145140051451400514514005145140051451401CB78D23DAF692F + 7F997F911FD6B2AE40C923A1E6BA1F1843E6696AE07FAB901FC0F1FE15CD2CCB + 344A01F98280450044D494E229B400515A10E837D3C692241947008259471EBD + 6ADA784EEDB04BC2BEC58E47E940189456DEA1E1B3616524E6E0394C7CA131D4 + E3AE7DEB12803ADF097FC83A4FFAEA7FF415ADBAC5F098234D727BCA48FC856D + 50060F8C3FE418FF00435CB2D753E2FF00F9069AE56801D4537268C9A0075287 + 229993464D0049E611DE82E6A3C9A326801E4D2537268C9A0075368C9A280154 + 53D64D8CA31924F4A8D9820CFE429A8C54331393401B5E135F37589E4F4463F9 + 915D85737E0BB6DB6F3CE47DF60A3E83FF00D75D250014514500145145001451 + 45001451450046F04721CB2293EB8E69BE41423CB72A3FBA7915233AAF5207D4 + D4326A16D19C34C80FD680275CE39C67DA96B39B5C81B72C01EE1C7F0C6A5BF9 + 544D77A84D1EE8AD1C03D0310A7F2245006B54627433188365C0DC47B5651B7D + 56600EF8A207A867248FC863F5AB1A6E91F619A49E499A79DC6DDC46001E8050 + 068D14514018FA8784F4ED4A5795E231CAE72CF136327E9D3F4AA3FF000AFF00 + 4EFF009ED75FF7D2FF00F135D351401CCFFC2BFD3BFE7B5D7FDF4BFF00C4D676 + BFE0FB3D2B499EEA29676923DB80ECB8E580EC3DEBB7ACCF12D9CDA8689736F6 + E9E64AFB76AE40CE1813C9F61401CFFC3AFF009887FDB3FF00D9ABB3AE63C17A + 35E693F6CFB5C3E5799B36FCC0E71BB3D09F515D3D0014514500145145001451 + 4500145145001451450014514500145145001451450056D4ADBED9613C38C974 + 207D7B7EB5E79136148E841AF4CAF3FD6AD7EC5ABCE98C2336E5C7A1E6802B2C + 9B8E0F07F9D29EB5013CE29EB29039E450077DA2CE27D2AD980C613663E9C7F4 + ABD5CB78575348A46B576016439427FBDE9F8FF4AEA68020BDB55BDB59216380 + E319F43D8D71B26877A93F95F67663D997EE9FC7A5773450055D32CCD858C501 + 219941248E9927356A8AAD7F7F169F03492B0000E01EF40187E30BBDB1C500E4 + B119AE729D75A83EB178D72DC4432231EBEF4DA0028A28A0028A28A0028A28A0 + 028A28A00291A40839EBE94D6971D39A849E79E7DE801C58B1C9EBFCA9EA8F2B + 242832EE4000773518F5AE83C23A71B8BA6BB71F247C2FBB7FF5BFAD0074FA75 + 98B0B2860183B17048EE7B9AB34514005145140054325DC317DE91453E48C4A8 + 549207B5568F49B646DCC9E6B7AC873FA74A008CEB76E64F2E3DD2BFF75064D3 + 3FB4AEA527C9B19081DE4F97F9E2B4228638176C68B1AF5C20C0A7D00673CBA9 + B10A90C499FE22FC0A3FB36E2607CFBD939ED100B8FCF35A3450067AE896DB71 + 219263EAEE7FA62ACC1636F6D8F2E1443FDE0BCFE753D1400514514005145791 + CDA6DF5BC66496D6E228D7ABBC6CA07E245007AE515C77C3B47D97EE436C2500 + 63D091BB23F51F9D616AFA4EA126AD7AE96772C8D3B90CB131046E3822803D3A + 8AF26FEC7D47FE7C6EBFEFCB7F851FD8FA8FFCF8DD7FDF96FF000A00F59A2BC9 + BFB1F51FF9F1BAFF00BF2DFE14C9B4DBEB78CC92DADC451AF5778D940FC48A00 + F5CA2B8CF87473FDA1CE7FD5FF00ECD5D9D00145145001451450014514500145 + 145001451450014514500145145001451450015CE78CAC3CCB78EE947CD19DAD + 8F43D3F5FE75D1D473C29710BC520CA382A47B50079A37201F5A66EAB57768D6 + 3772DB49D54F07D7D0FE3555860D00395B0739C1AE834EF16CD6E823B95F3C0E + 038E1BF1F5AE72973401D8BF8BE10176C649EFC544DE324CF10BE3FDD35CA06A + 7AC98EF401D24DE30768FF007501DC7D4631F9D61DF4F3EA926EB97CA7FCF35E + 9F8D4225F6A5F347FF00AA801E00000030076A293783DFF4A370F5A005A29091 + EB46F51DE80168A69957DCD34CC3B0A00928240EBC7BD44653F4A617CF534013 + 348074E6A36909A8CB52139A0052D49D68A70E07BD00496F6EF753C7044373B9 + C0AF45B1B34B0B48E08FEEA0C67D4F7358DE14D1FECB0FDAE65FDEC83E407F85 + 7FFAF5D0D001451450014514500453DCC56CB991C2FD6A947AF413485220D2B7 + A20C9AD2A2802A0D453F8E39221D32E840AB092A4832AC0D3EA07B385DF714C3 + 7AA923F95004F4555169244731DC363FBAE339A73DC3C0A0C9196F7419140162 + 8A8A1B949C7CB907B83C1A96800A28A2800AC5F18FFC8B977FF00FFD0D6B6AA0 + BCB38750B67B7B84F3227C6E5C919C1CF6FA500607C3FF00F9034DFF005F0DFF + 00A0AD74D5574FD36DB4A85A2B58FCA8CB6E23713CE00EE7D855AA0028A28A00 + 2B17C63FF22E5DFF00C03FF435ADAA82F2CE1D42D9EDEE13CC89F1B972467073 + DBE9401C9FC3AFF9887FDB3FFD9ABB3AA5A768D67A4F99F6487CAF331BBE6273 + 8CE3A9F73576800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A + 28A2800A28A2800A28A28039FF00166926E6017710265886180EEBFF00D6AE44 + E1D723AF7AF4DEB5C7F887C3E6C4B5D5B0CC04E5D3FB9FFD6A00E74F14548406 + 048FC454740051451400B9346E34945002EEA375251400EDF49BA928A005DD46 + E34945001451450014514B8C75A0000C735BDE1BD08DF4A2E675FF004743C023 + EF9FF0A6683E1E7D45C4F38296C0F1D8BFB0F6F7FF0023B54458D151142AA8C0 + 007005003A8A28A0028A28A0028A28A0028A28A0028A28A0028A28A006BC6B20 + C30C8A89A2914FEEA4007F75867F5A9E8A008D2462DB59083EA3A54948485192 + 703DEA95DEB16D6A0E64527D8D005EA4660AA493803924D63A6A779740B5BDAB + B2F50C70A0FD33D6966B1D42FC08E79638606FBE1092D8F4E98A00D70430041C + 83D08A5A6A208D15546154600A75001451450014514500145145001451450014 + 5145001451450014514500145145001451450014514500145145001451450014 + 8402082320F634B4500725AE7861A166B9B25DC9C9688751F4AE7301BD9ABD42 + B1358F0CC3A8132C2441707A9FE16FAD007104114956EF2CA7D3E4F2EE62287B + 1EA0FD0D57DA0F439A006514A411494005145140051451400514B834A109A006 + D285269D80BEE7DAB4B4DF0F5DEA5860BE4C3FDF71D7E83BD0066A29660880B3 + 938000C926BA8D17C298DB3DF0C9EA21FF001FF0AD8D2F43B6D286635DF29EB2 + 3F5FC3D2B42801000A0003007402968A2800A28A2800A28A2800A28A2800A28A + 2800A2AB5DDE1B6E90CB29FF0061091FA5471DFB940F2C0F12919C91D07BFA7E + 340176992CC90A16760ABEA6A38AF6298E15A96485667CBA2C8BE8C338A00A87 + 59490E2DE192E0E71945E01F73DA973A8DC0FBB1DAA9E0EE3B987BE071FAD685 + 14019CBA3AC9CDD4D25CB1FF0068AAFE007F8D5A8ECADE160C90468C3F8820CF + E753D14005145140051451400514514005145140051451400514514005145140 + 0514514005145140051451400514514005145140051451400514514005145140 + 0514514011CD047731949516443FC2C322B06FBC1D0CB96B590C2DFDD6E57FC6 + BA2A2803CFEEB41D42D33BADDA45FEF47F30FD2B3D860904153DC1AF50A8E5B7 + 8A7189234907A3A83401E61462BD0E4D074F94E5AD231FEE8DBFCA99FF0008DE + 9BFF003EA3FEFA6FF1A00E0401EB4B91EE6BBE1E1CD394F16ABF8B13FD6ACC5A + 6DA418F2EDA25C770833401C05BD95CDD7FA8B7793DC2922B5AD3C21773E0DC4 + 8B02FA7DE6FF000AECA8A00CCB0F0ED95861847E6C83F8E4E7F21D2B4E8A2800 + A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A28021FB24201 + 0B12213DD540351C36F34193E6897DB6E3FAD5AA2802BB5EC48FB1DB637A1A9D + 5830C839148E8AE30CA187A119A88DAA0CF9798CFF00B278FCA8027A2991875E + 18861D88E29F4005145472CE90805D82E4814012514514005145140051451400 + 5145140051451400514514005145140051451400514514005145140051451400 + 5145140051451400514514005145140051451400514514005145140051451400 + 514514005145140051451400514514005145140051451400514514005149D2A0 + 96FEDE1077CAA3F1A00B145654DE25B287FE5A6E3ED47F6BDC4AE122B09CB1FE + FA151F99C0A00D5A2B39A6D45A2DCB6D1ABFF759F91FD29B1D9DFCDCDC5DAC40 + 9E5215CF1F53FE1401A45828C9200F7A89EF208FEF4A83F1AA8BA1C25899659E + 707B3BE00FCB153C3A5DA40432409B874661B88FC4D0044FAD5A2B84593CC73D + 150649A8CEA17571B8436928C7FCF41B3F9D69D14018823D5A7C9D91C183D247 + EBFF007CE69F16872CB3C735E5C997690C224185C8F53DC7E55B145001451450 + 0145145001451450014514500145145001451450014514500145145001451450 + 0145145001451450014514500145145001451450014514500145145001451450 + 0145145001451450014514500145145001451450014514500145145001451450 + 01451450043776A9796EF139650C31B90E08F7158B0F826C5242D2CD757408C6 + C965C01EFF0028068A280362DEC2DAD1CB416F142C46098D02923F0AB1451400 + 5145140051451400514514005145140051451400514514005145140051451400 + 51451401FFD9} + Stretch = True + end + object QRImage2: TQRImage + Left = 515 + Top = 16 + Width = 216 + Height = 55 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 145.520833333333 + 1362.60416666667 + 42.3333333333333 + 571.5) + Picture.Data = { + 0A544A504547496D61676539040000FFD8FFE000104A46494600010101006000 + 600000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC0001108003700A703012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD53 + A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800A28A2800 + A28A2800A28A2800A29A5C038EA7D051400EA28A2800A28A2800A28A2800A28A + 2800A28A2800A28A2800A28A2800A28A2800A2A379953BE4FA0A88CED21C20C5 + 004ECE169BB99CF1C0A448B03E639A900C50022A851453A8A00CC8B5375E1D43 + 7B8AB31EA113F53B4FBD65BC4E87E6523EA29B5AF2A606EACA8FF7581FA1A7D7 + 3E091D0E2A54BA953A39A5C806DD1590BA8CCBD483F51522EA920EAAA6A79581 + A745677F6A9FF9E7FAD2FF006AFF00D33FD68E560685159DFDABFF004CFF005A + 43AAB7641472B034A8ACA3A94A7D05235D4AC39738F6A39581AA580EA40A89EE + A24FE2CFD39ACD559253C066AB11D8C8C3E62168B25B8123DFFF00757F3A6EF9 + 66F53EC2A68ECD13AE58FBD4E005180302969D00AF1DAFF7CFE02AC2A8518031 + 4B45200A28A2800A28A280108047233513DA44FD507E14514010B69919E84AD4 + 4DA51ED27E628A2AB9980C3A64A3A1534C3A74C06703F3A28A7CCC03FB3E6CE3 + 033F5A51A6CDE83F3A28A39980E1A64A7A9514F1A51EEE3F014514B99812A699 + 12F525AA74B6893A20FC79A28A576048062968A2900514514005145140051451 + 40051451401FFFD9} + Stretch = True + end + object QRShape1: TQRShape + Left = 488 + Top = 0 + Width = 33 + Height = 683 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 1807.10416666667 + 1291.16666666667 + 0 + 87.3125) + Shape = qrsVertLine + end + object QRImage1: TQRImage + Left = 515 + Top = 0 + Width = 22 + Height = 36 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 95.25 + 1362.60416666667 + 0 + 58.2083333333333) + AutoSize = True + Picture.Data = { + 0A544A504547496D616765E9040000FFD8FFE000104A46494600010101006000 + 600000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC00011080024001603012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD53 + AADA96A36DA469F737D79325BDA5BC6D2CB2C870A8A06493547C4FE2ED13C15A + 61D475FD5ACF47B10C13ED17B32C49B8F4192793ED5E41AF788A3F8D13F8A974 + 9D5226D0BC3B016B036D3022FB504412ACA707E68A33B001D0B64F615854AAA1 + A2D65D8A9D3A91A6AA72BB3BA4EDA69BEBE47A87C3D7D56E7C3ED7DABCD2B4D7 + F732DDC304E815ADA07626288E3B84C673CE491DA8AD8D0F534D6B45B0D423FF + 0057776F1CEBF4650DFD68AD20AD15ADC85B1F187ED3BE1ED3BE257C5CD62D3C + 51717CBA76892E9F696AB6F7D15BC36904F6F3CB35DBA4887CC0AF1C6A402BC1 + C67A57CC3AB7C7FD4B5ABBF0DADB68BA0F875F48B84916FB48B4F2269801B4EF + 20E4A91D477CD7E877ED0BFB25F837F68836D7BABFDA74DD72D63F2A1D4AC580 + 764E48470410CA092477193CD7E6F4F6DA17C2AD17C4763A8DD5BC9E39B6D461 + 822D36E6C5BCCB16B7B862CDBD86D2AE8ABF74F20E318E6BE1F34A3568D5E75A + 2776DDF7B6A97AF447F54F0466197E6B96BC1B6E5521184230E576839AE494D6 + AD38BD6736D24B67AB4DFE8DFECD7FB417833E21F85B4DF0EE9BA9B7F6D68FA6 + 40B776F7319889DAAA8CC84F0CA1B03F11EB457C81FB39D978AFF695F8BDE28F + 15DB5B5A69689A7AC3737369098ADC485A3DA800EAC42331FA7B8A2BDDC1632B + D6A2A5C975AD9ED74BC8FCAB88385B2ACA31BF5458BE56A31E68BF79A938A6D7 + 32493D76D363F4CABCD3E23FECDFF0DFE2CEAB1EA7E29F0AD9EA5A9200BF6B05 + A295D4740CC841603DF34515ED4E11A91E59ABAF33F37C2E2ABE12AAAB87A8E1 + 2EF16D3FBD1D97847C1BA1F80B438347F0EE956BA3E990FDCB5B48C2203DC9C7 + 527B93C9A28A2AD25156473CE73AB273A8DB6F76F56CFFD9} + end + object QRLabel1: TQRLabel + Left = 539 + Top = 8 + Width = 184 + Height = 34 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 89.9583333333333 + 1426.10416666667 + 21.1666666666667 + 486.833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Informática D.J.' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -21 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + WordWrap = True + FontSize = 16 + end + object QRLabel2: TQRLabel + Left = 563 + Top = 34 + Width = 111 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1489.60416666667 + 89.9583333333333 + 293.6875) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = '· Servicio Técnico ·' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel3: TQRLabel + Left = 518 + Top = 504 + Width = 118 + Height = 24 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 63.5 + 1370.54166666667 + 1333.5 + 312.208333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Comentarios:' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -16 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = False + WordWrap = True + FontSize = 12 + end + object QRLabel4: TQRLabel + Left = 518 + Top = 328 + Width = 232 + Height = 24 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 63.5 + 1370.54166666667 + 867.833333333333 + 613.833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Descripción del Problema:' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = False + WordWrap = True + FontSize = 12 + end + object QRLabel5: TQRLabel + Left = 518 + Top = 176 + Width = 67 + Height = 24 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 63.5 + 1370.54166666667 + 465.666666666667 + 177.270833333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Equipo:' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = False + WordWrap = True + FontSize = 12 + end + object QRShape2: TQRShape + Left = 518 + Top = 530 + Width = 17 + Height = 145 + Frame.Color = clGray + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 383.645833333333 + 1370.54166666667 + 1402.29166666667 + 44.9791666666667) + Pen.Color = clGray + Shape = qrsVertLine + end + object QRShape3: TQRShape + Left = 518 + Top = 354 + Width = 17 + Height = 145 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 383.645833333333 + 1370.54166666667 + 936.625 + 44.9791666666667) + Shape = qrsVertLine + end + object QRShape4: TQRShape + Left = 518 + Top = 202 + Width = 17 + Height = 121 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 320.145833333333 + 1370.54166666667 + 534.458333333333 + 44.9791666666667) + Shape = qrsVertLine + end + object QRShape5: TQRShape + Left = 638 + Top = 518 + Width = 364 + Height = 1 + Frame.Color = clNone + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Frame.Style = psClear + Size.Values = ( + 2.64583333333333 + 1688.04166666667 + 1370.54166666667 + 963.083333333333) + Brush.Style = bsClear + Pen.Color = clGray + Shape = qrsHorLine + end + object QRShape6: TQRShape + Left = 758 + Top = 330 + Width = 249 + Height = 25 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 66.1458333333333 + 2005.54166666667 + 873.125 + 658.8125) + Shape = qrsHorLine + end + object QRShape7: TQRShape + Left = 590 + Top = 178 + Width = 417 + Height = 25 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 66.1458333333333 + 1561.04166666667 + 470.958333333333 + 1103.3125) + Shape = qrsHorLine + end + object QRShape8: TQRShape + Left = 758 + Top = 58 + Width = 249 + Height = 1 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 2.64583333333333 + 2005.54166666667 + 153.458333333333 + 658.8125) + Shape = qrsHorLine + end + object QRShape9: TQRShape + Left = 758 + Top = 58 + Width = 1 + Height = 109 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 288.395833333333 + 2005.54166666667 + 153.458333333333 + 2.64583333333333) + Shape = qrsVertLine + end + object Nombre: TQRLabel + Left = 766 + Top = 66 + Width = 50 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2026.70833333333 + 174.625 + 132.291666666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Nombre:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object Dir1: TQRLabel + Left = 766 + Top = 84 + Width = 59 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2026.70833333333 + 222.25 + 156.104166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Dirección:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object Dir2: TQRLabel + Left = 766 + Top = 100 + Width = 59 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2026.70833333333 + 264.583333333333 + 156.104166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Dirección:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object Fecha: TQRLabel + Left = 870 + Top = 46 + Width = 40 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2301.875 + 121.708333333333 + 105.833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Fecha' + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + Transparent = False + WordWrap = True + FontSize = 10 + end + object Telefono: TQRLabel + Left = 766 + Top = 124 + Width = 53 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2026.70833333333 + 328.083333333333 + 140.229166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Teléfono:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object email: TQRLabel + Left = 766 + Top = 140 + Width = 40 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2026.70833333333 + 370.416666666667 + 105.833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'e-mail:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRMemo1: TQRMemo + Left = 534 + Top = 358 + Width = 465 + Height = 129 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 341.3125 + 1412.875 + 947.208333333333 + 1230.3125) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = False + AutoStretch = False + Color = clWhite + Transparent = True + WordWrap = True + FontSize = 10 + end + object CPU: TQRLabel + Left = 538 + Top = 216 + Width = 28 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1423.45833333333 + 571.5 + 74.0833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'CPU' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object RAM: TQRLabel + Left = 538 + Top = 240 + Width = 34 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1423.45833333333 + 635 + 89.9583333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'RAM:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object HD: TQRLabel + Left = 538 + Top = 264 + Width = 23 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1423.45833333333 + 698.5 + 60.8541666666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'HD:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object VIDEO: TQRLabel + Left = 538 + Top = 288 + Width = 45 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 1423.45833333333 + 762 + 119.0625) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'VIDEO:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel6: TQRLabel + Left = 834 + Top = 208 + Width = 88 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2206.625 + 550.333333333333 + 232.833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Complementos' + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clGray + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + Transparent = False + WordWrap = True + FontSize = 10 + end + object CD: TQRLabel + Left = 834 + Top = 232 + Width = 19 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2206.625 + 613.833333333333 + 50.2708333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'CD' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object TSonido: TQRLabel + Left = 834 + Top = 256 + Width = 19 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2206.625 + 677.333333333333 + 50.2708333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'CD' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object TTV: TQRLabel + Left = 834 + Top = 276 + Width = 19 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2206.625 + 730.25 + 50.2708333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'CD' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object TRED: TQRLabel + Left = 834 + Top = 296 + Width = 19 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 2206.625 + 783.166666666667 + 50.2708333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'CD' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRShape11: TQRShape + Left = 0 + Top = 561 + Width = 505 + Height = 9 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 23.8125 + 0 + 1484.3125 + 1336.14583333333) + Pen.Style = psDashDot + Shape = qrsHorLine + end + object QRImage5: TQRImage + Left = 3 + Top = 568 + Width = 22 + Height = 36 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 95.25 + 7.9375 + 1502.83333333333 + 58.2083333333333) + AutoSize = True + Picture.Data = { + 0A544A504547496D616765E9040000FFD8FFE000104A46494600010101006000 + 600000FFDB0043000302020302020303030304030304050805050404050A0707 + 06080C0A0C0C0B0A0B0B0D0E12100D0E110E0B0B1016101113141515150C0F17 + 1816141812141514FFDB00430103040405040509050509140D0B0D1414141414 + 1414141414141414141414141414141414141414141414141414141414141414 + 14141414141414141414141414FFC00011080024001603012200021101031101 + FFC4001F0000010501010101010100000000000000000102030405060708090A + 0BFFC400B5100002010303020403050504040000017D01020300041105122131 + 410613516107227114328191A1082342B1C11552D1F02433627282090A161718 + 191A25262728292A3435363738393A434445464748494A535455565758595A63 + 6465666768696A737475767778797A838485868788898A92939495969798999A + A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 + D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 + 01010101010101010000000000000102030405060708090A0BFFC400B5110002 + 0102040403040705040400010277000102031104052131061241510761711322 + 328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 + 292A35363738393A434445464748494A535455565758595A636465666768696A + 737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 + A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 + E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00FD53 + AADA96A36DA469F737D79325BDA5BC6D2CB2C870A8A06493547C4FE2ED13C15A + 61D475FD5ACF47B10C13ED17B32C49B8F4192793ED5E41AF788A3F8D13F8A974 + 9D5226D0BC3B016B036D3022FB504412ACA707E68A33B001D0B64F615854AAA1 + A2D65D8A9D3A91A6AA72BB3BA4EDA69BEBE47A87C3D7D56E7C3ED7DABCD2B4D7 + F732DDC304E815ADA07626288E3B84C673CE491DA8AD8D0F534D6B45B0D423FF + 0057776F1CEBF4650DFD68AD20AD15ADC85B1F187ED3BE1ED3BE257C5CD62D3C + 51717CBA76892E9F696AB6F7D15BC36904F6F3CB35DBA4887CC0AF1C6A402BC1 + C67A57CC3AB7C7FD4B5ABBF0DADB68BA0F875F48B84916FB48B4F2269801B4EF + 20E4A91D477CD7E877ED0BFB25F837F68836D7BABFDA74DD72D63F2A1D4AC580 + 764E48470410CA092477193CD7E6F4F6DA17C2AD17C4763A8DD5BC9E39B6D461 + 822D36E6C5BCCB16B7B862CDBD86D2AE8ABF74F20E318E6BE1F34A3568D5E75A + 2776DDF7B6A97AF447F54F0466197E6B96BC1B6E5521184230E576839AE494D6 + AD38BD6736D24B67AB4DFE8DFECD7FB417833E21F85B4DF0EE9BA9B7F6D68FA6 + 40B776F7319889DAAA8CC84F0CA1B03F11EB457C81FB39D978AFF695F8BDE28F + 15DB5B5A69689A7AC3737369098ADC485A3DA800EAC42331FA7B8A2BDDC1632B + D6A2A5C975AD9ED74BC8FCAB88385B2ACA31BF5458BE56A31E68BF79A938A6D7 + 32493D76D363F4CABCD3E23FECDFF0DFE2CEAB1EA7E29F0AD9EA5A9200BF6B05 + A295D4740CC841603DF34515ED4E11A91E59ABAF33F37C2E2ABE12AAAB87A8E1 + 2EF16D3FBD1D97847C1BA1F80B438347F0EE956BA3E990FDCB5B48C2203DC9C7 + 527B93C9A28A2AD25156473CE73AB273A8DB6F76F56CFFD9} + end + object QRLabel7: TQRLabel + Left = 27 + Top = 568 + Width = 184 + Height = 34 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 89.9583333333333 + 71.4375 + 1502.83333333333 + 486.833333333333) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Informática D.J.' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -21 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + WordWrap = True + FontSize = 16 + end + object QRLabel8: TQRLabel + Left = 51 + Top = 594 + Width = 111 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 134.9375 + 1571.625 + 293.6875) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = '· Servicio Técnico ·' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel9: TQRLabel + Left = 288 + Top = 609 + Width = 95 + Height = 17 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 44.9791666666667 + 762 + 1611.3125 + 251.354166666667) + Alignment = taLeftJustify + AlignToBand = False + AutoSize = True + AutoStretch = False + Caption = 'Nº de Recogida:' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + object QRLabel10: TQRLabel + Left = 8 + Top = 641 + Width = 489 + Height = 41 + Frame.Color = clBlack + Frame.DrawTop = False + Frame.DrawBottom = False + Frame.DrawLeft = False + Frame.DrawRight = False + Size.Values = ( + 108.479166666667 + 21.1666666666667 + 1695.97916666667 + 1293.8125) + Alignment = taCenter + AlignToBand = False + AutoSize = False + AutoStretch = False + Caption = + 'Para poder retirar el equipo/componente, de nuestro servicio téc' + + 'nico, es necesaria la presentación de este resguardo.' + Color = clWhite + Transparent = False + WordWrap = True + FontSize = 10 + end + end + end +end diff --git a/TPV_SATprint.h b/TPV_SATprint.h new file mode 100644 index 0000000..9ea37ae --- /dev/null +++ b/TPV_SATprint.h @@ -0,0 +1,68 @@ +//--------------------------------------------------------------------------- + +#ifndef TPV_SATprintH +#define TPV_SATprintH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm3 : public TForm +{ +__published: // IDE-managed Components + TQuickRep *QuickRep1; + TQRBand *QRBand1; + TQRShape *QRShape1; + TQRImage *QRImage1; + TQRLabel *QRLabel1; + TQRImage *QRImage2; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRShape *QRShape2; + TQRShape *QRShape3; + TQRShape *QRShape4; + TQRShape *QRShape5; + TQRShape *QRShape6; + TQRShape *QRShape7; + TQRImage *QRImage3; + TQRShape *QRShape8; + TQRShape *QRShape9; + TQRLabel *Nombre; + TQRLabel *Dir1; + TQRLabel *Dir2; + TQRLabel *Fecha; + TQRLabel *Telefono; + TQRLabel *email; + TQRMemo *QRMemo1; + TQRLabel *CPU; + TQRLabel *RAM; + TQRLabel *HD; + TQRLabel *VIDEO; + TQRLabel *QRLabel6; + TQRShape *QRShape10; + TQRLabel *CD; + TQRLabel *TSonido; + TQRLabel *TTV; + TQRLabel *TRED; + TQRShape *QRShape11; + TQRImage *QRImage4; + TQRImage *QRImage5; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRLabel *QRLabel10; +private: // User declarations +public: // User declarations + __fastcall TForm3(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm3 *Form3; +//--------------------------------------------------------------------------- +#endif diff --git a/TPV_Ventas.bpr b/TPV_Ventas.bpr new file mode 100644 index 0000000..e2ea685 --- /dev/null +++ b/TPV_Ventas.bpr @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=1 +MajorVer=1 +MinorVer=0 +Release=0 +Build=4 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD Soft. +FileDescription= +FileVersion=1.0.0.4 +InternalName= +LegalCopyright= +LegalTrademarks=JD soft. +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=www.infdj.com +e-mail=jd@infdj.com + +[Excluded Packages] +$(BCB)\Projects\Bpl\Dialup.bpl=RAS Tools + +[HistoryLists\hlIncludePath] +Count=2 +Item0=$(BCB)\include;$(BCB)\include\vcl;..\VCLs\include +Item1=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=3 +Item0=C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item1=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item2=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=2 +Item0=_DEBUG;EXIST_CFG +Item1=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/TPV_Ventas.cpp b/TPV_Ventas.cpp new file mode 100644 index 0000000..024ac87 --- /dev/null +++ b/TPV_Ventas.cpp @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("TPV_Ventas.res"); +USEFORM("TpvVentas.cpp", Ventas); +USEFORM("TDlgBuscar.cpp", DlgBuscar); +USEFORM("TpvVntFctPrint.cpp", QRMDFacturaVnt); /* TQuickRep: File Type */ +USEFORM("TpvVntAlbPrint.cpp", QRMDFacturaVnt1); /* TQuickRep: File Type */ +USEFORM("ListInit.cpp", AcercaDe); +USEFORM("TpvCFG.cpp", CFG); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TAcercaDe), &AcercaDe); + Application->CreateForm(__classid(TVentas), &Ventas); + Application->CreateForm(__classid(TCFG), &CFG); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/TPV_Ventas.exe b/TPV_Ventas.exe new file mode 100644 index 0000000..4e7091e Binary files /dev/null and b/TPV_Ventas.exe differ diff --git a/TPV_Ventas.res b/TPV_Ventas.res new file mode 100644 index 0000000..69298d5 Binary files /dev/null and b/TPV_Ventas.res differ diff --git a/TpvAccessControl.cpp b/TpvAccessControl.cpp new file mode 100644 index 0000000..d9bc361 --- /dev/null +++ b/TpvAccessControl.cpp @@ -0,0 +1,37 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TpvAccessControl.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TAccessControl *AccessControl; +//--------------------------------------------------------------------------- +__fastcall TAccessControl::TAccessControl(TComponent* Owner) + : TForm(Owner) +{ +} +//--------------------------------------------------------------------------- +void __fastcall TAccessControl::MakePost(TObject *Sender) +{ +/* + if ( TbAcceso -> State == dsInsert || TbAcceso -> State == dsEdit ) + TbAcceso -> Post(); +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TAccessControl::SpeedButton1Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TAccessControl::DBEdit1KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ +// if ( Key == VK_RETURN ) TbAcceso->Post(); +} +//--------------------------------------------------------------------------- + diff --git a/TpvAccessControl.dfm b/TpvAccessControl.dfm new file mode 100644 index 0000000..11cf8b2 --- /dev/null +++ b/TpvAccessControl.dfm @@ -0,0 +1,669 @@ +object AccessControl: TAccessControl + Left = 376 + Top = 164 + Width = 640 + Height = 480 + HorzScrollBar.Visible = False + VertScrollBar.Visible = False + Caption = 'Control de acceso' + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Verdana' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + Scaled = False + PixelsPerInch = 96 + TextHeight = 16 + object StatusBar1: TStatusBar + Left = 0 + Top = 427 + Width = 632 + Height = 22 + Panels = < + item + Width = 550 + end + item + Alignment = taCenter + Width = 50 + end> + SimplePanel = False + end + object DBGrid1: TDBGrid + Left = 0 + Top = 34 + Width = 297 + Height = 393 + Align = alLeft + DataSource = DsEmpleados + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit] + TabOrder = 1 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clWindowText + TitleFont.Height = -13 + TitleFont.Name = 'Verdana' + TitleFont.Style = [] + Columns = < + item + Expanded = False + FieldName = 'CodCliente1' + Title.Alignment = taCenter + Title.Caption = 'ID' + Visible = True + end + item + Expanded = False + FieldName = 'Nombre' + Visible = True + end + item + Expanded = False + FieldName = 'Apellidos' + Visible = True + end> + end + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 632 + Height = 34 + Align = alTop + BorderStyle = bsSingle + TabOrder = 2 + object SpeedButton1: TSpeedButton + Left = 8 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 04000000000080000000CE0E0000D80E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777777777777777771F77771F7777777777777111F777777 + 1F7777111F777771F777777111F77711F7777777111F711F77777777711111F7 + 7777777777111F7777777777711111F777777777111F71F77777771111F77711 + F77771111F7777711F77711F7777777711F77777777777777777} + OnClick = SpeedButton1Click + end + object SpeedButton2: TSpeedButton + Left = 108 + Top = 3 + Width = 25 + Height = 25 + Enabled = False + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 04000000000080000000CE0E0000C40E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777700000777770000070F000777770F00070F000777770F + 0007000000070000000700F000000F00000700F000700F00000700F000700F00 + 00077000000000000077770F00070F0007777700000700000777777000777000 + 77777770F07770F0777777700077700077777777777777777777} + end + object BusqSig: TSpeedButton + Left = 134 + Top = 3 + Width = 25 + Height = 25 + Enabled = False + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0F33333333370E337F333FF3F3337F3E0F330030333 + 70E337F3377F7FF337F3E0F33003003370E337F3377F77FF37F3E0F330030003 + 70E337F3377F777337F3E0F33003003370E337F3377F773337F3E0F330030333 + 70E337F33773733337F3E0F33333333370E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object SpeedButton4: TSpeedButton + Left = 56 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000010000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F33333F33337F3E0F33333033370E337F3333FF73337F3E0F333300333 + 70E337F333FF773337F3E0F33300033370E337F33FF7773337F3E0F330000333 + 70E337F33377773337F3E0F33300033370E337F33337773337F3E0F333300333 + 70E337F33333773337F3E0F33333033370E337F33333373337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object BusqAnt: TSpeedButton + Left = 82 + Top = 3 + Width = 25 + Height = 25 + Enabled = False + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0F33333333370E337F3333F3FF337F3E0F333030033 + 70E337F3337F77F337F3E0F33003003370E337F3377F77F337F3E0F300030033 + 70E337F3777F77F337F3E0F33003003370E337F3377F77F337F3E0F333030033 + 70E337F33373773337F3E0F33333333370E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object SpeedButton6: TSpeedButton + Left = 160 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F3333F333337F3E0F33303333370E337F3337FF33337F3E0F333003333 + 70E337F33377FF3337F3E0F33300033370E337F333777FF337F3E0F333000033 + 70E337F33377773337F3E0F33300033370E337F33377733337F3E0F333003333 + 70E337F33377333337F3E0F33303333370E337F33373333337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object Label1: TLabel + Left = 400 + Top = 8 + Width = 115 + Height = 16 + Caption = 'Password Actual:' + end + object DBEdit1: TDBEdit + Left = 504 + Top = 4 + Width = 121 + Height = 24 + DataField = 'PassWord' + DataSource = DsAccess + PasswordChar = '*' + TabOrder = 0 + OnKeyUp = DBEdit1KeyUp + end + end + object ScrollBox1: TScrollBox + Left = 297 + Top = 34 + Width = 335 + Height = 393 + Align = alClient + TabOrder = 3 + object GroupBox1: TGroupBox + Left = 8 + Top = 120 + Width = 305 + Height = 105 + Caption = 'Articulos' + TabOrder = 0 + object DBCheckBox1: TDBCheckBox + Left = 160 + Top = 16 + Width = 129 + Height = 17 + Caption = 'Referencias' + DataField = 'ArtReferencias' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox2: TDBCheckBox + Left = 160 + Top = 32 + Width = 129 + Height = 17 + Caption = 'Stock Actual' + DataField = 'ArtStockActual' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox3: TDBCheckBox + Left = 160 + Top = 80 + Width = 137 + Height = 17 + Caption = 'Ventas / Articulo' + DataField = 'ArtVentas' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox2: TGroupBox + Left = 8 + Top = 232 + Width = 305 + Height = 105 + Caption = 'Proveedores' + TabOrder = 1 + object DBCheckBox4: TDBCheckBox + Left = 160 + Top = 16 + Width = 89 + Height = 17 + Caption = 'Información' + DataField = 'ProvInformacion' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox5: TDBCheckBox + Left = 160 + Top = 48 + Width = 137 + Height = 17 + Caption = 'Cartera de Prov.' + DataField = 'ProvCartera' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox6: TDBCheckBox + Left = 160 + Top = 64 + Width = 105 + Height = 17 + Caption = 'Compras a...' + DataField = 'ProvCompras' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox3: TGroupBox + Left = 8 + Top = 344 + Width = 305 + Height = 105 + Caption = 'Clientes' + TabOrder = 2 + object DBCheckBox7: TDBCheckBox + Left = 160 + Top = 16 + Width = 89 + Height = 17 + Caption = 'Gestion de...' + DataField = 'CltGestion' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox8: TDBCheckBox + Left = 160 + Top = 48 + Width = 137 + Height = 17 + Caption = 'Cartera de Clts.' + DataField = 'CltCartera' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox9: TDBCheckBox + Left = 160 + Top = 64 + Width = 137 + Height = 17 + Caption = 'Ventas a Clientes' + DataField = 'CltVentas' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox10: TDBCheckBox + Left = 160 + Top = 80 + Width = 129 + Height = 17 + Caption = 'Informes Varios' + DataField = 'CltInformes' + DataSource = DsAccess + TabOrder = 3 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox4: TGroupBox + Left = 8 + Top = 456 + Width = 305 + Height = 105 + Caption = 'Contabilidad' + TabOrder = 3 + object DBCheckBox11: TDBCheckBox + Left = 160 + Top = 16 + Width = 137 + Height = 17 + Caption = 'Cuentas contables' + DataField = 'CtbCuentas' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox12: TDBCheckBox + Left = 160 + Top = 48 + Width = 129 + Height = 17 + Caption = 'Parte Contable' + DataField = 'CtbParte' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox13: TDBCheckBox + Left = 160 + Top = 64 + Width = 137 + Height = 17 + Caption = 'Informes Contables' + DataField = 'CtbInformes' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox5: TGroupBox + Left = 8 + Top = 568 + Width = 305 + Height = 105 + Caption = 'Compras' + TabOrder = 4 + object DBCheckBox14: TDBCheckBox + Left = 160 + Top = 32 + Width = 129 + Height = 17 + Caption = 'Informe Facturas' + DataField = 'CtbInformes' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox15: TDBCheckBox + Left = 160 + Top = 16 + Width = 89 + Height = 17 + Caption = 'Comprar' + DataField = 'CmpComprar' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox16: TDBCheckBox + Left = 160 + Top = 80 + Width = 137 + Height = 17 + Caption = 'Lista de Compra' + DataField = 'CmpListado' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox6: TGroupBox + Left = 8 + Top = 680 + Width = 305 + Height = 105 + Caption = 'Emleados' + TabOrder = 5 + object DBCheckBox17: TDBCheckBox + Left = 160 + Top = 32 + Width = 129 + Height = 17 + Caption = 'Permisos de Acceso' + DataField = 'EmpPermisos' + DataSource = DsAccess + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox18: TDBCheckBox + Left = 160 + Top = 16 + Width = 89 + Height = 17 + Caption = 'Fichas' + DataField = 'EmpFichas' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox19: TDBCheckBox + Left = 160 + Top = 80 + Width = 129 + Height = 17 + Caption = 'Graficas Ventas' + DataField = 'EmpVentas' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox20: TDBCheckBox + Left = 160 + Top = 64 + Width = 129 + Height = 17 + Caption = 'Ventas/Empleado' + DataField = 'EmpVentas' + DataSource = DsAccess + TabOrder = 3 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox7: TGroupBox + Left = 8 + Top = 792 + Width = 305 + Height = 105 + Caption = 'Ventas' + TabOrder = 6 + object DBCheckBox21: TDBCheckBox + Left = 160 + Top = 64 + Width = 110 + Height = 17 + Caption = 'Balance Diario' + DataField = 'VntBalanceD' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox22: TDBCheckBox + Left = 160 + Top = 16 + Width = 113 + Height = 17 + Caption = 'Caja del Día' + DataField = 'VntCaja' + DataSource = DsAccess + TabOrder = 1 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + object DBCheckBox24: TDBCheckBox + Left = 160 + Top = 80 + Width = 129 + Height = 17 + Caption = 'Balance Mensual' + DataField = 'VntBalanceM' + DataSource = DsAccess + TabOrder = 2 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + object GroupBox8: TGroupBox + Left = 8 + Top = 8 + Width = 305 + Height = 105 + Caption = 'Miscelanea' + TabOrder = 7 + object DBCheckBox23: TDBCheckBox + Left = 160 + Top = 80 + Width = 129 + Height = 17 + Caption = 'Configuracion' + DataField = 'MisConfigurar' + DataSource = DsAccess + TabOrder = 0 + ValueChecked = 'True' + ValueUnchecked = 'False' + OnClick = MakePost + end + end + end + object DsEmpleados: TDataSource + DataSet = TbEmpleados + Left = 208 + Top = 128 + end + object TbEmpleados: TTable + Active = True + DatabaseName = 'TpvWin' + Filter = 'Empleado > 0' + Filtered = True + ReadOnly = True + TableName = 'personas.DB' + Left = 208 + Top = 160 + object TbEmpleadosCodCliente1: TAutoIncField + FieldName = 'CodCliente1' + ReadOnly = True + end + object TbEmpleadosNombre: TStringField + FieldName = 'Nombre' + Size = 15 + end + object TbEmpleadosApellidos: TStringField + FieldName = 'Apellidos' + Size = 30 + end + object TbEmpleadosEmpleado: TIntegerField + FieldName = 'Empleado' + end + end + object TbAcceso: TTable + Active = True + DatabaseName = 'TpvWin' + IndexFieldNames = 'EnlacePersona' + MasterFields = 'CodCliente1' + MasterSource = DsEmpleados + TableName = 'AccessControl.db' + Left = 315 + Top = 204 + end + object DsAccess: TDataSource + DataSet = TbAcceso + Left = 315 + Top = 172 + end + object ElasticForm1: TElasticForm + DesignScreenWidth = 1152 + DesignScreenHeight = 864 + DesignPixelsPerInch = 96 + MinimumTrackWidth = 640 + MinimumTrackHeight = 480 + DesignFormWidth = 640 + DesignFormHeight = 480 + DesignFormClientWidth = 632 + DesignFormClientHeight = 449 + DesignFormLeft = 376 + DesignFormTop = 164 + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Verdana' + Font.Style = [] + Version = 504 + end +end diff --git a/TpvAccessControl.h b/TpvAccessControl.h new file mode 100644 index 0000000..a096455 --- /dev/null +++ b/TpvAccessControl.h @@ -0,0 +1,88 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvAccessControlH +#define TpvAccessControlH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" +//--------------------------------------------------------------------------- +class TAccessControl : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TDataSource *DsEmpleados; + TTable *TbEmpleados; + TAutoIncField *TbEmpleadosCodCliente1; + TStringField *TbEmpleadosNombre; + TStringField *TbEmpleadosApellidos; + TDBGrid *DBGrid1; + TIntegerField *TbEmpleadosEmpleado; + TPanel *Panel2; + TSpeedButton *SpeedButton1; + TSpeedButton *SpeedButton2; + TSpeedButton *BusqSig; + TSpeedButton *SpeedButton4; + TSpeedButton *BusqAnt; + TSpeedButton *SpeedButton6; + TScrollBox *ScrollBox1; + TGroupBox *GroupBox1; + TDBCheckBox *DBCheckBox1; + TDBCheckBox *DBCheckBox2; + TDBCheckBox *DBCheckBox3; + TGroupBox *GroupBox2; + TDBCheckBox *DBCheckBox4; + TDBCheckBox *DBCheckBox5; + TDBCheckBox *DBCheckBox6; + TGroupBox *GroupBox3; + TDBCheckBox *DBCheckBox7; + TDBCheckBox *DBCheckBox8; + TDBCheckBox *DBCheckBox9; + TDBCheckBox *DBCheckBox10; + TGroupBox *GroupBox4; + TDBCheckBox *DBCheckBox11; + TDBCheckBox *DBCheckBox12; + TDBCheckBox *DBCheckBox13; + TGroupBox *GroupBox5; + TDBCheckBox *DBCheckBox14; + TDBCheckBox *DBCheckBox15; + TDBCheckBox *DBCheckBox16; + TGroupBox *GroupBox6; + TDBCheckBox *DBCheckBox17; + TDBCheckBox *DBCheckBox18; + TDBCheckBox *DBCheckBox19; + TDBCheckBox *DBCheckBox20; + TGroupBox *GroupBox7; + TDBCheckBox *DBCheckBox21; + TDBCheckBox *DBCheckBox22; + TDBCheckBox *DBCheckBox24; + TDBEdit *DBEdit1; + TTable *TbAcceso; + TLabel *Label1; + TDataSource *DsAccess; + TGroupBox *GroupBox8; + TDBCheckBox *DBCheckBox23; + TElasticForm *ElasticForm1; + void __fastcall MakePost(TObject *Sender); + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall DBEdit1KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); +private: // User declarations +public: // User declarations + __fastcall TAccessControl(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TAccessControl *AccessControl; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvBlcDVnt.cpp b/TpvBlcDVnt.cpp new file mode 100644 index 0000000..c65d0ac --- /dev/null +++ b/TpvBlcDVnt.cpp @@ -0,0 +1,851 @@ + //--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#include "TpvBlcDVnt.h" +#include "TpvVntClt.h" +#include "TpvVntEmpl.h" +#include "TpvVntProd.h" +#include "TpvBlcD_Print.h" +#include "Inicio1.h" +//--------------------------------------------------------------------------- +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TTpvBlDVnt *TpvBlDVnt; +//--------------------------------------------------------------------------- +__fastcall TTpvBlDVnt::TTpvBlDVnt(TComponent* Owner) + : TForm(Owner) +{ + // Inicializamos la fecha de compra ( Y el filtro, en base a esta... ) + unsigned short year, mes, dia; + ( TDateTime::CurrentDate() ).DecodeDate( &year, &mes, &dia ); + + TbVentasI -> TableName = "Ventas (caja).db"; + TbVentasC -> TableName = "Ventas (cabecera).db"; + TbFacturasC -> TableName = "Compras (cabecera).db"; + + TbVentasI -> Active = true; + TbVentasC -> Active = true; + TbFacturasC -> Active = true; + TbVentasI->Last(); + + StatusBar1->Panels->Items[1]->Text = "Recopilando datos del día..."; + + FechaCaja -> Date = TDateTime::CurrentDate(); + FechaCajaChange( 0 ); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::SpeedButton1Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TTpvBlDVnt::TbVentasICantidadx1SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx1 -> Value = TbVentasICantidadx1 -> Value * 1; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx5SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx5 -> Value = TbVentasICantidadx5 -> Value * 5; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx10SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx10 -> Value = TbVentasICantidadx10 -> Value * 10; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx25SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx25 -> Value = TbVentasICantidadx25 -> Value * 25; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx50SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx50 -> Value = TbVentasICantidadx50 -> Value * 50; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx100SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx100 -> Value = TbVentasICantidadx100 -> Value * 100; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx200SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx200 -> Value = TbVentasICantidadx200 -> Value * 200; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx500SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx500 -> Value = TbVentasICantidadx500 -> Value * 500; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx1000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx1000 -> Value = TbVentasICantidadx1000 -> Value * 1000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx2000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx2000 -> Value = TbVentasICantidadx2000 -> Value * 2000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx5000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx5000 -> Value = TbVentasICantidadx5000 -> Value * 5000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasICantidadx10000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasITotalx10000 -> Value = TbVentasICantidadx10000 -> Value * 10000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx1SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx1 -> Value = TbVentasITotalx1 -> Value / 1; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx5SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx5 -> Value = TbVentasITotalx5 -> Value / 5; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx10SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx10 -> Value = TbVentasITotalx10 -> Value / 10; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx25SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx25 -> Value = TbVentasITotalx25 -> Value / 25; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx50SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx50 -> Value = TbVentasITotalx50 -> Value / 50; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx100SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx100 -> Value = TbVentasITotalx100 -> Value / 100; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx200SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx200 -> Value = TbVentasITotalx200 -> Value / 200; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx500SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx500 -> Value = TbVentasITotalx500 -> Value / 500; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx1000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx1000 -> Value = TbVentasITotalx1000 -> Value / 1000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx2000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx2000 -> Value = TbVentasITotalx2000 -> Value / 2000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx5000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx5000 -> Value = TbVentasITotalx5000 -> Value / 5000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::TbVentasITotalx10000SetText(TField *Sender, + const AnsiString Text) +{ + Sender -> AsInteger = Text.ToInt(); + TbVentasICantidadx10000 -> Value = TbVentasITotalx10000 -> Value / 10000; + DsVentasIDataChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit1KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit2 -> SetFocus(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit2KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit3 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit3KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit4 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit4KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit5 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + + +void __fastcall TTpvBlDVnt::DBEdit5KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit6 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit6KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit7 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit7KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit8 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit8KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit9 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit9KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit10 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit10KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit11 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit11KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit12 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit12KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit25 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit25KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit1 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit13KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit14 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit14KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit15 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit15KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit16 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit16KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit17 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + + +void __fastcall TTpvBlDVnt::DBEdit17KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit18 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit18KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit19 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit19KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit20 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit20KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit21 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit21KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit22 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit22KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit23 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit23KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit24 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit24KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit26 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::DBEdit26KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + DBEdit13 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::FechaCajaChange(TObject *Sender) +{ + // Vamos al registro indicado por el DateTimePicker + if ( !( TbVentasI -> Locate( "FechaCaja", FechaCaja->DateTime, TLocateOptions() << loCaseInsensitive ) ) ) + { + // Si el caso es que no existen ventas... + if ( TbVentasI->Eof == true && TbVentasI->Eof == TbVentasI->Bof ) + { + ShowMessage( "ATENCION: El registro de ventas esta VACIO\nSi esto NO es CORRECTO, pongase en contacto\nINMEDIATAMENTE con su distibuidor." ); + FechaCaja->Enabled = false; + DBMemo1->Enabled = false; + Clientes->Enabled = false; Empleados->Enabled = false; Productos->Enabled = false; + + for ( int i=1; i<=26; i++ ) + ( (TDBEdit *)FindComponent("DBEdit"+AnsiString(i)) )->Enabled = false; + + Close(); // ...mejor salimos. + return; + } + + ShowMessage( "El día actual/seleccionado, no tiene datos de venta..." ); + // La fecha del Picker ha de cambiar (Sin provocar este evento, otra vez). + TDateTime NuevaFecha = BuscaFecha( FechaCaja->DateTime ); + if ( NuevaFecha == FechaCaja->DateTime ) return; + FechaCaja -> DateTime = NuevaFecha; + FechaCajaChange(0); + } else { + DineroEnCajaAyer(); + CalculaVentaGasto(); + } +} +//--------------------------------------------------------------------------- +TDateTime __fastcall TTpvBlDVnt::BuscaFecha( TDateTime FechaInicio ) +{ + bool Found; + unsigned short year, mes, dia; + FechaInicio.DecodeDate( &year, &mes, &dia ); + + Found = false; + while ( dia > 1 && !Found ) + { + Found = ( TbVentasI -> Locate( "FechaCaja", EncodeDate( year, mes, dia ), TLocateOptions() << loCaseInsensitive ) ); + dia--; + } + + if ( Found ) + FechaInicio = TbVentasI -> FieldByName("FechaCaja") -> AsDateTime; + + return FechaInicio; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::DineroEnCajaAyer(void) +{ + Currency TotalM; + TBookmark SavePlace; + // Marcamos el registro en el cual nos encontramos + SavePlace = TbVentasI->GetBookmark(); + + // Calculamos el Dinero En Caja (del último día) Ayer + TotalM = 0; + do + { + TbVentasI -> Prior(); + TotalM = + TbVentasI -> FieldByName("Total x1" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x5" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x10" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x25" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x50" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x100" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x200" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x500" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x1000" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x2000" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x5000" ) -> AsCurrency + + TbVentasI -> FieldByName("Total x10000" ) -> AsCurrency + + TbVentasI -> FieldByName("Total xvarios" ) -> AsCurrency ; + } while( TotalM == 0 && !TbVentasI->Bof ); + + + EnCajaAyer = TotalM; + Label27 -> Caption = TbVentasI -> FieldByName("FechaCaja") -> AsString + " ---> " + FormatCurr("###,###,###.#0", TotalM ) + " Ptas."; + + // Regresamos al registro previo a esta llamada + TbVentasI->GotoBookmark(SavePlace); + TbVentasI->FreeBookmark(SavePlace); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::ClientesClick(TObject *Sender) +{ + if ( !MenuInicio->TablaDeAcceso[3][8] ) + return; + TVntEmpl *VentasEmpl; + Visible = false; + VentasEmpl = new TVntEmpl(this); + VentasEmpl -> MinFechaFact = FechaCaja -> DateTime; + VentasEmpl -> MaxFechaFact = FechaCaja -> DateTime; + VentasEmpl -> MinFecha -> DateTime = FechaCaja -> DateTime; + VentasEmpl -> MaxFecha -> DateTime = FechaCaja -> DateTime; + VentasEmpl -> MinFecha -> Enabled = false; + VentasEmpl -> MaxFecha -> Enabled = false; + VentasEmpl -> ShowModal(); + Visible = true; + delete VentasEmpl; +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvBlDVnt::EmpleadosClick(TObject *Sender) +{ + if ( !MenuInicio->TablaDeAcceso[3][8] ) + return; + + TVntClt *TpvVntClt; + Visible = false; + TpvVntClt = new TVntClt(this); + TpvVntClt -> MinFechaFact = FechaCaja -> DateTime; + TpvVntClt -> MaxFechaFact = FechaCaja -> DateTime; + TpvVntClt -> MinFecha -> DateTime = FechaCaja -> DateTime; + TpvVntClt -> MaxFecha -> DateTime = FechaCaja -> DateTime; + TpvVntClt -> MinFecha -> Enabled = false; + TpvVntClt -> MaxFecha -> Enabled = false; + TpvVntClt -> ShowModal(); + Visible = true; + delete TpvVntClt; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::ProductosClick(TObject *Sender) +{ + if ( !MenuInicio->TablaDeAcceso[1][8] ) + return; + + TVntProd *TpvVntProd; + Visible = false; + TpvVntProd = new TVntProd(this); + TpvVntProd -> MinFechaFact = FechaCaja -> DateTime; + TpvVntProd -> MaxFechaFact = FechaCaja -> DateTime; + TpvVntProd -> MinFecha -> DateTime = FechaCaja -> DateTime; + TpvVntProd -> MaxFecha -> DateTime = FechaCaja -> DateTime; + TpvVntProd -> MinFecha -> Enabled = false; + TpvVntProd -> MaxFecha -> Enabled = false; + TpvVntProd -> FiltrarFacturas(); + TpvVntProd -> ShowModal(); + Visible = true; + delete TpvVntProd; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::CalculaVentaGasto(void) +{ + //--------------------------------------------------------------------------- + // VENTAS C (AFTERopen) + //--------------------------------------------------------------------------- + + unsigned short H, M, S, mS, i; + char buffer[80]; + TDateTime AjusteMinimo = FechaCaja->DateTime; + Currency Parcial; +// TDateTime AjusteMaximo = FechaCaja->DateTime + 1; + + for ( i = 0; i<25; i++ ) + VentasHora[ i ] = 0; + + + TbVentasC->FilterOptions = TbVentasC->FilterOptions << foCaseInsensitive; +// TbVentasC->Filter = "([FechaFactura] >= '" + AjusteMinimo + "' AND [FechaFactura] < '" + AjusteMaximo + "')"; + TbVentasC->Filter = "([FechaFactura] = '" + AjusteMinimo + "')"; + TbVentasC->Filtered = true; + + StatusBar1->Panels->Items[1]->Text = "Discriminando ventas"; + + // Reccorremos la tabla hasta obtener los gastos... + Gastos = 0; + VentasE = 0; + TbVentasC -> First(); + while ( ! TbVentasC -> Eof ) + { + TbVentasC -> FieldByName( "HoraFactura" ) -> AsDateTime.DecodeTime( &H, &M, &S, &mS ); +// VentasHora[ H ] += TbVentasC -> FieldByName( "Cantidad5" ) -> AsCurrency; + Parcial = TbVentasC -> FieldByName( "TotalSin" ) -> AsCurrency + TbVentasC -> FieldByName( "TotalIva" ) -> AsCurrency; + VentasHora[ H ] += Parcial; + if ( TbVentasC->FieldByName("FormaPago")->AsInteger == 0 ) VentasE += Parcial; + TbVentasC -> Next(); + } + + StatusBar1->Panels->Items[1]->Text = "Colocando datos en el panel"; + VentasHora[25] = 0; + MDatos -> Lines -> Clear(); + MDatos -> Lines -> Add( "Venta según Horas" ); + Chart1 -> Series[0] -> Clear(); + for ( i = 0; i < 24; i++ ) + { + sprintf( buffer, "[%02i:00 -> %02i:00] #", i, (i+1)%24 ); + MDatos -> Lines -> Add( AnsiString( buffer ) + FormatCurr("###,###,###.#0", VentasHora[i] ) ); + VentasHora[25] += VentasHora[i]; + + // Metemos los datos en la gráfica... + Chart1 -> Series[0] -> AddXY(i, VentasHora[i], i, clTeeColor); + } + LVentasT -> Caption = FormatCurr("###,###,###.#0", VentasHora[25]); + LVentasE -> Caption = FormatCurr("###,###,###.#0", VentasE); + StatusBar1->Panels->Items[1]->Text = ""; + + //--------------------------------------------------------------------------- + // FACTURAS C (AFTERopen) + //--------------------------------------------------------------------------- + + TbFacturasC->FilterOptions = TbFacturasC->FilterOptions << foCaseInsensitive; + TbFacturasC->Filter = "([FechaFactura] = '" + FechaCaja->DateTime + "')"; + TbFacturasC->Filtered = true; + + StatusBar1->Panels->Items[1]->Text = "Obteniendo gastos"; + + // Reccorremos la tabla hasta obtener los gastos... + Currency GastosE = 0; + Gastos = 0; + TbFacturasC -> First(); + while ( ! TbFacturasC -> Eof ) + { + Parcial = TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency + + TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency ; + Gastos += Parcial; + + if ( TbFacturasC->FieldByName( "FormaPago" )->AsInteger == 0 ) + GastosE += Parcial; + + + //TbFacturasC -> FieldByName( "Cantidad5" ) -> AsCurrency; + TbFacturasC -> Next(); + } + + StatusBar1->Panels->Items[1]->Text = ""; + + LGastos -> Caption = FormatCurr("###,###,###.#0", Gastos ); + LGastosE -> Caption = FormatCurr("###,###,###.#0", GastosE ); + Currency Beneficio = (VentasHora[25] - Gastos ); + LBeneficio->Caption = FormatCurr("###,###,###.#0", Beneficio ); + if ( Beneficio < 0 ) LBeneficio->Font->Color = clRed; else LBeneficio->Font->Color = clGreen; + + Beneficio = (VentasE - GastosE ); + LBeneficioE->Caption = FormatCurr("###,###,###.#0", Beneficio ); + if ( Beneficio < 0 ) LBeneficioE->Font->Color = clRed; else LBeneficioE->Font->Color = clGreen; + EnCaja->Caption = FormatCurr("###,###,###.#0", Beneficio + EnCajaAyer ); +} +//--------------------------------------------------------------------------- + + +void __fastcall TTpvBlDVnt::FormClose(TObject *Sender, + TCloseAction &Action) +{ + if ( TbVentasI -> State == dsEdit ||TbVentasI -> State == dsInsert ) + TbVentasI -> Post(); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::DsVentasIDataChange(TObject *Sender, + TField *Field) +{ + SpeedButton4->Enabled = !TbVentasI->Bof; + SpeedButton6->Enabled = !TbVentasI->Eof; + + Currency TotalC, TotalM; + + // Sumamos los totales monetarios... + TotalC = + TbVentasI -> FieldByName("Cantidad x1" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x5" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x10" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x25" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x50" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x100" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x200" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x500" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x1000" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x2000" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x5000" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad x10000" )->AsCurrency + + TbVentasI -> FieldByName("Cantidad xvarios" )->AsCurrency; + TotalM = + TbVentasI -> FieldByName("Total x1" )->AsCurrency + + TbVentasI -> FieldByName("Total x5" )->AsCurrency + + TbVentasI -> FieldByName("Total x10" )->AsCurrency + + TbVentasI -> FieldByName("Total x25" )->AsCurrency + + TbVentasI -> FieldByName("Total x50" )->AsCurrency + + TbVentasI -> FieldByName("Total x100" )->AsCurrency + + TbVentasI -> FieldByName("Total x200" )->AsCurrency + + TbVentasI -> FieldByName("Total x500" )->AsCurrency + + TbVentasI -> FieldByName("Total x1000" )->AsCurrency + + TbVentasI -> FieldByName("Total x2000" )->AsCurrency + + TbVentasI -> FieldByName("Total x5000" )->AsCurrency + + TbVentasI -> FieldByName("Total x10000" )->AsCurrency + + TbVentasI -> FieldByName("Total xvarios" )->AsCurrency; + + Label15->Caption = TotalC; + Label16->Caption = TotalM; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvBlDVnt::SpeedButton7Click(TObject *Sender) +{ + TQRBlcD_Print *QRResumenFact; + QRResumenFact = new TQRBlcD_Print(this); + QRResumenFact->Preview(); + delete QRResumenFact; +} +//--------------------------------------------------------------------------- + diff --git a/TpvBlcDVnt.dfm b/TpvBlcDVnt.dfm new file mode 100644 index 0000000..f50523c Binary files /dev/null and b/TpvBlcDVnt.dfm differ diff --git a/TpvBlcDVnt.h b/TpvBlcDVnt.h new file mode 100644 index 0000000..0a7c88c --- /dev/null +++ b/TpvBlcDVnt.h @@ -0,0 +1,267 @@ +//--------------------------------------------------------------------------- +#ifndef TpvBlcDVntH +#define TpvBlcDVntH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" +//--------------------------------------------------------------------------- +class TTpvBlDVnt : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TGroupBox *GroupBox1; + TLabel *Label1; + TLabel *Label2; + TLabel *Label3; + TLabel *Label4; + TLabel *Label5; + TLabel *Label6; + TLabel *Label7; + TLabel *Label8; + TLabel *Label9; + TLabel *Label10; + TLabel *Label11; + TDBEdit *DBEdit1; + TDBEdit *DBEdit2; + TDBEdit *DBEdit3; + TDBEdit *DBEdit4; + TDBEdit *DBEdit5; + TDBEdit *DBEdit6; + TDBEdit *DBEdit7; + TDBEdit *DBEdit8; + TDBEdit *DBEdit9; + TDBEdit *DBEdit10; + TDBEdit *DBEdit11; + TDBEdit *DBEdit12; + TLabel *Label12; + TDBEdit *DBEdit13; + TDBEdit *DBEdit14; + TDBEdit *DBEdit15; + TDBEdit *DBEdit16; + TDBEdit *DBEdit17; + TDBEdit *DBEdit18; + TDBEdit *DBEdit19; + TDBEdit *DBEdit20; + TDBEdit *DBEdit21; + TDBEdit *DBEdit22; + TDBEdit *DBEdit23; + TDBEdit *DBEdit24; + TDBEdit *DBEdit25; + TLabel *Label13; + TDBEdit *DBEdit26; + TBevel *Bevel1; + TLabel *Label14; + TLabel *Label15; + TLabel *Label16; + TLabel *Label17; + TLabel *Label18; + TLabel *Label19; + TLabel *Label20; + TLabel *Label21; + TLabel *Label22; + TBevel *Bevel2; + TDBMemo *DBMemo1; + TPanel *Panel2; + TSpeedButton *SpeedButton1; + TSpeedButton *SpeedButton2; + TSpeedButton *BusqSig; + TSpeedButton *SpeedButton4; + TSpeedButton *BusqAnt; + TSpeedButton *SpeedButton6; + TDateTimePicker *FechaCaja; + TDataSource *DsVentasI; + TTable *TbVentasI; + TLabel *Label29; + TDBText *DBText1; + TDBText *DBText2; + TDBText *DBText3; + TDBText *DBText4; + TDBText *DBText5; + TDBText *DBText6; + TDBText *DBText7; + TSmallintField *TbVentasICantidadx1; + TIntegerField *TbVentasITotalx1; + TSmallintField *TbVentasICantidadx5; + TIntegerField *TbVentasITotalx5; + TSmallintField *TbVentasICantidadx10; + TIntegerField *TbVentasITotalx10; + TSmallintField *TbVentasICantidadx25; + TIntegerField *TbVentasITotalx25; + TSmallintField *TbVentasICantidadx50; + TIntegerField *TbVentasITotalx50; + TSmallintField *TbVentasICantidadx100; + TIntegerField *TbVentasITotalx100; + TSmallintField *TbVentasICantidadx200; + TIntegerField *TbVentasITotalx200; + TSmallintField *TbVentasICantidadx500; + TIntegerField *TbVentasITotalx500; + TSmallintField *TbVentasICantidadx1000; + TIntegerField *TbVentasITotalx1000; + TSmallintField *TbVentasICantidadx2000; + TIntegerField *TbVentasITotalx2000; + TSmallintField *TbVentasICantidadx5000; + TIntegerField *TbVentasITotalx5000; + TSmallintField *TbVentasICantidadx10000; + TIntegerField *TbVentasITotalx10000; + TSmallintField *TbVentasICantidadxvarios; + TIntegerField *TbVentasITotalxvarios; + TDateField *TbVentasIFechaCaja; + TTimeField *TbVentasIInicio; + TTimeField *TbVentasIFin; + TSmallintField *TbVentasIIntentosSalir; + TSmallintField *TbVentasIExitoSalir; + TSmallintField *TbVentasITickets; + TSmallintField *TbVentasICancelados; + TSmallintField *TbVentasICambios; + TMemoField *TbVentasINotas; + TChart *Chart1; + TScrollBox *ScrollBox1; + TLabel *Label23; + TLabel *Label24; + TLabel *Label25; + TBevel *Bevel3; + TMemo *MDatos; + TSpeedButton *Clientes; + TSpeedButton *Productos; + TAreaSeries *Series2; + TDataSource *DsVentasC; + TTable *TbVentasC; + TTable *TbFacturasC; + TDataSource *DsFacturasC; + TSpeedButton *Empleados; + TLabel *LVentasT; + TLabel *LGastos; + TLabel *LBeneficio; + TLabel *Label26; + TLabel *Label27; + TSpeedButton *SpeedButton7; + TLabel *Label28; + TLabel *EnCaja; + TBevel *Bevel4; + TLabel *Label30; + TLabel *Label31; + TLabel *LVentasE; + TLabel *LGastosE; + TLabel *LBeneficioE; + TLabel *Label35; + TElasticForm *ElasticForm1; + void __fastcall SpeedButton1Click(TObject *Sender); + + void __fastcall TbVentasICantidadx1SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx5SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx10SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx25SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx50SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx100SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx200SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx500SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx1000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx2000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx5000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasICantidadx10000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx1SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx5SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx10SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx25SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx50SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx100SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx200SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx500SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx1000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx2000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx5000SetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasITotalx10000SetText(TField *Sender, + const AnsiString Text); + void __fastcall DBEdit1KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit2KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit3KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit4KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit5KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit6KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit7KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit8KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit9KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit10KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit11KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit12KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit25KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit13KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit14KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit15KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit16KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit17KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit18KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit19KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit20KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit21KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit22KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit23KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit24KeyPress(TObject *Sender, char &Key); + void __fastcall DBEdit26KeyPress(TObject *Sender, char &Key); + void __fastcall FechaCajaChange(TObject *Sender); + TDateTime __fastcall BuscaFecha( TDateTime FechaInicio ); + + + void __fastcall ClientesClick(TObject *Sender); + void __fastcall EmpleadosClick(TObject *Sender); + void __fastcall ProductosClick(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + + void __fastcall DsVentasIDataChange(TObject *Sender, TField *Field); + void __fastcall SpeedButton7Click(TObject *Sender); + + + + +private: // User declarations +public: // User declarations + __fastcall TTpvBlDVnt(TComponent* Owner); + void __fastcall DineroEnCajaAyer(void); + void __fastcall CalculaVentaGasto(void); + + Currency VentasHora[26], VentasE; + Currency Gastos, EnCajaAyer; +}; +//--------------------------------------------------------------------------- +extern PACKAGE TTpvBlDVnt *TpvBlDVnt; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvBlcD_Print.cpp b/TpvBlcD_Print.cpp new file mode 100644 index 0000000..530b421 --- /dev/null +++ b/TpvBlcD_Print.cpp @@ -0,0 +1,28 @@ +//---------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvBlcD_Print.h" +#include "TpvBlcDVnt.h" +//---------------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRBlcD_Print *QRBlcD_Print; +//---------------------------------------------------------------------------- +__fastcall TQRBlcD_Print::TQRBlcD_Print(TComponent* Owner) + : TQuickRep(Owner) +{ + TCant->Caption = ((TTpvBlDVnt *)Owner)->Label15->Caption; + TDinero->Caption = ((TTpvBlDVnt *)Owner)->Label16->Caption; + DiaAnterior->Caption = ((TTpvBlDVnt *)Owner)->Label27->Caption; + + LVentasT->Caption = ((TTpvBlDVnt *)Owner)->LVentasT->Caption; + LVentasE->Caption = ((TTpvBlDVnt *)Owner)->LVentasE->Caption; + LGastos->Caption = ((TTpvBlDVnt *)Owner)->LGastos->Caption; + LGastosE->Caption = ((TTpvBlDVnt *)Owner)->LGastosE->Caption; + LBeneficio->Caption = ((TTpvBlDVnt *)Owner)->LBeneficio->Caption; + LBeneficio->Font->Color = ((TTpvBlDVnt *)Owner)->LBeneficio->Font->Color; + LBeneficioE->Caption = ((TTpvBlDVnt *)Owner)->LBeneficioE->Caption; + LBeneficioE->Font->Color = ((TTpvBlDVnt *)Owner)->LBeneficioE->Font->Color; + EnCaja->Caption = ((TTpvBlDVnt *)Owner)->EnCaja->Caption; +} +//---------------------------------------------------------------------------- \ No newline at end of file diff --git a/TpvBlcD_Print.dfm b/TpvBlcD_Print.dfm new file mode 100644 index 0000000..5de455e Binary files /dev/null and b/TpvBlcD_Print.dfm differ diff --git a/TpvBlcD_Print.h b/TpvBlcD_Print.h new file mode 100644 index 0000000..10786b0 --- /dev/null +++ b/TpvBlcD_Print.h @@ -0,0 +1,123 @@ +//---------------------------------------------------------------------------- +#ifndef TpvBlcD_PrintH +#define TpvBlcD_PrintH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRBlcD_Print : public TQuickRep +{ +__published: + TQRBand *QRBand1; + TQRBand *QRBand2; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRDBChart *QRDBChart1; + TQRChart *QRChart1; + TAreaSeries *Series2; + TQRDBText *QRDBText1; + TQRShape *QRShape1; + TQRShape *QRShape2; + TQRLabel *QRLabel1; + TQRLabel *QRLabel4; + TQRDBText *QRDBText2; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRLabel *QRLabel10; + TQRDBText *QRDBText3; + TQRDBText *QRDBText4; + TQRDBText *QRDBText5; + TQRDBText *QRDBText6; + TQRDBText *QRDBText7; + TQRDBText *QRDBText8; + TQRLabel *QRLabel11; + TQRDBText *QRDBText10; + TQRShape *QRShape3; + TQRLabel *QRLabel12; + TQRShape *QRShape4; + TQRLabel *QRLabel13; + TQRDBText *QRDBText9; + TQRDBText *QRDBText11; + TQRDBText *QRDBText12; + TQRDBText *QRDBText13; + TQRDBText *QRDBText14; + TQRDBText *QRDBText15; + TQRDBText *QRDBText16; + TQRDBText *QRDBText17; + TQRDBText *QRDBText18; + TQRDBText *QRDBText19; + TQRDBText *QRDBText20; + TQRDBText *QRDBText21; + TQRDBText *QRDBText22; + TQRLabel *QRLabel14; + TQRLabel *QRLabel15; + TQRLabel *QRLabel16; + TQRLabel *QRLabel17; + TQRLabel *QRLabel18; + TQRLabel *QRLabel19; + TQRLabel *QRLabel20; + TQRLabel *QRLabel21; + TQRLabel *QRLabel22; + TQRLabel *QRLabel23; + TQRLabel *QRLabel24; + TQRDBText *QRDBText23; + TQRDBText *QRDBText24; + TQRDBText *QRDBText25; + TQRDBText *QRDBText26; + TQRDBText *QRDBText27; + TQRDBText *QRDBText28; + TQRDBText *QRDBText29; + TQRDBText *QRDBText30; + TQRDBText *QRDBText31; + TQRDBText *QRDBText32; + TQRDBText *QRDBText33; + TQRDBText *QRDBText34; + TQRLabel *QRLabel25; + TQRDBText *QRDBText35; + TQRShape *QRShape5; + TQRShape *QRShape6; + TQRLabel *QRLabel26; + TQRLabel *TCant; + TQRLabel *TDinero; + TQRLabel *DiaAnterior; + TQRShape *QRShape7; + TQRLabel *QRLabel27; + TQRLabel *QRLabel28; + TQRLabel *QRLabel29; + TQRLabel *QRLabel30; + TQRLabel *QRLabel31; + TQRLabel *QRLabel32; + TQRShape *QRShape9; + TQRLabel *QRLabel33; + TQRLabel *LVentasT; + TQRLabel *LGastos; + TQRShape *QRShape8; + TQRLabel *LVentasE; + TQRLabel *LGastosE; + TQRLabel *LBeneficio; + TQRLabel *LBeneficioE; + TQRLabel *QRLabel40; + TQRLabel *EnCaja; +private: +public: + virtual __fastcall TQRBlcD_Print(TComponent* Owner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRBlcD_Print *QRBlcD_Print; +//---------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/TpvBlcMVnt.cpp b/TpvBlcMVnt.cpp new file mode 100644 index 0000000..525d4d1 --- /dev/null +++ b/TpvBlcMVnt.cpp @@ -0,0 +1,341 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TpvBlcMVnt.h" +#include "TpvVntClt.h" +#include "TpvVntEmpl.h" +#include "TpvVntProd.h" +#include "TpvVntFctPrint.h" +#include "TpvBlcM_PrintFact.h" + +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TBlMVnt *BlMVnt; +//--------------------------------------------------------------------------- +__fastcall TBlMVnt::TBlMVnt(TComponent* Owner) + : TForm(Owner) +{ + // Cargamos la imagen OK! + try { + BtmOK = new Graphics::TBitmap(); + BtmOK -> LoadFromFile( "Systm\\ok.bmp" ); + + BtmLockOpen = new Graphics::TBitmap(); + BtmLockOpen -> LoadFromFile( "Systm\\lockopen.bmp" ); + + BtmLockShut = new Graphics::TBitmap(); + BtmLockShut -> LoadFromFile( "Systm\\lockshut.bmp" ); + + } catch (...) { + ShowMessage( "Error: La imagen OK! está corrupta" ); + } + + + Word Year, Month, Day; + TDateTime dtPresent = Now(); + DecodeDate(dtPresent, Year, Month, Day); + FechaCajaMin -> Date = EncodeDate( Year, Month, 1); + FechaCaja -> Date = dtPresent; + FechaCajaChange( 0 ); +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::ProductosClick(TObject *Sender) +{ + TVntProd *TpvVntProd; + Visible = false; + TpvVntProd = new TVntProd(this); + TpvVntProd -> MinFechaFact = FechaCajaMin -> DateTime; + TpvVntProd -> MaxFechaFact = FechaCaja -> DateTime; + TpvVntProd -> MinFecha -> DateTime = FechaCajaMin -> DateTime; + TpvVntProd -> MaxFecha -> DateTime = FechaCaja -> DateTime; + TpvVntProd -> MinFecha -> Enabled = false; + TpvVntProd -> MaxFecha -> Enabled = false; + TpvVntProd -> FiltrarFacturas(); + TpvVntProd -> ShowModal(); + Visible = true; + delete TpvVntProd; +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::EmpleadosClick(TObject *Sender) +{ + TVntClt *TpvVntClt; + Visible = false; + TpvVntClt = new TVntClt(this); + TpvVntClt -> MinFechaFact = FechaCajaMin -> DateTime; + TpvVntClt -> MinFechaFact = FechaCaja -> DateTime; + TpvVntClt -> MaxFechaFact = FechaCaja -> DateTime; + TpvVntClt -> MinFecha -> DateTime = FechaCajaMin -> DateTime; + TpvVntClt -> MinFecha -> DateTime = FechaCaja -> DateTime; + TpvVntClt -> MaxFecha -> DateTime = FechaCaja -> DateTime; + TpvVntClt -> MinFecha -> Enabled = false; + TpvVntClt -> MaxFecha -> Enabled = false; + TpvVntClt -> ShowModal(); + Visible = true; + delete TpvVntClt; +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::ClientesClick(TObject *Sender) +{ + TVntEmpl *VentasEmpl; + Visible = false; + VentasEmpl = new TVntEmpl(this); + VentasEmpl -> MinFechaFact = FechaCajaMin -> DateTime; + VentasEmpl -> MinFechaFact = FechaCaja -> DateTime; + VentasEmpl -> MaxFechaFact = FechaCaja -> DateTime; + VentasEmpl -> MinFecha -> DateTime = FechaCajaMin -> DateTime; + VentasEmpl -> MinFecha -> DateTime = FechaCaja -> DateTime; + VentasEmpl -> MaxFecha -> DateTime = FechaCaja -> DateTime; + VentasEmpl -> MinFecha -> Enabled = false; + VentasEmpl -> MaxFecha -> Enabled = false; + VentasEmpl -> ShowModal(); + Visible = true; + delete VentasEmpl; + +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::FechaCajaChange(TObject *Sender) +{ + QVentasC->Close(); + QVentasR->Close(); + QComprasC->Close(); + QComprasR->Close(); + QVentasEmpleados->Close(); + + QVentasC->Active = true; + QVentasR->Active = true; + QComprasC->Active = true; + QComprasR->Active = true; + QVentasEmpleados->Active = true; + + + Currency Ventas, Compras; + ProgressBar1->Position = 0; + ProgressBar1->Max = QVentasR->RecordCount + QComprasR->RecordCount; + ProgressBar1->Visible = true; + // Recorremos las ventas + Ventas = 0; + QVentasR->First(); + while ( ! QVentasR -> Eof ) + { + ProgressBar1->Position++; + Ventas += QVentasR->FieldByName("Total")->AsCurrency; + QVentasR ->Next(); + } + + // Recorremos las compras + Compras = 0; + QComprasR->First(); + while ( ! QComprasR -> Eof ) + { + ProgressBar1->Position++; + Compras += QComprasR->FieldByName("Total")->AsCurrency; + QComprasR ->Next(); + } + TotalVentas->Caption = FormatCurr("###,###,###.#0", Ventas ); + TotalCompras->Caption = FormatCurr("###,###,###.#0", Compras ); + Beneficio->Caption = FormatCurr("###,###,###.#0", (Ventas - Compras) ); + ProgressBar1->Visible = false; +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::DBGridVentasDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + // Verde ] si el albaran/factura esta abiert@ + // Rojo ] los abonos o albaranes con perdidas + if ( ! State.Contains(gdSelected) ) + { + if ( QVentasC->FieldByName("FacturaAbierta")-> AsInteger > 0 ) + { + DBGridVentas -> Canvas -> Font -> Color = clGreen; + } else { + if ( QVentasC->FieldByName("Base")->AsCurrency < 0 ) + DBGridVentas -> Canvas -> Font -> Color = clRed; + } + DBGridVentas -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + if ( Column->DisplayName == "C" ) + { + if ( QVentasC->FieldByName("C")->AsBoolean ) + DBGridVentas->Canvas->StretchDraw( Rect, BtmLockShut ); + else + DBGridVentas->Canvas->StretchDraw( Rect, BtmLockOpen ); + } else if ( Column->DisplayName == "Fecha" ) { + if ( ! State.Contains(gdSelected) ) + { + DBGridVentas -> Canvas -> Brush -> Color = clMenu; + DBGridVentas -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::SpeedButton1Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::DBGridComprasDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + // Rojo ] los abonos o albaranes con perdidas + if ( ! State.Contains(gdSelected) ) + { + if ( QComprasC->FieldByName("Base")->AsCurrency < 0 ) + DBGridCompras -> Canvas -> Font -> Color = clRed; + + DBGridCompras -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + if ( Column->DisplayName == "C" ) + { + if ( QComprasC->FieldByName("C")->AsBoolean ) + DBGridCompras->Canvas->StretchDraw( Rect, BtmLockShut ); + else + DBGridCompras->Canvas->StretchDraw( Rect, BtmLockOpen ); + } else if ( Column->DisplayName == "Fecha" ) { + if ( ! State.Contains(gdSelected) ) + { + DBGridCompras -> Canvas -> Brush -> Color = clMenu; + DBGridCompras -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::QVentasCAfterOpen(TDataSet *DataSet) +{ + DBGridVentas->Columns->Items[0]->Width = 16; + + // Recalculamos la gráfica... + +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::QComprasCAfterOpen(TDataSet *DataSet) +{ + DBGridCompras->Columns->Items[0]->Width = 16; +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::QVentasCBeforeOpen(TDataSet *DataSet) +{ + QVentasC->SQL->Clear(); + + QVentasC->SQL->Add( "SELECT VentasCabecera.Contabilizada C, VentasCabecera.FechaFactura Fecha, VentasCabecera.CodFactura, (VentasCabecera.TotalSin + VentasCabecera.TotalIVA) Importe, VentasCabecera.CodCliente, ((Personas.Nombre+', ')+Personas.Apellidos) Nombre, Personas.Empresa, VentasCabecera.FacturaAbierta, VentasCabecera.TotalSin Base, VentasCabecera.TotalIVA IVA" ); + QVentasC->SQL->Add( "FROM \"Ventas (cabecera).db\" VentasCabecera, \"personas.DB\" Personas" ); + QVentasC->SQL->Add( "WHERE (VentasCabecera.FechaFactura BETWEEN '"+FechaCajaMin->Date.FormatString("mm/dd/yyyy")+"' AND '"+FechaCaja->Date.FormatString("mm/dd/yyyy")+"') \ + AND (VentasCabecera.CodCliente = Personas.CodCliente1) "); +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::QVentasRBeforeOpen(TDataSet *DataSet) +{ + QVentasR->SQL->Clear(); + + QVentasR->SQL->Add( "SELECT FechaFactura Fecha, SUM( TotalSin ) Base, SUM( TotalIVA ) IVA, SUM( TotalIva + TotalSin ) Total"); + QVentasR->SQL->Add( "FROM \"Ventas (cabecera).DB\" VentasCabecera"); + QVentasR->SQL->Add( "WHERE (VentasCabecera.FechaFactura BETWEEN '"+FechaCajaMin->Date.FormatString("mm/dd/yyyy")+"' AND '"+FechaCaja->Date.FormatString("mm/dd/yyyy")+"')"); + QVentasR->SQL->Add( "GROUP BY FechaFactura"); +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::QComprasCBeforeOpen(TDataSet *DataSet) +{ + QComprasC->SQL->Clear(); + + QComprasC->SQL->Add( "SELECT VentasCabecera.Contabilizada C, VentasCabecera.FechaFactura Fecha, VentasCabecera.CodFactura, (VentasCabecera.TotalSin + VentasCabecera.TotalIVA) Importe, VentasCabecera.CodProveedor, ((Personas.Nombre+', ')+Personas.Apellidos) Nombre, Personas.Empresa, VentasCabecera.TotalSin Base, VentasCabecera.TotalIVA IVA" ); + QComprasC->SQL->Add( "FROM \"Compras (cabecera).db\" VentasCabecera, \"personas.DB\" Personas" ); + QComprasC->SQL->Add( "WHERE (VentasCabecera.FechaFactura BETWEEN '"+FechaCajaMin->Date.FormatString("mm/dd/yyyy")+"' AND '"+FechaCaja->Date.FormatString("mm/dd/yyyy")+"') \ + AND (VentasCabecera.CodProveedor = Personas.CodCliente1) "); +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::QComprasRBeforeOpen(TDataSet *DataSet) +{ + QComprasR->SQL->Clear(); + + QComprasR->SQL->Add( "SELECT FechaFactura Fecha, SUM( TotalSin ) Base, SUM( TotalIVA ) IVA, SUM( TotalIva + TotalSin ) Total"); + QComprasR->SQL->Add( "FROM \"Compras (cabecera).DB\" ComprasCabecera"); + QComprasR->SQL->Add( "WHERE (ComprasCabecera.FechaFactura BETWEEN '"+FechaCajaMin->Date.FormatString("mm/dd/yyyy")+"' AND '"+FechaCaja->Date.FormatString("mm/dd/yyyy")+"')"); + QComprasR->SQL->Add( "GROUP BY FechaFactura"); +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::QVentasEmpleadosBeforeOpen(TDataSet *DataSet) +{ + QVentasEmpleados->SQL->Clear(); + + QVentasEmpleados->SQL->Add( "SELECT Personas.Apellidos, Personas.Nombre, SUM( Ventas.TotalSin ) Base, SUM( Ventas.TotalIva ) IVA, SUM( Ventas.TotalSin + Ventas.TotalIva ) Total"); + QVentasEmpleados->SQL->Add( "FROM \"Ventas (cabecera).DB\" Ventas, \"personas.DB\" Personas"); + QVentasEmpleados->SQL->Add( "WHERE ( Ventas.FechaFactura BETWEEN '"+FechaCajaMin->Date.FormatString("mm/dd/yyyy")+"' AND '"+FechaCaja->Date.FormatString("mm/dd/yyyy")+"' ) \ + AND (Ventas.CodEmpleado = Personas.CodCliente1) \ + GROUP BY Personas.Apellidos, Personas.Nombre"); +} +//--------------------------------------------------------------------------- +void __fastcall TBlMVnt::bGraficasClick(TObject *Sender) +{ + POINT MousePos; + if ( GetCursorPos(&MousePos) ) + { + mGraficas->PopupComponent = bGraficas; + mGraficas->Popup( bGraficas->Left + Left, + bGraficas->Height * 2 + Top); + mGraficas->PopupComponent = 0; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::MostrarVentasClick(TObject *Sender) +{ + MostrarVentas->Checked = !MostrarVentas->Checked; + // Ajustamos la grafica de totales... + DBChart1 -> Series[0] -> Active = MostrarVentas->Checked; +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::MostrarComprasClik(TObject *Sender) +{ + MostrarCompras->Checked = !MostrarCompras->Checked; + // Ajustamos la grafica de totales... + DBChart1 -> Series[1] -> Active = MostrarCompras->Checked; +} +//--------------------------------------------------------------------------- + + + + + +void __fastcall TBlMVnt::bImpresionClick(TObject *Sender) +{ + POINT MousePos; + if ( GetCursorPos(&MousePos) ) + { + mImpresion->PopupComponent = bImpresion; + mImpresion->Popup( bImpresion->Left + Left, + bImpresion->Height * 2 + Top); + mImpresion->PopupComponent = 0; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::VentasResumen1Click(TObject *Sender) +{ + TQRListadoFacturas *QRResumenFact; + QRResumenFact = new TQRListadoFacturas(this); + QRResumenFact->DataSet = QVentasR; + QRResumenFact->QRLabel1->Caption = "Resumen Facturas Ventas"; + QRResumenFact->Preview(); + delete QRResumenFact; +} +//--------------------------------------------------------------------------- + +void __fastcall TBlMVnt::ComprasResumen1Click(TObject *Sender) +{ + TQRListadoFacturas *QRResumenFact; + QRResumenFact = new TQRListadoFacturas(this); + QRResumenFact->Preview(); + delete QRResumenFact; +} +//--------------------------------------------------------------------------- + + diff --git a/TpvBlcMVnt.dfm b/TpvBlcMVnt.dfm new file mode 100644 index 0000000..fc8b2df --- /dev/null +++ b/TpvBlcMVnt.dfm @@ -0,0 +1,934 @@ +object BlMVnt: TBlMVnt + Left = 192 + Top = 124 + Width = 640 + Height = 480 + HorzScrollBar.Visible = False + VertScrollBar.Visible = False + Caption = 'Balance periódico de ventas...' + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Verdana' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + Scaled = False + PixelsPerInch = 96 + TextHeight = 16 + object StatusBar1: TStatusBar + Left = 0 + Top = 430 + Width = 632 + Height = 19 + Panels = < + item + Width = 450 + end + item + Text = 'Compras' + Width = 95 + end + item + Text = 'Facturas' + Width = 95 + end> + SimplePanel = False + end + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 632 + Height = 34 + Align = alTop + BorderStyle = bsSingle + TabOrder = 1 + object SpeedButton1: TSpeedButton + Left = 8 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 04000000000080000000CE0E0000D80E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777777777777777771F77771F7777777777777111F777777 + 1F7777111F777771F777777111F77711F7777777111F711F77777777711111F7 + 7777777777111F7777777777711111F777777777111F71F77777771111F77711 + F77771111F7777711F77711F7777777711F77777777777777777} + OnClick = SpeedButton1Click + end + object SpeedButton2: TSpeedButton + Left = 100 + Top = 3 + Width = 25 + Height = 25 + Enabled = False + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 04000000000080000000CE0E0000C40E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777700000777770000070F000777770F00070F000777770F + 0007000000070000000700F000000F00000700F000700F00000700F000700F00 + 00077000000000000077770F00070F0007777700000700000777777000777000 + 77777770F07770F0777777700077700077777777777777777777} + end + object BusqSig: TSpeedButton + Left = 126 + Top = 3 + Width = 25 + Height = 25 + Enabled = False + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0F33333333370E337F333FF3F3337F3E0F330030333 + 70E337F3377F7FF337F3E0F33003003370E337F3377F77FF37F3E0F330030003 + 70E337F3377F777337F3E0F33003003370E337F3377F773337F3E0F330030333 + 70E337F33773733337F3E0F33333333370E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object SpeedButton4: TSpeedButton + Left = 48 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000010000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F33333F33337F3E0F33333033370E337F3333FF73337F3E0F333300333 + 70E337F333FF773337F3E0F33300033370E337F33FF7773337F3E0F330000333 + 70E337F33377773337F3E0F33300033370E337F33337773337F3E0F333300333 + 70E337F33333773337F3E0F33333033370E337F33333373337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object BusqAnt: TSpeedButton + Left = 74 + Top = 3 + Width = 25 + Height = 25 + Enabled = False + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0F33333333370E337F3333F3FF337F3E0F333030033 + 70E337F3337F77F337F3E0F33003003370E337F3377F77F337F3E0F300030033 + 70E337F3777F77F337F3E0F33003003370E337F3377F77F337F3E0F333030033 + 70E337F33373773337F3E0F33333333370E337F33333333337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object SpeedButton6: TSpeedButton + Left = 152 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 33333333333333333333EEEEEEEEEEEEEEE333FFFFFFFFFFFFF3E00000000000 + 00E337777777777777F3E0F77777777770E337F33333333337F3E0F333333333 + 70E337F3333F333337F3E0F33303333370E337F3337FF33337F3E0F333003333 + 70E337F33377FF3337F3E0F33300033370E337F333777FF337F3E0F333000033 + 70E337F33377773337F3E0F33300033370E337F33377733337F3E0F333003333 + 70E337F33377333337F3E0F33303333370E337F33373333337F3E0F333333333 + 70E337F33333333337F3E0FFFFFFFFFFF0E337FFFFFFFFFFF7F3E00000000000 + 00E33777777777777733EEEEEEEEEEEEEEE33333333333333333} + NumGlyphs = 2 + end + object Clientes: TSpeedButton + Left = 216 + Top = 3 + Width = 25 + Height = 25 + Hint = 'Mostrar ventas a clientes' + Flat = True + Glyph.Data = { + 8E030000424D8E03000000000000760000002800000042000000160000000100 + 04000000000018030000C40E0000C40E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEEEEE + EEEEEEEEEEEEEEEEE99999999EEEEEEE5555555555555555555555000000EEEE + 88EEEEEEEEE88EEEEEEEEEE999999999999EEEEE555555555555555555555500 + 0000EE8EE8EEEEEEEE88EEEEEEEEEE99999999999999EEEE5555555555555555 + 555555000000EEEE8EEEE000EEEEEEEEEEEEE9999FFFFFFF99999EEE2AAAAA2B + C4B2ACACC22555000000EEEEEEEE07080EEEEEEEEEEE9999FFFFFFFFFF9999EE + 2AAAAA2C44C2ACAC222255000000EEEEE000F0F000EEEEEEEEE999999FFFFFFF + FFF9999E2AAAAA2B4CB2ACACC2A225000000EEEE0F0707070000EEEEEEE99999 + 99FF000000FF999E2CACCA2C44B2AAAAA2A222000000EEEE0070707FF7880EEE + EE0000F999907777770FF9992CAC2A2BC4C2AAAAA2A2A2000000EEEE0FFFFFFF + F0000EEEEE4C4C009999FFF00000F9992CACCA2B44B2AAAAA2A2A2000000EE00 + FFFF00FF07770EEEEEC4C40779999FFF777709992222222BBBB2222222A2A200 + 0000E060FFF0FF00FFFF8000EECCCC0FFF9999F00000F9992222222BBBB22222 + 2AA2A2000000E0607FFF0FFFFFFF0B080ECCCC000FF9999F7770F9992AAAAA2B + C4B2ACACC2AAA2000000006607F000000FF0BB080000000FF0FF9999000FF999 + 2AAAAA2C44C2ACAC22A2A20000006606600EEEEEE00B008788999FFFFF0FF999 + 9FFFF9992AAAAA2B4CB2ACACC2A2A20000006600660EEEEEE0BB077888999FFF + FFF00F9999FFF9992CACCA2C44B2AAAAA2A2A2000000666000EEEEEEE0007787 + 78E999FFFFFFF0F9999F999E2CAC2A2BC4C2AAAAA2A2A200000066660EEEEEEE + EE8FF778E8E9999FFFFFFF009999999E2CACCA2B44B2AAAAA2A2A20000006666 + EEEEEEEEEE0FF777E8EE9999FFFFFFFFF99999EE2222222BBBBB222222A2A200 + 00006660EEEEEEEEEEE07FF7EEEEE99999FFFFFF99999EEE522AAAA2BBBBB2AA + AA22A20000006660EEEEEEEEEEE0F77FEEEEEE99999999999999EEEE55222222 + 2BBBBB222222A2000000660EEEEEEEEEEEE07FFEEE5EEEE999999999999EEEEE + 55522AAAA2BBBBB2AAAA22000000E6EEEEEEEEEEEEEE0FEEEE5EEEEEE9999999 + 9EEEEEEE5555555555555555555555000000} + NumGlyphs = 3 + ParentShowHint = False + ShowHint = True + OnClick = ClientesClick + end + object Productos: TSpeedButton + Left = 268 + Top = 3 + Width = 25 + Height = 25 + Hint = 'Mostrar ventas por producto' + Flat = True + Glyph.Data = { + 0E0A0000424D0E0A000000000000360400002800000042000000160000000100 + 080000000000D8050000C40E0000C40E00000001000000010000000000000000 + 5500000080000000AA000000D5000000FF00002B0000002B5500002B8000002B + AA00002BD500002BFF000055000000555500005580000055AA000055D5000055 + FF000080000000805500008080000080AA000080D5000080FF0000AA000000AA + 550000AA800000AAAA0000AAD50000AAFF0000D5000000D5550000D5800000D5 + AA0000D5D50000D5FF0000FF000000FF550000FF800000FFAA0000FFD50000FF + FF005500000055005500550080005500AA005500D5005500FF00552B0000552B + 5500552B8000552BAA00552BD500552BFF005555000055555500555580005555 + AA005555D5005555FF005580000055805500558080005580AA005580D5005580 + FF0055AA000055AA550055AA800055AAAA0055AAD50055AAFF0055D5000055D5 + 550055D5800055D5AA0055D5D50055D5FF0055FF000055FF550055FF800055FF + AA0055FFD50055FFFF008000000080005500800080008000AA008000D5008000 + FF00802B0000802B5500802B8000802BAA00802BD500802BFF00805500008055 + 5500805580008055AA008055D5008055FF008080000080805500808080008080 + AA008080D5008080FF0080AA000080AA550080AA800080AAAA0080AAD50080AA + FF0080D5000080D5550080D5800080D5AA0080D5D50080D5FF0080FF000080FF + 550080FF800080FFAA0080FFD50080FFFF00AA000000AA005500AA008000AA00 + AA00AA00D500AA00FF00AA2B0000AA2B5500AA2B8000AA2BAA00AA2BD500AA2B + FF00AA550000AA555500AA558000AA55AA00AA55D500AA55FF00AA800000AA80 + 5500AA808000AA80AA00AA80D500AA80FF00AAAA0000AAAA5500AAAA8000AAAA + AA00AAAAD500AAAAFF00AAD50000AAD55500AAD58000AAD5AA00AAD5D500AAD5 + FF00AAFF0000AAFF5500AAFF8000AAFFAA00AAFFD500AAFFFF00D5000000D500 + 5500D5008000D500AA00D500D500D500FF00D52B0000D52B5500D52B8000D52B + AA00D52BD500D52BFF00D5550000D5555500D5558000D555AA00D555D500D555 + FF00D5800000D5805500D5808000D580AA00D580D500D580FF00D5AA0000D5AA + 5500D5AA8000D5AAAA00D5AAD500D5AAFF00D5D50000D5D55500D5D58000D5D5 + AA00D5D5D500D5D5FF00D5FF0000D5FF5500D5FF8000D5FFAA00D5FFD500D5FF + FF00FF000000FF005500FF008000FF00AA00FF00D500FF00FF00FF2B0000FF2B + 5500FF2B8000FF2BAA00FF2BD500FF2BFF00FF550000FF555500FF558000FF55 + AA00FF55D500FF55FF00FF800000FF805500FF808000FF80AA00FF80D500FF80 + FF00FFAA0000FFAA5500FFAA8000FFAAAA00FFAAD500FFAAFF00FFD50000FFD5 + 5500FFD58000FFD5AA00FFD5D500FFD5FF00FFFF0000FFFF5500FFFF8000FFFF + AA00FFFFD5003F3F3F006B6B6B0095959500C0C0C000FFFFFF00FFFFFFFFFFFF + FFFFFFFF00FFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF0505050505050505FF + FFFFFFFFFFFFFFFFFFFF00000E0E0E0E0016161600FFFFFFFFFFFFFF0000FFFF + FFFFFFFFFFFF0000000000FFFFFFFFFF00D22900FFFFFFFFFF05050505050505 + 0505050505FFFFFFFFFFFFFF00000E0E0E0E0E0E00161616160000FFFFFFFFFF + 0000FFFFFFFFFFFF00000E0E00161600FFFFFF00D229FE00FFFFFFFF05050505 + 05050505050505050505FFFFFFFFFF000E0E0E0E0E0E0E0E0016161616161600 + FFFFFFFF0000FFFFFFFF00000E0E0E0E0016161600FF00D229FE00FFFFFFFF05 + 050505FAFAFAFAFAFAFA0505050505FFFFFFFF000E0E0E0E0E0E0E0E00161616 + 1616161600FFFFFF0000FFFF00000E0E0E0E0E0E680000000000D229FE00FFFF + FFFF05050505FAFAFAFAFAFAFAFAFAFA05050505FFFFFF000E0E0E0E0E0E0E0E + 00161616232316161600FFFF0000FF000E0E0E0E0E0E0E0068FFFFFF680000FE + 00FFFFFFFF050505050505FAFAFAFAFAFAFAFAFAFA05050505FFFF000E0E0E0E + 0E0E0E0E00161616242323161600FFFF0000FF000E0E0E0E0E0E6868FFFFFAFF + FF68000000FFFFFFFF05050505050505FAFA000000000000FAFA050505FFFF00 + 0E00000E0E0E0E0E00161616232324231600FFFF0000FF000E0E0E0E0E0E00FF + FFFAFFFFFFFF68001600FFFF00000000FA0505050500FEFEFEFEFEFE00FAFA05 + 0505FF000E000E0000000E0E00161616242423242300FFFF0000FF000E0E0E0E + 0E0E00FFFAFFFFFFFFFF68001600FFFF54D254D2000005050505FFFFFF000000 + 0000FA050505FF000E000E0E0E0E000000161616232324232400FFFF0000FF00 + 0E0E0E0E0E0E00FFFFFFFFFAFAFF68001600FFFFD254D25400FEFE05050505FF + FFFFFEFEFEFE00050505FF00000E0E0E0E0000FC00000016232423242300FFFF + 0000FF000E0E0E0E0E0E0068FFFFFFFAFA6868002300FFFFD2D2D2D200FFFFFF + 05050505FF0000000000FA050505FF00000E0E0000FDFD00FD00160016162324 + 2300FFFF0000FF000E0E0E0E0E0E0E0068FFFFFF686800232400FFFFD2D2D2D2 + 000000FFFF05050505FFFEFEFE00FA050505FF00000000FDFDFDFDFCFDFD0016 + 000016231600FFFF0000FF000E0E0E0E0E00000E00686868680000232300FFFF + 0000000000FAFA00FFFF05050505000000FAFA050505FF0000FDFDFDFDFDFD00 + FDFD0016161600001600FFFF0000FF000E0E0E00000E0E0E0000000000162324 + 2300FFFF050505FAFAFAFAFA00FFFF05050505FAFAFAFA050505FFFF00FDFDFD + FDFDFDFCFDFD0016161616160000FFFF0000FF000E00000E0E0E0E0E00161616 + 000016231600FFFF050505FAFAFAFAFAFA0000FF05050505FAFAFA000505FF00 + 0E0000FDFDFDFD00FDFDFD00161600000000FFFF0000FF000000000000000000 + 00161616161600001600FFFFFF050505FAFAFAFAFAFAFA00FF05050505FA0505 + 05FFFF000E0E0E00FDFDFDFCFDFDFD000000FD0000FFFFFF0000FFFF000E0E0E + 0E0E0E0023000000000000000000FFFFFF05050505FAFAFAFAFAFAFA00000505 + 0505050505FFFF000E0E0E0E00FDFD00FDFDFDFD0000001600FFFFFF0000FFFF + FF00000E0E0E0E0000161616161616161600FFFFFFFF05050505FAFAFAFAFAFA + FAFAFA0505050505FFFFFF000E0E0E0E0E00FDFCFD0000001616161600FFFFFF + 0000FFFFFFFFFF000E0E0E00161616161616160000FFFFFFFFFFFF0505050505 + FAFAFAFAFAFA0505050505FFFFFFFF000E0E0E0E0E0E00000016161616161616 + 00FFFFFF0000FFFFFFFFFFFF000E0E0016161616000000FFFFFFFFFFFFFFFFFF + 0505050505050505050505050505FFFFFFFFFF000E0E0E000000FFFFFF000016 + 16161600FFFFFFFF0000FFFFFFFFFFFFFF00000016000000FFFFFFFFFFFFFFFF + FFFFFFFFFF050505050505050505050505FFFFFFFFFFFF000E0000FFFFFFFFFF + FFFFFF0000161600FFFFFFFF0000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF0505050505050505FFFFFFFFFFFFFFFF0000FFFFFF + FFFFFFFFFFFFFFFFFF000000FFFFFFFF0000} + NumGlyphs = 3 + ParentShowHint = False + ShowHint = True + OnClick = ProductosClick + end + object Empleados: TSpeedButton + Left = 242 + Top = 3 + Width = 25 + Height = 25 + Hint = 'Mostrar ventas por empleado' + Flat = True + Glyph.Data = { + 0E0A0000424D0E0A000000000000360400002800000042000000160000000100 + 080000000000D8050000C40E0000C40E00000001000000000000000000000000 + 5500000080000000AA000000D5000000FF00002B0000002B5500002B8000002B + AA00002BD500002BFF000055000000555500005580000055AA000055D5000055 + FF000080000000805500008080000080AA000080D5000080FF0000AA000000AA + 550000AA800000AAAA0000AAD50000AAFF0000D5000000D5550000D5800000D5 + AA0000D5D50000D5FF0000FF000000FF550000FF800000FFAA0000FFD50000FF + FF005500000055005500550080005500AA005500D5005500FF00552B0000552B + 5500552B8000552BAA00552BD500552BFF005555000055555500555580005555 + AA005555D5005555FF005580000055805500558080005580AA005580D5005580 + FF0055AA000055AA550055AA800055AAAA0055AAD50055AAFF0055D5000055D5 + 550055D5800055D5AA0055D5D50055D5FF0055FF000055FF550055FF800055FF + AA0055FFD50055FFFF008000000080005500800080008000AA008000D5008000 + FF00802B0000802B5500802B8000802BAA00802BD500802BFF00805500008055 + 5500805580008055AA008055D5008055FF008080000080805500808080008080 + AA008080D5008080FF0080AA000080AA550080AA800080AAAA0080AAD50080AA + FF0080D5000080D5550080D5800080D5AA0080D5D50080D5FF0080FF000080FF + 550080FF800080FFAA0080FFD50080FFFF00AA000000AA005500AA008000AA00 + AA00AA00D500AA00FF00AA2B0000AA2B5500AA2B8000AA2BAA00AA2BD500AA2B + FF00AA550000AA555500AA558000AA55AA00AA55D500AA55FF00AA800000AA80 + 5500AA808000AA80AA00AA80D500AA80FF00AAAA0000AAAA5500AAAA8000AAAA + AA00AAAAD500AAAAFF00AAD50000AAD55500AAD58000AAD5AA00AAD5D500AAD5 + FF00AAFF0000AAFF5500AAFF8000AAFFAA00AAFFD500AAFFFF00D5000000D500 + 5500D5008000D500AA00D500D500D500FF00D52B0000D52B5500D52B8000D52B + AA00D52BD500D52BFF00D5550000D5555500D5558000D555AA00D555D500D555 + FF00D5800000D5805500D5808000D580AA00D580D500D580FF00D5AA0000D5AA + 5500D5AA8000D5AAAA00D5AAD500D5AAFF00D5D50000D5D55500D5D58000D5D5 + AA00D5D5D500D5D5FF00D5FF0000D5FF5500D5FF8000D5FFAA00D5FFD500D5FF + FF00FF000000FF005500FF008000FF00AA00FF00D500FF00FF00FF2B0000FF2B + 5500FF2B8000FF2BAA00FF2BD500FF2BFF00FF550000FF555500FF558000FF55 + AA00FF55D500FF55FF00FF800000FF805500FF808000FF80AA00FF80D500FF80 + FF00FFAA0000FFAA5500FFAA8000FFAAAA00FFAAD500FFAAFF00FFD50000FFD5 + 5500FFD58000FFD5AA00FFD5D500FFD5FF00FFFF0000FFFF5500FFFF8000FFFF + AA00FFFFD5003F3F3F006B6B6B0095959500C0C0C000FFFFFF00F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F60505050505050505F6 + F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F60000F6F6 + F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F605050505050505 + 0505050505F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 + 0000F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F605050505 + 05050505050505050505F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6000000000000000000000000000000000000000000000000F6F6F605 + 050505FAFAFAFAFAFAFA0505050505F6F6F60000000000000000000000000000 + 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + F6F605050505FAFAFAFAFAFAFAFAFAFA05050505F6F600FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF00000000FFFF1D1DFFFF1D1DFFFF1D1DFFFF1D1DFF + FF1DFF00F6050505050505FAFAFAFAFAFAFAFAFAFA05050505F600FF1DFFFF1D + 1DFFFF1D1DFFFF1D1DFFFF1D1DFFFF00000000FF1DFFFF1D1DFFFF1D1DFFFF1D + 1DFFFF1D1DFFFF00F605050505050505FAFA000000000000FAFA050505F600FF + FF1D1DFFFF1D1DFFFF1D1DFFFF1D1DFFFF1DFF00000000FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF0000000000FA0505050500FEFEFEFEFEFE00FAFA05 + 050500FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0054D254D2000005050505FFFFFF000000 + 0000FA05050500FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FF + FFFFFFFFFF000000000000FFFF0000000000FF00D254D25400FEFE05050505FF + FFFFFEFEFEFE0005050500FFFFFFFFFFFF000000000000FFFF0000000000FF00 + 000000FF0505D205FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00D2D2D2D200FFFFFF + 05050505FF0000000000FA05050500FFD2D229D2FFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF00000000FF292905FFFF000000FF000000000000FF0000FF00D2D2D2D2 + 000000FFFF05050505FFFEFEFE00FA05050500FF0505D2FFFF000000FF000000 + 000000FF0000FF00000000FF2905D229FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 + 0000000000FAFA00FFFF05050505000000FAFA05050500FF05D22905FFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF00000000FF0529D2FFFF0000000000FF0000FF0000 + 0000FF00050505FAFAFAFAFA00FFFF05050505FAFAFAFA05050500FFD20529FF + FF0000000000FF0000FF00000000FF00000000FFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF00050505FAFAFAFAFAFA0000FF05050505FAFAFA05050500FF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000 + 000000000000000000000000F6050505FAFAFAFAFAFAFA00FF05050505FA0505 + 05F6000000000000000000000000000000000000000000000000F6F6F6F6F6F6 + F6F600FEFEFEFEFE00F6F6F6F6F6F6F6F605050505FAFAFAFAFAFAFA00000505 + 0505050505F6F6F6F6F6F6F6F6F600FEFEFEFEFE00F6F6F6F6F6F6F60000F6F6 + F6F6F6F6F6F6F600FE00FE00F6F6F6F6F6F6F6F6F6F605050505FAFAFAFAFAFA + FAFAFA0505050505F6F6F6F6F6F6F6F6F6F6F600FE00FE00F6F6F6F6F6F6F6F6 + 0000F6F6F6F6F6F6F6F600FEFEFEFEFE00F6F6F6F6F6F6F6F6F6F60505050505 + FAFAFAFAFAFA0505050505F6F6F6F6F6F6F6F6F6F6F600FEFEFEFEFE00F6F6F6 + F6F6F6F60000F6F6F6F6F6F6F6F6F60000000000F6F6F6F6F6F6F6F6F6F6F6F6 + 0505050505050505050505050505F6F6F6F6F6F6F6F6F6F6F6F6F60000000000 + F6F6F6F6F6F6F6F60000F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6050505050505050505050505F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F6F60000F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F60505050505050505F6F6F6F6F6F6F6F6F6F6F6F6F6 + F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F60000} + NumGlyphs = 3 + ParentShowHint = False + ShowHint = True + OnClick = EmpleadosClick + end + object bImpresion: TSpeedButton + Left = 322 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 4E010000424D4E01000000000000760000002800000012000000120000000100 + 040000000000D800000000000000000000001000000010000000000000000000 + BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00DDDDDDDDDDDD + DDDDDD000000DDD00000000000DDDD000000DD0777777777070DDD000000D000 + 000000000070DD000000D0777777FFF77000DD000000D077777799977070DD00 + 0000D0000000000000770D000000D0777777777707070D000000DD0000000000 + 70700D000000DDD0FFFFFFFF07070D000000DDDD0FCCCCCF0000DD000000DDDD + 0FFFFFFFF0DDDD000000DDDDD0FCCCCCF0DDDD000000DDDDD0FFFFFFFF0DDD00 + 0000DDDDDD000000000DDD000000DDDDDDDDDDDDDDDDDD000000DDDDDDDDDDDD + DDDDDD000000DDDDDDDDDDDDDDDDDD000000} + OnClick = bImpresionClick + end + object bGraficas: TSpeedButton + Left = 185 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00337333733373 + 3373337F3F7F3F7F3F7F33737373737373733F7F7F7F7F7F7F7F770000000000 + 000077777777777777773303333333333333337FF333333F33333709333333C3 + 333337773F3FF373F333330393993C3C33333F7F7F77F7F7FFFF77079797977C + 77777777777777777777330339339333C333337FF73373F37F33370C333C3933 + 933337773F3737F37FF33303C3C33939C9333F7F7F7FF7F777FF7707C7C77797 + 7C97777777777777777733033C3333333C33337F37F33333373F37033C333333 + 33C3377F37333333337333033333333333333F7FFFFFFFFFFFFF770777777777 + 7777777777777777777733333333333333333333333333333333} + NumGlyphs = 2 + OnClick = bGraficasClick + end + object FechaCaja: TDateTimePicker + Left = 536 + Top = 3 + Width = 89 + Height = 24 + CalAlignment = dtaLeft + Date = 36080 + Time = 36080 + DateFormat = dfShort + DateMode = dmComboBox + Kind = dtkDate + ParseInput = False + TabOrder = 0 + OnCloseUp = FechaCajaChange + OnChange = FechaCajaChange + end + object FechaCajaMin: TDateTimePicker + Left = 432 + Top = 3 + Width = 92 + Height = 24 + CalAlignment = dtaLeft + Date = 36080 + Time = 36080 + DateFormat = dfShort + DateMode = dmComboBox + Kind = dtkDate + ParseInput = False + TabOrder = 1 + OnCloseUp = FechaCajaChange + OnChange = FechaCajaChange + end + end + object PageControl1: TPageControl + Left = 0 + Top = 34 + Width = 632 + Height = 231 + ActivePage = Ventas + Align = alTop + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -13 + Font.Name = 'Arial' + Font.Style = [] + MultiLine = True + ParentFont = False + TabOrder = 2 + TabPosition = tpRight + object Ventas: TTabSheet + Caption = 'Ventas' + object PageControl3: TPageControl + Left = 0 + Top = 0 + Width = 604 + Height = 221 + ActivePage = VentasCompletas + Align = alClient + TabOrder = 0 + object VentasCompletas: TTabSheet + Caption = 'Completo' + object DBGridVentas: TDBGrid + Left = 0 + Top = 0 + Width = 596 + Height = 190 + Align = alClient + DataSource = DsVentasC + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit] + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clBlack + TitleFont.Height = -13 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + OnDrawColumnCell = DBGridVentasDrawColumnCell + end + end + object VentasResumidas: TTabSheet + Caption = 'Resumen' + ImageIndex = 1 + object DBGrid1: TDBGrid + Left = 0 + Top = 0 + Width = 393 + Height = 190 + Align = alLeft + DataSource = DsVentasR + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clBlack + TitleFont.Height = -13 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + end + end + end + end + object VEmpleados: TTabSheet + Caption = 'por Empleado' + ImageIndex = 2 + object DBGrid3: TDBGrid + Left = 0 + Top = 0 + Width = 604 + Height = 221 + Align = alClient + DataSource = DsVentasEmpleados + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clBlack + TitleFont.Height = -13 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + end + end + object Compras: TTabSheet + Caption = 'Compras' + ImageIndex = 2 + object PageControl4: TPageControl + Left = 0 + Top = 0 + Width = 604 + Height = 221 + ActivePage = ComprasCompleto + Align = alClient + TabOrder = 0 + object ComprasCompleto: TTabSheet + Caption = 'Completo' + object DBGridCompras: TDBGrid + Left = 0 + Top = 0 + Width = 596 + Height = 190 + Align = alClient + DataSource = DsComprasC + Options = [dgTitles, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgConfirmDelete, dgCancelOnExit] + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clBlack + TitleFont.Height = -13 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + OnDrawColumnCell = DBGridComprasDrawColumnCell + end + end + object ComprasResumen: TTabSheet + Caption = 'Resumen' + ImageIndex = 1 + object DBGrid2: TDBGrid + Left = 0 + Top = 0 + Width = 393 + Height = 190 + Align = alLeft + DataSource = DsComprasR + TabOrder = 0 + TitleFont.Charset = ANSI_CHARSET + TitleFont.Color = clBlack + TitleFont.Height = -13 + TitleFont.Name = 'Arial' + TitleFont.Style = [] + end + end + end + end + end + object PageControl2: TPageControl + Left = 0 + Top = 265 + Width = 632 + Height = 165 + ActivePage = TabSheet2 + Align = alClient + TabOrder = 3 + object TabSheet1: TTabSheet + Caption = 'Datos' + object Label1: TLabel + Left = 8 + Top = 16 + Width = 64 + Height = 22 + Caption = 'Ventas:' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Label2: TLabel + Left = 8 + Top = 48 + Width = 83 + Height = 22 + Caption = 'Compras:' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Label3: TLabel + Left = 8 + Top = 80 + Width = 85 + Height = 22 + Caption = 'Beneficio:' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object TotalVentas: TLabel + Left = 131 + Top = 16 + Width = 109 + Height = 22 + Alignment = taRightJustify + Caption = '###.###.###' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object TotalCompras: TLabel + Left = 131 + Top = 48 + Width = 109 + Height = 22 + Alignment = taRightJustify + Caption = '###.###.###' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Beneficio: TLabel + Left = 131 + Top = 80 + Width = 109 + Height = 22 + Alignment = taRightJustify + Caption = '###.###.###' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + end + object TabSheet2: TTabSheet + Caption = 'Graficas' + ImageIndex = 1 + object DBChart1: TDBChart + Left = 0 + Top = 0 + Width = 624 + Height = 134 + BackWall.Brush.Color = clWhite + LeftWall.Brush.Color = clWhite + Title.AdjustFrame = False + Title.Text.Strings = ( + 'TDBChart') + Title.Visible = False + View3DOptions.Elevation = 315 + View3DOptions.Perspective = 0 + View3DOptions.Rotation = 360 + Align = alClient + BevelOuter = bvLowered + TabOrder = 0 + object Series1: TLineSeries + Marks.ArrowLength = 20 + Marks.Style = smsLabelValue + Marks.Visible = False + DataSource = QVentasR + SeriesColor = clLime + ShowInLegend = False + XLabelsSource = 'Fecha' + Pointer.InflateMargins = True + Pointer.Style = psRectangle + Pointer.Visible = False + XValues.DateTime = True + XValues.Name = 'X' + XValues.Multiplier = 1 + XValues.Order = loAscending + XValues.ValueSource = 'Fecha' + YValues.DateTime = False + YValues.Name = 'Y' + YValues.Multiplier = 1 + YValues.Order = loNone + YValues.ValueSource = 'Total' + end + object Series2: TLineSeries + Marks.ArrowLength = 20 + Marks.Style = smsValue + Marks.Visible = False + DataSource = QComprasR + SeriesColor = clRed + ShowInLegend = False + XLabelsSource = 'Fecha' + Pointer.InflateMargins = True + Pointer.Style = psRectangle + Pointer.Visible = False + XValues.DateTime = True + XValues.Name = 'X' + XValues.Multiplier = 1 + XValues.Order = loAscending + XValues.ValueSource = 'Fecha' + YValues.DateTime = False + YValues.Name = 'Y' + YValues.Multiplier = 1 + YValues.Order = loNone + YValues.ValueSource = 'Total' + end + end + end + end + object ProgressBar1: TProgressBar + Left = 112 + Top = 266 + Width = 521 + Height = 21 + Min = 0 + Max = 100 + TabOrder = 4 + Visible = False + end + object DsVentasC: TDataSource + DataSet = QVentasC + Left = 108 + Top = 152 + end + object DsComprasC: TDataSource + DataSet = QComprasC + Left = 196 + Top = 160 + end + object QVentasC: TQuery + BeforeOpen = QVentasCBeforeOpen + AfterOpen = QVentasCAfterOpen + DatabaseName = 'TpvWin' + SQL.Strings = ( + + 'SELECT VentasCabecera.Contabilizada C, VentasCabecera.FechaFactu' + + 'ra Fecha, (VentasCabecera.TotalSin + VentasCabecera.TotalIVA) Im' + + 'porte, VentasCabecera.CodCliente, ((Personas.Nombre+'#39', '#39')+Person' + + 'as.Apellidos) Nombre, Personas.Empresa, VentasCabecera.FacturaAb' + + 'ierta, VentasCabecera.TotalSin Base, VentasCabecera.TotalIVA IVA' + + 'FROM "Ventas (cabecera).db" VentasCabecera, "personas.DB" Person' + + 'as' + + 'WHERE (VentasCabecera.FechaFactura = '#39'01/25/2001'#39' ) AND (Ventas' + + 'Cabecera.CodCliente = Personas.CodCliente1)' + ' ') + Left = 108 + Top = 184 + end + object QComprasC: TQuery + BeforeOpen = QComprasCBeforeOpen + AfterOpen = QComprasCAfterOpen + DatabaseName = 'TpvWin' + Left = 196 + Top = 192 + end + object QVentasR: TQuery + Active = True + BeforeOpen = QVentasRBeforeOpen + DatabaseName = 'TpvWin' + SQL.Strings = ( + + 'SELECT FechaFactura Fecha, SUM( TotalIva ) Base, SUM( TotalSin )' + + ' IVA, SUM( TotalIva ) + SUM( TotalSin ) Total' + 'FROM "Ventas (cabecera).DB" VentasCabecera' + 'GROUP BY FechaFactura') + Left = 140 + Top = 184 + end + object DsVentasR: TDataSource + DataSet = QVentasR + Left = 144 + Top = 155 + end + object QComprasR: TQuery + Active = True + BeforeOpen = QComprasRBeforeOpen + DatabaseName = 'TpvWin' + SQL.Strings = ( + + 'SELECT FechaFactura Fecha, SUM( TotalIva ) Base, SUM( TotalSin )' + + ' IVA, SUM( TotalIva ) + SUM( TotalSin ) Total' + 'FROM "Compras (cabecera).DB" VentasCabecera' + 'GROUP BY FechaFactura') + Left = 228 + Top = 184 + end + object DsComprasR: TDataSource + DataSet = QComprasR + Left = 232 + Top = 152 + end + object mGraficas: TPopupMenu + Left = 184 + Top = 34 + object MostrarVentas: TMenuItem + Caption = '&Ventas' + Checked = True + OnClick = MostrarVentasClick + end + object MostrarCompras: TMenuItem + Caption = '&Compras' + Checked = True + OnClick = MostrarComprasClik + end + end + object QVentasEmpleados: TQuery + BeforeOpen = QVentasEmpleadosBeforeOpen + DatabaseName = 'TpvWin' + SQL.Strings = ( + + 'SELECT Personas.Apellidos, Personas.Nombre Nombre, SUM( Ventas__' + + 'cabecera_.TotalSin ) Base, SUM( Ventas__cabecera_.TotalIva ) IVA' + + ', SUM( Ventas__cabecera_.TotalSin + Ventas__cabecera_.TotalIva ' + + ' ) Total' + + 'FROM "Ventas (cabecera).DB" Ventas__cabecera_, "personas.DB" Per' + + 'sonas' + 'WHERE (Ventas__cabecera_.CodEmpleado = Personas.CodCliente1) ' + + ' AND Ventas__cabecera_.FechaFactura BETWEEN '#39'01/01/2001'#39' AND ' + + #39'06/06/2001'#39' ' + 'GROUP BY Personas.Apellidos, Personas.Nombre') + Left = 284 + Top = 184 + end + object DsVentasEmpleados: TDataSource + DataSet = QVentasEmpleados + Left = 288 + Top = 152 + end + object mImpresion: TPopupMenu + Left = 328 + Top = 34 + object MenuItem1: TMenuItem + Caption = '&Ventas' + end + object VentasResumen1: TMenuItem + Caption = 'Ventas (Resumen)' + OnClick = VentasResumen1Click + end + object MenuItem2: TMenuItem + Caption = '&Compras' + end + object ComprasResumen1: TMenuItem + Caption = 'Compras (Resumen)' + OnClick = ComprasResumen1Click + end + object Empleados1: TMenuItem + Caption = 'Empleados' + end + object N1: TMenuItem + Caption = '-' + end + object ResumenyGrfica1: TMenuItem + Caption = 'Resumen y Gráfica' + end + end + object ElasticForm1: TElasticForm + DesignScreenWidth = 1152 + DesignScreenHeight = 864 + DesignPixelsPerInch = 96 + MinimumTrackWidth = 640 + MinimumTrackHeight = 480 + DesignFormWidth = 640 + DesignFormHeight = 480 + DesignFormClientWidth = 632 + DesignFormClientHeight = 449 + DesignFormLeft = 192 + DesignFormTop = 124 + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'Verdana' + Font.Style = [] + Version = 504 + end +end diff --git a/TpvBlcMVnt.h b/TpvBlcMVnt.h new file mode 100644 index 0000000..f5ddd28 --- /dev/null +++ b/TpvBlcMVnt.h @@ -0,0 +1,130 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvBlcMVntH +#define TpvBlcMVntH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "ElastFrm.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TBlMVnt : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TPanel *Panel2; + TSpeedButton *SpeedButton1; + TSpeedButton *SpeedButton2; + TSpeedButton *BusqSig; + TSpeedButton *SpeedButton4; + TSpeedButton *BusqAnt; + TSpeedButton *SpeedButton6; + TSpeedButton *Clientes; + TSpeedButton *Productos; + TSpeedButton *Empleados; + TDateTimePicker *FechaCaja; + TDateTimePicker *FechaCajaMin; + TSpeedButton *bImpresion; + TPageControl *PageControl1; + TTabSheet *Ventas; + TTabSheet *VEmpleados; + TTabSheet *Compras; + TDataSource *DsVentasC; + TDataSource *DsComprasC; + TQuery *QVentasC; + TQuery *QComprasC; + TPageControl *PageControl2; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TDBChart *DBChart1; + TQuery *QVentasR; + TPageControl *PageControl3; + TTabSheet *VentasCompletas; + TDBGrid *DBGridVentas; + TTabSheet *VentasResumidas; + TDBGrid *DBGrid1; + TDataSource *DsVentasR; + TQuery *QComprasR; + TDataSource *DsComprasR; + TPageControl *PageControl4; + TTabSheet *ComprasCompleto; + TTabSheet *ComprasResumen; + TDBGrid *DBGridCompras; + TDBGrid *DBGrid2; + TLineSeries *Series1; + TSpeedButton *bGraficas; + TPopupMenu *mGraficas; + TMenuItem *MostrarVentas; + TMenuItem *MostrarCompras; + TLineSeries *Series2; + TQuery *QVentasEmpleados; + TDataSource *DsVentasEmpleados; + TDBGrid *DBGrid3; + TLabel *Label1; + TLabel *Label2; + TLabel *Label3; + TLabel *TotalVentas; + TLabel *TotalCompras; + TLabel *Beneficio; + TProgressBar *ProgressBar1; + TPopupMenu *mImpresion; + TMenuItem *MenuItem1; + TMenuItem *MenuItem2; + TMenuItem *VentasResumen1; + TMenuItem *ComprasResumen1; + TMenuItem *Empleados1; + TMenuItem *ResumenyGrfica1; + TMenuItem *N1; + TElasticForm *ElasticForm1; + void __fastcall ProductosClick(TObject *Sender); + void __fastcall EmpleadosClick(TObject *Sender); + void __fastcall ClientesClick(TObject *Sender); + void __fastcall FechaCajaChange(TObject *Sender); + void __fastcall QVentasCBeforeOpen(TDataSet *DataSet); + void __fastcall DBGridVentasDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall DBGridComprasDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall QComprasCBeforeOpen(TDataSet *DataSet); + void __fastcall QVentasCAfterOpen(TDataSet *DataSet); + void __fastcall QComprasCAfterOpen(TDataSet *DataSet); + void __fastcall QVentasRBeforeOpen(TDataSet *DataSet); + void __fastcall QComprasRBeforeOpen(TDataSet *DataSet); + void __fastcall bGraficasClick(TObject *Sender); + void __fastcall MostrarVentasClick(TObject *Sender); + void __fastcall MostrarComprasClik(TObject *Sender); + void __fastcall QVentasEmpleadosBeforeOpen(TDataSet *DataSet); + void __fastcall bImpresionClick(TObject *Sender); + void __fastcall VentasResumen1Click(TObject *Sender); + void __fastcall ComprasResumen1Click(TObject *Sender); +private: // User declarations + Graphics::TBitmap *BtmOK; // Imagen OK! + Graphics::TBitmap *BtmLockOpen; + Graphics::TBitmap *BtmLockShut; + +public: // User declarations + __fastcall TBlMVnt(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TBlMVnt *BlMVnt; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvBlcM_PrintFact.cpp b/TpvBlcM_PrintFact.cpp new file mode 100644 index 0000000..26be326 --- /dev/null +++ b/TpvBlcM_PrintFact.cpp @@ -0,0 +1,15 @@ +//---------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvBlcM_PrintFact.h" +#include "TpvBlcMVnt.h" +//---------------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRListadoFacturas *QRListadoFacturas; +//---------------------------------------------------------------------------- +__fastcall TQRListadoFacturas::TQRListadoFacturas(TComponent* Owner) + : TQuickRep(Owner) +{ +} +//---------------------------------------------------------------------------- \ No newline at end of file diff --git a/TpvBlcM_PrintFact.dfm b/TpvBlcM_PrintFact.dfm new file mode 100644 index 0000000..73956bd Binary files /dev/null and b/TpvBlcM_PrintFact.dfm differ diff --git a/TpvBlcM_PrintFact.h b/TpvBlcM_PrintFact.h new file mode 100644 index 0000000..2a2548f --- /dev/null +++ b/TpvBlcM_PrintFact.h @@ -0,0 +1,47 @@ +//---------------------------------------------------------------------------- +#ifndef TpvBlcM_PrintFactH +#define TpvBlcM_PrintFactH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRListadoFacturas : public TQuickRep +{ +__published: + TQRBand *QRBand1; + TQRLabel *QRLabel1; + TQRBand *QRBand2; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRBand *QRBand3; + TQRBand *QRBand4; + TQRExpr *QRExpr1; + TQRExpr *QRExpr2; + TQRExpr *QRExpr3; + TQRExpr *QRExpr4; + TQRExpr *QRExpr5; + TQRExpr *QRExpr6; + TQRExpr *QRExpr7; + TQRExpr *QRExpr8; + TQRBand *QRBand5; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRShape *QRShape1; + TQRExpr *QRExpr9; + TQRExpr *QRExpr10; + TQRExpr *QRExpr11; +private: +public: + virtual __fastcall TQRListadoFacturas(TComponent* Owner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRListadoFacturas *QRListadoFacturas; +//---------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/TpvCFG.cpp b/TpvCFG.cpp new file mode 100644 index 0000000..0c8e1a6 --- /dev/null +++ b/TpvCFG.cpp @@ -0,0 +1,144 @@ +//--------------------------------------------------------------------------- + +#include +#include +#pragma hdrstop + +#include "TpvCFG.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TCFG *CFG; +//--------------------------------------------------------------------------- +__fastcall TCFG::TCFG(TComponent* Owner) + : TForm(Owner) +{ + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\TPV.INI" ); + // General + initMax->Checked = ini->ReadBool( "Form", "InitMax", false ); + // Ventas + alFacturar->ItemIndex = ini->ReadInteger( "Ventas", "alFacturar", 1 ); + Codigo_y_Unidad->Checked = ini->ReadBool( "Ventas", "Codigo_y_Unidad", false ); + CajonMonedasDonde->ItemIndex = ini->ReadInteger( "Ventas", "CajonMonedas-donde", 2 ); + CajonMonedas->Checked = ini->ReadBool( "Ventas", "CajonMonedas", false ); + CajonMonedasDonde->Visible = CajonMonedas->Checked; + ProbarCajon->Visible = CajonMonedas->Checked; + CambioPrecioProdExistente->Checked = ini->ReadBool( "Ventas", "CambioPrecioProdExistente", false ); + // Almacen / Stock + RecalcularPrecioVentaAlCambiarCoste->ItemIndex = ini->ReadInteger( "Almacen", "RecalcularPrecioVentaAlCambiarCoste", 1 ); + RefQR_LEDS->Checked = ini->ReadBool( "Almacen", "RefQR_LEDS", true ); + ImprimirCabFam->Checked = ini->ReadBool( "Almacen", "ImprimirCabFam", true ); + ImprimirCabFamVacia->Checked = ini->ReadBool( "Almacen", "ImprimirCabFamVacia", false ); + StockQR_LEDS->Checked = ini->ReadBool( "Almacen", "StockQR_LEDS", true ); + // Resumenes + VntProdCosteBeneficio->Checked = ini->ReadBool( "Resumenes", "VntProdCosteBeneficio", true ); + // Compras + CmpActualizaPCoste->Checked = ini->ReadBool( "Compras", "CmpActualizaPCoste", true ); + CmpActualizaPVP->Checked = ini->ReadBool( "Compras", "CmpActualizaPVP", true ); + + delete ini; +} +//--------------------------------------------------------------------------- +void __fastcall TCFG::AbrirCajon( void ) +{ + HANDLE hCom; + hCom = CreateFile( CajonMonedasDonde->Items->Strings[CajonMonedasDonde->ItemIndex].c_str(), + GENERIC_READ | GENERIC_WRITE, + 0, // comm devices must be opened w/exclusive-access + NULL, // no security attributes + OPEN_EXISTING, // comm devices must use OPEN_EXISTING + 0, // not overlapped I/O + NULL // hTemplate must be NULL for comm devices + ); + + if (hCom != INVALID_HANDLE_VALUE) + { + DCB dcb; + // We will build on the current configuration, and skip setting the size + // of the input and output buffers with SetupComm. + if ( GetCommState(hCom, &dcb) ) + { + + // Fill in the DCB: baud=57,600 bps, 8 data bits, no parity, and 1 stop bit. + dcb.BaudRate = CBR_9600; // set the baud rate + dcb.ByteSize = 8; // data size, xmit, and rcv + dcb.Parity = NOPARITY; // no parity bit + dcb.StopBits = ONESTOPBIT; // one stop bit + + if ( SetCommState(hCom, &dcb) ) + TransmitCommChar( hCom, 0xFF ); + + CloseHandle( hCom ); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TCFG::SpeedButton1Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TCFG::SpeedButton2Click(TObject *Sender) +{ + // Meter datos en la base de datos... + if ( alFacturar->ItemIndex==-1 ) + alFacturar->ItemIndex = 1; + /* +0 ...siempre +1 ...solo a clientes +2 ...a clientes y preguntar otros +3 ...preguntar siempre +4 ...nunca + */ + if ( RecalcularPrecioVentaAlCambiarCoste->ItemIndex==-1 ) + RecalcularPrecioVentaAlCambiarCoste->ItemIndex = 1; + /* +0 ...nunca +1 ...absoluto +2 ...proporcional + */ + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + "\\TPV.INI" ); + // General + ini->WriteBool( "Form", "InitMax", initMax->Checked ); + // Ventas + ini->WriteInteger( "Ventas", "alFacturar", alFacturar->ItemIndex ); + ini->WriteBool( "Ventas", "Codigo_y_Unidad", Codigo_y_Unidad->Checked ); + ini->WriteInteger( "Ventas", "CajonMonedas-donde", CajonMonedasDonde->ItemIndex ); + ini->WriteBool( "Ventas", "CajonMonedas", CajonMonedas->Checked ); + ini->WriteBool( "Ventas", "CambioPrecioProdExistente", CambioPrecioProdExistente->Checked ); + // Almacen / Stock + ini->WriteInteger( "Almacen", "RecalcularPrecioVentaAlCambiarCoste", RecalcularPrecioVentaAlCambiarCoste->ItemIndex ); + ini->WriteBool( "Almacen", "RefQR_LEDS", RefQR_LEDS->Checked ); + ini->WriteBool( "Almacen", "ImprimirCabFam", ImprimirCabFam->Checked ); + ini->WriteBool( "Almacen", "ImprimirCabFamVacia", ImprimirCabFamVacia->Checked ); + ini->WriteBool( "Almacen", "StockQR_LEDS", StockQR_LEDS->Checked ); + // Resumenes + ini->WriteBool( "Resumenes", "VntProdCosteBeneficio", VntProdCosteBeneficio->Checked ); + // Compras + ini->WriteBool( "Compras", "CmpActualizaPCoste", CmpActualizaPCoste->Checked ); + ini->WriteBool( "Compras", "CmpActualizaPVP", CmpActualizaPVP->Checked ); + delete ini; +} +//--------------------------------------------------------------------------- +void __fastcall TCFG::SpeedButton3Click(TObject *Sender) +{ + ShowMessage( "Especifique un valor, para hacer que la siguiente factura empiece a contar desde él." ); +} +//--------------------------------------------------------------------------- + +void __fastcall TCFG::CajonMonedasClick(TObject *Sender) +{ + CajonMonedasDonde->Visible = CajonMonedas->Checked; + ProbarCajon->Visible = CajonMonedas->Checked; +} +//--------------------------------------------------------------------------- + +void __fastcall TCFG::ProbarCajonClick(TObject *Sender) +{ + AbrirCajon(); +} +//--------------------------------------------------------------------------- + + diff --git a/TpvCFG.dfm b/TpvCFG.dfm new file mode 100644 index 0000000..d467296 --- /dev/null +++ b/TpvCFG.dfm @@ -0,0 +1,354 @@ +object CFG: TCFG + Left = 189 + Top = 114 + Width = 400 + Height = 290 + Caption = 'Configuración' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 16 + object PageControl1: TPageControl + Left = 0 + Top = 34 + Width = 392 + Height = 210 + ActivePage = TabSheet1 + Align = alClient + TabOrder = 0 + object General: TTabSheet + Caption = 'General' + object Bevel3: TBevel + Left = 0 + Top = 0 + Width = 384 + Height = 179 + Align = alClient + end + object initMax: TCheckBox + Left = 8 + Top = 24 + Width = 225 + Height = 17 + Caption = 'Inicializar pantallas Maximizadas' + TabOrder = 0 + end + end + object Ventas: TTabSheet + Caption = 'Ventas' + ImageIndex = 1 + object Bevel2: TBevel + Left = 0 + Top = 0 + Width = 384 + Height = 179 + Align = alClient + end + object Label1: TLabel + Left = 8 + Top = 24 + Width = 110 + Height = 16 + Caption = 'Al Fichar, Facturar:' + end + object Label2: TLabel + Left = 136 + Top = 152 + Width = 136 + Height = 16 + Caption = '&Siguiente nº de factura:' + FocusControl = SigFactura + end + object SpeedButton3: TSpeedButton + Left = 360 + Top = 144 + Width = 23 + Height = 22 + Flat = True + Glyph.Data = { + 66010000424D6601000000000000760000002800000014000000140000000100 + 040000000000F000000000000000000000001000000000000000000000000000 + BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333300003333333333333333333300003333333800008333333300003333 + 3800444400833333000033338044444444083333000033380444BBBB44408333 + 0000333044444BB4444403330000338044444BB4444408330000330444444BB4 + 444440330000330444444BB4444440330000330444444BB44444403300003304 + 4444BBB4444440330000338044444444444408330000333044444BB444440333 + 0000333804444BB4444083330000333380444444440833330000333338004444 + 0083333300003333333800008333333300003333333333333333333300003333 + 33333333333333330000} + OnClick = SpeedButton3Click + end + object alFacturar: TComboBox + Left = 128 + Top = 16 + Width = 145 + Height = 24 + ItemHeight = 16 + TabOrder = 0 + Text = '...solo a clientes' + Items.Strings = ( + '...siempre' + '...solo a clientes' + '...a clientes y preguntar otros' + '...preguntar siempre' + '...nunca') + end + object Codigo_y_Unidad: TCheckBox + Left = 8 + Top = 56 + Width = 265 + Height = 17 + Caption = 'Despues de un Código, pedir Unidades' + TabOrder = 1 + end + object SigFactura: TMaskEdit + Left = 280 + Top = 144 + Width = 75 + Height = 24 + EditMask = '#########;0;_' + MaxLength = 9 + TabOrder = 2 + end + object CajonMonedas: TCheckBox + Left = 8 + Top = 80 + Width = 153 + Height = 17 + Caption = 'Cajon porta-monedas' + TabOrder = 3 + OnClick = CajonMonedasClick + end + object CajonMonedasDonde: TComboBox + Left = 160 + Top = 72 + Width = 113 + Height = 24 + ItemHeight = 16 + TabOrder = 4 + Items.Strings = ( + '' + 'COM1' + 'COM2' + 'COM3' + 'COM4' + 'LPT1' + 'LPT2') + end + object ProbarCajon: TButton + Left = 275 + Top = 72 + Width = 105 + Height = 25 + Caption = 'Probar' + TabOrder = 5 + Visible = False + OnClick = ProbarCajonClick + end + object CambioPrecioProdExistente: TCheckBox + Left = 8 + Top = 104 + Width = 369 + Height = 17 + Caption = 'Permitir cambiar precio a productos registrados' + TabOrder = 6 + end + end + object TabSheet1: TTabSheet + Caption = 'Almacen / Stock' + ImageIndex = 2 + object Bevel1: TBevel + Left = 0 + Top = 0 + Width = 384 + Height = 179 + Align = alClient + end + object Bevel4: TBevel + Left = 8 + Top = 48 + Width = 249 + Height = 81 + end + object Label3: TLabel + Left = 8 + Top = 16 + Width = 177 + Height = 16 + Caption = 'Al cambiar el precio de costo:' + end + object Label4: TLabel + Left = 16 + Top = 40 + Width = 141 + Height = 16 + Caption = 'Al imprimir Referencias:' + end + object Bevel5: TBevel + Left = 264 + Top = 48 + Width = 113 + Height = 81 + end + object Label5: TLabel + Left = 272 + Top = 40 + Width = 34 + Height = 16 + Caption = 'Stock' + end + object Bevel7: TBevel + Left = 8 + Top = 138 + Width = 369 + Height = 36 + end + object Label6: TLabel + Left = 16 + Top = 130 + Width = 81 + Height = 16 + Caption = 'En compras...' + end + object RecalcularPrecioVentaAlCambiarCoste: TComboBox + Left = 192 + Top = 8 + Width = 185 + Height = 24 + ItemHeight = 16 + TabOrder = 0 + Text = '...dejar el PVP igual' + Items.Strings = ( + '...dejar el PVP igual' + 'calcular PVP absoluto' + 'calcular PVP proporcional') + end + object RefQR_LEDS: TCheckBox + Left = 16 + Top = 64 + Width = 233 + Height = 17 + Caption = 'Indicar Combinados/Seguimientos' + TabOrder = 1 + end + object ImprimirCabFam: TCheckBox + Left = 16 + Top = 88 + Width = 233 + Height = 17 + Caption = 'Imprimir Cabecera de Familia' + TabOrder = 2 + end + object ImprimirCabFamVacia: TCheckBox + Left = 32 + Top = 104 + Width = 145 + Height = 17 + Caption = 'aunque este vacia' + TabOrder = 3 + end + object StockQR_LEDS: TCheckBox + Left = 272 + Top = 64 + Width = 97 + Height = 17 + Caption = 'Comb / Seg.' + TabOrder = 4 + end + object CmpActualizaPCoste: TCheckBox + Left = 16 + Top = 152 + Width = 297 + Height = 17 + Caption = 'Actualizar P.Coste de Almacen y recalcular el' + TabOrder = 5 + end + object CmpActualizaPVP: TCheckBox + Left = 312 + Top = 152 + Width = 49 + Height = 17 + Caption = 'PVP' + TabOrder = 6 + end + end + object TabSheet2: TTabSheet + Caption = 'Resumenes' + ImageIndex = 3 + object Bevel6: TBevel + Left = 0 + Top = 0 + Width = 384 + Height = 179 + Align = alClient + end + object VntProdCosteBeneficio: TCheckBox + Left = 8 + Top = 16 + Width = 273 + Height = 17 + Caption = 'Venta Productos: Mostrar Coste/Beneficio' + TabOrder = 0 + end + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 244 + Width = 392 + Height = 19 + Panels = <> + SimplePanel = False + end + object Panel2: TPanel + Left = 0 + Top = 0 + Width = 392 + Height = 34 + Align = alTop + BorderStyle = bsSingle + TabOrder = 2 + object SpeedButton1: TSpeedButton + Left = 8 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 04000000000080000000CE0E0000D80E00001000000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777777777777777771F77771F7777777777777111F777777 + 1F7777111F777771F777777111F77711F7777777111F711F77777777711111F7 + 7777777777111F7777777777711111F777777777111F71F77777771111F77711 + F77771111F7777711F77711F7777777711F77777777777777777} + OnClick = SpeedButton1Click + end + object SpeedButton2: TSpeedButton + Left = 360 + Top = 3 + Width = 25 + Height = 25 + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + BF0000BF000000BFBF00BF000000BF00BF00BFBF0000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777770000000000007770330770000330777033077000033077703307700003 + 30777033000000033077703333333333307770330000000330777030FFFFFFF0 + 30777030FCCCCFF030777030FFCCCFF030777037FCCCCFF000777077CCCFCFF0 + 8077777CCC777700007777CCC77777777777777C777777777777} + OnClick = SpeedButton2Click + end + end +end diff --git a/TpvCFG.h b/TpvCFG.h new file mode 100644 index 0000000..d4290d4 --- /dev/null +++ b/TpvCFG.h @@ -0,0 +1,72 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvCFGH +#define TpvCFGH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +#define EXIST_CFG +class TCFG : public TForm +{ +__published: // IDE-managed Components + TPageControl *PageControl1; + TStatusBar *StatusBar1; + TPanel *Panel2; + TSpeedButton *SpeedButton1; + TTabSheet *General; + TTabSheet *Ventas; + TLabel *Label1; + TComboBox *alFacturar; + TSpeedButton *SpeedButton2; + TCheckBox *Codigo_y_Unidad; + TCheckBox *initMax; + TLabel *Label2; + TMaskEdit *SigFactura; + TSpeedButton *SpeedButton3; + TTabSheet *TabSheet1; + TLabel *Label3; + TComboBox *RecalcularPrecioVentaAlCambiarCoste; + TCheckBox *RefQR_LEDS; + TLabel *Label4; + TBevel *Bevel1; + TBevel *Bevel2; + TBevel *Bevel3; + TBevel *Bevel4; + TCheckBox *ImprimirCabFam; + TCheckBox *ImprimirCabFamVacia; + TBevel *Bevel5; + TLabel *Label5; + TCheckBox *StockQR_LEDS; + TCheckBox *CajonMonedas; + TComboBox *CajonMonedasDonde; + TButton *ProbarCajon; + TTabSheet *TabSheet2; + TBevel *Bevel6; + TCheckBox *VntProdCosteBeneficio; + TCheckBox *CambioPrecioProdExistente; + TBevel *Bevel7; + TLabel *Label6; + TCheckBox *CmpActualizaPCoste; + TCheckBox *CmpActualizaPVP; + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall SpeedButton2Click(TObject *Sender); + void __fastcall SpeedButton3Click(TObject *Sender); + void __fastcall CajonMonedasClick(TObject *Sender); + void __fastcall ProbarCajonClick(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TCFG(TComponent* Owner); + void __fastcall AbrirCajon( void ); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TCFG *CFG; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvCmp.cpp b/TpvCmp.cpp new file mode 100644 index 0000000..55858ce --- /dev/null +++ b/TpvCmp.cpp @@ -0,0 +1,1031 @@ +//--------------------------------------------------------------------------- +#include +#include + +#include +#pragma hdrstop + +#include "TpvCFG.h" +#include "TpvCmp.h" +//#include "TpvGBDAT.h" +#include "TDlgBuscar.h" + +//--------------------------------------------------------------------------- +#pragma link "Grids" +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TTpvCmp1 *TpvCmp1; +//--------------------------------------------------------------------------- +__fastcall TTpvCmp1::TTpvCmp1(TComponent* Owner) + : TForm(Owner) +{ + BusqManual = false; + // Cargamos la imagen OK! + try { + BtmOK = new Graphics::TBitmap(); + BtmOK -> LoadFromFile( "Systm\\ok.bmp" ); + + BtmLockOpen = new Graphics::TBitmap(); + BtmLockOpen -> LoadFromFile( "Systm\\lockopen.bmp" ); + + BtmLockShut = new Graphics::TBitmap(); + BtmLockShut -> LoadFromFile( "Systm\\lockshut.bmp" ); + + } catch (...) { + ShowMessage( "Error: La imagen OK! está corrupta" ); + CambiandoFactura = false; + } + + + CambioCantidad5 = false; + CambiandoFactura = false; + + // Mostramos el dialogo, buscar [Productos] + DlgBuscarProd = new TDlgBuscar(this); + + TbProveedor -> Active = true; + DlgBuscarProd -> TbBusquedas -> TableName = "Tb_Ref"; + DlgBuscarProd -> TbBusquedas -> Active = true; + + // Selecciona la base de datos correcta (Tpv_Cm'####) + FechaFacturaA = FechaFacturaA.CurrentDate(); + + TbFacturasC -> Active = false; + TbFacturasD -> Active = false; + + TbFacturasC -> TableName = "Compras (cabecera).db"; + TbFacturasD -> TableName = "Compras (cuerpo).db"; + + TbFacturasD -> Active = true; + TbFacturasC -> Active = true; + + // Inicializamos la fecha de compra ( Y el filtro, en base a esta... ) + FechaFactura->Date = FechaFacturaA; + TbCartera -> Active = true; + + // Activamos el filtro para el dia/mes/año actuales (FechaFactura) + ReajustaFiltro(); + +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::SpeedButton5Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::SpeedButton4Click(TObject *Sender) +{ + TbFacturasD -> Insert(); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::SpeedButton6Click(TObject *Sender) +{ + TbFacturasD -> Delete(); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::BusqAntClick(TObject *Sender) +{ +/* + if ( DataModule1 -> TbFacturasC -> FindPrior() == true ) + { + BusqSig -> Enabled = true; + } else { + BusqAnt -> Enabled = false; + MessageBox( 0, "Coincidencia no hayada", "¡ Buscar Anterior !", MB_OK ); + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::BuscarFichaClick(TObject *Sender) +{ + MessageBox( 0, "¿Qué Pretendes BUSCAR?", "¡ No esta CLARO !", MB_OK ); +/* + TDlgBuscProd *DlgBuscProd; + + DlgBuscProd = new TDlgBuscProd(this); + + DlgBuscProd -> ShowModal(); + + if ( DlgBuscProd -> ModalResult == mrOk ) + { + BusqSig -> Enabled = true; + BusqAnt -> Enabled = true; + } + + delete DlgBuscProd; +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::BusqSigClick(TObject *Sender) +{ +/* + if ( DataModule1 -> TbFacturasC -> FindNext() == true ) + { + //DataModule1 -> TbProductos -> GotoCurrent(DataModule1 -> TbFacturasC); + BusqAnt -> Enabled = true; + } else { + BusqSig -> Enabled = false; + MessageBox( 0, "Coincidencia no hayada", "¡ Buscar Siguiente !", MB_OK ); + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::SpeedButton1Click(TObject *Sender) +{ + TbFacturasC -> Insert(); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::DsFacturasDDataChange(TObject *Sender, TField *Field) +{ + char BarraEstado[80]; + + // Indicador de FichaActual / Num.Fichas + if ( TbFacturasD -> RecNo > 0 && TbFacturasD -> RecordCount > 0 ) + { + sprintf( BarraEstado, "C: %d / %d", TbFacturasD -> RecNo, TbFacturasD -> RecordCount ); + } else { + sprintf( BarraEstado, "C: ¿Nuevo? / %d", TbFacturasD -> RecordCount ); + } + + StatusBar1->Panels->Items[1]->Text = BarraEstado; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::DsFacturasCDataChange(TObject *Sender, TField *Field) +{ + char BarraEstado[80]; + Currency TParcial; int CantProd = 0; + + // Indicador de FichaActual / Num.Fichas + if ( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) + { + if ( !CambioCantidad5 ) + { + SUMAcompraC = 0; IVAcompraC = 0; + + sprintf( BarraEstado, "F: %d / %d", TbFacturasC -> RecNo, TbFacturasC -> RecordCount ); + TbFacturasD -> DisableControls(); + TbFacturasD -> First(); + while ( ! TbFacturasD -> Eof ) + { + StatusBar1->Panels->Items[2]->Text = "Sumando: " + TbFacturasD -> RecNo; + + TParcial = TbFacturasD->FieldByName("PrecioC") -> AsCurrency * Currency( (int)( TbFacturasD->FieldByName("Cantidad") -> AsInteger ) ); + SUMAcompraC += TParcial; + IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD->FieldByName("IVA") -> AsInteger ) ); + + CantProd += TbFacturasD->FieldByName("Cantidad") -> AsInteger; + TbFacturasD -> Next(); + } + + TbFacturasD -> EnableControls(); + } + } else { + sprintf( BarraEstado, "F: ¿Nuevo? / %d", TbFacturasC -> RecordCount ); + CambiandoFactura = false; + return; + } + + SUMAcompra -> Caption = FormatCurr("###,###,###.#0", SUMAcompraC ); + IVAcompra -> Caption = FormatCurr("###,###,###.#0", IVAcompraC ); + TotalCompra -> Caption = FormatCurr("###,###,###.#0", SUMAcompraC + IVAcompraC ); + + StatusBar1->Panels->Items[2]->Text = BarraEstado; + btFacturar->Enabled = ! TbFacturasC->FieldByName("Contabilizada")->AsBoolean; + DsFacturasC->AutoEdit = ! TbFacturasC->FieldByName("Contabilizada")->AsBoolean; + DsFacturasD->AutoEdit = ! TbFacturasC->FieldByName("Contabilizada")->AsBoolean; + + if ( CambiandoFactura ) return; + CambiandoFactura = true; + cbFormaPago->ItemIndex = TbFacturasC->FieldByName("FormaPago")->AsInteger; + CambiandoFactura = false; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasCNewRecord(TDataSet *DataSet) +{ + try { + TbFacturasC -> FieldByName("FormaPago")->AsInteger = 0; + TbFacturasC -> FieldByName( "FechaFactura" ) -> AsDateTime = FechaFacturaA;//TDateTime::CurrentDate(); + TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger = 1; + TbFacturasC -> FieldByName( "UltimoPago" ) -> AsDateTime = TDateTime::CurrentDate(); + + } catch(...) { + Abort(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::Button1Click(TObject *Sender) +{ + // Mostramos el dialogo, buscar Vendedores + TDlgBuscar *DlgBuscar; + + DlgBuscar = new TDlgBuscar(this); + + DlgBuscar->Filter = "Proveedor > 0"; + DlgBuscar->TbBusquedas->Filter = DlgBuscar->Filter; + DlgBuscar->TbBusquedas->Filtered = true; + DlgBuscar->TbBusquedas->TableName = "personas"; + DlgBuscar->TbBusquedas->Active = true; + DlgBuscar->ShowModal(); + + if ( DlgBuscar -> ModalResult == mrOk ) + { + TbFacturasC -> Edit(); + TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger = DlgBuscar -> TbBusquedas -> FieldByName( "CodCliente1" ) -> AsInteger; + + TbFacturasC->FieldByName("Banco_Entidad" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_Entidad" )->Value; + TbFacturasC->FieldByName("Banco_Sucursal" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_Sucursal" )->Value; + TbFacturasC->FieldByName("Banco_DC" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_DC" )->Value; + TbFacturasC->FieldByName("Banco_NumCuenta" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_NumCuenta" )->Value; + + TbFacturasC -> Post(); + } + + delete DlgBuscar; +} +//--------------------------------------------------------------------------- +/* +void __fastcall TTpvCmp1::SpeedButton2Click(TObject *Sender) +{ + TDateTime FTest; + + enum TDateTimeFlag {Date, Time, DateTime} DTFlag = Date; + + unsigned short M, D, A, Aa; + + try { + FTest = TDateTime( FechaFactura->Text, DTFlag ); + FTest.DecodeDate( &A, &M, &D ); + FechaFacturaA.CurrentDate(); + FechaFacturaA.DecodeDate( &Aa, &M, &D ); + // Se prohibe cambiar de año + if ( Aa != A ) + { + MessageBox( 0, "Fecha de Factura fuera de rango.", "Atención", MB_OK ); + return; + } else { + FechaFacturaA = FTest; + ReajustaFiltro(); + } + } catch(...) { + MessageBox( 0, "Imposible aplicar filro.", "Atención", MB_OK ); + } +} +*/ +//--------------------------------------------------------------------------- +void _fastcall TTpvCmp1::ReajustaFiltro(void) +{ + + SUMAcompra->Caption = 0; IVAcompra->Caption = 0; TotalCompra->Caption = 0; + + TbFacturasC->FilterOptions = TbFacturasC->FilterOptions << foCaseInsensitive; + + TbFacturasC->Filter = "([FechaFactura] = '" + FechaFacturaA + "')"; + + TbFacturasC->Filtered = true; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::DBEdit1KeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + Key = 0; + TbFacturasC -> Post(); + Button1 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasCBeforeDelete(TDataSet *DataSet) +{ + if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean == true ) + { + ShowMessage( "No se pueden eliminar, facturas que hayan sido contabilizadas." ); + Abort(); + } + + switch( MessageDlg( "Atención, está apunto de\neliminar la factura " + TbFacturasC -> FieldByName( "CodFactura" ) -> AsString + "...\ny todas sus compras asociadas.\n¿Realmente desea continuar?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) ) + { + case mrNo: + Abort(); + break; + default: + // Borramos y NO DESCONTAMOS DEL ¡¡¡STOCK!!! + while( TbFacturasD -> RecordCount != 0 ) + { + TbFacturasD -> Delete(); + } + break; + }; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasDBeforeInsert(TDataSet *DataSet) +{ + if ( !( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) ) + { + MessageBox( 0, "¿ No cree que debería crear,\no seleccionar una factura nueva,\nantes de agregar datos de compra?.", "¡ Atención !", MB_OK ); + Abort(); + } +} +//--------------------------------------------------------------------------- +// +// Muestra la ficha para elegir producto, y en caso de ser distinto al actual +// actualiza los Stock's correspondientes. +// +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::DBGrid1EditButtonClick(TObject *Sender) +{ + if ( !( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) ) + { + MessageBox( 0, "¿ No cree que debería crear,\no seleccionar una factura nueva,\nantes de agregar datos de compra?.", "¡ Atención !", MB_OK ); + return; + } + + // Mostramos el dialogo, buscar Productos + DlgBuscarProd -> ShowModal(); + + if ( DlgBuscarProd -> ModalResult == mrOk ) + { + if ( TbFacturasD -> RecordCount <= 0 ) + TbFacturasD -> Insert(); + + if ( TbFacturasD -> State != dsEdit ) + TbFacturasD -> Edit(); + + BusqManual = true; + TbFacturasDCodProductoSetText(TbFacturasD -> FieldByName( "CodProducto" ), + DlgBuscarProd -> TbBusquedas -> FieldByName( "ID Producto" ) -> AsString); + BusqManual = false; + + if ( TbFacturasD -> State != dsEdit ) + TbFacturasD -> Edit(); + + } +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::ActualizaStock( AnsiString CodProducto, int Cantidad, int CodProveedor ) +{ + // Localizamos el CodProducto y actualizamos + Set flags; + flags << loCaseInsensitive; + + DlgBuscarProd -> TbBusquedas -> Filtered = false; + if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", CodProducto, flags ) ) + { + DlgBuscarProd -> TbBusquedas -> Edit(); + DlgBuscarProd -> TbBusquedas -> FieldByName( "Stock Actual" ) -> AsInteger += Cantidad; + if ( CodProveedor != -1 ) + DlgBuscarProd -> TbBusquedas -> FieldByName( "ProveedorActual" ) -> AsInteger = CodProveedor; + DlgBuscarProd -> TbBusquedas -> Post(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasDCalcFields(TDataSet *DataSet) +{ + + TbFacturasDTotal -> AsCurrency = TbFacturasD->FieldByName("PrecioC")->AsCurrency * TbFacturasD->FieldByName("Cantidad") -> AsCurrency; +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::DBGrid1KeyPress(TObject *Sender, char &Key) +{ + switch( Key ) + { + case VK_RETURN: + if ( DBGrid1 -> EditorMode ) + { + if ( TbFacturasD -> State == dsEdit ) + TbFacturasD -> Post(); + if ( DBGrid1 -> Fields[DBGrid1 -> SelectedIndex] -> FieldName == "IVA" ) + { + DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; + TbFacturasD -> Next(); + if ( TbFacturasD -> Eof ) + { + TbFacturasD -> Append(); + } + } else + DBGrid1 -> SelectedIndex = DBGrid1 -> SelectedIndex + 1; + Key = 0; + } + break; + case '.': + Key = ','; + // FALTA 'BREAK' ARRIBA ¡¡¡¡¡¡¡¡ CORRECTO !!!!!!!!! + default: + // Solo si el campo seleccionado es el de NOMBRE DEL PRODUCTO + if ( DBGrid1 -> Fields[DBGrid1 -> SelectedIndex] -> FieldName == "NombreProducto" ) + { +// TInplaceEdit *CellsEditor; +// TCustomEdit +// DBGrid1 -> InplaceEditor -> SelStart = 1; +// DBGrid1 -> InplaceEditor -> SelLength = 2; + } + break; + } +} +//--------------------------------------------------------------------------- + +/* + + // Recalculamos los TOTALES + MessageBox ( 0, AnsiString ( "Antiguo: " + + Sender -> OldValue + + "\nNuevo: " + + Sender -> NewValue ).c_str() , "JEJE", MB_OK ); + +*/ +void __fastcall TTpvCmp1::TbFacturasDCantidadSetText(TField *Sender, + const AnsiString Text) +{ + Currency TParcial; + + ActualizaStock( TbFacturasD->FieldByName("CodProducto") -> AsString, + -1 * TbFacturasD->FieldByName("Cantidad") -> AsInteger, + -1 ); + // + + TParcial = TbFacturasD->FieldByName("PrecioC") -> AsCurrency * Currency( (int)( Sender -> AsInteger ) ); + SUMAcompraC -= TParcial; + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + Sender -> AsString = Text; + + TParcial = TbFacturasD->FieldByName("PrecioC") -> AsCurrency * Currency( (int)( Text.ToInt() ) ); + SUMAcompraC += TParcial; + IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + CambioCantidad5 = true; + TbFacturasC -> Edit(); + TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbFacturasC -> Post(); + CambioCantidad5 = false; + + + SUMAcompra -> Caption = AnsiString( SUMAcompraC ); + IVAcompra -> Caption = AnsiString( IVAcompraC ); + TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); + + // + ActualizaStock( TbFacturasD->FieldByName("CodProducto") -> AsString, + +1 * TbFacturasD->FieldByName("Cantidad") -> AsInteger, + TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger ); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasDPrecioCSetText(TField *Sender, + const AnsiString Text) +{ + Currency TParcial; + + TParcial = Sender -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC -= TParcial; + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + Sender -> AsString = Text; + + TParcial = Currency( Text ) * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC += TParcial; + IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + CambioCantidad5 = true; + TbFacturasC -> Edit(); + TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbFacturasC -> Post(); + CambioCantidad5 = false; + +///////// ACTUALIZAMOS EL PrecioC en el LISTADO DE PRODUCTOS :--------- + if ( CFG->CmpActualizaPCoste->Checked ) + { + Set flags; + flags << loCaseInsensitive; + if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", TbFacturasD->FieldByName( "CodProducto" )->AsString, flags ) ) + { + DlgBuscarProd -> TbBusquedas -> Edit(); + if ( CFG->CmpActualizaPVP->Checked ) + { + /// CUIDADO QUE TAMBIEN ESTO ESTA LIGADO A TPVproductos.CPP y TPVcmp.CPP + Currency Ganancia = 0, PC; + if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex > 0 ) + { + Ganancia = DlgBuscarProd->TbBusquedas->FieldByName("Precio Venta 1")->AsCurrency - Sender->AsCurrency; + PC = Sender->AsCurrency; + } + + /// CUIDADO QUE TAMBIEN ESTO ESTA LIGADO A TPVproductos.CPP y TPVcmp.CPP + if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex == 1 ) + DlgBuscarProd -> TbBusquedas->FieldByName("Precio Venta 1")->AsCurrency = Ganancia + Sender->AsCurrency; + if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex == 2 ) + DlgBuscarProd -> TbBusquedas->FieldByName("Precio Venta 1")->AsCurrency = Sender->AsCurrency + ( (Ganancia * Sender->AsCurrency)/PC ); + } + DlgBuscarProd -> TbBusquedas -> FieldByName( "Precio Costo" ) -> AsCurrency = Sender -> AsCurrency; + DlgBuscarProd -> TbBusquedas -> Post(); + } + } +/////////////////////////////////////////////////////////////////////// + + SUMAcompra -> Caption = AnsiString( SUMAcompraC ); + IVAcompra -> Caption = AnsiString( IVAcompraC ); + TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); + +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasDIVASetText(TField *Sender, + const AnsiString Text) +{ + Currency TParcial; + + TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC -= TParcial; + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( Sender -> AsInteger ) ); + + Sender -> AsString = Text; + + TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC += TParcial; + IVAcompraC += ( TParcial / 100 ) * Currency( (int)( Text.ToInt() ) ); + + CambioCantidad5 = true; + TbFacturasC -> Edit(); + TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbFacturasC -> Post(); + CambioCantidad5 = false; + + SUMAcompra -> Caption = AnsiString( SUMAcompraC ); + IVAcompra -> Caption = AnsiString( IVAcompraC ); + TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); + + // Localizacion del producto + Set flags; + flags << loCaseInsensitive; + DlgBuscarProd -> TbBusquedas -> Filtered = false; + if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", Text, flags ) ) + { + DlgBuscarProd -> TbBusquedas -> Edit(); + DlgBuscarProd -> TbBusquedas -> FieldByName( "IVA Costo" ) -> AsInteger = TbFacturasD -> FieldByName( "IVA" ) -> AsInteger; + DlgBuscarProd -> TbBusquedas -> Post(); + } + + } +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasDCodProductoSetText(TField *Sender, + const AnsiString Text) +{ + AnsiString oldCodProducto,SearchField; + Currency TParcial; + + oldCodProducto = Sender -> AsString; + + TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC -= TParcial; + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + Sender -> AsString = Text; + // Localizacion del producto + Set flags; + flags << loCaseInsensitive; + DlgBuscarProd -> TbBusquedas -> Filtered = false; + /*if ( BusqManual ) SearchField = "ForcedIndex"; else */ + SearchField = "ID Producto"; + if ( DlgBuscarProd -> TbBusquedas -> Locate( SearchField, Text, flags ) ) + { + TbFacturasD->FieldByName( "NombreProducto" )->AsString = DlgBuscarProd->TbBusquedas->FieldByName( "Nombre del Producto" )->AsString; + TbFacturasDPrecioC -> AsCurrency = DlgBuscarProd->TbBusquedas->FieldByName( "Precio Costo" )->AsCurrency; + TbFacturasD->FieldByName( "IVA" )->AsInteger = DlgBuscarProd->TbBusquedas->FieldByName( "I.V.A" )->AsInteger; + + if ( oldCodProducto != TbFacturasD->FieldByName( "CodProducto" )->AsString ) + { + ActualizaStock( oldCodProducto, + -1 * TbFacturasD -> FieldByName( "Cantidad" ) -> AsInteger, + -1 ); + + ActualizaStock( Sender -> AsString, + +1 * TbFacturasD -> FieldByName( "Cantidad" ) -> AsInteger, + TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger ); + } + + } + + TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC += TParcial; + IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + CambioCantidad5 = true; + TbFacturasC -> Edit(); + TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbFacturasC -> Post(); + CambioCantidad5 = false; + + SUMAcompra -> Caption = AnsiString( SUMAcompraC ); + IVAcompra -> Caption = AnsiString( IVAcompraC ); + TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::DBGrid1ColExit(TObject *Sender) +{ + if ( TbFacturasD -> State == dsEdit ) + try { + TbFacturasD -> Post(); + }catch(...){ + // Do nothing + } +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::TbFacturasDBeforeDelete(TDataSet *DataSet) +{ + if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean == true ) + { + ShowMessage( "No se pueden eliminar, lineas de facturas que hayan sido contabilizadas." ); + Abort(); + } + + switch( MessageDlg( "Atención, está apunto de\neliminar la compra señalada actual...\n¿Realmente desea continuar?", mtConfirmation, TMsgDlgButtons() << mbNo << mbYes, 0 ) ) + { + case mrNo: + Abort(); + break; + default: + // No nos olvidemos de anular todo esto (Y del STOCK) + ActualizaStock( TbFacturasD -> FieldByName( "CodProducto" ) -> AsString, + -1 * TbFacturasD -> FieldByName( "Cantidad" ) -> AsInteger, + -1); + Currency TParcial; + TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); + SUMAcompraC -= TParcial; + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + CambioCantidad5 = true; + TbFacturasC -> Edit(); + TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbFacturasC -> Post(); + CambioCantidad5 = false; + + SUMAcompra -> Caption = AnsiString( SUMAcompraC ); + IVAcompra -> Caption = AnsiString( IVAcompraC ); + TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::FormClose(TObject *Sender, TCloseAction &Action) +{ + // Eliminamos el dialogo, buscar [Productos] + delete DlgBuscarProd; + // Destruimos la imagen de OK! + delete BtmOK; + delete BtmLockOpen; + delete BtmLockShut; + + try + { + if ( TbFacturasD -> State == dsEdit || TbFacturasD -> State == dsInsert ) + TbFacturasD -> Post(); + if ( TbFacturasC -> State == dsEdit || TbFacturasC -> State == dsInsert ) + TbFacturasC -> Post(); + if ( TbCartera -> State == dsEdit || TbCartera -> State == dsInsert ) + TbCartera -> Post(); + } catch(...) + { + // Nothing + } +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::FechaFacturaChange(TObject *Sender) +{ + #ifdef TB_DISCONTINUAS + // Si el año de la factura que pedimos ver, no concuerda con los años que + // estamos viendo, abrimos la base de datos que concuerde... + enum TDateTimeFlag {Date, Time, DateTime} DTFlag = Date; + unsigned short M, D, A, Aa; + + try { + FechaFacturaA.DecodeDate( &Aa, &M, &D ); + FechaFactura -> Date.DecodeDate( &A, &M, &D ); + // Se prohibe cambiar de año + if ( Aa != A ) + { + MessageBox( 0, "Fecha de Factura fuera de rango.", "Atención CAMBIAREMOS DE BD...", MB_OK ); + // CAMBIAMOS DE BASE DE DATOS... (SOLO SI ES POSIBLE) + if ( access( AnsiString("Compras (cabecera) '"+ AnsiString(A)).c_str(), 0 ) != 0 ) + { + MessageBox( 0, "Imposible aplicar filro.", "Atención", MB_OK ); + return; + } + + TbFacturasC -> Active = false; + TbFacturasD -> Active = false; + TbFacturasC -> TableName = "Compras (cabecera) '"+ AnsiString(A); + TbFacturasD -> TableName = "Compras (cuerpo) '"+ AnsiString(A); + TbFacturasD -> Active = true; + TbFacturasC -> Active = true; + } + } catch(...) { + MessageBox( 0, "Imposible aplicar filro.", "Atención", MB_OK ); + } + #endif + + // Reajustamos el filtro... + FechaFacturaA = FechaFactura -> Date; + ReajustaFiltro(); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::TbFacturasDNombreProductoSetText(TField *Sender, + const AnsiString Text) +{ + // Si modifica el nombre del producto... ( El código debe ser "VACIO" ) + if ( ( TbFacturasDCodProducto -> AsString ) . IsEmpty() ) + Sender -> AsString = Text; +} +//--------------------------------------------------------------------------- + + +void __fastcall TTpvCmp1::btFacturarClick(TObject *Sender) +{ + // ¿ Actualizar factura ? + if ( + TbFacturasC->FieldByName("Contabilizada")->AsBoolean!=true && + Application->MessageBox("¿ Actualizar Factura ?", "Alerta contable", MB_OKCANCEL ) != IDCANCEL + ) + { + int maxCONT; + + TbFacturasC->Edit(); + TbFacturasC->FieldByName("Contabilizada")->AsBoolean = true; + TbFacturasC->Post(); + +/* + TbAsientos->FilterOptions = TbAsientos->FilterOptions << foCaseInsensitive; + TbAsientos->Filter = "([nAsiento] = 40)"; + TbAsientos-> Active = true; + + maxCONT = 0; + TbAsientos->First(); + while( ! TbAsientos-> Eof ) + { + if ( TbAsientos-> FieldByName("nOrden")->AsInteger > maxCONT ) + maxCONT = TbAsientos-> FieldByName("nOrden")->AsInteger; + TbAsientos->Next(); + } + + //##### BLOQUEAR BD ############################### + //#################################### + double SumaTotal = TbFacturasC->FieldByName("TotalSin")->AsCurrency + TbFacturasC->FieldByName("TotalIva")->AsCurrency; + TbAsientos -> InsertRecord( ARRAYOFCONST( ( 40, (maxCONT+1), TbFacturasC->FieldByName("FechaFatura")->Value, (400000000+TbFacturasC->FieldByName("CodProveedor")->AsInteger), SumaTotal, false, AnsiString( "Su factura nº: " + TbFacturasC->FieldByName("CodFactura")->AsString ), TbFacturasC->FieldByName("EnlaceFactura")->AsInteger ) ) ); + TbAsientos -> InsertRecord( ARRAYOFCONST( ( 40, (maxCONT+2), TbFacturasC->FieldByName("FechaFatura")->Value, 472000016, IVAcompraC, false, AnsiString( "Su factura nº: " + TbFacturasC->FieldByName("CodFactura")->AsString ), TbFacturasC->FieldByName("EnlaceFactura")->AsInteger ) ) ); +#ifdef EXIST_CFG +if ( ! CFG->AsientoProductosIndividual ) +{ + TbFacturasD->Fisrt(); + while( !TbFacturasD->Eof ) + { + // SUMA PRODUCTOS INDIVIDUALES + TbFacturasD->Next(); + } +} else +#endif + TbAsientos -> InsertRecord( ARRAYOFCONST( ( 40, (maxCONT+3), TbFacturasC->FieldByName("FechaFatura")->Value, "600000001", SUMAcompraC, false, AnsiString( "Su factura nº: " + TbFacturasC->FieldByName("CodFactura")->AsString ), TbFacturasC->FieldByName("EnlaceFactura")->AsInteger ) ) ); + //#################################### +*/ + } + +} +//--------------------------------------------------------------------------- +void __fastcall TTpvCmp1::SpeedButton2Click(TObject *Sender) +{ + // Imprimir +} +//--------------------------------------------------------------------------- + + + +void __fastcall TTpvCmp1::DsCarteraDataChange(TObject *Sender, + TField *Field) +{ + Edit2->Text = ""; + Edit1->Text = ""; +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::Edit2Change(TObject *Sender) +{ + bool pag; short int i; int npagos; + Currency Total = SUMAcompraC + IVAcompraC; + + if ( Edit2->Text . IsEmpty() ) return; + + try { + npagos = Edit2->Text.ToInt(); + } catch(...) { + ShowMessage( "El número de veces a fraccionar el pago, no es correcto" ); + return; + } + if ( npagos < 2 ) + { + ShowMessage( "El número de veces a fraccionar el pago, no es correcto" ); + return; + } + + + pag = false; + // Eliminamos todos los pagos acumulados (SOLO SI NO HAY NINGUN PAGO REALIZADO) + TbCartera->First(); + while( !TbCartera->Eof ) + if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) + { + pag = true; + break; + } + + if ( pag ) + { + while( !TbCartera->Eof ) // Eliminamos los pagos actuales + TbCartera->Delete(); + + unsigned short year; + Total /= i; + TDateTime::CurrentDate().DecodeDate( &year, NULL, NULL); + // desde 1 para que inc. los meses + for ( i = 1; i <= npagos; i++ ) + TbCartera->InsertRecord( ARRAYOFCONST( ( TbFacturasC->FieldByName("EnlaceFactura")->AsInteger, Variant( EncodeDate( year, i, 1 ) ), Total, 0, cbFormaPago->ItemIndex, false ) ) ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::Edit1Change(TObject *Sender) +{ + bool pag; short int i; int npagos; int tpagos; + Currency Total = SUMAcompraC + IVAcompraC; + + if ( Edit1->Text . IsEmpty() ) return; + + try { + tpagos = Edit1->Text.ToInt(); + } catch(...) { + ShowMessage( "La cantidad para fraccionar el pago, no es correcta" ); + return; + } + if ( tpagos < 2000 ) + { + ShowMessage( "La cantidad para fraccionar el pago, no es correcta" ); + return; + } + + + pag = false; + // Eliminamos todos los pagos acumulados (SOLO SI NO HAY NINGUN PAGO REALIZADO) + TbCartera->First(); + while( !TbCartera->Eof ) + if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) + { + pag = true; + break; + } else { + TbCartera->Next(); + } + + if ( pag ) + { + while( !TbCartera->Eof ) // Eliminamos los pagos actuales + TbCartera->Delete(); + + unsigned short year; + npagos = Total / tpagos; + Total = tpagos; + TDateTime::CurrentDate().DecodeDate(&year, NULL, NULL); + // desde 1 para que inc. los meses + for ( i = 1; i <= npagos; i++ ) + TbCartera->InsertRecord( ARRAYOFCONST( ( TbFacturasC->FieldByName("EnlaceFactura")->AsInteger, Variant( EncodeDate( year, i, 1 ) ), Total, 0, cbFormaPago->ItemIndex, false ) ) ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::cbFormaPagoChange(TObject *Sender) +{ + if ( CambiandoFactura ) return; + +/* + // Debemos cambiar todo lo fraccionado + if ( cbFormaPago->Items->Strings[cbFormaPago->ItemIndex] == "Contado" ) + { + if ( Application->MessageBox("¿Eliminar todo el fraccionamiento de pagos?", "Alerta contable", MB_OKCANCEL ) != IDCANCEL ) + { + while( !TbCartera->Eof ) // Eliminamos los pagos actuales + TbCartera->Delete(); + dbgFraccion->Enabled = false; + Edit1->Enabled=false; Edit2->Enabled=false; + + TbFacturasC->Edit(); + TbFacturasC->FieldByName("UltimoPago")->AsDateTime = TDateTime::CurrentDate(); + TbFacturasC->Post(); + } else { + cbFormaPago->ItemIndex = TbCartera->FieldByName("FormaPago")->AsInteger; + } + } else { + dbgFraccion->Enabled = true; + Edit1->Enabled=true; Edit2->Enabled=true; + TbCartera->First(); + while( !TbCartera->Eof ) + { + TbCartera->Edit(); + TbCartera->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; + TbCartera->Post(); + TbCartera->Next(); + } + } +*/ + CambiandoFactura = true; + TbFacturasC->Edit(); + TbFacturasC->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; + TbFacturasC->Post(); + CambiandoFactura = false; +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::TbCarteraNewRecord(TDataSet *DataSet) +{ + TbCartera->FieldByName("Fecha")->AsDateTime = TDateTime::CurrentDate(); + TbCartera->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::TbCarteraBeforeDelete(TDataSet *DataSet) +{ + if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) + { + ShowMessage( "No se pueden eliminar, fraccionamientos que ya han sido efectuados." ); + Abort(); + } +/* + TbFacturasC->Edit(); + TbFacturasC->FieldByName("TotalFrac")->AsCurrency -= TbCartera->FieldByName("Importe")->AsCurrency * (( 100 + TbCartera->FieldByName("Incremento")->AsCurrency )/100); + TbFacturasC->Post(); +*/ +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::TbCarteraCalcFields(TDataSet *DataSet) +{ + TbCartera->FieldByName("Total")->AsCurrency = TbCartera->FieldByName("Importe")->AsCurrency * ( 0.01 * TbCartera->FieldByName("Incremento")->AsCurrency ); +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::dbgFraccionDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + if ( Column -> ID == 0 ) + { + if ( TbCartera->FieldByName("Pagado")->AsBoolean ) + { + dbgFraccion->Canvas->StretchDraw( Rect, BtmOK ); + } else { + dbgFraccion->Canvas->Brush->Color = clWindow; + dbgFraccion->Canvas->FillRect( Rect ); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::DBGrid2DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + if ( Column -> ID == 0 ) + { + if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean ) + DBGrid2->Canvas->StretchDraw( Rect, BtmLockShut ); + else + DBGrid2->Canvas->StretchDraw( Rect, BtmLockOpen ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TTpvCmp1::TbCarteraBeforeInsert(TDataSet *DataSet) +{ + if ( !( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) && + !( TbFacturasD -> RecNo > 0 && TbFacturasD -> RecordCount > 0 ) ) + { + MessageDlg("¿ No cree que debería crear,\no seleccionar una factura CON DATOS,\nantes de intentar fracionar su pago?.", mtWarning, TMsgDlgButtons() << mbOK, 0); +// MessageBox( 0, "¿ No cree que debería crear,\no seleccionar una factura CON DATOS,\nantes de intentar fracionar su pago?.", "¡ Atención !", MB_OK ); + Abort(); + } +} +//--------------------------------------------------------------------------- + + + + + +void __fastcall TTpvCmp1::TbCarteraFechaChange(TField *Sender) +{ + if ( (int)Sender->AsDateTime > (int)TbFacturasC->FieldByName("UltimoPago")->AsDateTime ) + { + TbFacturasC->Edit(); + TbFacturasC->FieldByName("UltimoPago")->AsDateTime = Sender->AsDateTime; + TbFacturasC->Post(); + } +} +//--------------------------------------------------------------------------- diff --git a/TpvCmp.dfm b/TpvCmp.dfm new file mode 100644 index 0000000..b45169a Binary files /dev/null and b/TpvCmp.dfm differ diff --git a/TpvCmp.h b/TpvCmp.h new file mode 100644 index 0000000..04bbe15 --- /dev/null +++ b/TpvCmp.h @@ -0,0 +1,206 @@ +//--------------------------------------------------------------------------- +#ifndef TpvCmpH +#define TpvCmpH +//--------------------------------------------------------------------------- +#include "TDlgBuscar.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" + + +#define DFechaFact 0 +#define DNumFact 1 +#define DNumProv 2 + +//--------------------------------------------------------------------------- +class TTpvCmp1 : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel2; + TSpeedButton *SpeedButton4; + TSpeedButton *SpeedButton5; + TSpeedButton *SpeedButton6; + TSpeedButton *BusqAnt; + TSpeedButton *BuscarFicha; + TSpeedButton *BusqSig; + TSpeedButton *btFacturar; + TDBNavigator *DBNavigator1; + TDBGrid *DBGrid1; + TStatusBar *StatusBar1; + TDataSource *DsFacturasD; + TLabel *Label6; + TLabel *TotalCompra; + TSpeedButton *SpeedButton1; + TTable *TbFacturasD; + TDBGrid *DBGrid2; + TDataSource *DsFacturasC; + TTable *TbFacturasC; + TLabel *Label10; + + + TStringField *TbFacturasCProveedor; + TIntegerField *TbFacturasCCodProveedor; + TStringField *TbFacturasCCodFactura; + TDateField *TbFacturasCFechaFactura; + TStringField *TbFacturasCProvPersona; + TStringField *TbFacturasCProvCIF; + TStringField *TbFacturasCProvTlf; + TStringField *TbFacturasCProvFax; + TAutoIncField *TbFacturasCEnlaceFactura; + TSmallintField *TbFacturasCNumeroPagos; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TBevel *Bevel1; + TDBText *DBText1; + TLabel *Label2; + TDBText *DBText2; + TLabel *Label4; + TDBText *DBText3; + TLabel *Label5; + TDBText *DBText4; + TDBText *DBText5; + TDBText *DBText8; + TLabel *Label9; + TDBEdit *DBEdit1; + TEdit *Edit1; + TBevel *Bevel2; + TLabel *Label8; + TLabel *Label11; + TLabel *SUMAcompra; + TLabel *Scantidad; + TLabel *Label14; + TLabel *IVAcompra; + TDBText *DBText6; + TLabel *Label3; + TButton *Button1; + TDBText *DBText7; + TDBGrid *dbgFraccion; + TBevel *Bevel3; + TLabel *Label1; + TDataSource *DsCartera; + TTable *TbCartera; + TDateTimePicker *FechaFactura; + TTable *TbProveedor; + TBooleanField *TbFacturasCContabilizada; + TStringField *TbFacturasCDescripcion; + TLabel *Label7; + TDBEdit *DBEdit3; + TSpeedButton *SpeedButton2; + TLabel *Label12; + TEdit *Edit2; + TComboBox *ComboVox; + TIntegerField *TbFacturasDEnlaceFactura; + TStringField *TbFacturasDCodProducto; + TStringField *TbFacturasDNombreProducto; + TSmallintField *TbFacturasDIVA; + TCurrencyField *TbFacturasDPrecioC; + TFloatField *TbFacturasDCantidad; + TCurrencyField *TbFacturasDTotal; + TIntegerField *TbCarteraEnlaceFactura; + TDateField *TbCarteraFecha; + TCurrencyField *TbCarteraImporte; + TCurrencyField *TbCarteraIncremento; + TSmallintField *TbCarteraFormaPago; + TBooleanField *TbCarteraPagado; + TCurrencyField *TbCarteraTotal; + TDateField *TbFacturasCUltimoPago; + TCurrencyField *TbFacturasCTotalSin; + TCurrencyField *TbFacturasCTotalIva; + TCurrencyField *TbFacturasCTotalFrac; + TSmallintField *TbFacturasCBanco_Entidad; + TSmallintField *TbFacturasCBanco_Sucursal; + TSmallintField *TbFacturasCBanco_DC; + TStringField *TbFacturasCBanco_NumCuenta; + TSmallintField *TbFacturasCFormaPago; + TIntegerField *TbFacturasCCod_Abono_Albaran; + TBooleanField *TbFacturasCAbono_o_Albaran; + TComboBox *cbFormaPago; + TElasticForm *ElasticForm1; + void __fastcall SpeedButton5Click(TObject *Sender); + void __fastcall SpeedButton4Click(TObject *Sender); + void __fastcall SpeedButton6Click(TObject *Sender); + void __fastcall BuscarFichaClick(TObject *Sender); + void __fastcall BusqAntClick(TObject *Sender); + void __fastcall BusqSigClick(TObject *Sender); + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall DsFacturasDDataChange(TObject *Sender, TField *Field); + void __fastcall DsFacturasCDataChange(TObject *Sender, TField *Field); + void __fastcall TbFacturasCNewRecord(TDataSet *DataSet); + void __fastcall Button1Click(TObject *Sender); + void __fastcall DBEdit1KeyPress(TObject *Sender, char &Key); + void __fastcall TbFacturasCBeforeDelete(TDataSet *DataSet); + void __fastcall TbFacturasDBeforeInsert(TDataSet *DataSet); + void __fastcall DBGrid1EditButtonClick(TObject *Sender); + void __fastcall TbFacturasDCalcFields(TDataSet *DataSet); + void __fastcall DBGrid1KeyPress(TObject *Sender, char &Key); + void __fastcall TbFacturasDCantidadSetText(TField *Sender, + const AnsiString Text); + void __fastcall TbFacturasDPrecioCSetText(TField *Sender, + const AnsiString Text); + void __fastcall TbFacturasDIVASetText(TField *Sender, const AnsiString Text); + void __fastcall TbFacturasDCodProductoSetText(TField *Sender, + const AnsiString Text); + + void __fastcall DBGrid1ColExit(TObject *Sender); + void __fastcall TbFacturasDBeforeDelete(TDataSet *DataSet); + + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall FechaFacturaChange(TObject *Sender); + void __fastcall TbFacturasDNombreProductoSetText(TField *Sender, + const AnsiString Text); + void __fastcall btFacturarClick(TObject *Sender); + + void __fastcall SpeedButton2Click(TObject *Sender); + + + void __fastcall DsCarteraDataChange(TObject *Sender, TField *Field); + void __fastcall Edit2Change(TObject *Sender); + void __fastcall Edit1Change(TObject *Sender); + void __fastcall cbFormaPagoChange(TObject *Sender); + void __fastcall TbCarteraNewRecord(TDataSet *DataSet); + void __fastcall TbCarteraBeforeDelete(TDataSet *DataSet); + void __fastcall TbCarteraCalcFields(TDataSet *DataSet); + void __fastcall dbgFraccionDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall DBGrid2DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall TbCarteraBeforeInsert(TDataSet *DataSet); + void __fastcall TbCarteraFechaChange(TField *Sender); +private: // User declarations + bool BusqManual; + Graphics::TBitmap *BtmOK; // Imagen OK! + Graphics::TBitmap *BtmLockOpen; + Graphics::TBitmap *BtmLockShut; + + TDlgBuscar *DlgBuscarProd; + + bool CambioCantidad5; + TDateTime FechaFacturaA; + Currency SUMAcompraC, IVAcompraC; + void __fastcall ReajustaFiltro(void); + void __fastcall ActualizaStock( AnsiString CodProducto, int Cantidad, int CodProveedor ); + // Indica si estamos cambiando de factura en este momento.... + bool CambiandoFactura; + +public: // User declarations + __fastcall TTpvCmp1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern TTpvCmp1 *TpvCmp1; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/TpvCmpProv.cpp b/TpvCmpProv.cpp new file mode 100644 index 0000000..ebe66d4 --- /dev/null +++ b/TpvCmpProv.cpp @@ -0,0 +1,47 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TpvCmpProv.h" +#include "TpvVntCltQR.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "ElastFrm" +#pragma link "TpvVntGeneral" +#pragma resource "*.dfm" +TCmpProv *CmpProv; +//--------------------------------------------------------------------------- +__fastcall TCmpProv::TCmpProv(TComponent* Owner) + : TVntGeneral(Owner) +{ + ImpagFact->Visible = false; + TodasFact->Visible = false; + TabSheet2->Visible = false; + + CodCliente = "Proveedor"; + TableFactName="Compras"; + + TbVentasC->IndexName = "CodProveedor (idx)"; + TbVentasC -> TableName = TableFactName+" (cabecera).db"; + TbVentasD -> TableName = TableFactName+" (cuerpo).db"; + +#ifndef DEM001 + TbVentasD -> Active = true; +#endif + TbVentasC -> Active = true; +} +//--------------------------------------------------------------------------- +void __fastcall TCmpProv::SpeedButton7Click(TObject *Sender) +{ + TVntCltQR *QR; + QR = new TVntCltQR(this); + QR->QuickRep1->ReportTitle = "Compras por Proveedor"; + QR->QuickRep1->DataSet = TbClientes; + QR->QRSubDetail1->DataSet = TbVentasC; + QR->QuickRep1->Preview(); + delete QR; +} +//--------------------------------------------------------------------------- + + diff --git a/TpvCmpProv.dfm b/TpvCmpProv.dfm new file mode 100644 index 0000000..4f9f305 --- /dev/null +++ b/TpvCmpProv.dfm @@ -0,0 +1,45 @@ +inherited CmpProv: TCmpProv + Left = 388 + Top = 123 + Caption = 'Compras a Proveedores' + PixelsPerInch = 96 + TextHeight = 16 + inherited PageControl1: TPageControl + inherited TabSheet2: TTabSheet + inherited Panel2: TPanel + inherited DBMemo1: TDBMemo + DataField = '' + DataSource = nil + end + inherited cbFormaPago: TComboBox + Sorted = False + Items.Strings = ( + 'Banco' + 'Cheque / Talon' + 'Efectivo' + 'Tarjeta') + end + end + end + end + inherited TbVentasC: TTable + TableName = 'Compras (cabecera).db' + object TbVentasCCodFactura: TStringField [1] + FieldName = 'CodFactura' + Size = 15 + end + inherited TbVentasCCodEmpleado: TIntegerField + FieldName = 'CodProveedor' + end + inherited TbVentasCEmplNombre: TStringField + KeyFields = 'CodProveedor' + end + inherited TbVentasCEmplApellidos: TStringField + KeyFields = 'CodProveedor' + end + inherited TbVentasCFacturaAbierta: TSmallintField + FieldKind = fkCalculated + Calculated = True + end + end +end diff --git a/TpvCmpProv.h b/TpvCmpProv.h new file mode 100644 index 0000000..badd6c1 --- /dev/null +++ b/TpvCmpProv.h @@ -0,0 +1,34 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvCmpProvH +#define TpvCmpProvH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "ElastFrm.hpp" +#include "TpvVntGeneral.h" +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TCmpProv : public TVntGeneral +{ +__published: // IDE-managed Components +// TStringField *TbVentasCCodFactura; + TStringField *TbVentasCCodFactura; + void __fastcall SpeedButton7Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TCmpProv(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TCmpProv *CmpProv; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvProductos.cpp b/TpvProductos.cpp new file mode 100644 index 0000000..35b0ef9 --- /dev/null +++ b/TpvProductos.cpp @@ -0,0 +1,1112 @@ +//--------------------------------------------------------------------------- +#include +#include + +#pragma hdrstop + +#include "TpvProductos.h" +#include "TpvProductosPrint1.h" +#include "TDlgBuscar.h" + +#ifdef EXIST_CFG +#include "TpvCFG.h" +#endif + +//--------------------------------------------------------------------------- +#pragma link "Grids" +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TProductos *Productos; +//--------------------------------------------------------------------------- +__fastcall TProductos::TProductos(TComponent* Owner) + : TForm(Owner) +{ + // Cargamos la imagen OK! + try { + BtmOK = new Graphics::TBitmap(); + BtmOK -> LoadFromFile( ExtractFilePath(Application->ExeName) + "Systm\\ok.bmp" ); + } catch (...) { + ShowMessage( "Error: La imagen OK! está corrupta" ); + } + + AArbol = true; + + TbProductos -> Active = true; + TbProductos->FieldByName("I.V.A")->OnSetText = TbProductosIVASetText; + + TbProductosC -> Active = true; + TbProdInfC -> Active = true; + TbSeguimiento -> Active = true; + + // Cargar el dialogo, buscar Productos + DlgBuscar = new TDlgBuscar(this); + DlgBuscar -> TbBusquedas -> TableName = TbProductos -> TableName; + DlgBuscar -> TbBusquedas -> Active = true; +} + +//--------------------------------------------------------------------------- +void __fastcall TProductos::TProductosIVASetText(TField *Sender, + const AnsiString Text) +{ + long IVA; + + IVA = Text.ToInt(); + + if ( IVA >= 0 && IVA <= 100) + { + TbProductos -> FieldByName("I.V.A") -> AsInteger = IVA; + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit11KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit16 -> SetFocus(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit12KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit17 -> SetFocus(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit13KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit18 -> SetFocus(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit14KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit19 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- + void TProductos::CambiaEstadoCombinados(void) + { + if ( TbProductosCOMBINADO -> AsBoolean ) + DBGrid2 -> Color = clWindow; + else + DBGrid2 -> Color = clBtnFace; + } +//--------------------------------------------------------------------------- +void __fastcall TProductos::InfoProductosDataChange(TObject *Sender, + TField *Field) +{ + char BarraEstado[80]; + + // Campo no MODIFICABLE manualmente... + if ( TbProductosEsNodo -> Value == -1 ) + { +// CodigosAsociados -> Enabled = false; + ListPrecios -> Enabled = false; + DBEdit15 -> Enabled = false; + } else { +// CodigosAsociados -> Enabled = true; + ListPrecios -> Enabled = true; + DBEdit15 -> Enabled = true; + } + + // Panel de combinados: Encendido / Apagado + CambiaEstadoCombinados(); + + if ( PageControl1->ActivePage == TabSheet2 ) + { + AnsiString RutaImagen = TbProductos -> FieldByName( "PathImagen" ) -> AsString; + if ( FileExists( ExtractFilePath(Application->ExeName) + RutaImagen ) ) + Image1->Picture->LoadFromFile( ExtractFilePath(Application->ExeName)+RutaImagen ); + else + Image1->Picture->LoadFromFile( ExtractFilePath(Application->ExeName) + "systm\\iErro.bmp" ); + + + Image1->Left = ImgRef->Left; + Image1->Top = ImgRef->Top; + // Vemos si es mayor que el recuadro que la contiene... + if ( Image1->Picture->Height > ImgRef->Height || Image1->Picture->Width > ImgRef->Width ) + { + // Reescalamos en ese caso + if ( Image1->Picture->Height > Image1->Picture->Width ) + { + Image1->Height = ImgRef->Height; + Image1->Width = (Image1->Picture->Width * ImgRef->Height ) / Image1->Picture->Height; + Image1->Left += ( ImgRef->Width - Image1->Width ) / 2; + } else { + Image1->Width = ImgRef->Width; + Image1->Height = (Image1->Picture->Height * ImgRef->Width ) / Image1->Picture->Width; + Image1->Top += ( ImgRef->Height - Image1->Height ) / 2; + } + } else { + Image1->Left += ( ImgRef->Width - Image1->Picture->Width ) / 2; + Image1->Top += ( ImgRef->Height - Image1->Picture->Height ) / 2; + Image1->Height = Image1->Picture->Height; + Image1->Width = Image1->Picture->Width; + } + } + + // Indicador de FichaActual / Num.Fichas + if ( InfoProductos -> DataSet -> RecNo > 0 ) + sprintf( BarraEstado, "%d / %d", InfoProductos -> DataSet -> RecNo, InfoProductos -> DataSet -> RecordCount ); + else + sprintf( BarraEstado, "¿Nuevo? / %d", InfoProductos -> DataSet -> RecordCount ); + +// Edit1 -> Text = AnsiString::IntToHex( TbProductosFamilia -> AsInteger, 18 ) + ":" + AnsiString( (int) TbProductosForcedIndex -> AsInteger ); + + StatusBar1->Panels->Items[1]->Text = BarraEstado; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBGrid1DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) +{ + // Linea Roja para productos "Especiales" + if ( Column -> ID != 0 && + ( TbProductosEsNodo -> Value == -1 || + ( TbProductos -> FieldByName("I.V.A") -> AsInteger == 100 && + TbProductos -> FieldByName("Precio Costo") -> AsFloat == 0 ) ) + ) + { + DBGrid1 -> Canvas -> Brush -> Color = clRed; + DBGrid1 -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + // Precisa seguimiento ¿? + if ( Column -> ID == 0 ) + if ( TbProductos -> FieldByName("Seguimiento") -> AsBoolean ) + { + DBGrid1 -> Canvas -> StretchDraw( Rect, BtmOK ); + } else { + DBGrid1 -> Canvas -> Brush -> Color = clWindow; + DBGrid1 -> Canvas -> FillRect( Rect ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBGrid1KeyPress(TObject *Sender, char &Key) +{ + if ( TbProductosEsNodo -> Value == -1 && DBGrid1 -> EditorMode ) + { + // Abortamos la edicion + Key = 0; + return; + } + + switch( Key ) + { + case VK_RETURN: + if ( DBGrid1 -> EditorMode ) + { + Key = 0; + if ( DBGrid1 -> Fields[DBGrid1 -> SelectedIndex + 1] == NULL ) + { + DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; + TbProductos -> Next(); + if ( TbProductos -> Eof ) + { + TbProductos -> Append(); + } + } else + DBGrid1 -> SelectedIndex++; + } + break; + case '.': + Key = ','; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::SpeedButton2Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::SpeedButton1Click(TObject *Sender) +{ + TbProductos -> Insert(); +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::SpeedButton3Click(TObject *Sender) +{ + TbProductos -> Delete(); +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::BusqAntClick(TObject *Sender) +{ + if ( DlgBuscar->Buscar( PRIOR, TbProductos ) ) + BusqSig -> Enabled = true; + else + BusqAnt -> Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::BuscarFichaClick(TObject *Sender) +{ + Indices -> Selected = Indices -> Items -> GetFirstNode(); + TbProductos->Filtered = false; + if ( DlgBuscar->Buscar( NEW, TbProductos ) ) + { + BusqSig -> Enabled = true; + BusqAnt -> Enabled = true; + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::BusqSigClick(TObject *Sender) +{ + if ( DlgBuscar->Buscar( NEXT, TbProductos ) ) + BusqAnt -> Enabled = true; + else + BusqSig -> Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::SpeedButton7Click(TObject *Sender) +{ + TInformesProducto *InformesProducto; + + InformesProducto = new TInformesProducto(this); + + InformesProducto -> ShowModal(); + + delete InformesProducto; +} +//--------------------------------------------------------------------------- +int __fastcall TProductos::NuevoHeredero( TTreeNode *Padre, bool EsHijo ) +{ + union { + int FamiliaC; + unsigned char Fam[4]; + } Long_Char, Dev; + + bool Occupado[256]; // Creamos e inicializamos el + for ( unsigned char i = 0; i <255; i++ ) // el vector de posiciones libres. + Occupado[i] = false; + + short int PLevel; // Nivel del padre, y anterior + PLevel = Padre -> Level + // Valor a devolver + ( EsHijo ? 1 : 0 ); + if ( Padre -> Data == NULL ) + Dev . FamiliaC = 0; + else + Dev . FamiliaC = ( (int *)Padre -> Data )[0]; + + if ( PLevel < 0 || PLevel > 3 ) // Nivel no tratable (máx. 4) + return 0; + + int pHijo, uHijo; + pHijo = 0; + uHijo = 255; + + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +#define GetFirstChild( Sender ) Indices->Items->Item[Sender->AbsoluteIndex+(Sender->AbsoluteIndex!=(Indices->Items->Count - 1)?1:0)] +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +//#define GetFirstChild( Sender ) ( Sender ->getFirstChild()) + + // AÑADIR HIJOS (nos preparamos para... añadir un hermano) + if ( EsHijo ) + { + // En caso de que estemos añadiendo un EL PRIMER HIJO + if ( Padre -> HasChildren ) + Padre = Padre -> getFirstChild(); + else { + Dev . Fam[ 4 - (PLevel + 1) ] = 1; + return Dev . FamiliaC; + } + } + + // AÑADIR HERMANOS + bool Enc = false; int N; + uHijo = (Padre->Parent==NULL)? (Indices->Items->Count-2) : (Padre->Parent)->Count; // Cuantos hermanos son? + if ( uHijo >= 255 ) // Uff, son demasiados + Enc = false; + else { // Encontramos la primera entrada libre + + // Obtengo el primer hijo... TTreeNodes +try { + Padre = (Padre->Parent==NULL) ? (Indices->Items->Item[2]) : ( Padre -> Parent ) -> getFirstChild(); +} catch(...) { Padre = NULL; } + while ( Padre != NULL ) + { + Long_Char . FamiliaC = ((int *)Padre->Data)[0]; + Occupado[ Long_Char . Fam[ 4 - (PLevel+1) ] ] = true; + Padre = Padre -> getNextSibling(); + } + // Comprobamos que el nº de iguales a este nivel, es menor del máximo permitido + for ( N = 1; N < 255 && !Enc ; N++ ) + if ( ! Occupado[ N ] ) + { + Enc = true; break; + } + } + if ( Enc ) + Dev . Fam[ 4 - (PLevel + 1) ] = N; + else + Dev . FamiliaC = 0; + + return Dev . FamiliaC; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::FamiliaClick(TObject *Sender) +{ + TTreeNode * NuevoNodo; + int Familia; + + if ( ( Familia = NuevoHeredero( Indices -> Selected, false ) ) == 0 ) + { + ShowMessage( "Sobrepasó el nivel maximo de descendencia o hijos." ); + return; + } + + // Añadimos un nuevo nodo al primer nivel + NuevoNodo = Indices->Items->Add(Indices->Selected, "Nueva Familia"); + NuevoNodo -> Data = new int [3]; + +// NuevoNodo -> Text = AnsiString::IntToHex(Familia, 18); + + ((int *)NuevoNodo -> Data)[0] = Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + + // Establecemos las imágenes (Por defecto es documento final) + NuevoNodo->ImageIndex = 2; + NuevoNodo->SelectedIndex = 2; + + // Seleccionando el nuevo nodo como actual + Indices->Selected = NuevoNodo; + // Creamos un nuevo registro, él sera su familia y como padre... + TbProductos -> InsertRecord( OPENARRAY( TVarRec, ( NULL, NULL, NULL, Familia, 0, -1, "Nueva Familia" ) ) ); + ((int *)NuevoNodo -> Data)[2] = TbProductosForcedIndex -> AsInteger; + + + NuevoNodo->EditText(); // y editamos el texto +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::SubFamiliaClick(TObject *Sender) +{ +// int N; + TTreeNode * NuevoNodo; + + // Si no hay un nodo seleccionado actualmente + if (Indices->Selected == NULL || Indices->Selected->Data==NULL) + // no podemos saber a qué libro se desea añadir + ShowMessage("Seleccione antes la familia a la que añadir la SubFamilia."); + else { + // Para abarcar la segunda familia --> Nivel 7 ( 8 Anidamientos ) + if ( Indices -> Selected -> Level < 3 ) + { + int Familia; + + if ( ( Familia = NuevoHeredero( Indices -> Selected, true ) ) == 0 ) + { + ShowMessage( "Sobrepasó el nivel maximo de descendencia o hijos" ); + return; + } + + // Obtenemos el índice absoluto del nodo seleccionado +// N = Indices->Selected->AbsoluteIndex; + + // Añadimos un nuevo nodo estableciendo + // el título y sus imágenes + NuevoNodo = Indices->Items->AddChild(Indices->/*Items->Item[N]*/Selected, "Nueva SubFamilia"); + NuevoNodo -> Data = new int [3]; + +// NuevoNodo -> Text = AnsiString::IntToHex(Familia, 18); + + ((int *)NuevoNodo -> Data)[0] = Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + + NuevoNodo->ImageIndex = 2; + NuevoNodo->SelectedIndex = 2; + + // Expandimos el nodo al que se acaba + // de añadir el capítulo + Indices->/*Items->Item[N]*/Selected->Expand(false); + + // Seleccionamos el nuevo nodo como el actual + Indices->Selected = NuevoNodo; + + // Creamos un nuevo registro, él sera su familia y como padre... + TbProductos -> InsertRecord( OPENARRAY( TVarRec, ( NULL, NULL, NULL, Familia, 0, -1, "Nueva Familia" ) ) ); + ((int *)NuevoNodo -> Data)[2] = TbProductosForcedIndex -> AsInteger; + + NuevoNodo->EditText(); // y editamos el título + + } else { + MessageBox( 0, "Ha sobrepasado el nivel máximo de anidamiento o descendencias.", "¡Alerta!", MB_OK ); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesCollapsing(TObject *Sender, TTreeNode *Node, + bool &AllowCollapse) +{ + // Si el nodo es padre + if ( Node -> HasChildren ) + { + // Restauramos las imágenes originales + Node->ImageIndex = 0; + Node->SelectedIndex = 0; + } else { + // Un nodo no padre NO puede ser CONTRAIDO + // Usamos las imágenes de los documentos + Node->ImageIndex = 2; + Node->SelectedIndex = 2; + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesExpanding(TObject *Sender, TTreeNode *Node, + bool &AllowExpansion) +{ + // Si el nodo es padre + if ( Node -> HasChildren ) + { + // Usamos las imágenes de los libros abiertos + Node->ImageIndex = 1; + Node->SelectedIndex = 1; + } else { + // Usamos las imágenes de los documentos + Node->ImageIndex = 2; + Node->SelectedIndex = 2; + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::EliminarClick(TObject *Sender) +{ + // Si hay un nodo seleccionado + if (Indices->Selected != NULL && !( Indices -> Selected -> AbsoluteIndex < 2 ) ) + { + if ( MessageDlg( "Al eliminar esta familia y sus\ndescendientes, transladara los productos a\n\"No Catalogados\".", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) != mrNo ) + { + AnsiString NombreCampo, NCampoAnterior; + + // Aqui hay que iniciar un translado de todos los campos + while ( TbProductos -> RecordCount ) + { + if ( TbProductosEsNodo -> Value == -1 ) + { + AArbol = false; + TbProductos -> Delete(); + AArbol = true; + } else { + TbProductos -> Edit(); + TbProductos -> FieldByName( "Familia" ) -> AsInteger = 0; + TbProductos -> FieldByName( "Familia2" ) -> AsInteger = 0; + TbProductos -> Post(); + } + } + + // y eliminar la existencia de la familia... + Indices->Items->Delete(Indices->Selected); // lo eliminamos + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::TbProductosBeforeDelete(TDataSet *DataSet) +{ + if ( !AArbol ) + return; + + if ( TbProductosEsNodo->Value == -1 ) + { + ShowMessage( "Las Sub/Familias, deben ser\neliminadas desde el arbol." ); + Abort(); + } + + switch( MessageDlg( "Atención, está apunto de\neliminar un producto.\n¿Realmente desea continuar?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) ) + { + case mrNo: + Abort(); + break; + default: + break; + }; + + while ( ! TbProductosC -> Eof ) + TbProductosC -> Delete(); + + AnsiString ImgOrg, ImgDst; + ImgOrg = ExtractFilePath(Application->ExeName) + TbProductos -> FieldByName( "PathImagen" ) -> AsString; + if ( FileExists( ImgOrg ) ) + { + if (!DirectoryExists(ExtractFilePath(Application->ExeName) + "datos\\deleted-backup" )) + CreateDir(ExtractFilePath(Application->ExeName) + "datos\\deleted-backup"); + // Mover el fichero de sitio... + ImgDst = ExtractFilePath(Application->ExeName) + "datos\\deleted-backup\\" + ExtractFileName( TbProductos->FieldByName( "PathImagen" )->AsString ); + CopyFile(ImgOrg.c_str(), ImgDst.c_str(), True); + DeleteFile(ImgOrg); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::TbProductosCalcFields(TDataSet *DataSet) +{ +/* + TbProductosValorStock -> Value = TbProductosStockActual -> Value * ( TbProductosCantUnitaria -> Value ) * TbProductosPrecioCosto -> Value; + TbProductosBeneficioStock -> Value = TbProductosStockActual -> Value * ( TbProductosCantUnitaria -> Value ) * TbProductosPrecioVenta1 -> Value - TbProductosValorStock -> Value; +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::TbProductosNewRecord(TDataSet *DataSet) +{ + // Si no hay un nodo seleccionado actualmente o estamos sobre productos sin catalogar... + if ( Indices->Selected == NULL || Indices->Selected->Data == NULL ) + { + TbProductos -> FieldByName( "Familia" ) -> AsInteger = 0; + TbProductos -> FieldByName( "Familia2" ) -> AsInteger = 0; + TbProductos -> FieldByName( "EsNodo" ) -> AsInteger = 0; + // El anterior... + } else { + TbProductos -> FieldByName( "Familia" ) -> AsInteger = ((int *) Indices -> Selected -> Data )[0]; + TbProductos -> FieldByName( "Familia2" ) -> AsInteger = ((int *) Indices -> Selected -> Data )[0]; + TbProductos -> FieldByName( "EsNodo" ) -> AsInteger = 0; + } + TbProductos -> FieldByName( "CantUnitaria" ) -> AsFloat = 1.0; + +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesChange(TObject *Sender, TTreeNode *Node) +{ + union + { + long Familia; + char Fam[4]; + } FamL, FamH; + + // Reajustamos el filtro, acuerdo a la nueva familia + switch ( Indices -> Selected -> AbsoluteIndex ) + { + case 0: +// TbProductos -> Filtered = false; +// return; + if ( Indices -> Selected -> Text == "Ver Todos" ) + { + TbProductos -> Filtered = false; + return; + } else { + FamL . Familia = 0x00000000; + FamH . Familia = 0x01000000; + } + break; + case 1: + // El filtro es para la familia 0000 + FamL . Familia = 0x00000000; + FamH . Familia = 0x01000000; + break; + default: + // Contruimos los limites del filtro ( >= AND < ) + FamL . Familia = ( (int *) Indices -> Selected -> Data ) [0]; + FamH . Familia = FamL . Familia; + if ( !FamH . Fam[3-1] ) + FamH . Fam[3-0] ++; + else + if ( !FamH . Fam[3-2] ) + FamH . Fam[3-1] ++; + else + if ( !FamH . Fam[3-3] ) + FamH . Fam[3-2] ++; + else + FamH . Fam[3-3] ++; + break; + }; + + Edit1 -> Text = AnsiString::IntToHex( FamL . Familia, 18 ) + ":" + AnsiString( (int) 0 ); + + + if (DBGrid1->SelectedRows->Count > 0) + { + if ( MessageDlg( "¿Seguro que desea mover los elementos seleccionados de familia?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) != mrNo ) + { + AnsiString s = ""; + TDataSet *pDS = DBGrid1->DataSource->DataSet; + for (int i=0; i < DBGrid1->SelectedRows->Count; i++) + { + pDS->GotoBookmark((void *)DBGrid1->SelectedRows->Items[i].c_str()); + if ( pDS->FieldByName("EsNodo")->AsInteger != -1 ) + { + pDS->Edit(); + pDS->FieldByName("Familia")->AsInteger = FamL.Familia; + pDS->FieldByName("Familia2")->AsInteger = FamL.Familia; + pDS->Post(); + } + } + } + DBGrid1->SelectedRows->Clear(); + } + // Filtramos según los rangos construidos antes... + TbProductos->FilterOptions = TbProductos->FilterOptions << foCaseInsensitive; + TbProductos->Filter = "([Familia] >= '" + AnsiString( (int)( FamL . Familia ) ) + "' AND [Familia] < '" + AnsiString( (int)( FamH . Familia ) ) + "')"; + TbProductos -> Filtered = true; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesDeletion(TObject *Sender, TTreeNode *Node) +{ + delete [] Node -> Data; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::TbProductosAfterOpen(TDataSet *DataSet) +{ + TTreeNode * NuevoNodo; + union + { + int Familia; // 0x01020304 + char Fam[4]; // 0 1 2 3 + } FamC; + + int N, MascaraComp; + + // Deshabilitamos los controles... + TbProductos -> DisableControls(); + + // Reconstrucción del arbol... + TbProductos -> First(); + while ( ! TbProductos -> Eof ) + { + // Si es parte del arbol... + if ( TbProductosEsNodo -> Value == -1 ) + { + FamC . Familia = TbProductosFamilia -> AsInteger; + + // Si es raiz, lo creamos directamente + if ( FamC . Fam[3-1] != 0 ) + { + // De lo contrario, buscamos su posición NATURAL dentro del arbol. + ////////////////////////////////////////////////////////////////// + // Contruimos la mascara de comparación... + if ( FamC . Fam[3-2] == 0 ) + MascaraComp = FamC . Familia & 0xFF000000; + else + if ( FamC . Fam[3-3] == 0 ) + MascaraComp = FamC . Familia & 0xFFFF0000; + else + MascaraComp = FamC . Familia & 0xFFFFFF00; + N = 2; + while ( N < Indices -> Items -> Count ) + { + if ( ((int *)Indices -> Items -> Item[N] -> Data ) [0] == MascaraComp ) + { + // Añadimos un nuevo nodo al primer nivel en que nos quedamos + NuevoNodo = Indices->Items->AddChild( Indices -> Items -> Item[N], TbProductosNombredelProducto -> Value ); + NuevoNodo -> Data = new int [3]; + + ((int *)NuevoNodo -> Data)[0] = FamC . Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + ((int *)NuevoNodo -> Data)[2] = TbProductosForcedIndex -> AsInteger; + + + break; + } else + N++; + } + } else { + // Añadimos un nuevo nodo al primer nivel en que nos quedamos + NuevoNodo = Indices->Items->Add( Indices -> Items -> Item[0], TbProductosNombredelProducto -> Value ); + NuevoNodo -> Data = new int [3]; + + ((int *)NuevoNodo -> Data)[0] = FamC . Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + ((int *)NuevoNodo -> Data)[2] = TbProductosForcedIndex -> AsInteger; + + } + + } + // Avanzamos al siguiente registro + TbProductos -> Next(); + } + + + N = 2; + while ( N < Indices -> Items -> Count ) + { + // Establecemos las imágenes (Por defecto es documento final) + if ( Indices -> Items -> Item[N] -> HasChildren ) + { + Indices -> Items -> Item[N]->ImageIndex = 0; + Indices -> Items -> Item[N]->SelectedIndex = 0; + } else { + Indices -> Items -> Item[N]->ImageIndex = 2; + Indices -> Items -> Item[N]->SelectedIndex = 2; + } + N++; + } + + + ///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// + // ATENCIÖN, LA SIGUIENTE LINEA ES POR UN BUG DETECTADO EN EL TREEVIEW // + ///////////////////////////////////////////////////////////////////////// + NuevoNodo = Indices->Items->AddChild( Indices -> Items -> Item[0], "Bug TTreeView 1.1 Fixed" ); + Indices -> Items -> Delete( NuevoNodo ); + ///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// + + Indices -> Selected = Indices -> Items -> Item[1]; +// Indices -> Items -> Item[0] -> Selected = true; + + // Rehabilitamos los controles... + TbProductos -> EnableControls(); +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesEdited(TObject *Sender, TTreeNode *Node, + AnsiString &S) +{ + if ( Node -> Data == NULL ) + return; + + // Guardamos la posición actual... + TBookmark CurrentPos; + CurrentPos = TbProductos -> GetBookmark(); + + // Localizamos el registro que hemos de cambiar... + TLocateOptions SearchOptions; + if ( TbProductos -> Locate( "ForcedIndex", ((int *)Node -> Data)[2], SearchOptions ) ) + { + // Actualizamos el nuevo valor del campo + TbProductos -> Edit(); + TbProductosNombredelProducto -> AsString = S; + TbProductos -> Post(); + } + + // ...Regresamos a la posición en la que estabamos + TbProductos -> GotoBookmark( CurrentPos ); + TbProductos -> FreeBookmark( CurrentPos ); +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit16KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit12 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit17KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit13 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit18KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit14 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBEdit19KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + DBEdit15 -> SetFocus(); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::FormClose(TObject *Sender, TCloseAction &Action) +{ + // Destruimos el dialogo de busquedas... + delete DlgBuscar; + // Destruimos la imagen de OK! + delete BtmOK; + + try { + if ( TbProductos -> State == dsInsert || TbProductos -> State == dsEdit ) + TbProductos -> Post(); + } catch(...) { + // Algun error con el BDE + } +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesDragDrop(TObject *Sender, TObject *Source, + int X, int Y) +{ +/* + TTreeNode* AnItem = new TTreeNode( Indices -> Items ); + TNodeAttachMode AttachMode; + THitTests HT; + + if( + Indices->Selected == NULL || + Indices -> Selected -> Text == "Ver Todos" || + Indices -> Selected -> Text == "Sin Clasificar" + ) return; + + HT = Indices->GetHitTestInfoAt(X, Y); + AnItem = Indices->GetNodeAt(X, Y); + if ( + AnItem -> Text == "Ver Todos" || + AnItem -> Text == "Sin Clasificar" + ) return; + + if ( HT.Contains(htOnItem) || HT.Contains(htOnIcon) || HT.Contains(htOnIndent) || HT.Contains(htNowhere) ) + { + AttachMode << naAdd; + if( HT.Contains(htOnItem) || HT.Contains(htOnIcon) ) + { + AttachMode << naAddChild; + ShowMessage( AnsiString( "Hijo de " + AnItem -> Text ).c_str() ); + } + if( HT.Contains(htNowhere) ) + { + AttachMode << naAdd; + ShowMessage( "Añadir" ); + } + if(HT.Contains(htOnIndent)) + { + AttachMode << naInsert; + ShowMessage( "Insertar" ); + } + + Indices->Selected->MoveTo(AnItem, AttachMode); + } +*/ +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::IndicesDragOver(TObject *Sender, TObject *Source, + int X, int Y, TDragState State, bool &Accept) +{ + Accept = true; +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::DBGrid1CellClick(TColumn *Column) +{ + if ( Column -> ID == 0 ) + { + if ( ( TbProductos -> FieldByName("Seguimiento") -> AsBoolean ) ) + { + if ( MessageDlg( "Atención, está apunto de desactivar el\nseguimiento estadístico del producto....\n¿Realmente desea continuar?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) == mrNo ) + return; + // Sincronizamos y eliminamos los informes estadísticos... + TbSeguimiento->First(); + while ( ! TbSeguimiento->Eof ) + TbSeguimiento->Delete(); + } + TbProductos -> Edit(); + TbProductos -> FieldByName("Seguimiento") -> AsBoolean = !(TbProductos -> FieldByName("Seguimiento") -> AsBoolean); + TbProductos -> Post(); + } +} +//--------------------------------------------------------------------------- + + +void __fastcall TProductos::DBGrid2DblClick(TObject *Sender) +{ + // Localiza producto a circular + DlgBuscar -> ShowModal(); + + if ( DlgBuscar -> ModalResult == mrOk ) + { +// Indices -> Selected = Indices -> Items -> Item[0]; + +// BusqSig -> Enabled = true; +// BusqAnt -> Enabled = true; + + // Introducimos sus datos... + if ( ! TbProductosC -> Locate( "CodProdE", DlgBuscar -> TbBusquedas -> FieldByName("ForcedIndex") -> AsInteger, TLocateOptions() ) ) + { + if ( TbProductos -> FieldByName("ForcedIndex") -> AsInteger != DlgBuscar -> TbBusquedas -> FieldByName("ForcedIndex") -> AsInteger ) + TbProductosC -> InsertRecord( ARRAYOFCONST( + ( TbProductos -> FieldByName("ForcedIndex") -> AsInteger, // Código a circular + DlgBuscar -> TbBusquedas -> FieldByName("ForcedIndex") -> AsInteger, // Código circular + 1 + ) ) ); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosCAfterDelete(TDataSet *DataSet) +{ + TbProductos -> Edit(); + TbProductosCOMBINADO -> Value = TbProductosC -> RecordCount <= 0 ? false : true; + TbProductos -> Post(); +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#endif +} +//--------------------------------------------------------------------------- + + + +void __fastcall TProductos::DBGrid1Exit(TObject *Sender) +{ + DBGrid1->Options << dgRowSelect << dgAlwaysShowSelection; +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::DBGrid1Enter(TObject *Sender) +{ + DBGrid1->Options >> dgRowSelect >> dgAlwaysShowSelection; +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::DBGrid2Enter(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#endif + if ( TbProductos -> State == dsInsert || TbProductos -> State == dsEdit ) + TbProductos -> Post(); +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosCantUnitariaChange(TField *Sender) +{ + if ( TbProductosSeguimiento->AsBoolean ) + ActualizaHistorico(); +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosPrecioCostoChange(TField *Sender) +{ + if ( TbProductosSeguimiento->AsBoolean ) + ActualizaHistorico(); +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosPrecioVenta1Change(TField *Sender) +{ + if ( TbProductosSeguimiento->AsBoolean ) + ActualizaHistorico(); +} +//--------------------------------------------------------------------------- +void __fastcall TProductos::ActualizaHistorico(void) +{ + TDateTime FechActual; + + FechActual = TDateTime::CurrentDate(); + + // Calculamos el precio de costo UNITARIO del producto + Currency PrecioCosto = TbProductos->FieldByName("CantUnitaria")->AsCurrency; + if ( PrecioCosto < 1 ) PrecioCosto = 1; + PrecioCosto *= TbProductos->FieldByName("Precio Costo")->AsCurrency; + + TbSeguimiento->Last(); // Nos posicionamos en el ultimo seguimiento + // Solo si el últ. seguimiento corresponde a este momento... + if ( TbSeguimiento->FieldByName("Fecha")->AsDateTime == FechActual ) + { + // ...actualizamos + TbSeguimiento->Edit(); + TbSeguimiento->FieldByName("Precio Costo")->AsCurrency = PrecioCosto; + TbSeguimiento->FieldByName("Precio Venta")->AsCurrency = TbProductos->FieldByName("Precio Venta 1")->AsCurrency; + TbSeguimiento->Post(); + } else { + // Si hemos sobrepasado el maximo de seguimiento + if ( TbSeguimiento->RecordCount > 24 ) + { + TbSeguimiento->First(); // Eliminamos el seguimiento mas antiguo + TbSeguimiento->Delete(); + } + // Insertamos el seg. actual + TbSeguimiento->InsertRecord( ARRAYOFCONST( ( TbProductosForcedIndex->AsInteger, Variant(FechActual), PrecioCosto, TbProductos->FieldByName("Precio Venta 1")->Value ))); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosCAfterInsert(TDataSet *DataSet) +{ + TbProductos -> Edit(); + TbProductosCOMBINADO -> Value = TbProductosC -> RecordCount <= 0 ? false : true; + TbProductos -> Post(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TProductos::TbProductosIVASetText(TField *Sender, + const AnsiString Text) +{ + int iva; + + if ( !Text.IsEmpty() ) + { + iva = Text.ToInt(); + + if ( iva == 4 || iva == 6 || iva == 16 ) + Sender -> AsString = Text; + else + ShowMessage( "Por favor, solo I.V.A's de los tipos:\n\tTipo 1: 4%\n\tTipo 2: 6%\n\tTipo 3: 16%" ); + } else { + Sender -> AsString = Text; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::Image1DblClick(TObject *Sender) +{ + if (OpenPictureDialog1->Execute()) + { + TbProductos -> Edit(); + TbProductos -> FieldByName( "PathImagen" ) -> AsString = ExtractRelativePath( ExtractFilePath(Application->ExeName), OpenPictureDialog1->FileName ); + TbProductos -> Post(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TabSheet2Show(TObject *Sender) +{ + Image1->Picture->LoadFromFile( TbProductos -> FieldByName( "PathImagen" ) -> AsString ); +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosPrecioCostoSetText(TField *Sender, + const AnsiString Text) +{ + /// CUIDADO QUE TAMBIEN ESTO ESTA LIGADO A TPVproductos.CPP y TPVcmp.CPP + Currency Ganancia = 0, PC; + #ifdef EXIST_CFG + if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex > 0 ) + { + Ganancia = TbProductos->FieldByName("Precio Venta 1")->AsCurrency - Sender->AsCurrency; + PC = Sender->AsCurrency; + } + #endif + + + Sender->AsString = Text; + #ifdef EXIST_CFG + /// CUIDADO QUE TAMBIEN ESTO ESTA LIGADO A TPVproductos.CPP y TPVcmp.CPP + if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex == 1 ) + TbProductos->FieldByName("Precio Venta 1")->AsCurrency = Ganancia + Sender->AsCurrency; + if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex == 2 ) + TbProductos->FieldByName("Precio Venta 1")->AsCurrency = Sender->AsCurrency + ( (Ganancia * Sender->AsCurrency)/PC ); + #endif + /// FIN DEL CUIDADO +} +//--------------------------------------------------------------------------- + +void __fastcall TProductos::TbProductosPrecioVenta1SetText(TField *Sender, + const AnsiString Text) +{ + if ( !Text.IsEmpty() ) + { + if ( *(Text.AnsiLastChar()) == '+' ) + { + Sender->AsString = Text.SubString(1, Text.Length() -1 ); + + if ( ! TbProductosPrecioCosto->IsNull ) + Sender->AsString = AnsiString( (Sender->AsString.ToDouble() + TbProductosPrecioCosto->AsFloat) ); + } else { + Sender->AsString = Text; + } + } else + Sender->AsString = Text; +} +//--------------------------------------------------------------------------- + diff --git a/TpvProductos.dfm b/TpvProductos.dfm new file mode 100644 index 0000000..647f4bf Binary files /dev/null and b/TpvProductos.dfm differ diff --git a/TpvProductos.h b/TpvProductos.h new file mode 100644 index 0000000..53bf293 --- /dev/null +++ b/TpvProductos.h @@ -0,0 +1,216 @@ +//--------------------------------------------------------------------------- +#ifndef TpvProductosH +#define TpvProductosH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Grids.hpp" +#include +#include +#include +#include +#include "TDlgBuscar.h" +#include "ElastFrm.hpp" +#include +#include +#include +#include + + + +//--------------------------------------------------------------------------- +class TProductos : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TDBGrid *DBGrid1; + TDataSource *InfoProductos; + TTreeView *Indices; + TPopupMenu *PopupMenu1; + TMenuItem *SubFamilia; + TMenuItem *Familia; + TMenuItem *Eliminar; + TImageList *ImageList1; + TPanel *Panel2; + TSpeedButton *SpeedButton4; + TSpeedButton *SpeedButton5; + TSpeedButton *SpeedButton6; + TSpeedButton *BusqAnt; + TSpeedButton *BuscarFicha; + TSpeedButton *BusqSig; + TSpeedButton *SpeedButton11; + TDBNavigator *DBNavigator1; + TTable *TbProductos; + TEdit *Edit1; + TTable *TbProdInfC; + TElasticForm *ElasticForm1; + TAutoIncField *TbProductosForcedIndex; + TIntegerField *TbProductosCdigodeBarras; + TStringField *TbProductosIDProducto; + TIntegerField *TbProductosFamilia; + TIntegerField *TbProductosFamilia2; + TSmallintField *TbProductosEsNodo; + TStringField *TbProductosNombredelProducto; + TFloatField *TbProductosCantUnitaria; + TCurrencyField *TbProductosPrecioCosto; + TFloatField *TbProductosIVA; + TCurrencyField *TbProductosPrecioVenta1; + TFloatField *TbProductosCantidVenta1; + TCurrencyField *TbProductosPrecioVenta2; + TFloatField *TbProductosCantidVenta2; + TCurrencyField *TbProductosPrecioVenta3; + TFloatField *TbProductosCantidVenta3; + TCurrencyField *TbProductosPrecioVenta4; + TFloatField *TbProductosCantidVenta4; + TCurrencyField *TbProductosPrecioVenta5; + TFloatField *TbProductosCantidVenta5; + TFloatField *TbProductosStockActual; + TBooleanField *TbProductosCOMBINADO; + TIntegerField *TbProductosStockMinimo; + TIntegerField *TbProductosProveedorActual; + TFloatField *TbProductosIVACosto; + TStringField *TbProductosLocalizacion; + TSmallintField *TbProductosEnviarA; + TBooleanField *TbProductosSeguimiento; + TTable *TbSeguimiento; + TTable *TbProductosC; + TDataSource *ProductosC; + TIntegerField *TbProductosCCodProdC; + TIntegerField *TbProductosCCodProdE; + TFloatField *TbProductosCCantidad; + TStringField *TbProductosCNombreProd; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TLabel *Label2; + TGroupBox *ListPrecios; + TDBEdit *DBEdit11; + TDBEdit *DBEdit12; + TDBEdit *DBEdit13; + TDBEdit *DBEdit14; + TDBEdit *DBEdit16; + TDBEdit *DBEdit17; + TDBEdit *DBEdit18; + TDBEdit *DBEdit19; + TComboBox *ComboBox1; + TDBGrid *DBGrid2; + TLabel *Label1; + TDBEdit *DBEdit15; + TImage *Image1; + TLabel *Label3; + TDBEdit *DBEdit1; + TOpenPictureDialog *OpenPictureDialog1; + TStringField *TbProductosPathImagen; + TStringField *TbProductosURLinfo; + TLabel *Label4; + TDBEdit *DBEdit2; + TStringField *TbProductosFabricante; + TBevel *ImgRef; + void __fastcall TProductosIVASetText(TField *Sender, const AnsiString Text); + + void __fastcall DBEdit11KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall DBEdit12KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall DBEdit13KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall DBEdit14KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + + void __fastcall InfoProductosDataChange(TObject *Sender, TField *Field); + + void __fastcall DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, + int DataCol, TColumn *Column, TGridDrawState State); + + void __fastcall DBGrid1KeyPress(TObject *Sender, char &Key); + + void __fastcall SpeedButton2Click(TObject *Sender); + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall SpeedButton3Click(TObject *Sender); + void __fastcall BusqAntClick(TObject *Sender); + void __fastcall BuscarFichaClick(TObject *Sender); + void __fastcall BusqSigClick(TObject *Sender); + void __fastcall SpeedButton7Click(TObject *Sender); + + + + void __fastcall FamiliaClick(TObject *Sender); + void __fastcall SubFamiliaClick(TObject *Sender); + void __fastcall IndicesCollapsing(TObject *Sender, TTreeNode *Node, + bool &AllowCollapse); + void __fastcall IndicesExpanding(TObject *Sender, TTreeNode *Node, + bool &AllowExpansion); + + + void __fastcall EliminarClick(TObject *Sender); + void __fastcall TbProductosBeforeDelete(TDataSet *DataSet); + void __fastcall TbProductosCalcFields(TDataSet *DataSet); + void __fastcall TbProductosNewRecord(TDataSet *DataSet); + void __fastcall IndicesChange(TObject *Sender, TTreeNode *Node); + void __fastcall IndicesDeletion(TObject *Sender, TTreeNode *Node); + void __fastcall TbProductosAfterOpen(TDataSet *DataSet); + + void __fastcall IndicesEdited(TObject *Sender, TTreeNode *Node, AnsiString &S); + + + + void __fastcall DBEdit16KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall DBEdit17KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall DBEdit18KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall DBEdit19KeyUp(TObject *Sender, WORD &Key, TShiftState Shift); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + + + + void __fastcall IndicesDragDrop(TObject *Sender, TObject *Source, int X, int Y); + void __fastcall IndicesDragOver(TObject *Sender, TObject *Source, int X, int Y, + TDragState State, bool &Accept); + + + + + void __fastcall DBGrid1CellClick(TColumn *Column); + + void __fastcall DBGrid2DblClick(TObject *Sender); + + + void __fastcall TbProductosCAfterDelete(TDataSet *DataSet); + + void __fastcall DBGrid1Exit(TObject *Sender); + void __fastcall DBGrid1Enter(TObject *Sender); + void __fastcall DBGrid2Enter(TObject *Sender); + void __fastcall TbProductosCantUnitariaChange(TField *Sender); + void __fastcall TbProductosPrecioCostoChange(TField *Sender); + void __fastcall TbProductosPrecioVenta1Change(TField *Sender); + void __fastcall TbProductosCAfterInsert(TDataSet *DataSet); + void __fastcall TbProductosIVASetText(TField *Sender, + const AnsiString Text); + void __fastcall Image1DblClick(TObject *Sender); + void __fastcall TabSheet2Show(TObject *Sender); + void __fastcall TbProductosPrecioCostoSetText(TField *Sender, + const AnsiString Text); + void __fastcall TbProductosPrecioVenta1SetText(TField *Sender, + const AnsiString Text); +private: // User declarations + Graphics::TBitmap *BtmOK; // Imagen OK! + + TDlgBuscar *DlgBuscar; // Dialogo de busquedas + + void CambiaEstadoCombinados(void); + int __fastcall TProductos::NuevoHeredero( TTreeNode *Padre, bool EsHijo ); + void __fastcall TProductos::ActualizaHistorico(void); +public: // User declarations + __fastcall TProductos(TComponent* Owner); + + bool AArbol; // Bandera para mostrar o no el mensaje de que esta apunto + // de borrar un producto ( INDICE ) +}; +//--------------------------------------------------------------------------- +extern TProductos *Productos; +//--------------------------------------------------------------------------- + +#endif diff --git a/TpvProductosPrint1.cpp b/TpvProductosPrint1.cpp new file mode 100644 index 0000000..2bb159d --- /dev/null +++ b/TpvProductosPrint1.cpp @@ -0,0 +1,121 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvProductosPrint1.h" +#include "TpvRefQRs.h" +#include "TpvRefQRc.h" +#include "TpvRefBarras.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TInformesProducto *InformesProducto; +//--------------------------------------------------------------------- +__fastcall TInformesProducto::TInformesProducto(TComponent* AOwner) + : TForm(AOwner) +{ +} +//--------------------------------------------------------------------- +void __fastcall TInformesProducto::RadioButton1Click(TObject *Sender) +{ + try { + Image1 -> Picture -> LoadFromFile( "systm\\IProd_s.bmp" ); + } catch(...) { + ShowMessage("No es posible cargar el archivo.\nTpvProductosPrint1.cpp\nTOKRightDlg::RadioButton1Click" ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TInformesProducto::RadioButton2Click(TObject *Sender) +{ + try { + Image1 -> Picture -> LoadFromFile( "systm\\IProd_c.bmp" ); + } catch(...) { + ShowMessage("No es posible cargar el archivo.\nTpvProductosPrint1.cpp\nTOKRightDlg::RadioButton1Click" ); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TInformesProducto::RadioButton3Click(TObject *Sender) +{ + try { + Image1 -> Picture -> LoadFromFile( "systm\\IProd_b.bmp" ); + } catch(...) { + ShowMessage("No es posible cargar el archivo.\nTpvProductosPrint1.cpp\nTOKRightDlg::RadioButton1Click" ); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TInformesProducto::OKBtnClick(TObject *Sender) +{ + if ( RadioButton1 -> Checked ) + { + TRefQR *RefQRs; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + RefQRs = new TRefQR(this); + // Mostrarla como modal y según el valor devuelto +#ifdef DEBUG + RefQRs -> QuickRep1 -> Preview(); +#else + RefQRs -> QuickRep1 -> Print(); +#endif + // Destruimos la ficha + delete RefQRs; + } else + if ( RadioButton2 -> Checked ) + { + TRefQRc *RefQRc; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + RefQRc = new TRefQRc(this); + // Mostrarla como modal y según el valor devuelto +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + #ifdef DEBUG + RefQRc -> QuickRep1 -> Preview(); + #else + RefQRc -> QuickRep1 -> Print(); + #endif +#endif + // Destruimos la ficha + delete RefQRc; + } else + if ( RadioButton3 -> Checked ) + { + TRefBarras *RefBarras; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + RefBarras = new TRefBarras(this); + // Mostrarla como modal y según el valor devuelto +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + RefBarras ->QuickRep1-> Preview(); +#endif + // Destruimos la ficha + delete RefBarras; + } else { +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#endif + } + + +} +//--------------------------------------------------------------------------- +void __fastcall TInformesProducto::FormShow(TObject *Sender) +{ + try { + Image1 -> Picture -> LoadFromFile( "systm\\IProd_s.bmp" ); + } catch(...) { + ShowMessage("No es posible cargar el archivo.\nTpvProductosPrint1.cpp\nTOKRightDlg::RadioButton1Click" ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TInformesProducto::CancelBtnClick(TObject *Sender) +{ + Close(); +} + +//--------------------------------------------------------------------------- + diff --git a/TpvProductosPrint1.dfm b/TpvProductosPrint1.dfm new file mode 100644 index 0000000..ae673a3 Binary files /dev/null and b/TpvProductosPrint1.dfm differ diff --git a/TpvProductosPrint1.h b/TpvProductosPrint1.h new file mode 100644 index 0000000..d15a898 --- /dev/null +++ b/TpvProductosPrint1.h @@ -0,0 +1,39 @@ +//---------------------------------------------------------------------------- +#ifndef TpvProductosPrint1H +#define TpvProductosPrint1H +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TInformesProducto : public TForm +{ +__published: + TBevel *Bevel1; + TImage *Image1; + TRadioButton *RadioButton1; + TRadioButton *RadioButton2; + TRadioButton *RadioButton3; + TBitBtn *CancelBtn; + TBitBtn *OKBtn; + void __fastcall RadioButton1Click(TObject *Sender); + void __fastcall RadioButton2Click(TObject *Sender); + void __fastcall RadioButton3Click(TObject *Sender); + void __fastcall OKBtnClick(TObject *Sender); + void __fastcall FormShow(TObject *Sender); + void __fastcall CancelBtnClick(TObject *Sender); +private: +public: + virtual __fastcall TInformesProducto(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern TInformesProducto *InformesProducto; +//---------------------------------------------------------------------------- +#endif diff --git a/TpvRefBarras.cpp b/TpvRefBarras.cpp new file mode 100644 index 0000000..f329f74 --- /dev/null +++ b/TpvRefBarras.cpp @@ -0,0 +1,74 @@ +//---------------------------------------------------------------------------- +#include +#pragma hdrstop + +#ifdef EXIST_CFG +#include "TpvCFG.h" +#endif + + +#include "TpvRefBarras.h" +//---------------------------------------------------------------------------- +#pragma resource "*.dfm" +TRefBarras *RefBarras; +//---------------------------------------------------------------------------- +__fastcall TRefBarras::TRefBarras(TComponent* Owner) + : TForm(Owner) +{ + OldCodFamilia = -1; +} +//---------------------------------------------------------------------------- +void __fastcall TRefBarras::DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + + if ( OldCodFamilia != Table1 -> FieldByName( "Familia" ) -> AsInteger && Table1 -> FieldByName( "Familia" ) -> AsInteger != 0 ) + { + // COMIENZO DE UNA NUEVA FAMILA... + PrintBand = false; + return; + } +// OldCodFamilia = Table1 -> FieldByName( "Familia" ) -> AsInteger; +} +//--------------------------------------------------------------------------- +void __fastcall TRefBarras::ChildBand2BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + int CodActual; +#ifdef EXIST_CFG + if ( ! CFG->ImprimirCabFam ) + { + PrintBand = false; + return; + } +#endif + CodActual = Table1 -> FieldByName( "Familia" ) -> AsInteger; + + if ( OldCodFamilia != Table1 -> FieldByName( "Familia" ) -> AsInteger && Table1 -> FieldByName( "Familia" ) -> AsInteger != 0 ) + { + PrintBand = true; + // Prevision de futuro (Parece lo de la tele JEJE) +#ifdef EXIST_CFG + if ( ! CFG->ImprimirCabFamVacia ) +#endif + { + try { + Table1->Next(); + if ( !Table1->Eof && CodActual != Table1 -> FieldByName( "Familia" ) -> AsInteger ) + PrintBand = false; + Table1->Prior(); + + } catch(...) { /*nothing*/ } + } + } else { + PrintBand = false; + } + OldCodFamilia = CodActual; + +} +//--------------------------------------------------------------------------- + + + + + diff --git a/TpvRefBarras.dfm b/TpvRefBarras.dfm new file mode 100644 index 0000000..db60f61 Binary files /dev/null and b/TpvRefBarras.dfm differ diff --git a/TpvRefBarras.h b/TpvRefBarras.h new file mode 100644 index 0000000..5210e45 --- /dev/null +++ b/TpvRefBarras.h @@ -0,0 +1,53 @@ +//---------------------------------------------------------------------------- +#ifndef TpvRefBarrasH +#define TpvRefBarrasH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TRefBarras : public TForm +{ +__published: + TTable *Table1; + TQuickRep *QuickRep1; + TQRBand *TitleBand1; + TQRLabel *QRLabel1; + TQRBand *PageFooterBand1; + TQRSysData *QRSysData1; + TQRBand *QRBand2; + TQRExpr *CBarras; + TQRExpr *QRExpr3; + TQRChildBand *ChildBand2; + TQRShape *QRShape3; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRExpr *QRExpr8; + TQRLabel *QRLabel2; + TQRRTFFilter *QRRTFFilter1; + TQRExpr *QRExpr1; + TQRExpr *QRExpr2; + void __fastcall DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall ChildBand2BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: + int OldCodFamilia; +public: + __fastcall TRefBarras(TComponent* Owner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TRefBarras *RefBarras; +//---------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/TpvRefQRc.cpp b/TpvRefQRc.cpp new file mode 100644 index 0000000..3f7daf1 --- /dev/null +++ b/TpvRefQRc.cpp @@ -0,0 +1,16 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvRefQRc.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "TpvRefQRs" +#pragma resource "*.dfm" +TRefQRc *RefQRc; +//--------------------------------------------------------------------------- +__fastcall TRefQRc::TRefQRc(TComponent* Owner) + : TRefQR(Owner) +{ +} +//--------------------------------------------------------------------------- diff --git a/TpvRefQRc.dfm b/TpvRefQRc.dfm new file mode 100644 index 0000000..2400d86 Binary files /dev/null and b/TpvRefQRc.dfm differ diff --git a/TpvRefQRc.h b/TpvRefQRc.h new file mode 100644 index 0000000..a5c7931 --- /dev/null +++ b/TpvRefQRc.h @@ -0,0 +1,40 @@ +//--------------------------------------------------------------------------- +#ifndef TpvRefQRcH +#define TpvRefQRcH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "TpvRefQRs.h" +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TRefQRc : public TRefQR +{ +__published: // IDE-managed Components + TQRSubDetail *QRSubDetail1; + TTable *Table2; + TTable *Table3; + TQRExpr *QRExpr10; + TQRExpr *QRExpr11; + TQRExpr *QRExpr12; + TQRExpr *QRExpr13; + TIntegerField *Table2CodProdC; + TIntegerField *Table2CodProdE; + TFloatField *Table2Cantidad; + TStringField *Table2IDprod; + TStringField *Table2Nombre; + TFloatField *Table2CantUnitaria; +private: // User declarations +public: // User declarations + __fastcall TRefQRc(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TRefQRc *RefQRc; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvRefQRs.cpp b/TpvRefQRs.cpp new file mode 100644 index 0000000..5695465 --- /dev/null +++ b/TpvRefQRs.cpp @@ -0,0 +1,97 @@ +//---------------------------------------------------------------------------- +#include +#pragma hdrstop + +#ifdef EXIST_CFG +#include "TpvCFG.h" +#endif + + +#include "TpvRefQRs.h" +//---------------------------------------------------------------------------- +#pragma resource "*.dfm" +TRefQR *RefQR; +//---------------------------------------------------------------------------- +__fastcall TRefQR::TRefQR(TComponent* Owner) + : TForm(Owner) +{ + OldCodFamilia = -1; +} +//---------------------------------------------------------------------------- +void __fastcall TRefQR::DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + + if ( OldCodFamilia != Table1 -> FieldByName( "Familia" ) -> AsInteger && Table1 -> FieldByName( "Familia" ) -> AsInteger != 0 ) + { + // COMIENZO DE UNA NUEVA FAMILA... + PrintBand = false; + return; + } +// OldCodFamilia = Table1 -> FieldByName( "Familia" ) -> AsInteger; + +try { + if ( Table1 -> FieldByName( "Seguimiento" ) -> AsBoolean ) + QRImage2 -> Picture -> LoadFromFile( "systm\\ON.BMP" ); + else +#ifdef EXIST_CFG + if ( CFG->RefQR_LEDS->Checked ) + QRImage2 -> Picture -> LoadFromFile( "systm\\OFF.BMP" ); +#else + QRImage2 -> Picture -> Graphic = 0; +#endif + + if ( Table1 -> FieldByName( "COMBINADO" ) -> AsBoolean ) + QRImage1 -> Picture -> LoadFromFile( "systm\\ON.BMP" ); + else +#ifdef EXIST_CFG + if ( CFG->RefQR_LEDS->Checked ) + QRImage1 -> Picture -> LoadFromFile( "systm\\OFF.BMP" ); +#else + QRImage1 -> Picture -> Graphic = 0; +#endif + +} catch(...){ + // Do nothing +} +} +//--------------------------------------------------------------------------- +void __fastcall TRefQR::ChildBand2BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + int CodActual; +#ifdef EXIST_CFG + if ( ! CFG->ImprimirCabFam ) + { + PrintBand = false; + return; + } +#endif + CodActual = Table1 -> FieldByName( "Familia" ) -> AsInteger; + + if ( OldCodFamilia != Table1 -> FieldByName( "Familia" ) -> AsInteger && Table1 -> FieldByName( "Familia" ) -> AsInteger != 0 ) + { + PrintBand = true; + // Prevision de futuro (Parece lo de la tele JEJE) +#ifdef EXIST_CFG + if ( ! CFG->ImprimirCabFamVacia ) +#endif + { + try { + Table1->Next(); + if ( !Table1->Eof && CodActual != Table1 -> FieldByName( "Familia" ) -> AsInteger ) + PrintBand = false; + Table1->Prior(); + + } catch(...) { /*nothing*/ } + } + } else { + PrintBand = false; + } + OldCodFamilia = CodActual; + +} +//--------------------------------------------------------------------------- + + + diff --git a/TpvRefQRs.dfm b/TpvRefQRs.dfm new file mode 100644 index 0000000..e8a4395 Binary files /dev/null and b/TpvRefQRs.dfm differ diff --git a/TpvRefQRs.h b/TpvRefQRs.h new file mode 100644 index 0000000..2dc91b8 --- /dev/null +++ b/TpvRefQRs.h @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------------- +#ifndef TpvRefQRH +#define TpvRefQRH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TRefQR : public TForm +{ +__published: + TTable *Table1; + TQuickRep *QuickRep1; + TQRBand *TitleBand1; + TQRLabel *QRLabel1; + TQRBand *ColumnHeaderBand1; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRLabel *QRLabel7; + TQRBand *PageFooterBand1; + TQRSysData *QRSysData1; + TQRBand *QRBand2; + TQRExpr *QRExpr1; + TQRExpr *QRExpr2; + TQRExpr *QRExpr3; + TQRImage *QRImage1; + TQRImage *QRImage2; + TQRChildBand *ChildBand2; + TQRShape *QRShape3; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRLabel *QRLabel10; + TQRLabel *QRLabel11; + TQRLabel *QRLabel12; + TQRLabel *QRLabel14; + TQRLabel *QRLabel15; + TQRLabel *QRLabel16; + TQRLabel *QRLabel17; + TQRLabel *QRLabel13; + TQRExpr *QRExpr5; + TQRExpr *QRExpr6; + TQRExpr *QRExpr7; + TQRExpr *QRExpr8; + TQRExpr *QRExpr9; + TQRLabel *QRLabel18; + TQRLabel *QRLabel19; + TQRLabel *QRLabel20; + TQRLabel *QRLabel21; + void __fastcall DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall ChildBand2BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: + int OldCodFamilia; +public: + __fastcall TRefQR(TComponent* Owner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TRefQR *RefQR; +//---------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/TpvSelectActiveUser.cpp b/TpvSelectActiveUser.cpp new file mode 100644 index 0000000..422f459 --- /dev/null +++ b/TpvSelectActiveUser.cpp @@ -0,0 +1,108 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TpvSelectActiveUser.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TChangeUserName *ChangeUserName; +//--------------------------------------------------------------------------- +__fastcall TChangeUserName::TChangeUserName(TComponent* Owner) + : TForm(Owner) +{ + int i, j; + +#ifdef DEM001 + bool checkfech; + if ( ( TDateTime::CurrentDate() ) >= EncodeDate( 2001, 6, 1 ) && ( TDateTime::CurrentDate() ) <= EncodeDate( 2001, 9, 30 ) ) + checkfech = true; + else + checkfech = false; + +#endif + + for ( i=0; i<10; i++ ) + for ( j=0; j<10; j++ ) +#ifdef DEM001 + TablaDeAcceso[i][j] = checkfech; +#else + TablaDeAcceso[i][j] = false; +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TChangeUserName::Edit2KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ +#ifdef DEM001 + Close(); +#else + + int usr; + if ( Key == VK_RETURN ) + { + if ( Edit1->Text.IsEmpty() ) + { + Edit1->SetFocus(); return; + } + try { + usr = Edit1->Text.ToInt(); + } catch(...) { + Edit1->SetFocus(); return; + } + if ( TbAccess->Locate( "EnlacePersona", usr, TLocateOptions() << loCaseInsensitive ) ) + { + if ( Edit2->Text == TbAccess->FieldByName("PassWord")->AsString ) + { + // [1][*] Articulos + TablaDeAcceso[1][5] = TbAccess->FieldByName( "ArtReferencias" )->AsBoolean; + TablaDeAcceso[1][6] = TbAccess->FieldByName( "ArtStockActual" )->AsBoolean; + TablaDeAcceso[1][8] = TbAccess->FieldByName( "ArtVentas" )->AsBoolean; + // [2][*] Proveedores + TablaDeAcceso[2][5] = TbAccess->FieldByName( "ProvInformacion" )->AsBoolean; + TablaDeAcceso[2][7] = TbAccess->FieldByName( "ProvCartera" )->AsBoolean; + TablaDeAcceso[2][8] = TbAccess->FieldByName( "ProvCompras" )->AsBoolean; + // [3][*] Empleados + TablaDeAcceso[3][5] = TbAccess->FieldByName( "EmpFichas" )->AsBoolean; + TablaDeAcceso[3][6] = TbAccess->FieldByName( "EmpPermisos" )->AsBoolean; + TablaDeAcceso[3][8] = TbAccess->FieldByName( "EmpVentas" )->AsBoolean; + TablaDeAcceso[3][9] = TbAccess->FieldByName( "EmpGraficas" )->AsBoolean; + // [4][*] Clientes + TablaDeAcceso[4][5] = TbAccess->FieldByName( "CltGestion" )->AsBoolean; + TablaDeAcceso[4][7] = TbAccess->FieldByName( "CltCartera" )->AsBoolean; + TablaDeAcceso[4][8] = TbAccess->FieldByName( "CltVentas" )->AsBoolean; + TablaDeAcceso[4][9] = TbAccess->FieldByName( "CltInformes" )->AsBoolean; + // [5][*] Compras + TablaDeAcceso[5][5] = TbAccess->FieldByName( "CmpComprar" )->AsBoolean; + TablaDeAcceso[5][6] = TbAccess->FieldByName( "CmpInforme" )->AsBoolean; + TablaDeAcceso[5][9] = TbAccess->FieldByName( "CmpListado" )->AsBoolean; + // [6][*] Ventas + TablaDeAcceso[6][5] = TbAccess->FieldByName( "VntCaja" )->AsBoolean; + TablaDeAcceso[6][7] = TbAccess->FieldByName( "VntBalanceD" )->AsBoolean; + TablaDeAcceso[6][8] = TbAccess->FieldByName( "VntBalanceM" )->AsBoolean; + // [7][*] Contabilidad + TablaDeAcceso[7][5] = TbAccess->FieldByName( "CtbCuentas" )->AsBoolean; + TablaDeAcceso[7][7] = TbAccess->FieldByName( "CtbParte" )->AsBoolean; + TablaDeAcceso[7][8] = TbAccess->FieldByName( "CtbInformes" )->AsBoolean; + // [8][*] Miscelanea + TablaDeAcceso[8][5] = TbAccess->FieldByName( "MisConfigurar" )->AsBoolean; + // [9][*] Soporte + TablaDeAcceso[9][9] = true; + Close(); + } + } + } +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TChangeUserName::Edit1KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + { + if ( Edit1->Text == "salir" ) Close(); + Edit2->SetFocus(); + } +} +//--------------------------------------------------------------------------- diff --git a/TpvSelectActiveUser.dfm b/TpvSelectActiveUser.dfm new file mode 100644 index 0000000..e65047a --- /dev/null +++ b/TpvSelectActiveUser.dfm @@ -0,0 +1,1040 @@ +object ChangeUserName: TChangeUserName + Left = 240 + Top = 126 + BorderIcons = [] + BorderStyle = bsNone + Caption = 'www . infdj . com' + ClientHeight = 217 + ClientWidth = 503 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + FormStyle = fsStayOnTop + OldCreateOrder = False + Position = poScreenCenter + PixelsPerInch = 96 + TextHeight = 16 + object Bevel1: TBevel + Left = 0 + Top = 0 + Width = 503 + Height = 217 + Align = alClient + Shape = bsFrame + Style = bsRaised + end + object Bevel2: TBevel + Left = 264 + Top = 128 + Width = 233 + Height = 81 + Shape = bsFrame + end + object Label1: TLabel + Left = 43 + Top = 62 + Width = 211 + Height = 33 + Caption = 'Informática D.J.' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -24 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + end + object Image2: TImage + Left = 8 + Top = 56 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 055449636F6E0000010004001010100000000000280100004600000010100000 + 00000000680500006E0100002020100000000000E8020000D606000020200000 + 00000000A8080000BE0900002800000010000000200000000100040000000000 + C000000000000000000000001000000000000000000000000000800000800000 + 00808000800000008000800080800000C0C0C000808080000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000 + 011111000000000009BB11000000000019B1B110001110001919B110091BB110 + 99BBB110011B9B1009911100091B9B1000119000099BB1100000000009911990 + 00000A00009009000AA00A000000000000000000000000000000000000000A00 + A0000000000AA000000000000000000000000000FFC7FFFFFF83FFFFFF01FFFF + FF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF81C3FFFF8189FFFF + FF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF280000001000000020000000 + 0100080000000000400100000000000000000000000100000000000000A8FF00 + 00FF00000000FF000000B00000004F0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000FFFFFF00FEFEFEFE + FEFEFEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFE0404040404FEFEFEFEFEFE + FEFEFEFE05020000000405FEFEFEFEFEFEFEFEFE04020004000404FEFEFE0303 + 0305FEFE04020402000404FEFE020300000303FE02020000000404FE05030300 + 0200030505020202040405FE0502030002000305FE0504040205FEFE05020200 + 00030305FEFEFEFEFEFEFEFEFE020202030202FEFEFE05050501FEFEFE050205 + 050205FEFE010105FE0105FEFEFEFEFEFEFEFEFEFE0505FEFEFEFEFEFEFEFEFE + FE05FE0505FEFEFEFEFEFEFEFEFEFEFE0501050501FEFE05FEFEFEFEFEFEFE01 + 0105FEFEFEFE050505FEFEFEFEFEFEFEFEFEFEFEFEFEFEFE0505FEFEFFC7FFFF + FF83FFFFFF01FFFFFF01FFFFC301FFFF8101FFFF0001FFFF0083FFFF00FFFFFF + 81C3FFFF8189FFFFFF9FFFFFFA7FFFFFF06FFFFFE3C7FFFFFFF3FFFF28000000 + 2000000040000000010004000000000080020000000000000000000010000000 + 0000000000000000000080000080000000808000800000008000800080800000 + C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000 + FFFFFF0000000000000000000000000000000000000000000000000000000111 + 11000000000000000000000000011111111100000000000000000000001191BB + 11111000000000000000000000991B11B111100000000000000000000919B911 + 1B11110000000000000000000199B1911B111100000000000000000009919B91 + 9B1111000000011111100000019991991B111100000011BBBB11100009919191 + 9B111100000991B11BB11100099999199B911100000119B111B1110000999BBB + BB911000009191B9191B11100099B9999B911000009999B9119B111000099911 + 99190000001991B9191B11100000010119000000009999B991BB919000000000 + 00000000009999B19BB11110000000000000000000999BBBB911911000000000 + 00000000000999B9919999000000000000AA000000099999099111000000AAA0 + 00AAA0000000999090199000000AAAA0000AA000000000000000000000AAAA00 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000A0000000000000000000000000000000AA000000 + 000000000000000000AA00000A0000000000000000000000AAAA000000000000 + 000000000000000AAAA000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003FFFF0001FFFF0001 + FC1F0001F0070001E0030001C0010001C0018003800080038000C0078000E00F + 8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3F14781E3FF7FC1FF + FF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01FFE1FFE0FFFFFFF0F + FFFFFF8F28000000200000004000000001000800000000008004000000000000 + 0000000000010000000000000000000000008000008000000080800080000000 + 8000800080800000C0C0C000C0DCC000F0CAA600D4F0FF00B1E2FF008ED4FF00 + 6BC6FF0048B8FF0025AAFF0000AAFF000092DC00007AB90000629600004A7300 + 00325000D4E3FF00B1C7FF008EABFF006B8FFF004873FF002557FF000055FF00 + 0049DC00003DB900003196000025730000195000D4D4FF00B1B1FF008E8EFF00 + 6B6BFF004848FF002525FF000000FF000000DC000000B9000000960000007300 + 00005000E3D4FF00C7B1FF00AB8EFF008F6BFF007348FF005725FF005500FF00 + 4900DC003D00B900310096002500730019005000F0D4FF00E2B1FF00D48EFF00 + C66BFF00B848FF00AA25FF00AA00FF009200DC007A00B900620096004A007300 + 32005000FFD4FF00FFB1FF00FF8EFF00FF6BFF00FF48FF00FF25FF00FF00FF00 + DC00DC00B900B900960096007300730050005000FFD4F000FFB1E200FF8ED400 + FF6BC600FF48B800FF25AA00FF00AA00DC009200B9007A009600620073004A00 + 50003200FFD4E300FFB1C700FF8EAB00FF6B8F00FF487300FF255700FF005500 + DC004900B9003D00960031007300250050001900FFD4D400FFB1B100FF8E8E00 + FF6B6B00FF484800FF252500FF000000DC000000B90000009600000073000000 + 50000000FFE3D400FFC7B100FFAB8E00FF8F6B00FF734800FF572500FF550000 + DC490000B93D0000963100007325000050190000FFF0D400FFE2B100FFD48E00 + FFC66B00FFB84800FFAA2500FFAA0000DC920000B97A000096620000734A0000 + 50320000FFFFD400FFFFB100FFFF8E00FFFF6B00FFFF4800FFFF2500FFFF0000 + DCDC0000B9B90000969600007373000050500000F0FFD400E2FFB100D4FF8E00 + C6FF6B00B8FF4800AAFF2500AAFF000092DC00007AB90000629600004A730000 + 32500000E3FFD400C7FFB100ABFF8E008FFF6B0073FF480057FF250055FF0000 + 49DC00003DB90000319600002573000019500000D4FFD400B1FFB1008EFF8E00 + 6BFF6B0048FF480025FF250000FF000000DC000000B900000096000000730000 + 00500000D4FFE300B1FFC7008EFFAB006BFF8F0048FF730025FF570000FF5500 + 00DC490000B93D00009631000073250000501900D4FFF000B1FFE2008EFFD400 + 6BFFC60048FFB80025FFAA0000FFAA0000DC920000B97A000096620000734A00 + 00503200D4FFFF00B1FFFF008EFFFF006BFFFF0048FFFF0025FFFF0000FFFF00 + 00DCDC0000B9B900009696000073730000505000F2F2F200E6E6E600DADADA00 + CECECE00C2C2C200B6B6B600AAAAAA009E9E9E0092929200868686007A7A7A00 + 6E6E6E0062626200565656004A4A4A003E3E3E0032323200262626001A1A1A00 + 0E0E0E00F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000 + FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 002A2D2A2D2A000000000000000000000000000000000000000000000000002D + 2A2D2A2D2A2D2A2D000000000000000000000000000000000000000000002D2A + 282ADADA2D2A2D2A2D0000000000000000000000000000000000000000002828 + 2ADA2A2DDA2D2A2D2A0000000000000000000000000000000000000000282D28 + DA282D2D2DDA2D2A2D2A000000000000000000000000000000000000002D2828 + DA2D282D2ADA2A2D2A2D0000000000000000000000000000000000000028282A + 28DA282A28DA2D2A2D2A000000000000002A2D2A2D2A2D0000000000002D2828 + 282D28282ADA2A2D2A2D0000000000002A2DDADADADA2A2D2A0000000028282A + 282A282A28DA2D2A2D2A000000000028282ADA2A2DDADA2A2D2A000000282828 + 28282A2828DA282D2A2D00000000002D2A28DA2D2A2DDA2D2A2D000000002828 + 28DADADADADA282A2D0000000000282A282ADA282D282DDA2D2A2D0000002828 + DA28282828DA282D2A000000000028282828DA282A2D28DA2A2D2A0000000028 + 28282D2D28282D280000000000002D28282ADA282D282DDA2D2A2D0000000000 + 002D002D2A28000000000000000028282828DA28282DDADA282D280000000000 + 000000000000000000000000000028282828DA2A28DADA2A2D2A2D0000000000 + 0000000000000000000000000000282828DADADADA282A2D282D2A0000000000 + 000000000000000000000000000000282828DA28282A28282828000000000000 + 000000000000B8B80000000000000028282828280028282D2A2D000000000000 + B8B8B8000000B8B8B8000000000000002828280028002D2828000000000000B8 + B8B8B800000000B8B8000000000000000000000000000000000000000000B8B8 + B8B8000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000B8000000 + 00000000000000000000000000000000000000000000000000000000B8B80000 + 00000000000000000000000000000000000000000000B8B80000000000B80000 + 0000000000000000000000000000000000000000B8B8B8B80000000000000000 + 00000000000000000000000000000000000000B8B8B8B8000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000FFFFF83FFFFFE00FFFFFC007FFFF8003FFFF8003 + FFFF0001FFFF0001FC1F0001F0070001E0030001C0010001C001800380008003 + 8000C0078000E00F8000F83F8000FF7F8000FE0FC001F007C001E003E003C0C3 + F14781E3FF7FC1FFFF9F7DFFFFC63DFFFFC21DFFFF001EFFFE07063FFC0FF01F + FE1FFE0FFFFFFF0FFFFFFF8F} + end + object Label2: TLabel + Left = 11 + Top = 90 + Width = 228 + Height = 27 + Caption = 'w w w . i n f d j . c o m' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -19 + Font.Name = 'Arial Black' + Font.Style = [] + ParentFont = False + Transparent = True + end + object Image3: TImage + Left = 64 + Top = 8 + Width = 153 + Height = 57 + Picture.Data = { + 0A544A504547496D6167650E600000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000503040404030504040405050506070C08070707070F0B0B + 090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F131722 + 24221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1EFFC00011080105028003012200021101031101 + FFC4001D000100020301010101000000000000000000060704050803010209FF + C400511000010303020304070702020509050900010002030405110621071231 + 13224151081452617191A115324281C1D1F016B1236217728292E12425334355 + 7493A2F126376373D2273435364553B2B3C2FFC4001A01010002030100000000 + 0000000000000000020301040506FFC400331100020201020502040504030101 + 00000000010203110421051213315115412261719114325281B12333A1D142C1 + E124F1FFDA000C03010002110311003F00ECB444401111004444011110044440 + 111100444401111004444011110044440117C7B9AC69739C1A07524AADB89BC5 + FD37A3E96561AA64F58D0796261C9CFE9D56545BEC61C947764FEE971A3B652B + EA6B676431B0124B9C06CB9C78C3E90CDA7964B56921DBCE0969946E3F2F3553 + EADD7DAD789372920A79268285EEC363612063F5524D05C2F868F96AEEA39A43 + BE1DB92AD8C37C259657994FB6C8F2B56BEE2A56D29A86C8E23AFDD1FB29A7A3 + CF11B54DEF5FCF68BE5407C6C6F4C01BE47B96EEB4D2DAEC152218638D8C8CE3 + 6EAAA0E02DDFFF00B5BACA868C03CD93F985BD451276F4A6B7C127B23B7D92B5 + DE2BF6A3764B97AC01DE52189D96AD1BA9753C3249E4FDA22C1BCDDA82D146FA + AAFA86431B064971C6CA932672F2A9A9A7A6617CF332368F173B0B9CB893E923 + 4B492BE874C406A6507979FC33FCCAA92EBAAF89BADA42D7544F041267BACC81 + 82AC55FEA7821CF9EC76857EAFD39454EE9EA2ED4CD8DBD4F3745A7FF4A7A1BF + EDDA6FFC46FEEB93EDBC2BD415B48456DCE66876E439F8CADC5BF8394822E5A9 + B83C387938EEAF8550976527F433B9D31FE94F437FDBB4DFF88DFDD0714F4312 + 07DBB4BBFF00F11BFBAE70FF0043B6BFFB465FF78AC2B9F06E9DED0CA5B83F3E + 65E42B1E9E0BBC646773ADE935569EAA85934376A6731E32D3CFD56CE9EB296A + 1A1D0D444F07A61C171157709F50D34019457599C474E57F458B0C3C53D3B235 + D4774AB74710C005C48F97455BAE9ED96BEA86E77722E2AB2F1C78976191B1DC + A94D5339B2ECB77C7E4A7FA5BD2868A7ABF57BE5AE4A6F0E603207F658FC367F + 249331CD8EE74B22E4DD67E91F7CA8D426974A52892986C1C41CBBEAB5959C7A + E2551C5DB4B6D01A37DDAEFDD41519EF2482927BA3B15150DC15F481B5EAB70B + 6DF4B282E00868E6380F3EECABD609E39A36C91BC39AE19041EAA16552AFB994 + F27A2222ACC84444011110044440111100444401111004444011110044440111 + 1004444011110044440111100444401111004444011110044440111100444401 + 11100444401111004444011179D44F153C46599ED631A3249407A2D3EA6D4B68 + D3D412565CAAE28991824E5CAAEE2FF1D2C9A5E0928ED72B2B2B8820061C869E + 9BE1734D7D76B4E25DD9D356CF38A77BBBACC9E503DC158A18DE456E79DA258F + C54F482B95DE69ED1A4E37B63396F6C3A9F879280E93D0378D4B5C6E37B9657F + 39E671792AC0D0DC38B7D9636CB58C124C37C7EEA7D1C6C8D8191B1AC60E8D68 + C05BDA7D1597F6DA21431BCB7669B4E69AB658E06C74B0B5CF03EF91FD96EFC7 + 27AA215DED3E96BD3AF85126F244B8B15C68347543C1FBF90AB2F476A771AAAD + B99EAF7E013FCF7ADEFA46DD7B0B4C544C761CE1E1EF593C0DB7BA9F4CD317B4 + 074879B3EE547098ABB5565AFB22BB5E160E85D18F739ADCA9FD37DC1F0507D1 + B062369C29CC386C793B00172B8A34ED78270EC6BB55DFE834E59E6B95C266C5 + 144D2492B8B38AFC45BE712751BADF6C9258ADED7E1AD69EA3CCFF003F7533F4 + ADD5F5B75D44CD2946E3D931C0481BE2EF2FCB2BE70B34552DA6DB15654440CC + E19008F1F35A3545C9A8C56ECC38F3BDFB1AFD05C30A3A285955726F3BDDBE0E + E4AB268E8E9A92311D340C89A3C86EB2117A1D370DAEA5CD3DD92CF83E2FCC92 + 471B0BE47B2368F171C2D2EAED4947A7E89D34CF6997196B495485E3575FF545 + CCC3406511B8E07295AFA9E27C8F9294671E4BB2E3AC74FD087096B9A5EDEAD0 + 56A8713B4C6E44921C752157B63D04F96A44D76AA79CEE5ADEF1FD94A21D0F60 + 113A36D3543B9875E703F42B35E978ADCB992697CF0883B208925BF889A6AA9F + 8F5B1181E2E5BAA3D4763AF1CB15642E1EF3D557553C37B4CB116412D4439DF2 + 5808FEEB4959C35BC529325AEB9B26370D0FE53F238545D4710ABFB90CAFA27F + C05645FB9744D6BB456B497D3412F30EA00FD145EF5C34D3F5FCCE6C22379E98 + 1B05568B96B5D333E2A1B501AD3F8C1FEEA53A738B81CF10DD62C11B1763F55A + 2ADAA5B590C7D0B090E98E1BDB6CF5DEB2E0C7B4741D4952BB9DAA82E14869E7 + A58C348C021BB858F65D456ABC303E92A99CC7F0B8ADB104750BA7A4D2E92C8B + 49E5BFB98794503C46E1954D0541B8DA0B9AE69E60F629670238E573B2DD63D3 + 9AC2571872191CEF3D3E27F5FF00D45A12319244E8A4607B1C305A5533C5BE1C + 89C3AE16D610E079816F507F9FCF3D6BA99E95F2CB783318C9DA16BB8D3D7D33 + 2A29E46C91BC64105670395C29C31E336A7E1F98ED57B824AAA18C8682ECE5A1 + 75870E3897A73595BE39A82B6313380E688B87303F05A9669F6E686E827E49DA + 2F8D7070C82BEAD5241111004444011110044440111100444401111004444011 + 1100444401111004444011110044440111100444401111004444011110044440 + 1111004444011110045E3575305242E9AA256C6C68C92E38542F18BD202DD641 + 25B74E96D5D674E669CB47CBAA9462E5D88CA4A3DCB735AEB3B1E94B73EAEE75 + 91C7CA36693B92B93F8A5C6BD43AD2B24B569D6C94F46E25A5CDEAE0A272C1AC + 788D7615775967746F3B34F403E0AD8D17A0ED962818E9626C9301D31B7E6AEA + AB72972D6B2C86253EFB2203A2785F535EF6DC2F1239C49E625FBAB86CD69A2B + 4D3B61A385ACC0C176372B380000000007403A05F57734BC3230F8ADDD93D96C + 8227C162B6E3402A042E9839F9C72B7CD6E5FABAA85F131832900C90078AFD4D + CBDA1E4180BC2B2514F473CEEE91C64ACDB72543B3E431B9CEBC70AC7DD35A43 + 6F61FF00AD0DC7E6AECE1FD00A6A1A4A76B400C60185425339D7CE2B8772F68C + 8E42495D37A3A9B323303A2708874B472B1FB94D9BCB059FA5A0E585BB782DED + DA614D69A898B83792373B246DB027F4587628B9206FC162F125A4E87BA38388 + 7329DC463CF18FD5798D54F9ED65CBB1C7D65826D4BC53AAABA8EFB44C5D93D3 + AABB406B406B061AD1803DCAAAE0951491DD2E754F1CD8791956B0E8BA5C1EA4 + DCAC61EC82F1AC9DB4D4B2D43FEEC6D2E2BD94538AB5EFB768EA999BF8B65D1E + 216BAE86D0451DADEFF51AA357FD9EC739CD2FC6C76EAACED25A6E9ADB491C71 + C40BF00B9D8DC955DF04ED7EBD74AABC4ECE63CD8692BA134E5A8CCF6F755FC2 + 741569AA5A9B165FB7FB289C9C9E118F6BB2BE6C7754A6DFA60B80CB3E8A5760 + B231AC692C0A514D411B1A3BA16BEB78D4B9B11251AC80374B3797EE7D178546 + 96DB667D159E29983C02FCBE9233F842E62E316A7DC9F4D14ED7E9A73A2746F8 + 9B2467AB1ED0E1F22ABED57C2BB45C5AF74303A8273F8A31961FCBA85D353DB6 + 378FBA16AABAC51BC1EE056CB5B46A76BA39F9FB91E46BB1C5378D1FAB748CC6 + A29BB4969C1DA488F337C3E4B7BA4B8AB554AE6D2DDD84B46C4B974ADCB4E603 + B95BB1EA08C83F10AAFD71C2AB3DD83DEC83D46A4F49236F74F4EA3F65AB3D03 + FCDA7967F924A78FCC67D93515AAF1135F4952C0E3F81C56D5CD0410E6820F50 + 46C573B5FB4A6AAD1551DBC7DA3A9C1EECB192587F6531E1DF124D43D96FBAEC + EE9927759AF884E1FD3BD657F926B0F744B357686B4DF607010B22948F2D8AA5 + AF9A4F52E86BA8B8D9279E2313B98729382BA5237B248DB246F0F63865AE1E2B + CAB2929EAE23154C4D9587C08E8B627A1CAEAE99FEC3EA453845E91ED2F82CFA + BE2304FB37B73D0FC7F9F25D2F65BC505DE8D95543531CF13C021CD702B90388 + 7C2BA6AF8DF556D680E1BE1A30428768BD7BACF85B756432C93545BC3B0E8DE4 + 90067C3C9684946C7CB25CB231BA3FA0237455EF0B389F60D716D8E5A2AA60A8 + 0D1DA44E3820AB01AE0E19056AD95CA0F0CCA793F4888AB32111100444401111 + 0044440111100444401111004444011110044440111100444401111004444011 + 1100444401111004444011110044440144F5EEBDB0E90B7C95371AC8C3C03CAC + E61971F70516E3AF15683445A64A78646C97195A447183D3DE7DCB942968F547 + 122F2EAEB9544F246F764024E3195628A4B322B726DE2249F899C60D4FAF2BA4 + B6D8FB5A7A124B7BA482E1EF5F740F0BDCF736E17825CE279B2FDC953AD1FA22 + D7618184C4C92603CB6054B3F985D1D3682CBF796D10A2A3BBEE635BA8696DF4 + E20A485B1B00EA06E564A2FC4B2471466495ED631BB9712BB91853A587844B76 + 7ED6BEF378B7DA61749593B5A40C86677506D7FC4DA0B3C2F868A4064E9CDE2A + 9AABB8EA8D6F5BCB036510B9DBBF7C61732CD75BA897250B6F261B51EE4E75DF + 195913DD4944F0C19C774ACAE0E5CEA750DD995321716039CFB9575AE386B05A + B4FC75F2D539D54E3839F156CFA3A5A7D4EC0EA970EF16E01F35A1A8D1594DAA + 16776621629F62D7CE493E6A3BC47AF16FD255529772978C02A45E0AA9F489BA + 7AAD8A3A36BB0E73771E795D6E252E5A156BDF624BC908E06D11ACD415B747B7 + 3DE21A7F9F92EA3D154DBB0E1515C07B5FAB69D8E52C21D33B98FBD74868BA6C + 31870BA37E34FA18C3E450B79138B6C7CB105ACE237FF91EEFFF007677E8B754 + ADE5605A8E20C2FA8D15778A3FBC691F8FC867F45E324F32363B2398F833347F + F3B339817194E1586A9FE094820D4770A599FDE7B8E067C7757005DEE0D2F825 + 1F998614278D8D73F424AD68C9E62A6CB4DACE845C34D5653F2E5DC9CC16CF13 + 8B7A778F608AAFD1F67654DA24A6E46B5F1C9838EA574AE8EA06F2B096AE41E1 + 1DD7FA6B8872DB2ABB91543F9413E795DA5A35CC740C208390A776AFA9A28F2F + B1528E244C28A16B231B2CA5F887EE05FB5E524DB7B97844451017C7341F05F5 + 1018D35331E37016AABED11CA0F742DF2F85A0ABABBA507B330D64ADEF5A6A39 + 629237C2C92378C3D8E6E4382E6EE31F0CAA6C133AF9668DFEA9CD97B5BD623F + B2ED29E998F072028FDEEC74D554F2C1510B6586561648C236734ADA9DF1D4C7 + 13EFECC872B8EE8E57E106B5337FCD9719771B0C9F1F356D0DF18DF3D150FC62 + D1959C3ED622A2939BD4E5776903C0D8B73D15ABC33BEB2FB6289EE7E6563403 + BA9F0FD54A99F23ECFF927B359248F6BA3761C30546758E91B76A0A678922636 + 623638D8A90DE2E51D1B982A1A4870D8AF94D34551089A1707B0F8F92DBEA53A + DF82C5890EC7345DEC9A978777AFB4ACD34D072BF98B5A4E08CAE95E0571D6DB + AA6386D17570A6B9B5A010E380F3EEFE7EEB1EF369A2BB533A0AC883C1180EC6 + E173FF0011B43DC74EDD85D6CC5F1BE3773B1D1ECB52C84A97D3BBB7B3318F74 + 7F402199B234169041F15EAB96F80BC7AF5C9E0D39A9FF00C0AA003192BB60F3 + D3F9FC0BA6E8AAA3A889B246F0E6B86410569DD4386EBB194F264A222A0C8444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111005A5D6B7B834FE9DAAB94EE0D6C519775 + F2FE63F35BA5467A5B5F8D169165B6291C1D51261E33B600CFEAB28C339DAA0D + 7F1235F4D5D55CCF88C9B0F003C95E7A7ACD4B65A16535331A1C061CE0144782 + D65650D84573D804B2F4DBCD582BB1C3348AC7D59F65D8C6147B0445ACD4578A + 6B3503AAAA5C06DDD07C5767517C6887348C2593DEEB70A5B751BEA6AA46B5AD + 19033B9542F12B89D555F3BA82DBCD9CE0062D2EB7D6776D4F797505B1CF7071 + C777A0526E1C70F85BCFAEDD1A26A97EE01DF0B97A7D35FC4ECCBDA3FE1119D8 + A3B223BA434057DEA66DC6F8F70638F3061572E9ED3F4F450B20A4A76C6D03C0 + 2DD59ED0E90B5AD660780014EEC3A776697317A45F86E1B0C43BF928C396ECE7 + 6E3AFF0082EA0B5B4F7DFDE23E27656470E6805BF4952C41BCA5E3242AD389B2 + 8BE7184D24597C504A1807B82BA28A21051C3037A47180BCCD737AAD73B1FD49 + E99620DF93DB6C8CAE74E3D5C0DCF55434109E60640D0D5D07729C5350544E71 + DC8C95CCB6E89DA8B8A5CCE25CC8A4E6F9157EA13BF590A97B1749E225F3C39B + 73696D9474ED6E031836579694A7E585BB782AC746D2F7D800D8602B86C30F24 + 2DF82DBE3B6A5F02F62AA91B88C61ABCEBE0153453D33BA4B1B987F3185EC3A2 + F8EE8BC91B0707BDD3692E2BD553CE4C78A87348E9E2AF7A79995103278CE592 + 3438285FA60E8F928EF34FAB28A3223A8DA523C1E162F07F53C774B4B28267FF + 008D18DB3E7E4B7743A8E85D97D9985BA2C25F1C1AE05AE19691823DCBEA2F53 + 38AB22D3ECC89CE9C6ED35516ABE36ED40C702C773B5CDF9ABD7D1C788506A5B + 3474F3BDACAC80063D84EE5354D920BE5AE4A5918D3260F213FD9738D4B2EBC3 + 4D6B1DCA90C8C89B266468E8467A2F3F0E6D3CDD13ECFB092CEE8FE88514A1F1 + 839594AB4E11EBEB5EAEB1C1554950C327280F613B83E2AC889E1CD5CFBEA75C + 892793F6888A8321111004444017E258C39BD17ED13B02B7E3568C8755E8AABA + 4ECC1AAA7699A9CE37C81B85CAFC23BBCF63D52FB5CE4B5BCE5B82BBAE6603BE + 32B8B78F9613A578B0EA8A6672433CA26663C9C72A7279DC8AD9E0B335E523AA + EC8E9E2DDD18E6DBC954D60D7935A6EBEA933FFC22EE570276572DB24159A7A1 + 0F21E658403F25CA9C54B65C29F564B0D132471E627B815BA84D353F2B248EA8 + B4D7D35C68D9534CF0E6386E33D17AD651D35642E86AA26C8C70F11D173D70C3 + 59DC2C753151DC0BF94F75C1DE1EE2BA1682AA2ACA38EA6170731E33B787B975 + 349A98EA63D1BBF630FE4507C61D0725AAA45D2DA0B5CD3CEC7315BDE8D5C638 + 6E9490E9BBD4BD9D7C23918E79FBE07EBFCF86EAE96FA7B9523E96A581CC70D8 + 9F05CE7C48D355DA475132F16A0E63A17F38737C77CAD79D6F4D3E959F95F666 + 1ACEE8FE82D2CED9580839C8590A94F47CE2543AC34E45DB4AD15B080D9599DF + E2AE5A7943DA082B4EFA1D6FE4653C9EC888B5CC844440111100444401111004 + 4440111100444401111004444011110044440111100444401111004444011110 + 04444017387A5F6277DAA178CB435C7FF39FD9747AE6FF004B6FFEF76BFF00E5 + BBFF00EC7292ECCC3EE8F7D2D4ECA6D3D45147D3B3056CD60D87FF00C128BFF9 + 41672F59A04969E3830FB9E7512C7042F9A5388D832E2B9CB8C7ACAA6F17436B + A2717F33B95A1BE0ADCE30DE0DA74ABF94F2BA5CEEA9AE1069F75DEEB2DF2B5A + 5C03BB995A1D29EBF59D35D9119CB9512DE17E8D86D9431D5CF17355CA32491B + 856DD8AD0E99CDEEAF3D3F6B32BDB86ECACFD37656B1AD25ABD16AB535E86AE9 + D65108659E3A7AC2D635A4B16FAFAF82C9A66BAE1261A2081CECFBF0B75494CD + 8D8000AAFF004A2BDFD93C389E9DA795D52E0C041F9AF1B7EAE77CF765B62518 + 339CB86B13AF9C44ABB9CB9701297737E6AF2CE493E6AB1E02DACC16896E2E1D + E97C7CF2ACDF05D0E110DA5632515CB1488BF142E02DFA46A5F9C178202A7F81 + 3426AAE95B737B739760152BF48DBA761698A89AEC39C3C3C72BD781F6BF55D3 + 7038B70E94F313E6B6F8447ADAC9DCFB2236BDB05DFA2A97769C2B4EDB1F2C4D + 559515D6DBA72D2EB8DCE76430C632492A07A87D272DD4B51EAF63B73EAC0382 + EF03F0EAB4F8A395D6BC0834B63A59172D8F498BC1191A79FF00CFF657E65F49 + BBB44C2F769F7803F9ECAE57E165E57DCB798E84D7BA768F5469BABB2D6B4164 + CC3C8EF61FE0570E5CE8EEBC39D7135254C6F67652907C88CEC55F5A77D2774F + 56F24378A3968E476C4E361FCF82FD71529B48F156C3EB766AEA67DD616E6378 + 7005E3C1AEF7ACCB4B663B648F3619E3A46F905FAD6CAA89C3B4C779BFAADCAE + 6FD337CBA68ABE9A2AB0F8D8C7F2B9AEF0DD5F9A7EF94379A364F4D2B79C8CB9 + 995D1E1DAF515D3B1FD19268DA289EBED234DA928DE0C6DF58C6C71F794B1175 + 355A58EA6387DFD9984F072FB46A8E17DFDB596E9A56C2D7E5F1EFCA47C175B7 + 05B8C364D6741140EA86C35ED68ED2279C1CA886A7D3B417FA6747551B7B4C6C + EC75F8AA135768ABE690BA9BA59649607B1DCCD31923FB2E14D4AB7D2BD7D18C + 7BA3FA0F148D7B410410BF6B94B83BE916D8CD3D9757466198619DB9E87E3FCF + 92E9CB25E282EF46CAAA1A98E789E321CD702B52DA250DD6E8CA793628837454 + 190888802222004642E67F4CC641DBDA9F196FAD76783E78C95D29553329E9DF + 348406B064E4AE2BE34EA476B4E288A4A677690D3BC46D70E9869595D8C3EE8B + 1F4273FF004C517699E6E5F1550F179DEABC48A4EC4728748D0E03C77578DAA0 + 34F6EA5A7C00591805501C58AF655F13292303BCD99A081F15D8AE2B34465F33 + 12ECCDCF10B497AEDBC5EADD1E2A18D0E9D8D18C8F687EABF5C21D66FA5A9FB2 + EE32120F74655B7A6285B341182D0E0580107A118E8A9DE34E8C9B486A18AED6 + F63851D41ED187D93E2D56F1BD1C34FA87655B27FE195D5278C32F2690E6820E + 411907CC2D2EB2B1C17CB3CB4EF6032069E53E7EE5ABE186A26DF2C4C6BDC3B5 + 88631EE52F071B85743975FA6C3FCCBF92CECCE66D1F75AFE1B7122225EE8E8E + 5939646E76C65773E92BC4571B7C35113C399234105723FA4369D6181B748198 + 3F7B6F02ACEF464D55F69690A7A7924CC94FFE191F0E8B4A983BAA9425DE261E + CCE908DDCCD5FA5836E9C49103959CB9538F2BC130888A202222008888022220 + 0888802222008888022220088880222200888802222008888022220088880222 + 200888802E6BF4CB8AA218AD558C04478734BBC3EF13FA85D28A15C64D1B16B6 + D1B536BD854B01929C9F6BCBF3595E0C3F2523C30BE4175D39047DA03346DE99 + DC852D5CDD62AFB9683D52FA3AD6491767272B9AEDB1BABFB4FDEA8EF542CA9A + 691BCC4779995D9E1BAD50FE94FB7B06B24338F96F9EE1A59BD8B490C041506F + 47EBC42F6C964A92D64D1BBBA0ED957A5D68A3B8DBE6A39402D91B819F02B9A7 + 5EE95BB692D41F6B5BB9E3746FE6CB7C55B56A25A1D5B97B488CE3CC8EC4D1F6 + D696B1D85635BE9DB1C6301501E8F1C53B6EA4A08E8ABA5653DC6201AE638E39 + BDE3F9FF001E85A491AF8C1690410B5B89DB2B279F6310583DC6CB94BD302F52 + 565FE82C50BB61DE700739C9DBE817535C276D3514D3B8E03184E7C970F6A3AE + 9758F19279DA79A264F86E3A000E02E64764D91B776A25ABA0E845BF4B5241CB + CAE73798ADE8DC80BF313045132268C0634342F0B9D4B692DF5150E380C8CE3E + 2BD255FF00CFA3CFCBF92CF739E78E15CEBAEB48682339CCA063F3570E946416 + 7B1C2E94B638E188139D80C0546DA1A6FF00C53327DF644F2EDD4FB8BD7A7D0D + A22B4D392D927C671E5E0A7A0B168F87CAE7DDEC8A6CDE58445F5F6ABBCEBCBE + 7D95465ECA18DD80D6F43EF3FCFD5585A0386D6CA0A18E6B8421D2119E52372B + 1F831A4A3A4A0173AB8C39EEDC64752ACF0B97A5D34B592E7B3F2FF25918A823 + 05966B4B1818DB7C181E6D5E75560B354C7D9CB6F8797FCA30B668BAEF87E9F1 + 8E5259657FA8785962B935C606089E7A0230AB6B9681D4DA5EB8D5D9A79D8D6E + FDD27185D12BE100B4B5C039A7A8232169DBC2DC77A65FB3194FB9C8FAE6EB76 + AC1DA5CE377ACC6305E5BB9C6562F0FF005E56D96E2CED6577640F9F45D39A9F + 44592F70BF9A0645211E5B1543EBBE13575BA77CD4711ECF39C01B15C4BA9B2A + 9626B7248BDB466B4B6EA1A56112B19311E27EF294AE34B5565DB4ED53407491 + 969FBA7A2B9F41715592B23A3B96FE1971DC2DDD27129D3F0CF7461AC9722F0A + CA5A7AC88C555136561F03E0BCADD71A2B842D9292A19202338CEEB317714A8D + 5C31DCC6E8A9B885C2BA6AF63EA6DAD01FD4068C10A17A7355710786756194F3 + 4D351B0EF13F2461746AD7DDECF6EBA4463ACA663891F780DD732DD05B4EF53C + AF036664F0CBD23B4EDF1ACA5BD9FB3EAFA1E73DD27E2AECB3DEED776A76CF41 + 5B0CEC70C82D78395C7DAAB83D4953CF3DB5C0487A01B10A274B41C46D133836 + AAEAA11B0E43398907F25A128D72789AE5637477F22E36B0FA44EB7B339B15EE + D86A18C18270413FCF829FD07A51584D3C66B6DB3C4F23BDB74FAA87E15BFCAD + 31CC7452F3A89A2A788CB33DAC6346492B9E6F1E941626C120B6514D34A3EEF7 + 763FCF82AAF58717B5E6B689F45430CB4B4F2641E407241F7AADD2E3F9B630E7 + E0B27D22B8D4CA6649A734D4C24A87E59248C39E5F70F7FF003E15D70674C54C + B5C6F3728C971EF65CBC387FC34A99AA5B72BC17176724BD5CF4B053D152B618 + 58D8E260FE12AFA28EABCF68AEEC4535BB3C6F35B1DBEDD3D5C8400C69C7C573 + 55B263A878AAD9437B4647264953CE376B363299D6CA194389DB63D4AD370334 + EC9031F76AB61134C7BB9F25D4E1D17ABD6A925F0AFE111B1E160E86D19103C8 + 31B05BFE236908755687ADB6BA30E9DB19969CE370F03A0F88581A269CE5A70A + CCA38F1134E3A2CF19B336344611D8E1CE15564D60D60FB6D492D05E5A5A55FB + B781C8F055071FEC674B7161D554EDE4867904CCF81569D96715369A59F9B98B + A3193EF5A7C26CE5B9C3C977746A78876C6DCF4B55445A09634B82ADBD19A696 + 82FF0071A4ED0F661DD3C3C55BB7F71165AC1E71154BF031E59ABAE7FEB7EA57 + 4B4D4AFC7C97945763D8EC6D3555DA42DDFC1495872D502D1B39746CDD4EA039 + 605C5D7D7C96B2707947A2222D12411110044440111100444401111004444011 + 11004444011110044440111100444401111004444011110044440179CCDCB765 + E88770B29E014A71D385947AC607D751B63A7BBB07DEE826F71F22B9829AB2FF + 00A12FA68EB59345D93F0E63BC177ED7D28958410AB0E26E80B56A7A37C55F4E + 04C1B88EA1A3BEDF8F985B0AA56ACC7B90CB8FD0AF7466B3B75FE9DB99191CD8 + C104F52B71A92CB497AB73E0A8602797BAEC2A2F58687D4BA12E06A600F92979 + B2C9A304B5C3DFE4A49A1B8A4476745751BF4CB8AB23A87CBD2B9657F944BBAC + A221AC787D77D3B70FB52CD24B139AEE66BA338560F09FD226BECBD95A75840F + 735A437B7C741EF5635254DB6F7420B0C7346E1BB4EEA17ACB86169BB44F929D + 8D8DE467042B173463B7C513182CDE25F15B4ECFC2FAAAFB55C62925A88F9236 + 87778123FBEEA8AE03DB1D535D537899B9249702541EF9C3BBCD0D5FAB36594C + 00E437C15EDC35B48B4E978632DE57BF73E6AAAA0AEB6308ADB246317CDCCC93 + 288F166E22DFA3E73CD83203B7B94B8AA63D23EF019491DB98EC3B007E657678 + A4B15C6B5EEC92341C03B67ACD6D5DD1C399EF7F2B49595A85B2DFB890DA5239 + A38E4E503C3014A782F6CF54D2909C61CF8DD267F2256B78634124DC40ABA894 + 7386127EA5438C2E9D34D2BC67EE535ACCDB2DEA0A6651D1434B18C363681F9F + 8AF62E68FBCE6B7E270B0EFB718AD36F96B66C6183201F12B9F2FF00AFEEB79D + 46EA7B6C9213CD801B955CF56F4C95352CB5DCB9E3BB3A437C671B1F108B9FA2 + D59ACACB3345576C5ADF07B4852DB0F16A9E57361B9C018E3B737458AF8C6F8B + 23F63382D445ADB55EED97289AFA5AB8C93F849DD6C57529D55572F8191C1F57 + E64632461648C6BD87AB5C3217E915B6570B1624B20826B0E1BDAEF4D7CB031B + 1CA77E5548EABD0F76B25438C70C858D3D42EA958F5B494D5B0986AA16C8D231 + B8DC2E26A784B5F155F62499C9D63D6378B0D4868964C34EE09570E8CE2DD0D6 + B590DC480EE99270535CF09E8EB6392A6DE073F5C0EA1515A9F49DEECB50F3D8 + C9CA0F56EC5723E3A65E1993AFAD977B6DC981D47571BF3E04E0ACF391D42E2A + D3BAAAF96DA86C6CA89001E055B1A7B8A17DA48DBDBB7B767BD7469E2D6C369A + C98C17E2F8F6B5E30F6B5E3C9C32AB7B57166D93605753BA23F88818523A3D77 + A66A62ED3D7C47E41C42DDF51D2DAB1621866CEB74FD9AB4FF00CA2DF13BE030 + B4B70E1EE9AAC76F4618DF2016E28751596AF262B8C38F325644D77B4C51979B + 953903C8AAE51E1F2DF381B91CA1E1CE99A4979DB4BCC3C410A454166B5D00C5 + 2D144CC742464AD5556B6D394F1973AE0D716F5682A2B7BE2CD0C20B2DB0195D + E0719544ACD0D7F963CCC6E59355510D24266A891B1B1BE27F4554F123899043 + 4F250DB4F338ED969DCA895DAFBAAF54D418A164AD63BCB2B67A5B40B187B6BA + 8334B9CF29DC6546B8EA7884FA75476F9765F5312928F722DA674A57EA6BA32E + B5CF78843B3DEF157E698B608DB1451B30D68006CBC2C566644C64504418C1D0 + 00AC6D2F6420B496FD17A8AEAAB8651CB9CC9F766BEF37937DA4A83B38DA4853 + 68598600B06D548218C0C2D98D82F1BACBFAB36CD88AC239AFD33E9220CB4D60 + 21B2969613BE700FFC57CE1E92ED1F40F2724B3F45AAF4B9BEC371D49416581C + D7889AD071E049CADFE93A5F53D3945003B08F2ADE1C9FE2621763DEFEDCD96B + 0F9445523C1438D5B73FF5BF52ADED7D5C2DFA5AAE62EE52E6F28F7AA7380AE9 + 2A2FF71A9E53C8E775F9AEE68E6A5C45E3D960859F94EADD12EEE315894BFF00 + 461575A247758AC5A5FF00A30B93C5BFBACCD7D8F64445C92C08888022220088 + 8802222008888022220088880222200888802222008888022220088880222200 + 88880222200888801190B0AB291B2B482166A1DD4A3271794082DFEC11CF0C91 + BE16491BC10E63DA083F92A1788DC19A7AA925ACB0E29A7C97181C7BA7FD53FA + 2EAE9E06BC6085A3BA59E399A7B80ADF8DD5DCB96D5FBFB95B8B4F28E1B8AE1A + AB44DC4D355B278C46705AE055A9A3F8956DBA44C82B1E2398EC4956AEADD1D4 + 374A6753DC2899531F8730EF37E07C173DF13385559A7A927BE595F24B490905 + EDE8F8FE3EEF7A84F4F669FF00A95BCAF3FECCA9E7665CE1947571364E58A667 + 507195E843461AC686B5A3000F054EF022F974B8D53A0A995EE8D8705A55C47A + 9C745D2E1938DD27271F897B927D8FAD1970F9AE65E38D53A5D5CC92A838C0C9 + 3BD8F2CAE99DC1C8510D63A12D7A85AE73A36B263EED8ACF11AEDEA46D8ACA46 + 3BAC1AFE196A0B15C2D3C949551B7B3A7702D2704774AC0E11B9AFD5D722C707 + 0E5EA3F35566B8D1D72D13DA54524AF89AEC8C8711B2977A335666BAA05449CF + 2C84F8AD1D6EBDEAED849AC608C21CA4AFD216E4EA3D39D9424F7B390142382D + A72265BBED59E20E9E539048E8A5FE9214AF758192440B88DCAC5E035632E9A7 + 6284E39E13CA42EB70555BD4CE53EE88DD9C13982D26AE1ECE6899330FE191BC + C3EAA39A978556AB8832D335D4137B812CFDC7D55DBA6ECEC7C4D25A16F67D3F + 1B99F702B3886A34B74DAB22B3E7B3231835D8E2FBD697D5BA4A7F588448FA70 + 769233CCD3D16FF497152A298B696ECC25A36CB9748DCF4DECE0D6020F504641 + F885556B9E135AEE81F2D2C6282AB0482D1DC71C788F05C6B340D7C7A7967F92 + 6AC6BF31BCB15EEDF78A76CB493B3247DC2775B33B1C1D973A5D6C7ABB4355F3 + 72CBD803DD7B776386FD0FE4A57A478AFF00729AEECF764FEEA7A7E29654F96D + 59FE4B309F62E0458167BAD0DD6012D14ED7E7F0E7759EBB94EA2BB9660C8E02 + D75E2CD6EBA40E8EAE9D8E24639C0DD6C5162FD3577AC4D04CA3F5A708DCD7BE + B2DAD6BC75D82800ADB8699AEECAB6804B4ED3DE6B99905757FC168350E93B45 + EA2736A29D8D7BBF100B87770DB2997343E244BB951586B742EA4E48CC429273 + D5A1F8DFE054A64E1CD8EAA8C7ABD7D447E2D1D9E41FCC1510D6BC20A9A47BAA + ED65C31B82C5A5D3DAD356E8EAA14D7285F574CD3821E0E71F157D16686DF86D + AF0FE595FF00856E335D996141C37A681BCADB8FFE472FDBB87D01041B88C1FF + 00E1B96FB44712749EA291B4F34A28EA0EDCB26D92ACCA2B1D256C624A592399 + A7C5A72B7FF05C3B19C3FB91E69948D270DAD90C8E7CD5934B91D18CFDF0B674 + 5A2AC94A3FC3A274AEF390FE815C834B0F63E8BDA1D2C33F73E8A70AB8657BF2 + E7EAD986E6CACE8ECFCAD0C8A16C6D1D035B80B7D6CB048F70CB0AB068F4CB1A + 4659F45BDA1B2471E3B815B6F19AEB8F2D4B0BE46156DF722D61D3A1BCA5CC53 + 6B65BD90B077566535232303002CA6B405E6F55AE9DEF72E8C523E31A1A147F8 + 83A968F4C69BAAB8D5C81A18C3819DC9F2595AAF515B74E5AA6AFB8544713236 + 93B95C5DC57E225EB895A90DBEDE5EDB731F86B4743EF3FCFDD694639DD894B1 + B2EE62D99F59AEB88D2DD672E7B1D2970CF4EAAFA8A311C6C89836680D18512E + 18E966582D2D7C91E2A1E3CBA2DBEAFBE4161B549532387685A794797BD74B46 + D69E12BE5F44492DB0561E907A9DB0D27D9703F27EEE01EA5647016D0FA3B132 + 791A43E77736EAAFCD46B6D78D0439D035FCCECF92E92D216F6C2C8608DB86B0 + 00176781D0E319EA26516CB2F05A5A2E2C31BB29ED38C3028B695A6E485BB296 + 4630D5C1E23673DACB60B63F4888B9E4C2222008888022220088880222200888 + 80222200888802222008888022220088880222200888802222008BE39CD68CB8 + 8007892B5D537EB353BCC735C69DAE1E1CC98C83648A1F55C4CD154D50E825BD + D307B0E08E76EDF55E5FE94F43FF00DB94DFEFB7F756746CFD2FEC63289AA2D2 + 69BD5562D45CFF006457C555C9F7B91C0E3E456ED41C5C5E1A3217E5CC0E5FA4 + 58060D551324072D0A97F496AC8EC7A25F4CC20495AFC63C703FF557B120024F + 40B917D296FAFBDEBBA7B240E259072C65A0E707C55CAD928B8E484965A31B81 + 36A34F6B9AE2E6E1D2F438F3566AD5693A06DB74FD25306E0F20715B5EBB2F41 + C2EBE9D1CCFDCCB3CAA278608CC9348D8D83C5C545AF7C42B0DAF21B376D20E8 + 01504E39EA39A3B9C76DA59CB07DD3CA7AAC0D31A1E29E1655DCA67C86401DC8 + DDFEAB4BADACD6CF9285B7CBFED86E31EE69B8B5ACAAB55D13E1A7A690B46EDC + 0587E8F1592D06A7E5A86B9A5CEC00E571596C341425A69ADF09C78BDBCC7EAA + B9D7D4634BEBD8E7822EC607B9B2B1A06C03B7C7D551ADE197E8E319DAD6FE08 + C2C4DE11737126D6DBB6989E30D0E735B90A87E0CDEDDA575EC969AE7F674F3B + F039B600E574369FAE8EEB63827C8707B30E1F92A378DBA225A5AB376A2690EC + F3B4B54EBB9D3646E5DA5FC9292CA3B0F48CB1494D1BD8E0E69008214B98C6B9 + BD172AFA36716A9AAA9E2D3F7B984359080D6B9E7EFF00FC7F9F0EA2B754C73C + 2D7B1C1CD23620AAF5D06E5CEBB33113F53D2B1E37685A8B859E395A7B814857 + E64E46B4B9E4340EA4AD4AEF9C1ECC93592B4BDE9B64913E37C2D92370EF31ED + CB4FE4A9CD77C1FB7D7BA49ED6D143524E790FFD1B8EFD0F82E80D43ACB48DAE + A0D35C2EF4D14BEC978FDD46AAF5A685AB90451DEA94BDE70073B77FAAEAC65F + 888E2D87EFEE55CB8794CE4FA8A7D5DA1AB79268E7646D39077E523DC54EF48F + 1569EA7929EEADE57F4E63B1579DE74E535751F2BE08EA69E419E47B7208FD3F + 254CEB8E0DD34E5F516471A69BAF62F3DD3F03F3EAB5A7A2B2BF8E979FE492B3 + 1DC9E5B6E149718849473B65046700EEB2D7384553AB343D798AA619D8D69E8E + 07FBAB2349714682E01905C7FC397A73742B634FC5A51F86D59F993C163A2F1A + 2AAA6AC88494B332569F23BAF65DAAAFAED5983C91C0F023C0F505696F5A5ECD + 7563854D2303CFE2685BA455DFA3AAEFCCB7339293D55C1CEFBEAAD6FC386E39 + 362B4169B9F123424B8A5A89E581A73C8FDC61745AF1A9A5A7A9616D4411CA0F + B4D5CE970FBEAFED4B2BC31B320BA3FD2524A77329B53DA5CD2362F60FDFF757 + 0E99E32680BC801B738A07F948797FBAAC6F3C3ED3B72E62FA611B8F90C850CB + A705A9DCF2FB7D5F667AECEC15A96292FEED6D7D063C1D7F6FBC596B0034D5F4 + D267C9E16CE37C2E6F33246380F10E0570B8D03AE2CD23AA2DD74A960030395E + 566DAAE1C62B753C94F1D75448D778BCF31FAAD670A65DA4D7D50DD1DA55B75B + 6D1C464A8AC858D1D7BE155DC45E3AE96D3B492328AA5959558EEB63703BEFE2 + 17393B4FF12AFE1D0DC6E7565A4E795CF385B6B0F07DA1ED9AEB505EEEA798E4 + A82AE39C472C8BE77F2235A9F54EB2E27DD48924963A32EEEC6DCF281F056570 + D741535869D9355461D3E3201FEEA4DA7F4FDB2CD0865240D040FBC46EB13576 + AEB758A95EE7CCC74C06CDCABFA2ABF8AFDBE44A315133B52DE692CB42FA8A87 + B4103BADF35CE9AEF51DDF56DC8D35073B98E7E365FBD53A96EBAC2EA29E06C8 + 6271F03E0AC1D11A5A0B5533098C3A770CB9C47F3F9F4DAD2696EE2372DB115F + 6488CE6A28FCF0CF4AB2D341199616FAD3C65EE574E90B612E692D5A5D396974 + 8F69E5569E9BB60898D3CB85E83886A2BD2D2A9AFB229845B7966EAD14E2289A + 31E0B683A2F38181AD017A2F1364F9A5936504445032111472FDAF34658B985D + 7535AE9DEC3CAE8CD435CF69F7B5B923E4B2937D86091A055B5571DB84D4F14A + F9B5A513046D738E62977C0CE077373E40649F05FAD3BC72E155F5B9B76B1A37 + FF0089D99EDA2961C3B1919ED1ADC0F79DB63E454FA36633CAFEC4B95E338D8B + 1D178525652D653475349511544120E664913C39AE1E608D885EC082A0D6089F + 51116004444011110044519E216BAD35A12CEEB9EA2B8329DB83D9C40E6494F9 + 347EBD101265A6AED57A5E8657435BA92CF4B234E1CC9ABA36107DE0B9726EAF + E2F71178B371367D1B4B3592C6F7723E719CB9A73BB9DE3B676F1C74CAFCC3C0 + EB6C96D1F6CDEEBAAEE0E197BFB5380703DC7C73BECB734FA39DDBA5B186CEAF + 835A68FA899B0C1AAEC52C8F21AD632E1139CE27A0003B75BDE61E6B8A2A780D + 6EF5091D6DBCD5C15CC1CD138C848277C0C63CF1E7F02A45E8D1C51D5943AC1F + C35D56F7D5085AE14D3487BF186B4BB19F1690318F8636EB65BA0941E3063275 + B028B5B455EC980C382D831D90B4A70707864B27E91114004444011110044440 + 16B751DEA86C36B96E17099B1431B4B89270B64B973D2E756D5CD5B0699A09B2 + C7E0CA1A7AE7A0FE79ACA4624F1D8D171578F37BBE5D24B4E92E6653E7944ADE + A7C3F250DB468DD69A86A3D7ABAE3541CFDCB8BCA98F0BB4251D15BE3AFAC873 + 33B7008EAACA680D686B406B47403A2E8E934B6DFBC7E1441471BB2A0A3E0E3F + D60BEB6E2F7F3753CEBF778E155BA8692694D64DDC617025C7055B33CB1C10BE + 694E18C6F338AA1B889AD6E375BBC96CB64A48279435A7E8B3AB82D3CB92326D + FD496362C2F43798515EAEF4E65739A0E0733B3ED2EA9827120C82B917D1CECB + 76D3D57555771387541181F3FDD74FE9EA974B1B492ADD5E91AAE336BD88C65B + 92345F19F757D5C72C355AB2E705A6C1575B50FE464713893F92E2DD39DA6ADE + 274F7193BECED8BB3E1D55BDE96DADBD4EDACD3B4727F8D3FDF03AE3FE27FB28 + 6704EC0EB75A4D7CCDC4928DB3EF5642B73928AF722BB963600D8741B0F82C7B + 8D5368A827AB710046C2467CD7BF40AB5E38EA66DAACAEA38E4C3DC3BDBF8AF4 + 5AFB15142AE3DDEC1792A1B8CD26AAE24B2300BD8D932EF11D574158AD9CCC8E + 26B7668002A8381365965927BCD4B32E95DDC246EBA4747DB83DCD25ABA9C3E3 + F82D1733EECD797C5232ACBA739DA0967D142FD23F41C955A420BD51C1CD3D09 + 2C970DC9E42720FF0070AFCB4D0B1910EE859373A0A6ABA19E8EA621241330B2 + 4611D415E6F5DAE96A1B832D50C6E8E37E0A6AC6C40DAEBA6C636192AD8BAD0D + 2DD689D4F3B43D8E1B1EB854CF1B387774D05A95D70A06BDD6E95E5F0CCD1B0D + FA15BDE1971069EA606515CE4E47B76049DC2D4A2E504EBB17C2FF00C16279EC + 44B881C30AEA0AB75C6D25ED703CCD7316D7877C71D5DA2E68EDFA829E4ACA56 + 77798FDE036574433D3D54598A48E663BC8E73F92D2DE34658AEC499E918D27A + 9685B4AAB22BFA6D4A21A32AA3D2874E368C1A6A39A49CB721B8F155BEABE3AE + B6D5024A5B352BE9627EC1CD0738F8A9753F0A34BC72091B1608F3016D8DBF48 + E9B83B47321E668CE365AD6663FF001488B837DD949DA3425F2FB57EBF7DAC98 + 3A43925CE3BAC6D73A5A974DDE6DA29AAA479748D27BEA63AEF8A96DA7259410 + B399A30DE51D15776A8753EBCD494F336291B0324E6E67670A5A7539CE3CB966 + 1E22B0776E968E39F4D506772610BE5CACB1CAD3860581A2A67C56AA5A579C98 + E30D2A63100F60C8565D39D16BC3F7329651556A5D274F5D4CFA7ACA58EA6220 + 8E57B738EBD0F51D552BACF8331BA47D4586630BF24F6329C79F477C975C54D1 + 324072D0B4374B147203DC56F5A8D4ED6ADFCAEE4795C7B1C5723B5A68EA9114 + F1D4B434FE20718F7152ED39C5A6B9CD82EB1631B1711FAABE2F5A65B246E8A4 + 8592C673963DA1C3E45565A9B85963AB73DF1D2BE8A5393CD16EDCFC0FEEB0F8 + 758BE2A259FF000C2B31F991B6B4EA9B25CD80D3D6B1A4F838ADD3087B799843 + 879B4E551F74E185F6DF2992D356D9C039018E2D77C8AC16DCB5CE9E9047332A + 30D3D1CD2B2B5DAAD3BC5ABEE4D38CBB17FA2A72D5C55B9C4E11D7D097E3EF1C + 2DF50715ED153286C9492463C700ADA8718ADFE68B43058A8A16EE2469FF0001 + 38FF0064FECBF3FE922C3E737FBA7F657FAA69FC8C136FCCAFA1CE1D1C542871 + 234FE37139FF0064FECB555BC59B74523A2A7A27C8EFC2482A99F12D37E9CFEC + 670CB27BCE3B124AC0B9DDEDB6D6975655323C78672554375E24EA2B97345434 + AE881DB60B4C74FEA9BFC825AF95F1C47A979207C96A4B885B6BE4A238FA6EC6 + CBB92AD6DC52631CEA4B4778BB6C8392A0B6FB25F3555676F707BE3889CF7BCB + DCA6967D03414D2472C999A46F52E1B29DDBAD24901B1803DC174349C06CB1F5 + 354F957F9FFC2995DEC88E697D2F476D85B1C5034BBDA23753FB0D95D239B96A + D9D8F4F39C5A4B3E8A7F64B23226B4962E9EA75F4E92BE952B09108C1C9E598D + A76CAD89AD25AA5F49008D800094D4ED8DA000B246CBC7EA7532BA5966C46380 + 88B45AEF5659345E9CA8BEDFAA9B052C23619EFCAEF06347893FF13B2D526967 + 646E6AAA29E929DF53553C504318E67C923C35AD1E649D82A178A7E939A574E4 + 8FB6E9684DFEE7F7416822169DBF37788F0FCD53FA9753F10B8EB7F114667B36 + 94649DC6C790DC6DE3B733B07EBE03A4C747F0BF4A69285D58E8993CB08E792A + 26DF18E524E4F4E84E7C3CD6F697473B973630BE662584F0451D73E35F15A37B + EE37796CD6B906D030F66D7376232D68DFAF523F35B2B3704AC34EF64F79B8D5 + DC6A1AECB8BDE40774D8819F7F8FEEB4D73E32DD6B2FF2DA34458DF5D046397B + AC71DC75386BBA7F3DC34741C4ED6FA36E9FFB616991D4B527BAE2DC06E47811 + B788CFE8BA35D54423CCE2DAF38D88F37B169D570B341CE7BD66696918C12EF9 + FDE58370E0CE88ABB74949474D2D0CD21C89237B8004038D893D32A7361AA8EF + 368A6B9D2B98E86A19CEDC3874F2DBC568F5B6BED31A3687D62B6A9B55525CE6 + 36088F310F19EE9C6C0E40C8EA33D16E595E9631CC92C327153716D7621FE8FD + 7FBDE86E2FCFC3C96EAEAEB4CEC7C839CE794B585C08F23B007F5C02BAC6DF73 + 64E061D95C43C379AE7A8F8B32EBAF5134542C6BD8C0EC8E6CB4B401E677C9FD + 360BA7B495CA491CD0492B5E7C39CF4FD56B1DFEDEC53CFF00160B56378705FB + 5856D90BE204ACD5E7A71E5782D0888A20222AE7D21388B0F0E3404F728DCD37 + 2A9CC342C3B9E7C6EEC78E323F321652CB32964D3F1F78DF66E1BD2BADD481B7 + 1D432B7FC3A666E22C8D8BF1E3EEFCFC81A034D68AD4FC48BDC5AC78895B2CF0 + 4CEE78A91CE3D36C6DE031F41B6010567F06345B6E714FAD75A44FAEBA5738C9 + 136A3BD80EDF9B7EA4E7C7E3BE411636A7BCD3E9CD3B557395A0450464B5B9C6 + FE5D0AECE93411E5EAD9D883643F59F14B48F0E2A60D3F0DB449D9B705918C76 + 631F03D739FCFC49389668DD476CD6169FB56D0FFF0000920876C5A479FCC7CD + 50FC29B2C1ABEE978D5FA86963AB8EA5CF8618E468C65C3BC70318C03B7BCE46 + E17ABB466A8D22DB8CFA7B51C5416A7F7899642C2D1D7C075F0DBF521752AA35 + 7D35745662FDBC221CF1CE0B2B8AFC4FB4E8C8BD5291ECAFB9BC10228DD9E43B + FDEC7BFC3AFC36CD7DC1CA3BED4EB93AF3503D9465EC70858FC35D20734B7206 + DB60E73E3F9922B4B44E5973FF009A2864D41797BF9454CAC2E8984EC39187EF + 1DC105DF0E5DB2AD2D09C2FD4777AD7DF35C5C676C5D99708B9F2EDC0C0F1C0D + FA7BB185455745D8A73F89AF65D97D5869BD91D3DA3EF22A434B256BC67196BB + 2158B41273C60AE4EF473BD36A3525F69296679B7D3498A76B8F405C7DE7C3F5 + F3DFA82C956D7C6D195A7C4211B12B20B66661B6C6F5111710B0222200888802 + 22203CEA9E63A695E3AB5848F92E3BE2A442EBC73A864A4E1B545A0786D9FD97 + 61D5B5CFA5958D197398401EFC2E40D73FFBF7ACFF00BE3BF552C6C0B3238DB1 + 46C898006B1A1A005FA5F02FABD951150AE297820C89715AE9F66E919DCD761C + FCFC9529C1CB3BEE778A8BD5412435E7973E6AD1E3D534B2E95ED230795A0E54 + 5FD1FAAE96AED0FA36604D13FBC3C56970D8576EBA6EDF6216E705C5A6295EE9 + 1B80ADDD3503991372144747DB010D25AAC7B7D388E300051E35AB53972A15C4 + CC60EEAD2EB6D4149A6F4FD4DCAAE40C6C6C247C967DE2E54969A092B2B26645 + 146D2E25C70365C6FC77E29556BABD7D83660E3431BF1CCDFC67A67E1FCF879C + 8C73B9394B1B7B91E9EB2AF889C4892BE405D0F6BDD1E00780F92BE68A9A3A3A + 38A962003636E36F350DE146968EC969654CACFF001DE36C8DFE2A6CE7068249 + 000EA4AEC70CA52CDF3ECBB19C6160F2AFA98E8E8E5AA9480C8DB9F895CBBAEA + E151ABB5B3282271730C9BE3CB2ACBE35EB9829681D6FA29413820E0F52A27C1 + 2D3D2CB3C97CAC8CF3CA7B9956E9A12E23AC4FFE288D92E545B3A1ECF1D0D0D3 + D1C4CC06340574690A0E48DA70A13A4ADE5F234F2AB66C54A2289BB782E971AD + 4A8C7A71EC8AEB8FB9B7A6606B02F478C8468C05F578F6F2F26C119D5B65A3BB + DB26A0B852B2A69651DE63874F783E057316BCE074D4B5AFABD3B580B32488A4 + 3CAE1EE07C575F4D187B4E547EF36864ED3DDEAB6E9E959F0D841A6B74719C56 + DE2058A6EC9B1D4803A641231EE5208750EBC8E26B391DB0F18CABDEE9A7A463 + 9C62E66FFAA70B453D8EAC138925FF0078AEA55C2299EEADC7EDFF00A43A925E + C53D72BEEBDA880B5AD783E18610B452E9CD5D781DA57CD246C775E67615EC6C + B59D39E5FF0078AF8CD3D29764B095B10E07A74F33B72BE9FF00A63AB2F05476 + 5E1D5B63631D5A1D512839391B2B334B5AA2A40C8A969DB1B06DDD0A4343A69E + 48CB3E8A5766D3C2320967D16FF5749A2AF9695FBFB90E57279665E97A77B58D + C82A694C30C1F05816EA26C2D030B66D180BC9EAEEEACF26C4560FABF2F6070E + 8BF48B50918351451C80E5A169EBEC71C80F702932F85A0ABEBD44EB7B330D26 + 56F71D32D7670CFA28F57E9C95A0B704B7D92323E455C7253B1DD405873DB627 + FE10BAB4F179A5896E8ADD699425CB4951CBCDDADB299C4F53D9E33F2216964D + 0D6563B3F6596F9F2BF1FA2E84A9B1C4FF00C03E4B5D3E9C8DD9EE05B51D5E8E + CFCF5AFB11E492ECCA29DA2B4B8EB6EAECF8FF008C3F65F83A334A8FFF004EAE + FF00C61FB2BAE5D30C3F83E8B1DDA59B9FB83E4A715C31FF00C3FCBFF63E3F25 + 312E8FD3AD19A7B7D503FE79863FB2FB1693B431E246DA9AE78F17BB23F4572F + F4B37D81F25FB66976FB1F457467C360B6AD18C4DFB95453595B19CC14B145FE + A316C69AC72BC8CB49568C1A65831DC1F25B1A5B046DC7702B7D629A562A8A5F + 45831D36FB95D5B74D3DC4659F452CB469B6B304B3E8A5D4D6B8A3C7742DB46D + E5635A3C000B91AAE33659B22C8D691A6B7DAE3880EE85B68A26B06005E88B8D + 65B29BCB2C4B011115664F8F7358C2F7B835AD19249C00170FF10750DC78DBC6 + 836E8A49069AB54858D8B9800581C3271BF78F8F5F0F01B761711E4745C3CD49 + 23490E65A6A9C08F022272E4CF462860FE9BB856085C2A24A9773C9BEFD31FDC + FCD6E68B4DD6B167B1252E58B4BB96DD34349434105BEDF4F1D3D340C0D6318D + C63F9FCDD4278FF25C62E15D5FD94D7BA5738097906486EFEEF30DFA79A9BAFA + 447244F8668DB244F1CAF6B86411E217A7B6AE7ADC23B15147F036E1A759A520 + A1B54F18B838735635FDD95CFF00D40F0C7C76254F6FDA5A0D51649ED95ACE68 + E5196BB192C70E8E1EFF00DCAD06B1E09586E550EAFD3F5525AEA8EFCAD3DD2E + C0F7E46E3DFD7F25168E2E32E85A80CA3A975E29410035E3B5C81BE002323F2C + 2B21C45D54AAACAF1EDB6E8A9D7BE519757C38E2550583EC9B3EA9653D3B090D + 8DCF706B987AB5DB1DBC7183BFC495FBD1DC2CA6B5C0D9F50BDB7ABA170719A5 + 0E7363181DC1CC4F300EE63920673B8D82DADBB8F8CA69FD4B5AE959EDD20716 + BE5A7CE1BEEE577FF5056B6959AC5AB2DCCB9D8EB22ABA7775E5FBCC3E4E1E07 + F8163457E92BCC94567EFF00FE1294ECE5E4CEC466D96C7E5AC6461AD6EC0018 + 002B1348DB64639A4B4AD95AB4EB0107942A538FD57AC2F9A8868BD395CCB6D0 + B599A97364E52F1CE5A4B8F5236CE3FBAAF5FC515CB9224615E0B535AF1CF87D + A222753D45D05CABDBB0A6A221FBE3C5DF77DC71923C956B3FA4FEADBA569669 + 8D001D086E40A8ED247786F9696F9F928BF0E3845A728266D7DC6A9978AE690E + 7733B201EE9E87AEE0FECAD86434F0B58C8696289AC686B406F40061726BE1AE + CF8A5B7F92F4F0431FE917C4FA681D5759C3FA56D2C7FF0048E6C330207C4BB0 + AD1E18F1DF48EB2D3B5B729E6169A9B7C4E9AB29677E5CD6346EE6F4E6F2C633 + 920788CE963735BB18A32D3D47200B9E78E1C30ABAAD614751A5A99F0415F206 + CCC8F66824FC3001FD0F41B08EAB41D38F325930996DD57A5356CF2D6D458F45 + C95B6DA790B44E5EECE33804E06012AABD73AD2F7C71E2458FD62C335B6D546C + 6B5D0993981209739F93E277F0E800DFC6E2D17A42874B695A6B2454ED908687 + 4E4B73CCF2064FD3E9E6B730410D333922A66443DC0856D5C2F2949EC32208A3 + A7A68A9A26B591C4C0D6B5A0003E4AA8F4A1ADB845A362B75BE09257543B2FE4 + 3E1EF1F123FDDF95B3D4AF57C0EA987926839E21ED0385D3BEAEA54E09E0C1CE + 7C33BE6A28349D352DBF46554B4F4ACC49282EDCF524E198F1FC86161EABBE5D + 78817FB7696A4B6D4D052B27E5A97B9C40712E03BC3C31E5BF8ABDA0AAAEB952 + D65BF4F4115352B5DC9255F2820F9866DB9C11BE7F3DDAE59F63B5515A28994F + 4D4F1B5D8EFBF182E3E24E31FCF21802AEAEA6E874B9FE1EDD88A8453C9E1A6B + 4B69ED3143152DA6DD131E1839E52DCB9C76EA7F21B745A7E3456D75BB8755B5 + 1471BDF2CA3B36F201B673E7EE0E52D2BF4F1DA533D92B43E103243BA2B654A5 + 5B847624730703F5ADCB4B52BAD8DD3353555D5951CEE943F1CDD035B800F424 + FCD75D70EAFD535D047EB9492D1CE581CE8A46905BF3EBF1542F1138ADA7ED05 + D6BD33430D75D5DDC6C8C6F308DD9C7E7FDBA75DC298F046A2FD4F696D56A294 + BABAA1DCE5AEFBCD6E1A003E5D3A2D6A612BAB752F894577C109622F2751222F + CBE4646DE67BB017962E3F48B5D3DE2922760BBEAB18EA4B7838E6FAAB969ED9 + 76883748A35FD5B49CB9C373E5941AB68F7E6E51F9AB3F057FE931924A8A3035 + 851970043467DEB369750534CEDB18F71589692E8EEE264DD2E3BD73FF00BF7A + CFFBE3BF55D7F04F1CCD0E63815C73C44AA8A978ED586538FF009638FF007546 + 31DC16A0E8BEAF8D707343DBF75C3217D5ECE89295716BC1066AB55DADB78B15 + 451B865C5A4B42E69B7D556F0F35D0A8735FEAAE7FF88D1D30BAAFE1D5447596 + 85B5EA263DEF6B5931F31B15CAD5D3651775EB59F26719582C1E176BFD317AA0 + 64D4F71858EC0E66B9D82148B56716347E9BA291F35CE19656B768D87249C2E4 + 9A8E0DDF69EADCEB6D5490C79DB95CB7167E0E5754BDAFB9D5BE423A873B2B9F + 7DB0B9F361E48F2C9763F3C53E2D6A2E2255BED5696490D0176006E72E1EF5BC + E14F0F63A085B5F708F9A43BF786E4FF003F9E730D31A0EC9A7E212BDB19737C + 4EC179EAED7965B2D3B9914AC748D1B01D02A1249FF5365E0CC618DFDCDF55CF + 4F470992691B146D1FCC2AAB88BC49823864A0B61E671DB2D3B950DD47AC6FDA + AAA4C144D93B3271DDCF45B8D29A123672D55CC99A6777837A80B6E11D4EBE4A + AAA3B78F65F5332928F723BA6749D4EA4A9170BA97F645DCC01FC5FCFE7BAEFD + 2B678E9E28A9A08F96360000017E6CB680D6B638A3E568E800561E97B2105AE7 + 37E8BD4534D5C2E86B3993EEFF00E91AEDB9B375A4AD9C8D692D53BA58831802 + C1B55188631B2F6AEB8C148DC170242F25AABA5A8B363622B08CF4515ABD5914 + 0E20B9BEE0B106B667577200A31E1FA892CA88E644D57E1EC0E1D1438EB461C9 + 6F272A7F5AC6EC72729595C3B51FA4CE51269E8637F568585259E271FB8169BF + AD63C632DE64FEB4881C3F932AE8E93571EC8C6C6D7EC58BD90BF4DB3440FDD0 + B4FF00D6918C1772617D3ACE33BB7930A7F87D6781B12086D9133F0859B15331 + 9D00512FEB58CE393953FAD63C632DE6554B45AA9774676266000BEA858D6B18 + 38796E53FAD58305DC9855FA76A3F48CA2688A1675A30E4B79309FD6B1BB1C9C + A53D3B51FA465134450BFEB58F18CB79906B58C1C3CB729E9DA8FD23289A2285 + FF005AB060BB930875A30E4B79309E9DA8FD2328999683E0BE18DA7C1437FAD6 + 37639394A0D6B18D9C5B94F4ED47E91944C0C2D3E017CEC19E414406B560C177 + 260A1D68CDC8E5C2CFA7EA7C0CA25FD833C82760CF20A2275A4648E5E55F3FAD + 63E5D8B7993D3F53E06513011347805FB0C03C14346B58C121C5B95F06B560C1 + 77260A7A76A7C0CA2698450B3AD19B91CB84FEB58C6E4B70563D3B51FA465134 + 45087EB8881382CC2CBA4D5D14E400E6FBC2C4B876A22B2E23392588B0286E70 + 550D9C0159E0AD4945C5E199C1AFD4D6E177D3B72B4993B315B492D397E33CBC + EC2DCE3F35C59A72F573E096A5AFD21AC2DCE36E9657490D4C6DC820F4734F8B + 4E3FF42083DC4EDC286710F49D9353D01A6BD5AE9EBA319E5ED1BDE6FC1C371D + 3C0ADAD1D8E32C6704595258356699BFB79AD776A7909CE185DDE3F91DFE9FAA + DCB007E4C6E6C807B272AB0D65C04B2C75124D60ADADB53C92435A79D83DC06C + 47D54363B2F16B45B8BED95E2ED4CC04F661DCC40CF40D70EBF00BD2C5EA1473 + CBCCBE5FE887323A057DC9F71F7119550687E34C75976FB235750BAD95592D0E + 2D20647810727CFF00992ADE05AE01CD3969E854EABA36F6EE48D6DFF4FD9350 + 537AB5DADF0CCC3E25BB8E9D3CBA0E9854E69B8AA384BC70B75AADF702FB4DD6 + 5644E85CED8073B9707C320EE3F4E82F50325730F1F221ABB8AF4364B2C9CD53 + 90C7B8386C493E39F78F25A7AE50AF1625BE7EE3B977F137D2329AD45D62D0B0 + 32EB767F74D481CD1C44F8B47471F79DBE39507D1FA4356D6DCEB3596BEBDCF4 + F1CCC7CB3B448438823241C741B9DBDD8C29CF0F786B60D156F81CD89B57752C + 065A870CEE46E07BBDFD7AF4CE0413D26F51D532928B4D5BA77B66AB781235B9 + E9FB75F905AD2D372C7A935F4416C45EBE3D57DADC754E83AB70B553CC41A6E7 + 3CCE6B4E798B49208F3DCF53E0ACDE0AF107FAD2D6EA7AB608EE34DDD95BB77B + DF8FE7D703DB42D8E3D37A5A92D11E0CC1A1D50F1F8A43D7F21D3F2CF8AAFB43 + 38E94E3DDCAD1451B04155DF2D1D181C03F037F761742CD1CB4718599EFB35F5 + 2119F33C17FAAF78F1A8AE9A6F4AC35D6A21B3F3F287100E321E3F556191DE23 + DF854CFA505E0368ED7A721C3E6A8943DCDC1C81B81FDDDF2F9E756FFA4D7926 + 416F9AE789F6A8ADD555D3C4197120C382C25C0E0E700646C4755D29A7E5AC97 + 4D5BDF71DEADD10748797072464823DD9C7E4B9E6AA0378E2CD834E8676F4F6B + 8626CCD0720900171F96DF92E937E072B40C06B4058854ABD44E316DA585BF9F + 73116DACB31EE1570DBED7575F507FC38222F3F90C9FA02B9FADDAC3897AB28E + BFECB96165B7B57479CB1AE780065A36CEF9F86F83E4A7DE91B7DFB27411A189 + E04F5CF0C03C71D76FA7CFE5AFE18D9BECBD216EA42D02474625936C65CEDF7F + 7E303F257E9F4CB59A89426DF2C56F8F2C8CE7CAB62233717F5AE9534768AAB2 + 085921E588398E6F3EFB9DDDBF5F9939DC92AFCB256D657D9292AAE14E20A991 + 81CF60CEDF3DD50D2DB5BADB8EB1DBCE5D476901AFC03D5BD41C7F98E33EF0BA + 10B5B181134F7583942D7AABE4BE718C9B8AD9124DB5B9857FBA4564B2D55D66 + 00B69D85D82719C0CE33F4FCD50572E20F1135F50CD058E87D56DF2BCC2F959B + 646D91924E36FA1DF6534F499BE3ADFA3A2B4C0E226AE786E0788D89FEEDFE75 + FD70EECA2D3A56DF4019CAF1107C9B60F33B739F78CE3F25B1A7D37E36F9424D + A8C56F8F764672E55B1AAE1E70FEDFA700AA900ABB9BF792A1C33CA4F5E5CFF7 + EBF056A582925748DC02BD6C76674E5A795585A7F4F88C34967D16F6AB574692 + AE956B0915462E4F2C9F4F511C70F3B89C1240C0F1DFE5D142F525FCB39807E0 + 0F7AD8DEEA9D1D047E2E2D76F8E8398FEC3E4AABD5D5EF0D90825795E17A2575 + B867674DA673839B3CEF9AA64ED0B1B21EBE6B551DEEA24C9121DFDEA155758E + 92AB049EAA47658BB568C6F95EF2CD253A5AD651CDB25993489076F30FC4578D + 4D5CFB9E62B3BB0C8F05E52D217646CB9B1BA19DD11C334D35CE78F04BCECB3E + C9A9646CA1AE90E33E6B4F7D8844082A2F4B54F655E1A4F55D4A74F4EAEB7844 + AB9624933A2F4C5F8BB97BF90573FF00A54D92A2DBAD21D4948C3D855012730F + 07788561E91AB7F24649533D4561B7EB0D292DA2E630D2331498C98DD8EABC17 + 17D22A6CD8EAEA74AE30534543C34D5B4977B3C50D44ED64EC18193F45351B8C + F8798547EAAE14EB1D277174D6C63EA698B8F24B01C83D7AFC9675B2F5AE68E9 + 442E827C8EA0C44AD5D2EBECD32E56B28E6ECCB8B217DC1F22AA5FEA4D6BFF00 + EC4DFF0082562DD2F1AEEB21C46D981E9B3085B72E30DAC460305B15B74B7D03 + 4BAA6AE28F1E1CD92A217DE29DA2803A3A43DB49D36DD57834A6A7BA481F71A9 + 7C6C71FC6EC7D16FAD1A06DB4D875417D4BFCBA051855C435BF922F1F65F722E + 71891FBBEB6D4DA8AACC342D95AC71C000158B41A12EB72ABED6ED3BF9739209 + 56B5B2C5053ED4B4AC8874EE8521B7D8E4908EE15D3D3700AEAF8B533CFC97FB + 2A95ADF621DA6F4C52DB2010D34237EA48DCA995A6C8F908EE7D14A6CFA68EC4 + B14C6D5626440658B72EE254E961D3A5617C88A837BB349A634A3A66978E46F2 + 633CD9DF3FFA29AD05A5B4CD03B871E4B2E829DB4EC21A319C2C95E5355AEB2E + 93CBD8D88C5235B77AA3454C4B43738F3FF82AC352DF6A017BB2CC7FAC7F6539 + D6AF7358403E0A98D5933C736FE2BB7C0F4B1B30D909B663CD75AA9E72799A7F + 32BF4C9AA5F8DC7CD6A6DCEE69467C548228DA1A17A4BECAEA972244229B3E35 + F3E3191F35F43E669EBF5598C8416E72BF4200B53AEBC13C185CD2F5FD50BA57 + 6F9FAACD108CA7623CD3AEBC0C185CF2918CFD539E61B67EAB34C03CD3B0184E + BAF0306107CAD3B1FAA734BD7F559A200821194EBAF03061174AEDF3F54E7948 + C67EAB37B11E68601E69D75E060C2E7986D9FAA07CAD3B1FAACDEC06104013AE + BC0C185CD275C942E91DB92566884653B11E69D75E060C2E794ED929CF28DB25 + 6698079A760309D75E060C2E695A762539A4EB92B34401042329D75E060C2E69 + 481B94E7970464ACDEC02180275D781830B9E507A94E69078959BD80C2080275 + D7818308BA5CE72539A5206E566884653B009D75E060C2E7970464AF39E49797 + 193B2D89802FC3E9C1F15957ACF61823F51533301EF15E5477D961A800C87E6B + 3AF50362889CE541ABA5736AFBB90BABA3E96AB31C114DC5976697BFB9E1879C + AB161BFD0D2DA64AFB955C34B4D0379A49A5786B5A3DE4FBF654068DA8930DC9 + 502E3A576A2D5FC40B7E80A5AC920B606B2491B19C6496E4B8EE3240240F774E + A73E4B8D68210B363B16D2950AC279C4CF49E74D5B25838616C75CAB0BBB315D + 247919CE32C67CB05DFEEAAE68743F11F58D4CB7ED61A86A9B3C8DE66C45F976 + 3621BEE1B9DBC3C958FA0342D9745D188A8A9D8FAA2D02599C325C7C7EBFD87C + 54A83DC1E1D9DC745469B8772ACC9E3E9FECE636555E8EFAAAE149A86E5C3CD4 + F525D2C25CEA2ED483820F79A0FBF73D71907C49CDD53D9A29892D68551716F8 + 6B26A4AD8B5269EAB3437BA7C1E60E239F036DFC0EC3FE18C98E4F171EABA923 + B4CF79F5780F71D346E635F8E992E6F78FD5590B6DA33179CFF241C326A3D28A + 6B1BEF76BB1DB190D4DEE29F334B16EE8803F7091D4F5241E9F995766908AA21 + D2D6DA7A96E268E06B5E3DE1A07E8A0BC32E0F52E9BB89BCDF2A85757750F7F4 + 69F31E24F4F0DBE4462715F8BB4B6893EC6D2405C2E0FCC6E73073358771B79F + F6F8E76CAB5C66EEB7BBD92F7249616092F14F88162D29A62A8FAE325BA3D85B + 0C2C20B9A48EA7DDBFE7F322A9F45DA16DFB515CF555CA57C9581C793989277E + 6DF39F77D578E91E1CD656D44BA875817D4D64B99194AF25D82771CC0FF6F9F8 + 852AF45FACA436AB95B62A5647341377A4C6E46361D3FCA7E696E96EEAD765FB + 279C230A69E522E7712E2493925511E90623B5F1334EDEEA6077A9325617C9CB + 91B3C93F423E6AF65A4D77A62D9ABF4ECB6BB8C40BF1FE0C807798EF31FB78FC + 88DABE12714E3DD3CFD8C9ADA3B850416C92EF53551368638BB574DCC0B4B7C3 + 1E79F0F3CAAC78181DAAB8977AD5B514E4C2E91C627737DCC9D80DF718C8FE05 + 8D4BC13D5F255B2C153A865164E7E72D123B946F8E980338FF00D5581357693E + 0F69436CF590F9F9399918765D23B0067C71BFF6F12306AD5EB25A9946538F2C + 63BBCF923087293ABFDDADFA76CD3DE2ED3B608626E5B93BB8F801E676FEFE00 + 91CE9A5CD56B4D6D5BAEEF43928288974208D8F28C8C7C00CFCB3D57E68E2D5B + C58B8B6B6FB2CB496185E4B1A0603867EEB4789E9BEF8C0CE7002967131F4FA6 + B86F3D2504429D9206D2C0D66D8E6EBF300E4FBD6D6969767FF55AB108EE979F + 9919CBFE28F1F46EA465DF53DF754D4806574843011E649C8F963F3F9DE4D05C + F03C49509E08D81B61E1DD1348C4D523B67EFED60FF6E5FE6C26B33D94B4B2D5 + D43C450C6C739CF71C01804E56BE9B2ABE79777B9614371ADCDD47C5CB3E9F61 + 73A18087CCCCED8FBC48DFD9C7C9587515715A6CB5B7497943296074801E8481 + B0FCCE02ABF45BE3BF717EFB7A8A6754D3401CC82539F17728EBFE552EE344CE + A4E18D4B1A79455D4454E4FB892EFF00FCADED0CBA5A29DDEF26DFD8A67BCF07 + 87A30DB79E82EBA9E73CF3D5CC435C739C753F3CB7E47F3B81B82E1CC7033B95 + 17E1559E9ECBA02D705396BBB585B239C0632480EFD71F9293F83879B48FA2D2 + D2C5C6A4DF77B971CF9C4A7FF55F1BA86D61EC9A928F0F900DC600E620FBF721 + 5BF62A6ED6668C78AA775C691D53A47585C359D04D18A495C79B9803DD73C777 + 71D771D3E6AE8E18560BBDAA86E2E8C46678C3CB41CE0ADAE1B74614D91ED2CE + 5FFD14D89B922D4D276C688DA4B54DA9699B1B4602D469C8DAD81B81E0A40DE8 + BC9EBAF94EC792F8AC221BAA98E8E9E28F3D187FFE4E5566A481D2B5E15C3AB6 + 2E795A31FF0057FA955E5E285DCE7BAAFE15C415373523D5F0C8C254F2BF729D + ABA27B2AB2478A915925308046D85BAAFB336577306E0AC68AD32B3380BDE59A + DA3575AE67D8E4EAB845B09B70DD1B3F58763AAF09AADEDCF79650A094F50BCE + 6B648ECE173A2E8CEECD6F4EBFC11BBC48E9812772568E8EDEF92AB3CA7AA9AB + ECCE760159545686C4721992B7A3C468D2D6D459BDA4E0D394D4ACEC7EF4ED31 + 8831BE4AC7B1B4FAB869F1518B4503B981E5535B4405A00C2F03C5B882D45988 + 9D6D728461CABD8FCDCAD8E969439990483B8D943AE941726121953301F156BC + 5007533410B0EA6D91C9D5A15BA3E23D2494964F1F641393C14DCB4D7704FF00 + CA66F9AC492D55B2B8BA4925713D72E2AE27D8E227EE05F8FB062F607C975E3C + 6E11EC914BA8A861D3D213F70FC96D6874CBC91962B3E3B2443F005990DB2267 + E10ABB78F49AD8CAA882DBB4C018CB3E8A496FB1471E3B8148A3A6637C02F66B + 00F05C8BF895967B96282460D35047181DD0B3591B5A3A2FDA2E7CA6E5DC99F0 + 1EF91EE1FAAFABE01DF27DC3F55F5458343AAE93B680BC0CECAA0D536C710F3C + AAF9A889B2C658E19054375058F98B8866415DBE15C43F0EF0CB2B8466F0CA3E + 081D149823185B48253800A935C74EF2C85CD6AD7BACAE1D3AAF512D6E9EEF89 + 97AE1D37F94C46CE718CAFA673E6B2FECC201CE72BE0B6BBF12ABAB47925E997 + F8317B738EA9DB9F3595F66BB3EE436D767BA764EAD1E47A5DFE0C5139F34EDC + E7AACA36D38D8EEBEFD9A7072774EAD1E47A5DFE0C4339F34EDCE3AACA6DB5DF + 893ECD767DC9D5A3C8F4BBFC18BDB9F34139F35946DAECF74EC86DA71B1DD3AB + 4791E977F8317B739EA8673E6B2FECD38393BAF8DB6BBF127568F23D2EFF0006 + 2F6E71D53B73E6B2BECD767DC86DAECF74EC9D5A3C8F4BBFC18A273E69DB9CF5 + 5946DA71B1DD7DFB34E0E4EE9D5A3C8F4BBFC188673E69DB9F3594DB6BBF127D + 9AECFB93AB4791E977F8317B73E69DB9F35946DAEDB09F66BB1D774EAD1E47A5 + DFE0C5EDCE7AA76E7CD658B69F15F05B5DE29D5A3C8F4BBFC18BDB9F34EDCF9A + CAFB35D9F721B6BB6C27568F23D2EFF062F6E7CD794D3B87E22B3FECD763AEEB + E3ED65C005956E9FC8F4BBC8DDC66748C20925479F42F9AA73CB953B92CDD73B + AF4A6B3318E079375B95F12D3E9E2DC4DAD3F059CA49CD981A7284C0C6E46E55 + 67C74A6BEE92D776ED7D4103A6A2735B1CC43721843705A7E237F0F1C7457B5B + 6DCEE71DD5BEA9B2D25C6D72DBEBA963A9A699BCB24523721C3F9F25E4788F15 + 8DF6E11D5E214D7D055C7D8ACB476B7D3DAAE863A9A1B844D9DFF7A17B807E7C + 76C9FE7E78DE3AAA91B27666AE1E6CE3193FB2826ADF47FD3ECAB92AEC9595D6 + C73893CAD3CEC1EE0363F32543AAB837511C849D4F5C4F9F623FFA974F4DF89B + 629C527FBE0F2136A2F0CB86BAFB64B7547635B75A6A77E39807481B91F990A1 + 3A9F8DBA56D4D7C3452CD72A81F75ACCE339E993D3E47F68847C1EA19250FB8D + D6E35447B2433F7525B070FB4FDA0B5D496988CA3FEB251CEEF8EFB03F05B6B4 + 3ABB3F349457DD95BB57B1019EE7C4CE244BCAC2EB3DA1FD5C72C691B7E6EDDB + EFC1F2537D13A0ACBA65A258233577077DFAB9477BFD91E1FDFDEA6D4B6B99E4 + 0E52A4569D3B23DC0B987E4B62AD3E9747F1B7CD2F2CADCA5223F6FB5C93B877 + 4AA66D927FA29E34D6535C98E86D55C4BA393079435DBB4E7C7C01EBE3E2BAEE + CBA79AC00967D16B78A3C30D3DADEC4286F14C79E3C98678F0248CFB8F97B972 + 3887118EA24A29F67B16423CA435B79B449036A62B8C0E85FBB5C1D907F31B2F + 49AE76AA6A61555572A78603F8DCFC0F99C05535EFD1DCD092CA7D5D5C2207BA + DF57E9FF009D6A19C1A0D708ABB5157D5400EEC0CE4CFE792B62A86AAD8E6315 + F732E7146DF891C68A4A7CDAB46C6EAFAD7F74C81A4B4123C3DF93F4F1517D23 + C3DB8DF6E2DD41AF6796A25243A3A5738E7DDCC7C063031D7E1853FD2FA1ECD6 + 103ECEB7B5B2F4333FBCF3F9F87E58531B75A2595C32D2B769E1B083EAEA65CC + FC7B22B958DEC8C1A2A20591C1044D8E2600D6318DC35A07800A09C78B1CB555 + 7A6285CFECE196A1C5E4F41DE6004FCD5FBA7F4E9CB4B99F45BBD47A06C9A8ED + 4DA3BBD2F3B5A72D730E1CDF815A7C4F894250752ECCCC20D3C9426A2E2BE93D + 216EA7B7D1BCD7CF0C6D6B2288E71B37033BF81F7F4DD57D72BB711F89B1F2BF + 367B2C9D41CB03C6DF9BB71EFC1F257AD6706744D96B8D6D35A4D44CD1B7AC3B + B400F9E3183F9AF296D323E5C066DE030A1A2D34350B9AE97C3E16C4A736BB10 + 8D01A4A874D5B9B4342D2E738E6595C3BD23BF6F72F1F490A5745C268A4C118B + 94393FEC48AD8B269E7B9CD258A497ED056CD51A5E7B25DA12E825196B87563B + 070E1F32B67896B6A8D5D286CB182108BCE5957F0E6BE899A0AD92CB5F0F2B29 + DBCC79BEE80D19F960FC969F5C71774B69B67654B38B8D5F8321208F0F1E9E27 + CFA2F0BC7A35D35BE27320D5D5DD9784629B007FE758166E13E9CB0CBDA0A575 + 7D40FF00ADA9EF6FEE6F4F9E569E96BBF511518B49792D94D22095376E217139 + ED8A661B6D90B813CD96B5C36FCDDBB7DF83E4AF4E1E5232D141496F85CE7470 + 303039DD4AC7A2B548E2006607C14C34E59240F692D2BA6F4FA7D1D52C3CC9F7 + 6CA79A52658DA6652E85AA4ACFBAB4561A430C4D042DEB0602F0FAB69D8F06CC + 7B1ADBC41DABC1C7E1C28DD75B79F396A99CAC0F58D252B5DE0B4250CBC9D2D3 + 6ADD4B057F359B27207D178FD8BEE3F253F750B0F805F9F506FB2A71B6F8F693 + 3A2B8A79219F63FF0094A7D8FF00E52A67EAAFF61BF25F5B48EC8CB5B8F828F3 + DBFA998F51642BEC51EC2F586CCD073CAA69EA4DF657E9B46D1E08DD8FBC9907 + C5191DA2B6F2E3BAB79474DC98D965B29C0F05EEC600B11860D1BF56EC3EC630 + C017E9115A681F303C9303C97D440303C91110044440111100444400AF19A30F + 6E08057B214329E0D255DBE2767FC31BAD4545A599DA3014B9CC07C1793A069F + 0FA28BE6F666ED5AB70214FB38CFDC5F8366FF00229A9A569FC3F45F3D51BECF + D14313F26DAE26C85FD8C3D84FB187B0A69EA8DF67E89EA8DF67E89CB2F267D5 + 2442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F91EA72217F630F613E + C61EC29A7AA37D9FA27AA37D9FA272CFC8F54910BFB187B09F630F614D3D51BE + CFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89EA8DF67E8 + 9CB3F23D52442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59791EA92217 + F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187B09F637F9 + 14D3D51BECFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89 + EA8DF67E89CB3F23D4E442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F + 91EA92217F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187 + B09F637F914D3D51BECFD17DF541ECA72CFC8F54910AFB187B0BF4CB3341FB8A + 67EA83D94148D1F8563965E43E2922374B6CE523BAB6B4F44037185B36D381E0 + BD5B181E0B31860D4BB592B0D05C2D2C9987BA146EBB4C35EE2431588580F55F + 974119EA174E8D7594AC2673E4B98ABCE9419FB9F45ED0695008CB3E8AC8F558 + 7C97D14F10E816D3E316B5DC874D10CA1D371B08258B7D45698A203BA16DC46D + 1D02FD0002D3B75B659DD925148F18606B06C12A220F69185EE8B5799E724889 + DE6CAD9F3DD519A8D2C0BC9E4FA2B3DD1B5DD42FC1A688F50BA34713B2A584C8 + 38265694FA54070CB3E8B7B6DD3D1C6465814B853443A05FB6C6D1D02CDBC52D + B163214123068A82389A30D0B31D10E5C617A81845CE959293CB27834373B636 + 7CE5B95AB8F4F47CF9E41F25312D057CECDAB661ACB20B099171469A86D31C40 + 7742D9B606B5B8017B8002FAA89DD29BCB32960D05E2DC276918CA8AD4E990F9 + 09E4FA2B1DCC6BBA85F834F1792DBA35F652B088B82641A834D318412C0A4741 + 6A8E103BA16DDB0B1BD02FD800285DAEB2DEECCA8A479C31060C00BD51169B79 + 24130111601F303C97DC0F24440303C826079044401111004444011110044440 + 1111004444011110044440111100444401111004444011110044440111100444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111004444011110044440111101FFD9} + Stretch = True + end + object Label3: TLabel + Left = 272 + Top = 144 + Width = 50 + Height = 16 + Caption = 'Usuario:' + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + end + object Label4: TLabel + Left = 272 + Top = 176 + Width = 63 + Height = 16 + Caption = 'Password:' + end + object Edit1: TEdit + Left = 344 + Top = 136 + Width = 145 + Height = 24 + TabOrder = 0 + OnKeyUp = Edit1KeyUp + end + object Edit2: TEdit + Left = 344 + Top = 168 + Width = 145 + Height = 24 + PasswordChar = ' ' + TabOrder = 1 + OnKeyUp = Edit2KeyUp + end + object TbAccess: TTable + Active = True + DatabaseName = 'TpvWin' + TableName = 'AccessControl.db' + Left = 464 + Top = 32 + end +end diff --git a/TpvSelectActiveUser.h b/TpvSelectActiveUser.h new file mode 100644 index 0000000..6f6dab4 --- /dev/null +++ b/TpvSelectActiveUser.h @@ -0,0 +1,43 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvSelectActiveUserH +#define TpvSelectActiveUserH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TChangeUserName : public TForm +{ +__published: // IDE-managed Components + TLabel *Label1; + TImage *Image2; + TLabel *Label2; + TImage *Image3; + TBevel *Bevel1; + TLabel *Label3; + TBevel *Bevel2; + TEdit *Edit1; + TLabel *Label4; + TEdit *Edit2; + TTable *TbAccess; + void __fastcall Edit2KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall Edit1KeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); +private: // User declarations + +public: // User declarations + bool TablaDeAcceso[10][10]; + __fastcall TChangeUserName(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TChangeUserName *ChangeUserName; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvStockActual1.cpp b/TpvStockActual1.cpp new file mode 100644 index 0000000..41e7de8 --- /dev/null +++ b/TpvStockActual1.cpp @@ -0,0 +1,456 @@ +//--------------------------------------------------------------------------- +#include +#include + +#pragma hdrstop + +#include "TpvStockActual1.h" +#include "TDlgBuscar.h" +#include "TpvStockQR.h" +//--------------------------------------------------------------------------- +#pragma link "Grids" +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TStockActual *StockActual; +//--------------------------------------------------------------------------- +__fastcall TStockActual::TStockActual(TComponent* Owner) + : TForm(Owner) +{ + TbProductos -> Active = true; + TbSeguimiento -> Active = true; + // Cargar el dialogo, buscar Productos + TDlgBuscar *DlgBuscar; + DlgBuscar = new TDlgBuscar(this); + DlgBuscar -> TbBusquedas -> TableName = "Tb_Ref"; + DlgBuscar -> TbBusquedas -> Active = true; +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::DBGrid1DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) +{ + // Etiquetas + if ( TbProductosEsNodo -> Value == -1 || + ( TbProductos -> FieldByName("I.V.A") -> AsInteger == 100 && + TbProductos -> FieldByName("Precio Costo") -> AsFloat == 0 ) ) + { + DBGrid1 -> Canvas -> Brush -> Color = clRed; + DBGrid1 -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } else { + // Stock bajo mínimos + if ( TbProductos -> FieldByName("Stock Actual")->AsInteger < TbProductos -> FieldByName("StockMinimo")->AsInteger ) + { + DBGrid1->Canvas -> Font -> Color = clRed; + DBGrid1->DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::BuscarFichaClick(TObject *Sender) +{ + Indices -> Selected = Indices -> Items -> GetFirstNode(); + TbProductos->Filtered = false; + if ( DlgBuscar->Buscar( NEW, TbProductos ) ) + { + BusqSig -> Enabled = true; + BusqAnt -> Enabled = true; + } +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::BusqAntClick(TObject *Sender) +{ + if ( DlgBuscar->Buscar( PRIOR, TbProductos ) ) + BusqSig -> Enabled = true; + else + BusqAnt -> Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::BusqSigClick(TObject *Sender) +{ + if ( DlgBuscar->Buscar( NEXT, TbProductos ) ) + BusqAnt -> Enabled = true; + else + BusqSig -> Enabled = false; +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::DataSource1DataChange(TObject *Sender, + TField *Field) +{ + char BarraEstado[80]; + + // Indicador de FichaActual / Num.Fichas + if ( DataSource1 -> DataSet -> RecNo > 0 ) + sprintf( BarraEstado, "%d / %d", DataSource1 -> DataSet -> RecNo, DataSource1 -> DataSet -> RecordCount ); + else + sprintf( BarraEstado, "¿Nuevo? / %d", DataSource1 -> DataSet -> RecordCount ); + + StatusBar1->Panels->Items[1]->Text = BarraEstado; + + if ( PageControl1->ActivePage == TabSheet2 ) + DBChart1->RefreshData(); + PaintBox1Paint( Sender ); +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::BackMainClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::PaintBox1Paint(TObject *Sender) +{ + // Dibujamos una barra donde representamos el coste frente al beneficio + TRect Rect; + Rect.Left = 0; + Rect.Right = PaintBox1 -> Width; + Rect.Top = 0; + Rect.Bottom = PaintBox1 -> Height; + + // Si el Beneficio es negativo, todo es perdida + if ( TbProductosBeneficioStock -> Value > 0 ) + { + // Lo pintamos todo de VERDE == BENEFICIO + PaintBox1 -> Canvas -> Brush -> Color = clGreen; + PaintBox1 -> Canvas -> FillRect( Rect ); + + // Ancho de la franja de COSTES == ROJO + Rect.Right = (int)(( PaintBox1 -> Width * TbProductos -> FieldByName("Precio Costo") -> AsCurrency ) / TbProductos -> FieldByName("Precio Venta 1") -> AsCurrency); + PaintBox1 -> Canvas -> Brush -> Color = clRed; + PaintBox1 -> Canvas -> FillRect( Rect ); + } else { + // Lo pintamos todo de ROJO == COSTES + PaintBox1 -> Canvas -> Brush -> Color = clRed; + PaintBox1 -> Canvas -> FillRect( Rect ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::DBGrid1KeyPress(TObject *Sender, char &Key) +{ + switch( Key ) + { + case VK_RETURN: + if ( TbProductos->State == dsEdit || TbProductos->State == dsInsert ) + TbProductos->Post(); + Key = 0; + if ( DBGrid1 -> Fields[DBGrid1 -> SelectedField -> Index] == NULL ) + { + DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; + } else + DBGrid1 -> SelectedField = DBGrid1 -> Fields[DBGrid1 -> SelectedField -> Index]; + break; + } +} +//--------------------------------------------------------------------------- +void __fastcall TStockActual::FormClose(TObject *Sender, + TCloseAction &Action) +{ + // Destruimos el dialogo de busquedas... + delete DlgBuscar; +} +//--------------------------------------------------------------------------- + + +void __fastcall TStockActual::RegAntClick(TObject *Sender) +{ + TbProductos -> Prior(); +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::RegSigClick(TObject *Sender) +{ + TbProductos -> Next(); +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::TbProductosAfterOpen(TDataSet *DataSet) +{ + TTreeNode * NuevoNodo; + union + { + int Familia; // 0x01020304 + char Fam[4]; // 0 1 2 3 + } FamC; + + int N, MascaraComp; + + // Deshabilitamos los controles... + TbProductos -> DisableControls(); + + // Reconstrucción del arbol... + TbProductos -> First(); + while ( ! TbProductos -> Eof ) + { + // Si es parte del arbol... + if ( TbProductosEsNodo -> Value == -1 ) + { + FamC . Familia = TbProductos -> FieldByName("Familia") -> AsInteger; + + // Si es raiz, lo creamos directamente + if ( FamC . Fam[3-1] != 0 ) + { + // De lo contrario, buscamos su posición NATURAL dentro del arbol. + ////////////////////////////////////////////////////////////////// + // Contruimos la mascara de comparación... + if ( FamC . Fam[3-2] == 0 ) + MascaraComp = FamC . Familia & 0xFF000000; + else + if ( FamC . Fam[3-3] == 0 ) + MascaraComp = FamC . Familia & 0xFFFF0000; + else + MascaraComp = FamC . Familia & 0xFFFFFF00; + N = 2; + while ( N < Indices -> Items -> Count ) + { + if ( ((int *)Indices -> Items -> Item[N] -> Data ) [0] == MascaraComp ) + { + // Añadimos un nuevo nodo al primer nivel en que nos quedamos + NuevoNodo = Indices->Items->AddChild( Indices -> Items -> Item[N], TbProductos -> FieldByName("Nombre del Producto") -> Value ); + NuevoNodo -> Data = new int [3]; + + ((int *)NuevoNodo -> Data)[0] = FamC . Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + ((int *)NuevoNodo -> Data)[2] = TbProductos -> FieldByName("ForcedIndex") -> AsInteger; + + + break; + } else + N++; + } + } else { + // Añadimos un nuevo nodo al primer nivel en que nos quedamos + NuevoNodo = Indices->Items->Add( Indices -> Items -> Item[0], TbProductos -> FieldByName("Nombre del Producto") -> Value ); + NuevoNodo -> Data = new int [3]; + + ((int *)NuevoNodo -> Data)[0] = FamC . Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + ((int *)NuevoNodo -> Data)[2] = TbProductos -> FieldByName("ForcedIndex") -> AsInteger; + + } + + } + // Avanzamos al siguiente registro + TbProductos -> Next(); + } + + + N = 2; + while ( N < Indices -> Items -> Count ) + { + // Establecemos las imágenes (Por defecto es documento final) + if ( Indices -> Items -> Item[N] -> HasChildren ) + { + Indices -> Items -> Item[N]->ImageIndex = 0; + Indices -> Items -> Item[N]->SelectedIndex = 0; + } else { + Indices -> Items -> Item[N]->ImageIndex = 2; + Indices -> Items -> Item[N]->SelectedIndex = 2; + } + N++; + } + + + ///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// + // ATENCIÖN, LA SIGUIENTE LINEA ES POR UN BUG DETECTADO EN EL TREEVIEW // + ///////////////////////////////////////////////////////////////////////// + NuevoNodo = Indices->Items->AddChild( Indices -> Items -> Item[0], "Bug TTreeView 1.1 Fixed" ); + Indices -> Items -> Delete( NuevoNodo ); + ///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// + + Indices -> Selected = Indices -> Items -> Item[1]; +// Indices -> Items -> Item[0] -> Selected = true; + + // Rehabilitamos los controles... + TbProductos -> EnableControls(); + +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::IndicesExpanding(TObject *Sender, + TTreeNode *Node, bool &AllowExpansion) +{ + // Si el nodo es padre + if ( Node -> HasChildren ) + { + // Usamos las imágenes de los libros abiertos + Node->ImageIndex = 1; + Node->SelectedIndex = 1; + } else { + // Usamos las imágenes de los documentos + Node->ImageIndex = 2; + Node->SelectedIndex = 2; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::IndicesCollapsing(TObject *Sender, + TTreeNode *Node, bool &AllowCollapse) +{ + // Si el nodo es padre + if ( Node -> HasChildren ) + { + // Restauramos las imágenes originales + Node->ImageIndex = 0; + Node->SelectedIndex = 0; + } else { + // Un nodo no padre NO puede ser CONTRAIDO + // Usamos las imágenes de los documentos + Node->ImageIndex = 2; + Node->SelectedIndex = 2; + } + +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::IndicesChange(TObject *Sender, + TTreeNode *Node) +{ + union + { + long Familia; + char Fam[4]; + } FamL, FamH; + + // Reajustamos el filtro, acuerdo a la nueva familia + switch ( Indices -> Selected -> AbsoluteIndex ) + { + case 0: +// TbProductos -> Filtered = false; +// return; + if ( Indices -> Selected -> Text == "Ver Todos" ) + { + TbProductos->Filter = ""; + TbProductos -> Filtered = true;//false; + return; + } else { + FamL . Familia = 0x00000000; + FamH . Familia = 0x01000000; + } + break; + case 1: + // El filtro es para la familia 0000 + FamL . Familia = 0x00000000; + FamH . Familia = 0x01000000; + break; + default: + // Contruimos los limites del filtro ( >= AND < ) + FamL . Familia = ( (int *) Indices -> Selected -> Data ) [0]; + FamH . Familia = FamL . Familia; + if ( !FamH . Fam[3-1] ) + FamH . Fam[3-0] ++; + else + if ( !FamH . Fam[3-2] ) + FamH . Fam[3-1] ++; + else + if ( !FamH . Fam[3-3] ) + FamH . Fam[3-2] ++; + else + FamH . Fam[3-3] ++; + break; + }; + + // Filtramos según los rangos construidos antes... + TbProductos->FilterOptions = TbProductos->FilterOptions << foCaseInsensitive; + TbProductos->Filter = "([Familia] >= '" + AnsiString( (int)( FamL . Familia ) ) + "' AND [Familia] < '" + AnsiString( (int)( FamH . Familia ) ) + "')"; + TbProductos -> Filtered = true; + + //************************************************************************ + // BEGIN -- Suma Stock-TOTAL + //************************************************************************ + Currency ValorStock, BeneficioStock; + Currency StockCant; AnsiString Buffer; + + // recorremos toda la base de datos, para estimar el valor total + // del stock y su benefico aproximado... + ValorStock = 0; BeneficioStock = 0; + TbProductos -> First(); + while ( ! TbProductos -> Eof ) + { + StockCant = Currency( TbProductos -> FieldByName("Stock Actual") -> AsFloat * TbProductos -> FieldByName("CantUnitaria") -> AsFloat ); + ValorStock += StockCant * TbProductos -> FieldByName("Precio Costo") -> AsCurrency ; + BeneficioStock += StockCant * TbProductos -> FieldByName("Precio Venta 1") -> AsCurrency ; + TbProductos -> Next(); + } + BeneficioStock -= ValorStock; + Buffer = "Valor total: " + FormatCurr("###,###,###.#0", ValorStock );//CurrToStrF(ValorStock, 4, 2); + Label2 -> Caption = Buffer.c_str(); + Buffer = "Beneficio aprox.: " + FormatCurr("###,###,###.#0", BeneficioStock );//CurrToStrF(BeneficioStock, 4, 2); + Label3 -> Caption = Buffer.c_str(); + TbProductos -> First(); + //************************************************************************ + // END -- Suma Stock-TOTAL + //************************************************************************ +} +//--------------------------------------------------------------------------- + + + +void __fastcall TStockActual::TabSheet2Show(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "El seguimiento estadístico de productos\n no esta incluido en esta versión."); + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#endif + DBChart1->RefreshData(); +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::BajoMinimosClick(TObject *Sender) +{ + IndicesChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::TbProductosFilterRecord(TDataSet *DataSet, + bool &Accept) +{ + if ( BajoMinimos->Checked ) + Accept = (DataSet->FieldByName("Stock Actual")->AsInteger <= DataSet->FieldByName("StockMinimo")->AsInteger); + else + Accept = 1; +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::TbProductosBeforeInsert(TDataSet *DataSet) +{ + ShowMessage( "No esta autorizado a insertar nuevos registros.\nAl menos en este módulo del programa."); + Abort(); +} +//--------------------------------------------------------------------------- + +void __fastcall TStockActual::ImprimirStockClick(TObject *Sender) +{ + // Debemos distinguir entre: NORMAL / MINIMOS + TStockQR *StockQR; + Visible = false; + StockQR = new TStockQR(this); +#ifdef DEBUG + StockQR -> QuickRep1 -> Preview(); +#else + StockQR -> QuickRep1 -> Print(); +#endif + + Visible = true; + delete StockQR; + + +} +//--------------------------------------------------------------------------- + + +void __fastcall TStockActual::TbProductosCalcFields(TDataSet *DataSet) +{ + // Valor Stock + TbProductos->FieldByName("ValorStock")->AsCurrency = TbProductos->FieldByName("Stock Actual")->AsFloat * TbProductos->FieldByName("Precio Costo")->AsCurrency; + // Beneficio Stock + TbProductosBeneficioStock->AsCurrency = ( TbProductos->FieldByName("Precio Venta 1")->AsCurrency - TbProductos->FieldByName("Precio Costo")->AsCurrency ) * TbProductos->FieldByName("Stock Actual")->AsFloat; +} +//--------------------------------------------------------------------------- + + +void __fastcall TStockActual::FormResize(TObject *Sender) +{ +// BajoMinimos->Left = PageControl1->Width - 105; +} +//--------------------------------------------------------------------------- + + diff --git a/TpvStockActual1.dfm b/TpvStockActual1.dfm new file mode 100644 index 0000000..36370cc Binary files /dev/null and b/TpvStockActual1.dfm differ diff --git a/TpvStockActual1.h b/TpvStockActual1.h new file mode 100644 index 0000000..5030f70 --- /dev/null +++ b/TpvStockActual1.h @@ -0,0 +1,128 @@ +//--------------------------------------------------------------------------- +#ifndef TpvStockActual1H +#define TpvStockActual1H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include "Grids.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" +#include +#include +#include +//--------------------------------------------------------------------------- +class TStockActual : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TDBGrid *DBGrid1; + TDataSource *DataSource1; + TTable *TbProductos; + TIntegerField *TbProductosCdigodeBarras; + TStringField *TbProductosIDProducto; + TStringField *TbProductosNombredelProducto; + TCurrencyField *TbProductosPrecioCosto; + TFloatField *TbProductosIVA; + TCurrencyField *TbProductosPrecioVenta1; + TCurrencyField *TbProductosPrecioVenta2; + TCurrencyField *TbProductosPrecioVenta3; + TCurrencyField *TbProductosPrecioVenta4; + TCurrencyField *TbProductosPrecioVenta5; + TBooleanField *TbProductosCOMBINADO; + TStringField *TbProductosLocalizacion; + TSmallintField *TbProductosEnviarA; + TCurrencyField *TbProductosValorStock; + TCurrencyField *TbProductosBeneficioStock; + TPanel *Panel2; + TSpeedButton *CloseForm; + TSpeedButton *btnBuscar; + TSpeedButton *BusqSig; + TSpeedButton *RegAnt; + TSpeedButton *BusqAnt; + TSpeedButton *RegSig; + TSplitter *Splitter1; + TSplitter *Splitter2; + TTreeView *Indices; + TImageList *ImageList1; + TAutoIncField *TbProductosForcedIndex; + TIntegerField *TbProductosFamilia; + TIntegerField *TbProductosFamilia2; + TSmallintField *TbProductosEsNodo; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TScrollBox *ScrollBox1; + TLabel *Label2; + TLabel *Label3; + TPaintBox *PaintBox1; + TLabel *Label1; + TDBEdit *DBEdit1; + TElasticForm *ElasticForm1; + TSpeedButton *ImprimirStock; + TFloatField *TbProductosStockActual; + TFloatField *TbProductosCantUnitaria; + TIntegerField *TbProductosStockMinimo; + TTable *TbSeguimiento; + TDBChart *DBChart1; + TLineSeries *Series1; + TLineSeries *Series2; + TIntegerField *TbSeguimientoCodProd; + TDateField *TbSeguimientoFecha; + TCurrencyField *TbSeguimientoPrecioVenta; + TCurrencyField *TbSeguimientoPrecioCosto; + TCurrencyField *TbSeguimientoPCreal; + TCheckBox *BajoMinimos; + void __fastcall DBGrid1DrawColumnCell(TObject *Sender, const TRect &Rect, + int DataCol, TColumn *Column, TGridDrawState State); + void __fastcall BuscarFichaClick(TObject *Sender); + void __fastcall BusqAntClick(TObject *Sender); + void __fastcall BusqSigClick(TObject *Sender); + + void __fastcall DataSource1DataChange(TObject *Sender, TField *Field); + void __fastcall BackMainClick(TObject *Sender); + void __fastcall PaintBox1Paint(TObject *Sender); + + void __fastcall DBGrid1KeyPress(TObject *Sender, char &Key); + + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall RegAntClick(TObject *Sender); + void __fastcall RegSigClick(TObject *Sender); + void __fastcall TbProductosAfterOpen(TDataSet *DataSet); + void __fastcall IndicesExpanding(TObject *Sender, TTreeNode *Node, + bool &AllowExpansion); + void __fastcall IndicesCollapsing(TObject *Sender, TTreeNode *Node, + bool &AllowCollapse); + void __fastcall IndicesChange(TObject *Sender, TTreeNode *Node); + + void __fastcall TabSheet2Show(TObject *Sender); + void __fastcall BajoMinimosClick(TObject *Sender); + void __fastcall TbProductosFilterRecord(TDataSet *DataSet, + bool &Accept); + void __fastcall TbProductosBeforeInsert(TDataSet *DataSet); + void __fastcall ImprimirStockClick(TObject *Sender); + + void __fastcall TbProductosCalcFields(TDataSet *DataSet); + void __fastcall FormResize(TObject *Sender); + +private: // User declarations +public: // User declarations + __fastcall TStockActual(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern TStockActual *StockActual; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/TpvStockQR.cpp b/TpvStockQR.cpp new file mode 100644 index 0000000..3c2c51a --- /dev/null +++ b/TpvStockQR.cpp @@ -0,0 +1,69 @@ +//---------------------------------------------------------------------------- +#include +#pragma hdrstop + +#ifdef EXIST_CFG +#include "TpvCFG.h" +#endif + +#include "TpvStockQR.h" +//---------------------------------------------------------------------------- +#pragma resource "*.dfm" +TStockQR *StockQR; +//---------------------------------------------------------------------------- +__fastcall TStockQR::TStockQR(TComponent* Owner) + : TForm(Owner) +{ + OldCodFamilia = -1; +} +//---------------------------------------------------------------------------- +void __fastcall TStockQR::DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + + if ( OldCodFamilia != Table1 -> FieldByName( "Familia" ) -> AsInteger && Table1 -> FieldByName( "Familia" ) -> AsInteger != 0 ) + { + // COMIENZO DE UNA NUEVA FAMILA... + PrintBand = false; + return; + } +// OldCodFamilia = Table1 -> FieldByName( "Familia" ) -> AsInteger; + +try { + if ( Table1 -> FieldByName( "Seguimiento" ) -> AsBoolean ) + QRImage2 -> Picture -> LoadFromFile( "systm\\ON.BMP" ); + else +#ifdef EXIST_CFG + if ( CFG->StockQR_LEDS->Checked ) + QRImage2 -> Picture -> LoadFromFile( "systm\\OFF.BMP" ); +#else + QRImage2 -> Picture -> Graphic = 0; +#endif + + if ( Table1 -> FieldByName( "COMBINADO" ) -> AsBoolean ) + QRImage1 -> Picture -> LoadFromFile( "systm\\ON.BMP" ); + else +#ifdef EXIST_CFG + if ( CFG->StockQR_LEDS->Checked ) + QRImage1 -> Picture -> LoadFromFile( "systm\\OFF.BMP" ); +#else + QRImage1 -> Picture -> Graphic = 0; +#endif + +} catch(...){ + // Do nothing +} +} +//--------------------------------------------------------------------------- +void __fastcall TStockQR::ChildBand2BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + if ( OldCodFamilia != Table1 -> FieldByName( "Familia" ) -> AsInteger && Table1 -> FieldByName( "Familia" ) -> AsInteger != 0 ) + // COMIENZO DE UNA NUEVA FAMILA... + PrintBand = true; + else + PrintBand = false; + OldCodFamilia = Table1 -> FieldByName( "Familia" ) -> AsInteger; +} +//--------------------------------------------------------------------------- + diff --git a/TpvStockQR.dfm b/TpvStockQR.dfm new file mode 100644 index 0000000..f21f5af Binary files /dev/null and b/TpvStockQR.dfm differ diff --git a/TpvStockQR.h b/TpvStockQR.h new file mode 100644 index 0000000..5bf4e41 --- /dev/null +++ b/TpvStockQR.h @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------------- +#ifndef TpvStockQRH +#define TpvStockQRH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TStockQR : public TForm +{ +__published: + TTable *Table1; + TQuickRep *QuickRep1; + TQRBand *TitleBand1; + TQRLabel *QRLabel1; + TQRBand *ColumnHeaderBand1; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRLabel *QRLabel7; + TQRBand *PageFooterBand1; + TQRSysData *QRSysData1; + TQRBand *QRBand2; + TQRExpr *QRExpr1; + TQRExpr *QRExpr2; + TQRExpr *QRExpr3; + TQRImage *QRImage1; + TQRImage *QRImage2; + TQRChildBand *ChildBand2; + TQRShape *QRShape3; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRLabel *QRLabel10; + TQRLabel *QRLabel11; + TQRLabel *QRLabel12; + TQRLabel *QRLabel14; + TQRLabel *QRLabel15; + TQRLabel *QRLabel16; + TQRLabel *QRLabel17; + TQRLabel *QRLabel13; + TQRLabel *QRLabel18; + TQRLabel *QRLabel19; + TQRLabel *QRLabel20; + TQRLabel *QRLabel21; + TQRExpr *QRExpr5; + TQRExpr *QRExpr6; + TQRExpr *QRExpr7; + TQRExpr *QRExpr8; + TQRExpr *QRExpr9; + void __fastcall DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall ChildBand2BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: + int OldCodFamilia; +public: + __fastcall TStockQR(TComponent* Owner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TStockQR *StockQR; +//---------------------------------------------------------------------------- +#endif \ No newline at end of file diff --git a/TpvVentas.cpp b/TpvVentas.cpp new file mode 100644 index 0000000..1b617de --- /dev/null +++ b/TpvVentas.cpp @@ -0,0 +1,1751 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#define DEBUG + +#ifdef EXIST_CFG +#include "TpvCFG.h" +#endif + +#include "TpvVentas.h" +#include "TDlgBuscar.h" +// #include "TpvVntCtbl.h" +#include "TpvVntFctPrint.h" +#include "TpvVntAlbPrint.h" + +//--------------------------------------------------------------------------- +#pragma link "Grids" +#pragma link "DigitNum" +#pragma link "LetreroDigital" +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TVentas *Ventas; +#define NUM_TERMINAL_ACTUAL 10 +#define clQREADY clLime +//--------------------------------------------------------------------------- +__fastcall TVentas::TVentas(TComponent* Owner) + : TForm(Owner) +{ + EsAlbaran = true; + TerminalActual = NUM_TERMINAL_ACTUAL; + ActualizandoTOTALES = false; + FocoRapido = true; + + LetreroDigital1 -> FuenteRAW = ExtractFilePath(Application->ExeName) + "systm\\8x8.fnt"; + + try { + BtmOK = new Graphics::TBitmap(); + BtmOK -> LoadFromFile( "Systm\\ok.bmp" ); + } catch (...) { + ShowMessage( "Error: La imagen OK! está corrupta" ); + } + + // Mostramos el dialogo, buscar [Productos] + DlgBuscarProd = new TDlgBuscar(this); + + DlgBuscarProd -> TbBusquedas -> TableName = "Tb_Ref"; + DlgBuscarProd -> TbBusquedas -> Active = true; + + TbProdCircular -> IndexFieldNames = "CodProdC"; + TbProdCircular -> MasterFields = "ForcedIndex"; + TbProdCircular -> MasterSource = DlgBuscarProd -> DsBusquedas; + TbProdCircular -> Active = true; + + TbCartera -> Active = true; + + //--------- + // Imprimir (SI/NO) + ImprimirTicket = !ImprimirTicket; PideTicketClick( 0 ); + + TbVentasC -> TableName = "Ventas (cabecera).db"; + TbVentasD -> TableName = "Ventas (cuerpo).db"; + TbVentasI -> TableName = "Ventas (caja).db"; + + TbVentasAbiertas -> TableName = TbVentasC -> TableName; + + TbInfoClt -> Active = true; // Información de los clientes + TbInfoEmpl -> Active = true; // Información de los empleados + + TbVentasI -> Active = true; // Información sobre la caja del día + TbVentasC -> Active = true; // Cabecera de la factura + TbVentasD -> Active = true; // Datos de la factura + TbVentasF -> Active = true; // Números de factura + + // Sus cálculos se basan en la existencia de las tablas "InfoClt'&'InfoEmpl" + TbVentasAbiertas -> Active = true; // Facturas pendiente de cierre + + // Preparamos e inicializamos una factura NUEVA... + NuevaFacturaCliente(); + //--------- +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::SpeedButton5Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::NuevaFacturaCliente(void) +{ + bool OneOpen = false; + + // Localizamos las fichas del Empleado por defecto... + if ( ! ( TbInfoEmpl -> Locate( "CodCliente1", 1, TLocateOptions() << loCaseInsensitive ) ) ) + { + ShowMessage( "ERROR: Vendedor Anómimo no encontrado\n-->CIERRE LA APLICACIÖN <<-" ); + Close(); + } + + // Localizamos las fichas del Cliente por defecto... + if ( ! ( TbInfoClt -> Locate( "CodCliente1", 1, TLocateOptions() << loCaseInsensitive ) ) ) + { + ShowMessage( "ERROR: Cliente Anómimo no encontrado\n-->CIERRE LA APLICACIÖN <<-" ); + Close(); + } + + TbVentasAbiertas -> Refresh(); + TbVentasAbiertas -> DisableControls(); + TbVentasAbiertas -> First(); + while ( ! TbVentasAbiertas -> Eof ) + { + if ( TbVentasAbiertas->FieldByName("TotalSin")->AsInteger == 0 && + TbVentasAbiertas->FieldByName("CodFactura")->AsInteger == 0 + ) + { + OneOpen = true; + TbVentasC->GotoCurrent( TbVentasAbiertas ); + TbVentasC->Edit(); + TbVentasC->FieldByName("FechaFactura")->AsDateTime = TDateTime::CurrentDate(); + TbVentasC->FieldByName("HoraFactura")->AsDateTime = TDateTime::CurrentTime(); + TbVentasC->Post(); + break; + } + try { + TbVentasAbiertas -> Next(); + } catch(...) { + break; + } + } + + + TbVentasAbiertas -> EnableControls(); + + if ( ! OneOpen ) + { + // Insertamos (y hacemos que sea el actual), un nuevo registro + // Cód. Factura + TbVentasC->Insert(); + TbVentasC->FieldByName("CodCliente")->AsInteger = TbInfoClt->FieldByName( "CodCliente1" )->AsInteger; + TbVentasC->FieldByName("CodEmpleado")->AsInteger = TbInfoEmpl->FieldByName( "CodCliente1" )->AsInteger; + TbVentasC->FieldByName("FechaFactura")->AsDateTime = TDateTime::CurrentDate(); + TbVentasC->FieldByName("HoraFactura")->AsDateTime = TDateTime::CurrentTime(); + TbVentasC->FieldByName("TotalSin")->AsInteger = 0; + TbVentasC->FieldByName("TotalIva")->AsInteger = 0; + TbVentasC->FieldByName("FacturaAbierta")->AsInteger = TerminalActual; + TbVentasC->FieldByName("UltimoPago")->AsDateTime = TDateTime::CurrentDate(); + TbVentasC->FieldByName("TotalFrac")->AsInteger = 0; + TbVentasC->FieldByName("FormaPago")->AsInteger = 0; + TbVentasC->FieldByName("NumeroPagos")->AsInteger = 0; + TbVentasC->FieldByName("ImprimirNotas")->AsBoolean = false; + TbVentasC->FieldByName("Contabilizada")->AsBoolean = 0; + TbVentasCCodFactura -> AsInteger = 0; + TbVentasC->Post(); + } + + // Reseteamos los totales de compra... + DigitNum1 -> Value = 0; + DigitNum2 -> Value = 0; + StatusBar1->Panels->Items[2]->Text = ""; + + + TbVentasAbiertas -> Refresh(); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasCNewRecord(TDataSet *DataSet) +{ + // Fecha / Hora Factura + TbVentasCFormaPago->AsInteger = 0; + + TbVentasCUltimoPago -> AsDateTime = TDateTime::CurrentDate(); + TbVentasCFechaAlbaran -> AsDateTime = TDateTime::CurrentDate(); + TbVentasCFechaFactura -> AsDateTime = TDateTime::CurrentDate(); + TbVentasCHoraFactura -> AsDateTime = TDateTime::CurrentTime(); + // Terminal que abrió la cuenta... + TbVentasCFacturaAbierta -> AsInteger = TerminalActual; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::BusqClienteClick(TObject *Sender) +{ + // Mostramos la zona de busqueda de clientes... + // Mostramos el dialogo, buscar Vendedores + TDlgBuscar *DlgBuscar; + + DlgBuscar = new TDlgBuscar(this); + DlgBuscar -> DefaultField = "Nombre"; + DlgBuscar -> TbBusquedas -> TableName = TbInfoClt -> TableName; + DlgBuscar -> TbBusquedas -> Active = true; + + DlgBuscar -> ShowModal(); + + if ( DlgBuscar -> ModalResult == mrOk ) + { + TbVentasC -> Edit(); + TbVentasCCodCliente -> AsInteger = DlgBuscar -> TbBusquedas -> FieldByName( "CodCliente1" ) -> AsInteger; + + TbVentasC->FieldByName("Banco_Entidad" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_Entidad" )->Value; + TbVentasC->FieldByName("Banco_Sucursal" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_Sucursal" )->Value; + TbVentasC->FieldByName("Banco_DC" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_DC" )->Value; + TbVentasC->FieldByName("Banco_NumCuenta" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_NumCuenta" )->Value; + + TbVentasC -> Post(); + } + + delete DlgBuscar; + + // Levamos el foco a donde debe... + if ( FocoRapido ) + QCodigo->SetFocus(); + else + DBGrid1->SetFocus(); + +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::BusqVendedorClick(TObject *Sender) +{ + // Mostramos el dialogo, buscar Vendedores + TDlgBuscar *DlgBuscar; + + DlgBuscar = new TDlgBuscar(this); + + DlgBuscar -> Filter = "[Empleado] >= 1"; + DlgBuscar -> DefaultField = "Nombre"; + DlgBuscar -> TbBusquedas -> TableName = TbInfoEmpl -> TableName; + DlgBuscar -> TbBusquedas -> Active = true; + + DlgBuscar -> ShowModal(); + + if ( DlgBuscar -> ModalResult == mrOk ) + { + TbVentasC -> Edit(); + TbVentasCCodEmpleado -> AsInteger = DlgBuscar -> TbBusquedas -> FieldByName( "CodCliente1" ) -> AsInteger; + TbVentasC -> Post(); + // Y sincronizamos las bases de datos +// TbInfoEmpl -> GotoCurrent( DlgBuscar -> TbBusquedas ); + } + + delete DlgBuscar; + + // Levamos el foco a donde debe... + if ( FocoRapido ) + QCodigo->SetFocus(); + else + DBGrid1->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasDCalcFields(TDataSet *DataSet) +{ + Currency Cdto; + + Cdto = TbVentasDPrecioC -> AsCurrency * TbVentasDCantidad -> AsFloat; + Cdto = Cdto * ( 1 - ( TbVentasD->FieldByName("Dto")->AsCurrency / 100 ) ); + TbVentasDSubTotal -> AsCurrency = Cdto; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasAbiertasCalcFields(TDataSet *DataSet) +{ + + Set flags; + flags << loCaseInsensitive; + + // 1º Obtenemos el Nombre del Cliente + if ( TbInfoClt -> Locate( "CodCliente1", TbVentasAbiertasCodCliente->AsInteger, flags ) ) + TbVentasAbiertasNombreCliente -> AsString = TbInfoClt -> FieldByName( "Nombre" ) -> AsString + ", " + TbInfoClt -> FieldByName( "Apellidos" ) -> AsString; + else + TbVentasAbiertasNombreCliente -> AsString = "No Encontrado: " + TbVentasCCodCliente -> AsString; + + // 2º Obtenemos el Nombre del Vendedor + if ( TbInfoEmpl -> Locate( "CodCliente1", TbVentasAbiertasCodEmpleado -> Value, flags ) ) + TbVentasAbiertasNombreVendedor -> AsString = TbInfoEmpl -> FieldByName( "Nombre" ) -> AsString + ", " + TbInfoEmpl -> FieldByName( "Apellidos" ) -> AsString; + else + TbVentasAbiertasNombreVendedor -> AsString = "No Encontrado: " + TbVentasCCodEmpleado -> AsString; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::bFicharTicketClick(TObject *Sender) +{ + if ( TbVentasD -> RecordCount > 0 ) + { + FicharTicket(); + TbVentasI -> Edit(); + TbVentasI -> FieldByName( "Tickets" ) -> AsInteger ++; + TbVentasI -> Post(); + } else { + TbVentasI -> Edit(); + TbVentasI -> FieldByName( "Cambios" ) -> AsInteger ++; + TbVentasI -> Post(); + EfectuarCambio(); + } + + #ifdef EXIST_CFG + if ( CFG->CajonMonedas->Checked ) + CFG->AbrirCajon(); + #endif + + // Levamos el foco a donde debe... + if ( FocoRapido ) + QCodigo->SetFocus(); + else + DBGrid1->SetFocus(); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::EfectuarCambio(void) +{ + // Nothing... +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::AsignarNumFactura(void) +{ + int NumFactura = 0; + + #ifdef EXIST_CFG + try { + NumFactura = CFG->SigFactura->Text.ToInt(); + } catch(...) { + // continuamos + NumFactura = 0; + } + #endif + + if ( NumFactura <= 0 ) + { + TbVentasF->Last(); + NumFactura = TbVentasF->FieldByName( "idF" )->AsInteger + 1; + } + #ifdef EXIST_CFG + else + CFG->SigFactura->Text = "0"; + #endif + + TbVentasF->InsertRecord( ARRAYOFCONST( ( NumFactura, TbVentasC->FieldByName( "EnlaceFactura" )->AsInteger, true ) ) ); + + TbVentasC -> Edit(); + TbVentasC -> FieldByName( "CodFactura" ) -> AsInteger = NumFactura; + TbVentasC -> FieldByName("Contabilizada")->AsBoolean = true; + TbVentasCFechaFactura -> AsDateTime = TDateTime::CurrentDate(); + TbVentasC -> Post(); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::FicharTicket(void) +{ + TbVentasC -> Edit(); + TbVentasC -> FieldByName( "FacturaAbierta" ) -> AsInteger = 0; + TbVentasC -> Post(); + + EsAlbaran = false; + #ifdef EXIST_CFG + switch ( CFG->alFacturar->ItemIndex ) + { + // 0 ...siempre + case 0: + AsignarNumFactura(); + break; + // 1 ...solo a clientes + case 1: + if ( TbVentasC->FieldByName( "CodCliente" )->AsInteger > 1 ) + AsignarNumFactura(); + else + EsAlbaran = true; + break; + // 2 ...a clientes y preguntar otros + case 2: + if ( TbVentasC->FieldByName( "CodCliente" )->AsInteger > 1 ) + { + AsignarNumFactura(); + } else { + if ( MessageDlg( "¿Facturar, ahora?", mtConfirmation, TMsgDlgButtons() << mbNo << mbYes, 0 ) == mrYes ) + { + AsignarNumFactura(); + } else { + EsAlbaran = true; + } + } + break; + // 3 ...preguntar siempre + case 3: + if ( MessageDlg( "¿Facturar, ahora?", mtConfirmation, TMsgDlgButtons() << mbNo << mbYes, 0 ) == mrYes ) + { + AsignarNumFactura(); + } else { + EsAlbaran = true; + } + break; + // 4 ...nunca + case 4: + EsAlbaran = true; + break; + } + #else + if ( TbVentasC->FieldByName( "CodCliente" )->AsInteger > 1 ) + AsignarNumFactura(); + #endif + + TbVentasC->FlushBuffers(); + TbVentasD->FlushBuffers(); + // Muestra cuadro Entregado/Cambio + //**** ***************(##########); + + // Imprime Factura / Ticket + //**** ***************(##########); + if ( ImprimirTicket ) + SpeedButton11Click( 0 ); + + NuevaFacturaCliente(); + TbVentasAbiertas -> Refresh(); + DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TabSheet4Enter(TObject *Sender) +{ + // Refrescamos el listado de cuentas abiertas... + TbVentasAbiertas -> Refresh(); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::FormClose(TObject *Sender, TCloseAction &Action) +{ + // Destruimos la imagen de OK! + delete BtmOK; + +try { + // Si no hay productos en la factura... La eliminamos... + if ( TbVentasD -> RecordCount == 0 && ( TbVentasC -> State == dsInsert || TbVentasC -> State == dsEdit ) ) + TbVentasC -> Delete(); + + if ( TbVentasD->State == dsEdit || TbVentasD->State == dsInsert ) + TbVentasD->Post(); + if ( TbVentasC->State == dsEdit || TbVentasC->State == dsInsert ) + TbVentasC->Post(); + if ( TbVentasI->State == dsEdit || TbVentasI->State == dsInsert ) + TbVentasI->Post(); +} catch(...) { + ShowMessage( "Error Eliminando factura vacia.\nVentas Cierre" ); +} + +try { + TbVentasI -> Edit(); + TbVentasI -> FieldByName( "Fin" ) -> AsDateTime = TDateTime::CurrentTime(); + #ifdef _COMPLETO + TbVentasI -> FieldByName( "ExitoSalir" ) -> AsInteger++; + #else + TbVentasI -> FieldByName( "IntentosSalir" ) -> AsInteger++; + #endif + TbVentasI -> Post(); +} catch(...) { + ShowMessage( "Error altamente grave.\nVentas Cierre" ); +} + // Eliminamos el dialogo, buscar [Productos] + delete DlgBuscarProd; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasDCodProductoSetText(TField *Sender, + const AnsiString Text) +{ + // ## Cambiado 09/08/01 + // AnsiString oldCodProducto; + int oldCodProducto; + Currency TParcial; + bool Localizado = true; + + // ## Cambiado 09/08/01 + // oldCodProducto = Sender -> AsString; + oldCodProducto = TbVentasD->FieldByName( "CodProductoAux" )->AsInteger; + + TParcial = TbVentasDPrecioC -> AsCurrency * Currency( ( TbVentasDCantidad -> AsFloat ) ); + TParcial = TParcial * (1 - ( TbVentasD -> FieldByName( "Dto" ) -> AsCurrency / 100 ) ); + SUMAcompraC -= TParcial; + if ( ! TbVentasD -> FieldByName( "IVA" ) -> IsNull ) + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbVentasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + Sender -> AsString = Text; + // Localizacion del producto + DlgBuscarProd -> TbBusquedas -> Filtered = false; + if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", Text, TLocateOptions() << loCaseInsensitive ) ) + { +/***********************\ */ + + TbVentasD->FieldByName( "CodProductoAux" )->AsInteger = DlgBuscarProd -> TbBusquedas -> FieldByName( "ForcedIndex" ) -> AsInteger; + TbVentasD->FieldByName( "NombreProducto" )->AsString = DlgBuscarProd -> TbBusquedas -> FieldByName( "Nombre del Producto" ) -> AsString; + TbVentasD->FieldByName( "IVA" )->AsCurrency = DlgBuscarProd->TbBusquedas->FieldByName( "I.V.A" )->AsCurrency; +/***********************\ */ + TbVentasDPrecioC -> AsCurrency = GetPrecioVenta( DlgBuscarProd -> TbBusquedas ); + + if ( oldCodProducto != TbVentasD->FieldByName( "CodProductoAux" )->AsInteger ) + { + ActualizaStock( oldCodProducto, + +1 * TbVentasD -> FieldByName( "Cantidad" ) -> AsFloat ); + + ActualizaStock( TbVentasD->FieldByName( "CodProductoAux" )->AsInteger, + -1 * TbVentasD -> FieldByName( "Cantidad" ) -> AsFloat ); + } + } else { + Localizado = false; + TbVentasD -> FieldByName( "CodProductoAux" ) -> AsInteger = 0; + TbVentasD -> FieldByName( "NombreProducto" ) -> AsString = "[##SU PRODUCTO##]"; + } + + + if ( TbVentasDCantidad -> AsFloat <= 0 ) + TbVentasDCantidad -> AsFloat = 1; + + ActualizaTotales(); + + #ifdef EXIST_CFG + if ( !CFG->Codigo_y_Unidad->Checked ) + { + #endif + if ( Localizado ) + { + DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; + TbVentasD -> Next(); + if ( TbVentasD -> Eof ) + { + TbVentasD -> Append(); + } + } + #ifdef EXIST_CFG + } + #endif +} +//--------------------------------------------------------------------------- +Currency __fastcall TVentas::GetPrecioVenta( TTable *Sender ) +{ + Currency dev; + + dev = Sender -> FieldByName( "Precio Venta 1" ) -> AsCurrency; + + return dev; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasDCantidadSetText(TField *Sender, + const AnsiString Text) +{ + Currency TParcial; + // ## Cambiado 09/08/01 + // ActualizaStock( TbVentasDCodProducto -> AsString, + ActualizaStock( TbVentasDCodProductoAux -> AsInteger, + +1 * TbVentasDCantidad -> AsFloat ); + + TParcial = TbVentasDPrecioC -> AsCurrency * Currency( (int)( Sender -> AsInteger ) ); + TParcial = TParcial * (1 - ( TbVentasD -> FieldByName( "Dto" ) -> AsCurrency / 100 ) ); + SUMAcompraC -= TParcial; + if ( ! TbVentasD -> FieldByName( "IVA" ) -> IsNull ) + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbVentasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + try { + Sender -> AsFloat = Text.ToDouble(); + } catch(...) { + Sender->AsFloat = 1; + } + + ActualizaTotales(); + + // ## Cambiado 09/08/01 + // ActualizaStock( TbVentasDCodProducto -> AsString, + ActualizaStock( TbVentasDCodProductoAux -> AsInteger, + -1 * TbVentasDCantidad -> AsFloat ); + +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::DBGrid1ColExit(TObject *Sender) +{ + if ( TbVentasD -> State == dsEdit ) + try { + TbVentasD -> Post(); + }catch(...){ + // Do nothing + } +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasDBeforeDelete(TDataSet *DataSet) +{ + // No nos olvidemos de anular todo esto (Y del STOCK) + // ## Cambiado 09/08/01 + // ActualizaStock( TbVentasD -> FieldByName( "CodProducto" ) -> AsString, + ActualizaStock( TbVentasD -> FieldByName( "CodProductoAux" ) -> AsInteger, + +1 * TbVentasD -> FieldByName( "Cantidad" ) -> AsFloat ); + + Currency TParcial; + TParcial = TbVentasDPrecioC -> AsCurrency * Currency( ( TbVentasDCantidad -> AsFloat ) ); + TParcial = TParcial * (1 - ( TbVentasDDto->AsFloat / 100 ) ); + SUMAcompraC -= TParcial; + if ( ! TbVentasDIVA->IsNull ) + IVAcompraC -= TParcial * ( TbVentasDIVA->AsCurrency / 100 ); + + + ActualizandoTOTALES = true; + TbVentasC -> Edit(); + TbVentasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbVentasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbVentasC -> Post(); + ActualizandoTOTALES = false; + + int Number = (int)( ( SUMAcompraC + IVAcompraC ) * 100); + DigitNum1 -> Value = Number / 100; + DigitNum2 -> Value = Number % 100; + StatusBar1->Panels->Items[2]->Text = FormatCurr("###,###,###.#0 €", Number/16638.6 ); + +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasDNombreProductoSetText(TField *Sender, + const AnsiString Text) +{ + if ( ( TbVentasDCodProducto -> AsString ) . IsEmpty() ) + { + Sender -> AsString = Text; + TbVentasD -> FieldByName( "CodProductoAux" ) -> AsInteger = 0; + } +} +//--------------------------------------------------------------------------- +// ## Cambiado 09/08/2001 +// void __fastcall TVentas::ActualizaStock( AnsiString CodProducto, float Cantidad ) +void __fastcall TVentas::ActualizaStock( int CodProducto, float Cantidad ) +{ + TStringList *ListaCombinados; + ListaCombinados = new TStringList; + + DlgBuscarProd -> TbBusquedas -> Filtered = false; + // ## Cambiado 09/08/2001 + // if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", CodProducto, TLocateOptions()< 0 ) + // ## Cambiado 09/08/2001 + // ActualizaStockMultiple( DlgBuscarProd -> TbBusquedas -> FieldByName( "ForcedIndex" ) -> AsInteger, Cantidad, ListaCombinados ); + ActualizaStockMultiple( CodProducto, Cantidad, ListaCombinados ); + delete ListaCombinados; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::ActualizaStockMultiple( int CodProducto, float Cantidad, TStringList *ListaCombinados ) +{ + // Localizamos el CodProducto y actualizamos + short i; + typedef struct AList + { + int CodProd; + float Cantidad; + } TAList; + typedef TAList* PAList; + + if ( DlgBuscarProd -> TbBusquedas -> Locate( "ForcedIndex", CodProducto, TLocateOptions()< TbBusquedas -> FieldByName( "COMBINADO" ) -> AsBoolean == false ) + { + // No es un combinado (Actualizamos directamente) + DlgBuscarProd -> TbBusquedas -> Edit(); + DlgBuscarProd -> TbBusquedas -> FieldByName( "Stock Actual" ) -> AsInteger += Cantidad; + DlgBuscarProd -> TbBusquedas -> Post(); + } else { + // No hemos pasado por él aun ( Evitar códigos ciclicos ) + if ( ListaCombinados -> IndexOf( CodProducto ) == -1 ) + { + ListaCombinados -> Add( CodProducto ); + + PAList AStruct; + TList *ListaProdC = new TList; + + // Productos a seguir + while ( ! TbProdCircular -> Eof ) + { + AStruct = new TAList; + AStruct->CodProd = TbProdCircular -> FieldByName( "CodProdE" ) -> AsInteger; + AStruct->Cantidad = TbProdCircular -> FieldByName( "Cantidad" ) -> AsFloat; + ListaProdC->Add(AStruct); + TbProdCircular -> Next(); + } + + // Recorremos todos los productos (Circulares) que forman este combinado + for ( i = 0; i < ListaProdC -> Count; i++ ) + { + AStruct = (PAList) ListaProdC->Items[i]; + ActualizaStockMultiple( AStruct->CodProd, Cantidad*(AStruct->Cantidad), ListaCombinados ); + } + + delete ListaProdC; + } + } + } +} +//--------------------------------------------------------------------------- + + + + + + + +void __fastcall TVentas::BitBtn2Click(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: jd@infdj.com" ); +#else + // Si la factura actual, no tiene asignado ningún producto, ¿PARA QUE CAMBIAR? + if ( TbVentasD -> RecordCount == 0 ) + { + ShowMessage( "Imposible abrir otra sesión,\n existiendo una LIBRE." ); + } else { + // Creamos una nueva factura + NuevaFacturaCliente(); + } +#endif + + // Levamos el foco a donde debe... + if ( FocoRapido ) + QCodigo->SetFocus(); + else + DBGrid1->SetFocus(); + +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::bCancelarTicketClick(TObject *Sender) +{ + bool RecorrerAbiertas = true; + // Ok! Eliminamos la factura en curso + TbVentasC -> Delete(); +////////////////////////////////////////////////////////////////////// + if ( RecorrerAbiertas ) + { + TbVentasAbiertas -> Refresh(); + if ( TbVentasAbiertas -> RecordCount > 0 ) + { + TbVentasAbiertas -> First(); + TbVentasC -> GotoCurrent( TbVentasAbiertas ); + } else + NuevaFacturaCliente(); + } else + NuevaFacturaCliente(); +////////////////////////////////////////////////////////////////////// + // Levamos el foco a donde debe... + if ( FocoRapido ) + QCodigo->SetFocus(); + else + DBGrid1->SetFocus(); + +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbVentasCBeforeDelete(TDataSet *DataSet) +{ + // Mostramos la advertencia... (Solo si hay algún registro...) + if ( TbVentasD -> RecordCount > 0 ) + switch( MessageDlg( "Atención, está apunto de eliminar\el albaran/factura en curso...\n¿Realmente desea continuar?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) ) + { + case mrNo: + Abort(); + break; + default: + // Borramos cada uno de los producto que contiene la facura... + while ( TbVentasD -> RecordCount > 0 ) + { + try { + TbVentasD -> Delete(); + }catch(...){ + break; + } + } + TbVentasI -> Edit(); + TbVentasI -> FieldByName( "Cancelados" ) -> AsInteger ++; + TbVentasI -> Post(); + break; + }; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbVentasDPrecioCSetText(TField *Sender, + const AnsiString Text) +{ + Currency TParcial; + + if ( TbVentasD->FieldByName("CodProductoAux")->AsInteger != 0 ) + { + if ( !CFG->CambioPrecioProdExistente->Checked ) + return; + } + TParcial = Sender -> AsCurrency * Currency( ( TbVentasDCantidad -> AsFloat ) ); + TParcial = TParcial * (1 - ( TbVentasD -> FieldByName( "Dto" ) -> AsCurrency / 100 ) ); + SUMAcompraC -= TParcial; + if ( ! TbVentasD -> FieldByName( "IVA" ) -> IsNull ) + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbVentasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + try { + Sender->AsString = Text; + } catch(...) { + Sender->AsCurrency =0; + } + + ActualizaTotales(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::DBGrid1KeyPress(TObject *Sender, char &Key) +{ + short int Salto; + + switch( Key ) + { + case VK_RETURN: + if ( DBGrid1 -> EditorMode ) + { + Key = 0; + if ( DBGrid1 -> SelectedIndex >= 5 )//Fields[DBGrid1 -> SelectedIndex + 2] == NULL ) + { + DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; + TbVentasD -> Next(); + if ( TbVentasD -> Eof ) + { + TbVentasD -> Append(); + } + } else { + Salto = 1; + switch ( DBGrid1 -> SelectedIndex ) + { + case 0: + if ( ! TbVentasDCodProducto -> AsString . IsEmpty() ) + Salto = 5; + break; + case 1: + Salto = 2; + break; + } + DBGrid1 -> SelectedIndex += Salto; + } + } + break; + case '.': + Key = ','; + break; + case '+': + // Fichamos el ticket actual --> si el REGISTRO ACTUAL esta vacio + if ( DBGrid1->SelectedField == DBGrid1 -> Fields[0] && + DBGrid1->Fields[0]-> AsString . IsEmpty() + ) + { + Key = 0; + bFicharTicketClick(0); + } + break; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::DBGrid4DblClick(TObject *Sender) +{ + // Sincronizamos la base de datos principal... + TbVentasC -> GotoCurrent( TbVentasAbiertas ); + // Mostramos la solapa inicial + PageControl1 -> ActivePage = TabSheet1; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::DsVentasCDataChange(TObject *Sender, + TField *Field) +{ + // Actualizamos los totales... +/* + Currency TParcial; + SUMAcompraC = 0; + IVAcompraC = 0; + +TbVentasD -> DisableControls(); + TbVentasD -> First(); + do + { + TParcial = TbVentasDPrecioC -> AsCurrency * TbVentasDCantidad -> AsFloat; + TParcial = TParcial * (1 - ( TbVentasD -> FieldByName( "Dto" ) -> AsCurrency / 100 ) ); + SUMAcompraC += TParcial; + if ( ! TbVentasD -> FieldByName( "IVA" ) -> IsNull ) + IVAcompraC += TParcial * ( 1 + (TbVentasD -> FieldByName( "IVA" ) -> AsCurrency / 100) ); + try { + TbVentasD -> Next(); + } catch(...) { + // nothing + break; + } + }while( ! TbVentasD -> Eof ); +TbVentasD -> EnableControls(); + + + if ( TbVentasC -> FieldByName( "TotalSin") -> AsCurrency != SUMAcompraC || + TbVentasC -> FieldByName( "TotalIva") -> AsCurrency != IVAcompraC ) + ShowMessage( "ERROR LOS TOTALES SON DISCORDANTES\n\t" + TbVentasC -> FieldByName( "TotalSin") -> AsString + "\n\t" + TbVentasC -> FieldByName( "TotalIva") -> AsString ); +*/ + if ( !ActualizandoTOTALES ) + { + cbFormaPago->ItemIndex = TbVentasC->FieldByName( "FormaPago" )->AsInteger; + SUMAcompraC = TbVentasC -> FieldByName( "TotalSin") -> AsCurrency; + IVAcompraC = TbVentasC -> FieldByName( "TotalIva") -> AsCurrency; + } + + int Number = (int)( ( SUMAcompraC + IVAcompraC ) * 100); + DigitNum1 -> Value = Number / 100; + DigitNum2 -> Value = Number % 100; + StatusBar1->Panels->Items[2]->Text = FormatCurr("###,###,###.#0 €", Number/16638.6 ); + +} +//--------------------------------------------------------------------------- + + +void __fastcall TVentas::DBGrid1DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + if ( ! State.Contains(gdSelected) ) + { + if ( TbVentasDCantidad -> AsFloat < 0 ) + { + DBGrid1->Canvas->Font->Color = clGreen; + DBGrid1->DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + } +} + +//--------------------------------------------------------------------------- +void __fastcall TVentas::TbVentasDNewRecord(TDataSet *DataSet) +{ + // Por defecto una unidad... +// TbVentasDCantidad -> AsInteger = 1; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::DBGrid4CellClick(TColumn *Column) +{ + // Sincronizamos la base de datos principal... + TbVentasC -> GotoCurrent( TbVentasAbiertas ); +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbVentasIBeforeOpen(TDataSet *DataSet) +{ + #ifdef TB_DISCONTINUAS + AnsiString FileEmp; + + FileEmp = TbVentasI -> TableName; + + if ( access( FileEmp.c_str(), 0 ) != 0 ) + { + // Establecemos la ruta + TbVentasI -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbVentasI -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbVentasI -> FieldDefs -> Clear(); + TbVentasI -> FieldDefs -> Add("FechaCaja", ftDate, 0, false ); + TbVentasI -> FieldDefs -> Add("Inicio", ftTime, 0, false ); + TbVentasI -> FieldDefs -> Add("Fin", ftTime, 0, false ); + TbVentasI -> FieldDefs -> Add("IntentosSalir", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("ExitoSalir", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Tickets", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Cancelados", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Cambios", ftSmallint, 0, false ); + + TbVentasI -> FieldDefs -> Add("Cantidad x1", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x1", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x5", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x5", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x10", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x10", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x25", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x25", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x50", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x50", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x100", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x100", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x200", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x200", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x500", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x500", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x1000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x1000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x2000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x2000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x5000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x5000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad x10000", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total x10000", ftInteger, 0, false ); + TbVentasI -> FieldDefs -> Add("Cantidad xvarios", ftSmallint, 0, false ); + TbVentasI -> FieldDefs -> Add("Total xvarios", ftInteger, 0, false ); + + TbVentasI -> FieldDefs -> Add("Notas", ftMemo, 0, false ); + + TbVentasI -> IndexDefs-> Clear(); + + TbVentasI->IndexDefs->Add("Primary", "FechaCaja", TIndexOptions() << ixPrimary << ixUnique ); + // Creamos la base... + TbVentasI -> CreateTable(); + } + #endif +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbVentasCAfterOpen(TDataSet *DataSet) +{ + // Localizamos el dia actual. + StatusBar1->Panels->Items[1]->Text = "Localizando registro de caja..."; + if ( ! ( TbVentasI -> Locate( "FechaCaja", TDateTime::CurrentDate(), TLocateOptions()<Panels->Items[1]->Text = "Inicilizando dia actual..."; + // Inicializamos el dia + TbVentasI -> InsertRecord( OPENARRAY( TVarRec, + ( // FechaCaja + (Variant)TDateTime::CurrentDate(), + // Inicio + (Variant)TDateTime::CurrentTime() + ) ) ); + } + StatusBar1->Panels->Items[1]->Text = ""; + +} +//--------------------------------------------------------------------------- + + + + + + + + + +void __fastcall TVentas::PideTicketClick(TObject *Sender) +{ +#ifdef DEM001 + static bool visto = true; + if ( !visto ) + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); + visto = false; +#else + // Imprimir (SI/NO) + try { + ImprimirTicket = !ImprimirTicket; + if ( ImprimirTicket ) + PideTicket -> Picture -> LoadFromFile( "systm\\On.bmp" ); + else + PideTicket -> Picture -> LoadFromFile( "systm\\Off.bmp" ); + } catch(...) { + PideTicket -> Picture -> LoadFromFile( "systm\\imerro.bmp" ); + } +#endif +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::LoadMoldeClick(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + /*nothing*/ +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::SalvarMolde1Click(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + /*nothing*/ +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::EliminarX1Click(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + /*nothing*/ +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::dbgFraccionDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + if ( Column -> ID == 0 ) + { + if ( TbCartera->FieldByName("Pagado")->AsBoolean ) + { + dbgFraccion->Canvas->StretchDraw( Rect, BtmOK ); + } else { + dbgFraccion->Canvas->Brush->Color = clWindow; + dbgFraccion->Canvas->FillRect( Rect ); + } + } +} +//--------------------------------------------------------------------------- + + +void __fastcall TVentas::ComboBoxChange(TObject *Sender) +{ +/* + // Debemos cambiar todo lo fraccionado + if ( cbFormaPago->Items->Strings[cbFormaPago->ItemIndex] == "Contado" ) + { + if ( Application->MessageBox("¿Eliminar todo el fraccionamiento de pagos?", "Alerta contable", MB_OKCANCEL ) != IDCANCEL ) + { + while( !TbCartera->Eof ) // Eliminamos los pagos actuales + TbCartera->Delete(); + dbgFraccion->Enabled = false; + Edit1->Enabled=false; Edit2->Enabled=false; + + TbVentasC->Edit(); + TbVentasC->FieldByName("UltimoPago")->AsDateTime = TDateTime::CurrentDate(); + TbVentasC->Post(); + } else { + cbFormaPago->ItemIndex = TbCartera->FieldByName("FormaPago")->AsInteger; + } + } else { + dbgFraccion->Enabled = true; + Edit1->Enabled=true; Edit2->Enabled=true; + TbCartera->First(); + while( !TbCartera->Eof ) + { + TbCartera->Edit(); + TbCartera->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; + TbCartera->Post(); + TbCartera->Next(); + } + } +*/ +ActualizandoTOTALES = true; + TbVentasC->Edit(); + TbVentasC->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; + TbVentasC->Post(); +ActualizandoTOTALES = false; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::Edit2Change(TObject *Sender) +{ + bool pag; short int i; int npagos; + Currency Total = SUMAcompraC + IVAcompraC; + + if ( Edit2->Text . IsEmpty() ) return; + + try { + npagos = Edit2->Text.ToInt(); + } catch(...) { + ShowMessage( "El número de veces a fraccionar el pago, no es correcto" ); + return; + } + if ( npagos < 2 ) + { + ShowMessage( "El número de veces a fraccionar el pago, no es correcto" ); + return; + } + + + pag = false; + // Eliminamos todos los pagos acumulados (SOLO SI NO HAY NINGUN PAGO REALIZADO) + TbCartera->First(); + while( !TbCartera->Eof ) + if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) + { + pag = true; + break; + } + + if ( pag ) + { + while( !TbCartera->Eof ) // Eliminamos los pagos actuales + TbCartera->Delete(); + + unsigned short year; + Total /= npagos; + TDateTime::CurrentDate().DecodeDate( &year, NULL, NULL); + // desde 1 para que inc. los meses + for ( i = 1; i <= npagos; i++ ) + TbCartera->InsertRecord( ARRAYOFCONST( ( TbVentasC->FieldByName("EnlaceFactura")->AsInteger, Variant( EncodeDate( year, i, 1 ) ), Total, 0, cbFormaPago->ItemIndex, false ) ) ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::Edit1Change(TObject *Sender) +{ + bool pag; short int i; int npagos; int tpagos; + Currency Total = SUMAcompraC + IVAcompraC; + + if ( Edit1->Text . IsEmpty() ) return; + + try { + tpagos = Edit1->Text.ToInt(); + } catch(...) { + ShowMessage( "La cantidad para fraccionar el pago, no es correcta" ); + return; + } + if ( tpagos < 2000 ) + { + ShowMessage( "La cantidad para fraccionar el pago, no es correcta" ); + return; + } + + + pag = false; + // Eliminamos todos los pagos acumulados (SOLO SI NO HAY NINGUN PAGO REALIZADO) + TbCartera->First(); + while( !TbCartera->Eof ) + if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) + { + pag = true; + break; + } else { + TbCartera->Next(); + } + + if ( pag ) + { + while( !TbCartera->Eof ) // Eliminamos los pagos actuales + TbCartera->Delete(); + + unsigned short year; + npagos = Total / tpagos; + Total = tpagos; + TDateTime::CurrentDate().DecodeDate(&year, NULL, NULL); + // desde 1 para que inc. los meses + for ( i = 1; i <= npagos; i++ ) + TbCartera->InsertRecord( ARRAYOFCONST( ( TbVentasC->FieldByName("EnlaceFactura")->AsInteger, Variant( EncodeDate( year, i, 1 ) ), Total, 0, cbFormaPago->ItemIndex, false ) ) ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::DsCarteraDataChange(TObject *Sender, + TField *Field) +{ + Edit2->Text = ""; + Edit1->Text = ""; +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TVentas::TbCarteraFechaChange(TField *Sender) +{ + if ( (int)Sender->AsDateTime > (int)TbVentasC->FieldByName("UltimoPago")->AsDateTime ) + { + TbVentasC->Edit(); + TbVentasC->FieldByName("UltimoPago")->AsDateTime = Sender->AsDateTime; + TbVentasC->Post(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbCarteraImporteSetText(TField *Sender, + const AnsiString Text) +{ + + TbVentasC->Edit(); + TbVentasC->FieldByName("TotalFrac")->AsCurrency -= Sender->AsCurrency * ( 0.01 * TbCartera->FieldByName("Incremento")->AsCurrency ); + TbVentasC->FieldByName("TotalFrac")->AsCurrency += Currency( Text ) * ( 0.01 * TbCartera->FieldByName("Incremento")->AsCurrency ); + TbVentasC->Post(); + + Sender->AsString = Text; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbCarteraBeforeDelete(TDataSet *DataSet) +{ + if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) + { + ShowMessage( "No se pueden eliminar, fraccionamientos que ya han sido efectuados." ); + Abort(); + } + TbVentasC->Edit(); + TbVentasC->FieldByName("TotalFrac")->AsCurrency -= TbCartera->FieldByName("Importe")->AsCurrency * ( 0.01 * TbCartera->FieldByName("Incremento")->AsCurrency ); + TbVentasC->Post(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbCarteraBeforeInsert(TDataSet *DataSet) +{ + if ( !( TbVentasC -> RecNo > 0 && TbVentasC -> RecordCount > 0 ) && + !( TbVentasD -> RecNo > 0 && TbVentasD -> RecordCount > 0 ) ) + { + MessageDlg("¿ No cree que debería crear,\no seleccionar una factura CON DATOS,\nantes de intentar fracionar su pago?.", mtWarning, TMsgDlgButtons() << mbOK, 0); + Abort(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbCarteraCalcFields(TDataSet *DataSet) +{ + TbCartera->FieldByName("Total")->AsCurrency = TbCartera->FieldByName("Importe")->AsCurrency * ( 0.01 * TbCartera->FieldByName("Incremento")->AsCurrency ); +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbCarteraNewRecord(TDataSet *DataSet) +{ + TbCartera->FieldByName("Fecha")->AsDateTime = TDateTime::CurrentDate(); + TbCartera->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbCarteraIncrementoSetText(TField *Sender, + const AnsiString Text) +{ + TbVentasC->Edit(); + TbVentasC->FieldByName("TotalFrac")->AsCurrency -= TbCartera->FieldByName("Importe")->AsCurrency * ( 0.01 * Sender->AsCurrency ); + TbVentasC->FieldByName("TotalFrac")->AsCurrency += TbCartera->FieldByName("Importe")->AsCurrency * ( 0.01 * Currency( Text ) ); + TbVentasC->Post(); + + Sender->AsString = Text; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::SpeedButton3Click(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + // Mostramos el dialogo, buscar [Productos] + TDlgBuscar *DlgBuscarFactAlb; + DlgBuscarFactAlb = new TDlgBuscar(this); + + DlgBuscarFactAlb -> TbBusquedas -> TableName = "Ventas (cabecera)"; + DlgBuscarFactAlb -> Filter = "[FacturaAbierta] = '0' AND [FechaFactura] = '" + TDateTime::CurrentDate() +"'"; + DlgBuscarFactAlb -> TbBusquedas -> Active = true; + DlgBuscarFactAlb -> ShowModal(); + + if ( DlgBuscarFactAlb -> ModalResult == mrOk ) + { + if ( MessageDlg( "Albarán nº: " + DlgBuscarFactAlb->TbBusquedas->FieldByName("EnlaceFactura")->AsString + + "\nFactura asociada: " + DlgBuscarFactAlb->TbBusquedas->FieldByName("CodFactura")->AsString + + "\n ¿ Eliminar ?", mtConfirmation, TMsgDlgButtons() << mbNo << mbYes, 0 ) == mrYes ) + { + if ( DlgBuscarFactAlb->TbBusquedas->FieldByName("CodFactura")->AsInteger <= 0 ) + { + TBookmark SavePlace; + SavePlace = TbVentasC->GetBookmark(); + TbVentasC->GotoCurrent( DlgBuscar->TbBusquedas ); + TbVentasC->Delete(); + TbVentasC->GotoBookmark(SavePlace); + TbVentasC->FreeBookmark(SavePlace); + } else { + // Realizamos otra factura con importe negativo + // ################ PENDIENTE + ShowMessage( " Función no disponible\n1º Realizar copia factura (abono)\\n2º Ingresar los articulos en stock"); + } + } + } +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::SpeedButton11Click(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + bool iEsAlbaran = EsAlbaran; + TDlgBuscar *DlgBuscarFactAlb; + TTable *TbDATOS; + if ( Sender != 0 ) + { + DlgBuscarFactAlb = new TDlgBuscar(this); + DlgBuscarFactAlb -> TbBusquedas -> TableName = TbVentasC -> TableName; + DlgBuscarFactAlb -> Filter = "[FechaFactura] = '" + TDateTime::CurrentDate() +"'"; + DlgBuscarFactAlb -> TbBusquedas -> Active = true; + DlgBuscarFactAlb->ShowModal(); + if ( DlgBuscarFactAlb -> ModalResult == mrOk ) + { + if ( MessageDlg( "Albarán nº: " + DlgBuscarFactAlb->TbBusquedas->FieldByName("EnlaceFactura")->AsString + + "\nFactura asociada: " + DlgBuscarFactAlb->TbBusquedas->FieldByName("CodFactura")->AsString + + "\n ¿ Volver a Imprimir ?", mtConfirmation, TMsgDlgButtons() << mbNo << mbYes, 0 ) == mrYes ) + { + iEsAlbaran = DlgBuscarFactAlb->TbBusquedas->FieldByName("CodFactura")->AsInteger <= 0; + TbDATOS = DlgBuscarFactAlb->TbBusquedas; + } else + return; + } else { + delete DlgBuscarFactAlb; + return; + } + } else + TbDATOS = TbVentasC; + if ( iEsAlbaran ) + { + // Imprime Ticket + TQRMDFacturaVnt1 *QRMDFacturaVnt; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + QRMDFacturaVnt = new TQRMDFacturaVnt1(this); + // Mostrarla como modal y según el valor devuelto + QRMDFacturaVnt -> TbVntCabecera -> GotoCurrent( TbDATOS ); + QRMDFacturaVnt -> Print(); +/* + #ifdef DEBUG + QRMDFacturaVnt -> Preview(); + #else + QRMDFacturaVnt -> Print(); + #endif +*/ + // Destruimos la ficha + delete QRMDFacturaVnt; + } else { + // Imprime factura + TQRMDFacturaVnt *QRMDFacturaVnt; + // Creamos una ficha del tipo TProductos + // Guardando la referencia en la variable TProductos + QRMDFacturaVnt = new TQRMDFacturaVnt(this); + // Mostrarla como modal y según el valor devuelto + QRMDFacturaVnt -> TbVntCabecera -> GotoCurrent( TbDATOS ); + QRMDFacturaVnt -> Print(); +/* + #ifdef DEBUG + QRMDFacturaVnt -> Preview(); + #else + QRMDFacturaVnt -> Print(); + #endif +*/ + // Destruimos la ficha + delete QRMDFacturaVnt; + } + + if ( Sender != 0 ) + delete DlgBuscarFactAlb; +#endif +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::TbVentasDDtoSetText(TField *Sender, + const AnsiString Text) +{ + Currency TParcial; + + if ( Text.ToInt() > 15 ) + { + ShowMessage( "Uff!, el descuento es demasiado grande.\nNosotros trabajamos con porcentajes demasiado pequeños\nIMPOSIBLE aplicar ese descuento..." ); + } else { + + TParcial = ( TbVentasDPrecioC -> AsCurrency * Currency( ( TbVentasDCantidad -> AsFloat ) ) ); + TParcial = TParcial * (1 - ( Sender->AsCurrency / 100 ) ); + SUMAcompraC -= TParcial; + if ( ! TbVentasD -> FieldByName( "IVA" ) -> IsNull ) + IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbVentasD -> FieldByName( "IVA" ) -> AsInteger ) ); + + Sender -> AsString = Text; + + ActualizaTotales(); + } +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::ActualizaTotales(void) +{ + Currency TParcial; + int Number; + + try { + TParcial = TbVentasDPrecioC -> AsCurrency * Currency( ( TbVentasDCantidad -> AsFloat ) ); + TParcial = TParcial * (1 - ( TbVentasDDto->AsFloat / 100 ) ); + SUMAcompraC += TParcial; + if ( ! TbVentasDIVA->IsNull ) + IVAcompraC += TParcial * ( TbVentasDIVA->AsCurrency / 100 ); + +// Number = (int)( ( SUMAcompraC + IVAcompraC ) * 100 ); + + ActualizandoTOTALES = true; + TbVentasC -> Edit(); + TbVentasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; + TbVentasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; + TbVentasC -> Post(); + ActualizandoTOTALES = false; + } catch(...) { + // nothing + ActualizandoTOTALES = false; + } + +// DigitNum1 -> Value = Number / 100; +// DigitNum2 -> Value = Number % 100; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QPrecioChange(TObject *Sender) +{ + try { + if ( !QUnds->Text.IsEmpty() && !QPrecio->Text.IsEmpty() && !QDto->Text.IsEmpty() ) + QSubtotal->Text = QUnds->Text.ToDouble() * QPrecio->Text.ToDouble() * (1 - ( QDto->Text.ToInt() / 100 ) ); + } catch(...) { + QSubtotal->Text = ""; + QPrecio->Text = ""; + } +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QUndsChange(TObject *Sender) +{ + try { + if ( !QUnds->Text.IsEmpty() && !QPrecio->Text.IsEmpty() && !QDto->Text.IsEmpty() ) + QSubtotal->Text = QUnds->Text.ToDouble() * QPrecio->Text.ToDouble() * (1 - ( QDto->Text.ToInt() / 100 ) ); + } catch(...) { + QUnds->Text = "1"; + QSubtotal->Text = QPrecio->Text.ToDouble() * (1 - ( QDto->Text.ToInt() / 100 ) ); + } +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QDtoChange(TObject *Sender) +{ + if ( !QUnds->Text.IsEmpty() && !QPrecio->Text.IsEmpty() && !QDto->Text.IsEmpty() ) + QSubtotal->Text = QUnds->Text.ToDouble() * QPrecio->Text.ToDouble() * (1 - ( QDto->Text.ToInt() / 100 ) ); +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QNProductoChange(TObject *Sender) +{ + DlgBuscarProd -> TbBusquedas -> Filtered = false; + DlgBuscarProd -> TbBusquedas -> IndexName = "NombreProd"; + if ( DlgBuscarProd -> TbBusquedas -> Locate( "Nombre Del Producto", QNProducto->Text, TLocateOptions() << loPartialKey << loCaseInsensitive ) ) + { + QRellenaDatos(QNProducto->Text.Length()); + } else { + StatusBar1->Panels->Items[3]->Text = ""; + StatusBar1->Panels->Items[1]->Text = ""; + QCodAux = 0; + QPrecio->Text="0"; + QDto->Text="0"; + QUnds->Text="1"; + QSubtotal->Text="0"; + QCodigo->Text=""; + } +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QRellenaDatos(int start) +{ + QNProducto->Text = DlgBuscarProd->TbBusquedas->FieldByName("Nombre Del Producto")->AsString; + if ( start == -1 ) + { + QNProducto->SelStart = QNProducto->Text.Length(); + QNProducto->SelLength = 0; + }else{ + QNProducto->SelStart = start; + QNProducto->SelLength = QNProducto->Text.Length() - QNProducto->SelStart; + } + + QCodAux = DlgBuscarProd -> TbBusquedas -> FieldByName( "ForcedIndex" ) -> AsInteger; + QCodigo->Text = DlgBuscarProd-> TbBusquedas->FieldByName( "ID Producto" )->AsString; + QIva->Text = DlgBuscarProd-> TbBusquedas->FieldByName( "I.V.A" )->AsString; + try { + if ( QUnds->Text.IsEmpty() || QUnds->Text.ToDouble() <= 0 ) QUnds->Text="1"; + }catch(...){QUnds->Text="1";} + QDto->Text = "0"; + QPrecio->Text = AnsiString( GetPrecioVenta( DlgBuscarProd -> TbBusquedas ) ); + int Stock = DlgBuscarProd->TbBusquedas->FieldByName( "Stock Actual")->AsInteger; + StatusBar1->Panels->Items[3]->Text = (Stock <= 0) ? AnsiString("-No disponibles-") : AnsiString(Stock); + StatusBar1->Panels->Items[1]->Text = DlgBuscarProd->TbBusquedas->FieldByName( "Localizacion")->AsString; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QNProductoKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_DOWN ) + { + if ( !DlgBuscarProd->TbBusquedas->Eof ) + { + DlgBuscarProd->TbBusquedas->Next(); + QRellenaDatos(-1); + } + } + if ( Key == VK_UP ) + { + if ( !DlgBuscarProd->TbBusquedas->Bof ) + { + DlgBuscarProd->TbBusquedas->Prior(); + QRellenaDatos(-1); + } + } +} +//--------------------------------------------------------------------------- + + +void __fastcall TVentas::QNProductoKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_BACK ) + { + QNProducto->SelStart --; + QNProducto->SelLength = QNProducto->Text.Length() - QNProducto->SelStart; + Key = 0; + } + if ( Key == VK_RETURN ) + { + if ( QPrecio->Text.IsEmpty() || ( QPrecio->Text.ToDouble() ) <= 0 ) + QPrecio->SetFocus(); + else + QUnds->SetFocus(); + } +} +//--------------------------------------------------------------------------- + + +void __fastcall TVentas::ClearQuickControl(void) +{ + // Volver a pedir datos... + QCodAux = 0; + QNProducto->Text = ""; + QPrecio->Text="0"; + QDto->Text="0"; + QUnds->Text="1"; + QSubtotal->Text="0"; + QCodigo->Text=""; + StatusBar1->Panels->Items[3]->Text = ""; + StatusBar1->Panels->Items[1]->Text = ""; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QUndsEnter(TObject *Sender) +{ + QUnds->Color = clMenu; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::QUndsExit(TObject *Sender) +{ + QUnds->Color = clWindow; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::DBGrid1Enter(TObject *Sender) +{ + // Limpiamos el QuickControl + ClearQuickControl(); + FocoRapido = false; +} +//--------------------------------------------------------------------------- +void __fastcall TVentas::QCodigoEnter(TObject *Sender) +{ + FocoRapido = true; + QCodigo->Color = clQREADY; + QCodigo->SelStart = 0; + QCodigo->SelLength = QCodigo->Text.Length(); +} +//--------------------------------------------------------------------------- + +/* + ShowMessage( TbVentasD->FieldByName("CodProducto")->AsString + " -#- " + + TbVentasD->FieldByName("NombreProducto")->AsString + " -#- " + + TbVentasD->FieldByName("Cantidad")->AsString + " -#- " + + " BeforeEdit" ); +*/ + +void __fastcall TVentas::QCodigoExit(TObject *Sender) +{ + QCodigo->Color = clWindow; +} +//--------------------------------------------------------------------------- + + + + + +void __fastcall TVentas::QCodigoKeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + { + if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", QCodigo->Text, TLocateOptions() << loCaseInsensitive ) ) + { + QRellenaDatos(-1); + QUnds->SetFocus(); + } else { + StatusBar1->Panels->Items[3]->Text = ""; + StatusBar1->Panels->Items[1]->Text = ""; + } + + QCodigo->Color = clWindow; + } + + if ( QCodigo->Text.IsEmpty() && Key=='+' ) + { + Key = 0; + bFicharTicketClick(0); + QCodigo->Color = clQREADY; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::QPrecioKeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN ) + QUnds->SetFocus(); +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TVentas::QUndsKeyPress(TObject *Sender, char &Key) +{ + if ( Key == VK_RETURN && + DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", QCodigo->Text, TLocateOptions() << loCaseInsensitive ) ) + { + // Añadir el producto a la lista... + try { + if ( QPrecio->Text.IsEmpty() || QPrecio->Text.ToDouble() < 0 ) + return; + if ( QUnds->Text.IsEmpty() || QUnds->Text.ToDouble() < 1 ) QUnds->Text = "1"; + if ( QDto->Text.IsEmpty() || QDto->Text.ToDouble() < 0 ) QDto->Text = "0"; + if ( QIva->Text.IsEmpty() || QIva->Text.ToDouble() < 0 ) QIva->Text = "0"; + } catch(...) { + return; + } + TbVentasD->Insert(); + TbVentasD->FieldByName( "CodProductoAux" )->AsInteger = QCodAux; + TbVentasD->FieldByName( "CodProducto" )->AsString = QCodigo->Text; + TbVentasD->FieldByName( "NombreProducto" )->AsString = QNProducto->Text; + TbVentasD->FieldByName( "Cantidad" )->AsFloat = QUnds->Text.ToDouble(); + TbVentasD->FieldByName( "Dto" )->AsCurrency = QDto->Text.ToDouble(); + TbVentasD->FieldByName( "IVA" )->AsInteger = QIva->Text.ToInt(); + TbVentasD->FieldByName( "PrecioC" )->AsCurrency = QPrecio->Text.ToDouble(); + TbVentasD->Post(); + + ActualizaTotales(); + // ## Cambiado 09/08/01 + // ActualizaStock( TbVentasD -> FieldByName( "CodProducto" ) -> AsString, + ActualizaStock( QCodAux, -1 * QUnds->Text.ToDouble() ); + + ClearQuickControl(); + QCodigo->SetFocus(); + } + +} +//--------------------------------------------------------------------------- + + +void __fastcall TVentas::QCodigoClick(TObject *Sender) +{ + QCodigo->Text=""; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::QIvaKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift) +{ + if ( Key == VK_RETURN ) + QPrecio->SetFocus(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::ElasticForm1AfterResize(TObject *Sender) +{ + DBGrid1->Font->Size = DBText6->Font->Size; + DBGrid1->TitleFont->Size = DBText6->Font->Size; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::QUndsClick(TObject *Sender) +{ + QUnds->Text=""; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::QPrecioEnter(TObject *Sender) +{ + if ( QCodAux != 0 ) + QPrecio->Enabled = CFG->CambioPrecioProdExistente->Checked; +} +//--------------------------------------------------------------------------- + +void __fastcall TVentas::QPrecioExit(TObject *Sender) +{ + QPrecio->Enabled = true; +} +//--------------------------------------------------------------------------- + diff --git a/TpvVentas.dfm b/TpvVentas.dfm new file mode 100644 index 0000000..3714e37 Binary files /dev/null and b/TpvVentas.dfm differ diff --git a/TpvVentas.h b/TpvVentas.h new file mode 100644 index 0000000..65c4535 --- /dev/null +++ b/TpvVentas.h @@ -0,0 +1,303 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVentasH +#define TpvVentasH +//--------------------------------------------------------------------------- +#include "TDlgBuscar.h" + +#include "DigitNum.h" +#include "LetreroDigital.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" + +//--------------------------------------------------------------------------- +class TVentas : public TForm +{ +__published: // IDE-managed Components + TPanel *Panel1; + TBevel *Bevel1; + TBevel *Bevel2; + TStatusBar *StatusBar1; + TDBGrid *DBGrid1; + TPanel *Panel2; + TSpeedButton *SpeedButton5; + TSpeedButton *SpeedButton11; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TBevel *Bevel3; + TLabel *Label2; + TDBText *DBText2; + TLabel *Label4; + TDBText *DBText3; + TLabel *Label5; + TDBText *DBText4; + TDBText *DBText5; + TDBText *DBText8; + TLabel *Label9; + TBevel *Bevel4; + TDBText *DBText6; + TButton *BusqCliente; + TTabSheet *TabSheet2; + TBevel *Bevel5; + TLabel *Label1; + TDBText *DBText9; + TTabSheet *TabSheet3; + TDBGrid *DBGrid4; + TButton *BusqVendedor; + TStatusBar *StatusBar2; + TDigitNum *DigitNum1; + TDigitNum *DigitNum2; + TLabel *Label7; + TLetreroDigital *LetreroDigital1; + TTable *TbInfoClt; + TDBText *DBText10; + TDBText *DBText11; + TDBText *DBText12; + TDBText *DBText13; + TDBText *DBText14; + TDBText *DBText15; + TDBText *DBText16; + TDBText *DBText17; + TTable *TbInfoEmpl; + TDataSource *DsVentasD; + TTable *TbVentasD; + TTable *TbVentasC; + TDataSource *DsVentasC; + TTable *TbVentasAbiertas; + TDataSource *DsVentasAbiertas; + TSpeedButton *bCancelarTicket; + TSpeedButton *bFicharTicket; + TSpeedButton *SpeedButton3; + TDBText *DBText18; + TBitBtn *BitBtn2; + TCurrencyField *TbVentasDSubTotal; + TAutoIncField *TbVentasAbiertasCodFactura; + TIntegerField *TbVentasAbiertasCodCliente; + TDateField *TbVentasAbiertasFechaFactura; + TSmallintField *TbVentasAbiertasFacturaAbierta; + + TStringField *TbVentasAbiertasNombreCliente; + TStringField *TbVentasAbiertasNombreVendedor; + TAutoIncField *TbVentasCCodFactura; + TIntegerField *TbVentasCCodCliente; + TDateField *TbVentasCFechaFactura; + TSmallintField *TbVentasCFacturaAbierta; + TSmallintField *TbVentasCNumeroPagos; + TTabSheet *TabSheet4; + TBevel *Bevel6; + TDBMemo *DBMemo1; + TBooleanField *TbVentasCImprimirNotas; + TMemoField *TbVentasCNotasFactura; + TDBCheckBox *DBCheckBox1; + TPopupMenu *MFacturasMolde; + TMenuItem *MenuTitleBar; + TMenuItem *RestaurarMolde1; + TMenuItem *LoadMolde; + TMenuItem *SalvarMolde1; + TMenuItem *EliminarX1; + TDataSource *DsVentasMolde; + TTable *VentasMolde; + TDBText *DBText1; + TAutoIncField *TbVentasCEnlaceFactura; + TAutoIncField *TbVentasAbiertasEnlaceFactura; + TDataSource *DsVentasI; + TTable *TbVentasI; + TAutoIncField *TbVentasDMaintenedForced; + TIntegerField *TbVentasDEnlaceFactura; + TStringField *TbVentasDCodProducto; + TStringField *TbVentasDNombreProducto; + TSmallintField *TbVentasDIVA; + TCurrencyField *TbVentasDPrecioC; + TTimeField *TbVentasCHoraFactura; + TStringField *TbVentasCClt_nomb; + TStringField *TbVentasCClt_app; + TStringField *TbVentasCClt_nif; + TCurrencyField *TbVentasCClt_crd; + TStringField *TbVentasCClt_email; + TStringField *TbVentasCClt_cod2; + TStringField *TbVentasCCtl_tlf; + TStringField *TbVentasCEmpl_cod2; + TStringField *TbVentasCEmpl_nomb; + TStringField *TbVentasCEmpl_app; + TTable *TbProdCircular; + TElasticForm *ElasticForm1; + TImage *PideTicket; + TBooleanField *TbVentasCContabilizada; + TTable *TbCartera; + TIntegerField *TbCarteraEnlaceFactura; + TDateField *TbCarteraFecha; + TCurrencyField *TbCarteraImporte; + TCurrencyField *TbCarteraIncremento; + TSmallintField *TbCarteraFormaPago; + TBooleanField *TbCarteraPagado; + TCurrencyField *TbCarteraTotal; + TDataSource *DsCartera; + TDBGrid *dbgFraccion; + TSplitter *Splitter2; + TPanel *Panel3; + TLabel *Label3; + TLabel *Label6; + TEdit *Edit2; + TEdit *Edit1; + TComboBox *ComboBox; + TCurrencyField *TbVentasCTotalSin; + TCurrencyField *TbVentasCTotalIva; + TDateField *TbVentasCUltimoPago; + TCurrencyField *TbVentasCTotalFrac; + TFloatField *TbVentasDCantidad; + TIntegerField *TbVentasCCodEmpleado; + TIntegerField *TbVentasAbiertasCodEmpleado; + TTable *TbVentasF; + TSmallintField *TbVentasDDto; + TIntegerField *TbVentasDCodProductoAux; + TCurrencyField *TbVentasAbiertasTotalSin; + TPanel *Panel4; + TEdit *QCodigo; + TEdit *QNProducto; + TEdit *QIva; + TEdit *QPrecio; + TEdit *QDto; + TEdit *QUnds; + TEdit *QSubtotal; + TSmallintField *TbVentasCBanco_Entidad; + TSmallintField *TbVentasCBanco_Sucursal; + TSmallintField *TbVentasCBanco_DC; + TStringField *TbVentasCBanco_NumCuenta; + TDateField *TbVentasCFechaAlbaran; + TComboBox *cbFormaPago; + TSmallintField *TbVentasCFormaPago; + void __fastcall SpeedButton5Click(TObject *Sender); + void __fastcall TbVentasCNewRecord(TDataSet *DataSet); + + + void __fastcall BusqClienteClick(TObject *Sender); + void __fastcall BusqVendedorClick(TObject *Sender); + void __fastcall TbVentasDCalcFields(TDataSet *DataSet); + void __fastcall TbVentasAbiertasCalcFields(TDataSet *DataSet); + void __fastcall bFicharTicketClick(TObject *Sender); + + void __fastcall TabSheet4Enter(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall TbVentasDCodProductoSetText(TField *Sender, + const AnsiString Text); + void __fastcall TbVentasDCantidadSetText(TField *Sender, + const AnsiString Text); + void __fastcall DBGrid1ColExit(TObject *Sender); + void __fastcall TbVentasDBeforeDelete(TDataSet *DataSet); + void __fastcall TbVentasDNombreProductoSetText(TField *Sender, + const AnsiString Text); + + void __fastcall BitBtn2Click(TObject *Sender); + void __fastcall bCancelarTicketClick(TObject *Sender); + void __fastcall TbVentasCBeforeDelete(TDataSet *DataSet); + void __fastcall TbVentasDPrecioCSetText(TField *Sender, + const AnsiString Text); + void __fastcall DBGrid1KeyPress(TObject *Sender, char &Key); + void __fastcall DBGrid4DblClick(TObject *Sender); + void __fastcall DsVentasCDataChange(TObject *Sender, TField *Field); + void __fastcall DBGrid1DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall TbVentasDNewRecord(TDataSet *DataSet); + void __fastcall DBGrid4CellClick(TColumn *Column); + void __fastcall TbVentasIBeforeOpen(TDataSet *DataSet); + void __fastcall TbVentasCAfterOpen(TDataSet *DataSet); + void __fastcall PideTicketClick(TObject *Sender); + void __fastcall LoadMoldeClick(TObject *Sender); + void __fastcall SalvarMolde1Click(TObject *Sender); + void __fastcall EliminarX1Click(TObject *Sender); + void __fastcall dbgFraccionDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + + void __fastcall ComboBoxChange(TObject *Sender); + void __fastcall Edit2Change(TObject *Sender); + void __fastcall Edit1Change(TObject *Sender); + void __fastcall DsCarteraDataChange(TObject *Sender, TField *Field); + + + + void __fastcall TbCarteraFechaChange(TField *Sender); + void __fastcall TbCarteraImporteSetText(TField *Sender, + const AnsiString Text); + void __fastcall TbCarteraBeforeDelete(TDataSet *DataSet); + void __fastcall TbCarteraBeforeInsert(TDataSet *DataSet); + void __fastcall TbCarteraCalcFields(TDataSet *DataSet); + void __fastcall TbCarteraNewRecord(TDataSet *DataSet); + void __fastcall SpeedButton3Click(TObject *Sender); + void __fastcall TbCarteraIncrementoSetText(TField *Sender, const AnsiString Text); + void __fastcall SpeedButton11Click(TObject *Sender); + void __fastcall TbVentasDDtoSetText(TField *Sender, + const AnsiString Text); + void __fastcall QPrecioChange(TObject *Sender); + void __fastcall QUndsChange(TObject *Sender); + void __fastcall QDtoChange(TObject *Sender); + void __fastcall QNProductoChange(TObject *Sender); + void __fastcall QNProductoKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + + void __fastcall QNProductoKeyUp(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall QUndsEnter(TObject *Sender); + void __fastcall QUndsExit(TObject *Sender); + void __fastcall DBGrid1Enter(TObject *Sender); + void __fastcall QCodigoEnter(TObject *Sender); + void __fastcall QCodigoExit(TObject *Sender); + void __fastcall QCodigoKeyPress(TObject *Sender, char &Key); + void __fastcall QPrecioKeyPress(TObject *Sender, char &Key); + void __fastcall QUndsKeyPress(TObject *Sender, char &Key); + void __fastcall QCodigoClick(TObject *Sender); + void __fastcall QIvaKeyDown(TObject *Sender, WORD &Key, + TShiftState Shift); + void __fastcall ElasticForm1AfterResize(TObject *Sender); + void __fastcall QUndsClick(TObject *Sender); + void __fastcall QPrecioEnter(TObject *Sender); + void __fastcall QPrecioExit(TObject *Sender); +private: // User declarations + TDlgBuscar *DlgBuscarProd; + + Currency SUMAcompraC, IVAcompraC; + + void __fastcall FicharTicket(void); + void __fastcall EfectuarCambio(void); + void __fastcall NuevaFacturaCliente(void); + // ## Cambiado 11/08/01 + // void __fastcall ActualizaStock( AnsiString CodProducto, float Cantidad ); + void __fastcall ActualizaStock( int CodProducto, float Cantidad ); + + void __fastcall ActualizaStockMultiple( int CodProducto, float Cantidad, TStringList *ListaCombinados ); + void __fastcall ActualizaTotales(void); + + int TerminalActual; + + Currency __fastcall GetPrecioVenta( TTable *Sender ); + + int QCodAux; + void __fastcall QRellenaDatos(int start); + void __fastcall ClearQuickControl(void); + + bool ActualizandoTOTALES; + +public: // User declarations + bool EsAlbaran, FocoRapido; + + Graphics::TBitmap *BtmOK; // Imagen OK! + void __fastcall AsignarNumFactura(void); + bool ImprimirTicket; + __fastcall TVentas(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern TVentas *Ventas; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvVntAlbPrint.cpp b/TpvVntAlbPrint.cpp new file mode 100644 index 0000000..d0c39c6 --- /dev/null +++ b/TpvVntAlbPrint.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntAlbPrint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "TpvVntFctPrint" +#pragma resource "*.dfm" +TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt1::TQRMDFacturaVnt1(TComponent* Owner) + : TQRMDFacturaVnt(Owner) +{ +} +//--------------------------------------------------------------------------- + diff --git a/TpvVntAlbPrint.dfm b/TpvVntAlbPrint.dfm new file mode 100644 index 0000000..6368372 Binary files /dev/null and b/TpvVntAlbPrint.dfm differ diff --git a/TpvVntAlbPrint.h b/TpvVntAlbPrint.h new file mode 100644 index 0000000..19d2637 --- /dev/null +++ b/TpvVntAlbPrint.h @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVntAlbPrintH +#define TpvVntAlbPrintH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "TpvVntFctPrint.h" +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TQRMDFacturaVnt1 : public TQRMDFacturaVnt +{ +__published: // IDE-managed Components +private: // User declarations +public: // User declarations + __fastcall TQRMDFacturaVnt1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvVntClt.cpp b/TpvVntClt.cpp new file mode 100644 index 0000000..afcb6cd --- /dev/null +++ b/TpvVntClt.cpp @@ -0,0 +1,51 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TpvVntClt.h" +#include "TpvVntCltQR.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "ElastFrm" +#pragma link "TpvVntGeneral" +#pragma resource "*.dfm" +TVntClt *VntClt; +//--------------------------------------------------------------------------- +__fastcall TVntClt::TVntClt(TComponent* Owner) + : TVntGeneral(Owner) +{ + ImpagFact->Visible = false; + TodasFact->Visible = false; + TabSheet2->Visible = false; + + CodCliente = "Cliente"; + TableFactName="Ventas"; + + TbVentasC->IndexName = "CodCliente (idx)"; + TbVentasC -> TableName = TableFactName+" (cabecera).db"; + TbVentasD -> TableName = TableFactName+" (cuerpo).db"; + + DBMemo1->Enabled = true; + DBMemo1->Visible = true; + Label3->Visible = true; + +#ifndef DEM001 + TbVentasD -> Active = true; +#endif + TbVentasC -> Active = true; + TbVentasF -> Active = true; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntClt::SpeedButton7Click(TObject *Sender) +{ + TVntCltQR *QR; + QR = new TVntCltQR(this); + QR->QuickRep1->DataSet = TbClientes; + QR->QRSubDetail1->DataSet = TbVentasC; + QR->QuickRep1->Preview(); + delete QR; +} +//--------------------------------------------------------------------------- + diff --git a/TpvVntClt.dfm b/TpvVntClt.dfm new file mode 100644 index 0000000..7ade978 --- /dev/null +++ b/TpvVntClt.dfm @@ -0,0 +1,23 @@ +inherited VntClt: TVntClt + Left = 70 + Top = 173 + Caption = 'VntClt' + PixelsPerInch = 96 + TextHeight = 16 + inherited TbVentasC: TTable + object TbVentasCCodCliente: TIntegerField [1] + FieldName = 'CodCliente' + end + object TbVentasCCodFactura: TIntegerField [2] + FieldName = 'CodFactura' + end + object TbVentasCImprimirNotas: TBooleanField + FieldName = 'ImprimirNotas' + end + object TbVentasCNotasFactura: TMemoField + FieldName = 'NotasFactura' + BlobType = ftMemo + Size = 1 + end + end +end diff --git a/TpvVntClt.h b/TpvVntClt.h new file mode 100644 index 0000000..f7c60b0 --- /dev/null +++ b/TpvVntClt.h @@ -0,0 +1,37 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvVntCltH +#define TpvVntCltH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "ElastFrm.hpp" +#include "TpvVntClt.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "TpvVntGeneral.h" +//--------------------------------------------------------------------------- +class TVntClt : public TVntGeneral +{ +__published: // IDE-managed Components + TIntegerField *TbVentasCCodFactura; + TBooleanField *TbVentasCImprimirNotas; + TMemoField *TbVentasCNotasFactura; + TIntegerField *TbVentasCCodCliente; + void __fastcall SpeedButton7Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TVntClt(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TVntClt *VntClt; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvVntCltQR.cpp b/TpvVntCltQR.cpp new file mode 100644 index 0000000..41f00e0 --- /dev/null +++ b/TpvVntCltQR.cpp @@ -0,0 +1,45 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntCltQR.h" +#include "TpvVntGeneral.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TVntCltQR *VntCltQR; +//--------------------------------------------------------------------- +__fastcall TVntCltQR::TVntCltQR(TComponent* AOwner) + : TForm(AOwner) +{ + My_AOwner = AOwner; +} +//--------------------------------------------------------------------- +void __fastcall TVntCltQR::DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand) +{ + TotalSin = 0; + TotalIVA = 0; +} +//--------------------------------------------------------------------------- + + +void __fastcall TVntCltQR::GroupFooterBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRTotalSin->Caption = FormatCurr("###,###,###.#0", TotalSin ); + QRTotalIva->Caption = FormatCurr("###,###,###.#0", TotalIVA ); + QRTotal->Caption = FormatCurr("###,###,###.#0", TotalSin + TotalIVA ); + +} +//--------------------------------------------------------------------------- +void __fastcall TVntCltQR::QRSubDetail1AfterPrint(TQRCustomBand *Sender, + bool BandPrinted) +{ + if ( BandPrinted ) + { + TotalSin += QRSubDetail1->DataSet->FieldByName("TotalSin")->AsCurrency; + TotalIVA += QRSubDetail1->DataSet->FieldByName("TotalIva")->AsCurrency; + } +} +//--------------------------------------------------------------------------- + diff --git a/TpvVntCltQR.dfm b/TpvVntCltQR.dfm new file mode 100644 index 0000000..972153c Binary files /dev/null and b/TpvVntCltQR.dfm differ diff --git a/TpvVntCltQR.h b/TpvVntCltQR.h new file mode 100644 index 0000000..e20c49d --- /dev/null +++ b/TpvVntCltQR.h @@ -0,0 +1,64 @@ +//---------------------------------------------------------------------------- +#ifndef TpvVntCltQRH +#define TpvVntCltQRH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TVntCltQR : public TForm +{ +__published: + TQuickRep *QuickRep1; + TQRBand *DetailBand1; + TQRBand *PageFooterBand1; + TQRBand *TitleBand1; + TQRBand * ColumnHeaderBand1; + TQRSysData *QRTitle; + TQRSysData *QRSysData2; + TQRSubDetail *QRSubDetail1; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRShape *QRShape3; + TQRExpr *QRExpr1; + TQRExpr *QRExpr2; + TQRExpr *QRExpr3; + TQRExpr *QRExpr5; + TQRExpr *QRExpr6; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRBand *GroupFooterBand1; + TQRShape *QRShape5; + TQRLabel *QRTotalSin; + TQRLabel *QRTotalIva; + TQRLabel *QRTotal; + void __fastcall DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + void __fastcall GroupFooterBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + void __fastcall QRSubDetail1AfterPrint(TQRCustomBand *Sender, + bool BandPrinted); +private: + Currency TotalSin, TotalIVA; + TComponent* My_AOwner; +public: + virtual __fastcall TVntCltQR(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TVntCltQR *VntCltQR; +//---------------------------------------------------------------------------- +#endif diff --git a/TpvVntEmpl.cpp b/TpvVntEmpl.cpp new file mode 100644 index 0000000..8b056c7 --- /dev/null +++ b/TpvVntEmpl.cpp @@ -0,0 +1,52 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "TpvVntEmpl.h" +#include "TpvVntCltQR.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "ElastFrm" +#pragma link "TpvVntGeneral" +#pragma resource "*.dfm" +TVntEmpl *VntEmpl; +//--------------------------------------------------------------------------- +__fastcall TVntEmpl::TVntEmpl(TComponent* Owner) + : TVntGeneral(Owner) +{ + ImpagFact->Visible = false; + TodasFact->Visible = false; + TabSheet2->Visible = false; + + CodCliente = "Empleado"; + TableFactName="Ventas"; + + TbVentasC->IndexName = "CodEmpleado (idx)"; + TbVentasC -> TableName = TableFactName+" (cabecera).db"; + TbVentasD -> TableName = TableFactName+" (cuerpo).db"; + + DBMemo1->Enabled = true; + DBMemo1->Visible = true; + Label3->Visible = true; + +#ifndef DEM001 + TbVentasD -> Active = true; +#endif + TbVentasC -> Active = true; + TbVentasF -> Active = true; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntEmpl::SpeedButton7Click(TObject *Sender) +{ + TVntCltQR *QR; + QR = new TVntCltQR(this); + QR->QuickRep1->ReportTitle = "Venta por empleado"; + QR->QuickRep1->DataSet = TbClientes; + QR->QRSubDetail1->DataSet = TbVentasC; + QR->QuickRep1->Preview(); + delete QR; +} +//--------------------------------------------------------------------------- + diff --git a/TpvVntEmpl.dfm b/TpvVntEmpl.dfm new file mode 100644 index 0000000..9dbd11f --- /dev/null +++ b/TpvVntEmpl.dfm @@ -0,0 +1,36 @@ +inherited VntEmpl: TVntEmpl + Left = 262 + Top = 259 + Caption = 'Ventas de los empleados' + PixelsPerInch = 96 + TextHeight = 16 + inherited TbVentasC: TTable + object TbVentasCCodFactura: TIntegerField [1] + FieldName = 'CodFactura' + end + object TbVentasCImprimirNotas: TBooleanField + FieldName = 'ImprimirNotas' + end + object TbVentasCNotasFactura: TMemoField + FieldName = 'NotasFactura' + BlobType = ftMemo + Size = 1 + end + end + inherited TbClientes: TQuery + SQL.Strings = ( + + 'SELECT VentasCabecera.CodCliente ID, Personas.Nombre, Personas.E' + + 'mpresa, SUM( VentasCabecera.TotalSin + VentasCabecera.TotalIva ' + + ' ) VentasCabecera."Total Fact."' + 'FROM "Ventas (cabecera).db" VentasCabecera' + ' INNER JOIN "personas.DB" Personas' + ' ON (VentasCabecera.CodCliente = Personas.CodCliente1) ' + 'WHERE (VentasCabecera.FechaFactura >= '#39'01/01/2001'#39') ' + ' AND (VentasCabecera.FechaFactura <= '#39'03/03/2001'#39') ' + + 'GROUP BY VentasCabecera.CodCliente, Personas.Nombre, Personas.Em' + + 'presa' + 'ORDER BY VentasCabecera."Total Fact." DESC') + end +end diff --git a/TpvVntEmpl.h b/TpvVntEmpl.h new file mode 100644 index 0000000..7517c09 --- /dev/null +++ b/TpvVntEmpl.h @@ -0,0 +1,35 @@ +//--------------------------------------------------------------------------- + +#ifndef TpvVntEmplH +#define TpvVntEmplH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" +#include "TpvVntGeneral.h" +//--------------------------------------------------------------------------- +class TVntEmpl : public TVntGeneral +{ +__published: // IDE-managed Components + TIntegerField *TbVentasCCodFactura; + TBooleanField *TbVentasCImprimirNotas; + TMemoField *TbVentasCNotasFactura; + void __fastcall SpeedButton7Click(TObject *Sender); +private: // User declarations +public: // User declarations + __fastcall TVntEmpl(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TVntEmpl *VntEmpl; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvVntFctPrint.cpp b/TpvVntFctPrint.cpp new file mode 100644 index 0000000..8701a13 --- /dev/null +++ b/TpvVntFctPrint.cpp @@ -0,0 +1,71 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntFctPrint.h" +#include "TpvVentas.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRMDFacturaVnt *QRMDFacturaVnt; +//--------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt::TQRMDFacturaVnt(TComponent* AOwner) + : TQuickRep(AOwner) +{ + TbProductos->Active = true; + TbCircular->Active = true; + TbVntCabecera->Active = true; + TbClt->Active = true; + TbVntLineas->Active = true; + try { + QRImage4->Picture->LoadFromFile("systm\\bannerFACT.bmp"); + } catch(...) { + //nothing + } +} +//--------------------------------------------------------------------- +void __fastcall TQRMDFacturaVnt::TitleBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ char Caracter; + if ( TbClt->FieldByName( "DocumentoDNP" )->AsString.IsEmpty() ) Caracter = '0'; else + Caracter = (TbClt->FieldByName( "DocumentoDNP" )->AsString)[1]; + + if ( !(Caracter >= '0' && Caracter <= '9') ) + + LblNombre->Caption = TbClt->FieldByName( "Empresa" )->AsString; + else + LblNombre->Caption = TbClt->FieldByName( "Apellidos" )->AsString + ", " + TbClt->FieldByName( "Nombre" )->AsString; + LblDir->Caption = TbClt->FieldByName( "Calle" )->AsString + ", " + TbClt->FieldByName( "Num" )->AsString + TbClt->FieldByName( "Piso" )->AsString + TbClt->FieldByName( "Letra" ) -> AsString; + LblCP->Caption = "CP: " + TbClt->FieldByName( "CP" )->AsString + " " + TbClt->FieldByName( "Población" ) ->AsString + ", (" + TbClt->FieldByName("Provincia")->AsString+")"; +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TQRMDFacturaVnt::PageFooterBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRTotal->Caption = FormatCurr("###,###,###.#0", TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency ); + QRLabel16->Caption = FormatCurr("###,###,###.#0 €", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + QRLabel17->Caption = FormatCurr("###,###,###.#0 €", (TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + QRLabel18->Caption = FormatCurr("###,###,###.#0 €", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency)/166.386 ); +} +//--------------------------------------------------------------------------- + + +void __fastcall TQRMDFacturaVnt::DetailBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRDBText9->Mask = TbVntLineas->FieldByName("PrecioC")->AsInteger == 0 ? "#" : "###,###,###.#0"; + if ( TbVntLineas->FieldByName("PrecioC")->AsInteger == 0 || + TbVntLineas->FieldByName("Cantidad")->AsInteger == 0 ) + { + QRExpr4->Mask = "#"; + QRExpr1->Mask = "#"; + } else { + QRExpr4->Mask = "###,###,###.#0"; + QRExpr1->Mask = "###,###,###.#0"; + } +} +//--------------------------------------------------------------------------- + diff --git a/TpvVntFctPrint.dfm b/TpvVntFctPrint.dfm new file mode 100644 index 0000000..ee971c9 Binary files /dev/null and b/TpvVntFctPrint.dfm differ diff --git a/TpvVntFctPrint.h b/TpvVntFctPrint.h new file mode 100644 index 0000000..bd65d97 --- /dev/null +++ b/TpvVntFctPrint.h @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------------- +#ifndef TpvVntFctPrintH +#define TpvVntFctPrintH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRMDFacturaVnt : public TQuickRep +{ +__published: + TQRBand *PageFooterBand1; + TQRBand *TitleBand1; + TQRBand * ColumnHeaderBand1; + TQRSubDetail *QRSubDetail1; + TQRImage *QRImage2; + TQRImage *QRImage3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRDBText *QRDBText1; + TQRShape *QRShape1; + TQRDBText *QRDBText2; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRShape *QRShape2; + TQRDBText *QRDBText3; + TQRDBText *QRDBText6; + TQRImage *QRImage1; + TQRDBText *QRDBText10; + TQRDBText *QRDBText11; + TQRDBText *QRDBText13; + TQRBand *DetailBand1; + TQRLabel *QRLabel1; + TQRLabel *QRLabel10; + TQRLabel *QRLabel11; + TQRLabel *QRLabel12; + TQRLabel *QRLabel13; + TQRLabel *QRLabel14; + TQRDBText *QRDBText4; + TQRDBText *QRDBText5; + TQRDBText *QRDBText7; + TQRDBText *QRDBText8; + TQRDBText *QRDBText9; + TTable *TbCircular; + TTable *TbProductos; + TDataSource *DsCircular; + TTable *TbVntCabecera; + TTable *TbVntLineas; + TDataSource *DsVntCabecera; + TDataSource *DsVntLineas; + TTable *TbClt; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRLabel *LblNombre; + TQRLabel *LblDir; + TQRLabel *LblCP; + TQRImage *QRImage4; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel15; + TQRDBText *QRDBText12; + TQRDBText *QRDBText14; + TQRLabel *QRTotal; + TQRShape *zMarcoIzq; + TQRShape *zMarcoDer; + TQRShape *QRShape3; + TQRShape *QRShape5; + TQRShape *QRShape6; + TQRShape *QRShape7; + TQRShape *QRShape8; + TQRShape *QRShape9; + TQRShape *QRShape10; + TQRExpr *QRExpr1; + TQRLabel *QRLabel16; + TQRLabel *QRLabel17; + TQRLabel *QRLabel18; + void __fastcall TitleBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall PageFooterBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + void __fastcall DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: +public: + virtual __fastcall TQRMDFacturaVnt(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt *QRMDFacturaVnt; +//---------------------------------------------------------------------------- +#endif diff --git a/TpvVntGeneral.cpp b/TpvVntGeneral.cpp new file mode 100644 index 0000000..a4298d1 --- /dev/null +++ b/TpvVntGeneral.cpp @@ -0,0 +1,356 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#include "TpvVntGeneral.h" +#include "TpvVntCltQR.h" +#include "TDlgBuscar.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "ElastFrm" +#pragma resource "*.dfm" +TVntGeneral *VntGeneral; +//--------------------------------------------------------------------------- +__fastcall TVntGeneral::TVntGeneral(TComponent* Owner) + : TForm(Owner) +{ + MinFechaFact = TDateTime::CurrentDate(); + MaxFechaFact = TDateTime::CurrentDate(); + + // Cargamos la imagen OK! + try { + BtmOK = new Graphics::TBitmap(); + BtmOK -> LoadFromFile( "Systm\\ok.bmp" ); + + BtmLockOpen = new Graphics::TBitmap(); + BtmLockOpen -> LoadFromFile( "Systm\\lockopen.bmp" ); + + BtmLockShut = new Graphics::TBitmap(); + BtmLockShut -> LoadFromFile( "Systm\\lockshut.bmp" ); + + } catch (...) { + ShowMessage( "Error: La imagen OK! está corrupta" ); + } + + + MinFecha -> DateTime = MinFechaFact; + MaxFecha -> DateTime = MaxFechaFact; + + // La cabecera/cuerpo de ventas se generan uno por año... + TbEmpl -> Active = true; + + FirstTime = true; +} +//--------------------------------------------------------------------------- + + +void __fastcall TVntGeneral::MinFechaChange(TObject *Sender) +{ + MaxFechaFact = MaxFecha -> Date; + + // Reajustamos el filtro... + MinFechaFact = MinFecha -> Date; + FiltrarFacturas(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::MaxFechaChange(TObject *Sender) +{ + MinFechaFact = MinFecha -> Date; + + // Reajustamos el filtro... + MaxFechaFact = MaxFecha -> Date; + FiltrarFacturas(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::SpeedButton1Click(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::FiltrarFacturas(void) +{ + TbClientes->Close(); + TbClientes->Active = true; + + // Filtramos las facturas... + TbVentasC->FilterOptions = TbVentasC->FilterOptions << foCaseInsensitive; + TbVentasC->Filter = "([FechaFactura] >= '" + MinFechaFact + "' AND [FechaFactura] <= '" + MaxFechaFact +"')"; + TbVentasC->Filtered = true; +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::DBGrid3DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + // Verde ] si el albaran/factura esta abiert@ + // Rojo ] los abonos o albaranes con perdidas + if ( ! State.Contains(gdSelected) ) + { + if ( TbVentasCFacturaAbierta -> AsInteger > 0 ) + { + DBGrid3 -> Canvas -> Font -> Color = clGreen; + } else { + if ( TbVentasC->FieldByName("TotalSin")->AsCurrency < 0 ) + DBGrid3 -> Canvas -> Font -> Color = clRed; + } + DBGrid3 -> DefaultDrawColumnCell( Rect, DataCol, Column, State ); + } + if ( Column -> ID == 0 ) + { + if ( TbVentasC->FieldByName("Contabilizada")->AsBoolean ) + DBGrid3->Canvas->StretchDraw( Rect, BtmLockShut ); + else + DBGrid3->Canvas->StretchDraw( Rect, BtmLockOpen ); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::FormActivate(TObject *Sender) +{ + if ( FirstTime ) + FiltrarFacturas(); + FirstTime = false; +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::ImpagFactClick(TObject *Sender) +{ + TodasFact->Enabled = true; + ImpagFact->Enabled = false; + + MinFecha->Enabled = false; + MaxFecha->Enabled = false; + + FiltrarFacturas(); + + PageControl1->ActivePage = (TTabSheet *)TabSheet2; +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::TodasFactClick(TObject *Sender) +{ +#ifdef DEM001 + ShowMessage( "Esta función ha sido deshabilitada para esta versión.\nPongase en contacto con el autor, si desea\nel módulo correspondiente: Jose-David.Guillen@cs.us.es" ); +#else + TodasFact->Enabled = false; + ImpagFact->Enabled = true; + + MinFecha->Enabled = true; + MaxFecha->Enabled = true; + + // Atencion refiltrar base de datos + FiltrarFacturas(); +#endif +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::dbgFraccionDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State) +{ + if ( Column -> ID == 0 ) + { + if ( TbCartera->FieldByName("Pagado")->AsBoolean ) + { + dbgFraccion->Canvas->StretchDraw( Rect, BtmOK ); + } else { + dbgFraccion->Canvas->Brush->Color = clWindow; + dbgFraccion->Canvas->FillRect( Rect ); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::dbgFraccionCellClick(TColumn *Column) +{ + bool Pagado; + + if ( Column -> ID == 0 ) + { + if ( TbVentasCFacturaAbierta -> AsInteger > 0 ) + { + ShowMessage( "Atención: La factura actual esta abierta en algún\nterminal. Cierrela antes de intentar modificarla."); + } else { + Pagado = TbCartera->FieldByName("Pagado")->AsBoolean; + if ( Pagado ) + if( MessageDlg( "Atención, está apunto de desactivar el\npago correspondiente a esta línea...\n¿Realmente desea continuar?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) == mrNo ) + return; + TbCartera -> Edit(); + TbCartera -> FieldByName("Pagado") -> AsBoolean = !Pagado; + TbCartera -> Post(); + } + } +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::FormClose(TObject *Sender, TCloseAction &Action) +{ + // Destruimos la imagen de OK! + delete BtmOK; + delete BtmLockOpen; + delete BtmLockShut; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::TbVentasCCalcFields(TDataSet *DataSet) +{ + TbVentasC->FieldByName("SumaTotal")->AsCurrency = TbVentasC->FieldByName("TotalSin")->AsCurrency + TbVentasC->FieldByName("TotalIva")->AsCurrency; +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::DsVentasCDataChange(TObject *Sender, + TField *Field) +{ + cbFormaPago->ItemIndex = TbCartera->FieldByName("FormaPago")->AsInteger; +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::TbClientesBeforeOpen(TDataSet *DataSet) +{ + TbClientes->SQL->Clear(); + + if ( TodasFact->Enabled ) + { + // SOLO LOS CLIENTES QUE TENGAN FACTURAS IMPAGADAS.... + TbClientes->SQL->Add( "SELECT DISTINCT VentasCabecera.Cod"+CodCliente+" ID, ((Personas.Nombre+', ')+Personas.Apellidos) Nombre, Personas.Empresa " ); + TbClientes->SQL->Add( "FROM \"personas.DB\" Personas, \""+TbCartera->TableName+"\" Tb_cartera, \""+TbVentasC->TableName+"\" VentasCabecera" ); + TbClientes->SQL->Add( "WHERE (Tb_cartera.Pagado = FALSE)"); + TbClientes->SQL->Add( " AND (Tb_cartera.EnlaceFactura = VentasCabecera.EnlaceFactura)"); + TbClientes->SQL->Add( " AND (Personas.CodCliente1 = VentasCabecera.Cod"+CodCliente+")"); + } else { + TbClientes->SQL->Add( "SELECT DISTINCT VentasCabecera.Cod"+CodCliente+" ID, Personas.Nombre, Personas.Apellidos, Personas.Empresa, SUM( VentasCabecera.TotalSin + VentasCabecera.TotalIva ) VentasCabecera.\"Total Fact.\" " ); + TbClientes->SQL->Add( "FROM \""+TbVentasC->TableName+"\" VentasCabecera" ); + TbClientes->SQL->Add( " INNER JOIN \"personas.DB\" Personas"); + TbClientes->SQL->Add( " ON (VentasCabecera.Cod"+CodCliente+" = Personas.CodCliente1)"); + TbClientes->SQL->Add( "WHERE (VentasCabecera.FechaFactura >= '"+MinFechaFact.FormatString("mm/dd/yyyy")+"') \ + AND (VentasCabecera.FechaFactura <= '"+MaxFechaFact.FormatString("mm/dd/yyyy")+"') "); + TbClientes->SQL->Add( "GROUP BY VentasCabecera.Cod"+CodCliente+", Personas.Nombre, Personas.Apellidos, Personas.Empresa"); + TbClientes->SQL->Add( "ORDER BY VentasCabecera.\"Total Fact.\" DESC"); + +/* +SELECT DISTINCT VentasCabecera.CodCliente CodCliente1, ((Personas.Nombre+', ')+Personas.Apellidos) Nombre, Personas.Empresa +FROM "Ventas (cabecera).db" VentasCabecera, "personas.DB" Personas +WHERE (VentasCabecera.FechaFactura >= '01/27/2001') + AND (VentasCabecera.FechaFactura <= '01/27/2001') + AND (VentasCabecera.CodCliente = Personas.CodCliente1) + +*/ + } +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::TbCarteraBeforeDelete(TDataSet *DataSet) +{ + Abort(); +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::TbCarteraBeforeInsert(TDataSet *DataSet) +{ + Abort(); +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::FormResize(TObject *Sender) +{ + if ( DBGrid3->Columns->Items[0]->Width != 16 ) + DBGrid3->Columns->Items[0]->Width = 16; +} +//--------------------------------------------------------------------------- +void __fastcall TVntGeneral::SpeedButton7Click(TObject *Sender) +{ +/* + TVntCltQR *QR; + QR = new TVntCltQR(this); + QR->QuickRep1->Preview(); + delete QR; +*/ +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::DBGrid3DblClick(TObject *Sender) +{ + + + if ( ! TbVentasF -> Active ) return; + + + // Si no esta facturada... + if ( ! TbVentasC->FieldByName("Contabilizada")->AsBoolean ) + { + VTabs[0] = TabSheet1->Visible; + VTabs[1] = TabSheet2->Visible; + TabSheet1->Visible = false; + TabSheet2->Visible = false; + TabSheet3->Visible = true; + // Mostrar la posibilidad de facturar + // cambiar el cliente asignado + // o ambas cosas + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::Button2Click(TObject *Sender) +{ + TabSheet1->Visible = VTabs[0]; + TabSheet2->Visible = VTabs[1]; + TabSheet3->Visible = false; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::Button1Click(TObject *Sender) +{ + TbVentasC -> Edit(); + + if ( Facturar->Checked ) + { + if ( TbVentasF -> Active ) + { + TbVentasF->Last(); + int NumFactura; + NumFactura = TbVentasF->FieldByName( "idF" )->AsInteger + 1; + TbVentasF->InsertRecord( ARRAYOFCONST( ( NumFactura, TbVentasC->FieldByName( "EnlaceFactura" )->AsInteger, true ) ) ); + + if ( NewClient != -1 ) + TbVentasC -> FieldByName( "CodCliente" ) -> AsInteger = NewClient; + TbVentasC -> FieldByName( "CodFactura" ) -> AsInteger = NumFactura; + TbVentasC -> FieldByName( "FechaFactura" ) -> AsDateTime = TDateTime::CurrentDate(); + } + TbVentasC -> FieldByName("Contabilizada")->AsBoolean = true; + } + + TbVentasC -> Post(); + + Button2Click(0); +} +//--------------------------------------------------------------------------- + + +void __fastcall TVntGeneral::SpeedButton9Click(TObject *Sender) +{ + // Mostramos la zona de busqueda de clientes... + // Mostramos el dialogo, buscar Vendedores + TDlgBuscar *DlgBuscar; + + DlgBuscar = new TDlgBuscar(this); + DlgBuscar -> DefaultField = "Nombre"; + DlgBuscar -> TbBusquedas -> TableName = "personas.DB"; + DlgBuscar -> TbBusquedas -> Active = true; + + DlgBuscar -> ShowModal(); + + if ( DlgBuscar -> ModalResult == mrOk ) + { + Label12->Caption = DlgBuscar -> TbBusquedas -> FieldByName("Nombre")->AsString + " " + + DlgBuscar -> TbBusquedas -> FieldByName("Apellidos")->AsString; + NewClient = DlgBuscar -> TbBusquedas -> FieldByName("CodCliente1" ) -> AsInteger; + } + + delete DlgBuscar; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntGeneral::TabSheet3Enter(TObject *Sender) +{ + + NewClient = -1; + Label12->Caption = "(sin cambios)"; + + Label11->Caption = "(sin cambios)"; +} +//--------------------------------------------------------------------------- + + diff --git a/TpvVntGeneral.dfm b/TpvVntGeneral.dfm new file mode 100644 index 0000000..f31a4c8 Binary files /dev/null and b/TpvVntGeneral.dfm differ diff --git a/TpvVntGeneral.h b/TpvVntGeneral.h new file mode 100644 index 0000000..27a5440 --- /dev/null +++ b/TpvVntGeneral.h @@ -0,0 +1,161 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVntGeneralH +#define TpvVntGeneralH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" +//--------------------------------------------------------------------------- +class TVntGeneral : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TDBGrid *DBGrid1; + TDataSource *DsCliente; + TSplitter *Splitter1; + TDataSource *DsVentasD; + TTable *TbVentasD; + TAutoIncField *TbVentasDMaintenedForced; + TIntegerField *TbVentasDEnlaceFactura; + TStringField *TbVentasDCodProducto; + TStringField *TbVentasDNombreProducto; + TSmallintField *TbVentasDIVA; + TCurrencyField *TbVentasDPrecioC; + TCurrencyField *TbVentasDSubTotal; + TTable *TbVentasC; + TAutoIncField *TbVentasCEnlaceFactura; + TDateField *TbVentasCFechaFactura; + TDataSource *DsVentasC; + TPageControl *PageControl1; + TTabSheet *TabSheet1; + TTabSheet *TabSheet2; + TDBGrid *DBGrid2; + TSplitter *Splitter2; + TDBGrid *DBGrid3; + TTable *TbEmpl; + TStringField *TbVentasCEmplNombre; + TStringField *TbVentasCEmplApellidos; + TPanel *Panel1; + TDateTimePicker *MinFecha; + TDateTimePicker *MaxFecha; + TLabel *Label1; + TLabel *Label2; + TSpeedButton *SpeedButton1; + TSpeedButton *SpeedButton2; + TSpeedButton *SpeedButton3; + TSpeedButton *SpeedButton4; + TSpeedButton *SpeedButton5; + TSpeedButton *SpeedButton6; + TSpeedButton *ImpagFact; + TSpeedButton *TodasFact; + TPanel *Panel2; + TLabel *Label3; + TDBMemo *DBMemo1; + TSplitter *Splitter3; + TDBGrid *dbgFraccion; + TTable *TbCartera; + TIntegerField *TbCarteraEnlaceFactura; + TDateField *TbCarteraFecha; + TCurrencyField *TbCarteraImporte; + TCurrencyField *TbCarteraIncremento; + TSmallintField *TbCarteraFormaPago; + TBooleanField *TbCarteraPagado; + TCurrencyField *TbCarteraTotal; + TDataSource *DsCartera; + TComboBox *cbFormaPago; + TLabel *Label4; + TLabel *Label5; + TLabel *Label6; + TLabel *Label7; + TLabel *Label8; + TDBText *DBText1; + TCurrencyField *TbVentasCTotalSin; + TCurrencyField *TbVentasCTotalIva; + TDateField *TbVentasCUltimoPago; + TCurrencyField *TbVentasCTotalFrac; + TSmallintField *TbVentasCNumeroPagos; + TSmallintField *TbVentasCFormaPago; + TBooleanField *TbVentasCContabilizada; + TDBText *DBText2; + TDBText *DBText3; + TDBText *DBText4; + TCurrencyField *TbVentasCSumaTotal; + TQuery *TbClientes; + TFloatField *TbVentasDCantidad; + TIntegerField *TbVentasCCodEmpleado; + TSpeedButton *SpeedButton7; + TSmallintField *TbVentasCFacturaAbierta; + TTabSheet *TabSheet3; + TLabel *Label9; + TLabel *Label10; + TButton *Button1; + TButton *Button2; + TSpeedButton *SpeedButton8; + TSpeedButton *SpeedButton9; + TCheckBox *Facturar; + TTable *TbVentasF; + TLabel *Label11; + TLabel *Label12; + + void __fastcall MinFechaChange(TObject *Sender); + void __fastcall MaxFechaChange(TObject *Sender); + + void __fastcall SpeedButton1Click(TObject *Sender); + void __fastcall DBGrid3DrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall FormActivate(TObject *Sender); + void __fastcall ImpagFactClick(TObject *Sender); + void __fastcall TodasFactClick(TObject *Sender); + void __fastcall dbgFraccionDrawColumnCell(TObject *Sender, + const TRect &Rect, int DataCol, TColumn *Column, + TGridDrawState State); + void __fastcall dbgFraccionCellClick(TColumn *Column); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall TbVentasCCalcFields(TDataSet *DataSet); + + void __fastcall DsVentasCDataChange(TObject *Sender, TField *Field); + + + void __fastcall TbClientesBeforeOpen(TDataSet *DataSet); + void __fastcall TbCarteraBeforeDelete(TDataSet *DataSet); + void __fastcall TbCarteraBeforeInsert(TDataSet *DataSet); + + + void __fastcall FormResize(TObject *Sender); + void __fastcall SpeedButton7Click(TObject *Sender); + void __fastcall DBGrid3DblClick(TObject *Sender); + void __fastcall Button2Click(TObject *Sender); + void __fastcall Button1Click(TObject *Sender); + void __fastcall SpeedButton9Click(TObject *Sender); + void __fastcall TabSheet3Enter(TObject *Sender); +private: // User declarations + void __fastcall FiltrarFacturas(void); + bool FirstTime; + Graphics::TBitmap *BtmOK; // Imagen OK! + Graphics::TBitmap *BtmLockOpen; + Graphics::TBitmap *BtmLockShut; + + int NewClient; +public: // User declarations + AnsiString CodCliente, TableFactName; + TDateTime MinFechaFact, MaxFechaFact; + __fastcall TVntGeneral(TComponent* Owner); + bool VTabs[2]; +}; +//--------------------------------------------------------------------------- +extern PACKAGE TVntGeneral *VntGeneral; +//--------------------------------------------------------------------------- +#endif diff --git a/TpvVntProd.cpp b/TpvVntProd.cpp new file mode 100644 index 0000000..d5674b5 --- /dev/null +++ b/TpvVntProd.cpp @@ -0,0 +1,588 @@ +//--------------------------------------------------------------------------- +#include +#include + + +#pragma hdrstop + +#include "TpvVntProd.h" +#include "TpvCFG.h" +#include "TpvVntProdQR.h" + +//--------------------------------------------------------------------------- +#pragma link "Grids" +#pragma link "ElastFrm" +#pragma resource "*.dfm" + +TVntProd *VntProd; +//--------------------------------------------------------------------------- +__fastcall TVntProd::TVntProd(TComponent* Owner) + : TForm(Owner) +{ + CantidadTotal = new Currency [48]; + BeneficioTotal = new Currency [48]; + + IamOpening = true; + + // Inicializamos la fecha de compra ( Y el filtro, en base a esta... ) + unsigned short year, mes, dia; + ( TDateTime::CurrentDate() ).DecodeDate( &year, &mes, &dia ); + + TbProdTmp -> TableName = "ProdTMP vnt" + AnsiString(".db"); + #ifdef TB_DISCONTINUAS + TbVentasC -> TableName = "Ventas (cabecera) '"+ AnsiString(year) +AnsiString(".db"); + TbVentasD -> TableName = "Ventas (cuerpo) '"+ AnsiString(year) +AnsiString(".db"); + #else + TbVentasC -> TableName = "Ventas (cabecera).db"; + TbVentasD -> TableName = "Ventas (cuerpo).db"; + #endif + + MinFechaFact = TDateTime::CurrentDate(); + MaxFechaFact = TDateTime::CurrentDate(); + TbProductos -> Active = true; + TbVentasC->Active = true; + TbVentasD->Active = true; + + MinFecha -> Date = MinFechaFact; + MaxFecha -> Date = MaxFechaFact; + + FiltrarFacturas(); +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::CerrarAplicClick(TObject *Sender) +{ + Close(); +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::TbProductosAfterOpen(TDataSet *DataSet) +{ + TTreeNode * NuevoNodo; + union + { + int Familia; // 0x01020304 + char Fam[4]; // 0 1 2 3 + } FamC; + + int N, MascaraComp; + + // Deshabilitamos los controles... + TbProductos -> DisableControls(); + + // Reconstrucción del arbol... + TbProductos -> First(); + while ( ! TbProductos -> Eof ) + { + // Si es parte del arbol... + if ( TbProductos -> FieldByName("EsNodo") -> Value == -1 ) + { + FamC . Familia = TbProductos -> FieldByName("Familia") -> AsInteger; + + // Si es raiz, lo creamos directamente + if ( FamC . Fam[3-1] != 0 ) + { + // De lo contrario, buscamos su posición NATURAL dentro del arbol. + ////////////////////////////////////////////////////////////////// + // Contruimos la mascara de comparación... + if ( FamC . Fam[3-2] == 0 ) + MascaraComp = FamC . Familia & 0xFF000000; + else + if ( FamC . Fam[3-3] == 0 ) + MascaraComp = FamC . Familia & 0xFFFF0000; + else + MascaraComp = FamC . Familia & 0xFFFFFF00; + N = 2; + while ( N < Indices -> Items -> Count ) + { + if ( ((int *)Indices -> Items -> Item[N] -> Data ) [0] == MascaraComp ) + { + // Añadimos un nuevo nodo al primer nivel en que nos quedamos + NuevoNodo = Indices->Items->AddChild( Indices -> Items -> Item[N], TbProductos -> FieldByName("Nombre del Producto") -> Value ); + NuevoNodo -> Data = new int [3]; + + ((int *)NuevoNodo -> Data)[0] = FamC . Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + ((int *)NuevoNodo -> Data)[2] = TbProductos -> FieldByName("ForcedIndex") -> AsInteger; + + + break; + } else + N++; + } + } else { + // Añadimos un nuevo nodo al primer nivel en que nos quedamos + NuevoNodo = Indices->Items->Add( Indices -> Items -> Item[0], TbProductos -> FieldByName("Nombre del Producto") -> Value ); + NuevoNodo -> Data = new int [3]; + + ((int *)NuevoNodo -> Data)[0] = FamC . Familia; + ((int *)NuevoNodo -> Data)[1] = 0; + ((int *)NuevoNodo -> Data)[2] = TbProductos -> FieldByName("ForcedIndex") -> AsInteger; + } + } + // Avanzamos al siguiente registro + TbProductos -> Next(); + } + + + N = 2; + while ( N < Indices -> Items -> Count ) + { + // Establecemos las imágenes (Por defecto es documento final) + if ( Indices -> Items -> Item[N] -> HasChildren ) + { + Indices -> Items -> Item[N]->ImageIndex = 0; + Indices -> Items -> Item[N]->SelectedIndex = 0; + } else { + Indices -> Items -> Item[N]->ImageIndex = 2; + Indices -> Items -> Item[N]->SelectedIndex = 2; + } + N++; + } + ///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// + // ATENCIÖN, LA SIGUIENTE LINEA ES POR UN BUG DETECTADO EN EL TREEVIEW // + ///////////////////////////////////////////////////////////////////////// + NuevoNodo = Indices->Items->AddChild( Indices -> Items -> Item[0], "Bug TTreeView 1.1 Fixed" ); + Indices -> Items -> Delete( NuevoNodo ); + ///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// + + Indices -> Selected = Indices -> Items -> Item[1]; +// Indices -> Items -> Item[0] -> Selected = true; + + // Rehabilitamos los controles... + TbProductos -> EnableControls(); + +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::MinFechaChange(TObject *Sender) +{ + MaxFechaFact = MaxFecha -> Date; + + // Reajustamos el filtro... + MinFechaFact = MinFecha -> Date; + FiltrarFacturas(); + +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::MaxFechaChange(TObject *Sender) +{ + MinFechaFact = MinFecha -> Date; + // Reajustamos el filtro... + MaxFechaFact = MaxFecha -> Date; + FiltrarFacturas(); + +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::FiltrarFacturas(void) +{ + // Filtramos las facturas... + TbProdTmp -> Active = false; + TbProdTmp -> Filtered = false; + + TbVentasC->FilterOptions = TbVentasC->FilterOptions << foCaseInsensitive; + TbVentasC->Filter = "([FechaFactura] >= '" + MinFechaFact + "' AND [FechaFactura] <= '" + MaxFechaFact +"')"; + TbVentasC->Filtered = true; + + TbProdTmp -> Active = true; // Forzamos el recrear la base + IndicesChange( 0, 0 ); +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::IndicesExpanding(TObject *Sender, + TTreeNode *Node, bool &AllowExpansion) +{ + // Si el nodo es padre + if ( Node -> HasChildren ) + { + // Usamos las imágenes de los libros abiertos + Node->ImageIndex = 1; + Node->SelectedIndex = 1; + } else { + // Usamos las imágenes de los documentos + Node->ImageIndex = 2; + Node->SelectedIndex = 2; + } +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::IndicesCollapsing(TObject *Sender, + TTreeNode *Node, bool &AllowCollapse) +{ + // Si el nodo es padre + if ( Node -> HasChildren ) + { + // Restauramos las imágenes originales + Node->ImageIndex = 0; + Node->SelectedIndex = 0; + } else { + // Un nodo no padre NO puede ser CONTRAIDO + // Usamos las imágenes de los documentos + Node->ImageIndex = 2; + Node->SelectedIndex = 2; + } + +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::IndicesDeletion(TObject *Sender, TTreeNode *Node) +{ + delete [] Node -> Data; +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::TbProdTmpBeforeOpen(TDataSet *DataSet) +{ + AnsiString FileEmp, Cantidad; + + FileEmp = TbProdTmp -> TableName; + + // Establecemos la ruta + TbProdTmp -> DatabaseName = "TpvWin"; + // Facilitamos el nombre de la nueva tabla y su tipo + TbProdTmp -> TableType = ttParadox; + + // Usamos la propiedad FielDefs para definir + // las columnas que contendrá la tabla + TbProdTmp -> FieldDefs -> Clear(); + TbProdTmp -> FieldDefs -> Add("Familia0", ftInteger, 0, false ); + TbProdTmp -> FieldDefs -> Add("Familia1", ftInteger, 0, false ); + TbProdTmp -> FieldDefs -> Add("CodForced", ftInteger, 0, false ); + TbProdTmp -> FieldDefs -> Add("CodProducto", ftString, 15, false ); + TbProdTmp -> FieldDefs -> Add("NombreProducto", ftString, 30, false ); + TbProdTmp -> FieldDefs -> Add("IVA", ftSmallint, 0, false ); + TbProdTmp -> FieldDefs -> Add("PrecioC", ftCurrency, 0, false ); + TbProdTmp -> FieldDefs -> Add("PrecioV", ftCurrency, 0, false ); + + for ( int hh=0; hh < 24; hh++ ) + { + Cantidad = "Cantidad " + AnsiString( hh ) + ":00+"; + TbProdTmp -> FieldDefs -> Add(Cantidad, ftInteger, 0, false ); + Cantidad = "Cantidad " + AnsiString( hh ) + ":30+"; + TbProdTmp -> FieldDefs -> Add(Cantidad, ftInteger, 0, false ); + } + + TbProdTmp -> IndexDefs-> Clear(); + +// TbProdTmp->IndexDefs->Add("Primary", "Familia0; Familia1; CodProducto", TIndexOptions() << ixPrimary ); + // Creamos la base... + TbProdTmp -> CreateTable(); +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::TbProdTmpAfterOpen(TDataSet *DataSet) +{ +/* +SELECT CodProducto Código, NombreProducto Producto, SUM( Cantidad ) Cantidad, IVA, SUM( ( (PrecioC * (1 + (IVA / 100) ) ) * (1 - (Dto / 100) ) ) * Cantidad ) Ventas."PV Bruto" +FROM "Ventas (cuerpo).db" Ventas +GROUP BY CodProducto, NombreProducto, IVA, NombreProducto, CodProducto +*/ + + unsigned short hh, mm, ss, mss; + int Familia0, Familia1; + Currency PVP, PRECIO, COSTO; + AnsiString Cantidad; + + int VntCodProductoAux; + + + TbProdTmp->DisableControls(); + + for ( hh = 0; hh < 48; hh ++ ) + { + CantidadTotal[hh] = 0; + BeneficioTotal[hh] = 0; + } + + + IamOpening = true; + TbProdTmp->DisableControls(); + TbVentasC -> First(); + while ( ! TbVentasC -> Eof ) // Siguiente factura + { + TbVentasC->FieldByName("HoraFactura")->AsDateTime . DecodeTime( &hh, &mm, &ss, &mss ); + Cantidad = "Cantidad " + AnsiString( hh ) + ":" + ( (mm<30) ? "00+" : "30+" ); + + TbVentasD -> First(); + while( ! TbVentasD -> Eof ) // Siguiente linea de la factura + { + // Si el producto no esta ya en la lista + VntCodProductoAux = TbVentasD->FieldByName("CodProductoAux")->AsInteger; + if ( VntCodProductoAux == 0 || + TbVentasD->FieldByName("CodProductoAux")->IsNull || + ! ( TbProdTmp -> Locate( "CodForced", VntCodProductoAux, TLocateOptions() << loCaseInsensitive ) ) + ) + { + if ( TbVentasD->FieldByName("CodProductoAux")->IsNull || + VntCodProductoAux == 0 || + ! ( TbProductos -> Locate( "ForcedIndex", VntCodProductoAux, TLocateOptions() << loCaseInsensitive ) ) + ) + { + Familia0 = Familia1 = 0; + COSTO = 0; + } else { + Familia0 = TbProductos -> FieldByName("Familia") -> AsInteger; + COSTO = TbProductos->FieldByName("Precio Costo")->AsCurrency; + } + + TbProdTmp -> InsertRecord( ARRAYOFCONST( + ( + Familia0, + Familia1, + VntCodProductoAux, + TbVentasD->FieldByName("CodProducto")->AsString, + TbVentasD->FieldByName("NombreProducto")->AsString, + TbVentasD->FieldByName("IVA")->AsInteger, + COSTO, + 0 + ) ) ); + } + + // Actualizamos las cantidades según horas.... + //////////// LOCALIZACION DEL REGISTRO CORRECTO + PRECIO = (TbVentasD->FieldByName("PrecioC")->AsCurrency * TbVentasD->FieldByName("Cantidad")->AsFloat )* ( 1 - (TbVentasD->FieldByName("Dto")->AsInteger / 100) ); + PVP = PRECIO * ( 1 + (TbVentasD->FieldByName("IVA")->AsCurrency / 100) ); + + TbProdTmp->Edit(); + TbProdTmp->FieldByName( "PrecioV" )->AsCurrency = TbProdTmp->FieldByName( "PrecioV" )->AsCurrency +PVP; + TbProdTmp->FieldByName( Cantidad )->AsFloat += TbVentasD->FieldByName("Cantidad")->AsFloat; + TbProdTmp->Post(); + + CantidadTotal[hh*2+ ((mm<30)?0:1)] += TbVentasD->FieldByName("Cantidad")->AsFloat; + BeneficioTotal[hh*2+ ((mm<30)?0:1)] += PRECIO - TbProdTmp->FieldByName("PrecioC")->AsCurrency * TbVentasD->FieldByName("Cantidad")->AsFloat; + + TbVentasD -> Next(); + } + TbVentasC -> Next(); + } + + IamOpening = false; + TbProdTmp->EnableControls(); + RellenaGraficaTOTALES(); + TbProdTmp->EnableControls(); + +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::RellenaGraficaTOTALES(void) +{ + // Metemos los datos generales en la gráfica... + Chart1 -> Series[0] -> Clear(); + if ( mNumProductos -> Checked ) + for ( int i = 0; i < 24; i++ ) + { + Chart1 -> Series[0] -> AddXY(i*2, CantidadTotal[i*2], i, clTeeColor); + Chart1 -> Series[0] -> AddXY(i*2+1, CantidadTotal[i*2+1], "½", clTeeColor); + } + else + for ( int i = 0; i < 24; i++ ) + { + Chart1 -> Series[0] -> AddXY(i*2, BeneficioTotal[i*2], i, clTeeColor); + Chart1 -> Series[0] -> AddXY(i*2+1, BeneficioTotal[i*2+1], "½", clTeeColor); + } + +} +//--------------------------------------------------------------------------- +void __fastcall TVntProd::DsProdTempDataChange(TObject *Sender, + TField *Field) +{ + AnsiString Cantidad; + Currency Benef; + + StatusBar1->Panels->Items[0]->Text = "Creando gráfica..."; + Chart1 -> Series[1] -> Clear(); + Chart1 -> Series[2] -> Clear(); + + if ( mNumProductos -> Checked ) + { + // Metemos los datos en la gráfica... + for ( int i = 0; i < 24; i++ ) + { + Cantidad = "Cantidad " + AnsiString( i ) + ":" + "00+"; + Chart1 -> Series[1] -> AddXY(i*2, TbProdTmp->FieldByName( Cantidad )->AsInteger, i, clTeeColor); + Cantidad = "Cantidad " + AnsiString( i ) + ":" + "30+"; + Chart1 -> Series[1] -> AddXY(i*2+1, TbProdTmp->FieldByName( Cantidad )->AsInteger, "½", clTeeColor); + } + } else { + Benef = TbProdTmp->FieldByName( "PrecioV" )->AsCurrency - TbProdTmp->FieldByName( "PrecioC" )->AsCurrency; + // Metemos los datos en la gráfica... + for ( int i = 0; i < 24; i++ ) + { + Cantidad = "Cantidad " + AnsiString( i ) + ":" + "00+"; + Chart1 -> Series[1] -> AddXY(i*2, TbProdTmp->FieldByName( Cantidad )->AsInteger * TbProdTmp->FieldByName( "PrecioV" )->AsCurrency, i, clTeeColor); + Chart1 -> Series[2] -> AddXY(i*2, TbProdTmp->FieldByName( Cantidad )->AsInteger * Benef, i, clTeeColor); + Cantidad = "Cantidad " + AnsiString( i ) + ":" + "30+"; + Chart1 -> Series[1] -> AddXY(i*2+1, TbProdTmp->FieldByName( Cantidad )->AsInteger * TbProdTmp->FieldByName( "PrecioV" )->AsCurrency, "½", clTeeColor); + Chart1 -> Series[2] -> AddXY(i*2+1, TbProdTmp->FieldByName( Cantidad )->AsInteger * Benef, "½", clTeeColor); + } + } + + + StatusBar1->Panels->Items[0]->Text = ""; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::MostrarTotalClick(TObject *Sender) +{ + MostrarTotal->Checked = !MostrarTotal->Checked; + // Ajustamos la grafica de totales... + Chart1 -> Series[0] -> Active = MostrarTotal->Checked; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::VentaProductoClick(TObject *Sender) +{ + VentaProducto->Checked = !VentaProducto->Checked; + // Ajustamos la grafica de totales... + Chart1 -> Series[1] -> Active = VentaProducto->Checked; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::BeneficioProductoClick(TObject *Sender) +{ + BeneficioProducto->Checked = !BeneficioProducto->Checked; + // Ajustamos la grafica de totales... + Chart1 -> Series[2] -> Active = BeneficioProducto->Checked; +} +//--------------------------------------------------------------------------- + + +void __fastcall TVntProd::mNumProductosClick(TObject *Sender) +{ + mMostrarCifras -> Checked = false; + mNumProductos -> Checked = true; + + BeneficioProducto->Enabled = false; + Chart1 -> Series[2] -> Active = false; + + DsProdTempDataChange(0, 0); + RellenaGraficaTOTALES(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::mMostrarCifrasClick(TObject *Sender) +{ + mMostrarCifras -> Checked = true; + mNumProductos -> Checked = false; + + BeneficioProducto->Enabled = true; + Chart1 -> Series[2] -> Active = BeneficioProducto->Checked; + + DsProdTempDataChange(0, 0); + RellenaGraficaTOTALES(); +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::FormDestroy(TObject *Sender) +{ + delete [] CantidadTotal; + delete [] BeneficioTotal; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::IndicesChange(TObject *Sender, TTreeNode *Node) +{ + union + { + long Familia; + char Fam[4]; + } FamL, FamH; + + // Reajustamos el filtro, acuerdo a la nueva familia + switch ( Indices -> Selected -> AbsoluteIndex ) + { + case 0: +// TbProductos -> Filtered = false; +// return; + if ( Indices -> Selected -> Text == "Ver Todos" ) + { + TbProdTmp -> Filtered = false; + return; + } else { + FamL . Familia = 0x00000000; + FamH . Familia = 0x01000000; + } + break; + case 1: + // El filtro es para la familia 0000 + FamL . Familia = 0x00000000; + FamH . Familia = 0x01000000; + break; + default: + // Contruimos los limites del filtro ( >= AND < ) + FamL . Familia = ( (int *) Indices -> Selected -> Data ) [0]; + FamH . Familia = FamL . Familia; + if ( !FamH . Fam[3-1] ) + FamH . Fam[3-0] ++; + else + if ( !FamH . Fam[3-2] ) + FamH . Fam[3-1] ++; + else + if ( !FamH . Fam[3-3] ) + FamH . Fam[3-2] ++; + else + FamH . Fam[3-3] ++; + break; + }; + + // Filtramos según los rangos construidos antes... + TbProdTmp->FilterOptions = TbProdTmp->FilterOptions << foCaseInsensitive; + TbProdTmp->Filter = "([Familia0] >= '" + AnsiString( (int)( FamL . Familia ) ) + "' AND [Familia0] < '" + AnsiString( (int)( FamH . Familia ) ) + "')"; + TbProdTmp -> Filtered = true; +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::TbProdTmpCalcFields(TDataSet *DataSet) +{ + if ( IamOpening ) return; + + int min, max; + AnsiString Cantidad; + float sCantidad; + + // Calculamos la cantidad según el rango especificado... + unsigned short hh, mm, ss, mss; + DateTimePicker1->DateTime . DecodeTime( &hh, &mm, &ss, &mss ); + min = hh*2 + ( (mm<30) ? 0 : 1 ); + DateTimePicker2->DateTime . DecodeTime( &hh, &mm, &ss, &mss ); + max = hh*2 + ( (mm<30) ? 0 : 1 ); + + sCantidad = 0; + for ( ; min <= max; min++ ) + { + Cantidad = "Cantidad " + AnsiString( min/2 ) + ":" + ((min%2) ? "30+" : "00+"); + sCantidad += TbProdTmp->FieldByName( Cantidad ) -> AsFloat; + } + TbProdTmp->FieldByName( "Cantidad" ) -> Value = sCantidad; + #ifdef EXIST_CFG + if ( CFG->VntProdCosteBeneficio->Checked ) + { + #endif + TbProdTmp->FieldByName( "CostoTotal" ) -> AsCurrency = TbProdTmp->FieldByName( "PrecioC" ) -> AsCurrency * sCantidad; + TbProdTmp->FieldByName( "Beneficio" ) -> AsCurrency = TbProdTmp->FieldByName( "PrecioV" ) -> AsCurrency - TbProdTmp->FieldByName( "CostoTotal" ) -> AsCurrency; + #ifdef EXIST_CFG + } + #endif +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::bGraficasClick(TObject *Sender) +{ + POINT MousePos; + if ( GetCursorPos(&MousePos) ) + { + mGraficas->PopupComponent = bGraficas; +// mGraficas->Popup(MousePos.x + bGraficas->Width, MousePos.y + bGraficas->Height); + + + mGraficas->Popup( /*MousePos.x + bGraficas->Width + */bGraficas->Left + Left, + /*MousePos.y + */bGraficas->Height * 2 + Top); + + mGraficas->PopupComponent = 0; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TVntProd::SpeedButton7Click(TObject *Sender) +{ + TQRVntProd *QRVntProd; + QRVntProd = new TQRVntProd(this); + QRVntProd->QuickRep1->Preview(); + delete QRVntProd; +} +//--------------------------------------------------------------------------- + diff --git a/TpvVntProd.dfm b/TpvVntProd.dfm new file mode 100644 index 0000000..0e6f3cf Binary files /dev/null and b/TpvVntProd.dfm differ diff --git a/TpvVntProd.h b/TpvVntProd.h new file mode 100644 index 0000000..c5ceac5 --- /dev/null +++ b/TpvVntProd.h @@ -0,0 +1,166 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVntProdH +#define TpvVntProdH + +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ElastFrm.hpp" +#include +//--------------------------------------------------------------------------- +class TVntProd : public TForm +{ +__published: // IDE-managed Components + TStatusBar *StatusBar1; + TPanel *Panel1; + TLabel *Label1; + TLabel *Label2; + TSpeedButton *CerrarAplic; + TSpeedButton *SpeedButton2; + TSpeedButton *SpeedButton3; + TSpeedButton *SpeedButton5; + TDateTimePicker *MinFecha; + TDateTimePicker *MaxFecha; + TDateTimePicker *DateTimePicker1; + TDateTimePicker *DateTimePicker2; + TTreeView *Indices; + TImageList *ImageList1; + TTable *TbProductos; + TDataSource *DsProdTemp; + TTable *TbProdTmp; + TTable *TbVentasC; + TDataSource *DsVentasC; + TTable *TbVentasD; + TDataSource *DsVentasD; + TDBGrid *DBGrid1; + TSplitter *Splitter1; + TSplitter *Splitter2; + TChart *Chart1; + TAreaSeries *Series2; + TAreaSeries *Series1; + TPopupMenu *mGraficas; + TMenuItem *MostrarTotal; + TMenuItem *VentaProducto; + TMenuItem *BeneficioProducto; + TMenuItem *N1; + TMenuItem *N2; + TMenuItem *mNumProductos; + TMenuItem *mMostrarCifras; + TAreaSeries *Series3; + TFloatField *TbProdTmpCantidad; + TCurrencyField *TbProdTmpBeneficio; + TIntegerField *TbProdTmpFamilia0; + TIntegerField *TbProdTmpFamilia1; + TStringField *TbProdTmpCodProducto; + TStringField *TbProdTmpNombreProducto; + TSmallintField *TbProdTmpIVA; + TCurrencyField *TbProdTmpPrecioC; + TCurrencyField *TbProdTmpPrecioV; + TIntegerField *TbProdTmpCantidad000; + TIntegerField *TbProdTmpCantidad030; + TIntegerField *TbProdTmpCantidad100; + TIntegerField *TbProdTmpCantidad130; + TIntegerField *TbProdTmpCantidad200; + TIntegerField *TbProdTmpCantidad230; + TIntegerField *TbProdTmpCantidad300; + TIntegerField *TbProdTmpCantidad330; + TIntegerField *TbProdTmpCantidad400; + TIntegerField *TbProdTmpCantidad430; + TIntegerField *TbProdTmpCantidad500; + TIntegerField *TbProdTmpCantidad530; + TIntegerField *TbProdTmpCantidad600; + TIntegerField *TbProdTmpCantidad630; + TIntegerField *TbProdTmpCantidad700; + TIntegerField *TbProdTmpCantidad730; + TIntegerField *TbProdTmpCantidad800; + TIntegerField *TbProdTmpCantidad830; + TIntegerField *TbProdTmpCantidad900; + TIntegerField *TbProdTmpCantidad930; + TIntegerField *TbProdTmpCantidad1000; + TIntegerField *TbProdTmpCantidad1030; + TIntegerField *TbProdTmpCantidad1100; + TIntegerField *TbProdTmpCantidad1130; + TIntegerField *TbProdTmpCantidad1200; + TIntegerField *TbProdTmpCantidad1230; + TIntegerField *TbProdTmpCantidad1300; + TIntegerField *TbProdTmpCantidad1330; + TIntegerField *TbProdTmpCantidad1400; + TIntegerField *TbProdTmpCantidad1430; + TIntegerField *TbProdTmpCantidad1500; + TIntegerField *TbProdTmpCantidad1530; + TIntegerField *TbProdTmpCantidad1600; + TIntegerField *TbProdTmpCantidad1630; + TIntegerField *TbProdTmpCantidad1700; + TIntegerField *TbProdTmpCantidad1730; + TIntegerField *TbProdTmpCantidad1800; + TIntegerField *TbProdTmpCantidad1830; + TIntegerField *TbProdTmpCantidad1900; + TIntegerField *TbProdTmpCantidad1930; + TIntegerField *TbProdTmpCantidad2000; + TIntegerField *TbProdTmpCantidad2030; + TIntegerField *TbProdTmpCantidad2100; + TIntegerField *TbProdTmpCantidad2130; + TIntegerField *TbProdTmpCantidad2200; + TIntegerField *TbProdTmpCantidad2230; + TIntegerField *TbProdTmpCantidad2300; + TIntegerField *TbProdTmpCantidad2330; + TSpeedButton *bGraficas; + TElasticForm *ElasticForm1; + TIntegerField *TbProdTmpCodForced; + TCurrencyField *TbProdTmpCostoTotal; + TSpeedButton *SpeedButton7; + void __fastcall CerrarAplicClick(TObject *Sender); + void __fastcall TbProductosAfterOpen(TDataSet *DataSet); + void __fastcall MinFechaChange(TObject *Sender); + void __fastcall MaxFechaChange(TObject *Sender); + void __fastcall IndicesExpanding(TObject *Sender, TTreeNode *Node, + bool &AllowExpansion); + void __fastcall IndicesCollapsing(TObject *Sender, TTreeNode *Node, + bool &AllowCollapse); + void __fastcall TbProdTmpBeforeOpen(TDataSet *DataSet); + + void __fastcall IndicesDeletion(TObject *Sender, TTreeNode *Node); + void __fastcall TbProdTmpAfterOpen(TDataSet *DataSet); + void __fastcall DsProdTempDataChange(TObject *Sender, TField *Field); + void __fastcall MostrarTotalClick(TObject *Sender); + void __fastcall VentaProductoClick(TObject *Sender); + void __fastcall BeneficioProductoClick(TObject *Sender); + + void __fastcall mNumProductosClick(TObject *Sender); + void __fastcall mMostrarCifrasClick(TObject *Sender); + void __fastcall FormDestroy(TObject *Sender); + void __fastcall IndicesChange(TObject *Sender, TTreeNode *Node); + void __fastcall TbProdTmpCalcFields(TDataSet *DataSet); + void __fastcall bGraficasClick(TObject *Sender); + void __fastcall SpeedButton7Click(TObject *Sender); +private: // User declarations + Currency *CantidadTotal;//[48]; + Currency *BeneficioTotal;//[48]; + void __fastcall RellenaGraficaTOTALES(void); + + bool FirstTime; +public: // User declarations + bool IamOpening; + TDateTime MinFechaFact, MaxFechaFact; + __fastcall TVntProd(TComponent* Owner); + void __fastcall FiltrarFacturas(void); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TVntProd *VntProd; +//--------------------------------------------------------------------------- +#endif + \ No newline at end of file diff --git a/TpvVntProdQR.cpp b/TpvVntProdQR.cpp new file mode 100644 index 0000000..04ed28f --- /dev/null +++ b/TpvVntProdQR.cpp @@ -0,0 +1,16 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntProdQR.h" +#include "TpvVntProd.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRVntProd *QRVntProd; +//--------------------------------------------------------------------- +__fastcall TQRVntProd::TQRVntProd(TComponent* AOwner) + : TForm(AOwner) +{ +} +//--------------------------------------------------------------------- + diff --git a/TpvVntProdQR.dfm b/TpvVntProdQR.dfm new file mode 100644 index 0000000..730dd58 Binary files /dev/null and b/TpvVntProdQR.dfm differ diff --git a/TpvVntProdQR.h b/TpvVntProdQR.h new file mode 100644 index 0000000..cf56309 --- /dev/null +++ b/TpvVntProdQR.h @@ -0,0 +1,53 @@ +//---------------------------------------------------------------------------- +#ifndef TpvVntProdQRH +#define TpvVntProdQRH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRVntProd : public TForm +{ +__published: + TQuickRep *QuickRep1; + TQRBand *DetailBand1; + TQRBand *PageFooterBand1; + TQRBand *TitleBand1; + TQRBand *ColumnHeaderBand1; + TQRSysData *QRSysData1; + TQRSysData *QRSysData2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel4; + TQRDBText *QRDBText1; + TQRDBText *QRDBText2; + TQRDBText *QRDBText3; + TQRDBText *QRDBText4; + TQRDBText *QRDBText5; + TQRDBText *QRDBText7; + TQRDBText *QRDBText8; + TQRLabel *QRLabel1; + TQRLabel *QRLabel2; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; +private: +public: + virtual __fastcall TQRVntProd(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRVntProd *QRVntProd; +//---------------------------------------------------------------------------- +#endif diff --git a/Unit1.cpp b/Unit1.cpp new file mode 100644 index 0000000..a14581d --- /dev/null +++ b/Unit1.cpp @@ -0,0 +1,25 @@ +//--------------------------------------------------------------------------- +#include + +#pragma hdrstop + +//--------------------------------------------------------------------------- +int Port; +//--------------------------------------------------------------------------- +void CargarConfiguracion( AnsiString CFG ) +{ + TIniFile *ini; + ini = new TIniFile( ExtractFileDir( Application->ExeName ) + CFG ); + // General + Port = ini->ReadInteger( "Global", "Port", 8000 ); +} +//--------------------------------------------------------------------------- +#pragma argsused +int main(int argc, char* argv[]) +{ + CargarConfiguracion("WebServer.ini"); + + return 0; +} +//--------------------------------------------------------------------------- + diff --git a/Vendidos/ClayComunicaciones/CLAY.tif b/Vendidos/ClayComunicaciones/CLAY.tif new file mode 100644 index 0000000..328a4ef Binary files /dev/null and b/Vendidos/ClayComunicaciones/CLAY.tif differ diff --git a/Vendidos/ClayComunicaciones/COMUNICADO.jpg b/Vendidos/ClayComunicaciones/COMUNICADO.jpg new file mode 100644 index 0000000..0b6087c Binary files /dev/null and b/Vendidos/ClayComunicaciones/COMUNICADO.jpg differ diff --git a/Vendidos/ClayComunicaciones/TpvVntAlbPrint.cpp b/Vendidos/ClayComunicaciones/TpvVntAlbPrint.cpp new file mode 100644 index 0000000..d0c39c6 --- /dev/null +++ b/Vendidos/ClayComunicaciones/TpvVntAlbPrint.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntAlbPrint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "TpvVntFctPrint" +#pragma resource "*.dfm" +TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt1::TQRMDFacturaVnt1(TComponent* Owner) + : TQRMDFacturaVnt(Owner) +{ +} +//--------------------------------------------------------------------------- + diff --git a/Vendidos/ClayComunicaciones/TpvVntAlbPrint.dfm b/Vendidos/ClayComunicaciones/TpvVntAlbPrint.dfm new file mode 100644 index 0000000..7bf00df Binary files /dev/null and b/Vendidos/ClayComunicaciones/TpvVntAlbPrint.dfm differ diff --git a/Vendidos/ClayComunicaciones/TpvVntAlbPrint.h b/Vendidos/ClayComunicaciones/TpvVntAlbPrint.h new file mode 100644 index 0000000..19d2637 --- /dev/null +++ b/Vendidos/ClayComunicaciones/TpvVntAlbPrint.h @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVntAlbPrintH +#define TpvVntAlbPrintH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "TpvVntFctPrint.h" +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TQRMDFacturaVnt1 : public TQRMDFacturaVnt +{ +__published: // IDE-managed Components +private: // User declarations +public: // User declarations + __fastcall TQRMDFacturaVnt1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +#endif diff --git a/Vendidos/ClayComunicaciones/TpvVntFctPrint.cpp b/Vendidos/ClayComunicaciones/TpvVntFctPrint.cpp new file mode 100644 index 0000000..1cc191e --- /dev/null +++ b/Vendidos/ClayComunicaciones/TpvVntFctPrint.cpp @@ -0,0 +1,55 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntFctPrint.h" +#include "TpvVentas.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRMDFacturaVnt *QRMDFacturaVnt; +//--------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt::TQRMDFacturaVnt(TComponent* AOwner) + : TQuickRep(AOwner) +{ + TbProductos->Active = true; + TbCircular->Active = true; + TbVntCabecera->Active = true; + TbClt->Active = true; + TbVntLineas->Active = true; + try { + QRImage4->Picture->LoadFromFile("systm\\bannerFACT.bmp"); + } catch(...) { + //nothing + } +} +//--------------------------------------------------------------------- +void __fastcall TQRMDFacturaVnt::TitleBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + + char Caracter; + if ( TbClt->FieldByName( "DocumentoDNP" )->AsString.IsEmpty() ) Caracter = '0'; else + Caracter = (TbClt->FieldByName( "DocumentoDNP" )->AsString)[1]; + if ( !(Caracter >= '0' && Caracter <= '9') ) + LblNombre->Caption = TbClt->FieldByName( "Empresa" )->AsString; + else + LblNombre->Caption = TbClt->FieldByName( "Apellidos" )->AsString + ", " + TbClt->FieldByName( "Nombre" )->AsString; + LblDir->Caption = TbClt->FieldByName( "Calle" )->AsString + ", " + TbClt->FieldByName( "Num" )->AsString + TbClt->FieldByName( "Piso" )->AsString + TbClt->FieldByName( "Letra" ) -> AsString; + LblCP->Caption = "CP: " + TbClt->FieldByName( "CP" )->AsString + " " + TbClt->FieldByName( "Población" ) ->AsString + ", (" + TbClt->FieldByName("Provincia")->AsString+")"; +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TQRMDFacturaVnt::PageFooterBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRTotal->Caption = FormatCurr("###,###,###.#0", TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency ); + TotalE->Caption = FormatCurr("###,###,###.#0", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + TotalSinE->Caption = FormatCurr("###,###,###.#0", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency)/166.386 ); + TotalIvaE->Caption = FormatCurr("###,###,###.#0", (TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); +} +//--------------------------------------------------------------------------- + + diff --git a/Vendidos/ClayComunicaciones/TpvVntFctPrint.dfm b/Vendidos/ClayComunicaciones/TpvVntFctPrint.dfm new file mode 100644 index 0000000..a70eb91 Binary files /dev/null and b/Vendidos/ClayComunicaciones/TpvVntFctPrint.dfm differ diff --git a/Vendidos/ClayComunicaciones/TpvVntFctPrint.h b/Vendidos/ClayComunicaciones/TpvVntFctPrint.h new file mode 100644 index 0000000..e9e7e6f --- /dev/null +++ b/Vendidos/ClayComunicaciones/TpvVntFctPrint.h @@ -0,0 +1,108 @@ +//---------------------------------------------------------------------------- +#ifndef TpvVntFctPrintH +#define TpvVntFctPrintH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRMDFacturaVnt : public TQuickRep +{ +__published: + TQRBand *PageFooterBand1; + TQRBand *TitleBand1; + TQRBand * ColumnHeaderBand1; + TQRSubDetail *QRSubDetail1; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRDBText *QRDBText1; + TQRShape *QRShape1; + TQRDBText *QRDBText2; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRShape *QRShape2; + TQRDBText *QRDBText3; + TQRDBText *QRDBText6; + TQRImage *QRImage1; + TQRDBText *QRDBText10; + TQRDBText *QRDBText11; + TQRDBText *QRDBText13; + TQRBand *DetailBand1; + TQRLabel *QRLabel1; + TQRLabel *QRLabel10; + TQRLabel *QRLabel11; + TQRLabel *QRLabel12; + TQRLabel *QRLabel13; + TQRLabel *QRLabel14; + TQRDBText *QRDBText4; + TQRDBText *QRDBText5; + TQRDBText *QRDBText7; + TQRDBText *QRDBText8; + TQRDBText *QRDBText9; + TTable *TbCircular; + TTable *TbProductos; + TDataSource *DsCircular; + TTable *TbVntCabecera; + TTable *TbVntLineas; + TDataSource *DsVntCabecera; + TDataSource *DsVntLineas; + TTable *TbClt; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRLabel *LblNombre; + TQRLabel *LblDir; + TQRLabel *LblCP; + TQRImage *QRImage4; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel15; + TQRDBText *QRDBText12; + TQRDBText *QRDBText14; + TQRLabel *QRTotal; + TQRShape *zMarcoIzq; + TQRShape *zMarcoDer; + TQRShape *QRShape3; + TQRShape *QRShape5; + TQRShape *QRShape6; + TQRShape *QRShape7; + TQRShape *QRShape8; + TQRShape *QRShape9; + TQRImage *QRImage2; + TQRLabel *QRLabel16; + TQRLabel *QRLabel17; + TQRShape *QRShape10; + TQRExpr *QRExpr1; + TQRLabel *TotalE; + TQRLabel *TotalIvaE; + TQRLabel *TotalSinE; + void __fastcall TitleBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall PageFooterBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: +public: + virtual __fastcall TQRMDFacturaVnt(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt *QRMDFacturaVnt; +//---------------------------------------------------------------------------- +#endif diff --git a/Vendidos/ClayComunicaciones/guardar.bat b/Vendidos/ClayComunicaciones/guardar.bat new file mode 100644 index 0000000..b8db4b0 --- /dev/null +++ b/Vendidos/ClayComunicaciones/guardar.bat @@ -0,0 +1,25 @@ +@echo off + +if exist ..\..\perfil02 goto ok + +@echo El perfil que intenta SALVAR, no se corresponde +@echo con el actual... + +goto fin + +:ok + +@echo TRAER ficheros ACTUALES, a este perfil... +@echo (Interrumpir CTRL+C) / ó / continuar ? +@echo pause > nul + +xcopy ..\..\TpvVntAlbPrint.cpp +xcopy ..\..\TpvVntAlbPrint.dfm +xcopy ..\..\TpvVntAlbPrint.h +xcopy ..\..\TpvVntFctPrint.cpp +xcopy ..\..\TpvVntFctPrint.dfm +xcopy ..\..\TpvVntFctPrint.h +del ..\..\testigo +del ..\..\perfil02 + +:fin \ No newline at end of file diff --git a/Vendidos/ClayComunicaciones/perfil02 b/Vendidos/ClayComunicaciones/perfil02 new file mode 100644 index 0000000..e69de29 diff --git a/Vendidos/ClayComunicaciones/testigo b/Vendidos/ClayComunicaciones/testigo new file mode 100644 index 0000000..e69de29 diff --git a/Vendidos/ClayComunicaciones/usar.bat b/Vendidos/ClayComunicaciones/usar.bat new file mode 100644 index 0000000..bd240d1 --- /dev/null +++ b/Vendidos/ClayComunicaciones/usar.bat @@ -0,0 +1,24 @@ +@echo off + + +if exist ..\..\testigo goto error + +@echo COPIAR ficheros de este perfil, al proyecto... +@echo (Interrumpir CTRL+C) / ó / continuar ? +pause > nul + +xcopy TpvVntAlbPrint.cpp ..\..\ +xcopy TpvVntAlbPrint.dfm ..\..\ +xcopy TpvVntAlbPrint.h ..\..\ +xcopy TpvVntFctPrint.cpp ..\..\ +xcopy TpvVntFctPrint.dfm ..\..\ +xcopy TpvVntFctPrint.h ..\..\ +xcopy testigo ..\..\ +xcopy perfil02 ..\..\ +goto fin + +:error +@echo Actualmente existe un perfil sin salvar +@echo por seguridad este perfil NO SE ACTIVARA + +:fin \ No newline at end of file diff --git a/Vendidos/FonoTorre/F-1.bmp b/Vendidos/FonoTorre/F-1.bmp new file mode 100644 index 0000000..2648835 Binary files /dev/null and b/Vendidos/FonoTorre/F-1.bmp differ diff --git a/Vendidos/FonoTorre/F-1.jpg b/Vendidos/FonoTorre/F-1.jpg new file mode 100644 index 0000000..81606f3 Binary files /dev/null and b/Vendidos/FonoTorre/F-1.jpg differ diff --git a/Vendidos/FonoTorre/TpvVntAlbPrint.cpp b/Vendidos/FonoTorre/TpvVntAlbPrint.cpp new file mode 100644 index 0000000..d0c39c6 --- /dev/null +++ b/Vendidos/FonoTorre/TpvVntAlbPrint.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntAlbPrint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "TpvVntFctPrint" +#pragma resource "*.dfm" +TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt1::TQRMDFacturaVnt1(TComponent* Owner) + : TQRMDFacturaVnt(Owner) +{ +} +//--------------------------------------------------------------------------- + diff --git a/Vendidos/FonoTorre/TpvVntAlbPrint.dfm b/Vendidos/FonoTorre/TpvVntAlbPrint.dfm new file mode 100644 index 0000000..46a381b Binary files /dev/null and b/Vendidos/FonoTorre/TpvVntAlbPrint.dfm differ diff --git a/Vendidos/FonoTorre/TpvVntAlbPrint.h b/Vendidos/FonoTorre/TpvVntAlbPrint.h new file mode 100644 index 0000000..19d2637 --- /dev/null +++ b/Vendidos/FonoTorre/TpvVntAlbPrint.h @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVntAlbPrintH +#define TpvVntAlbPrintH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "TpvVntFctPrint.h" +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TQRMDFacturaVnt1 : public TQRMDFacturaVnt +{ +__published: // IDE-managed Components +private: // User declarations +public: // User declarations + __fastcall TQRMDFacturaVnt1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +#endif diff --git a/Vendidos/FonoTorre/TpvVntFctPrint.cpp b/Vendidos/FonoTorre/TpvVntFctPrint.cpp new file mode 100644 index 0000000..737a80a --- /dev/null +++ b/Vendidos/FonoTorre/TpvVntFctPrint.cpp @@ -0,0 +1,58 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntFctPrint.h" +#include "TpvVentas.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRMDFacturaVnt *QRMDFacturaVnt; +//--------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt::TQRMDFacturaVnt(TComponent* AOwner) + : TQuickRep(AOwner) +{ + TbProductos->Active = true; + TbCircular->Active = true; + TbVntCabecera->Active = true; + TbClt->Active = true; + TbVntLineas->Active = true; + try { + QRImage4->Picture->LoadFromFile("systm\\bannerFACT.bmp"); + } catch(...) { + //nothing + } +} +//--------------------------------------------------------------------- +void __fastcall TQRMDFacturaVnt::TitleBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + char Caracter; + if ( TbClt->FieldByName( "DocumentoDNP" )->AsString.IsEmpty() ) Caracter = '0'; else + Caracter = (TbClt->FieldByName( "DocumentoDNP" )->AsString)[1]; + + if ( !(Caracter >= '0' && Caracter <= '9') ) + + LblNombre->Caption = TbClt->FieldByName( "Empresa" )->AsString; + else + LblNombre->Caption = TbClt->FieldByName( "Apellidos" )->AsString + ", " + TbClt->FieldByName( "Nombre" )->AsString; + LblDir->Caption = TbClt->FieldByName( "Calle" )->AsString + ", " + TbClt->FieldByName( "Num" )->AsString + TbClt->FieldByName( "Piso" )->AsString + TbClt->FieldByName( "Letra" ) -> AsString; + LblCP->Caption = "CP: " + TbClt->FieldByName( "CP" )->AsString + " " + TbClt->FieldByName( "Población" ) ->AsString + ", (" + TbClt->FieldByName("Provincia")->AsString+")"; +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TQRMDFacturaVnt::PageFooterBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRTotal->Caption = FormatCurr("###,###,###.#0", TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency ); + TotalE->Caption = FormatCurr("###,###,###.#0", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + TotalSinE->Caption = FormatCurr("###,###,###.#0", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency)/166.386 ); + TotalIvaE->Caption = FormatCurr("###,###,###.#0", (TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + +} +//--------------------------------------------------------------------------- + + + diff --git a/Vendidos/FonoTorre/TpvVntFctPrint.dfm b/Vendidos/FonoTorre/TpvVntFctPrint.dfm new file mode 100644 index 0000000..1891e3f Binary files /dev/null and b/Vendidos/FonoTorre/TpvVntFctPrint.dfm differ diff --git a/Vendidos/FonoTorre/TpvVntFctPrint.h b/Vendidos/FonoTorre/TpvVntFctPrint.h new file mode 100644 index 0000000..ce17134 --- /dev/null +++ b/Vendidos/FonoTorre/TpvVntFctPrint.h @@ -0,0 +1,104 @@ +//---------------------------------------------------------------------------- +#ifndef TpvVntFctPrintH +#define TpvVntFctPrintH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRMDFacturaVnt : public TQuickRep +{ +__published: + TQRBand *PageFooterBand1; + TQRBand *TitleBand1; + TQRBand * ColumnHeaderBand1; + TQRSubDetail *QRSubDetail1; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRDBText *QRDBText1; + TQRShape *QRShape1; + TQRDBText *QRDBText2; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRShape *QRShape2; + TQRDBText *QRDBText3; + TQRDBText *QRDBText6; + TQRDBText *QRDBText10; + TQRDBText *QRDBText11; + TQRDBText *QRDBText13; + TQRBand *DetailBand1; + TQRLabel *QRLabel1; + TQRLabel *QRLabel10; + TQRLabel *QRLabel11; + TQRLabel *QRLabel12; + TQRLabel *QRLabel13; + TQRLabel *QRLabel14; + TQRDBText *QRDBText4; + TQRDBText *QRDBText5; + TQRDBText *QRDBText7; + TQRDBText *QRDBText8; + TQRDBText *QRDBText9; + TTable *TbCircular; + TTable *TbProductos; + TDataSource *DsCircular; + TTable *TbVntCabecera; + TTable *TbVntLineas; + TDataSource *DsVntCabecera; + TDataSource *DsVntLineas; + TTable *TbClt; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRLabel *LblNombre; + TQRLabel *LblDir; + TQRLabel *LblCP; + TQRImage *QRImage4; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel15; + TQRDBText *QRDBText12; + TQRDBText *QRDBText14; + TQRLabel *QRTotal; + TQRShape *zMarcoIzq; + TQRShape *zMarcoDer; + TQRShape *QRShape3; + TQRShape *QRShape5; + TQRShape *QRShape6; + TQRShape *QRShape7; + TQRShape *QRShape8; + TQRShape *QRShape9; + TQRImage *QRImage1; + TQRShape *QRShape10; + TQRExpr *QRExpr1; + TQRDBText *TotalSinE; + TQRDBText *TotalIvaE; + TQRDBText *TotalE; + void __fastcall TitleBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall PageFooterBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: +public: + virtual __fastcall TQRMDFacturaVnt(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt *QRMDFacturaVnt; +//---------------------------------------------------------------------------- +#endif diff --git a/Vendidos/FonoTorre/guardar.bat b/Vendidos/FonoTorre/guardar.bat new file mode 100644 index 0000000..65531ea --- /dev/null +++ b/Vendidos/FonoTorre/guardar.bat @@ -0,0 +1,25 @@ +@echo off + +if exist ..\..\perfil03 goto ok + +@echo El perfil que intenta SALVAR, no se corresponde +@echo con el actual... + +goto fin + +:ok + +@echo TRAER ficheros ACTUALES, a este perfil... +@echo (Interrumpir CTRL+C) / ó / continuar ? +@echo pause > nul + +xcopy ..\..\TpvVntAlbPrint.cpp +xcopy ..\..\TpvVntAlbPrint.dfm +xcopy ..\..\TpvVntAlbPrint.h +xcopy ..\..\TpvVntFctPrint.cpp +xcopy ..\..\TpvVntFctPrint.dfm +xcopy ..\..\TpvVntFctPrint.h +del ..\..\testigo +del ..\..\perfil03 + +:fin \ No newline at end of file diff --git a/Vendidos/FonoTorre/perfil03 b/Vendidos/FonoTorre/perfil03 new file mode 100644 index 0000000..e69de29 diff --git a/Vendidos/FonoTorre/testigo b/Vendidos/FonoTorre/testigo new file mode 100644 index 0000000..e69de29 diff --git a/Vendidos/FonoTorre/usar.bat b/Vendidos/FonoTorre/usar.bat new file mode 100644 index 0000000..91e14af --- /dev/null +++ b/Vendidos/FonoTorre/usar.bat @@ -0,0 +1,24 @@ +@echo off + + +if exist ..\..\testigo goto error + +@echo COPIAR ficheros de este perfil, al proyecto... +@echo (Interrumpir CTRL+C) / ó / continuar ? +pause > nul + +xcopy TpvVntAlbPrint.cpp ..\..\ +xcopy TpvVntAlbPrint.dfm ..\..\ +xcopy TpvVntAlbPrint.h ..\..\ +xcopy TpvVntFctPrint.cpp ..\..\ +xcopy TpvVntFctPrint.dfm ..\..\ +xcopy TpvVntFctPrint.h ..\..\ +xcopy testigo ..\..\ +xcopy perfil03 ..\..\ +goto fin + +:error +@echo Actualmente existe un perfil sin salvar +@echo por seguridad este perfil NO SE ACTIVARA + +:fin \ No newline at end of file diff --git a/Vendidos/infdj.com/TpvVntAlbPrint.cpp b/Vendidos/infdj.com/TpvVntAlbPrint.cpp new file mode 100644 index 0000000..d0c39c6 --- /dev/null +++ b/Vendidos/infdj.com/TpvVntAlbPrint.cpp @@ -0,0 +1,17 @@ +//--------------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntAlbPrint.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma link "TpvVntFctPrint" +#pragma resource "*.dfm" +TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt1::TQRMDFacturaVnt1(TComponent* Owner) + : TQRMDFacturaVnt(Owner) +{ +} +//--------------------------------------------------------------------------- + diff --git a/Vendidos/infdj.com/TpvVntAlbPrint.dfm b/Vendidos/infdj.com/TpvVntAlbPrint.dfm new file mode 100644 index 0000000..6368372 Binary files /dev/null and b/Vendidos/infdj.com/TpvVntAlbPrint.dfm differ diff --git a/Vendidos/infdj.com/TpvVntAlbPrint.h b/Vendidos/infdj.com/TpvVntAlbPrint.h new file mode 100644 index 0000000..19d2637 --- /dev/null +++ b/Vendidos/infdj.com/TpvVntAlbPrint.h @@ -0,0 +1,29 @@ +//--------------------------------------------------------------------------- +#ifndef TpvVntAlbPrintH +#define TpvVntAlbPrintH +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include "TpvVntFctPrint.h" +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TQRMDFacturaVnt1 : public TQRMDFacturaVnt +{ +__published: // IDE-managed Components +private: // User declarations +public: // User declarations + __fastcall TQRMDFacturaVnt1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt1 *QRMDFacturaVnt1; +//--------------------------------------------------------------------------- +#endif diff --git a/Vendidos/infdj.com/TpvVntFctPrint.cpp b/Vendidos/infdj.com/TpvVntFctPrint.cpp new file mode 100644 index 0000000..8701a13 --- /dev/null +++ b/Vendidos/infdj.com/TpvVntFctPrint.cpp @@ -0,0 +1,71 @@ +//--------------------------------------------------------------------- +#include +#pragma hdrstop + +#include "TpvVntFctPrint.h" +#include "TpvVentas.h" +//--------------------------------------------------------------------- +#pragma resource "*.dfm" +TQRMDFacturaVnt *QRMDFacturaVnt; +//--------------------------------------------------------------------- +__fastcall TQRMDFacturaVnt::TQRMDFacturaVnt(TComponent* AOwner) + : TQuickRep(AOwner) +{ + TbProductos->Active = true; + TbCircular->Active = true; + TbVntCabecera->Active = true; + TbClt->Active = true; + TbVntLineas->Active = true; + try { + QRImage4->Picture->LoadFromFile("systm\\bannerFACT.bmp"); + } catch(...) { + //nothing + } +} +//--------------------------------------------------------------------- +void __fastcall TQRMDFacturaVnt::TitleBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ char Caracter; + if ( TbClt->FieldByName( "DocumentoDNP" )->AsString.IsEmpty() ) Caracter = '0'; else + Caracter = (TbClt->FieldByName( "DocumentoDNP" )->AsString)[1]; + + if ( !(Caracter >= '0' && Caracter <= '9') ) + + LblNombre->Caption = TbClt->FieldByName( "Empresa" )->AsString; + else + LblNombre->Caption = TbClt->FieldByName( "Apellidos" )->AsString + ", " + TbClt->FieldByName( "Nombre" )->AsString; + LblDir->Caption = TbClt->FieldByName( "Calle" )->AsString + ", " + TbClt->FieldByName( "Num" )->AsString + TbClt->FieldByName( "Piso" )->AsString + TbClt->FieldByName( "Letra" ) -> AsString; + LblCP->Caption = "CP: " + TbClt->FieldByName( "CP" )->AsString + " " + TbClt->FieldByName( "Población" ) ->AsString + ", (" + TbClt->FieldByName("Provincia")->AsString+")"; +} +//--------------------------------------------------------------------------- + + + + +void __fastcall TQRMDFacturaVnt::PageFooterBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRTotal->Caption = FormatCurr("###,###,###.#0", TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency ); + QRLabel16->Caption = FormatCurr("###,###,###.#0 €", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency + TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + QRLabel17->Caption = FormatCurr("###,###,###.#0 €", (TbVntCabecera->FieldByName("TotalIva")->AsCurrency)/166.386 ); + QRLabel18->Caption = FormatCurr("###,###,###.#0 €", (TbVntCabecera->FieldByName("TotalSin")->AsCurrency)/166.386 ); +} +//--------------------------------------------------------------------------- + + +void __fastcall TQRMDFacturaVnt::DetailBand1BeforePrint( + TQRCustomBand *Sender, bool &PrintBand) +{ + QRDBText9->Mask = TbVntLineas->FieldByName("PrecioC")->AsInteger == 0 ? "#" : "###,###,###.#0"; + if ( TbVntLineas->FieldByName("PrecioC")->AsInteger == 0 || + TbVntLineas->FieldByName("Cantidad")->AsInteger == 0 ) + { + QRExpr4->Mask = "#"; + QRExpr1->Mask = "#"; + } else { + QRExpr4->Mask = "###,###,###.#0"; + QRExpr1->Mask = "###,###,###.#0"; + } +} +//--------------------------------------------------------------------------- + diff --git a/Vendidos/infdj.com/TpvVntFctPrint.dfm b/Vendidos/infdj.com/TpvVntFctPrint.dfm new file mode 100644 index 0000000..ee971c9 Binary files /dev/null and b/Vendidos/infdj.com/TpvVntFctPrint.dfm differ diff --git a/Vendidos/infdj.com/TpvVntFctPrint.h b/Vendidos/infdj.com/TpvVntFctPrint.h new file mode 100644 index 0000000..bd65d97 --- /dev/null +++ b/Vendidos/infdj.com/TpvVntFctPrint.h @@ -0,0 +1,109 @@ +//---------------------------------------------------------------------------- +#ifndef TpvVntFctPrintH +#define TpvVntFctPrintH +//---------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//---------------------------------------------------------------------------- +class TQRMDFacturaVnt : public TQuickRep +{ +__published: + TQRBand *PageFooterBand1; + TQRBand *TitleBand1; + TQRBand * ColumnHeaderBand1; + TQRSubDetail *QRSubDetail1; + TQRImage *QRImage2; + TQRImage *QRImage3; + TQRLabel *QRLabel4; + TQRLabel *QRLabel5; + TQRLabel *QRLabel6; + TQRDBText *QRDBText1; + TQRShape *QRShape1; + TQRDBText *QRDBText2; + TQRLabel *QRLabel7; + TQRLabel *QRLabel8; + TQRLabel *QRLabel9; + TQRShape *QRShape2; + TQRDBText *QRDBText3; + TQRDBText *QRDBText6; + TQRImage *QRImage1; + TQRDBText *QRDBText10; + TQRDBText *QRDBText11; + TQRDBText *QRDBText13; + TQRBand *DetailBand1; + TQRLabel *QRLabel1; + TQRLabel *QRLabel10; + TQRLabel *QRLabel11; + TQRLabel *QRLabel12; + TQRLabel *QRLabel13; + TQRLabel *QRLabel14; + TQRDBText *QRDBText4; + TQRDBText *QRDBText5; + TQRDBText *QRDBText7; + TQRDBText *QRDBText8; + TQRDBText *QRDBText9; + TTable *TbCircular; + TTable *TbProductos; + TDataSource *DsCircular; + TTable *TbVntCabecera; + TTable *TbVntLineas; + TDataSource *DsVntCabecera; + TDataSource *DsVntLineas; + TTable *TbClt; + TQRShape *QRShape4; + TQRExpr *QRExpr4; + TQRLabel *LblNombre; + TQRLabel *LblDir; + TQRLabel *LblCP; + TQRImage *QRImage4; + TQRLabel *QRLabel2; + TQRLabel *QRLabel3; + TQRLabel *QRLabel15; + TQRDBText *QRDBText12; + TQRDBText *QRDBText14; + TQRLabel *QRTotal; + TQRShape *zMarcoIzq; + TQRShape *zMarcoDer; + TQRShape *QRShape3; + TQRShape *QRShape5; + TQRShape *QRShape6; + TQRShape *QRShape7; + TQRShape *QRShape8; + TQRShape *QRShape9; + TQRShape *QRShape10; + TQRExpr *QRExpr1; + TQRLabel *QRLabel16; + TQRLabel *QRLabel17; + TQRLabel *QRLabel18; + void __fastcall TitleBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + + + void __fastcall PageFooterBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); + void __fastcall DetailBand1BeforePrint(TQRCustomBand *Sender, + bool &PrintBand); +private: +public: + virtual __fastcall TQRMDFacturaVnt(TComponent* AOwner); +}; +//---------------------------------------------------------------------------- +extern PACKAGE TQRMDFacturaVnt *QRMDFacturaVnt; +//---------------------------------------------------------------------------- +#endif diff --git a/Vendidos/infdj.com/guardar.bat b/Vendidos/infdj.com/guardar.bat new file mode 100644 index 0000000..fa39875 --- /dev/null +++ b/Vendidos/infdj.com/guardar.bat @@ -0,0 +1,25 @@ +@echo off + +if exist ..\..\perfil01 goto ok + +@echo El perfil que intenta SALVAR, no se corresponde +@echo con el actual... + +goto fin + +:ok + +@echo TRAER ficheros ACTUALES, a este perfil... +@echo (Interrumpir CTRL+C) / ó / continuar ? +@echo pause > nul + +xcopy ..\..\TpvVntAlbPrint.cpp +xcopy ..\..\TpvVntAlbPrint.dfm +xcopy ..\..\TpvVntAlbPrint.h +xcopy ..\..\TpvVntFctPrint.cpp +xcopy ..\..\TpvVntFctPrint.dfm +xcopy ..\..\TpvVntFctPrint.h +del ..\..\testigo +del ..\..\perfil01 + +:fin \ No newline at end of file diff --git a/Vendidos/infdj.com/perfil01 b/Vendidos/infdj.com/perfil01 new file mode 100644 index 0000000..e69de29 diff --git a/Vendidos/infdj.com/testigo b/Vendidos/infdj.com/testigo new file mode 100644 index 0000000..e69de29 diff --git a/Vendidos/infdj.com/usar.bat b/Vendidos/infdj.com/usar.bat new file mode 100644 index 0000000..4fe1fbc --- /dev/null +++ b/Vendidos/infdj.com/usar.bat @@ -0,0 +1,24 @@ +@echo off + + +if exist ..\..\testigo goto error + +@echo COPIAR ficheros de este perfil, al proyecto... +@echo (Interrumpir CTRL+C) / ó / continuar ? +pause > nul + +xcopy TpvVntAlbPrint.cpp ..\..\ +xcopy TpvVntAlbPrint.dfm ..\..\ +xcopy TpvVntAlbPrint.h ..\..\ +xcopy TpvVntFctPrint.cpp ..\..\ +xcopy TpvVntFctPrint.dfm ..\..\ +xcopy TpvVntFctPrint.h ..\..\ +xcopy testigo ..\..\ +xcopy perfil01 ..\..\ +goto fin + +:error +@echo Actualmente existe un perfil sin salvar +@echo por seguridad este perfil NO SE ACTIVARA + +:fin \ No newline at end of file diff --git a/cleanup.bat b/cleanup.bat new file mode 100644 index 0000000..afe8267 --- /dev/null +++ b/cleanup.bat @@ -0,0 +1,8 @@ +del *.~* +del *.tds +del *.obj + +del *.ilc +del *.ild +del *.ilf +del *.ils \ No newline at end of file diff --git a/exportador/1024.htm b/exportador/1024.htm new file mode 100644 index 0000000..1c794da --- /dev/null +++ b/exportador/1024.htm @@ -0,0 +1 @@ + Arbol Indice


Acessorios



FotoArticuloCod.P.V.P 
  ,00,00 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/1025.htm b/exportador/1025.htm new file mode 100644 index 0000000..68751b3 --- /dev/null +++ b/exportador/1025.htm @@ -0,0 +1 @@ + Arbol Indice


PSX



FotoArticuloCod.P.V.P 
Memory Card 1Mb 1.000,006,01 
Memory Card 2Mb 2.000,0012,02 
Memory Card 24Mb 4.500,0027,05 
 Sony PlayStation One 18.085,00108,69 
Cable RF 1.646,009,89 
 Mandos     
Mando Compatible Colores 1.379,008,29 
Volante + Pedal + Marchas (Vibra) 8.190,0049,22 
Mando Dual Shock Comp, 2.586,0015,54 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/1026.htm b/exportador/1026.htm new file mode 100644 index 0000000..1e8431a --- /dev/null +++ b/exportador/1026.htm @@ -0,0 +1 @@ + Arbol Indice


Organizadores



FotoArticuloCod.P.V.P 
 Caja CD Doble (Pack -3-) 246,001,48 
 Estuche PortaCD 12 431,002,59 
 Order Puerta/Guia 20Cds 2.415,0014,51 
 Cubo-disc 10 216,001,30 
 Ruedas CPU (Base) 2.155,0012,95 
 Bandeja Teclado (Gris) 3.794,0022,80 
 Mouse Holder 151,00,91 
 Caja PortaDisco (1 Und) 25,00,15 
 Caja PortaDisco (2 Und) 39,00,23 
 Caja PortaDisco (5 Und) 86,00,52 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/1027.htm b/exportador/1027.htm new file mode 100644 index 0000000..b4e3453 --- /dev/null +++ b/exportador/1027.htm @@ -0,0 +1 @@ + Arbol Indice


Filtros



FotoArticuloCod.P.V.P 
 Filtro Monitor 15" 1.294,007,78 
 Filtro Monitor 17" 6.466,0038,86 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/1028.htm b/exportador/1028.htm new file mode 100644 index 0000000..027ff4e --- /dev/null +++ b/exportador/1028.htm @@ -0,0 +1 @@ + Arbol Indice


Cables



FotoArticuloCod.P.V.P 
 Cable DIMM --> PS2 475,002,85 
 Cable PS2 <- DIMM 475,002,85 
 Cable Serie<->Serie 776,004,66 
 Cable VGA->VGA 776,004,66 
 USB A->A 776,004,66 
 USB A->B 776,004,66 
 Puente Alimentación 690,004,15 
 Cable Impresora 475,002,85 
 Cable PP -> PP (2 Mts) 776,004,66 
 Cable PP -> PP (5Mts) 1.294,007,78 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/1280.htm b/exportador/1280.htm new file mode 100644 index 0000000..e49852a --- /dev/null +++ b/exportador/1280.htm @@ -0,0 +1 @@ + Arbol Indice


CyberCentro



FotoArticuloCod.P.V.P 
 Hora de Juegos 150,00,90 
 Media Hora Juegos 100,00,60 
 ServicioTecnico ,00,00 
 Hora Internet Tarde 200,001,20 
 Media Hora Internet Mañana 150,00,90 
 Hora Internet Mañana 300,001,80 
 Clases Informática 10.000,0060,10 
 Fax Provincial 100,00,60 
 Fax InterProvincial 200,001,20 
 Ampliación Ordenador ,00,00 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/256.htm b/exportador/256.htm new file mode 100644 index 0000000..42f3cac --- /dev/null +++ b/exportador/256.htm @@ -0,0 +1 @@ + Arbol Indice


Hardware



FotoArticuloCod.P.V.P 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/257.htm b/exportador/257.htm new file mode 100644 index 0000000..66c54d3 --- /dev/null +++ b/exportador/257.htm @@ -0,0 +1 @@ + Arbol Indice


Procesadores (CPU)



FotoArticuloCod.P.V.P 
 Pentium III 667EB 133/256 25.770,00154,88 
 Pentium III 733EB 133/256 30.905,00185,74 
 Pentium III 800EB 133/256 32.640,00196,17 
 Pentium III 866EB 133/256 37.010,00222,43 
 Pentium III 933EB 133/256 47.115,00283,17 
AMD K7 Duron 700 12.585,0075,64 
AMD K7 Duron 750 14.905,0089,58 
AMD K7 ThunderBird 750 18.270,00109,80 
AMD K7 ThunderBird 800 21.945,00131,89 
AMD K7 ThunderBird 900 28.480,00171,17 
AMD K7 ThunderBird 1000 39.375,00236,65 
AMD K7 Duron 800 16.995,00102,14 
 Disipadores     
Disipador Especial K7 988,005,94 
 Disipador Pentium II / III 1.000,006,01 
 Disipador Caja Adicional 1.014,006,09 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/258.htm b/exportador/258.htm new file mode 100644 index 0000000..5482666 --- /dev/null +++ b/exportador/258.htm @@ -0,0 +1 @@ + Arbol Indice


Placas Base



FotoArticuloCod.P.V.P 
 Pb, Chaintech K7 + Audio 19.120,00114,91 
 Pb Chaintech PIII FC-PGA 16.785,00100,88 
 Pb Soyo 7VBA133 PPGA+Audio 15.975,0096,01 
 Pb, Tekram FC-PGA+Audio 13.940,0083,78 
Pb Tekram FC-PGA AGPx4 17.090,00102,71 
 Pb, OEM P6BAP-A+ PIII/Cel + Audio 13.340,0080,18 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/259.htm b/exportador/259.htm new file mode 100644 index 0000000..50ba6e0 --- /dev/null +++ b/exportador/259.htm @@ -0,0 +1 @@ + Arbol Indice


Memorias



FotoArticuloCod.P.V.P 
DIMM 32 Mb / 100 Mhz 4.140,0024,88 
DIMM 64 Mb / 100 Mhz 10.745,0064,58 
DIMM 128 Mb / 100 Mhz 20.850,00125,31 
DIMM 256 Mb / 100 Mhz 53.420,00321,06 
DIMM 64 Mb / 133 Mhz 5.270,0031,67 
DIMM 128 Mb / 133 Mhz 9.050,0054,39 
DIMM 256 Mb / 133 Mhz 17.630,00105,96 
DIMM 64 Mb / 133 Mhz -marca- 7.850,0047,18 
DIMM 128 Mb / 133 Mhz -marca- 11.875,0071,37 
 SIMM 16 Mb EDO RAM 7.480,0044,96 
 SIMM 32 Mb EDO RAM 11.535,0069,33 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/260.htm b/exportador/260.htm new file mode 100644 index 0000000..a1ce26a --- /dev/null +++ b/exportador/260.htm @@ -0,0 +1 @@ + Arbol Indice


Almacenamiento



FotoArticuloCod.P.V.P 
 Discos Duro (HD)     
Fujitsu 13 Gb IDE 5300 REV 17.955,00107,91 
Fujitsu 20 Gb IDE 5300 REV 20.880,00125,49 
Fujistu 30,7 Gb IDE 24.645,00148,12 
 Fujistu 9,1 Gb UWI SCSI 48.730,00292,87 
 Fujitsu 40,9 Gb IDE 26.455,00159,00 
 Seagate 10 Gb IDE 16.755,00100,70 
 Seagate 20 Gb IDE 18.805,00113,02 
 Seagate 30 Gb IDE 21.965,00132,01 
 Seagate 40 Gb IDE 23.495,00141,21 
 Disqueteras (FD)     
 Floppy 3½ ,00,00 
 CD-Rom / Ram / RW     
 CD 52x LG 7.650,0045,98 
 CD 52x Creative 8.000,0048,08 
 CD 42x CiberDrive 7.060,0042,43 
 CD 40x SCSI Nec 13.995,0084,11 
Yamaha 2100E 16x10x40 38.790,00233,13 
 Nec 8x4x32 25.000,00150,25 
HP 9510 12x8x32 34.580,00207,83 
 Waitec 10x4x32 24.560,00147,61 
 DVD     
 DVD Pionner 16x 40x 17.395,00104,55 
 DVD Nec 12x40x 17.000,00102,17 
 DVD Panasonic 12x 18.900,00113,59 
 Unidades Removibles     
Extraible Disco Duro 3'5 2.500,0015,03 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/261.htm b/exportador/261.htm new file mode 100644 index 0000000..03dd488 --- /dev/null +++ b/exportador/261.htm @@ -0,0 +1 @@ + Arbol Indice


Multimedia



FotoArticuloCod.P.V.P 
 Tarjetas Gráficas     
 R, TNT Vanta 8Mb 7.575,0045,53 
 R,TNT II M64 32Mb s/TV 14.455,0086,88 
 R,TNT II 32Mb s/TV 18.600,00111,79 
GForce 32Mb MX Dual s/TV 27.675,00166,33 
 GForce 32Mb 2 Mx s/TV 21.925,00131,77 
GForce 32Mb 2 GTS 38.855,00233,52 
GForce 64Mb 2 Pro 62.185,00373,74 
GForce 64Mb 2 Ultra 89.975,00540,76 
 SVGA 4Mb S3 Trio 5.630,0033,84 
 Tarjetas de Video/Television     
Descompresora MPEG-2 Hollywood 15.431,0092,74 
 WinFast TV 2000 10.980,0065,99 
 Camara NGS VideoConf, Eyes USB 10.870,0065,33 
Mando Descompresora RealMAgic 3.500,0021,04 
 Tarjetas de Sonido     
 SoundBlaster 128PCI 4.285,0025,75 
SoundBlaster Live 1024 11.565,0069,51 
 Tarj, Sonido Compatible PCI 2.620,0015,75 
 WinFast Sound Digital 6.330,0038,04 
SoundBlaster Live 5,1 39.120,00235,12 
Reproductor Tanky MP3/VCD 26.000,00156,26 
 Altavoces     
 MS 105 - Cascos con microfono 1.552,009,33 
 Multimedia HeadSet 690,004,15 
 Cascos Digital 432,002,60 
 180 Watios NGS 3.275,0019,68 
 300 Watios NGS 6.155,0036,99 
 360 Watios NGS 7.125,0042,82 
 40 - 80 Watios NGS 1.485,008,92 
 60 - 120 Watios NGS 1.810,0010,88 
 Auricular Tlf, NGS Linea Multiple 17.745,00106,65 
 Auricular Tlf, NGS Linea Simple 8.375,0050,33 
 Auricular + Microfono HIGH Quality 3.390,0020,37 
Four Point 1000 ,00,00 
DTT 2500 46.000,00276,47 
 Microfono PIE 690,004,15 
 Scanners     
 ScanJet HP 3300 USB 13.795,0082,91 
 ScanJet HP 3400 USB y PP 15.480,0093,04 
 ScanJet HP 4300 USB y PP 22.405,00134,66 
 ScanJet HP 5300 USB y PP 30.285,00182,02 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/262.htm b/exportador/262.htm new file mode 100644 index 0000000..48d8309 --- /dev/null +++ b/exportador/262.htm @@ -0,0 +1 @@ + Arbol Indice


Monitores



FotoArticuloCod.P.V.P 
 Monitor VIDI 15" E44 24.705,00148,48 
 Nec 15" MultiSync V520 28.455,00171,02 
 Monitor 17" VDI (3 Años) 34.330,00206,33 
 Nec 17" Multisync v720 39.435,00237,01 
 Nec 17" Multisync 75F 48.930,00294,08 
 Nec 17" Multisync FE700 54.700,00328,75 
 Nec 19" Multisync v921 68.270,00410,31 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/263.htm b/exportador/263.htm new file mode 100644 index 0000000..e233cf9 --- /dev/null +++ b/exportador/263.htm @@ -0,0 +1 @@ + Arbol Indice


Conectividad



FotoArticuloCod.P.V.P 
 Modem     
 D-Link Interno 56,000 Bbs 6.035,0036,27 
 Ext, 56,000 Bbs Serie 9.630,0057,88 
 Ext 56,000 USB 12.235,0073,53 
 Modem Accord 56K interno 6.225,0037,41 
 Modem Accord 56K externo 9.105,0054,72 
 Modem Accord USB 9.400,0056,50 
 Redes     
 HUBs     
 D-Link 5 Port 10 Mb 5.835,0035,07 
 D-Link 5 Port 10/100 Mb 16.070,0096,58 
 D-Link 8 Port 10 Mb 7.675,0046,13 
 D-Link 8 Port 10/100 Mb 22.330,00134,21 
 D-Link 16 Port 10/100 Mb 39.835,00239,41 
 D-Link 16 Port 10/100 Mb Rack 19" 72.700,00436,94 
 Tarjetas de Red     
 D-Link ISA BNC/RJ 45 3.330,0020,01 
 D-Link PCI BNC/RJ45 3.330,0020,01 
D-Link PCI 10/100 RJ45 3.810,0022,90 
 D-Link PCI 10/100 RJ45 + WOL 4.670,0028,07 
Servidor de Impresion ,00,00 
 Switchs     
D-Link 5 Port 10/100 15.635,0093,97 
D-Link 8 Port 10/100 20.690,00124,35 
D-Link 16 Port 10/100 49.155,00295,43 
D-Link 16 Port 10/100 Rack 19" 70.310,00422,57 
 Routers     
D-Link 10Mb 41.810,00251,28 
 D-Link 10/100 IP 60.515,00363,70 
 RDSI     
 RDSI Accord Interno 6.790,0040,81 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/264.htm b/exportador/264.htm new file mode 100644 index 0000000..52019a3 --- /dev/null +++ b/exportador/264.htm @@ -0,0 +1 @@ + Arbol Indice


Impresoras



FotoArticuloCod.P.V.P 
 HP     
HP Deskjet 640C 15.795,0094,93 
HP Deskjet 840C 22.615,00135,92 
HP Deskjet 930C 31.020,00186,43 
HP Deskjet 950C 36.690,00220,51 
HP Deskjet 1125C A3 56.375,00338,82 
 Epson     
Epson Stylus Color 580 14.745,0088,62 
Epson Stylus Color 680 21.640,00130,06 
Epson Stylus Color 880 29.220,00175,62 
Epson LX300+ 27.115,00162,96 
Epson LQ580 24 Agujas 58.430,00351,17 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/265.htm b/exportador/265.htm new file mode 100644 index 0000000..ac3e0dc --- /dev/null +++ b/exportador/265.htm @@ -0,0 +1 @@ + Arbol Indice


Cajas



FotoArticuloCod.P.V.P 
 CAJA Minitorre AT 4.632,0027,84 
 CAJA SemiTorre AT 6.054,0036,39 
 CAJA SemiTorre ATX -Lujo 6.295,0037,83 
 CAJA GranTorre ATX 2001 7.000,0042,07 
 CAJA GranTorre ATX -Lujo 10.895,0065,48 
 CAJA SemiTorre ATX (Hidraulica 10.895,0065,48 
 CAJA SemiTorre ATX 4013 6.682,0040,16 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/266.htm b/exportador/266.htm new file mode 100644 index 0000000..205aceb --- /dev/null +++ b/exportador/266.htm @@ -0,0 +1 @@ + Arbol Indice


Ratones



FotoArticuloCod.P.V.P 
 Raton (STANDARD) 775,004,66 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/267.htm b/exportador/267.htm new file mode 100644 index 0000000..62c2c38 --- /dev/null +++ b/exportador/267.htm @@ -0,0 +1 @@ + Arbol Indice


Teclados



FotoArticuloCod.P.V.P 
 Teclado W95 ps/2 1.470,008,83 
 Teclado W95 din 1.470,008,83 
 Cordless NGS (Teclado) 5.995,0036,03 
Keytronic KT-2001 5.045,0030,32 
KeyTronic KT-800 2.180,0013,10 
 Cordless Desktop + Raton ,00,00 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/268.htm b/exportador/268.htm new file mode 100644 index 0000000..2bc1e59 --- /dev/null +++ b/exportador/268.htm @@ -0,0 +1 @@ + Arbol Indice


Controladoras



FotoArticuloCod.P.V.P 
 Controladora Serie 6.565,0039,46 
 Puerto Paralelo 3.240,0019,47 
 Tarjeta 2Puertos USB 4.840,0029,09 
 SCSI     
 TekRam 20Mb/s 5.540,0033,30 
TekRam 80Mb/s 25.900,00155,66 
TekRam 160Mb/s 42.985,00258,34 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/269.htm b/exportador/269.htm new file mode 100644 index 0000000..8d14363 --- /dev/null +++ b/exportador/269.htm @@ -0,0 +1 @@ + Arbol Indice


SAI's



FotoArticuloCod.P.V.P 
 NGS BER 325 VA 13.875,0083,39 
 NGS BER 425VA 18.510,00111,25 
 NGS BER 625VA 27.450,00164,98 
 NGS BER 1000VA 50.625,00304,26 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/512.htm b/exportador/512.htm new file mode 100644 index 0000000..a785d5c --- /dev/null +++ b/exportador/512.htm @@ -0,0 +1 @@ + Arbol Indice


Software



FotoArticuloCod.P.V.P 
  ,00,00 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/768.htm b/exportador/768.htm new file mode 100644 index 0000000..2900fae --- /dev/null +++ b/exportador/768.htm @@ -0,0 +1 @@ + Arbol Indice


Consumibles



FotoArticuloCod.P.V.P 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/769.htm b/exportador/769.htm new file mode 100644 index 0000000..6eabb7b --- /dev/null +++ b/exportador/769.htm @@ -0,0 +1 @@ + Arbol Indice


CD's



FotoArticuloCod.P.V.P 
Verbatim (CDR-74) 225,001,35 
CD Intenso 74' 125,00,75 
 CD-R Imation 80Min / 700Mb 110,00,66 
CD-RW Princo 74Min / 650Mb 180,001,08 
 CD Miga 74Min 100,00,60 
 CD-R Basf 80Min / 700Mb 250,001,50 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/770.htm b/exportador/770.htm new file mode 100644 index 0000000..42164d1 --- /dev/null +++ b/exportador/770.htm @@ -0,0 +1 @@ + Arbol Indice


Cartuchos



FotoArticuloCod.P.V.P 
 Tinta Stylus Negra 440/640/740/S020187B 3.559,0021,39 
 Tinta HP 610/690 4.914,0029,53 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/771.htm b/exportador/771.htm new file mode 100644 index 0000000..40ee077 --- /dev/null +++ b/exportador/771.htm @@ -0,0 +1 @@ + Arbol Indice


Discos Removibles



FotoArticuloCod.P.V.P 
 Caja 10 discos Verbatim 3'5 474,202,85 
 Caja 10 discos 409,502,46 
 Disco Suelto (-bulk-) 41,00,25 
 Discos SONY - 3'5 55,20,33 
  ,00,00 

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/Acceso directo a db2html.exe.lnk b/exportador/Acceso directo a db2html.exe.lnk new file mode 100644 index 0000000..1bde6ea Binary files /dev/null and b/exportador/Acceso directo a db2html.exe.lnk differ diff --git a/exportador/Unit1.cpp b/exportador/Unit1.cpp new file mode 100644 index 0000000..5be2275 --- /dev/null +++ b/exportador/Unit1.cpp @@ -0,0 +1,194 @@ +//--------------------------------------------------------------------------- +#include +#include +#pragma hdrstop + +#include "Unit1.h" +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner) +{ + if ( !ParamStr(1).IsEmpty() ) + TbD->TableName = ParamStr(1) + "Datos\\Tb_Ref.db"; + TbD->IndexName = "FamIdx"; + TbD->Active = true; + GenerarIndice( "tprodl.htm" ); + Label2->Font->Color = clMaroon; + GenerarEnlaces(); + Timer1->Enabled = true; +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GenerarIndice( AnsiString FicheroSalida ) +{ + int Nivel = 0, NivelPrimario; + int iFileHandle; + AnsiString Header, Body, Footer, Familia, Hijo, CSS; + + + Header = " \ + \ + Arbol Indice\ + \ + \ +
\ + "; + Footer = "
"; + CSS = "class=z onmouseover=\"this.className='a';return true\" onmouseout=\"this.className='z';\" "; + + iFileHandle = FileCreate( FicheroSalida ); + + FileWrite(iFileHandle, Header.c_str(), Header.Length() ); + + ProgressBar1->Position = 0; + ProgressBar1->Max = TbD->RecordCount; + TbD->First(); + while( !TbD->Eof ) + { + if ( TbD->FieldByName("EsNodo")->AsInteger == -1 ) + { + NivelPrimario = TbD->FieldByName("Familia")->AsInteger; + if ( (NivelPrimario & 0xFF000000) ) Nivel = 1; + if ( (NivelPrimario & 0x00FF0000) ) Nivel = 2; + if ( (NivelPrimario & 0x0000FF00) ) Nivel = 3; + if ( (NivelPrimario & 0x000000FF) ) Nivel = 4; + + #define Nivel_1 24 + #define Nivel_2 16 + #define Nivel_3 8 + #define NivelRuptura Nivel_2 + + Familia = AnsiString( NivelPrimario>>NivelRuptura ); + Hijo = TbD->FieldByName("Familia")->AsString; + switch( Nivel ) + { + case 1: + Body ="
"+TbD->FieldByName("Nombre del Producto")->AsString+ + ""; + break; + case 2: + Body =""+TbD->FieldByName("Nombre del Producto")->AsString+ + ""; + break; + case 3: + Body =""+TbD->FieldByName("Nombre del Producto")->AsString+ + ""; + break; + case 4: + Body =""+TbD->FieldByName("Nombre del Producto")->AsString+ + ""; + break; // + } + FileWrite(iFileHandle, Body.c_str(), Body.Length() ); + } + ProgressBar1->Position++; + TbD->Next(); + } + + FileWrite(iFileHandle, Footer.c_str(), Footer.Length() ); + FileClose(iFileHandle); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::GenerarEnlaces() +{ + int Nivel = 0, NivelPrimario; + int iFileHandle; + AnsiString Header, Body, Footer, Familia, Hijo, ImageName; + + + Header = " \ + \ + Arbol Indice \ + "; + Footer = "

*Estos precios no incluyen IVA
Última actualización de esta página "+DateToStr(Date())+" - "+TimeToStr(Time())+"

"; + + + if (!DirectoryExists( "imgprod" )) + CreateDir("imgprod"); + + iFileHandle = FileCreate( "errores.html" ); + FileWrite(iFileHandle, Header.c_str(), Header.Length() ); + + ProgressBar1->Position = 0; + ProgressBar1->Max = TbD->RecordCount; + TbD->First(); + while( !TbD->Eof ) + { + if ( TbD->FieldByName("EsNodo")->AsInteger == -1 ) + { + NivelPrimario = TbD->FieldByName("Familia")->AsInteger; + if ( (NivelPrimario & 0xFF000000) ) Nivel = 1; + if ( (NivelPrimario & 0x00FF0000) ) Nivel = 2; + if ( (NivelPrimario & 0x0000FF00) ) Nivel = 3; + if ( (NivelPrimario & 0x000000FF) ) Nivel = 4; + + Familia = AnsiString( NivelPrimario>>NivelRuptura ); + Hijo = TbD->FieldByName("Familia")->AsString; + + if ( Nivel==1 || + (NivelRuptura==16 && Nivel==2) || + (NivelRuptura==8 && Nivel==3) ) + { + FileWrite(iFileHandle, Footer.c_str(), Footer.Length() ); + FileClose(iFileHandle); + + iFileHandle = FileCreate( Familia+".htm" ); + FileWrite(iFileHandle, Header.c_str(), Header.Length() ); + } + + switch( Nivel ) + { + case 1: + case 2: + Body = "

"+ + TbD->FieldByName("Nombre del Producto")->AsString+"



\ + \ + "; + break; + case 3: + Body = ""; + break; + case 4: + Body = ""; + break; + } + } else { + Body = ""; + //COPIAR IMAGEN AL DIRECTORIO LOCAL + } else { + Body = Body + " "; + } + Body = Body + ""; + } + FileWrite(iFileHandle, Body.c_str(), Body.Length() ); + ProgressBar1->Position++; + TbD->Next(); + } + + FileWrite(iFileHandle, Footer.c_str(), Footer.Length() ); + FileClose(iFileHandle); + +} +//--------------------------------------------------------------------------- +void __fastcall TForm1::Timer1Timer(TObject *Sender) +{ + if ( TbD->Active ) + TbD->Active = false; + Close(); +} +//--------------------------------------------------------------------------- diff --git a/exportador/Unit1.dfm b/exportador/Unit1.dfm new file mode 100644 index 0000000..cce6911 --- /dev/null +++ b/exportador/Unit1.dfm @@ -0,0 +1,835 @@ +object Form1: TForm1 + Left = 190 + Top = 124 + Width = 328 + Height = 161 + Caption = 'Exportando datos...' + Color = clWhite + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [] + OldCreateOrder = False + PixelsPerInch = 96 + TextHeight = 18 + object Image1: TImage + Left = 160 + Top = 64 + Width = 160 + Height = 65 + Picture.Data = { + 0A544A504547496D6167650E600000FFD8FFE000104A46494600010101004800 + 480000FFDB0043000503040404030504040405050506070C08070707070F0B0B + 090C110F1212110F111113161C1713141A1511111821181A1D1D1F1F1F131722 + 24221E241C1E1F1EFFDB0043010505050706070E08080E1E1411141E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E + 1E1E1E1E1E1E1E1E1E1E1E1E1EFFC00011080105028003012200021101031101 + FFC4001D000100020301010101000000000000000000060704050803010209FF + C400511000010303020304070702020509050900010002030405110621071231 + 13224151081452617191A115324281C1D1F016B1236217728292E12425334355 + 7493A2F126376373D2273435364553B2B3C2FFC4001A01010002030100000000 + 0000000000000000020301040506FFC400331100020201020502040504030101 + 00000000010203110421051213315115412261719114325281B12333A1D142C1 + E124F1FFDA000C03010002110311003F00ECB444401111004444011110044440 + 111100444401111004444011110044440117C7B9AC69739C1A07524AADB89BC5 + FD37A3E96561AA64F58D0796261C9CFE9D56545BEC61C947764FEE971A3B652B + EA6B676431B0124B9C06CB9C78C3E90CDA7964B56921DBCE0969946E3F2F3553 + EADD7DAD789372920A79268285EEC363612063F5524D05C2F868F96AEEA39A43 + BE1DB92AD8C37C259657994FB6C8F2B56BEE2A56D29A86C8E23AFDD1FB29A7A3 + CF11B54DEF5FCF68BE5407C6C6F4C01BE47B96EEB4D2DAEC152218638D8C8CE3 + 6EAAA0E02DDFFF00B5BACA868C03CD93F985BD451276F4A6B7C127B23B7D92B5 + DE2BF6A3764B97AC01DE52189D96AD1BA9753C3249E4FDA22C1BCDDA82D146FA + AAFA86431B064971C6CA932672F2A9A9A7A6617CF332368F173B0B9CB893E923 + 4B492BE874C406A6507979FC33FCCAA92EBAAF89BADA42D7544F041267BACC81 + 82AC55FEA7821CF9EC76857EAFD39454EE9EA2ED4CD8DBD4F3745A7FF4A7A1BF + EDDA6FFC46FEEB93EDBC2BD415B48456DCE66876E439F8CADC5BF8394822E5A9 + B83C387938EEAF8550976527F433B9D31FE94F437FDBB4DFF88DFDD0714F4312 + 07DBB4BBFF00F11BFBAE70FF0043B6BFFB465FF78AC2B9F06E9DED0CA5B83F3E + 65E42B1E9E0BBC646773ADE935569EAA85934376A6731E32D3CFD56CE9EB296A + 1A1D0D444F07A61C171157709F50D34019457599C474E57F458B0C3C53D3B235 + D4774AB74710C005C48F97455BAE9ED96BEA86E77722E2AB2F1C78976191B1DC + A94D5339B2ECB77C7E4A7FA5BD2868A7ABF57BE5AE4A6F0E603207F658FC367F + 249331CD8EE74B22E4DD67E91F7CA8D426974A52892986C1C41CBBEAB5959C7A + E2551C5DB4B6D01A37DDAEFDD41519EF2482927BA3B15150DC15F481B5EAB70B + 6DF4B282E00868E6380F3EECABD609E39A36C91BC39AE19041EAA16552AFB994 + F27A2222ACC84444011110044440111100444401111004444011110044440111 + 1004444011110044440111100444401111004444011110044440111100444401 + 11100444401111004444011179D44F153C46599ED631A3249407A2D3EA6D4B68 + D3D412565CAAE28991824E5CAAEE2FF1D2C9A5E0928ED72B2B2B8820061C869E + 9BE1734D7D76B4E25DD9D356CF38A77BBBACC9E503DC158A18DE456E79DA258F + C54F482B95DE69ED1A4E37B63396F6C3A9F879280E93D0378D4B5C6E37B9657F + 39E671792AC0D0DC38B7D9636CB58C124C37C7EEA7D1C6C8D8191B1AC60E8D68 + C05BDA7D1597F6DA21431BCB7669B4E69AB658E06C74B0B5CF03EF91FD96EFC7 + 27AA215DED3E96BD3AF85126F244B8B15C68347543C1FBF90AB2F476A771AAAD + B99EAF7E013FCF7ADEFA46DD7B0B4C544C761CE1E1EF593C0DB7BA9F4CD317B4 + 074879B3EE547098ABB5565AFB22BB5E160E85D18F739ADCA9FD37DC1F0507D1 + B062369C29CC386C793B00172B8A34ED78270EC6BB55DFE834E59E6B95C266C5 + 144D2492B8B38AFC45BE712751BADF6C9258ADED7E1AD69EA3CCFF003F7533F4 + ADD5F5B75D44CD2946E3D931C0481BE2EF2FCB2BE70B34552DA6DB15654440CC + E19008F1F35A3545C9A8C56ECC38F3BDFB1AFD05C30A3A285955726F3BDDBE0E + E4AB268E8E9A92311D340C89A3C86EB2117A1D370DAEA5CD3DD92CF83E2FCC92 + 471B0BE47B2368F171C2D2EAED4947A7E89D34CF6997196B495485E3575FF545 + CCC3406511B8E07295AFA9E27C8F9294671E4BB2E3AC74FD087096B9A5EDEAD0 + 56A8713B4C6E44921C752157B63D04F96A44D76AA79CEE5ADEF1FD94A21D0F60 + 113A36D3543B9875E703F42B35E978ADCB992697CF0883B208925BF889A6AA9F + 8F5B1181E2E5BAA3D4763AF1CB15642E1EF3D557553C37B4CB116412D4439DF2 + 5808FEEB4959C35BC529325AEB9B26370D0FE53F238545D4710ABFB90CAFA27F + C05645FB9744D6BB456B497D3412F30EA00FD145EF5C34D3F5FCCE6C22379E98 + 1B05568B96B5D333E2A1B501AD3F8C1FEEA53A738B81CF10DD62C11B1763F55A + 2ADAA5B590C7D0B090E98E1BDB6CF5DEB2E0C7B4741D4952BB9DAA82E14869E7 + A58C348C021BB858F65D456ABC303E92A99CC7F0B8ADB104750BA7A4D2E92C8B + 49E5BFB98794503C46E1954D0541B8DA0B9AE69E60F629670238E573B2DD63D3 + 9AC2571872191CEF3D3E27F5FF00D45A12319244E8A4607B1C305A5533C5BE1C + 89C3AE16D610E079816F507F9FCF3D6BA99E95F2CB783318C9DA16BB8D3D7D33 + 2A29E46C91BC64105670395C29C31E336A7E1F98ED57B824AAA18C8682ECE5A1 + 75870E3897A73595BE39A82B6313380E688B87303F05A9669F6E686E827E49DA + 2F8D7070C82BEAD5241111004444011110044440111100444401111004444011 + 1100444401111004444011110044440111100444401111004444011110044440 + 1111004444011110045E3575305242E9AA256C6C68C92E38542F18BD202DD641 + 25B74E96D5D674E669CB47CBAA9462E5D88CA4A3DCB735AEB3B1E94B73EAEE75 + 91C7CA36693B92B93F8A5C6BD43AD2B24B569D6C94F46E25A5CDEAE0A272C1AC + 788D7615775967746F3B34F403E0AD8D17A0ED962818E9626C9301D31B7E6AEA + AB72972D6B2C86253EFB2203A2785F535EF6DC2F1239C49E625FBAB86CD69A2B + 4D3B61A385ACC0C176372B380000000007403A05F57734BC3230F8ADDD93D96C + 8227C162B6E3402A042E9839F9C72B7CD6E5FABAA85F131832900C90078AFD4D + CBDA1E4180BC2B2514F473CEEE91C64ACDB72543B3E431B9CEBC70AC7DD35A43 + 6F61FF00AD0DC7E6AECE1FD00A6A1A4A76B400C60185425339D7CE2B8772F68C + 8E42495D37A3A9B323303A2708874B472B1FB94D9BCB059FA5A0E585BB782DED + DA614D69A898B83792373B246DB027F4587628B9206FC162F125A4E87BA38388 + 7329DC463CF18FD5798D54F9ED65CBB1C7D65826D4BC53AAABA8EFB44C5D93D3 + AABB406B406B061AD1803DCAAAE0951491DD2E754F1CD8791956B0E8BA5C1EA4 + DCAC61EC82F1AC9DB4D4B2D43FEEC6D2E2BD94538AB5EFB768EA999BF8B65D1E + 216BAE86D0451DADEFF51AA357FD9EC739CD2FC6C76EAACED25A6E9ADB491C71 + C40BF00B9D8DC955DF04ED7EBD74AABC4ECE63CD8692BA134E5A8CCF6F755FC2 + 741569AA5A9B165FB7FB289C9C9E118F6BB2BE6C7754A6DFA60B80CB3E8A5760 + B231AC692C0A514D411B1A3BA16BEB78D4B9B11251AC80374B3797EE7D178546 + 96DB667D159E29983C02FCBE9233F842E62E316A7DC9F4D14ED7E9A73A2746F8 + 9B2467AB1ED0E1F22ABED57C2BB45C5AF74303A8273F8A31961FCBA85D353DB6 + 378FBA16AABAC51BC1EE056CB5B46A76BA39F9FB91E46BB1C5378D1FAB748CC6 + A29BB4969C1DA488F337C3E4B7BA4B8AB554AE6D2DDD84B46C4B974ADCB4E603 + B95BB1EA08C83F10AAFD71C2AB3DD83DEC83D46A4F49236F74F4EA3F65AB3D03 + FCDA7967F924A78FCC67D93515AAF1135F4952C0E3F81C56D5CD0410E6820F50 + 46C573B5FB4A6AAD1551DBC7DA3A9C1EECB192587F6531E1DF124D43D96FBAEC + EE9927759AF884E1FD3BD657F926B0F744B357686B4DF607010B22948F2D8AA5 + AF9A4F52E86BA8B8D9279E2313B98729382BA5237B248DB246F0F63865AE1E2B + CAB2929EAE23154C4D9587C08E8B627A1CAEAE99FEC3EA453845E91ED2F82CFA + BE2304FB37B73D0FC7F9F25D2F65BC505DE8D95543531CF13C021CD702B90388 + 7C2BA6AF8DF556D680E1BE1A30428768BD7BACF85B756432C93545BC3B0E8DE4 + 90067C3C9684946C7CB25CB231BA3FA0237455EF0B389F60D716D8E5A2AA60A8 + 0D1DA44E3820AB01AE0E19056AD95CA0F0CCA793F4888AB32111100444401111 + 0044440111100444401111004444011110044440111100444401111004444011 + 1100444401111004444011110044440144F5EEBDB0E90B7C95371AC8C3C03CAC + E61971F70516E3AF15683445A64A78646C97195A447183D3DE7DCB942968F547 + 122F2EAEB9544F246F764024E3195628A4B322B726DE2249F899C60D4FAF2BA4 + B6D8FB5A7A124B7BA482E1EF5F740F0BDCF736E17825CE279B2FDC953AD1FA22 + D7618184C4C92603CB6054B3F985D1D3682CBF796D10A2A3BBEE635BA8696DF4 + E20A485B1B00EA06E564A2FC4B2471466495ED631BB9712BB91853A587844B76 + 7ED6BEF378B7DA61749593B5A40C86677506D7FC4DA0B3C2F868A4064E9CDE2A + 9AABB8EA8D6F5BCB036510B9DBBF7C61732CD75BA897250B6F261B51EE4E75DF + 195913DD4944F0C19C774ACAE0E5CEA750DD995321716039CFB9575AE386B05A + B4FC75F2D539D54E3839F156CFA3A5A7D4EC0EA970EF16E01F35A1A8D1594DAA + 16776621629F62D7CE493E6A3BC47AF16FD255529772978C02A45E0AA9F489BA + 7AAD8A3A36BB0E73771E795D6E252E5A156BDF624BC908E06D11ACD415B747B7 + 3DE21A7F9F92EA3D154DBB0E1515C07B5FAB69D8E52C21D33B98FBD74868BA6C + 31870BA37E34FA18C3E450B79138B6C7CB105ACE237FF91EEFFF007677E8B754 + ADE5605A8E20C2FA8D15778A3FBC691F8FC867F45E324F32363B2398F833347F + F3B339817194E1586A9FE094820D4770A599FDE7B8E067C7757005DEE0D2F825 + 1F998614278D8D73F424AD68C9E62A6CB4DACE845C34D5653F2E5DC9CC16CF13 + 8B7A778F608AAFD1F67654DA24A6E46B5F1C9838EA574AE8EA06F2B096AE41E1 + 1DD7FA6B8872DB2ABB91543F9413E795DA5A35CC740C208390A776AFA9A28F2F + B1528E244C28A16B231B2CA5F887EE05FB5E524DB7B97844451017C7341F05F5 + 1018D35331E37016AABED11CA0F742DF2F85A0ABABBA507B330D64ADEF5A6A39 + 629237C2C92378C3D8E6E4382E6EE31F0CAA6C133AF9668DFEA9CD97B5BD623F + B2ED29E998F072028FDEEC74D554F2C1510B6586561648C236734ADA9DF1D4C7 + 13EFECC872B8EE8E57E106B5337FCD9719771B0C9F1F356D0DF18DF3D150FC62 + D1959C3ED622A2939BD4E5776903C0D8B73D15ABC33BEB2FB6289EE7E6563403 + BA9F0FD54A99F23ECFF927B359248F6BA3761C30546758E91B76A0A678922636 + 623638D8A90DE2E51D1B982A1A4870D8AF94D34551089A1707B0F8F92DBEA53A + DF82C5890EC7345DEC9A978777AFB4ACD34D072BF98B5A4E08CAE95E0571D6DB + AA6386D17570A6B9B5A010E380F3EEFE7EEB1EF369A2BB533A0AC883C1180EC6 + E173FF0011B43DC74EDD85D6CC5F1BE3773B1D1ECB52C84A97D3BBB7B3318F74 + 7F402199B234169041F15EAB96F80BC7AF5C9E0D39A9FF00C0AA003192BB60F3 + D3F9FC0BA6E8AAA3A889B246F0E6B86410569DD4386EBB194F264A222A0C8444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111005A5D6B7B834FE9DAAB94EE0D6C519775 + F2FE63F35BA5467A5B5F8D169165B6291C1D51261E33B600CFEAB28C339DAA0D + 7F1235F4D5D55CCF88C9B0F003C95E7A7ACD4B65A16535331A1C061CE0144782 + D65650D84573D804B2F4DBCD582BB1C3348AC7D59F65D8C6147B0445ACD4578A + 6B3503AAAA5C06DDD07C5767517C6887348C2593DEEB70A5B751BEA6AA46B5AD + 19033B9542F12B89D555F3BA82DBCD9CE0062D2EB7D6776D4F797505B1CF7071 + C777A0526E1C70F85BCFAEDD1A26A97EE01DF0B97A7D35FC4ECCBDA3FE1119D8 + A3B223BA434057DEA66DC6F8F70638F3061572E9ED3F4F450B20A4A76C6D03C0 + 2DD59ED0E90B5AD660780014EEC3A776697317A45F86E1B0C43BF928C396ECE7 + 6E3AFF0082EA0B5B4F7DFDE23E27656470E6805BF4952C41BCA5E3242AD389B2 + 8BE7184D24597C504A1807B82BA28A21051C3037A47180BCCD737AAD73B1FD49 + E99620DF93DB6C8CAE74E3D5C0DCF55434109E60640D0D5D07729C5350544E71 + DC8C95CCB6E89DA8B8A5CCE25CC8A4E6F9157EA13BF590A97B1749E225F3C39B + 73696D9474ED6E031836579694A7E585BB782AC746D2F7D800D8602B86C30F24 + 2DF82DBE3B6A5F02F62AA91B88C61ABCEBE0153453D33BA4B1B987F3185EC3A2 + F8EE8BC91B0707BDD3692E2BD553CE4C78A87348E9E2AF7A79995103278CE592 + 3438285FA60E8F928EF34FAB28A3223A8DA523C1E162F07F53C774B4B28267FF + 008D18DB3E7E4B7743A8E85D97D9985BA2C25F1C1AE05AE19691823DCBEA2F53 + 38AB22D3ECC89CE9C6ED35516ABE36ED40C702C773B5CDF9ABD7D1C788506A5B + 3474F3BDACAC80063D84EE5354D920BE5AE4A5918D3260F213FD9738D4B2EBC3 + 4D6B1DCA90C8C89B266468E8467A2F3F0E6D3CDD13ECFB092CEE8FE88514A1F1 + 839594AB4E11EBEB5EAEB1C1554950C327280F613B83E2AC889E1CD5CFBEA75C + 892793F6888A8321111004444017E258C39BD17ED13B02B7E3568C8755E8AABA + 4ECC1AAA7699A9CE37C81B85CAFC23BBCF63D52FB5CE4B5BCE5B82BBAE6603BE + 32B8B78F9613A578B0EA8A6672433CA26663C9C72A7279DC8AD9E0B335E523AA + EC8E9E2DDD18E6DBC954D60D7935A6EBEA933FFC22EE570276572DB24159A7A1 + 0F21E658403F25CA9C54B65C29F564B0D132471E627B815BA84D353F2B248EA8 + B4D7D35C68D9534CF0E6386E33D17AD651D35642E86AA26C8C70F11D173D70C3 + 59DC2C753151DC0BF94F75C1DE1EE2BA1682AA2ACA38EA6170731E33B787B975 + 349A98EA63D1BBF630FE4507C61D0725AAA45D2DA0B5CD3CEC7315BDE8D5C638 + 6E9490E9BBD4BD9D7C23918E79FBE07EBFCF86EAE96FA7B9523E96A581CC70D8 + 9F05CE7C48D355DA475132F16A0E63A17F38737C77CAD79D6F4D3E959F95F666 + 1ACEE8FE82D2CED9580839C8590A94F47CE2543AC34E45DB4AD15B080D9599DF + E2AE5A7943DA082B4EFA1D6FE4653C9EC888B5CC844440111100444401111004 + 4440111100444401111004444011110044440111100444401111004444011110 + 04444017387A5F6277DAA178CB435C7FF39FD9747AE6FF004B6FFEF76BFF00E5 + BBFF00EC7292ECCC3EE8F7D2D4ECA6D3D45147D3B3056CD60D87FF00C128BFF9 + 41672F59A04969E3830FB9E7512C7042F9A5388D832E2B9CB8C7ACAA6F17436B + A2717F33B95A1BE0ADCE30DE0DA74ABF94F2BA5CEEA9AE1069F75DEEB2DF2B5A + 5C03BB995A1D29EBF59D35D9119CB9512DE17E8D86D9431D5CF17355CA32491B + 856DD8AD0E99CDEEAF3D3F6B32BDB86ECACFD37656B1AD25ABD16AB535E86AE9 + D65108659E3A7AC2D635A4B16FAFAF82C9A66BAE1261A2081CECFBF0B75494CD + 8D8000AAFF004A2BDFD93C389E9DA795D52E0C041F9AF1B7EAE77CF765B62518 + 339CB86B13AF9C44ABB9CB9701297737E6AF2CE493E6AB1E02DACC16896E2E1D + E97C7CF2ACDF05D0E110DA5632515CB1488BF142E02DFA46A5F9C178202A7F81 + 3426AAE95B737B739760152BF48DBA761698A89AEC39C3C3C72BD781F6BF55D3 + 7038B70E94F313E6B6F8447ADAC9DCFB2236BDB05DFA2A97769C2B4EDB1F2C4D + 559515D6DBA72D2EB8DCE76430C632492A07A87D272DD4B51EAF63B73EAC0382 + EF03F0EAB4F8A395D6BC0834B63A59172D8F498BC1191A79FF00CFF657E65F49 + BBB44C2F769F7803F9ECAE57E165E57DCB798E84D7BA768F5469BABB2D6B4164 + CC3C8EF61FE0570E5CE8EEBC39D7135254C6F67652907C88CEC55F5A77D2774F + 56F24378A3968E476C4E361FCF82FD71529B48F156C3EB766AEA67DD616E6378 + 7005E3C1AEF7ACCB4B663B648F3619E3A46F905FAD6CAA89C3B4C779BFAADCAE + 6FD337CBA68ABE9A2AB0F8D8C7F2B9AEF0DD5F9A7EF94379A364F4D2B79C8CB9 + 995D1E1DAF515D3B1FD19268DA289EBED234DA928DE0C6DF58C6C71F794B1175 + 355A58EA6387DFD9984F072FB46A8E17DFDB596E9A56C2D7E5F1EFCA47C175B7 + 05B8C364D6741140EA86C35ED68ED2279C1CA886A7D3B417FA6747551B7B4C6C + EC75F8AA135768ABE690BA9BA59649607B1DCCD31923FB2E14D4AB7D2BD7D18C + 7BA3FA0F148D7B410410BF6B94B83BE916D8CD3D9757466198619DB9E87E3FCF + 92E9CB25E282EF46CAAA1A98E789E321CD702B52DA250DD6E8CA793628837454 + 190888802222004642E67F4CC641DBDA9F196FAD76783E78C95D29553329E9DF + 348406B064E4AE2BE34EA476B4E288A4A677690D3BC46D70E9869595D8C3EE8B + 1F4273FF004C517699E6E5F1550F179DEABC48A4EC4728748D0E03C77578DAA0 + 34F6EA5A7C00591805501C58AF655F13292303BCD99A081F15D8AE2B34465F33 + 12ECCDCF10B497AEDBC5EADD1E2A18D0E9D8D18C8F687EABF5C21D66FA5A9FB2 + EE32120F74655B7A6285B341182D0E0580107A118E8A9DE34E8C9B486A18AED6 + F63851D41ED187D93E2D56F1BD1C34FA87655B27FE195D5278C32F2690E6820E + 411907CC2D2EB2B1C17CB3CB4EF6032069E53E7EE5ABE186A26DF2C4C6BDC3B5 + 88631EE52F071B85743975FA6C3FCCBF92CECCE66D1F75AFE1B7122225EE8E8E + 5939646E76C65773E92BC4571B7C35113C399234105723FA4369D6181B748198 + 3F7B6F02ACEF464D55F69690A7A7924CC94FFE191F0E8B4A983BAA9425DE261E + CCE908DDCCD5FA5836E9C49103959CB9538F2BC130888A202222008888022220 + 0888802222008888022220088880222200888802222008888022220088880222 + 200888802E6BF4CB8AA218AD558C04478734BBC3EF13FA85D28A15C64D1B16B6 + D1B536BD854B01929C9F6BCBF3595E0C3F2523C30BE4175D39047DA03346DE99 + DC852D5CDD62AFB9683D52FA3AD6491767272B9AEDB1BABFB4FDEA8EF542CA9A + 691BCC4779995D9E1BAD50FE94FB7B06B24338F96F9EE1A59BD8B490C041506F + 47EBC42F6C964A92D64D1BBBA0ED957A5D68A3B8DBE6A39402D91B819F02B9A7 + 5EE95BB692D41F6B5BB9E3746FE6CB7C55B56A25A1D5B97B488CE3CC8EC4D1F6 + D696B1D85635BE9DB1C6301501E8F1C53B6EA4A08E8ABA5653DC6201AE638E39 + BDE3F9FF001E85A491AF8C1690410B5B89DB2B279F6310583DC6CB94BD302F52 + 565FE82C50BB61DE700739C9DBE817535C276D3514D3B8E03184E7C970F6A3AE + 9758F19279DA79A264F86E3A000E02E64764D91B776A25ABA0E845BF4B5241CB + CAE73798ADE8DC80BF313045132268C0634342F0B9D4B692DF5150E380C8CE3E + 2BD255FF00CFA3CFCBF92CF739E78E15CEBAEB48682339CCA063F3570E946416 + 7B1C2E94B638E188139D80C0546DA1A6FF00C53327DF644F2EDD4FB8BD7A7D0D + A22B4D392D927C671E5E0A7A0B168F87CAE7DDEC8A6CDE58445F5F6ABBCEBCBE + 7D95465ECA18DD80D6F43EF3FCFD5585A0386D6CA0A18E6B8421D2119E52372B + 1F831A4A3A4A0173AB8C39EEDC64752ACF0B97A5D34B592E7B3F2FF25918A823 + 05966B4B1818DB7C181E6D5E75560B354C7D9CB6F8797FCA30B668BAEF87E9F1 + 8E5259657FA8785962B935C606089E7A0230AB6B9681D4DA5EB8D5D9A79D8D6E + FDD27185D12BE100B4B5C039A7A8232169DBC2DC77A65FB3194FB9C8FAE6EB76 + AC1DA5CE377ACC6305E5BB9C6562F0FF005E56D96E2CED6577640F9F45D39A9F + 44592F70BF9A0645211E5B1543EBBE13575BA77CD4711ECF39C01B15C4BA9B2A + 9626B7248BDB466B4B6EA1A56112B19311E27EF294AE34B5565DB4ED53407491 + 969FBA7A2B9F41715592B23A3B96FE1971DC2DDD27129D3F0CF7461AC9722F0A + CA5A7AC88C555136561F03E0BCADD71A2B842D9292A19202338CEEB317714A8D + 5C31DCC6E8A9B885C2BA6AF63EA6DAD01FD4068C10A17A7355710786756194F3 + 4D351B0EF13F2461746AD7DDECF6EBA4463ACA663891F780DD732DD05B4EF53C + AF036664F0CBD23B4EDF1ACA5BD9FB3EAFA1E73DD27E2AECB3DEED776A76CF41 + 5B0CEC70C82D78395C7DAAB83D4953CF3DB5C0487A01B10A274B41C46D133836 + AAEAA11B0E43398907F25A128D72789AE5637477F22E36B0FA44EB7B339B15EE + D86A18C18270413FCF829FD07A51584D3C66B6DB3C4F23BDB74FAA87E15BFCAD + 31CC7452F3A89A2A788CB33DAC6346492B9E6F1E941626C120B6514D34A3EEF7 + 763FCF82AAF58717B5E6B689F45430CB4B4F2641E407241F7AADD2E3F9B630E7 + E0B27D22B8D4CA6649A734D4C24A87E59248C39E5F70F7FF003E15D70674C54C + B5C6F3728C971EF65CBC387FC34A99AA5B72BC17176724BD5CF4B053D152B618 + 58D8E260FE12AFA28EABCF68AEEC4535BB3C6F35B1DBEDD3D5C8400C69C7C573 + 55B263A878AAD9437B4647264953CE376B363299D6CA194389DB63D4AD370334 + EC9031F76AB61134C7BB9F25D4E1D17ABD6A925F0AFE111B1E160E86D19103C8 + 31B05BFE236908755687ADB6BA30E9DB19969CE370F03A0F88581A269CE5A70A + CCA38F1134E3A2CF19B336344611D8E1CE15564D60D60FB6D492D05E5A5A55FB + B781C8F055071FEC674B7161D554EDE4867904CCF81569D96715369A59F9B98B + A3193EF5A7C26CE5B9C3C977746A78876C6DCF4B55445A09634B82ADBD19A696 + 82FF0071A4ED0F661DD3C3C55BB7F71165AC1E71154BF031E59ABAE7FEB7EA57 + 4B4D4AFC7C97945763D8EC6D3555DA42DDFC1495872D502D1B39746CDD4EA039 + 605C5D7D7C96B2707947A2222D12411110044440111100444401111004444011 + 11004444011110044440111100444401111004444011110044440179CCDCB765 + E88770B29E014A71D385947AC607D751B63A7BBB07DEE826F71F22B9829AB2FF + 00A12FA68EB59345D93F0E63BC177ED7D28958410AB0E26E80B56A7A37C55F4E + 04C1B88EA1A3BEDF8F985B0AA56ACC7B90CB8FD0AF7466B3B75FE9DB99191CD8 + C104F52B71A92CB497AB73E0A8602797BAEC2A2F58687D4BA12E06A600F92979 + B2C9A304B5C3DFE4A49A1B8A4476745751BF4CB8AB23A87CBD2B9657F944BBAC + A221AC787D77D3B70FB52CD24B139AEE66BA338560F09FD226BECBD95A75840F + 735A437B7C741EF5635254DB6F7420B0C7346E1BB4EEA17ACB86169BB44F929D + 8D8DE467042B173463B7C513182CDE25F15B4ECFC2FAAAFB55C62925A88F9236 + 87778123FBEEA8AE03DB1D535D537899B9249702541EF9C3BBCD0D5FAB36594C + 00E437C15EDC35B48B4E978632DE57BF73E6AAAA0AEB6308ADB246317CDCCC93 + 288F166E22DFA3E73CD83203B7B94B8AA63D23EF019491DB98EC3B007E657678 + A4B15C6B5EEC92341C03B67ACD6D5DD1C399EF7F2B49595A85B2DFB890DA5239 + A38E4E503C3014A782F6CF54D2909C61CF8DD267F2256B78634124DC40ABA894 + 7386127EA5438C2E9D34D2BC67EE535ACCDB2DEA0A6651D1434B18C363681F9F + 8AF62E68FBCE6B7E270B0EFB718AD36F96B66C6183201F12B9F2FF00AFEEB79D + 46EA7B6C9213CD801B955CF56F4C95352CB5DCB9E3BB3A437C671B1F108B9FA2 + D59ACACB3345576C5ADF07B4852DB0F16A9E57361B9C018E3B737458AF8C6F8B + 23F63382D445ADB55EED97289AFA5AB8C93F849DD6C57529D55572F8191C1F57 + E64632461648C6BD87AB5C3217E915B6570B1624B20826B0E1BDAEF4D7CB031B + 1CA77E5548EABD0F76B25438C70C858D3D42EA958F5B494D5B0986AA16C8D231 + B8DC2E26A784B5F155F62499C9D63D6378B0D4868964C34EE09570E8CE2DD0D6 + B590DC480EE99270535CF09E8EB6392A6DE073F5C0EA1515A9F49DEECB50F3D8 + C9CA0F56EC5723E3A65E1993AFAD977B6DC981D47571BF3E04E0ACF391D42E2A + D3BAAAF96DA86C6CA89001E055B1A7B8A17DA48DBDBB7B767BD7469E2D6C369A + C98C17E2F8F6B5E30F6B5E3C9C32AB7B57166D93605753BA23F88818523A3D77 + A66A62ED3D7C47E41C42DDF51D2DAB1621866CEB74FD9AB4FF00CA2DF13BE030 + B4B70E1EE9AAC76F4618DF2016E28751596AF262B8C38F325644D77B4C51979B + 953903C8AAE51E1F2DF381B91CA1E1CE99A4979DB4BCC3C410A454166B5D00C5 + 2D144CC742464AD5556B6D394F1973AE0D716F5682A2B7BE2CD0C20B2DB0195D + E0719544ACD0D7F963CCC6E59355510D24266A891B1B1BE27F4554F123899043 + 4F250DB4F338ED969DCA895DAFBAAF54D418A164AD63BCB2B67A5B40B187B6BA + 8334B9CF29DC6546B8EA7884FA75476F9765F5312928F722DA674A57EA6BA32E + B5CF78843B3DEF157E698B608DB1451B30D68006CBC2C566644C64504418C1D0 + 00AC6D2F6420B496FD17A8AEAAB8651CB9CC9F766BEF37937DA4A83B38DA4853 + 68598600B06D548218C0C2D98D82F1BACBFAB36CD88AC239AFD33E9220CB4D60 + 21B2969613BE700FFC57CE1E92ED1F40F2724B3F45AAF4B9BEC371D49416581C + D7889AD071E049CADFE93A5F53D3945003B08F2ADE1C9FE2621763DEFEDCD96B + 0F9445523C1438D5B73FF5BF52ADED7D5C2DFA5AAE62EE52E6F28F7AA7380AE9 + 2A2FF71A9E53C8E775F9AEE68E6A5C45E3D960859F94EADD12EEE315894BFF00 + 461575A247758AC5A5FF00A30B93C5BFBACCD7D8F64445C92C08888022220088 + 8802222008888022220088880222200888802222008888022220088880222200 + 88880222200888801190B0AB291B2B482166A1DD4A3271794082DFEC11CF0C91 + BE16491BC10E63DA083F92A1788DC19A7AA925ACB0E29A7C97181C7BA7FD53FA + 2EAE9E06BC6085A3BA59E399A7B80ADF8DD5DCB96D5FBFB95B8B4F28E1B8AE1A + AB44DC4D355B278C46705AE055A9A3F8956DBA44C82B1E2398EC4956AEADD1D4 + 374A6753DC2899531F8730EF37E07C173DF13385559A7A927BE595F24B490905 + EDE8F8FE3EEF7A84F4F669FF00A95BCAF3FECCA9E7665CE1947571364E58A667 + 507195E843461AC686B5A3000F054EF022F974B8D53A0A995EE8D8705A55C47A + 9C745D2E1938DD27271F897B927D8FAD1970F9AE65E38D53A5D5CC92A838C0C9 + 3BD8F2CAE99DC1C8510D63A12D7A85AE73A36B263EED8ACF11AEDEA46D8ACA46 + 3BAC1AFE196A0B15C2D3C949551B7B3A7702D2704774AC0E11B9AFD5D722C707 + 0E5EA3F35566B8D1D72D13DA54524AF89AEC8C8711B2977A335666BAA05449CF + 2C84F8AD1D6EBDEAED849AC608C21CA4AFD216E4EA3D39D9424F7B390142382D + A72265BBED59E20E9E539048E8A5FE9214AF758192440B88DCAC5E035632E9A7 + 6284E39E13CA42EB70555BD4CE53EE88DD9C13982D26AE1ECE6899330FE191BC + C3EAA39A978556AB8832D335D4137B812CFDC7D55DBA6ECEC7C4D25A16F67D3F + 1B99F702B3886A34B74DAB22B3E7B3231835D8E2FBD697D5BA4A7F588448FA70 + 769233CCD3D16FF497152A298B696ECC25A36CB9748DCF4DECE0D6020F504641 + F885556B9E135AEE81F2D2C6282AB0482D1DC71C788F05C6B340D7C7A7967F92 + 6AC6BF31BCB15EEDF78A76CB493B3247DC2775B33B1C1D973A5D6C7ABB4355F3 + 72CBD803DD7B776386FD0FE4A57A478AFF00729AEECF764FEEA7A7E29654F96D + 59FE4B309F62E0458167BAD0DD6012D14ED7E7F0E7759EBB94EA2BB9660C8E02 + D75E2CD6EBA40E8EAE9D8E24639C0DD6C5162FD3577AC4D04CA3F5A708DCD7BE + B2DAD6BC75D82800ADB8699AEECAB6804B4ED3DE6B99905757FC168350E93B45 + EA2736A29D8D7BBF100B87770DB2997343E244BB951586B742EA4E48CC429273 + D5A1F8DFE054A64E1CD8EAA8C7ABD7D447E2D1D9E41FCC1510D6BC20A9A47BAA + ED65C31B82C5A5D3DAD356E8EAA14D7285F574CD3821E0E71F157D16686DF86D + AF0FE595FF00856E335D996141C37A681BCADB8FFE472FDBB87D01041B88C1FF + 00E1B96FB44712749EA291B4F34A28EA0EDCB26D92ACCA2B1D256C624A592399 + A7C5A72B7FF05C3B19C3FB91E69948D270DAD90C8E7CD5934B91D18CFDF0B674 + 5A2AC94A3FC3A274AEF390FE815C834B0F63E8BDA1D2C33F73E8A70AB8657BF2 + E7EAD986E6CACE8ECFCAD0C8A16C6D1D035B80B7D6CB048F70CB0AB068F4CB1A + 4659F45BDA1B2471E3B815B6F19AEB8F2D4B0BE46156DF722D61D3A1BCA5CC53 + 6B65BD90B077566535232303002CA6B405E6F55AE9DEF72E8C523E31A1A147F8 + 83A968F4C69BAAB8D5C81A18C3819DC9F2595AAF515B74E5AA6AFB8544713236 + 93B95C5DC57E225EB895A90DBEDE5EDB731F86B4743EF3FCFDD694639DD894B1 + B2EE62D99F59AEB88D2DD672E7B1D2970CF4EAAFA8A311C6C89836680D18512E + 18E966582D2D7C91E2A1E3CBA2DBEAFBE4161B549532387685A794797BD74B46 + D69E12BE5F44492DB0561E907A9DB0D27D9703F27EEE01EA5647016D0FA3B132 + 791A43E77736EAAFCD46B6D78D0439D035FCCECF92E92D216F6C2C8608DB86B0 + 00176781D0E319EA26516CB2F05A5A2E2C31BB29ED38C3028B695A6E485BB296 + 4630D5C1E23673DACB60B63F4888B9E4C2222008888022220088880222200888 + 80222200888802222008888022220088880222200888802222008BE39CD68CB8 + 8007892B5D537EB353BCC735C69DAE1E1CC98C83648A1F55C4CD154D50E825BD + D307B0E08E76EDF55E5FE94F43FF00DB94DFEFB7F756746CFD2FEC63289AA2D2 + 69BD5562D45CFF006457C555C9F7B91C0E3E456ED41C5C5E1A3217E5CC0E5FA4 + 58060D551324072D0A97F496AC8EC7A25F4CC20495AFC63C703FF557B120024F + 40B917D296FAFBDEBBA7B240E259072C65A0E707C55CAD928B8E484965A31B81 + 36A34F6B9AE2E6E1D2F438F3566AD5693A06DB74FD25306E0F20715B5EBB2F41 + C2EBE9D1CCFDCCB3CAA278608CC9348D8D83C5C545AF7C42B0DAF21B376D20E8 + 01504E39EA39A3B9C76DA59CB07DD3CA7AAC0D31A1E29E1655DCA67C86401DC8 + DDFEAB4BADACD6CF9285B7CBFED86E31EE69B8B5ACAAB55D13E1A7A690B46EDC + 0587E8F1592D06A7E5A86B9A5CEC00E571596C341425A69ADF09C78BDBCC7EAA + B9D7D4634BEBD8E7822EC607B9B2B1A06C03B7C7D551ADE197E8E319DAD6FE08 + C2C4DE11737126D6DBB6989E30D0E735B90A87E0CDEDDA575EC969AE7F674F3B + F039B600E574369FAE8EEB63827C8707B30E1F92A378DBA225A5AB376A2690EC + F3B4B54EBB9D3646E5DA5FC9292CA3B0F48CB1494D1BD8E0E69008214B98C6B9 + BD172AFA36716A9AAA9E2D3F7B984359080D6B9E7EFF00FC7F9F0EA2B754C73C + 2D7B1C1CD23620AAF5D06E5CEBB33113F53D2B1E37685A8B859E395A7B814857 + E64E46B4B9E4340EA4AD4AEF9C1ECC93592B4BDE9B64913E37C2D92370EF31ED + CB4FE4A9CD77C1FB7D7BA49ED6D143524E790FFD1B8EFD0F82E80D43ACB48DAE + A0D35C2EF4D14BEC978FDD46AAF5A685AB90451DEA94BDE70073B77FAAEAC65F + 888E2D87EFEE55CB8794CE4FA8A7D5DA1AB79268E7646D39077E523DC54EF48F + 1569EA7929EEADE57F4E63B1579DE74E535751F2BE08EA69E419E47B7208FD3F + 254CEB8E0DD34E5F516471A69BAF62F3DD3F03F3EAB5A7A2B2BF8E979FE492B3 + 1DC9E5B6E149718849473B65046700EEB2D7384553AB343D798AA619D8D69E8E + 07FBAB2349714682E01905C7FC397A73742B634FC5A51F86D59F993C163A2F1A + 2AAA6AC88494B332569F23BAF65DAAAFAED5983C91C0F023C0F505696F5A5ECD + 7563854D2303CFE2685BA455DFA3AAEFCCB7339293D55C1CEFBEAAD6FC386E39 + 362B4169B9F123424B8A5A89E581A73C8FDC61745AF1A9A5A7A9616D4411CA0F + B4D5CE970FBEAFED4B2BC31B320BA3FD2524A77329B53DA5CD2362F60FDFF757 + 0E99E32680BC801B738A07F948797FBAAC6F3C3ED3B72E62FA611B8F90C850CB + A705A9DCF2FB7D5F667AECEC15A96292FEED6D7D063C1D7F6FBC596B0034D5F4 + D267C9E16CE37C2E6F33246380F10E0570B8D03AE2CD23AA2DD74A960030395E + 566DAAE1C62B753C94F1D75448D778BCF31FAAD670A65DA4D7D50DD1DA55B75B + 6D1C464A8AC858D1D7BE155DC45E3AE96D3B492328AA5959558EEB63703BEFE2 + 17393B4FF12AFE1D0DC6E7565A4E795CF385B6B0F07DA1ED9AEB505EEEA798E4 + A82AE39C472C8BE77F2235A9F54EB2E27DD48924963A32EEEC6DCF281F056570 + D741535869D9355461D3E3201FEEA4DA7F4FDB2CD0865240D040FBC46EB13576 + AEB758A95EE7CCC74C06CDCABFA2ABF8AFDBE44A315133B52DE692CB42FA8A87 + B4103BADF35CE9AEF51DDF56DC8D35073B98E7E365FBD53A96EBAC2EA29E06C8 + 6271F03E0AC1D11A5A0B5533098C3A770CB9C47F3F9F4DAD2696EE2372DB115F + 6488CE6A28FCF0CF4AB2D341199616FAD3C65EE574E90B612E692D5A5D396974 + 8F69E5569E9BB60898D3CB85E83886A2BD2D2A9AFB229845B7966EAD14E2289A + 31E0B683A2F38181AD017A2F1364F9A5936504445032111472FDAF34658B985D + 7535AE9DEC3CAE8CD435CF69F7B5B923E4B2937D86091A055B5571DB84D4F14A + F9B5A513046D738E62977C0CE077373E40649F05FAD3BC72E155F5B9B76B1A37 + FF0089D99EDA2961C3B1919ED1ADC0F79DB63E454FA36633CAFEC4B95E338D8B + 1D178525652D653475349511544120E664913C39AE1E608D885EC082A0D6089F + 51116004444011110044519E216BAD35A12CEEB9EA2B8329DB83D9C40E6494F9 + 347EBD101265A6AED57A5E8657435BA92CF4B234E1CC9ABA36107DE0B9726EAF + E2F71178B371367D1B4B3592C6F7723E719CB9A73BB9DE3B676F1C74CAFCC3C0 + EB6C96D1F6CDEEBAAEE0E197BFB5380703DC7C73BECB734FA39DDBA5B186CEAF + 835A68FA899B0C1AAEC52C8F21AD632E1139CE27A0003B75BDE61E6B8A2A780D + 6EF5091D6DBCD5C15CC1CD138C848277C0C63CF1E7F02A45E8D1C51D5943AC1F + C35D56F7D5085AE14D3487BF186B4BB19F1690318F8636EB65BA0941E3063275 + B028B5B455EC980C382D831D90B4A70707864B27E91114004444011110044440 + 16B751DEA86C36B96E17099B1431B4B89270B64B973D2E756D5CD5B0699A09B2 + C7E0CA1A7AE7A0FE79ACA4624F1D8D171578F37BBE5D24B4E92E6653E7944ADE + A7C3F250DB468DD69A86A3D7ABAE3541CFDCB8BCA98F0BB4251D15BE3AFAC873 + 33B7008EAACA680D686B406B47403A2E8E934B6DFBC7E1441471BB2A0A3E0E3F + D60BEB6E2F7F3753CEBF778E155BA8692694D64DDC617025C7055B33CB1C10BE + 694E18C6F338AA1B889AD6E375BBC96CB64A48279435A7E8B3AB82D3CB92326D + FD496362C2F43798515EAEF4E65739A0E0733B3ED2EA9827120C82B917D1CECB + 76D3D57555771387541181F3FDD74FE9EA974B1B492ADD5E91AAE336BD88C65B + 92345F19F757D5C72C355AB2E705A6C1575B50FE464713893F92E2DD39DA6ADE + 274F7193BECED8BB3E1D55BDE96DADBD4EDACD3B4727F8D3FDF03AE3FE27FB28 + 6704EC0EB75A4D7CCDC4928DB3EF5642B73928AF722BB963600D8741B0F82C7B + 8D5368A827AB710046C2467CD7BF40AB5E38EA66DAACAEA38E4C3DC3BDBF8AF4 + 5AFB15142AE3DDEC1792A1B8CD26AAE24B2300BD8D932EF11D574158AD9CCC8E + 26B7668002A8381365965927BCD4B32E95DDC246EBA4747DB83DCD25ABA9C3E3 + F82D1733EECD797C5232ACBA739DA0967D142FD23F41C955A420BD51C1CD3D09 + 2C970DC9E42720FF0070AFCB4D0B1910EE859373A0A6ABA19E8EA621241330B2 + 4611D415E6F5DAE96A1B832D50C6E8E37E0A6AC6C40DAEBA6C636192AD8BAD0D + 2DD689D4F3B43D8E1B1EB854CF1B387774D05A95D70A06BDD6E95E5F0CCD1B0D + FA15BDE1971069EA606515CE4E47B76049DC2D4A2E504EBB17C2FF00C16279EC + 44B881C30AEA0AB75C6D25ED703CCD7316D7877C71D5DA2E68EDFA829E4ACA56 + 77798FDE036574433D3D54598A48E663BC8E73F92D2DE34658AEC499E918D27A + 9685B4AAB22BFA6D4A21A32AA3D2874E368C1A6A39A49CB721B8F155BEABE3AE + B6D5024A5B352BE9627EC1CD0738F8A9753F0A34BC72091B1608F3016D8DBF48 + E9B83B47321E668CE365AD6663FF001488B837DD949DA3425F2FB57EBF7DAC98 + 3A43925CE3BAC6D73A5A974DDE6DA29AAA479748D27BEA63AEF8A96DA7259410 + B399A30DE51D15776A8753EBCD494F336291B0324E6E67670A5A7539CE3CB966 + 1E22B0776E968E39F4D506772610BE5CACB1CAD3860581A2A67C56AA5A579C98 + E30D2A63100F60C8565D39D16BC3F7329651556A5D274F5D4CFA7ACA58EA6220 + 8E57B738EBD0F51D552BACF8331BA47D4586630BF24F6329C79F477C975C54D1 + 324072D0B4374B147203DC56F5A8D4ED6ADFCAEE4795C7B1C5723B5A68EA9114 + F1D4B434FE20718F7152ED39C5A6B9CD82EB1631B1711FAABE2F5A65B246E8A4 + 8592C673963DA1C3E45565A9B85963AB73DF1D2BE8A5393CD16EDCFC0FEEB0F8 + 758BE2A259FF000C2B31F991B6B4EA9B25CD80D3D6B1A4F838ADD3087B799843 + 879B4E551F74E185F6DF2992D356D9C039018E2D77C8AC16DCB5CE9E9047332A + 30D3D1CD2B2B5DAAD3BC5ABEE4D38CBB17FA2A72D5C55B9C4E11D7D097E3EF1C + 2DF50715ED153286C9492463C700ADA8718ADFE68B43058A8A16EE2469FF0001 + 38FF0064FECBF3FE922C3E737FBA7F657FAA69FC8C136FCCAFA1CE1D1C542871 + 234FE37139FF0064FECB555BC59B74523A2A7A27C8EFC2482A99F12D37E9CFEC + 670CB27BCE3B124AC0B9DDEDB6D6975655323C78672554375E24EA2B97345434 + AE881DB60B4C74FEA9BFC825AF95F1C47A979207C96A4B885B6BE4A238FA6EC6 + CBB92AD6DC52631CEA4B4778BB6C8392A0B6FB25F3555676F707BE3889CF7BCB + DCA6967D03414D2472C999A46F52E1B29DDBAD24901B1803DC174349C06CB1F5 + 354F957F9FFC2995DEC88E697D2F476D85B1C5034BBDA23753FB0D95D239B96A + D9D8F4F39C5A4B3E8A7F64B23226B4962E9EA75F4E92BE952B09108C1C9E598D + A76CAD89AD25AA5F49008D800094D4ED8DA000B246CBC7EA7532BA5966C46380 + 88B45AEF5659345E9CA8BEDFAA9B052C23619EFCAEF06347893FF13B2D526967 + 646E6AAA29E929DF53553C504318E67C923C35AD1E649D82A178A7E939A574E4 + 8FB6E9684DFEE7F7416822169DBF37788F0FCD53FA9753F10B8EB7F114667B36 + 94649DC6C790DC6DE3B733B07EBE03A4C747F0BF4A69285D58E8993CB08E792A + 26DF18E524E4F4E84E7C3CD6F697473B973630BE662584F0451D73E35F15A37B + EE37796CD6B906D030F66D7376232D68DFAF523F35B2B3704AC34EF64F79B8D5 + DC6A1AECB8BDE40774D8819F7F8FEEB4D73E32DD6B2FF2DA34458DF5D046397B + AC71DC75386BBA7F3DC34741C4ED6FA36E9FFB616991D4B527BAE2DC06E47811 + B788CFE8BA35D54423CCE2DAF38D88F37B169D570B341CE7BD66696918C12EF9 + FDE58370E0CE88ABB74949474D2D0CD21C89237B8004038D893D32A7361AA8EF + 368A6B9D2B98E86A19CEDC3874F2DBC568F5B6BED31A3687D62B6A9B55525CE6 + 36088F310F19EE9C6C0E40C8EA33D16E595E9631CC92C327153716D7621FE8FD + 7FBDE86E2FCFC3C96EAEAEB4CEC7C839CE794B585C08F23B007F5C02BAC6DF73 + 64E061D95C43C379AE7A8F8B32EBAF5134542C6BD8C0EC8E6CB4B401E677C9FD + 360BA7B495CA491CD0492B5E7C39CF4FD56B1DFEDEC53CFF00160B56378705FB + 5856D90BE204ACD5E7A71E5782D0888A20222AE7D21388B0F0E3404F728DCD37 + 2A9CC342C3B9E7C6EEC78E323F321652CB32964D3F1F78DF66E1BD2BADD481B7 + 1D432B7FC3A666E22C8D8BF1E3EEFCFC81A034D68AD4FC48BDC5AC78895B2CF0 + 4CEE78A91CE3D36C6DE031F41B6010567F06345B6E714FAD75A44FAEBA5738C9 + 136A3BD80EDF9B7EA4E7C7E3BE411636A7BCD3E9CD3B557395A0450464B5B9C6 + FE5D0AECE93411E5EAD9D883643F59F14B48F0E2A60D3F0DB449D9B705918C76 + 631F03D739FCFC49389668DD476CD6169FB56D0FFF0000920876C5A479FCC7CD + 50FC29B2C1ABEE978D5FA86963AB8EA5CF8618E468C65C3BC70318C03B7BCE46 + E17ABB466A8D22DB8CFA7B51C5416A7F7899642C2D1D7C075F0DBF521752AA35 + 7D35745662FDBC221CF1CE0B2B8AFC4FB4E8C8BD5291ECAFB9BC10228DD9E43B + FDEC7BFC3AFC36CD7DC1CA3BED4EB93AF3503D9465EC70858FC35D20734B7206 + DB60E73E3F9922B4B44E5973FF009A2864D41797BF9454CAC2E8984EC39187EF + 1DC105DF0E5DB2AD2D09C2FD4777AD7DF35C5C676C5D99708B9F2EDC0C0F1C0D + FA7BB185455745D8A73F89AF65D97D5869BD91D3DA3EF22A434B256BC67196BB + 2158B41273C60AE4EF473BD36A3525F69296679B7D3498A76B8F405C7DE7C3F5 + F3DFA82C956D7C6D195A7C4211B12B20B66661B6C6F5111710B0222200888802 + 22203CEA9E63A695E3AB5848F92E3BE2A442EBC73A864A4E1B545A0786D9FD97 + 61D5B5CFA5958D197398401EFC2E40D73FFBF7ACFF00BE3BF552C6C0B3238DB1 + 46C898006B1A1A005FA5F02FABD951150AE297820C89715AE9F66E919DCD761C + FCFC9529C1CB3BEE778A8BD5412435E7973E6AD1E3D534B2E95ED230795A0E54 + 5FD1FAAE96AED0FA36604D13FBC3C56970D8576EBA6EDF6216E705C5A6295EE9 + 1B80ADDD3503991372144747DB010D25AAC7B7D388E300051E35AB53972A15C4 + CC60EEAD2EB6D4149A6F4FD4DCAAE40C6C6C247C967DE2E54969A092B2B26645 + 146D2E25C70365C6FC77E29556BABD7D83660E3431BF1CCDFC67A67E1FCF879C + 8C73B9394B1B7B91E9EB2AF889C4892BE405D0F6BDD1E00780F92BE68A9A3A3A + 38A962003636E36F350DE146968EC969654CACFF001DE36C8DFE2A6CE7068249 + 000EA4AEC70CA52CDF3ECBB19C6160F2AFA98E8E8E5AA9480C8DB9F895CBBAEA + E151ABB5B3282271730C9BE3CB2ACBE35EB9829681D6FA29413820E0F52A27C1 + 2D3D2CB3C97CAC8CF3CA7B9956E9A12E23AC4FFE288D92E545B3A1ECF1D0D0D3 + D1C4CC06340574690A0E48DA70A13A4ADE5F234F2AB66C54A2289BB782E971AD + 4A8C7A71EC8AEB8FB9B7A6606B02F478C8468C05F578F6F2F26C119D5B65A3BB + DB26A0B852B2A69651DE63874F783E057316BCE074D4B5AFABD3B580B32488A4 + 3CAE1EE07C575F4D187B4E547EF36864ED3DDEAB6E9E959F0D841A6B74719C56 + DE2058A6EC9B1D4803A641231EE5208750EBC8E26B391DB0F18CABDEE9A7A463 + 9C62E66FFAA70B453D8EAC138925FF0078AEA55C2299EEADC7EDFF00A43A925E + C53D72BEEBDA880B5AD783E18610B452E9CD5D781DA57CD246C775E67615EC6C + B59D39E5FF0078AF8CD3D29764B095B10E07A74F33B72BE9FF00A63AB2F05476 + 5E1D5B63631D5A1D512839391B2B334B5AA2A40C8A969DB1B06DDD0A4343A69E + 48CB3E8A5766D3C2320967D16FF5749A2AF9695FBFB90E57279665E97A77B58D + C82A694C30C1F05816EA26C2D030B66D180BC9EAEEEACF26C4560FABF2F6070E + 8BF48B50918351451C80E5A169EBEC71C80F702932F85A0ABEBD44EB7B330D26 + 56F71D32D7670CFA28F57E9C95A0B704B7D92323E455C7253B1DD405873DB627 + FE10BAB4F179A5896E8ADD699425CB4951CBCDDADB299C4F53D9E33F2216964D + 0D6563B3F6596F9F2BF1FA2E84A9B1C4FF00C03E4B5D3E9C8DD9EE05B51D5E8E + CFCF5AFB11E492ECCA29DA2B4B8EB6EAECF8FF008C3F65F83A334A8FFF004EAE + FF00C61FB2BAE5D30C3F83E8B1DDA59B9FB83E4A715C31FF00C3FCBFF63E3F25 + 312E8FD3AD19A7B7D503FE79863FB2FB1693B431E246DA9AE78F17BB23F4572F + F4B37D81F25FB66976FB1F457467C360B6AD18C4DFB95453595B19CC14B145FE + A316C69AC72BC8CB49568C1A65831DC1F25B1A5B046DC7702B7D629A562A8A5F + 45831D36FB95D5B74D3DC4659F452CB469B6B304B3E8A5D4D6B8A3C7742DB46D + E5635A3C000B91AAE33659B22C8D691A6B7DAE3880EE85B68A26B06005E88B8D + 65B29BCB2C4B011115664F8F7358C2F7B835AD19249C00170FF10750DC78DBC6 + 836E8A49069AB54858D8B9800581C3271BF78F8F5F0F01B761711E4745C3CD49 + 23490E65A6A9C08F022272E4CF462860FE9BB856085C2A24A9773C9BEFD31FDC + FCD6E68B4DD6B167B1252E58B4BB96DD34349434105BEDF4F1D3D340C0D6318D + C63F9FCDD4278FF25C62E15D5FD94D7BA5738097906486EFEEF30DFA79A9BAFA + 447244F8668DB244F1CAF6B86411E217A7B6AE7ADC23B15147F036E1A759A520 + A1B54F18B838735635FDD95CFF00D40F0C7C76254F6FDA5A0D51649ED95ACE68 + E5196BB192C70E8E1EFF00DCAD06B1E09586E550EAFD3F5525AEA8EFCAD3DD2E + C0F7E46E3DFD7F25168E2E32E85A80CA3A975E29410035E3B5C81BE002323F2C + 2B21C45D54AAACAF1EDB6E8A9D7BE519757C38E2550583EC9B3EA9653D3B090D + 8DCF706B987AB5DB1DBC7183BFC495FBD1DC2CA6B5C0D9F50BDB7ABA170719A5 + 0E7363181DC1CC4F300EE63920673B8D82DADBB8F8CA69FD4B5AE959EDD20716 + BE5A7CE1BEEE577FF5056B6959AC5AB2DCCB9D8EB22ABA7775E5FBCC3E4E1E07 + F8163457E92BCC94567EFF00FE1294ECE5E4CEC466D96C7E5AC6461AD6EC0018 + 002B1348DB64639A4B4AD95AB4EB0107942A538FD57AC2F9A8868BD395CCB6D0 + B599A97364E52F1CE5A4B8F5236CE3FBAAF5FC515CB9224615E0B535AF1CF87D + A222753D45D05CABDBB0A6A221FBE3C5DF77DC71923C956B3FA4FEADBA569669 + 8D001D086E40A8ED247786F9696F9F928BF0E3845A728266D7DC6A9978AE690E + 7733B201EE9E87AEE0FECAD86434F0B58C8696289AC686B406F40061726BE1AE + CF8A5B7F92F4F0431FE917C4FA681D5759C3FA56D2C7FF0048E6C330207C4BB0 + AD1E18F1DF48EB2D3B5B729E6169A9B7C4E9AB29677E5CD6346EE6F4E6F2C633 + 920788CE963735BB18A32D3D47200B9E78E1C30ABAAD614751A5A99F0415F206 + CCC8F66824FC3001FD0F41B08EAB41D38F325930996DD57A5356CF2D6D458F45 + C95B6DA790B44E5EECE33804E06012AABD73AD2F7C71E2458FD62C335B6D546C + 6B5D0993981209739F93E277F0E800DFC6E2D17A42874B695A6B2454ED908687 + 4E4B73CCF2064FD3E9E6B730410D333922A66443DC0856D5C2F2949EC32208A3 + A7A68A9A26B591C4C0D6B5A0003E4AA8F4A1ADB845A362B75BE09257543B2FE4 + 3E1EF1F123FDDF95B3D4AF57C0EA987926839E21ED0385D3BEAEA54E09E0C1CE + 7C33BE6A28349D352DBF46554B4F4ACC49282EDCF524E198F1FC86161EABBE5D + 78817FB7696A4B6D4D052B27E5A97B9C40712E03BC3C31E5BF8ABDA0AAAEB952 + D65BF4F4115352B5DC9255F2820F9866DB9C11BE7F3DDAE59F63B5515A28994F + 4D4F1B5D8EFBF182E3E24E31FCF21802AEAEA6E874B9FE1EDD88A8453C9E1A6B + 4B69ED3143152DA6DD131E1839E52DCB9C76EA7F21B745A7E3456D75BB8755B5 + 1471BDF2CA3B36F201B673E7EE0E52D2BF4F1DA533D92B43E103243BA2B654A5 + 5B847624730703F5ADCB4B52BAD8DD3353555D5951CEE943F1CDD035B800F424 + FCD75D70EAFD535D047EB9492D1CE581CE8A46905BF3EBF1542F1138ADA7ED05 + D6BD33430D75D5DDC6C8C6F308DD9C7E7FDBA75DC298F046A2FD4F696D56A294 + BABAA1DCE5AEFBCD6E1A003E5D3A2D6A612BAB752F894577C109622F2751222F + CBE4646DE67BB017962E3F48B5D3DE2922760BBEAB18EA4B7838E6FAAB969ED9 + 76883748A35FD5B49CB9C373E5941AB68F7E6E51F9AB3F057FE931924A8A3035 + 851970043467DEB369750534CEDB18F71589692E8EEE264DD2E3BD73FF00BF7A + CFFBE3BF55D7F04F1CCD0E63815C73C44AA8A978ED586538FF009638FF007546 + 31DC16A0E8BEAF8D707343DBF75C3217D5ECE89295716BC1066AB55DADB78B15 + 451B865C5A4B42E69B7D556F0F35D0A8735FEAAE7FF88D1D30BAAFE1D5447596 + 85B5EA263DEF6B5931F31B15CAD5D3651775EB59F26719582C1E176BFD317AA0 + 64D4F71858EC0E66B9D82148B56716347E9BA291F35CE19656B768D87249C2E4 + 9A8E0DDF69EADCEB6D5490C79DB95CB7167E0E5754BDAFB9D5BE423A873B2B9F + 7DB0B9F361E48F2C9763F3C53E2D6A2E2255BED5696490D0176006E72E1EF5BC + E14F0F63A085B5F708F9A43BF786E4FF003F9E730D31A0EC9A7E212BDB19737C + 4EC179EAED7965B2D3B9914AC748D1B01D02A1249FF5365E0CC618DFDCDF55CF + 4F470992691B146D1FCC2AAB88BC49823864A0B61E671DB2D3B950DD47AC6FDA + AAA4C144D93B3271DDCF45B8D29A123672D55CC99A6777837A80B6E11D4EBE4A + AAA3B78F65F5332928F723BA6749D4EA4A9170BA97F645DCC01FC5FCFE7BAEFD + 2B678E9E28A9A08F96360000017E6CB680D6B638A3E568E800561E97B2105AE7 + 37E8BD4534D5C2E86B3993EEFF00E91AEDB9B375A4AD9C8D692D53BA58831802 + C1B55188631B2F6AEB8C148DC170242F25AABA5A8B363622B08CF4515ABD5914 + 0E20B9BEE0B106B667577200A31E1FA892CA88E644D57E1EC0E1D1438EB461C9 + 6F272A7F5AC6EC72729595C3B51FA4CE51269E8637F568585259E271FB8169BF + AD63C632DE64FEB4881C3F932AE8E93571EC8C6C6D7EC58BD90BF4DB3440FDD0 + B4FF00D6918C1772617D3ACE33BB7930A7F87D6781B12086D9133F0859B15331 + 9D00512FEB58CE393953FAD63C632DE6554B45AA9774676266000BEA858D6B18 + 38796E53FAD58305DC9855FA76A3F48CA2688A1675A30E4B79309FD6B1BB1C9C + A53D3B51FA465134450BFEB58F18CB79906B58C1C3CB729E9DA8FD23289A2285 + FF005AB060BB930875A30E4B79309E9DA8FD2328999683E0BE18DA7C1437FAD6 + 37639394A0D6B18D9C5B94F4ED47E91944C0C2D3E017CEC19E414406B560C177 + 260A1D68CDC8E5C2CFA7EA7C0CA25FD833C82760CF20A2275A4648E5E55F3FAD + 63E5D8B7993D3F53E06513011347805FB0C03C14346B58C121C5B95F06B560C1 + 77260A7A76A7C0CA2698450B3AD19B91CB84FEB58C6E4B70563D3B51FA465134 + 45087EB8881382CC2CBA4D5D14E400E6FBC2C4B876A22B2E23392588B0286E70 + 550D9C0159E0AD4945C5E199C1AFD4D6E177D3B72B4993B315B492D397E33CBC + EC2DCE3F35C59A72F573E096A5AFD21AC2DCE36E9657490D4C6DC820F4734F8B + 4E3FF42083DC4EDC286710F49D9353D01A6BD5AE9EBA319E5ED1BDE6FC1C371D + 3C0ADAD1D8E32C6704595258356699BFB79AD776A7909CE185DDE3F91DFE9FAA + DCB007E4C6E6C807B272AB0D65C04B2C75124D60ADADB53C92435A79D83DC06C + 47D54363B2F16B45B8BED95E2ED4CC04F661DCC40CF40D70EBF00BD2C5EA1473 + CBCCBE5FE887323A057DC9F71F7119550687E34C75976FB235750BAD95592D0E + 2D20647810727CFF00992ADE05AE01CD3969E854EABA36F6EE48D6DFF4FD9350 + 537AB5DADF0CCC3E25BB8E9D3CBA0E9854E69B8AA384BC70B75AADF702FB4DD6 + 5644E85CED8073B9707C320EE3F4E82F50325730F1F221ABB8AF4364B2C9CD53 + 90C7B8386C493E39F78F25A7AE50AF1625BE7EE3B977F137D2329AD45D62D0B0 + 32EB767F74D481CD1C44F8B47471F79DBE39507D1FA4356D6DCEB3596BEBDCF4 + F1CCC7CB3B448438823241C741B9DBDD8C29CF0F786B60D156F81CD89B57752C + 065A870CEE46E07BBDFD7AF4CE0413D26F51D532928B4D5BA77B66AB781235B9 + E9FB75F905AD2D372C7A935F4416C45EBE3D57DADC754E83AB70B553CC41A6E7 + 3CCE6B4E798B49208F3DCF53E0ACDE0AF107FAD2D6EA7AB608EE34DDD95BB77B + DF8FE7D703DB42D8E3D37A5A92D11E0CC1A1D50F1F8A43D7F21D3F2CF8AAFB43 + 38E94E3DDCAD1451B04155DF2D1D181C03F037F761742CD1CB4718599EFB35F5 + 2119F33C17FAAF78F1A8AE9A6F4AC35D6A21B3F3F287100E321E3F556191DE23 + DF854CFA505E0368ED7A721C3E6A8943DCDC1C81B81FDDDF2F9E756FFA4D7926 + 416F9AE789F6A8ADD555D3C4197120C382C25C0E0E700646C4755D29A7E5AC97 + 4D5BDF71DEADD10748797072464823DD9C7E4B9E6AA0378E2CD834E8676F4F6B + 8626CCD0720900171F96DF92E937E072B40C06B4058854ABD44E316DA585BF9F + 73116DACB31EE1570DBED7575F507FC38222F3F90C9FA02B9FADDAC3897AB28E + BFECB96165B7B57479CB1AE780065A36CEF9F86F83E4A7DE91B7DFB27411A189 + E04F5CF0C03C71D76FA7CFE5AFE18D9BECBD216EA42D02474625936C65CEDF7F + 7E303F257E9F4CB59A89426DF2C56F8F2C8CE7CAB62233717F5AE9534768AAB2 + 085921E588398E6F3EFB9DDDBF5F9939DC92AFCB256D657D9292AAE14E20A991 + 81CF60CEDF3DD50D2DB5BADB8EB1DBCE5D476901AFC03D5BD41C7F98E33EF0BA + 10B5B181134F7583942D7AABE4BE718C9B8AD9124DB5B9857FBA4564B2D55D66 + 00B69D85D82719C0CE33F4FCD50572E20F1135F50CD058E87D56DF2BCC2F959B + 646D91924E36FA1DF6534F499BE3ADFA3A2B4C0E226AE786E0788D89FEEDFE75 + FD70EECA2D3A56DF4019CAF1107C9B60F33B739F78CE3F25B1A7D37E36F9424D + A8C56F8F764672E55B1AAE1E70FEDFA700AA900ABB9BF792A1C33CA4F5E5CFF7 + EBF056A582925748DC02BD6C76674E5A795585A7F4F88C34967D16F6AB574692 + AE956B0915462E4F2C9F4F511C70F3B89C1240C0F1DFE5D142F525FCB39807E0 + 0F7AD8DEEA9D1D047E2E2D76F8E8398FEC3E4AABD5D5EF0D90825795E17A2575 + B867674DA673839B3CEF9AA64ED0B1B21EBE6B551DEEA24C9121DFDEA155758E + 92AB049EAA47658BB568C6F95EF2CD253A5AD651CDB25993489076F30FC4578D + 4D5CFB9E62B3BB0C8F05E52D217646CB9B1BA19DD11C334D35CE78F04BCECB3E + C9A9646CA1AE90E33E6B4F7D8844082A2F4B54F655E1A4F55D4A74F4EAEB7844 + AB9624933A2F4C5F8BB97BF90573FF00A54D92A2DBAD21D4948C3D855012730F + 07788561E91AB7F24649533D4561B7EB0D292DA2E630D2331498C98DD8EABC17 + 17D22A6CD8EAEA74AE30534543C34D5B4977B3C50D44ED64EC18193F45351B8C + F8798547EAAE14EB1D277174D6C63EA698B8F24B01C83D7AFC9675B2F5AE68E9 + 442E827C8EA0C44AD5D2EBECD32E56B28E6ECCB8B217DC1F22AA5FEA4D6BFF00 + EC4DFF0082562DD2F1AEEB21C46D981E9B3085B72E30DAC460305B15B74B7D03 + 4BAA6AE28F1E1CD92A217DE29DA2803A3A43DB49D36DD57834A6A7BA481F71A9 + 7C6C71FC6EC7D16FAD1A06DB4D875417D4BFCBA051855C435BF922F1F65F722E + 71891FBBEB6D4DA8AACC342D95AC71C000158B41A12EB72ABED6ED3BF9739209 + 56B5B2C5053ED4B4AC8874EE8521B7D8E4908EE15D3D3700AEAF8B533CFC97FB + 2A95ADF621DA6F4C52DB2010D34237EA48DCA995A6C8F908EE7D14A6CFA68EC4 + B14C6D5626440658B72EE254E961D3A5617C88A837BB349A634A3A66978E46F2 + 633CD9DF3FFA29AD05A5B4CD03B871E4B2E829DB4EC21A319C2C95E5355AEB2E + 93CBD8D88C5235B77AA3454C4B43738F3FF82AC352DF6A017BB2CC7FAC7F6539 + D6AF7358403E0A98D5933C736FE2BB7C0F4B1B30D909B663CD75AA9E72799A7F + 32BF4C9AA5F8DC7CD6A6DCEE69467C548228DA1A17A4BECAEA972244229B3E35 + F3E3191F35F43E669EBF5598C8416E72BF4200B53AEBC13C185CD2F5FD50BA57 + 6F9FAACD108CA7623CD3AEBC0C185CF2918CFD539E61B67EAB34C03CD3B0184E + BAF0306107CAD3B1FAA734BD7F559A200821194EBAF03061174AEDF3F54E7948 + C67EAB37B11E68601E69D75E060C2E7986D9FAA07CAD3B1FAACDEC06104013AE + BC0C185CD275C942E91DB92566884653B11E69D75E060C2E794ED929CF28DB25 + 6698079A760309D75E060C2E695A762539A4EB92B34401042329D75E060C2E69 + 481B94E7970464ACDEC02180275D781830B9E507A94E69078959BD80C2080275 + D7818308BA5CE72539A5206E566884653B009D75E060C2E7970464AF39E49797 + 193B2D89802FC3E9C1F15957ACF61823F51533301EF15E5477D961A800C87E6B + 3AF50362889CE541ABA5736AFBB90BABA3E96AB31C114DC5976697BFB9E1879C + AB161BFD0D2DA64AFB955C34B4D0379A49A5786B5A3DE4FBF654068DA8930DC9 + 502E3A576A2D5FC40B7E80A5AC920B606B2491B19C6496E4B8EE3240240F774E + A73E4B8D68210B363B16D2950AC279C4CF49E74D5B25838616C75CAB0BBB315D + 247919CE32C67CB05DFEEAAE68743F11F58D4CB7ED61A86A9B3C8DE66C45F976 + 3621BEE1B9DBC3C958FA0342D9745D188A8A9D8FAA2D02599C325C7C7EBFD87C + 54A83DC1E1D9DC745469B8772ACC9E3E9FECE636555E8EFAAAE149A86E5C3CD4 + F525D2C25CEA2ED483820F79A0FBF73D71907C49CDD53D9A29892D68551716F8 + 6B26A4AD8B5269EAB3437BA7C1E60E239F036DFC0EC3FE18C98E4F171EABA923 + B4CF79F5780F71D346E635F8E992E6F78FD5590B6DA33179CFF241C326A3D28A + 6B1BEF76BB1DB190D4DEE29F334B16EE8803F7091D4F5241E9F995766908AA21 + D2D6DA7A96E268E06B5E3DE1A07E8A0BC32E0F52E9BB89BCDF2A85757750F7F4 + 69F31E24F4F0DBE4462715F8BB4B6893EC6D2405C2E0FCC6E73073358771B79F + F6F8E76CAB5C66EEB7BBD92F7249616092F14F88162D29A62A8FAE325BA3D85B + 0C2C20B9A48EA7DDBFE7F322A9F45DA16DFB515CF555CA57C9581C793989277E + 6DF39F77D578E91E1CD656D44BA875817D4D64B99194AF25D82771CC0FF6F9F8 + 852AF45FACA436AB95B62A5647341377A4C6E46361D3FCA7E696E96EEAD765FB + 279C230A69E522E7712E2493925511E90623B5F1334EDEEA6077A9325617C9CB + 91B3C93F423E6AF65A4D77A62D9ABF4ECB6BB8C40BF1FE0C807798EF31FB78FC + 88DABE12714E3DD3CFD8C9ADA3B850416C92EF53551368638BB574DCC0B4B7C3 + 1E79F0F3CAAC78181DAAB8977AD5B514E4C2E91C627737DCC9D80DF718C8FE05 + 8D4BC13D5F255B2C153A865164E7E72D123B946F8E980338FF00D5581357693E + 0F69436CF590F9F9399918765D23B0067C71BFF6F12306AD5EB25A9946538F2C + 63BBCF923087293ABFDDADFA76CD3DE2ED3B608626E5B93BB8F801E676FEFE00 + 91CE9A5CD56B4D6D5BAEEF43928288974208D8F28C8C7C00CFCB3D57E68E2D5B + C58B8B6B6FB2CB496185E4B1A0603867EEB4789E9BEF8C0CE7002967131F4FA6 + B86F3D2504429D9206D2C0D66D8E6EBF300E4FBD6D6969767FF55AB108EE979F + 9919CBFE28F1F46EA465DF53DF754D4806574843011E649C8F963F3F9DE4D05C + F03C49509E08D81B61E1DD1348C4D523B67EFED60FF6E5FE6C26B33D94B4B2D5 + D43C450C6C739CF71C01804E56BE9B2ABE79777B9614371ADCDD47C5CB3E9F61 + 73A18087CCCCED8FBC48DFD9C7C9587515715A6CB5B7497943296074801E8481 + B0FCCE02ABF45BE3BF717EFB7A8A6754D3401CC82539F17728EBFE552EE344CE + A4E18D4B1A79455D4454E4FB892EFF00FCADED0CBA5A29DDEF26DFD8A67BCF07 + 87A30DB79E82EBA9E73CF3D5CC435C739C753F3CB7E47F3B81B82E1CC7033B95 + 17E1559E9ECBA02D705396BBB585B239C0632480EFD71F9293F83879B48FA2D2 + D2C5C6A4DF77B971CF9C4A7FF55F1BA86D61EC9A928F0F900DC600E620FBF721 + 5BF62A6ED6668C78AA775C691D53A47585C359D04D18A495C79B9803DD73C777 + 71D771D3E6AE8E18560BBDAA86E2E8C46678C3CB41CE0ADAE1B74614D91ED2CE + 5FFD14D89B922D4D276C688DA4B54DA9699B1B4602D469C8DAD81B81E0A40DE8 + BC9EBAF94EC792F8AC221BAA98E8E9E28F3D187FFE4E5566A481D2B5E15C3AB6 + 2E795A31FF0057FA955E5E285DCE7BAAFE15C415373523D5F0C8C254F2BF729D + ABA27B2AB2478A915925308046D85BAAFB336577306E0AC68AD32B3380BDE59A + DA3575AE67D8E4EAB845B09B70DD1B3F58763AAF09AADEDCF79650A094F50BCE + 6B648ECE173A2E8CEECD6F4EBFC11BBC48E9812772568E8EDEF92AB3CA7AA9AB + ECCE760159545686C4721992B7A3C468D2D6D459BDA4E0D394D4ACEC7EF4ED31 + 8831BE4AC7B1B4FAB869F1518B4503B981E5535B4405A00C2F03C5B882D45988 + 9D6D728461CABD8FCDCAD8E969439990483B8D943AE941726121953301F156BC + 5007533410B0EA6D91C9D5A15BA3E23D2494964F1F641393C14DCB4D7704FF00 + CA66F9AC492D55B2B8BA4925713D72E2AE27D8E227EE05F8FB062F607C975E3C + 6E11EC914BA8A861D3D213F70FC96D6874CBC91962B3E3B2443F005990DB2267 + E10ABB78F49AD8CAA882DBB4C018CB3E8A496FB1471E3B8148A3A6637C02F66B + 00F05C8BF895967B96282460D35047181DD0B3591B5A3A2FDA2E7CA6E5DC99F0 + 1EF91EE1FAAFABE01DF27DC3F55F5458343AAE93B680BC0CECAA0D536C710F3C + AAF9A889B2C658E19054375058F98B8866415DBE15C43F0EF0CB2B8466F0CA3E + 081D149823185B48253800A935C74EF2C85CD6AD7BACAE1D3AAF512D6E9EEF89 + 97AE1D37F94C46CE718CAFA673E6B2FECC201CE72BE0B6BBF12ABAB47925E997 + F8317B738EA9DB9F3595F66BB3EE436D767BA764EAD1E47A5DFE0C5139F34EDC + E7AACA36D38D8EEBEFD9A7072774EAD1E47A5DFE0C4339F34EDCE3AACA6DB5DF + 893ECD767DC9D5A3C8F4BBFC18BDB9F34139F35946DAECF74EC86DA71B1DD3AB + 4791E977F8317B739EA8673E6B2FECD38393BAF8DB6BBF127568F23D2EFF0006 + 2F6E71D53B73E6B2BECD767DC86DAECF74EC9D5A3C8F4BBFC18A273E69DB9CF5 + 5946DA71B1DD7DFB34E0E4EE9D5A3C8F4BBFC188673E69DB9F3594DB6BBF127D + 9AECFB93AB4791E977F8317B73E69DB9F35946DAEDB09F66BB1D774EAD1E47A5 + DFE0C5EDCE7AA76E7CD658B69F15F05B5DE29D5A3C8F4BBFC18BDB9F34EDCF9A + CAFB35D9F721B6BB6C27568F23D2EFF062F6E7CD794D3B87E22B3FECD763AEEB + E3ED65C005956E9FC8F4BBC8DDC66748C20925479F42F9AA73CB953B92CDD73B + AF4A6B3318E079375B95F12D3E9E2DC4DAD3F059CA49CD981A7284C0C6E46E55 + 67C74A6BEE92D776ED7D4103A6A2735B1CC43721843705A7E237F0F1C7457B5B + 6DCEE71DD5BEA9B2D25C6D72DBEBA963A9A699BCB24523721C3F9F25E4788F15 + 8DF6E11D5E214D7D055C7D8ACB476B7D3DAAE863A9A1B844D9DFF7A17B807E7C + 76C9FE7E78DE3AAA91B27666AE1E6CE3193FB2826ADF47FD3ECAB92AEC9595D6 + C73893CAD3CEC1EE0363F32543AAB837511C849D4F5C4F9F623FFA974F4DF89B + 629C527FBE0F2136A2F0CB86BAFB64B7547635B75A6A77E39807481B91F990A1 + 3A9F8DBA56D4D7C3452CD72A81F75ACCE339E993D3E47F68847C1EA19250FB8D + D6E35447B2433F7525B070FB4FDA0B5D496988CA3FEB251CEEF8EFB03F05B6B4 + 3ABB3F349457DD95BB57B1019EE7C4CE244BCAC2EB3DA1FD5C72C691B7E6EDDB + EFC1F2537D13A0ACBA65A258233577077DFAB9477BFD91E1FDFDEA6D4B6B99E4 + 0E52A4569D3B23DC0B987E4B62AD3E9747F1B7CD2F2CADCA5223F6FB5C93B877 + 4AA66D927FA29E34D6535C98E86D55C4BA393079435DBB4E7C7C01EBE3E2BAEE + CBA79AC00967D16B78A3C30D3DADEC4286F14C79E3C98678F0248CFB8F97B972 + 3887118EA24A29F67B16423CA435B79B449036A62B8C0E85FBB5C1D907F31B2F + 49AE76AA6A61555572A78603F8DCFC0F99C05535EFD1DCD092CA7D5D5C2207BA + DF57E9FF009D6A19C1A0D708ABB5157D5400EEC0CE4CFE792B62A86AAD8E6315 + F732E7146DF891C68A4A7CDAB46C6EAFAD7F74C81A4B4123C3DF93F4F1517D23 + C3DB8DF6E2DD41AF6796A25243A3A5738E7DDCC7C063031D7E1853FD2FA1ECD6 + 103ECEB7B5B2F4333FBCF3F9F87E58531B75A2595C32D2B769E1B083EAEA65CC + FC7B22B958DEC8C1A2A20591C1044D8E2600D6318DC35A07800A09C78B1CB555 + 7A6285CFECE196A1C5E4F41DE6004FCD5FBA7F4E9CB4B99F45BBD47A06C9A8ED + 4DA3BBD2F3B5A72D730E1CDF815A7C4F894250752ECCCC20D3C9426A2E2BE93D + 216EA7B7D1BCD7CF0C6D6B2288E71B37033BF81F7F4DD57D72BB711F89B1F2BF + 367B2C9D41CB03C6DF9BB71EFC1F257AD6706744D96B8D6D35A4D44CD1B7AC3B + B400F9E3183F9AF296D323E5C066DE030A1A2D34350B9AE97C3E16C4A736BB10 + 8D01A4A874D5B9B4342D2E738E6595C3BD23BF6F72F1F490A5745C268A4C118B + 94393FEC48AD8B269E7B9CD258A497ED056CD51A5E7B25DA12E825196B87563B + 070E1F32B67896B6A8D5D286CB182108BCE5957F0E6BE899A0AD92CB5F0F2B29 + DBCC79BEE80D19F960FC969F5C71774B69B67654B38B8D5F8321208F0F1E9E27 + CFA2F0BC7A35D35BE27320D5D5DD9784629B007FE758166E13E9CB0CBDA0A575 + 7D40FF00ADA9EF6FEE6F4F9E569E96BBF511518B49792D94D22095376E217139 + ED8A661B6D90B813CD96B5C36FCDDBB7DF83E4AF4E1E5232D141496F85CE7470 + 303039DD4AC7A2B548E2006607C14C34E59240F692D2BA6F4FA7D1D52C3CC9F7 + 6CA79A52658DA6652E85AA4ACFBAB4561A430C4D042DEB0602F0FAB69D8F06CC + 7B1ADBC41DABC1C7E1C28DD75B79F396A99CAC0F58D252B5DE0B4250CBC9D2D3 + 6ADD4B057F359B27207D178FD8BEE3F253F750B0F805F9F506FB2A71B6F8F693 + 3A2B8A79219F63FF0094A7D8FF00E52A67EAAFF61BF25F5B48EC8CB5B8F828F3 + DBFA998F51642BEC51EC2F586CCD073CAA69EA4DF657E9B46D1E08DD8FBC9907 + C5191DA2B6F2E3BAB79474DC98D965B29C0F05EEC600B11860D1BF56EC3EC630 + C017E9115A681F303C9303C97D440303C91110044440111100444400AF19A30F + 6E08057B214329E0D255DBE2767FC31BAD4545A599DA3014B9CC07C1793A069F + 0FA28BE6F666ED5AB70214FB38CFDC5F8366FF00229A9A569FC3F45F3D51BECF + D14313F26DAE26C85FD8C3D84FB187B0A69EA8DF67E89EA8DF67E89CB2F267D5 + 2442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F91EA72217F630F613E + C61EC29A7AA37D9FA27AA37D9FA272CFC8F54910BFB187B09F630F614D3D51BE + CFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89EA8DF67E8 + 9CB3F23D52442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59791EA92217 + F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187B09F637F9 + 14D3D51BECFD13D51BECFD13967E47A9C885FD8C3D84FB187B0A69EA8DF67E89 + EA8DF67E89CB3F23D4E442FEC61EC27D8C3D8534F546FB3F44F546FB3F44E59F + 91EA92217F630F613EC61EC29A7AA37D9FA27AA37D9FA272CFC8F53910BFB187 + B09F637F914D3D51BECFD17DF541ECA72CFC8F54910AFB187B0BF4CB3341FB8A + 67EA83D94148D1F8563965E43E2922374B6CE523BAB6B4F44037185B36D381E0 + BD5B181E0B31860D4BB592B0D05C2D2C9987BA146EBB4C35EE2431588580F55F + 974119EA174E8D7594AC2673E4B98ABCE9419FB9F45ED0695008CB3E8AC8F558 + 7C97D14F10E816D3E316B5DC874D10CA1D371B08258B7D45698A203BA16DC46D + 1D02FD0002D3B75B659DD925148F18606B06C12A220F69185EE8B5799E724889 + DE6CAD9F3DD519A8D2C0BC9E4FA2B3DD1B5DD42FC1A688F50BA34713B2A584C8 + 38265694FA54070CB3E8B7B6DD3D1C6465814B853443A05FB6C6D1D02CDBC52D + B163214123068A82389A30D0B31D10E5C617A81845CE959293CB27834373B636 + 7CE5B95AB8F4F47CF9E41F25312D057CECDAB661ACB20B099171469A86D31C40 + 7742D9B606B5B8017B8002FAA89DD29BCB32960D05E2DC276918CA8AD4E990F9 + 09E4FA2B1DCC6BBA85F834F1792DBA35F652B088B82641A834D318412C0A4741 + 6A8E103BA16DDB0B1BD02FD800285DAEB2DEECCA8A479C31060C00BD51169B79 + 24130111601F303C97DC0F24440303C826079044401111004444011110044440 + 1111004444011110044440111100444401111004444011110044440111100444 + 4011110044440111100444401111004444011110044440111100444401111004 + 444011110044440111100444401111004444011110044440111101FFD9} + Stretch = True + end + object Label1: TLabel + Left = 8 + Top = 8 + Width = 203 + Height = 18 + Caption = 'Generando árbol indice' + Font.Charset = ANSI_CHARSET + Font.Color = clMaroon + Font.Height = -16 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + Transparent = True + end + object Label2: TLabel + Left = 8 + Top = 32 + Width = 163 + Height = 18 + Caption = 'Exportando familias' + Transparent = True + end + object ProgressBar1: TProgressBar + Left = 8 + Top = 112 + Width = 150 + Height = 13 + Min = 0 + Max = 100 + TabOrder = 0 + end + object Timer1: TTimer + Enabled = False + Interval = 500 + OnTimer = Timer1Timer + Left = 296 + end + object TbD: TTable + TableName = 'datos\Tb_Ref.db' + Left = 280 + Top = 32 + end +end diff --git a/exportador/Unit1.h b/exportador/Unit1.h new file mode 100644 index 0000000..a10349a --- /dev/null +++ b/exportador/Unit1.h @@ -0,0 +1,35 @@ +//--------------------------------------------------------------------------- + +#ifndef Unit1H +#define Unit1H +//--------------------------------------------------------------------------- +#include +#include +#include +#include +#include +#include +#include +#include +#include +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TLabel *Label1; + TLabel *Label2; + TImage *Image1; + TProgressBar *ProgressBar1; + TTimer *Timer1; + TTable *TbD; + void __fastcall Timer1Timer(TObject *Sender); +private: // User declarations + void __fastcall GenerarIndice( AnsiString FicheroSalida ); + void __fastcall GenerarEnlaces(); +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/exportador/cleanup.bat b/exportador/cleanup.bat new file mode 100644 index 0000000..afe8267 --- /dev/null +++ b/exportador/cleanup.bat @@ -0,0 +1,8 @@ +del *.~* +del *.tds +del *.obj + +del *.ilc +del *.ild +del *.ilf +del *.ils \ No newline at end of file diff --git a/exportador/db2html.bpr b/exportador/db2html.bpr new file mode 100644 index 0000000..6266667 --- /dev/null +++ b/exportador/db2html.bpr @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=1 +MajorVer=1 +MinorVer=0 +Release=0 +Build=2 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=3082 +CodePage=1252 + +[Version Info Keys] +CompanyName=JD Soft. +FileDescription= +FileVersion=1.0.0.2 +InternalName= +LegalCopyright= +LegalTrademarks=JD soft. +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +url=www.infdj.com +e-mail=jd@infdj.com + +[Excluded Packages] +$(BCB)\Projects\Bpl\Dialup.bpl=RAS Tools + +[HistoryLists\hlIncludePath] +Count=4 +Item0=$(BCB)\include;$(BCB)\include\vcl;C:\program\cbuilder\CBuilder5\VCLs\include\;C:\Mis documentos\Fuentes de Programacion\C++ Builder\VCLs\include +Item1=$(BCB)\include;$(BCB)\include\vcl;C:\program\cbuilder\CBuilder5\VCLs\include\ +Item2=$(BCB)\include;$(BCB)\include\vcl;..\VCLs\include +Item3=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=5 +Item0=C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;C:\program\cbuilder\CBuilder5\VCLs\lib\;..\..\VCLs\lib\ +Item1=C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;C:\program\cbuilder\CBuilder5\VCLs\lib\ +Item2=C:\VCLs\lib\;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item3=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib;..\VCLs\lib +Item4=..\..\..\..\VCLs\lib;$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams=..\ +HostApplication= +RemoteHost= +RemotePath= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + +[Language] +ActiveLang= +ProjectLang= +RootDir= + + \ No newline at end of file diff --git a/exportador/db2html.cpp b/exportador/db2html.cpp new file mode 100644 index 0000000..86760d4 --- /dev/null +++ b/exportador/db2html.cpp @@ -0,0 +1,22 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +USERES("db2html.res"); +USEFORM("Unit1.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/exportador/db2html.exe b/exportador/db2html.exe new file mode 100644 index 0000000..cc95e2a Binary files /dev/null and b/exportador/db2html.exe differ diff --git a/exportador/db2html.res b/exportador/db2html.res new file mode 100644 index 0000000..e210b70 Binary files /dev/null and b/exportador/db2html.res differ diff --git a/exportador/errores.html b/exportador/errores.html new file mode 100644 index 0000000..908338e --- /dev/null +++ b/exportador/errores.html @@ -0,0 +1 @@ + Arbol Indice
FotoArticuloCod.P.V.P 
 "+TbD->FieldByName("Nombre del Producto")->AsString+ + "     
 "+TbD->FieldByName("Nombre del Producto")->AsString+ + "     
"; + if ( ! TbD->FieldByName( "PathImagen" )->AsString.IsEmpty() && + FileExists( ParamStr(1) + TbD->FieldByName( "PathImagen" )->AsString) ) + { + ImageName = ExtractFileName(TbD->FieldByName( "PathImagen" )->AsString); + CopyFile( AnsiString(ParamStr(1) + TbD->FieldByName( "PathImagen" )->AsString).c_str(), + AnsiString("imgprod\\" + ImageName ).c_str(), True ); + Body = Body + ""+TbD->FieldByName("Nombre del Producto")->AsString+" " + + FormatCurr("###,###,###.#0", TbD->FieldByName("Precio Venta 1")->AsCurrency )+"" + + FormatCurr("###,###,###.#0", TbD->FieldByName("Precio Venta 1")->AsCurrency / 166.386 )+" FieldByName("ForcedIndex")->AsString+"','"+TbD->FieldByName("Nombre del Producto")->AsString+"','"+TbD->FieldByName("Precio Venta 1")->AsString+"');\">

*Estos precios no incluyen IVA
Última actualización de esta página 06/05/2001 - 22:58:15

\ No newline at end of file diff --git a/exportador/images/checkit.gif b/exportador/images/checkit.gif new file mode 100644 index 0000000..fa4f54c Binary files /dev/null and b/exportador/images/checkit.gif differ diff --git a/exportador/images/code.js b/exportador/images/code.js new file mode 100644 index 0000000..b1b4b27 --- /dev/null +++ b/exportador/images/code.js @@ -0,0 +1,53 @@ +var myImage = new Image(); + myImage.onload = ShowPreview; + + function Preview( srcImage ) + { + parent.frames['separador'].document.all.Preview.style.visibility = "hidden"; + parent.frames['separador'].document.all.Loading.style.visibility = "visible"; + + myImage.src = 'imgprod/'+srcImage; + + } + + function ShowPreview() + { + var AltoVentana, AnchoVentana; + var Alto, Ancho; + + AltoVentana = 185; //parent.frames['separador'].document.body.clientHeight; + AnchoVentana = 200-35; //parent.frames['separador'].document.body.clientWidth; + + Alto = myImage.height; + Ancho = myImage.width; + + if ( Alto > AltoVentana || Ancho > AnchoVentana ) + { + if ( Alto > Ancho ) + { + parent.frames['separador'].document.images['preview'].width = (Ancho*AltoVentana)/Alto; + parent.frames['separador'].document.images['preview'].height = AltoVentana; + } else { + parent.frames['separador'].document.images['preview'].width = AnchoVentana; + parent.frames['separador'].document.images['preview'].height = (Alto*AnchoVentana)/Ancho; + } + } else { + parent.frames['separador'].document.images['preview'].width = Ancho; + parent.frames['separador'].document.images['preview'].height = Alto; + } + parent.frames['separador'].document.images['preview'].src=myImage.src; + } + + +//Lo realmente dificil, suele ser lo más facil... +// ...y no por que sea facil, tiene por que ser malo. +//No te compliques la vida, simplemente "hazlo". +// JD Soft. +// e-mail: Jose-David.Guillen@cs.us.es + function comprar( codigo, producto, precio ) + { + alert("Cesta de la compra no disponible. Estamos trabajando para mejorar, dentro de muy poco estaremos operativos"); return; +/* + parent.frames['pedido'].document.PEDIDO.LISTA.value= parent.frames['pedido'].document.PEDIDO.LISTA.value+ "\nCod. "+codigo+"\t| "+producto+"\t | " +precio; +*/ + } diff --git a/exportador/images/comprar2.gif b/exportador/images/comprar2.gif new file mode 100644 index 0000000..717e8ef Binary files /dev/null and b/exportador/images/comprar2.gif differ diff --git a/exportador/images/db2htm-i.css b/exportador/images/db2htm-i.css new file mode 100644 index 0000000..b9cf72c --- /dev/null +++ b/exportador/images/db2htm-i.css @@ -0,0 +1,21 @@ +.z { + BORDER-RIGHT: black 1px solid; BORDER-TOP: #1D8DFE 1px solid; BACKGROUND: #000080; BORDER-LEFT: #1D8DFE 1px solid; COLOR: white; BORDER-BOTTOM: black 3px solid +} +.a { + BORDER-RIGHT: #1D8DFE 0px solid; BORDER-TOP: #0D5AB9 3px solid; BACKGROUND: #0D5AB9 BORDER-LEFT: black 0px solid; COLOR: yellow; BORDER-BOTTOM: #0D5AB9 1px solid +} + + BODY { + scrollbar-face-color: #0066CC; + scrollbar-shadow-color: #0099CC; + scrollbar-highlight-color: #0099CC; + scrollbar-3dlight-color: #0066CC; + scrollbar-darkshadow-color: black; + scrollbar-track-color: #000000; + scrollbar-arrow-color: #FFFFCE ; + font: verdana, arial, helvetica, sans-serif; + font-size: 10pt; + color: black; + color: #00FFFF; + } + diff --git a/exportador/images/db2htm-l.css b/exportador/images/db2htm-l.css new file mode 100644 index 0000000..f448dab --- /dev/null +++ b/exportador/images/db2htm-l.css @@ -0,0 +1,12 @@ + BODY { + scrollbar-face-color: #0066CC; + scrollbar-shadow-color: #0099CC; + scrollbar-highlight-color: #0099CC; + scrollbar-3dlight-color: #0066CC; + scrollbar-darkshadow-color: black; + scrollbar-track-color: #000000; + scrollbar-arrow-color: #FFFFCE ; + font: verdana, arial, helvetica, sans-serif; + font-size: 10pt; + color: white; + } diff --git a/exportador/images/fondo.gif b/exportador/images/fondo.gif new file mode 100644 index 0000000..b4dc7ad Binary files /dev/null and b/exportador/images/fondo.gif differ diff --git a/exportador/images/gradhor.gif b/exportador/images/gradhor.gif new file mode 100644 index 0000000..a8b4341 Binary files /dev/null and b/exportador/images/gradhor.gif differ diff --git a/exportador/images/gradhort.gif b/exportador/images/gradhort.gif new file mode 100644 index 0000000..1820d82 Binary files /dev/null and b/exportador/images/gradhort.gif differ diff --git a/exportador/images/loading.gif b/exportador/images/loading.gif new file mode 100644 index 0000000..6f70bc8 Binary files /dev/null and b/exportador/images/loading.gif differ diff --git a/exportador/imgprod/AMD-Duron.jpg b/exportador/imgprod/AMD-Duron.jpg new file mode 100644 index 0000000..9e8212d Binary files /dev/null and b/exportador/imgprod/AMD-Duron.jpg differ diff --git a/exportador/imgprod/DIMM.jpg b/exportador/imgprod/DIMM.jpg new file mode 100644 index 0000000..4bc1d6e Binary files /dev/null and b/exportador/imgprod/DIMM.jpg differ diff --git a/exportador/imgprod/DTT2500_parts.jpg b/exportador/imgprod/DTT2500_parts.jpg new file mode 100644 index 0000000..ba96257 Binary files /dev/null and b/exportador/imgprod/DTT2500_parts.jpg differ diff --git a/exportador/imgprod/DisipadorAMD.jpg b/exportador/imgprod/DisipadorAMD.jpg new file mode 100644 index 0000000..4276f5a Binary files /dev/null and b/exportador/imgprod/DisipadorAMD.jpg differ diff --git a/exportador/imgprod/FPS1000_parts.jpg b/exportador/imgprod/FPS1000_parts.jpg new file mode 100644 index 0000000..3e317d9 Binary files /dev/null and b/exportador/imgprod/FPS1000_parts.jpg differ diff --git a/exportador/imgprod/GeForce2-dual-mx.jpg b/exportador/imgprod/GeForce2-dual-mx.jpg new file mode 100644 index 0000000..f552f04 Binary files /dev/null and b/exportador/imgprod/GeForce2-dual-mx.jpg differ diff --git a/exportador/imgprod/GeForce2-ultra.jpg b/exportador/imgprod/GeForce2-ultra.jpg new file mode 100644 index 0000000..fc01e5c Binary files /dev/null and b/exportador/imgprod/GeForce2-ultra.jpg differ diff --git a/exportador/imgprod/GeForce2Pro-s.jpg b/exportador/imgprod/GeForce2Pro-s.jpg new file mode 100644 index 0000000..8eb67b8 Binary files /dev/null and b/exportador/imgprod/GeForce2Pro-s.jpg differ diff --git a/exportador/imgprod/HardDisk.jpg b/exportador/imgprod/HardDisk.jpg new file mode 100644 index 0000000..1a01d02 Binary files /dev/null and b/exportador/imgprod/HardDisk.jpg differ diff --git a/exportador/imgprod/PSX-RF_UNIT.jpg b/exportador/imgprod/PSX-RF_UNIT.jpg new file mode 100644 index 0000000..1155c8b Binary files /dev/null and b/exportador/imgprod/PSX-RF_UNIT.jpg differ diff --git a/exportador/imgprod/PSX-Trans_Wheel.jpg b/exportador/imgprod/PSX-Trans_Wheel.jpg new file mode 100644 index 0000000..40c99e8 Binary files /dev/null and b/exportador/imgprod/PSX-Trans_Wheel.jpg differ diff --git a/exportador/imgprod/PSX-dual_shock_new.jpg b/exportador/imgprod/PSX-dual_shock_new.jpg new file mode 100644 index 0000000..ee4fa2e Binary files /dev/null and b/exportador/imgprod/PSX-dual_shock_new.jpg differ diff --git a/exportador/imgprod/PSX-mandoNormal.jpg b/exportador/imgprod/PSX-mandoNormal.jpg new file mode 100644 index 0000000..2e6afe7 Binary files /dev/null and b/exportador/imgprod/PSX-mandoNormal.jpg differ diff --git a/exportador/imgprod/SB_player51_parts.jpg b/exportador/imgprod/SB_player51_parts.jpg new file mode 100644 index 0000000..98d6697 Binary files /dev/null and b/exportador/imgprod/SB_player51_parts.jpg differ diff --git a/exportador/imgprod/cd74intenso.jpg b/exportador/imgprod/cd74intenso.jpg new file mode 100644 index 0000000..7348438 Binary files /dev/null and b/exportador/imgprod/cd74intenso.jpg differ diff --git a/exportador/imgprod/cd74verbatim.jpg b/exportador/imgprod/cd74verbatim.jpg new file mode 100644 index 0000000..3cf7435 Binary files /dev/null and b/exportador/imgprod/cd74verbatim.jpg differ diff --git a/exportador/imgprod/cdrw-hp9510.jpg b/exportador/imgprod/cdrw-hp9510.jpg new file mode 100644 index 0000000..b188f95 Binary files /dev/null and b/exportador/imgprod/cdrw-hp9510.jpg differ diff --git a/exportador/imgprod/cdrw74kprinco.JPG b/exportador/imgprod/cdrw74kprinco.JPG new file mode 100644 index 0000000..7c82853 Binary files /dev/null and b/exportador/imgprod/cdrw74kprinco.JPG differ diff --git a/exportador/imgprod/dlink-dfe2616fr.jpg b/exportador/imgprod/dlink-dfe2616fr.jpg new file mode 100644 index 0000000..f11867e Binary files /dev/null and b/exportador/imgprod/dlink-dfe2616fr.jpg differ diff --git a/exportador/imgprod/dlink-dfe550tx.jpg b/exportador/imgprod/dlink-dfe550tx.jpg new file mode 100644 index 0000000..153d098 Binary files /dev/null and b/exportador/imgprod/dlink-dfe550tx.jpg differ diff --git a/exportador/imgprod/dlink-dp101.jpg b/exportador/imgprod/dlink-dp101.jpg new file mode 100644 index 0000000..af649db Binary files /dev/null and b/exportador/imgprod/dlink-dp101.jpg differ diff --git a/exportador/imgprod/dlink-dss5plus.jpg b/exportador/imgprod/dlink-dss5plus.jpg new file mode 100644 index 0000000..296fe1b Binary files /dev/null and b/exportador/imgprod/dlink-dss5plus.jpg differ diff --git a/exportador/imgprod/dlink-dss8+.jpg b/exportador/imgprod/dlink-dss8+.jpg new file mode 100644 index 0000000..b6f83e0 Binary files /dev/null and b/exportador/imgprod/dlink-dss8+.jpg differ diff --git a/exportador/imgprod/dlink-router10.jpg b/exportador/imgprod/dlink-router10.jpg new file mode 100644 index 0000000..c0b95f0 Binary files /dev/null and b/exportador/imgprod/dlink-router10.jpg differ diff --git a/exportador/imgprod/epson-580.jpg b/exportador/imgprod/epson-580.jpg new file mode 100644 index 0000000..2c90ae6 Binary files /dev/null and b/exportador/imgprod/epson-580.jpg differ diff --git a/exportador/imgprod/epson-680.jpg b/exportador/imgprod/epson-680.jpg new file mode 100644 index 0000000..d992b2d Binary files /dev/null and b/exportador/imgprod/epson-680.jpg differ diff --git a/exportador/imgprod/epson-880.jpg b/exportador/imgprod/epson-880.jpg new file mode 100644 index 0000000..b2d92d2 Binary files /dev/null and b/exportador/imgprod/epson-880.jpg differ diff --git a/exportador/imgprod/epson-lq580.jpg b/exportador/imgprod/epson-lq580.jpg new file mode 100644 index 0000000..d6ea78b Binary files /dev/null and b/exportador/imgprod/epson-lq580.jpg differ diff --git a/exportador/imgprod/epson-lx300.jpg b/exportador/imgprod/epson-lx300.jpg new file mode 100644 index 0000000..ae5d754 Binary files /dev/null and b/exportador/imgprod/epson-lx300.jpg differ diff --git a/exportador/imgprod/extraibleHD.jpg b/exportador/imgprod/extraibleHD.jpg new file mode 100644 index 0000000..30dbb19 Binary files /dev/null and b/exportador/imgprod/extraibleHD.jpg differ diff --git a/exportador/imgprod/gts64-gts.jpg b/exportador/imgprod/gts64-gts.jpg new file mode 100644 index 0000000..b4a02bc Binary files /dev/null and b/exportador/imgprod/gts64-gts.jpg differ diff --git a/exportador/imgprod/hp-s1100.jpg b/exportador/imgprod/hp-s1100.jpg new file mode 100644 index 0000000..5593ae5 Binary files /dev/null and b/exportador/imgprod/hp-s1100.jpg differ diff --git a/exportador/imgprod/hp-s600.jpg b/exportador/imgprod/hp-s600.jpg new file mode 100644 index 0000000..623d23c Binary files /dev/null and b/exportador/imgprod/hp-s600.jpg differ diff --git a/exportador/imgprod/hp-s800.jpg b/exportador/imgprod/hp-s800.jpg new file mode 100644 index 0000000..1b44401 Binary files /dev/null and b/exportador/imgprod/hp-s800.jpg differ diff --git a/exportador/imgprod/hp-s930.jpg b/exportador/imgprod/hp-s930.jpg new file mode 100644 index 0000000..1b47478 Binary files /dev/null and b/exportador/imgprod/hp-s930.jpg differ diff --git a/exportador/imgprod/hp-s950.jpg b/exportador/imgprod/hp-s950.jpg new file mode 100644 index 0000000..ffa1bbc Binary files /dev/null and b/exportador/imgprod/hp-s950.jpg differ diff --git a/exportador/imgprod/keytronic2001.jpg b/exportador/imgprod/keytronic2001.jpg new file mode 100644 index 0000000..95f14ae Binary files /dev/null and b/exportador/imgprod/keytronic2001.jpg differ diff --git a/exportador/imgprod/keytronic800.jpg b/exportador/imgprod/keytronic800.jpg new file mode 100644 index 0000000..99c7687 Binary files /dev/null and b/exportador/imgprod/keytronic800.jpg differ diff --git a/exportador/imgprod/memory1mb.jpg b/exportador/imgprod/memory1mb.jpg new file mode 100644 index 0000000..43036c1 Binary files /dev/null and b/exportador/imgprod/memory1mb.jpg differ diff --git a/exportador/imgprod/memory24mb_compriminda.jpg b/exportador/imgprod/memory24mb_compriminda.jpg new file mode 100644 index 0000000..960f57a Binary files /dev/null and b/exportador/imgprod/memory24mb_compriminda.jpg differ diff --git a/exportador/imgprod/memory2mb.jpg b/exportador/imgprod/memory2mb.jpg new file mode 100644 index 0000000..128416c Binary files /dev/null and b/exportador/imgprod/memory2mb.jpg differ diff --git a/exportador/imgprod/realmagic-hollywoodbrd_4x3.jpg b/exportador/imgprod/realmagic-hollywoodbrd_4x3.jpg new file mode 100644 index 0000000..2aabc09 Binary files /dev/null and b/exportador/imgprod/realmagic-hollywoodbrd_4x3.jpg differ diff --git a/exportador/imgprod/realmagic-remote_4x3.jpg b/exportador/imgprod/realmagic-remote_4x3.jpg new file mode 100644 index 0000000..6a1c935 Binary files /dev/null and b/exportador/imgprod/realmagic-remote_4x3.jpg differ diff --git a/exportador/imgprod/tankymp3.jpg b/exportador/imgprod/tankymp3.jpg new file mode 100644 index 0000000..20e7718 Binary files /dev/null and b/exportador/imgprod/tankymp3.jpg differ diff --git a/exportador/imgprod/tekram-piiMB.jpg b/exportador/imgprod/tekram-piiMB.jpg new file mode 100644 index 0000000..6d49bd1 Binary files /dev/null and b/exportador/imgprod/tekram-piiMB.jpg differ diff --git a/exportador/imgprod/tekram-scsi160.jpg b/exportador/imgprod/tekram-scsi160.jpg new file mode 100644 index 0000000..a3b1fc4 Binary files /dev/null and b/exportador/imgprod/tekram-scsi160.jpg differ diff --git a/exportador/imgprod/tekram-scsi80.jpg b/exportador/imgprod/tekram-scsi80.jpg new file mode 100644 index 0000000..8b82053 Binary files /dev/null and b/exportador/imgprod/tekram-scsi80.jpg differ diff --git a/exportador/imgprod/yamaha2100e.jpg b/exportador/imgprod/yamaha2100e.jpg new file mode 100644 index 0000000..f570eba Binary files /dev/null and b/exportador/imgprod/yamaha2100e.jpg differ diff --git a/exportador/tprodi.htm b/exportador/tprodi.htm new file mode 100644 index 0000000..5684901 --- /dev/null +++ b/exportador/tprodi.htm @@ -0,0 +1,23 @@ + + +Listado/Venta de productos" + + + + + + + + + + + + + + + diff --git a/exportador/tprodl.htm b/exportador/tprodl.htm new file mode 100644 index 0000000..993cb71 --- /dev/null +++ b/exportador/tprodl.htm @@ -0,0 +1 @@ + Arbol Indice

Hardware
Procesadores (CPU)
Disipadores
Placas Base
Memorias
Almacenamiento
Discos Duro (HD)
Disqueteras (FD)
CD-Rom / Ram / RW
DVD
Unidades Removibles
Multimedia
Tarjetas Gráficas
Tarjetas de Video/Television
Tarjetas de Sonido
Altavoces
Scanners
Monitores
Conectividad
Modem
Redes
HUBs
Tarjetas de Red
Switchs
Routers
RDSI
Impresoras
HP
Epson
Cajas
Ratones
Teclados
Controladoras
SCSI
SAI's

Software

Consumibles
CD's
Cartuchos
Discos Removibles

Acessorios
PSX
Mandos
Organizadores
Filtros
Cables

CyberCentro
\ No newline at end of file diff --git a/exportador/tprods.htm b/exportador/tprods.htm new file mode 100644 index 0000000..9b77dd2 --- /dev/null +++ b/exportador/tprods.htm @@ -0,0 +1,28 @@ +PhotoPreview + + + +
+ +
+ + diff --git a/logo.bmp b/logo.bmp new file mode 100644 index 0000000..ed5b924 Binary files /dev/null and b/logo.bmp differ diff --git a/perfil01 b/perfil01 new file mode 100644 index 0000000..e69de29 diff --git a/testigo b/testigo new file mode 100644 index 0000000..e69de29