CONTACTO ***** jofelchez@gmail.com *****




Soporte Remoto, helpmybusinesspos.info , TeamViewer, Hamachi, Descarga My Business pos 2012 Gratis, crack activar, keygen activador , FACTURACIÓN ELECTRÓNICA, my business pos 2012, MyCBB, Codigo de Barras BiDimensional, configurar facturas, Migración de la Versión 2006 a la Versión 2011, Delta, Configurar 2011, Manuales de Instalación, Errores, Modificar, Respaldos, Nuevo IVA, Red MyBusiness, Problema, Ambiente path, Migración, Impresora, Descarga 2011, Reportes, Presentaciones, Win7, SQL, Manager, Ticket, Etiquetas, Generador, Corte X Z, Restaurar, Zebra, Logo, recomendaciones, Remisiones, Barras, Inventario, hamachi, Delta y LINUX, code39, como cambiar el iva en my business pos, my business pos blogspot, como instalar my busuness delta, TPV, MyMoney, Concentrador POS, Zebra, Datamax, Mobile Business, Commander, Restaurante, MyBusiness POS 2012, Kardex
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta programacion. Mostrar todas las entradas

sábado, 29 de agosto de 2015

Programar con Navicat

navicat_Premium_MyBusinessPOS

[wpdm_package id='15398']



Navicat es un administrador gráfico de base de datos y un software de desarrollo producido por PremiumSoft CyberTech Ltd. para MySQL, MariaDB, Oracle, SQLite, PostgreSQL y Microsoft SQL Server. Cuenta con un Explorador como interfaz gráfica de usuario soportando múltiples conexiones para bases de datos locales y remotas. Su diseño está pensado para satisfacer las diferentes necesidades de un amplio sector del public; desde administradores y programadores de bases de datos a diferentes empresas que dan soporte y o comparten información con clientes o socios.

Navicat es una herramienta que permite navegar en la base de datos MyBusiness POS y hacer algunas modificaciones directamente. En esta ocasión voy a mostrar dónde se encuentra el código fuente de MyBusiness POS y algunas funciones que se pueden reutilizar en nuestros desarrollos. La ventaja de navicat es que podemos identificar un código específico con tan solo presionar las teclas (Ctrl + F)

Para comenzar, vamos a mencionar que, dentro de la base de datos "C:\MyBusinessDatabase\myBusinessPOS2012.mdf", el código fuente se almacena en estas dos tablas:

  • formatosdelta. Almacena los formatos de impresión, reportes y procedimientos que se ven en el sistema MyBusiness POS (en el Business Manager--Personalización).

  • formasdelta. Almacena las ventanas o formas que se identifican en el ambiente de desarrollo (Menu principal--Programación--Ambiente de desarrollo). Las ventanas se integran de dos partes :

    • Código: El código fuente se ve de manera similar al de formatos delta

    • Diseño: esta parte se ve en forma de caracteres que solo el ambiente de desarrollo interpreta, aunque con un poco de habilidad lo podemos manipular y funciona de la misma manera. Este código se presenta así:

      "Forma==13635==5760==-71895==2805====$$-$$ListView==3200==750==9875==0==lista====13$$-$$Grid==12660==4250==375==875==Grid====12$$-$$TextBox"




Bien, para llegar a estas dos tablas se hace lo siguiente:

  1. Una vez descargado e instalada la aplicación, se crea una nueva conexión hacia SQL ServerNavicat Premium0000

  2. Se abre una ventana que solicita los datos. Si el servidor está de forma local, se colocan de la siguiente manera:

    Connection name: Su nombre

    Host Name: .\SQLEXPRESS

    Authentication: Sql Server Authentication

    User name: sa

    Password: 12345678

    Navicat Premium0

  3. En caso de que el servidor se encuentre en otro equipo y escucha con el puerto 1400, se configura de la siguiente forma:Navicat Premium000

    Connection name: Su nombre

    Host Name:Su_Servidor\SQLEXPRESS, 1400

    Authentication: Sql Server Authentication

    User name: sa

    Password: 12345678

  4. Presionar el botón "Test Connection" para verificar si todo está en orden. Después presionar OK

    Navicat Premium00

  5. Aparece el listado de base de datos. Seleccionar la base que nos interesa "C:\MyBusinessDatabase\myBusinessPOS2012.mdf" y se muestran las tablasnavicat1

  6. En navicat es posible filtrar el nombre de la tabla con solo escribir en la parte superior derecha. en este caso, escribir la palabra "Delta" y aparecen las dos tablas que nos interesan:Navicat Premium2 

  7. Al seleccionar la tabla FormatosDelta, se pueden ver la lista de códigos fuenteNavicat Premium3

  8. Para ver el detalle, es necesario seleccionar la vista MEMO

    Navicat Premium4

  9. Al seleccionar MEMO se puede ver el código completo de cada registro

    Navicat Premium5

  10. En el caso de la tabla FormasDelta, se puede ver el código fuente de las ventanas o formas

    Navicat Premium6

  11. De igual manera, al colocar la vista MEMO, se ven las funciones utilizadas por el ambiente de desarrollo

    Navicat Premium7

  12. Dentro de la tabla, en la columna frm se encuentra el diseño de la ventana, pero con muchos símbolos. Ahí se encuentran los controles y botones

    Navicat Premium9

miércoles, 8 de abril de 2015

Alta Rápida de Artículos

Articulos_AltaRapida_MybusinessPOSTenemos un desarrollo para que puedas dar de alta los artículos de forma parecida a una hoja de Excel

[wpdm_package id='15635']

[youtube kdaA1unzJFA]

 

 

domingo, 15 de marzo de 2015

Alinear y Centrar el texto del ticket con PadC, PadL y PadR

Alinear_centrar_texto_mybusinessposEn este ejemplo veremos cómo alinear el texto de un ticket con las funciones

  • PadL(cadenaTexto,Longitud). Rellena de espacios a la izquierda; Alineación a la Derecha

  • PadR(cadenaTexto,Longitud). Rellena de espacios a la derecha; Alineación a la Izquierda

  • PadC(cadenaTexto,Longitud). Rellena de espacios al centro; Alineación Centrado


[wpdm_package id='15368']
Para lograrlo, crearemos tres funciones, aunque PadL ya viene por default, aquí la colocaremos.

Sub Main()
'La letra posterior a PAD es el lado que se rellenará de espacios
a = padL ("Frase de prueba",40) 'Relleno IZQUIERDO. Alinea a la derecha
b = PadC ("Frase de prueba",40) 'Ambos lados. Alinear al centro
c = PadR ("Frase de prueba",40) 'Relleno DERECHO. Alineación a la izquierda

mymessage "PadL: '" & a & "'" & vbcrlf & _
"PadC: '" & b & "'" & vbcrlf &_
"PadR: '" & c & "'"

End Sub

'PADL() Alineación a la DERECHA inserta los caracteres de relleno a la Izquierda
Function PadL(cadena,nLongitud)
dim clen
dim temp
dim char
char = " " 'espacio en blanco
on error resume next
'Tomamos la cadena enviada en el parámetro
'eliminando los chares vacios izq-dch
temp = trim(cadena)
clen = len(temp)
for n=1 to nLongitud
char = char & " "
Next

'Analizamos si la nLongitud justificada es menos
'que la propia cadena enviada en parámetro.
if clen < nLongitud then
temp = mid(char,1,nLongitud - clen) & temp 'Alineación a la Derecha
end if
PadL = temp
end function


'PADR() Alineación a la IZQUIERDA inserta los caracteres de relleno a la derecha
Function PadR(cadena,nLongitud)
dim clen
dim temp
char = " " 'espacio en blanco
on error resume next
'Tomamos la cadena enviada en el parámetro
'eliminando los chares vacios izq-dch
temp = trim(cadena)
clen = len(temp)
for n=1 to nLongitud
char = char & " "
Next

'Analizamos si la nLongitud justificada es menos
'que la propia cadena enviada en parámetro.
if clen < nLongitud then
temp = temp & mid(char,1,nLongitud - clen) 'Alineación a la Izquierda
end if
PadR = temp
end function


'PADC() Alineación al CENTRO inserta los caracteres de relleno a ambos lados
Function PadC(cadena,nLongitud)
dim clen
dim temp
char = " " 'espacio en blanco
'on error resume next
'Tomamos la cadena enviada en el parámetro
'eliminando los chares vacios izq-dch
temp = trim(cadena)
clen = len(temp)
for n = 1 to nLongitud
char = char & " "
Next
'Espacios al lado Izquierdo
nEspaciosA = formato((nLongitud - clen)/2 , "#.0")
DondeEstaElPunto = clAt( ".", nEspaciosA ) - 1
'Espacios al lado derecho
nEspaciosA = mid(nEspaciosA,1,DondeEstaElPunto)
nEspaciosB = nLongitud -clen - nEspaciosA
'Analizamos si la nLongitud justificada es menos
'que la propia cadena enviada en parámetro.
if clen < nLongitud then
temp = mid(char,1,nEspaciosA) & _
temp & _
mid(char,1,nEspaciosB) 'Alineación a la Izquierda
end if
PadC = temp
end function


Espero sea de utilidad estas funciones que dejo a su disposición en espera de que correspondan con un pomo para seguir inspirados.
Saludos
José Félix

jueves, 29 de enero de 2015

Query para MultiCombo

Estas son las consultas que se hacen desde el objeto DB Multicombo



















































































































































































































































































































































































































































































































































































































































































































































QuerySqlColumnaRetornoLargo1Largo2Largo3
AlmacenesSELECT  almacen , descrip FROM almacen ORDER BY almacen0000
ArticulosSELECT   descrip As descripcion, articulo,

linea, existencia, kit, precio1, unidad, costo_u

FROM prods ORDER BY descrip
1350007000
Articulos para ventaSELECT descrip As 'DESCRIPCION', articulo, linea, existencia, kit, precio1 FROM prods WHERE paraventa <> 0 order BY descrip1400007500
Artículos por claveSELECT  prods.articulo, prods.descrip FROM prods ORDER BY prods.articulo0150050007000
Articulos por descripciónSELECT   descrip As descripcion, articulo, linea, existencia, kit, precio1 FROM prods ORDER BY descrip0500007000
Centros de costoSELECT  * FROM ctocto0000
Clasificación de inventarioSELECT clasificacion FROM prods GROUP BY clasificacion ORDER BY clasificacion0000
Claves adicionales de articulosSELECT  clavesadd.articulo , clavesadd.clave , clavesadd.dato1 , clavesadd.dato2  FROM clavesadd ORDER BY clavesadd.articulo1000
ClientesSELECT nombre AS 'Nombre', cliente ,telefono,

calle, colonia , pobla, estado

FROM clients ORDER BY cliente
1600008000
Clientes por claveSELECT  cliente, nombre, telefono FROM clients ORDER BY cliente0200035007500
Clientes por descripcionSELECT  nombre,cliente AS 'CLAVE' ,telefono, calle, colonia, pobla, estado  FROM clients ORDER BY nombre0350007000
ClientesNCSELECT clients.nombre, devolucionespocket.cliente FROM clients, devolucionespocket WHERE clients.cliente = devolucionespocket.cliente GROUP BY devolucionespocket.cliente, clients.nombre ORDER BY nombre135006500
CobradoresSELECT  nombre, cobrador   FROM cobrad ORDER BY nombre1000
Código de formatosSELECT  descrip , formato , tipo, codigo  FROM formatos ORDER BY descrip3000
ColoniaSELECT colonia FROM clients GROUP BY colonia ORDER BY colonia0400007000
ColoresSELECT descrip, color FROM colores ORDER BY descrip1400020007000
ComisionistasSELECT comisionista FROM auxclients GROUP BY comisionista ORDER BY comisionista0400007000
Compras confirmadasSELECT compra, proveedor, f_emision AS 'FECHA' FROM compras WHERE tipo_doc = 'COM' AND estado = 'CO' order BY compra0100020005000
Conceptos de AbonosSELECT descrip AS DESCRIPCION, clave_con AS 'CLAVE' FROM concxc WHERE

tipo_cxc   = 'A' ORDER BY descrip
1000
Conceptos de abonos a proveedoresSELECT  descrip, clave_con AS 'CLAVE' FROM concxp WHERE tipo_cxc = 'A' ORDER BY descrip1000
Conceptos de CargosSELECT  descrip, clave_con AS 'CLAVE' FROM concxc WHERE tipo_cxc = 'C' ORDER BY descrip1000
Conceptos de cobranzaSELECT  descrip AS 'Descripción', clave_con AS 'Concepto'  , tipo_cxc AS 'Cargo/Abono' FROM concxc ORDER BY descrip1400007000
Conceptos de cuentas por pagarSELECT  descrip, clave_con  FROM concxp ORDER BY descrip1000
Conceptos de egresosSELECT descrip AS 'DESCRIPCION', concepto FROM conegre ORDER BY descrip1350007000
Conceptos de entrada al inventarioSELECT descrip, tipo_movim FROM tipominv WHERE ent_sal = 'E' ORDER BY descrip135005005000
Conceptos de gastosSELECT  descrip AS 'DESCRIPCION' , concepto FROM conpres ORDER BY descrip1300005000
Conceptos de ingresoSELECT descrip AS 'DESCRIPCION' , concepto FROM coningre ORDER BY descrip1000
Conceptos de salidas de inventarioSELECT  descrip, tipo_movim FROM tipominv WHERE ent_sal = 'S' ORDER BY descrip1350006000
ContactosSELECT clients.nombre,  contacto.contacto, contacto.apellidop, contacto.apellidom, contacto.id FROM contacto LEFT JOIN clients ON contacto.cliente = clients.cliente ORDER BY clients.nombre, contacto.contacto4000
Contactos por clienteSELECT clients.nombre As 'Nombre' ,  contacto.contacto , contacto.apellidop , contacto.apellidom, contacto.id FROM contacto LEFT JOIN clients ON contacto.cliente = clients.cliente4350007000
CostosAdicionalesSELECT costoadicional, descrip AS descripcion FROM costosadic ORDER BY descrip ASC0025005000
DevolucionesSELECT  * FROM devoluc0000
Direcciones de embarqueSELECT nombre, cliente FROM clients ORDER BY nombre1600010007000
EstacionesSELECT estacion FROM estaciones ORDER BY estacion0200005000
EstadosSELECT estado FROM clients GROUP BY estado ORDER BY estado0400005000
EtapasSELECT  etapas.Etapa , etapas.Descrip FROM etapas ORDER BY etapas.Etapa0030000
FabricantesSELECT fabricante, nombre FROM fabricantes ORDER BY fabricante0050007000
FacturasSELECT  no_referen AS 'Documento', venta, f_emision AS 'Fecha' , cliente FROM ventas WHERE tipo_doc = 'FAC' AND estado = 'CO'0000
FamiliasSELECT familia FROM prods GROUP BY familia ORDER BY familia0600006000
FormatosSELECT  formato , descrip, usufecha FROM formatosDelta ORDER BY formato0000
Grupos de cuentasSELECT  * FROM gpocta0000
ImpuestosSELECT  impuesto , descrip FROM impuestos  ORDER BY impuesto0000
Impuestos por porcentajeSELECT  descrip , valor FROM impuestos ORDER BY impuesto1000
InventariosSELECT  * FROM invfis0000
Inventarios físicosSELECT  invfis.inventario, invfis.almacen, invfis.fecha, invfis.estado FROM invfis0000
Líneas de ArtículosSELECT  descrip As 'Descripción', linea FROM lineas ORDER BY descrip1400010007000
LotesSELECT  lote, articulo, cantidads AS 'Existencia', numero as 'Pedimento' FROM lotes WHERE cantidads > 00007000
Marcas de ArtículosSELECT  descrip As 'Descripción', marca  FROM marcas ORDER BY descrip1300000
Marcas por claveSELECT  marca, descrip FROM marcas0100020005000
ModelosSELECT modelo, descrip FROM modelos ORDER BY modelo0000
MonedasSELECT moneda,descrip AS 'Descripcion' FROM monedas ORDER BY moneda0000
NotasCreditoSELECT ventas.no_referen AS 'Documento', clients.nombre AS 'Nombre' FROM ventas, clients WHERE ventas.cliente = clients.cliente AND ventas.tipo_doc = 'DV' AND ventas.estado = 'CO' ORDER BY ventas.no_referen0200050008000
OfertasSELECT  formato , descrip, usufecha FROM formatosdelta WHERE grupo = 'Oferta' ORDER BY formato0000
Partidas de compraSELECT  partcomp.articulo, partcomp.cantidad, partcomp.precio, partcomp.descuento, partcomp.observ FROM partcomp, compras WHERE compras.compra = partcomp.compra ORDER BY articulo0000
Partidas de ventaSELECT  partvta.articulo, prods.descrip,  partvta.cantidad, partvta.precio, partvta.descuento FROM partvta, prods, ventas WHERE partvta.articulo = prods.articulo AND ventas.venta = partvta.venta0000
PendientesSELECT  * FROM respues0000
Procedimientos y rutinas de usuarioSELECT  formatos.descrip , formatos.formato  FROM formatos WHERE formatos.Tipo = 'Programa'1000
ProveedoresSELECT  nombre, proveedor, telefono, calle, colonia, pobla, estado FROM proveed ORDER BY nombre1400007000
Proveedores por claveSELECT  proveed.proveedor, proveed.nombre FROM proveed ORDER BY proveed.proveedor0350035008000
RemisionesSELECT  no_referen AS 'Documento', venta, f_emision AS 'Fecha' , cliente FROM ventas WHERE tipo_doc = 'REM' AND estado = 'CO' ORDER BY no_referen0000
Remisiones para devoluciónSELECT  no_referen  AS 'Documento' , f_emision AS 'Fecha' , cliente, venta FROM ventas WHERE estado = 'CO'0150005000
RepartidoresSELECT * FROM repartidor0150025007000
ReportesSELECT  formato, descrip, grupo  FROM formatos WHERE tipo = 'Reporte'0000
Series disponiblesSELECT  * FROM series WHERE entregado = 01000
SeriesNCSELECT serieNC AS 'Serie' FROM estaciones WHERE serieNC <> '' GROUP BY serieNC0300005000
SeriesTicketsSELECT serieTicket AS 'Serie' FROM estaciones WHERE serieTicket <> '' GROUP BY serieTicket0300005000
Subfamilia1SELECT subfamilia FROM prods GROUP BY subfamilia ORDER BY subfamilia0600006000
Subfamilia2SELECT subfam1 FROM prods GROUP BY subfam1 ORDER BY subfam10600006000
Subfamilia3SELECT subfam2 FROM prods GROUP BY subfam2 ORDER BY subfam20600006000
SucursalesSELECT  sucursal.sucursal , sucursal.descrip FROM sucursal ORDER BY sucursal.sucursal0000
TallasSELECT descrip, talla FROM tallas ORDER BY descrip;1400030007000
TicketsSELECT no_referen AS 'Ticket' FROM ventas WHERE tipo_doc = 'REM' AND ticket <> 0 AND enfac = 00300005000
Tipos de clientesSELECT  descrip AS 'Descripción', tipo

FROM tipos ORDER BY tipo
1300010006000
Tipos de pendientesSELECT  tipopend.descrip, tipopend.tipopend FROM tipopend ORDER BY tipopend.descrip1350005000
Tipos de pólizaSELECT  * FROM tipopol0000
Tipos de PolizasSELECT  * FROM tipopol0000
Tipos de proveedoresSELECT tipoprov AS 'Tipo' , descrip AS 'Descripción' FROM tiposprov0200005000
Tipos de teléfonoSELECT  tipotel.descrip , tipotel.tipotel FROM tipotel ORDER BY tipotel.Descrip1350006000
TTaemontosMultiSELECT   a.articulo, a.descrip Descripción,     round(precio1 * (1+( b.valor/100)),0) Monto  FROM prods a, impuestos b        WHERE a.impuesto = b.impuesto   and CHARINDEX('Telcel', articulo)=0   and a.tiempoAire = 1    and a.bloqueado = 0      order by a.DESCRIP018003100
TTaemontosTelcelSELECT   a.articulo, a.descrip Descripción,     round(precio1 * (1+( b.valor/100)),0) Monto  FROM prods a, impuestos b        WHERE a.impuesto = b.impuesto   and CHARINDEX('Telcel', articulo)>0   and a.tiempoAire = 1   and a.bloqueado = 0       order by a.DESCRIP018003100
TutorSELECT articulo, descrip FROM prods ORDER BY descrip0000
Ubicación en almacenSELECT descrip AS 'descripción', ubicacion FROM ubicacion ORDER BY descrip1250006000
UsuariosSELECT usuario, nombre FROM usuarios0000
UsuariosGBSELECT usuariosGreenBox.idTeller AS 'Usuario', usuariosGreenBox.name AS 'Nombre' FROM usuariosGreenBox ORDER BY usuariosGreenBox.name0100050007500
VendedoresSELECT nombre,  vend AS 'Vendedor'  FROM vends ORDER BY nombre1400007500
VentasSELECT  ventas.venta, ventas.cliente FROM ventas, clients WHERE ventas.cliente = clients.cliente1000
Ventas pendientesSELECT  venta,  f_emision AS 'Fecha' , cliente FROM ventas WHERE estado = 'PE' ORDER BY no_referen0000
Ventas sin cancelarSELECT  no_referen  AS 'Documento' , f_emision AS 'Fecha' , cliente, venta FROM ventas WHERE estado = 'CO'  AND tipo_doc = 'FAC' ORDER BY venta3000
Zonas de clientesSELECT  zona , descrip FROM zonas ORDER BY zona0200035007000

lunes, 19 de enero de 2015

Importar desde texto .txt

Este ejemplo muestra como importar un archivo txt


Sub Main()
Dim s, cliente, telefono, dondeEstaEltabulador
Dim Query, rstCliente

Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection

CloseFile 1

OpenFile "c:\clientes.txt", 1

While Not FileEOF( 1 )

s = ReadLine( 1 )

dondeEstaEltabulador = clAt( Chr(9), s )
cliente = Mid( s, 1, dondeEstaElTabulador - 1 )
cliente = Replace( cliente, Chr(34), "" )

s = Mid( s, dondeEstaElTabulador + 1 )

dondeEstaEltabulador = clAt( Chr(9), s )
nombre = Mid( s, 1, dondeEstaElTabulador - 1 )
nombre = Replace( nombre, Chr(34), "" )

telefono = Mid( s, dondeEstaElTabulador + 1 )
telefono = Replace( telefono, Chr(34), "" )

Set rstCliente = Rst( _
"SELECT cliente FROM clients WHERE cliente = '" & cliente & "'", _
Ambiente.Connection )

Query.Reset

If rstCliente.EOF Then
Query.strState = "INSERT"
Else
Query.strState = "UPDATE"
Query.Condition = "cliente = '" & cliente & "'"
End If

' Tabla, campo, valor
Query.AddField "clients", "cliente", cliente
Query.AddField "clients", "nombre", nombre
Query.AddField "clients", "telefono", telefono
Query.CreateQuery
Query.Execute

Wend

CloseFile 1

End Sub



Esta función podría ser una opción para interconectar mybusiness pos con otras herramientas externas de una forma sencilla. Utilizo la importación para descifrar la respuesta de tiempo aire y funciona bastante bien.

jueves, 15 de enero de 2015

Teclas de Función (F1 hasta F12) y KeyCode

En MyBusiness POS se pueden especificar algunas teclas de función para necesidades específicas. Por default, las teclas que están ocupadas son

  • F1. Ayuda desde MyBusiness POS.

  • F2. Menú de Opciones que muestra los comandos a ejecutar.

  • F5. Terminar una venta y abrir la ventana de Cobro rápido.

  • F7. Dejar la venta como pendiente. Esto puede ser de utilidad cuando un cliente aun no decide terminar las compras y con ello es posible atender a un segundo cliente en ese lapso de indecisión por parte del primero.

  • F8. Recuperar una venta de un cliente en específico.

  • F9. Coloca el foco en el textbox de Cliente.

  • F11. realiza corte X

  • F12. Realiza corte Z


Después de esta lista, es posible identificar las teclas de función que se encuentran disponibles:

  • F3. Libre

  • F4. Libre

  • F6. Libre

  • F10. Libre


El procedimiento que permite aplicar la personalización se llama PUNTOV080  (Configuración--Personalización--Procedimientos y rutinas de usuario--PuntoV080).

Es posible usar el KeyCode = Valor

[wpdm_package id='15383']

Teclas de Función (F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12)


























































































ConstanteValorDescripción
vbKeyF1112Tecla F1
vbKeyF2113Tecla F2
vbKeyF3114Tecla F3
vbKeyF4115Tecla F4
vbKeyF5116Tecla F5
vbKeyF6117Tecla F6
vbKeyF7118Tecla F7
vbKeyF8119Tecla F8
vbKeyF9120Tecla F9
vbKeyF10121Tecla F10
vbKeyF11122Tecla F11
vbKeyF12123Tecla F12
vbKeyF13124Tecla F13
vbKeyF14125Tecla F14
vbKeyF15126Tecla F15
vbKeyF16127Tecla F16

Constantes de códigos de tecla





































































































































































ConstanteValorDescripción
vbKeyLButton1Botón primario del mouse
vbKeyRButton2Botón secundario del mouse
vbKeyCancel3Tecla CANCEL
vbKeyMButton4Botón central del mouse
vbKeyBack8Tecla RETROCESO
vbKeyTab9Tecla TAB
vbKeyClear12Tecla SUPR
vbKeyReturn13Tecla ENTRAR
vbKeyShift16Tecla MAYÚS
vbKeyControl17Tecla CTRL
vbKeyMenu18Tecla MENÚ
vbKeyPause19Tecla PAUSA
vbKeyCapital20Tecla BLOQ MAYÚS
vbKeyEscape27Tecla ESC
vbKeySpace32Tecla BARRA ESPACIADORA
vbKeyPageUp33Tecla RE PÁG
vbKeyPageDown34Tecla AV PÁG
vbKeyEnd35Tecla FIN
vbKeyHome36Tecla INICIO
vbKeyLeft37Tecla FLECHA IZQUIERDA
vbKeyUp38Tecla FLECHA ARRIBA
vbKeyRight39Tecla FLECHA DERECHA
vbKeyDown40Tecla FLECHA ABAJO
vbKeySelect41Tecla SELECT
vbKeyPrint42Tecla IMPRIMIR PANTALLA
vbKeyExecute43Tecla EXECUTE
vbKeySnapshot44Tecla SNAPSHOT
vbKeyInsert45Tecla INS
vbKeyDelete46Tecla SUPR
vbKeyHelp47Tecla AYUDA
vbKeyNumlock144Tecla BLOQ NUM

Desde KeyA hasta KeyZ son iguales a sus equivalentes ASCII: 'A' hasta 'Z'












































































































































ConstanteValorDescripción
vbKeyA65Tecla A
vbKeyB66Tecla B
vbKeyC67Tecla C
vbKeyD68Tecla D
vbKeyE69Tecla E
vbKeyF70Tecla F
vbKeyG71Tecla G
vbKeyH72Tecla H
vbKeyI73Tecla I
vbKeyJ74Tecla J
vbKeyK75Tecla K
vbKeyL76Tecla L
vbKeyM77Tecla M
vbKeyN78Tecla N
vbKeyO79Tecla O
vbKeyP80Tecla P
vbKeyQ81Tecla Q
vbKeyR82Tecla R
vbKeyS83Tecla S
vbKeyT84Tecla T
vbKeyU85Tecla U
vbKeyV86Tecla V
vbKeyW87Tecla W
vbKeyX88Tecla X
vbKeyY89Tecla Y
vbKeyZ90Tecla Z

Desde Key0 hasta Key9 son iguales a sus equivalentes ASCII: '0' hasta '9'




























































ConstanteValorDescripción
vbKey048Tecla 0
vbKey149Tecla 1
vbKey250Tecla 2
vbKey351Tecla 3
vbKey452Tecla 4
vbKey553Tecla 5
vbKey654Tecla 6
vbKey755Tecla 7
vbKey856Tecla 8
vbKey957Tecla 9

Teclas del teclado numérico


























































































ConstanteValorDescripción
vbKeyNumpad096Tecla 0
vbKeyNumpad197Tecla 1
vbKeyNumpad298Tecla 2
vbKeyNumpad399Tecla 3
vbKeyNumpad4100Tecla 4
vbKeyNumpad5101Tecla 5
vbKeyNumpad6102Tecla 6
vbKeyNumpad7103Tecla 7
vbKeyNumpad8104Tecla 8
vbKeyNumpad9105Tecla 9
vbKeyMultiply106Tecla SIGNO DE MULTIPLICACIÓN (*)
vbKeyAdd107Tecla SIGNO MÁS (+)
vbKeySeparator108Tecla INTRO (teclado numérico)
vbKeySubtract109Tecla SIGNO MENOS (-)
vbKeyDecimal110Tecla PUNTO DECIMAL (.)
vbKeyDivide111Tecla SIGNO DE DIVISIÓN (/)

viernes, 5 de septiembre de 2014

Colocar logo en ticket USB

[youtube UPYM_iRZbmg]
La ruta donde encontramos el formato de ticket dentro del business manager es: Configuración--Presonalización--Formatos del sistema--Ticket USB
Trataremos de identificar la línea que dice IniciaDocumento y debajo de esta podemos colocar el logo


IniciaDocumento 'tratamos de identificar esta línea, indica el inicio de la impresión

'Ruta del logo: C:\archivos de programa\MyBusiness POS 2012\images\logo.jpg
'El logo debe tener extensión logo.jpg
' Los valores Col(0), Row(0), Col(3),Row(4) son las coordenadas inicio y el tamaño

Picture Ambiente.path & "\Images\logo.jpg", Col(0), Row(0), Col(3),Row(4)
'EstableceImpresora "Mi Impresora laser" 'esta linea permite elegir impresora USB destino
EstableceFuente "Courier New", 8 'Fuente que tendra el ticket USB
Say 0,0.2, cSalida 'Alineación del texto, en pulgadas. cSalida es el texto a imprimir

FinDocumento 'Termina la Impresión USB
'

[youtube SzTYpXT_Gdg]

miércoles, 3 de septiembre de 2014

PUNTOV001

En ocasiones necesitamos ajustar las columnas del punto de venta o hacer algunas modificaciones que nos permitan utilizar de manera más cómoda el punto de venta.
A continuación explico un poco sobre un procedimiento que viene en MyBusiness Pos, llamado PUNTOV001. Este se encuentra dentro del business manager, en la ruta configuracion--personalizacion--procedimientos y rutinas de usuario


'Este procedimiento se ejecuta al abrir el punto de venta

Sub Main()

' Si la ventana va a aparecer maximizada
'Me.windowsMode = 0
'Titulo que aparece en la parte superior izquierda
Me.Caption = Ambiente.Empresa
'Formato con decimales
Me.formatoDeDinero = "##,##0.00"
Me.formatoDeDineroTotales = "##,##0.00"
Me.formatoDeDescuento = "##,##0"

Version2005 'llama a la función que tiene las dimensiones de algunas columnas
Me.MaxPartidas = 8 ' máximo registros que aparecen en el PV

' Limpiamos los mensajes
txtFields(3) = "" 'Libera el campo inferior izquierdo

' La variable reload si es falsa indica que la ventana del punto de venta
' todavia no realiza una venta
if Reload = False Then
Ambiente.Tag = 2
Script.RunProcess "PUNTOV053", Parent, Ambiente
end if ' invoca un procedimiento llamado puntov053

'txtFields(1) = Ambiente.Uid
fg2.Redraw = False 'desactiva el ajuste de malla
AjustaFlexGrid fg2 ' Toma las dimensiones de la malla a la pantalla
fg2.Redraw = True 'ejecuta el ajuste

' Coloca o quita la columna del impuesto
'fg2.ColWidth(5) = 1000

If Trim("" & Ambiente.rstEstacion("serieRemision")) = "" Then
Me.consecutivoRemisiones = Ambiente.Estacion & "Remision"
Else
Me.consecutivoRemisiones = Trim( "" & Ambiente.rstEstacion("serieRemision") ) & "Remision"
End If

If Trim("" & Ambiente.rstEstacion("serieTicket")) = "" Then
Me.consecutivoTickets = Ambiente.Estacion & "Ticket"
Else
Me.consecutivoTickets = Trim("" & Ambiente.rstEstacion("serieTicket")) & "Ticket"
End If
'Tpma los consecutivos de facruración
Me.serieFactura = Trim("" & Ambiente.rstEstacion("serieFactura"))
Me.serieTicket = Trim("" & Ambiente.rstEstacion("serieTicket"))
Me.serieRemision = Trim("" & Ambiente.rstEstacion("serieRemision"))

If Trim(Me.serieTicket) = "" Then
Me.serieTicket = Ambiente.Estacion
End If

If Trim(Me.serieRemision) = "" Then
Me.serieRemision = Ambiente.Estacion
End If
'Me.modeloScanner = "Scanner"
'Me.ActivaScannerOPOS

Me.usuarioRequerido = 0
fg2.ColWidth(18) = 0 'oculta la columna al dejarla en 0px de ancho

End Sub

Sub Version2005()

'Este bloque de código es el que
'permite ajustar las columnas en el punto de venta

'Me.DevolverEfectivo = True
Me.DevolverEfectivo = False

FormatoCantidad = "##,##0.000"
TimerComodin.Enabled = False
TimerComodin.Interval = 4000
TimerComodin.Enabled = True

fg2.ColWidth(6) = 5000 ' columna de descripción
fg2.ColWidth(9) = 1200 'columna de Precio de Lista (1, 2, 3, 4)

'fg2.ColWidth(1) = 1200 'Columna de Cantidad (QTY)
'fg2.ColWidth(2) = 1200 'Columna de Precio Unitario, sin incluir impuestos

'fg2.ColWidth(3) = 1200 'Columna de Descuento en Porcentaje (%)
'fg2.ColWidth(4) = 1200 'Columna de Importe

'fg2.ColWidth(5) = 1200 'Columna de Impuesto en Porcentaje (%)
'fg2.ColWidth(6) = 1200 'Columna de Descripción de Artículo

'fg2.ColWidth(7) = 1200 'Columna de Número de salida en el Kárdex
'fg2.ColWidth(8) = 1200 'Columna de Almacén del que se toma la mercancía

'columnas de presentaciones
'fg2.ColWidth(11) = 1200 'cantidad por presentación
'fg2.ColWidth(10) = 1200 'descripción de presentación

'fg2.ColWidth(12) = 1200 'Costo de producto
'fg2.ColWidth(13) = 1200 'Columna especial para viaje
'fg2.ColWidth(14) = 1200 'Columna de Impuesto especial
'fg2.ColWidth(15) = 1200 'Columna Precio Unitario, con impuesto

'fg2.ColWidth(16) = 1200 'Columna Importe total, con impuesto
'fg2.ColWidth(17) = 1200 'Columna Donativo
'fg2.ColWidth(18) = 1200 'columna para Incluir en el próximo CorteZ

End Sub
'

sábado, 30 de agosto de 2014

Funciones para impresión de Ticket

Existen varias formas imprimir un ticket de venta tanto en pantalla como en la miniptinter.
El formato de ticket se encuentra en la ruta del business manager: configuración--personalizacion--formatos del sistema--TICKET. Abrir el código con doble clic e ir al final de este hasta identificar esta línea que se refiere a la impresión; ahí es posible aplicar diferentes opciones de impresión:

Script.sendToPrinter Ambiente, (cSalida), prn.Pantalla



Si queremos imprimir en USB, colocar:

'Código para impresora conectada por cable USB
'o para la impresora predeterminada de Windows).
IniciaDocumento
' EstableceImpresora "Mi Impresora laser" 'esta linea permite elegir impresora USB destino
EstableceFuente "Courier New", 8 'Fuente que tendra el ticket USB
Say 0,.2, cSalida 'Alineación del texto, en pulgadas. cSalida es el texto a imprimir
FinDocumento 'Termina la Impresión USB
'Exit Sub
'Exit Sub es por si deseamos que termine el proceso y saltar las lineas de código que le preceden
'


Si deseamos imprimir en impresora conectada por cable LPT:

'Función para impresora conectada por cable LPT
'Impresión de ticket, corteX y CorteZ _
Enviamos a la impresorade tickets que está configurada en ESTACION01
Script.sendToPrinter Ambiente, (cSalida), prn.Pantalla 'cSalida es el texto que se imprimirá
'


Si deseamos ver el texto del ticket en una ventana emergente:

MsgBox ("" & cSalida) 'cSalida es el texto que se visualizará
'


Una segunda opción para visualizar el el texto del ticket en una ventana emergente.

Mymessage "" & cSalida 'cSalida es el texto que se visualizará
'

[youtube SzTYpXT_Gdg]

domingo, 24 de agosto de 2014

Cómo importar una ventana o formulario (.bfr) a MyBusiness POS

Los archivos .BFR se actualizan de la siguiente manera:

1. Entramos a MyBusiness POS con una clave de “Supervisor”

2. Nos dirigimos a la barra de tareas_ Programación _Ambiente de desarrollo y damos un clic en ese icono

3. Vamos al menú Archivo, seleccionamos Abrir

4. Seleccionamos el archivo con extensión BFR y aceptamos la actualización

5. Con este proceso ya tenemos actualizado el formulario, solo damos un clic en el icono “guardar” y lo ejecutamos en MyBusiness POS en la operación normal del sistema. Para algunos formatos podemos ejecutar la prueba desde el mismo editor, solo damos clic en el ultimo icono que tiene forma de triángulo (Run)

[youtube uqUpAvcUYfI]

martes, 12 de agosto de 2014

Ejemplo de DBMultiCombo.MultiCombo

Cuando  echamos un vistazo al código de algunas formas, vemos que aparece en varios casos esto "DBMultiCombo.MultiCombo" .  Se trata de una clase que hace una consulta a la tabla llamada "QUERY". Ahí podemos encontrar muchas consultas predefinidas; y si no existe, la podemos crear a nuestra medida o simplemente ampliar la búsqueda a otros campos que por default no considera el sistema.

[wpdm_package id='15039']

A continuación se muestra la lista de consultas que trae el sistema, tal vez alguna te interesa:

  • Fabricantes

  • Modelos

  • CostosAdicionales

  • Comisionistas

  • Colonia

  • Repartidores

  • Tutor

  • Familias

  • Ofertas

  • Tallas

  • Colores

  • Reportes

  • Etapas

  • Lotes

  • Clasificación de inventario

  • Estados

  • Contactos por cliente

  • Clientes por descripcion

  • Articulos por descripción

  • Remisiones para devolución

  • Estaciones

  • Ubicación en almacen

  • Marcas por clave

  • Zonas de clientes

  • Ventas sin cancelar

  • Ventas pendientes

  • Ventas

  • Vendedores

  • Usuarios

  • Tipos de teléfono

  • Tipos de proveedores

  • Tipos de Polizas

  • Tipos de póliza

  • Tipos de pendientes

  • Tipos de clientes

  • Sucursales

  • Series disponibles

  • Remisiones

  • Proveedores por clave

  • Proveedores

  • Procedimientos y rutinas de usuario

  • Pendientes

  • Partidas de venta

  • Partidas de compra

  • Monedas

  • Marcas de Artículos

  • Líneas de Artículos

  • Inventarios físicos

  • Inventarios

  • Impuestos por porcentaje

  • Impuestos

  • Grupos de cuentas

  • Formatos

  • Facturas

  • Devoluciones

  • Contactos

  • Conceptos de salidas de inventario

  • Conceptos de ingreso

  • Conceptos de gastos

  • Conceptos de entrada al inventario

  • Conceptos de egresos

  • Conceptos de cuentas por pagar

  • Conceptos de cobranza

  • Conceptos de Cargos

  • Conceptos de abonos a proveedores

  • Conceptos de Abonos

  • Compras confirmadas

  • Código de formatos

  • Cobradores

  • Clientes por clave

  • Clientes

  • Claves adicionales de articulos

  • Centros de costo

  • Artículos por clave

  • Articulos para venta

  • Articulos

  • Almacenes

  • Direcciones de embarque

  • Subfamilia1

  • Subfamilia2

  • Subfamilia3

  • ClientesNC

  • Tickets

  • SeriesTickets

  • UsuariosGB


Si tienes alguna duda al respecto, puedes escribir tu comentario y podemos aclararla

Cómo hacer una consulta a la tabla de clientes

En esta ocasión mostramos un ejemplo de una ventana que consulta a la tabla de clientes y permite hacer el filtro por nombre.
[wpdm_package id='15038']
Este es el código fuente

 

Sub Form_load()

'José Félix 20140812

'jofelchez@gmail.com

'Ejemplo de cómo hacer una consulta a la tabla de clientes

TxtCliente.TabIndex = 0

aceptar.Default = True

'TxtCliente.PasswordChar = "*"

'TxtCliente.BackColor = 0

'TxtCliente.ForeColor = vbGreen

'TxtCliente.font.size = 14

Me.Caption = "Ejemplo de consulta a cliente"

Set mc1 = Me.Controls.Add("DBMultiCombo.MultiCombo","mc1", Me)

With mc1

.Left = TxtCliente.Left

.Top = TxtCliente.Top

.Width = TxtCliente.Width + 450

.Height = TxtCliente.Height

Set .Connection = Ambiente.Connection

Set .txtObject = TxtCliente

.Buscar = "Clientes"

.Visible = True

Set TxtCliente.Container = mc1

End With

End Sub

Sub Button_Click()

Dim cUsuario

Dim cPassword

Dim nPos

Dim s

If ControlEvento.Tag = "cancelar" Then

bolAceptar = False

DescargaForma

Exit Sub

End If

'consulta a la base de datos

Set rstCliente = CreaRecordSet( _

"SELECT * FROM clients WHERE cliente = '" & TxtCliente & "'", _

Ambiente.Connection )

'En caso de que no se encuentre el usuario envía mensaje de error

If rstCliente.EOF Then

'Progress.Destroy

MyMessage "Error:" & vbCrLf & "No existe el cliente indicado"

EstableceFoco

Exit Sub

End If

mymessage " Cliente: " & rstCliente("cliente") & vbCrLf & " Nombre: " & rstCliente("nombre")

End Sub

Sub EstableceFoco()

TxtCliente.Setfocus

TxtCliente.SelStart = 0

TxtCliente.SelLength = Len( TxtCliente )

End Sub

Sub Text_KeyUp()

'Este bloque permite responder a una tecla

'En caso de

If KeyCode = 40 Then

Select Case ControlEvento.Tag


Case "TxtCliente"

TxtCliente.Container.ShowData

End Select

End If

'en caso de

If KeyCode = 27 Then

DescargaForma

'Exit Sub

End If


End Sub

viernes, 23 de mayo de 2014

BARTICULOS001

https://www.facebook.com/helpmybusinesspos/videos/1656512364448632/
El siguiente bloque de código BARTICULOS001 es el que permite visualizar desde el punto de venta, la ventana de artículos donde se muestra la clave, descripción y precio unitario. Describiremos un poco cada línea de código.

Para abrir y modificar este bloque de código, necesitamo ir a la siguiente ruta, dentro del Business Manager:
CONFIGURACIÓN--PERSONALIZACIÓN--PROCEDIMIENTOS Y RUTINAS DE USUARIO


Public Sub Main()
Dim strSQL 'Definición de variables
Set rstProds = SQLProdsSQLServer() ' invocamos al procedimiento SQLProdsSQLServer y asignamos el resultado a rstProds
SetSessionValue Ambiente, "CONDICIONDEBUSQUEDA", ""
End Sub

'Funcion SQLProdsSQLServer
Function SQLProdsSQLServer()
Dim s
'evaluamos la variable Var1
If clEmpty( Ambiente.Var1 ) Then
Ambiente.Var1 = " prods.descrip "
End If
'Iniciamos con la consulta, aquí mismo definimos también el nombre de los encabezados de cada columna.
s = ""
s = s & "SELECT "
s = s & "prods.articulo As 'Clave', "
s = s & "prods.descrip AS 'UNIDAD DE CONSUMO', "
s = s & "prods.precio1 * ( 1 + (impuestos.valor / 100) ) As 'Precio', "
s = s & "prods.existencia, "
s = s & "existenciaalmacen.existencia As 'Almacen " & Ambiente.Almacen & "', "
s = s & "prods.articulo "
s = s & "FROM prods "
s = s & "INNER JOIN impuestos ON prods.impuesto = impuestos.impuesto "
s = s & "LEFT JOIN existenciaalmacen ON prods.articulo = existenciaalmacen.articulo AND existenciaalmacen.almacen = " & Ambiente.Almacen
s = s & "WHERE prods.bloqueado = 0 "
s = s & cNull(GetSessionValue(Ambiente, "CONDICIONDEBUSQUEDA"))
'Evaluamos filtros adicionales. aquí es donde considera la condición que aplicamos antes de presionar la flecha hacia abajo
If Not clEmpty(cFiltro) Then
If Not clEmpty(Condition) Then
s = s & " AND (prods.descrip LIKE '%" & Cambia("%", " ", cFiltro) & "%' OR prods.articulo LIKE '%" & Cambia("%", " ", cFiltro) & "%') AND " & Condition & " ORDER BY " & Ambiente.Var1
Else
s = s & " AND (prods.descrip LIKE '%" & Cambia("%", " ", cFiltro) & "%' OR prods.articulo LIKE '%" & Cambia("%", " ", cFiltro) & "%') ORDER BY " & Ambiente.Var1
End If
Else
If Not clEmpty(Condition) Then
s = s & " ORDER BY " & Ambiente.Var1
Else
s = s & " ORDER BY " & Ambiente.Var1
End If
End If
'Ejecutamos la consulta antes estructurada y se guarda el resultado en rstProds
Set rstProds = CreaRecordSetEnCliente( (s), Ambiente.Connection)
Set SQLProdsSQLServer = rstProds 'guardamos el arreglo de datos en la variable SQLProdsSQLServer
'Especificamos el ancho de las columnas, iniciando desde la columna 0 y considerando el orden en que estructura la consulta
Set TDBGrid1.DataSource = rstProds
AnchoColumna 0, 2000
AnchoColumna 1, 6500
AnchoColumna 2, 2000
AnchoColumna 3, 1000
AnchoColumna 4, 1000
AnchoColumna 5, 2500
'Para las columnas de tipo numérico podemos colocar el formato numérico y con la cantidad de decimales apropiada
FormatoColumna 2, 1, "##,##0.00"
FormatoColumna 3, 1, Ambiente.FDinero
FormatoColumna 4, 1, Ambiente.FDinero
'Termina la función
End Function



domingo, 9 de febrero de 2014

Cómo poner imagen en ticket de MyBusiness POS

[wpdm_package id='15747']
[youtube UPYM_iRZbmg]
Para todos los usuarios de MyBusiness POS que no quieren que les aparezca el logo de la empresa en el ticket (en primera, ocupa más papel; en segundo lugar, si la impresora es de matriz de puntos, también se gasta la cinta de esta y la calidad no es nada agradable). los pasos son los siguientes:

1.  Una vez abierto del sistema como Administrador, en la parte del Business Manager tenemos que encontrar la siguiente ruta:

2.  Personalización + Procedimientos del Usuario

3.  Dentro de esta carpeta buscamos el procedimiento que se llama "FORMATOTEXTO". lo abrimos para editarlo

4. En alguna parte de este pequeño archivo nos menciona algo parecido a esto:


Picture Ambiente.path & "\Images\logo.jpg".......


lo que vamos a hacer es dejar esta linea como comentario (ponemos una apóstrofo al principio de la línea) para que no aparezca la imagen y quedaría así


'Picture Ambiente.path & "\Images\logo.jpg"


5. Hacemos una prueba. Ya no aparecerá la imagen; sin embargo, aún se desperdicia la misma cantidad de papel.

6. Para reducir la cantidad de papel, el espacio que ocupaba la imagen, vamos a poner también como comentario las líneas que están dentro de la estructura "For" (nuevamente, colocando un apóstrofo en al principio de cada línea).

También es posible cambiar el Tamaño y la Fuente de los tickets (Propiedades p.Font.Name y p.Font.Size), quedando así.


p.Font.Name = "Arial" 'La recomendable es Courier New
p.Font.Size = 8

 

Guardamos los cambios y listo...Problema solucionado.

viernes, 4 de octubre de 2013

Cambiar la estructura de las búsquedas

Busquedas_mybusinessposEn el sistema se puede optimizar la forma en que se consulta la base de datos, en esta ocasión me refiero a todos aquellos campos a los que le presionan [flecha hacia abajo]. En la base de datos hay una tabla llamada QUERY la cual almacena los regustros de todas las consultas posibles de estas búsquedas. Lo que debemos conocer es cuál es el parámetro de búsqueda y el campo que deseamos como resultado, el cual en muchas ocasiones es el id de un registro.

Más adelante explicaré cómo podemos utilizar esta información para hacer nuestras propias consultas y ventanas desde cero en MyBusiness Pos

Cómo modificar la malla de artículos

En MyBusinessPOS en todas sus versiones es posible personalizar la ventana del buscador para que se adapte a nuestras necesidades. Para lograr este cambio es necesario tener conocimientos básicos de programación y base de datos.
Los cambios básicos que se pueden aplicar pueden ser: cambiar el orden de las columnas, el ancho y ocultar datos innecesarios para colocar los que realmente nos importan.

jueves, 19 de septiembre de 2013

Dónde guarda el código MyBusiness POS?

Tal vez te has preguntado cómo es que almacena las modificaciones el sistema MyBusiness POS. Los scripts se almacenan e dos tablas:

  • FormasDeltaEsta tabla almacena todos los códigos que utiliza el sistema para la mayoría de las ventanas que utilizamos y podemos modificar con el editor gráfico

  • FormatosDeltaEsta tabla almacena los procedimientos, formatos de impresión y formatos de reportes que tiene el sistema


Cabe destacar que no todo el código es visible por el usuario; aproximadamente un 30% es código duro que no de puede editar. Sin embargo, el código visible es suficiente para crear nuevos desarrollos a la medida.

Espero que esta informaicón sea de utilidad para futuros desarrolladores de módulos.   

viernes, 12 de julio de 2013

Antes de aceptar un código lo dividimos en partes

Código que se ejecuta al presionar la Tecla F2 en el punto de Venta

Sub Main()

If LCase(Articulo) = "_ini" Then
Script.RunProcess "GREENBOXINI", Me, Ambiente
CancelaProceso = True
Exit Sub
End If

If LCase(Articulo) = "_setup" Then
Script.RunProcess "GREENBOXALTA", Me, Ambiente
CancelaProceso = True
Exit Sub
End If

If LCase(Articulo) = "_tellerscatalog" Then
Script.RunProcess "GREENBOXCAJEROS", Me, Ambiente
CancelaProceso = True
Exit Sub
End If

If LCase(Articulo) = "_ta" Then
Script.RunProcess "GREENBOXTIEMPOAIRE", Me, Ambiente
CancelaProceso = True
Exit Sub
End If

If LCase(Articulo) = "_tv" Then
Script.RunProcess "GREENBOXVERIFICAR", Me, Ambiente
CancelaProceso = True
Exit Sub
End If

If Articulo = "CONSULTA EXISTENCIA" Then
Script.RunForm "CC05", Me, Ambiente,, True
CancelaProceso = True
Exit Sub
End If

'Set rstArt = CreaRecordSet( "SELECT peso FROM prods WHERE articulo = '" & Articulo & "'", Ambiente.Connection )

'If Not rstArt.EOF Then
' Me.Descuento = rstArt("peso")
'End If

'Call incrementaProducto()

' Articulo es una variable que entrega el dato que se capturo en
' el punto de venta
If Trim( Ucase(Articulo) ) = "ADMISION" Then

If Me.Venta = 0 Then
MyMessage "Es necesario capturar al menos de un producto"
CancelaProceso = True
Exit Sub
End If

Script.RunForm "MIFORMA", Me, Ambiente, , True
'PlaySound Ambiente.Path & "\sounds\s03.wav"
CancelaProceso = True
End If

Me.usuarioRequerido = 0

If clAt( "VPZ", Articulo ) = 1 Then
Call recuperaVenta()
CancelaProceso = True
End If

If Ucase(Trim(Articulo)) = "EXR" Then
CancelaProceso = True
Script.RunForm "EXISTENCIAREMOTA", Me, Ambiente,, True
End If

Version2005

'Call calculaPrecioDecaja()

End Sub

Sub calculaPrecioDeCaja()
Dim rstClaveAdd
Dim rstArticulo

Set rstClaveAdd = CreaRecordSet( "SELECT articulo, cantidad FROM clavesadd WHERE clave = '" & Me.Articulo & "'", Ambiente.Connection )

If rstClaveAdd.EOF Then
Exit Sub
End If

If rstClaveAdd("cantidad") = 1 Then
Exit Sub
End If

Set rstArticulo = CreaRecordSet( "SELECT precio3 FROM prods WHERE articulo = '" & Trim(rstClaveAdd("articulo")) & "'", Ambiente.Connection )

If Not rstArticulo.EOF Then
Me.PrecioEspecial = rstArticulo("precio3")
End If

End Sub

Sub recuperaVenta()
Dim rstVenta, nVenta

nVenta = Val2( Mid( Articulo, 4 ) )

Set rstVenta = CreaRecordSet( _
"SELECT * FROM ventas WHERE venta = " & nVenta, _
Ambiente.Connection )

If rstVenta.EOF Then
' El campo 3 despliega los mensajes en el punto de venta
txtFields(3) = "Venta no encontrada"
Exit Sub
End If

If rstVenta("estado") <> "PE" Then
txtFields(3) = "Venta no valida"
Exit Sub
End If

Set Me.rstVenta = rstVenta
Set Me.rstPartidas = CreaRecordSet( _
"SELECT * FROM partvta WHERE venta = " & nVenta, _
Ambiente.Connection )
Me.Venta = nVenta
Me.Modo = "MODIFICACION"
Me.Reload = True
Me.ReiniciaVenta
Eventos
Me.CalculaImportes
End Sub

Sub Version2005
Dim rstEmpleado
Dim cEmpleado
Dim Query
Dim nPos
Dim cCodigo
Dim cPeso
Dim rstAsistencia
Dim Contenido

' Articulo es una variable que entrega el punto de venta
' Esto proceso todos los comandos del punto de venta
Call ValidaComando

'validaNumeroDePartidas

If UCase(Trim(Articulo)) = "CENEFASXMARCA" Then
Script.RunForm "CENEFASXMARCA", Me, Ambiente,, True
CancelaProceso = True
End If

If UCase(Trim(Articulo)) = "CENEFAS" Then
Script.RunForm "CENEFAS", Me, Ambiente,, True
CancelaProceso = True
End If

If Ucase(Trim(Articulo)) = "BORDADO" Then
Script.RunForm "BORDADO", Me, Ambiente,, True
End If

If Ucase(Trim(Articulo)) = "LONAS" Then
Script.RunForm "LONAS", Me, Ambiente,, True
End If

If Ucase(Trim(Articulo)) = "ESTAMPADO01" Then
Script.RunForm "ESTAMPADO", Me, Ambiente,, True
End If

If Ucase(Trim(Articulo)) = "ESTAMPADO02" Then
Script.RunForm "ESTAMPADO02", Me, Ambiente,, True
End If

If Ucase(Trim(Articulo)) = "ESTAMPADO03" Then
Script.RunForm "ESTAMPADO03", Me, Ambiente,, True
End If

'SumaCantidades
' Articulo es una variable publica que contiene el dato que leyo el lector
' o que tecleo el usuario hasta el momento de presionar un enter
nPos = clAt( "*", Articulo )

' cantidadDeArticulos es una variable publica que indica la cantidad
' de productos que va a aceptar el punto de venta
If nPos > 0 Then
cantidadDeArticulos = Val2( Mid( Articulo, 1, nPos - 1 ) )
Articulo = Mid( Articulo, nPos + 1 )
End If

' Para articulos con peso
If clAt( "ARTICULOPARAPESO", Articulo ) = 1 Then
cCodigo = Mid( Articulo, 3, 5 )
cPeso = Mid( Articulo, 8 )
Articulo = cCodigo
CantidadDeArticulos = (Val2(cPeso) / 10000)
End if

nPos = clAt( "CLI", Articulo )

' La varable cancelaProceso termina el flujo de programa interno de MyBusiness
' Parecido a Exit Sub
If nPos = 1 Then
txtFields(0) = Mid( Articulo, 4 )
txtFields(4) = ""
CancelaProceso = True
ChecaSaldo txtFields(0)
ColocaFoto txtFields(0)
End If

If clAt( "EMP", Articulo ) = 1 Then
cEmpleado = UCase(Mid( Articulo, 4 ))
Set rstEmpleado = CreaRecordSet( "SELECT * FROM empleados WHERE empleado = '" & cEmpleado & "'", Ambiente.Connection )

If rstEmpleado.EOF Then
txtFields(3) = "Empleado no existe"
cancelaProceso = True
txtFields(4) = ""
PlaySound Ambiente.Path & "\sounds\error.wav"
Exit Sub
End If

'Set rstEmpFecha = CreaRecordSet( "SELECT * FROM asistencia WHERE empleado = '" & cEmpleado & "' AND fecha = " & fechaSQL( Date, Ambiente.Connection ), Ambiente.Connection )

'If Not rstEmpFecha.EOF Then
' txtFields(3) = "Usted ya fue registrado"
' cancelaProceso = True
' txtFields(4) = ""
' PlaySound Ambiente.Path & "\sounds\error.wav"
' Exit Sub
'End If

'PlaySound Ambiente.Path & "\sounds\ready.wav"

Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection

Query.strState = "INSERT"

Query.AddField "asistencia", "id", TraeSiguiente( "asistencia", Ambiente.Connection )
Query.AddField "asistencia", "fechahora", Formato( Date, "dd-MM-yyyy" ) & ":" & Formato( Time, "hh:mm:ss" )
Query.AddField "asistencia", "retardo", Retardo( rstEmpleado("horaentrada") )
Query.AddField "asistencia", "empleado", cEmpleado
Query.AddField "asistencia", "fecha", Date
Query.CreateQuery
Query.Execute

txtFields(3) = rstEmpleado("nombre") & " " & Formato( Date, "dd-MM-yyyy" ) & ":" & Formato( Time, "hh:mm:ss" )
CancelaProceso = True
txtFields(4) = ""

If Not clEmpty( rstEmpleado("imagen") ) Then
CreaHTML "", ""
End If

End If

If Ucase(Trim(Articulo)) = "ARTICULOS PROMOCIONALES" Then
Script.RunProcess "GALAXIA", Me.Parent, Ambiente
CancelaProceso = True
txtFields(4) = ""
End If

If Mid(UCase(Trim(Articulo)),1,6) = "MONEDA" Then
cambiaMonedaDeLaVenta Trim(Mid( Articulo, 7 ))
cancelaProceso = True
End If
'Call ValidaExistencia()
End Sub

Sub ValidaExistencia()
Dim rstProd
Set rstProd = CreaRecordSet( "SELECT alm" & Ambiente.Almacen & " FROM prods WHERE articulo = '" & articulo & "'", _
Ambiente.Connection )

If Not rstProd.EOF Then
If rstProd(0) <= 0 Then
Me.OperacionBloqueada = True
txtFields(3) = "Existencia insuficiente, operación bloqueada"
CancelaProceso = True
PlaySound Ambiente.Path & "\sounds\Existencia.wav"
End If
End If

End Sub

Sub cambiaMonedaDeLaVenta( cMoneda )
Dim rstVenta, rstMoneda, Query, rstMonedaOriginal

Set rstVenta = CreaRecordSet( _
"SELECT * FROM ventas WHERE venta = " & Me.Venta, Ambiente.Connection )

Set rstMoneda = CreaRecordSet( _
"SELECT * FROM monedas WHERE moneda = '" & cMoneda & "'", Ambiente.Connection )

If Not rstMoneda.EOF Then
Me.Moneda = cMoneda
Me.tipoDeCambio = rstMoneda("tc")
Else
Exit Sub
End If

If rstVenta.EOF Then
Exit Sub
End If

If Ucase(Trim(rstVenta("moneda"))) = UCase(Trim(cMoneda)) Then
Exit Sub
End If

Ambiente.Connection.Execute _
"UPDATE partvta SET precio = precio * " & FormatoDecimal( rstVenta("tipo_cam") ) & ", " & _
"preciobase = preciobase * " & FormatoDecimal( rstVenta("tipo_cam") ) & ", " & _
"donativo = donativo * " & FormatoDecimal( rstVenta("tipo_cam") ) & " " & _
"WHERE venta = " & Me.Venta

Ambiente.Connection.Execute _
"UPDATE partvta SET precio = precio / " & FormatoDecimal( Me.tipoDeCambio ) & ", " & _
"preciobase = preciobase / " & FormatoDecimal( Me.tipoDeCambio ) & ", " & _
"donativo = donativo / " & FormatoDecimal( Me.tipoDeCambio ) & " " & _
"WHERE venta = " & Me.Venta

Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection

Query.Reset
Query.strState = "UPDATE"
Query.Condition = "venta = " & Me.Venta
Query.AddField "ventas", "moneda", Me.Moneda
Query.AddField "ventas", "tipo_cam", Me.tipoDeCambio
Query.CreateQuery
Query.Execute

Parent.ReLoad = True
ReiniciaVenta
CalculaImportes

End Sub

Sub ChecaSaldo( Cliente )
Dim rstSaldo, rstCobranza, Html

Set rstSaldo = CreaRecordSet( "SELECT * FROM clients WHERE cliente = '" & Cliente & "'", _
Ambiente.Connection )

If rstSaldo.EOF Then
Exit Sub
End If

CreaHTML "",""

If rstSaldo("Saldo") <= 0 Then
Exit Sub
End If

PlaySound "c:\saldo.wav"

Set rstCobranza = CreaRecordSet( _
"SELECT * FROM cobranza WHERE cliente = '" & cliente & "' AND saldo > 0", _
Ambiente.Connection )

html = ""

While Not rstCobranza.EOF
html = html & "

"
html = html & "Documento " & rstCobranza("tipo_doc") & _
rstCobranza("no_referen") & " " & rstCobranza("Saldo")
html = html & "

"
rstCobranza.MoveNext
Wend

CreaHTML "",(Html)

End Sub

Function Retardo( strHora )
Dim intMinutos
Dim intMinutosActual
Dim nPos
Dim strHoraActual
Dim tolerancia

tolerancia = 10

nPos = clAt( ":", strHora )
intMinutos = Val2( Mid( strHora, 1, nPos - 1) ) * 60
intMinutos = intMinutos + Val2( Mid( strHora, nPos + 1 ) )

strHoraActual = Formato( Time(), "hh:mm" )
nPos = clAt( ":", strHoraActual )
intMinutosActual = Val2( Mid( strHoraActual, 1, nPos - 1) ) * 60
intMinutosActual = intMinutosActual + Val2( Mid( strHoraActual, nPos + 1 ) )

If intMinutosActual > (intMinutos + tolerancia) Then
Retardo = intMinutosActual - intMinutos
Else
Retardo = 0
End If

End Function

Sub ColocaFoto( cCliente )
Dim cHtml

cHtml = ""
CreaHTML "", (cHtml)

End Sub

Sub SumaCantidades()

' Buscamos si el artículo ya esta en el GRID
For n = 1 to fg2.Rows - 1
If clEmpty( fg2.TextMatrix( n, 0 ) ) Then
Exit For
End If

Set rstArtAux = Rst("SELECT tiempoaire FROM prods WHERE articulo = '" & Trim(Articulo) & "'", Ambiente.Connection)

If Trim(fg2.TextMatrix( n, 0 )) = Trim(Articulo) AND Val2(rstArtAux("tiempoaire")) <> 0 Then
Ambiente.Connection.Execute "UPDATE partvta SET cantidad = cantidad + 1 WHERE id_salida = " & fg2.TextMatrix( n, 7 )
fg2.TextMatrix( n, 1 ) = Val2( fg2.TextMatrix( n, 1 ) ) + 1
txtFields(4) = ""
CancelaProceso = True
Exit Sub
End If
Next

End Sub

Sub validaNumeroDePartidas
Dim rstPartidas

Set rstPartidas = CreaRecordSet( _
"SELECT COUNT( * ) FROM partvta WHERE venta = " & Me.Venta, _
Ambiente.Connection )

If Val2( rstPartidas(0) ) >= 4 Then
MyMessage "No es posible capturar mas de 4 partidas"
CancelaProceso = True
End If

End Sub

Sub ValidaComando()

If clAt( "/", Articulo ) > 0 And clAt( "//", Articulo ) = 0 Then
Call cantidaporPrecio()
Exit Sub
End If

If Trim(UCase(Articulo)) = "COMPRAS" Then
Set Compras = CreateObject( "MyBCompras.Compras" )
Set Compras.Ambiente = Ambiente
Compras.NuevaCompra True
End If

If Len( Trim( Articulo ) ) <> 4 Then
Exit Sub
End If

If clAt( "Z", UCase(Articulo) ) <> 1 Then
Exit Sub
End If

Select Case UCase(Articulo)
Case "Z001"
Script.RunForm "ALTACLIENTE", Me, Ambiente,, True
Case "Z002"
Me.OperacionBloqueada = False
txtFields(3) = "Operación Reactivada"
Case "Z003"
Me.FinalizaOperacion
Case "Z004"
Script.RunForm "ALTARAPIDA", Me, Ambiente,, True
Case "Z005"

If Question(Mensaje(642, Ambiente)) Then
Me.BorraVenta = True
Me.FinalizaOperacion
End If

Case "Z006"

Me.RecuperaVentaDeCliente

Case "Z007"

If txtFields(0).Enabled Then
txtFields(0).SetFocus
End If

Case "Z008"

AplicaDescuento

Case "Z009"

Script.RunProcess "CORTEX", Me, Ambiente

Case "Z010"

Script.RunProcess "CORTEZ", Me, Ambiente

Case "Z011"

Script.RunForm "PAGOEFECTIVO", Me, Ambiente,, True

Case "Z012"

Script.RunForm "COBROENEFECTIVO", Me, Ambiente,, True

Case "Z013"

Set rstUsuventas = CreaRecordSet( "SELECT * FROM usuventas WHERE usuario = '" & Ambiente.Uid & "'", Ambiente.Connection )

If rstUsuventas.EOF Then
Script.RunForm "DEVOLUCIONES", Me, Ambiente, True
'Exit Sub
End If

If Val2( rstUsuventas("devpunto") ) <> 0 Then
Script.RunForm "DEVOLUCIONES", Me, Ambiente, True
'Exit Sub
Else
MyMessage "No tiene derecho a hacer devoluciones, solicite el permiso con su supervisor"
'Exit Sub
End If

Case "Z014"

Script.RunForm "TICKETAFACTURA", Me, Ambiente,, True

'Case "Z016"
'
' Me.ActivaCobranza

Case "Z015"

Script.RunProcess "PUNTOV063", Me, Me.Ambiente

Case "Z016"

Script.RunForm "RETICKET", Me, Ambiente,, True

'Case "Z019"
'
' MyMessage "CONTROL + F12 Editar datos cliente" & vbCrLf & "CONTROL + F7 Editar guión" & vbCrLf & "SHIFT + F3 Colocar cursor en campo repartidor" & vbCrLf & "SHIFT + F4 Alta de repartidor"

Case "Z017"

Script.RunForm "FCAJA", Me, Ambiente,, True

Case "Z018"

Script.RunForm "CAMBIOUSUARIO", Me, Ambiente,, True

'Case "Z022"
'
' Script.RunProcess "VENTASCOLECTOR", Me, Me.Ambiente

Case "Z019"

Calculadora Ambiente

Case "Z020"

Script.RunProcess "ABRECAJON", Me, Me.Ambiente

Case "Z021"

Script.RunForm "AUXCLIENTS", Parent, Ambiente,, True

Case "Z022"

Script.RunProcess "ELIMINAVENTA", Me, Me.Ambiente

Case "Z023"

Script.RunForm "VENTASOBSERV", Me, Ambiente,, True

Case "Z024"

Script.RunForm "VENTASDESC", Me, Ambiente,, True

Case "Z025"

Script.RunForm "CAMBIOVALEEFECTIVO", Me, Me.Ambiente,, True

Case "Z026"

Script.Runform "FACTURADECIERRE", Me, Ambiente,, False

Case "Z027"

Script.RunHuellaForm "REGISTROACCESO", Me, Ambiente,, True

'Case "Z028"

'Script.Runform "LISTADEPEDIDOS", Me, Ambiente,, True

End Select

CancelaProceso = True
txtFields(4) = ""

End Sub

Sub llenaPuntoDeVenta
Dim cLinea, dondeEstaLaComa, articulo

' CloseFile cierra un manejador de archivo
CloseFile 1
' OpenFile Abre un archivo de texto para lectura
OpenFile "c:\articulos.txt", 1

' FileEOF regresa true en caso de que el archivo
' de texto llegue a su final
While Not FileEOF( 1 )
' ReadLine lee una cadena de texto
' hasta que encuentra un retorno de carro
cLinea = ReadLine( 1 )
dondeEstaLaComa = clAt( ",", (cLinea) )
articulo = Mid(cLinea, 1, dondeEstaLaComa -1 )

' cantidadDeArticulos es una variable que
' entrega el punto de venta e indica la
' cantidad de productos que se va a ingresar
' en el punto de venta
cantidadDeArticulos = _
Mid( cLinea, dondeEstaLaComa + 1 )

' llenaPartidad Es un metodo que ingresa
' producto en el punto de venta
llenaPartida (articulo)
Wend

CloseFile 1

End Sub

Sub calculaPeso()
Dim rstArticulo, cArticulo, nPesos

nPos = clAt( "--", Articulo )
cArticulo = Mid( Articulo, nPos + 2 )
nPesos = Val2(Mid( Articulo, 1, nPos - 1 ))

Set rstArticulo = CreaRecordSet( _
"SELECT * FROM prods WHERE articulo = '" & cArticulo & "'", _
Ambiente.Connection )

If Not rstArticulo.EOF Then
Articulo = cArticulo
cantidadDeArticulos = nPesos / rstArticulo("precio1")
End If

End Sub

Function Permisos( permisoSolicitado )

Set rstUsuario = CreaRecordSet( _
"SELECT * FROM usuarios WHERE usuario = '" & Ambiente.uid & "'", Ambiente.connection )

If rstUsuario("supervisor") Then
cmdZ001.Caption = "Z001 Cambia o da de alta un cliente"
cmdZ002.Caption = "Z002 Quita bloqueo por error código de producto"
cmdZ003.Caption = "Z003 Confirma la venta o muestra ventana de cobro"
cmdZ004.Caption = "Z004 Da de alta o modifica un artículo"
cmdZ005.Caption = "Z005 Deja como pendiente la venta actual"
cmdZ006.Caption = "Z006 Muestra lista de ventas pendientes"
cmdZ007.Caption = "Z007 Posicionar el cursor en el campo de cliente"
cmdZ008.Caption = "Z008 Pantalla de descuentos"
cmdZ009.Caption = "Z009 Corte parcial X"
cmdZ010.Caption = "Z010 Corte total Z"
cmdZ011.Caption = "Z011 Permite capturar un ingreso de dinero a caja"
cmdZ012.Caption = "Z012 Permite capturar una salida de dinero a caja"
cmdZ013.Caption = "Z013 Realiza una devolución de mercancia en caja"
cmdZ014.Caption = "Z014 Convierte un ticket en factura"
cmdZ015.Caption = "Z015 Realiza el pago de la devolucion"
cmdZ016.Caption = "Z016 Cobranza a clientes"
cmdZ017.Caption = "Z017 Muestra información del próducto"
cmdZ018.Caption = "Z018 Re imprimir ticket"
cmdZ019.Caption = "Z019 Functiones ventas por teléfono (Informativo)"
cmdZ020.Caption = "Z020 Arqueo de efectivo"
cmdZ021.Caption = "Z021 Cambio de usuario"
cmdZ022.Caption = "Z022 Recupera ventas del colector"
cmdZ023.Caption = "Z023 Muestra la calculadora"
cmdZ024.Caption = "Z024 Abre el cajón de dinero"
cmdZ025.Caption = "Z025 Datos auxiliares del cliente"
cmdZ026.Caption = "Z026 Elimina la ultima venta"
cmdZ027.Caption = "Z027 Observaciones a la venta"
cmdZ028.Caption = "Z028 Descuento por importe"
Else
cmdZ001.Caption = "Z001 Cambia o da de alta un cliente"
cmdZ002.Caption = "Z002 Quita bloqueo por error código de producto"
cmdZ003.Caption = "Z003 Confirma la venta o muestra ventana de cobro"
cmdZ004.Caption = "Z005 Deja como pendiente la venta actual"
cmdZ005.Caption = "Z006 Muestra lista de ventas pendientes"
cmdZ006.Caption = "Z007 Posicionar el cursor en el campo de cliente"
cmdZ007.Caption = "Z011 Permite capturar un ingreso de dinero a caja"
cmdZ008.Caption = "Z012 Permite capturar una salida de dinero a caja"
cmdZ009.Caption = "Z015 Realiza el pago de la devolucion"
cmdZ010.Caption = "Z020 Arqueo de efectivo"
cmdZ011.Caption = "Z021 Cambio de usuario"
cmdZ012.Caption = "Z024 Abre el cajón de dinero"
cmdZ013.Caption = "Z025 Muestra la calculadora"
cmdZ014.Caption = "Z026 Elimina la ultima venta"
cmdZ015.Caption = "Z027 Observaciones a la venta"
cmdZ016.Caption = "Z028 Descuento por importe"
End If
End Function

Sub cantidaporPrecio()
Dim nPos, cCantidad, cArticulo, rstProd
Dim nPrecio

nPos = clAt( "/", Articulo )
cCantidad = Mid( Articulo,1, nPos - 1 )
cArticulo = Trim( Mid( Articulo, nPos + 1 ) )

Set rstProd = CreaRecordSet( "SELECT * FROM prods WHERE articulo = '" & cArticulo & "'", Ambiente.Connection )

If rstProd.EOF Then
Exit Sub
End If

nCantidad = Round( Val2( cCantidad ) / rstProd("precio1"), 4 )

If Not rstProd.EOF Then
cantidadDeArticulos = nCantidad
llenaPartida rstProd("Articulo")
End If

CancelaProceso = True
End Sub

Sub incrementaProducto()
Dim rstArticulo, Query

Set rstArticulo = CreaRecordSet( _
"SELECT articulo FROM prods WHERE articulo = '" & Me.Articulo & "' AND granel = 0 AND speso = 0", _
Ambiente.Connection )

Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection

If rstArticulo.EOF Then
Exit Sub
End If

For n = 0 To fg2.Rows - 1

If clEmpty( fg2.TextMatrix( n, 0 ) ) Then
Exit For
End If

If Ucase( Trim( fg2.TextMatrix(n,0) ) ) = _
UCase( Trim(Me.Articulo) ) Then

Query.SQL = _
"UPDATE partvta SET cantidad = cantidad + 1 WHERE id_salida = " & _
fg2.TextMatrix(n,7)
Query.Exec

fg2.TextMatrix(n,1) = Val2(fg2.TextMatrix(n,1)) + 1
CancelaProceso = True
Me.CalculaImportes
Exit For
End If

Next

End Sub