Manual para Desarrollo Q3

Errores de base de datos

Q3001

Límite de descuento de productos

Q3002

Listas de precios de productos

Q3003

Facturación y cobro de contratos de proyectos

Q3004

Proyectos

Q3005

Importar

Categorías de Proyectos

Descripción

Los proyectos pueden agruparse en categorías. Esto es para poder ver los resultados de varios proyectos resumidos.

Como los proyectos, las categorías de proyectos también pueden estar abiertas o cerradas. Si algún proyecto de una categoría está abierto la categoría está abierta, cuando todos los proyectos de una categoría están cerrados la categoría estará cerrada. La idea es que se puedan abrir categorías de proyectos que estén visibles mientras los proyectos están en curso.

Implementación

Las categorías se guardan en la tabla proyectos_categorias y tienen dos columnas: id (int) y nombre (text). Hay una categoría default: 0 '< no asignada >' que es el default para la columna relacionada proyectos.categoria.

Permisos
id
Nombre
Descripción
Tipo
83 Editar Categorías de Proyecto Agregar, modificar o eliminar categorías de proyectos Proyectos
84
Categorizar un Proyecto Especificar o cambiar la categoría de un proyecto

Proyectos


Categorías de Transacciones Bancarias

Descripción

Cada transacción bancaria se puede categorizar. Esto sirve para ver un flujo de bancos por categoría.

La lista de categorías es editable y cada una puede ponerse disponible para Ingresos o Egresos.  Las categorías también tienen un orden para mostrar en reportes, este orden es editable por el usuario.

Existe una < no asignada > por default que aplica para ingresos y egresos.

Implementación

Las categorías tienen un id serial y un nombre. Para definir si son de tipo ingresos o egresos se utiliza los textos 'ingresos' y 'egresos'.

La categoría < no asignada > tiene dos registros con ids -1 y -2, una tipo 'ingresos' y otra tipo 'egresos'.

Hay una llave unique que incluye el nombre y el tipo para que no se repitan categorías.

Facturación y cobro de contratos de proyectos

Descripción

El objetivo es optimizar el proceso de facturación y cobro cuando la empresa vende suscripciones y/o servicios. En estos casos la facturación es mensual y se cobran los mismos items cada mes, con la opción de descuento si se pagan antes de un día del mes. Hay tres momentos clave en este proceso:

  1. La configuración de los cobros del proyecto (fecha, monto, detalle), en el sistema se llaman contratos
  2. La facturación
  3. El cobro

Esta adición fue solicitada para operar los cobros de un colegio.

Configuración de los contratos

Tomando en cuenta que hay que operar la factura y luego revisar que esté correcta, decidimos que es mejor que el encargado de revisar configure los códigos, descripciones y montos a facturar en cada contrato del proyecto, así el operador no tendrá que decidir, sino que usará lo configurado.

Para el caso en que se ofrece un descuento por pago antes del día límite, cada contrato requiere dos montos: el normal y el descontado, también cada línea de detalle requiere configurar el precio normal y el descuento

Facturación

Hay dos modalidades de facturación:

  1. Facturar para luego cobrar (típico de servicios que se pueden cancelar o interrumpir entre meses).
  2. Facturar lo cobrado (típico de contratos que no se pueden interrumpir).

Cuando se factura y luego se cobra, como ya está configurado el detalle de cada contrato del proyecto, lo único necesario es generar las facturas que corresponden al mes.

Cuando se factura hasta que se cobra, lo que corresponde es operar la transacción bancaria y luego generar y asociar las facturas de lo cobrado.

Cobro

En la modalidad 1 (Facturar y luego cobrar), se asocia la factura ya hecha al cobro. El cobro puede cubrir una parte de la factura y no es necesario saber a qué contrato corresponde cada factura, ya que se emite una factura por contrato; las facturas emitidas con saldo por cobrar aparecerán en el estado de cuenta del proyecto.

En la modalidad 2 (Facturar lo cobrado), al recibir el cobro el proceso es el siguiente:

  1. Operar la transacción bancaria.
  2. Elegir los proyectos a los cuales aplicar el cobro.
  3. Si hay facturas anteriores con saldo en estos proyectos, liquidar desde la más antigua a la más reciente, y si varias tienen la misma antigüedad del mayor al menor saldo.
  4. Si aún queda algo del monto de la transacción por liquidar, elegir los contratos más antiguos por facturar de estos proyectos, y si hay varios de la misma antigüedad el de mayor a menor monto.
  5. Aplicar el monto restante de la transacción a los contratos, si se cubre más de uno facturar todos los que alcancen aunque no se cubra el último completo.
  6. Al aplicar el monto de la transacción a los contratos, se verifica el día del mes de la transacción contra el mes del contrato. Si el mes/año de la transacción es el mismo del contrato, se compara el día límite configurado para usar montos con descuento. Si el mes/año de la transacción es anterior al del contrato se utiliza el monto descontado.
  7. Si aplica a descuento por la fecha límite, pero no cubre el total de la factura, no se marca como descontado, se utiliza el precio normal.
  8. Generar una factura que incluya los contratos aplicados a la transacción. Por cada contrato se agregará a la misma factura el detalle configurado y cada contrato quedará marcado como facturado por la factura generada.
  9. La factura será por el monto total del contrato asociado aunque el monto de la transacción no lo cubra. Esto es porque cada contrato se factura una vez y luego quedará la factura con un saldo por cobrar.
  10. Asociar la factura generada a la transacción por el monto elegido.
Implementación
  1. Los contratos de proyectos se asocian con una venta al momento de generarla.
  2. Una venta puede estar asociada a varios contratos.
  3. Se puede quitar y poner la venta asociada a los contratos (para limpiar o hacer el proceso manualmente).
  4. Las vistas de qué contratos están facturados es en Proyectos->Contratos y en EditarVenta->Contratos Proyectos
  5. La fecha y número de factura asociada al contrato aparece en el estado de cuenta de proyecto, y en los reportes de Cuentas por Cobrar de Proyectos y de Cobros de Proyectos entre Fechas.
  6. Aunque un contrato esté asociado a una venta, es necesario llevar el estado de cuenta del proyecto a través de la transacción bancaria>proyectos y venta>proyectos; porque está separada la cuenta de facturado y cobrado.
  7. Los contratos que tienen venta asociada, también tienen un cheque de "descuento_aplicado" para que el sistema sepa qué monto se usó al facturar. Esto se pone automático al facturar desde la transacción bancaria, pero también se puede modificar directamente en el contrato desde Proyectos->Contratos.
  8. Si se quita la venta de un contrato, se quita también el cheque de "descontado" del contrato.
  9. El parámetro general de día límite para descuentos en proyectos se puede desactivar con 0.

Al cobrar los contratos se generan las ventas necesarias y aparecen asociadas a la transacción. Si me arrepiento y quiero borrarlas para volverlo a hacer, tengo que borrar la asociación y luego las ventas. Para no tener que hacer esto manualmente, hay un botón para eliminar las ventas asociadas desde la misma pantalla.

Parámetros Generales
Nombre
Uso
requerir_detalle_en_contratos_proyectos 

Al facturar proyectos desde Asociados Transacción, lo impide si el proyecto elegido no tiene configurado detalles en sus contratos

Default: false

dia_limite_descuentos_proyectos

El último día del mes antes del cual aplica el monto descontado de contratos de proyectos, puede ser:

  1. Sin descuentos -> 0
  2. Último día del mes -> 30
  3. Día específico -> 1-29

Estas restricciones están implementadas con el check constraint dia_limite_descuentos_proyectos en la misma tabla

Default: 0

serie_proyectos

Serie a utilizar al generar facturas desde cobrar_contratos_proyectos

Default: 0

no_facturar_cobro_parcial_proyectos

No generar factura si el monto por aplicar no cubre el monto del contrato.

Si está desactivado: genera la factura por el monto total del contrato y la asocia a la transacción bancaria por el monto aplicado.

Si está activo: no genera la factura, cancela la operación y da un mensaje.

Permisos
id
Nombre
Descripción
Tipo

Aplicar descuento a contrato
Aplicar/Quitar descuento a contrato de proyectos Proyectos

Contratos proyectos
Agregar, editar, eliminar contratos de proyectos
Proyectos

Presupuestos proyectos
Agregar, editar, eliminar presupuestos de proyectos Proyectos

Editar proyectos
Agregar, editar, eliminar fichas de proyectos
Proyectos
Base de datos
Tipo
Nombre
Uso
Tabla
contratos
Lista de contratos de un proyecto, con monto y fecha de cobro
Tabla
contratos_detalle
Será el detalle de la venta (lineas_ventas)  al facturar un contrato
Tabla
contratos_impresion
Será la impresión del detalle de la venta (lineas_ventas_impresion) al facturar un contrato
Función
actualizar_orden_contratos_impresion
Ordenar los contratos_impresion
Trigger
trg_actualizar_orden_contratos_impresion Aplicar orden al insertar o eliminar contratos_impresion
Función
duplicar_contrato_proyectos
Duplicar un contrato con todo y detalle e impresión, incrementando fecha, número y descripción.
Error
Q3003
Error de facturación y cobro de contratos de proyectos
 .NET
Carpeta
Archivo
Descripción
gen/Proyectos
Contrato.vb
Acceso a la tabla contratos
gen/Proyectos
ContratoDetalle.vb
Acceso a la tabla contratos_detalle
gen/Proyectos
ContratoImpresion.vb
Acceso a la tabla contratos_impresion
src/Proyectos Contrato.vb
Métodos auxiliares de Contrato
Gui/Proyectos EditarContratos.vb
Editar contratos de un proyecto


Límites de descuento de productos

Descripción

Permite especificar un límite de descuento por porcentaje o por monto (por unidad vendida). Sirve para controlar los descuentos que los usuarios aplican al vender, pero permitiendo que tengan un margen de decisión sobre cuánto dar de descuento.  La idea es que un vendedor gana más comisión mientras menos descuento ofrezca.

Funciona por medio de excepciones: El límite para el catálogo aplica para todos los códigos, luego se pueden agregar excepciones por categoría y/o producto. Cuando el usuario aplica un descuento, el sistema lo compara primero con el límite del producto, si no tiene, con el de la categoría y, si ésta no tiene, con el del catálogo.

Implementación

Los límites de descuento se guardan en las siguientes columnas:

Límite para
Columna Límite
(numeric >= -1, not null, default -1)

Columna Tipo
(text, not null default 'porcentaje')
Catálogo
parametros.limite_descuento_porcentaje_ catalogo no tiene
Categoría
categorias.limite_descuento
categorias.limite_descuento_tipo
Productos

productos.limite_descuento

productos.limite_descuento_tipo

Los límites de descuento se consideran desactivados si el valor es -1, si tienen valor 0 significa que no se permiten descuentos, el default en las columnas es -1. Todo esto es validado en CHECK CONSTRAINTS en las columnas de arriba.

-1 es la constante: Sesion.LIMITE_DESCUENTO_DESACTIVADO

Valor
Efecto cuando es tipo porcentaje
Efecto cuando es tipo monto
<-1
No permitido
No permitido
-1
No hay límite de descuento
No hay límite de descuento
>-1 y <0
No permitido
No permitido
0
No se permiten descuentos
No se permiten descuentos
>0 y <1
Descuento ordinario, se multiplica por 100 para obtener el porcentaje
Descuento ordinario en quetzales
1
Descuento del 100%
Descuento ordinario en quetzales
>1
No permitido
Descuento ordinario en quetzales

El orden para identificar el límite es:

COALESCE(
NULLIF(producto.limite_descuento, -1),
NULLIF(categoria.limite_descuento, -1),
NULLIF(parametros.limite_descuento, -1)
)

La columna de tipo puede ser 'porcentaje' o 'monto'
Para el catálogo solo se puede especificar descuento en porcentaje

Permisos
id
Nombre
Descripción
Tipo
77
Límites de descuento productos
Definir límites de descuento por categoría y producto.
Administración
78
Ignorar límite de descuento
Ignora el límite de descuento especificado para el producto.
Operación

El usuario debe tener permiso para hacer descuentos
Si el usuario tiene ambos permisos, gana el permiso de Ignorar límite de descuento

Clases .NET

En LimitesDescuentoProductos están todas las funciones utilizadas para:

Objetos DB

Para validar el límite hay un trigger trg_lineas_ventas_limite_descuento con before insert y update que ejecuta validar_limite_descuento_trigger

Para listar los límites está la vista: limites_descuento_productos

Errores DB
Código
Descripción
Q3001
Error de límite de descuento de productos
Pantallas

La idea es que desde la pantalla LimitesDescuentosProductos se trabajen los límites para poder ver en un solo lugar cómo está la situación. Cada vez que se cambia algo desde LimitesDescuentosProductos se están actualizando ParametrosGenerales, EditarCategoria y EditarProducto; en éstos también se puede ver y editar el límite específico para cada uno.

Form
Accesible desde
Descripción
LimitesDescuentosProductos.vb
Catalogo.vb
Menú Catálogo
ParametrosGenerales.vb
MenuInicial.vb
Pestaña Ventas
EditarCategoria.vb
Catalogo.vb
Editar el límite de una categoría
EditarProducto.vb
Catalogo.vb
Editar el límite de un producto
EditarProductoConsignacion.vb
Catalogo.vb Editar el límite de un producto
EditarProductoLibro.vb
Catalogo.vb Editar el límite de un producto
EditarProductoLibroConsignacion.vb
Catalogo.vb Editar el límite de un producto


Listas de Precios

Descripción

Cuando creamos nuestro catálogo de productos (categoría, código, nombre, precio) el precio de cada código es el precio ordinario, "de lista"; cada vez que vendemos un producto el sistema usará este precio. Hay ocasiones en que queremos dar descuentos al vender, puede ser por el tipo de cliente al que estamos vendiendo (p.ej. un mayorista) o porque el producto está en oferta (p.ej. por temporada o liquidación).  Estas políticas de descuento se pueden registrar en el sistema para que no dependa de la memoria del cajero si aplicar o no el descuento. Las listas de precios son estas políticas de descuento.

Implementación

Cada lista de precios se puede configurar con: nombre, porcentaje de descuento, mostrar como descuento y redondear del precio final.

Nombre
El nombre de la lista de precios
Porcentaje de descuento
El porcentaje a descontar sobre el precio original: final = original - (1+porcentaje)
Mostrar como descuento

Al agregar el producto a una venta, si está esto marcado, muestra el descuento en la columna de descuento: original / descuento / final

Si no está marcado, muestra solo el precio final: final / descuento 0 / final

Redondear el precio final
Después de aplicar el descuento, redondear el precio final; también está la opción Sin Redondear

Las listas de precios se registran en la tabla listas_precios. Existe una lista de precios por defecto, que se llama "< no asignada >", con un descuento del 0% y  sin redondear.

Se pueden hacer excepciones para el porcentaje de descuento aplicado por la lista, p.ej. si queremos que cierta categoría o cierto producto tengan su propio porcentaje o precio dentro de la lista de precios. Esto se registra en lista_precios_excepciones_categorias y lista_precios_excepciones_productos.

El sistema presenta todos los precios configurados en la view precios_productos. Ahí podemos consultar cual es el precio actual de cada código para cada lista de precios y cómo fue aplicado (General, Categoría o Producto).

Permisos

id
Nombre
Descripción
Tipo
31
Listas de Precios Crear, editar y eliminar listas de precios. Administración
39
Lista de Precios en Venta Asignar una lista de precios a ventas sin cliente asociado. Operación

Base de datos

Tipo
Nombre
Uso
Columna
parametros.lista_precios_general Definir una lista de precios default
Tabla
listas_precios Registro de listas de precios disponibles
Tabla
listas_precios_redondeo
Lista de redondeos a elegir cuando guardamos una lista de precios o una excepción
Tabla
listas_precios_categorias Registro de excepciones por categoría para las listas de precios
Tabla
listas_precios_productos Registro de excepciones por producto para las listas de precios
View
precios_productos Precios calculados de cada producto para cada lista de precios
Función

lista_precios_actual

Calcular precio descontado y descuento según configuración de lista de precios, se usa en precios_productos

Función

lista_precios_excepciones_categorias

Crear excepciones para categorías

Función

lista_precios_excepciones_productos

Crear excepciones para productos

Tests
listas_precios

Error
Q3002
Para las funciones

Pantallas

Pantalla
Descripción
EditarListaPrecios
Editar una lista de precios, tabla listas_precios desde ficha de producto

EditarListaPreciosCategorias

Ver y editar las excepciones de una lista de precios para una categoría desde ficha de categoría
EditarPreciosProductos
Ver y editar las excepciones de una lista de precios para un producto
ListasPreciosAdmin
Ver cómo afecta una lista de precios a todas las categorías y productos. Crear, editar y quitar excepciones a una selección de categorías y productos.
SeleccionarListaPrecios
Sirve desde el Catálogo de Productos al exportar códigos y precios
SeleccionarRedondeoListaPrecios
Sirve para elegir el nuevo redondeo desde ListasPreciosAdmin

.NET

Carpeta
Archivo
Descripción
qry/ListasPrecios actualizar_lineas_venta_lista_precios
Cuando cambia la lista de precios de una venta hay que actualizar los precios del detalle
qry/ListasPrecios lineas_categorias_redondeo
Datos para la lista de la pantalla EditarListaPreciosCategorias
qry/ListasPrecios lineas_precios_productos
Datos para la lista de la pantalla EditarPreciosProductos

qry/ListasPrecios

listas_precios

Datos para la pantalla ListasPrecios

qry/ListasPrecios

listas_precios_combobox

Datos para la pantalla SeleccionarListaPrecios

Perfiles de Importación

Descripción

En general desde los sistemas podemos exportar información estructurada (p.ej. en archivos de texto delimitados por comas o archivos de Excel), lo que es una buena alternativa cuando deseamos hacer una migración de datos y evitar transcribir información de un sistema a otro . También es deseable permitir alternativas a teclear la información usando las pantallas del sistema, por ejemplo, cuando la información se repite cada mes con pequeñas variantes. En este caso podemos guardar un archivo de origen, copiarlo y hacer las modificaciones con una herramienta adecuada (p.ej. Excel) y luego importar la información al Q3.

Cada origen de datos que usamos para cargar información tiene una estructura definida que raramente cambia, por lo que guardamos el perfil en el sistema para usarlo cada vez que tengamos información que cargar.  Para esto necesitamos configurar cada perfil en nuestro sistema para especificar cómo está estructurada la información, qué datos vienen, dónde los queremos  guardar y qué sucede si la información que queremos cargar ya existe en el sistema. Para esto sirven los perfiles de importación, para definir la estructura de un origen de datos a importar al Q3, por ejemplo un estado de cuenta en formato CSV o un excel de ventas emitidas descargado de la Agencia Virtual SAT.

Tenemos entonces los siguientes conceptos:

Origen de datos
El archivo de origen que queremos cargar al sistema.
Destino de datos
El tipo de documento que estamos cargando, p.ej. transacciones bancarias o compras.
Perfil de Importación
Estructura de un origen de datos y configuración de cómo cargarlo al destino de datos.
Implementación

El método que usamos tiene el siguiente orden:

  1. Extraer: cargar desde el archivo a una tabla intermedia
  2. Transformar: validar, limpiar y enriquecer los datos en la tabla intermedia
  3. Cargar: guardar los datos transformados de la tabla intermedia a la(s) tabla(s) de destino

Los perfiles de importación se consideran configuración del sistema, por lo que son accesibles en los Parámetros Generales.

Cada perfil de importación tiene:

  1. Un mapeo de columnas de origen y destino para la extracción
  2. Una tabla intermedia según el destino
  3. Una lista de acciones con orden, descripción y el comando SQL a ejecutar en la tabla de destino

Puede existir cualquier cantidad de perfiles de importación, por defecto el sistema incluye los necesarios para la carga inicial o migración de datos para implementaciones.

 La validación, transformación y carga se hace en el servidor, lo único que debe hacer la aplicación es cargar las líneas del archivo a la tabla intermedia.

Estos son los campos del perfil de importación y su uso:

Campo
Descripción
Descripción
El nombre del perfil.
Destino
Lo que estamos importando, internamente se guardan en la tabla clases bajo 'importar.destinos' y la columna código de esa tabla es el nombre de la tabla intermedia.
Tipo de archivo
El tipo de archivo puede ser CSV, XLS o XLSX.
Codificación
Para archivos tipo CSV ya que los archivos de texto tiene una codificación específica, usualmente son UTF-8.
Delimitador de columna

Para archivos tipo CSV, es el delimitador de columna utilizado en cada línea del archivo.

Delimitador de texto

Para archivos tipo CSV, dentro de cada columna, cuando el valor de la columna incluye el caracter usado como delimitador de columna se delimita la columna con este caracter, p.ej. si el delimitador es una coma (,) y una línea tiene los campos:

<col1>, Empresa, S.A., <col2>

debería aparecer en el archivo de texto como:

<col1>,"Empresa, S.A.",<col2>

para evitar errores de lectura. En este caso el delimitador de columna es una coma (,) y el delimitador de texto es una doble comilla (").

Columnas por fila

La cantidad total de columnas que tiene cada línea (o fila si es tipo excel), sirve para validar que todas las líneas vengan completas y sin datos adicionales. Aquí hay que poner la cantidad total de columnas que vienen aunque solo vayamos a importar algunas.

Fila encabezado

La línea/fila que trae los nombres de las columnas en el archivo a cargar, usualmente la número 1.

Primera fila datos

La línea/fila en la cual empiezan los datos, usualmente la número 2.

Número de hoja

Para archvios tipo XLS y XLSX, es el número de hoja a importar, la primera hoja del archivo es la 1.

Estos son los campos de las columnas del perfil de importación y su uso:

Campo
Descripción
Destino
El nombre de la columna de destino, este nombre es el comentario de la columna de la tabla intermedia en la base de datos.
Índice columna origen
La columna (comenzando con 1) de la columna de origen, esto lo usa el importador al cargar los datos del archivo a la tabla intermedia.
Columna de origen
El nombre de la columna de origen, esto sirve solamente como información adicional.

Estos son los campos de las acciones del perfil de importación y su uso:

Campo
Descripción
Orden
Para definir la secuencia de acciones, porque las acciones modifican los datos de la tabla intermedia incrementalmente.
Descripción
La descripción de la acción para referencia.
Comando

El comando SQL que modifica la tabla intermedia, limpiando, eliminando o enriqueciendo los datos antes de importarlos.

El sistema agrega automáticamente a cada comando una cláusula WHERE/AND lote='< código lote >'

La última acción debería ser un INSERT desde la tabla intermedia al destino e incluir el código del lote de operación

Destinos de Perfiles de Importación

Para crear un nuevo destino hay que hacer lo siguiente:

  1. Crear una tabla intermedia que incluya todas las columnas que importaremos a las tablas de destino, esta  nueva tabla debe heredar de la tabla importar.intermedia y debe estar ubicada en el esquema importar.
  2. Ponerle un comentario a todas las columnas de la tabla intermedia con un nombre descriptivo para el usuario, p.ej. si la columna se llama tipo_documento, el comentario sería Tipo Documento.
  3. Incluir el nuevo destino en la tabla clases y en el archivo sql/crear/clases.sql (buscar donde se insertan las clases con código 'importar.destinos'). La clase es 'importar.destinos', el código debe ser el nombre de la tabla (con esquema, p.ej. 'importar.transacciones'), y la descripción es como aparecerá en la lista de destinos en la interfaz gráfica, p.ej. 'Transacciones Bancarias'.
  4. Agregar un ítem al menú Importar en Operaciones y hacer que se active con el permiso de editar el destino, p.ej. si estamos importando Gastos, le pondríamos de etiqueta 'Gastos' al ítem y se debe activar con el permiso (7, Gastos).
Permisos

La premisa es: si tengo permiso para operar, tengo permiso para importar, p.ej. un usuario con el permiso de operar transacciones bancarias tendrá acceso a importar transacciones bancarias. Aparte, para poder editar perfiles de importación es necesario el permiso de parámetros generales. Por esto, todos los permisos necesarios ya existen, aquí está la lista:

id
Nombre
Tipo
11
Parámetros Generales
Administración
17
Transacciones Bancarias
Operación
Clases .NET
Clase
Carpetas
Descripción
PerfilImportacion
gen/importar, src/importar
Corresponde a importar.perfiles, incluye los métodos para leer los tipos de archivo a las tablas intermedias
ColumnaPerfilImportacion
gen/importar, src/importar Corresponde a importar.perfiles_columnas
AccionPerfilImportacion
gen/importar, src/importar Corresponde a importar.perfiles_acciones
Objetos DB
Tipo
Nombre
Descripción
Esquema
importar
Para agrupar todo lo de importar.
Tabla
importar.perfiles
Para guardar los perfiles.
Tabla
importar.perfiles_acciones
Tabla
importar.perfiles_columnas
Secuencia
importar.perfiles_id_seq
Secuencia
importar.perfiles_columnas_id_seq
Secuencia
importar.perfiles_acciones_id_seq
Tabla
importar.intermedia
Tiene las columnas necesarias para que cualquier tabla intermedia funcione correctamente.
Tabla
importar.transacciones
La tabla intermedia para perfiles con destino de transacciones bancarias.
Función
importar.codigo_lote
Genera el código del lote según la fecha, el usuario y el destino. Este código es importante para agrupar los datos en la tabla intermedia y luego en el destino.
Función

importar.crear_columnas

Al crear un nuevo perfil de importación, esta función jala los nombres de columna y sus comentarios para insertarlos en la tabla importar.perfiles_columnas.
Función importar.duplicar_perfil
Duplica el perfil recibido, incluyendo sus columnas y acciones.
Función importar.validar_y_cargar_lote
Valida que el lote y el perfil estén correctos, luego ejecuta las acciones del perfil en la tabla intermedia.
Errores DB
Código
Descripción
Q3005
Errores en importación
Pantallas
Form
Accesible desde
Descripción
Importar/PerfilesImportacion.vb Parámetros Generales
Para crear/editar/eliminar perfiles de importación
Importar/EditarPerfilImportacion.vb
Perfiles Importación
Importar/EditarPerfilAccion.vb
Editar Perfil Importación
Importar/ImportarPerfil.vb
Operación
Sirve para importar cualquier perfil de importación, se configura con PerfilImportacion.Destinos

Salidas de Bodega e Ingresos a Bodega

Descripción

Salidas de bodega

Las salidas de bodega documentan que la existencia de un código deja de ser de la empresa. Solamente se incluyen cantidad y código en el documento porque es un consumo de inventario, no causa un cambio en el costo promedio del código. En estos casos es necesario hacer una salida de bodega:

  1. Se entregan productos que se facturarán después (tipo por cobrar)
  2. Se entregan productos que ya se facturaron (tipo cobrada)
  3. Se utilizan productos en algún proyecto y se desea cargar los al costo del proyecto (tipo proyecto)
  4. Se consumen productos y se desea asumir el costo (tipo no cobrada)

Si se utiliza el tipo No Cobrada (opción 4) hay que saber que existe una restricción fiscal de facturar a nombre propio y a costo los productos que se auto-consumen.

Ingresos a bodega

Los ingresos a bodega documentan una devolución de existencia de un código. No causa un cambio en el costo promedio, solamente incrementa la existencia. El uso principal es reversar total o parcialmente una salida de bodega de proyecto, por ejemplo, cuando se entregaron existencias para consumir en un proyecto y no se utilizó todo, entonces se devuelve lo que quedó.

Como los ingresos a bodega pueden asociarse únicamente a un proyecto, no a un cliente, si se quiere reversar otro tipo de salida de bodega (por cobrar, cobrada, no cobrada) lo que procede es anular la salida de bodega o la venta que tiene la salida asociada.

Implementación

Permisos

id
Nombre
Descripción
Tipo
24
Salidas de Bodega
Salidas de bodega asociadas a clientes (opcionalmente por cobrar). Operación
80
Ingresos a Bodega
Ingresos a bodega para reversar salidas de bodega (por ejemplo, devoluciones).
Operación
81
Marcar/Quitar impresa Salida Bodega
Marcar o quitar la marca de impresa a salidas de bodega.
Operación
82
Marcar/Quitar impresa Ingreso Bodega
Marcar o quitar la marca de impreso a ingresos a bodega.
Operación

Objetos DB

Salidas de Bodega

Según el tipo de salida de bodega se utilizan las siguientes columnas de la tabla salidas_bodega:

Tipo
proyecto
venta
cobrada
cliente
Por Cobrar NULL
NULL
TRUE
Requerido
Cobrada
NULL
Requerido
FALSE
NULL
Proyecto
Requerido
NULL
FALSE NULL
No Cobrada
NULL
NULL
FALSE
NULL

Utilizada en las siguientes views:

Ingresos a Bodega

Pantallas

Form
Accesible desde
Descripción
EditarSalidaBodega

Operacion

Busqueda

HistorialContacto

HistorialProducto

IntegracionCostoProducto

Proyectos

Editar una salida
EditarLineasSalidaBodega
EditarSalidaBodega
Editar detalle de salida
EditarIngresoBodega

Operacion

Busqueda

HistorialContacto

HistorialProducto

IntegracionCostoProducto

Proyectos

Editar una salida
EditarLineasIngresoBodega
EditarIngresoBodega
Editar detalle de ingreso

Reportes y formatos de impresión

id
Nombre
Descripción
198
Costos de Salidas de Bodega
Detalle de costos por producto agrupado por salida de bodega y cliente, incluye los ingresos a bodega para totalizar lo neto.
salidas_bodega
Salida de Bodega
Formato de impresión de salidas de bodega
ingresos_bodega
Ingreso a Bodega
Formato de impresión de ingresos a bodega