You are on page 1of 39

RESUMEN.

Nuestro proyecto esta enfocado en un sistema de ventas de cosmeticos de la empresa evolution. Para llevar a cabo este proyecto nos guiamos mediante el modelo en cascada del ciclo de vida del software, gracias a este realizamos cada una de las etapas que involucra dicho modelo.

Con el estudio y analisis de los requerimientos del sistema de ventas, se determino que la empresa necesita llevar un control en cuanto a sus ventas ya que carece de esto, por eso hemos creado una aplicacin con una base de datos que involucra a los clientes y la factura que estos reciben por sus compras.

ABSTRACT

Ours plan is focus in a system of sale cosmetics of the company EVOLUTION. To carry out this plan us guide through the model in waterfall of cycle of life software, thanks to this we to realice each one of the phases that implicate this model.

With the study and analysis of the requirements of system of sale, we are determine that the company to need a control realice the sales since lack of this, therefore we are create application with a base of data to involve them client and the invoice to recive by yours purchase.

CREACIN DE LA BASE DE DATOS. Para el desarrollo del sistema de ventas de la empresa EVOLUTION se determino el uso de una base de datos que incluye a los clientes, recibo, proveedores y productos. Dicha base de datos es la siguiente:

El smbolo

indica el campo clave de cada tabla.

Elaboracin de la base de datos en FoxPro. Pasos: 1. Abrir Microsoft Visual FoxPro 6.0
2. Archivo Nuevo 3. ProyectoNuevo Archivo

Al abrir el administrador de proyectos proseguimos a crear nuestra base de datos en la opcin Data, luego DatabasesNuevo, la guardamos con el nombre EVOLUTION. Cuando se abre el diseador de la base de datos, proseguimos a ingresar las tablas con todos los campos que se determinaron anteriormente.
2

ELABORACIN DE LAS PANTALLAS DE ENTRADAS. CREACIN DE FORMULARIOS SIMPLES PERSONALIZADOS: Son formularios vinculados a una o ms tablas y permiten: Generar automticamente cdigos, establecer formatos propios. Modificar ciertos datos, segn los requerimientos. Eliminar, permitiendo crear un respaldo histrico. Buscar registros con diferentes opciones. El desplazamiento entre registros

Pasos para crear el formulario de proveedores: Paso 01: Creacin del Formularios Base Desde la ficha Documentos del administrador de proyecto, seleccione Formularios, luego el botn nuevonuevo formulario.

A continuacin, se muestra la pantalla de diseo de formularios de Visual FoxPro

La barra de herramienta muestra los controles que pueden colocarse en el formulario: Etiquetas, Cajas de Texto, Botones de comando, de verificacin, etc. El formulario a disear: donde se colocan los controles (objetos). Listado de propiedades: son todas las caractersticas de un control o pantalla seleccionada. Paso 02: Establecimiento del origen de datos (entorno de datos) Consiste en vincular el formulario y los datos, en este caso los datos se encuentran en la tabla proveedores. Realice lo siguiente:

Clic sobre el formulario base. Una vez seleccionado el formulario, clic derecho del ratn para mostrar el men desplegable. Seleccionar la opcin Entorno de Datos.

Se muestran dos pantallas: Adicin de Tablas: para seleccionar y agregar la tabla vinculada al formulario. Entorno de Datos: muestra la(s) tablas ya vinculadas Seleccione proveedores y luego el botn adicionar (Add):

Clic en el botn Agregar (Add): Luego, seleccione el botn Cerrar (Close): Paso 03: Asignacin de los campos al formulario: Desde la ventana Entorno de Datos, seleccione el titulo Campos que aparece en la tabla Proveedores y arrastre con el puntero del ratn hacia el formulario

El resultado se muestra a continuacin, ampli el tamao del formulario base para distribuir mejor los controles:

Agregar 11 botones de comando: Seleccione desde la barra de controles el objeto botones de comando y colquelos en el formulario. Paso 04: Guardar el formulario:

Ubquese en la barra de mens, seleccione archivo guardar como y elija el destino donde lo guardara. Propiedades del los objetos (Para el formulario proveedores) Nombre del Objeto Propiedad AutoCenter Caption Name (Formulario): Proveedores .T. Informacin de proveedores Valor

Esta propiedad tambin se utiliza en los dems formularios (productos, recibos y clientes).

Nombre del Objeto Name:txtId_proveedo r

Propiedad ControlSource

Valor m.id_proveedor

Nombre del Objeto Name:txtNombre

Propiedad ControlSource

Valor m.nombre

Nombre del Objeto Name:txtTelefono

Propiedad ControlSource

Valor m.telefono

Nombre del Objeto Name:txtDireccion

Propiedad ControlSource

Valor m.direccion

De igual manera se hacen las modificaciones para las cajas de textos de los dems formularios, adaptando siempre la informacin al formulario que se este realizando. Propiedades de los botones comandos: La imagen de los botones comandos es la siguiente:
Actualiz ar Examin ar Sal ir Primer registr o Regist ro anteri or

Carg ar

Limpi ar

Agreg ar

Reti rar

Siguien te registro

Ultimo registr o

Nombre del Objeto

Propiedad

Valor
7

Name: Primero

FontBold ToolTipText Picture

.T. Primer Registro c:\ventacosmeticos\flechas\arrow28a.ico

Nombre del Objeto Name: Siguiente

Propiedad FontBold ToolTipText Picture .T.

Valor

Siguiente registro c:\ventacosmeticos\flechas\arrow28b.ico

Nombre del Objeto Name: Anterior

Propiedad FontBold ToolTipText Picture .T. Registro anterior

Valor

c:\ventacosmeticos\flechas\arrow28c.ico

Nombre del Objeto Name: Ultimo

Propiedad FontBold ToolTipText Picture .T. Primer Registro

Valor

c:\ventacosmeticos\flechas\arrow28d.ico

Nombre del Objeto Name: Cargar

Propiedad FontBold ToolTipText Picture .T.

Valor

Cargar formulario c:\ventacosmeticos\flechas\frech.ico

Nombre del Objeto

Propiedad

Valor
8

Name: Actualizar

FontBold ToolTipText Picture

.T. Actualizar formulario c:\ventacosmeticos\mundo\world00e.ico

Nombre del Objeto Name: Limpiar

Propiedad FontBold ToolTipText Picture .T.

Valor

Limpiar los datos del formulario c:\ventacosmeticos\objetos\squeegee.ico

Nombre del Objeto Name: Examinar

Propiedad FontBold ToolTipText Picture .T.

Valor

Visualizar todos los datos ingresados c:\ventacosmeticos\folder\clipb12f.ico

Nombre del Objeto Name: Agregar

Propiedad FontBold ToolTipText Picture .T.

Valor

Agregar nuevo dato a la base de datos c:\ventacosmeticos\folder\disk305a.ico

Nombre del Objeto Name: Retirar

Propiedad FontBold ToolTipText Picture .T.

Valor

Retira registro seleccionado c:\ventacosmeticos\pawerbuilder\trshfull.ico

Nombre del Objeto Name: CmdSalir

Propiedad FontBold .T.

Valor

ToolTipText Picture

Retira registro seleccionado c:\ventacosmeticos\exit\{exit0e.ico

Las propiedades de los botones de comando de este formulario son las mismas que se utilizan para el resto de los formularios (clientes, productos y recibo).

DISEO DE LAS PANTALLAS DE ENTRADAS. DISEO DE LA PANTALLA DE PROVEEDORES:

10

EVENTOS Objeto: (formulario) Proveedores thisform.release close table all select 1 use "c:\ventacosmeticos\proveedores.dbf" order tag id_proveed alias proveedores scatter memvar memo thisform.refresh thisform.txtId_proveedor.setfocus return Procedimiento: Init

Objeto: Cargar *verificar si hay datos en blancos

Procedimiento:Click

11

IF EMPTY(thisform.txtId_proveedor.value) WAIT WINDOW "Id incorrecto..." nowait thisform.txtId_proveedor.setfocus RETURN ENDIF *Cargar los campos SELECT 1 mProveedores= alltrim(thisform.txtId_proveedor.value) SEEK mProveedores IF FOUND() &&Actualizar registro encontrado SCATTER MEMVAR memo WAIT WINDOW "Proveedor cargado..." nowait ELSE mMens1="Imposible cargar datos, El proveedor" +mProveedores+ "no existe!" +chr(10) mMens2="Utilice otro Id e intente cargar datos de nuevo..." mOpc=MESSAGEBOX(mMens1+mMens2,0+64,"Proveedor no encontrado...") ENDIF thisform.Refresh thisform.txtId_proveedor.setfocus return

Objeto: Limpiar

Procedimiento:Click

WAIT WINDOW "Datos en blanco..." nowait


12

SCATTER MEMVAR memo blank thisform.txtId_proveedor.setfocus thisform.Refresh RETURN

Objeto:Agregar SELECT 1 *Verificar si hay campos vacos * Id de proveedor

Procedimiento:Click

IF EMPTY(thisform.txtId_proveedor.value) wait"Id incorrecto..." windows nowait thisform.txtId_proveedor.setfocus thisform.Refresh RETURN ENDIF * Proveedores IF EMPTY(thisform.txtNombre.value) wait"Nombre incorrecto..."windows nowait thisform.txtNombre.setfocus thisform.Refresh RETURN ENDIF IF EMPTY(thisform.txtTelefono.Value) wait"Telefono incorrecto..."windows nowait thisform.txtTelefono.SetFocus
13

thisform.Refresh RETURN ENDIF IF EMPTY(thisform.txtDireccion.Value) wait"Direccion incorrecta."windows nowait thisform.txtDireccion.SetFocus thisform.Refresh RETURN ENDIF *verificar si el proveedor existe mProveedores=ALLTRIM(thisform.txtId_proveedor.Value) SEEK mProveedores IF FOUND() mens1="Imposible agregar, el proveedor " +mProveedores+ "ya existe!" +chr(10) mens2="Cambie el Id e intente agregar de nuevo..." Op1=MESSAGEBOX(mens1+mens2, 0+64, "Error de Agregacion...") thisform.txtId_proveedor.SetFocus thisform.Refresh RETURN ENDIF *Agregar nuevo registro con los datos en pantalla SELECT 1 INSERT INTO proveedores from memvar *cargar nuevos datos en blanco SCATTER MEMVAR blank
14

m.id_proveedor=thisform.txtId_proveedor.value m.nombre=thisform.txtNombre.Value m.telefono=thisform.txtTelefono.Value m.direccion=thisform.txtDireccion.Value gather memvar

Objeto:Retirar SELECT 1

Procedimiento:Click

mProveedores= alltrim(thisform.txtId_proveedor.value) SEEK mProveedores IF !FOUND() &&S no encuentra el registro mens1="Imposible retirar, el proveedor. "+mProveedores+" no existe!"+CHR(10) mens2="Cambie el Id del proveedor e intente retirar de nuevo..." Op1=MESSAGEBOX(mens1+mens2, 0+64," No se puede retirar el registro...") thisform.txtId_proveedor.SetFocus RETURN ENDIF mens1="Desea retirar la factura no. "+mProveedores+" del sistema?"+CHR(10) Op1=MESSAGEBOX(mens1, 1+32, "Retirar registro...") IF Op1=1 &&Si hace click en Aceptar SELECT 1 DELETE PACK WAIT "Registro retirado del sistema" windows nowait *Moverse al registro proximo disponible
15

IF !BOF() skip-1 ELSE GO top ENDIF ENDIF SCATTER MEMVAR memo thisform.txtId_proveedor.SetFocus thisform.Refresh RETURN

Objeto:Examinar SELECT 1

Procedimiento:Click

BROWSE FIELDS id_proveedor,nombre,telefono,direccion NOEDIT NOAPPEND nodelete *activar el seleccionado SCATTER MEMVAR memo thisform.Refresh RETURN

Objeto:Actualizar SELECT 1

Procedimiento:Click

16

*verificar si hay campos vacos *Nmero de recibo IF EMPTY(thisform.txtId_proveedor.value) WAIT "Id incorrecto..." windows nowait thisform.txtId_proveedor.SetFocus thisform.Refresh RETURN ENDIF *recibo IF EMPTY(thisform.txtNombre.Value) wait"Nombre incorrecto..." windows nowait thisform.txtNombre.SetFocus thisform.Refresh RETURN ENDIF IF EMPTY(thisform.txtTelefono.Value) wait"Telefono incorrecto..." windows nowait thisform.txtTelefono.SetFocus thisform.Refresh RETURN ENDIF IF EMPTY(thisform.txtDireccion.Value) wait"Direccion incorrecta..." windows nowait thisform.txtDireccion.SetFocus thisform.Refresh
17

RETURN ENDIF *Verificar si el proveedor existe mProveedores=ALLTRIM(thisform.txtId_proveedor.Value) SEEK mProveedores IF FOUND() &&Actualizar registro encontrado GATHER MEMVAR memo WAIT "Proveedor. "+mProveedores+" Actualizado"windows nowait ELSE mens1="Imposible actualizar, la factura no." +mProveedores+ " no existe!"+CHR(10) mens2="Cambie el Id e intente actualizar de nuevo..." Op1=MESSAGEBOX(mens1+mens2, 0+64,"Error de Actualizacin...") thisform.txtId_proveedor.SetFocus thisform.Refresh RETURN ENDIF RETURN

Objeto:Salir thisform.Release

Procedimiento:Click

Objeto:Primero go top

Procedimiento:Click

18

m.id_proveedor=proveedores.id_proveedor m.nombre=proveedores.nombre m.telefono=proveedores.telefono m.direccion=proveedores.direccion thisform.refresh

Objeto:Siguiente if eof()

Procedimiento:Click

thisform.siguiente.enabled=.f. go bottom m.id_proveedor=proveedores.id_proveedor m.nombre=proveedores.nombre m.telefono=proveedores.telefono m.direccion=proveedores.direccion proveedores.refresh else skip 1 m.id_proveedor=proveedores.id_proveedor m.nombre=proveedores.nombre m.telefono=proveedores.telefono m.direccion=proveedores.direccion if thisform.anterior.enabled=.f. thisform.anterior.enabled=.t. endif endif
19

thisform.refresh

Objeto:Anterior if bof() thisform.anterior.enabled=.f. go top else skip -1 if thisform.siguiente.enabled=.f. thisform.siguiente.enabled=.t. endif endif

Procedimiento:Click

m.id_proveedor=proveedores.id_proveedor m.nombre=proveedores.nombre m.telefono=proveedores.telefono m.direccion=proveedores.direccion thisform.refresh

Objeto:Ultimo go bottom

Procedimiento:Click

20

m.id_proveedor=proveedores.id_proveedor m.nombre=proveedores.nombre m.telefono=proveedores.telefono m.direccion=proveedores.direccion thisform.refresh


Utilice de referencia los cdigos del formulario de proveedores para crear los dems formularios.

DISEO DE LA PANTALLA CLIENTE:

DISEO DE LA PANTALLA PRODUCTOS:

21

El cuadro combinado de este formulario tiene las siguientes propiedades: Nombre del Objeto Name: Combo1 Propiedad ControlSource RowRouce m.id_proveedor proveedores Valor

RowSourceType 2-Alias

DISEO DE LA PANTALLA RECIBO:

22

En este formulario se utilizan dos cuadros combinados cuyas propiedades son las siguientes: Nombre del Objeto Name: Combo1 Propiedad ControlSource RowRouce m.id_cliente clientes Valor

RowSourceType 2-Alias

Nombre del Objeto Name: CmdTotalFactura

Propiedad ControlSource RowRouce m.id_producto Productos

Valor

RowSourceType 2-Alias

Ademas de los botones comando anteriores se le agregan tres botones mas, sus propiedades son las siguientes:

23

Nombre del Objeto Name: CmdTotalPagar

Propiedad ToolTipText Picture

Valor Calcula el total factura c:\ventacosmeticos\objetos\calc.ico

Nombre del Objeto Name: CmdCambio

Propiedad ToolTipText Picture

Valor Calcula el total a pagar c:\ventacosmeticos\dinero\tourist industry.ico

Nombre del Objeto Name: command3

Propiedad ToolTipText Picture

Valor Calcula el cambio a entregar c:\ventacosmeticos\dinero\money.ico

EVENTOS

Objeto: (formulario) Recibos thisform.release CLOSE TABLES ALL SELECT 1

Procedimiento: Init

USE "c:\ventaCosmeticos\recibo.dbf" ORDER tag num_recibo ALIAS recibo SELECT 2 USE "c:\ventaCosmeticos\clientes.dbf" SELECT 3 USE "c:\ventaCosmeticos\producto.dbf" SCATTER MEMVAR memo *thisform.refresh
24

thisform.txtnum_recibo.SetFocus return

Objeto: TxtFecha

Procedimiento: Click

recibos.txtFecha.value = date() &&muestra la fecha actual recibos.txtFecha.enabled=.t. &&El control esta activado recibos.txtfecha.forecolor=rgb(0,0,0)&&texto en negro

Objeto: CmdTotalFactura Scan m.Total_factura=m.cantidad_producto * m.costo Endscan thisform.refresh

Procedimiento: Click

Objeto: CmdTotalPagar Scan

Procedimiento: Click

m.Total_pagar=m.Total_factura - ((m.descuento/100)*m.Total_factura) Endscan thisform.refresh

Objeto: CmdCambio Scan

Procedimiento: Click

25

m.cambio=m.total_pagar - m.efectivo_recibido Endscan thisform.refresh

DISEO DE LA PANTALLA DE ACCESO (ACCESAR):

Propiedad del objeto combo1 Nombre del Objeto Name: Combo1 Propiedad ControlSource RowRouce usuarios.nombre usuarios Valor

RowSourceType 6-campos

EVENTOS Objeto: CmdAceptar Procedimiento: Click

IF THISFORM.TxtClave.Value="LUCRECIA" THEN DO FORM c:\ventaCosmeticos\cargarformularios.SCX else if thisform.txtClave.value="ELIETH" then DO FORM c:\ventaCosmeticos\cargarformularios.SCX else
26

if thisform.txtClave.value="EVELING" then DO FORM c:\ventaCosmeticos\cargarformularios.SCX THISFORM.REFRESH ELSE WAIT WINDOW "clave invalida" endif endif endif

DISEO DE LA PANTALLA DE PROGRESO (CARGARFORMULARIOS)

Para este formulario es necesario insertar desde los controles de formularios: 2 Etiquetas, 50 shape y 3 timer. Estructura del formulario form1: Nombre del Objeto Name: Form1 Top Propiedad 3 Valor

Nombre del Objeto Shape1

Propiedad Visible Height Left .T. 25 48

Valor

27

Top Width

60 504

Nombre del objeto Shape2 . . . Shape50

Propiedad Visible Height Left Top Width MousePointer

Valor .F. 25 48 60 7 11-hourglass

Nombre del Objeto Name: Label2

Propiedad Caption AutoSize % .T.

Valor

Nombre del Objeto Name: Label3

Propiedad Caption AutoSize

Valor Cargando archivos del sistema .T.

Nombre del Objeto Name: Timer2

Propiedad Enabled Heigth Interval Left Top Width .F. 25 200 36 24 24

Valor

28

Nombre del Objeto Name: Timer3

Propiedad Enabled Heigth Interval Left Top Width .T. 24 1000 60 240 24

Valor

Nombre del Objeto Name: Timer1

Propiedad Enabled Heigth Interval Left Top Width .F. 25 200 576 60 25

Valor

EVENTOS: Objeto: CargarFormularios thisform.timer1.enabled=.t. Procedure: tiempo

Objeto: CargarFormularios public k,por,v

Procedure: Activate

29

v=0 && Muestra el porcentaje por=0 K=1 for i=1 to 50 x = alltrim("thisform.shape"+ alltrim(str(i))+ ".mousepointer = 11") &x next i thisform.refresh()

Objeto: CargarFormularios thisform.tiempo public ntiempo,i,j ntiempo=0 i=0 j=0

Procedure: Init

Objeto: Timer2 v=v+1

Procedure: Timer

if v<=50 && Puede ser <=1000 thisform.label1.caption=str(v) if v=50


30

thisform.label1.forecolor=rgb(225,225,255) thisform.label2.forecolor=rgb(225,255,255) endif else THISFORM.TIMER2.ENABLED=.F. endif

Objeto: Timer3 *Controla el Avance del Titulo del Formulario ntiempo=ntiempo+1 if ntiempo % 10 = 0 then

Procedure: Timer

thisform.caption=alltrim(thisform.caption) else thisform.caption=space(ntiempo%10)+thisform.caption endif if ntiempo = 120 then *Se controla si el tiempo transcurrido a terminado messagebox("Su Tiempo a Expirado"+chr(13)+"Tiempo: 3 minutos",48,"EXPIRACION") this.enabled=.f. thisform.release endif

Objeto:Timer1 K=K+1 thisform.timer2.enabled=.t.

Procedure: Timer

31

IF K<=50 xShape = Alltrim("ThisForm.Shape"+Alltrim(Str(K))+".Visible = .T.") &xShape IF K = 8 THISFORM.label3.CAPTION=" ENDIF IF K = 16 THISFORM.label3.CAPTION=" ENDIF IF K= 24 THISFORM.label3.CAPTION=" ENDIF IF K= 34 THISFORM.label3.CAPTION=" ENDIF IF K= 40 THISFORM.label3.CAPTION="SISTEMA DE INFORMACION... SEGURIDAD" ENDIF IF K= 45 THISFORM.label3.CAPTION=" endif ELSE THISFORM.TIMER1.ENABLED=.F. THISFORM.HIDE
32

BUSCANDO..."

ACCESANDO..."

CREANDO INTERFAZ... "

ABRIENDO... "

CARGANDO... SEGURIDAD "

THISFORM.RELEASE DO FORM c:\ventacosmeticos\presentacion.SCX ENDIF DISEO DE LA PANTALLA MENS:

EVENTOS Objeto: CmdClientes Procedimiento: Click

DO FORM c:\ventacosmeticos\clientes.scx

Objeto: CmdProveedores

Procedimiento: Click

DO FORM c:\ventacosmeticos\proveedores.scx

Objeto: CmdProductos

Procedimiento: Click

DO FORM c:\ventacosmeticos\productos.scx Objeto: CmdRecibos Procedimiento: Click

DO FORM c:\ventacosmeticos\recibos.scx

Objeto: InfClientes

Procedimiento: Click

REPORT FORM c:\ventacosmeticos\clientes.frx


33

Objeto: InfProductos

Procedimiento: Click

REPORT FORM c:\ventacosmeticos\Productos.frx

Objeto: InfProveedores

Procedimiento: Click

REPORT FORM c:\ventacosmeticos\Proveedores.frx

Objeto: InfRecibos

Procedimiento: Click

REPORT FORM c:\ventacosmeticos\Recibos.frx

DISEO DEL FORMULARIO PRESENTACIN.

Propiedades de los objetos: Nombre del Objeto Name:TxtFecha Propiedad Caption FontBold ControlSource FECHA .T. M.FECHA Valor

34

Nombre del Objeto Name:TxtHora

Propiedad Caption FontBold ControlSource HORA .T. M.HORA

Valor

Nombre del Objeto (botn comando) Name:Menus

Propiedad

Valor

Picture ToolTipText

c:\ventacosmeticos\pawerbuilder\ok.ico Entrar al menu

Nombre del Objeto Name: Imagine1

Propiedad

Valor

Picture

c:\ventacosmeticos\cosmeticos\x1pnp_rgmi5o5 2b3obnkpei71dpkvniqwsp.gif

EVENTOS: Objeto:FrmPresentacion Procedure: Init

SET DATE TO BRITISH THISFORM.TXTFECHA.Value=DATE() THISFORM.TXTHORA.Value=TIME() Objeto:Menus Procedure: Click

DO FORM "c:\ventaCosmeticos\MENUS.SCX"
35

PANTALLAS DE SALIDA. CREACION DE INFORMES. Los informes muestran datos y resumen datos en un formulario impreso o en pantalla. Los dos componentes principales de los informes son los datos y el formato. La fuente de datos del informe puede ser una tabla de base de dato, una consulta o una vista. El primer paso para disear un informe es determinar los datos que se van a mostrar, y el segundo paso es determinar cul va a ser el mejor formato para mostrar ese informe. Puede crear listados que se basen en una nica tabla o en informes complejos. El Generador de Informes es una herramienta flexible y de fcil uso para la creacin, diseo y modificacin de informes. Diseo del formulario productos.

CREACIN DE INFORMES:

1. En el administrador de proyectos, seleccione la ficha Documentos. 2. Seleccione Informes


36

3. Pulse el botn nuevo 4. Pulse el botn Asistente para Informes Aparece la siguiente ventana.

Seleccione Asistente para informes Pulse Aceptar Aparecer la siguiente ventana donde se muestra la seleccin de la tabla y los campos, seleccione los campos que observa en campos seleccionados:

Pulse siguiente. Agrupe los registros de la siguiente manera:

37

Pulse siguienteElija el estilo ejecutivoorientacion Orizontalordenar por nombre de productoFinalizar. As mismo crear los informes para las dems tablas. Diseo del informe recibo.

Diseo del informe Proveedores


38

Diseo del informe Clientes

39

You might also like