# 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**
83Editar Categorías de ProyectoAgregar, modificar o eliminar categorías de proyectosProyectos
84 Categorizar un ProyectoEspecificar o cambiar la categoría de un proyectoProyectos
# 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 proyectosProyectos
Contratos proyectos Agregar, editar, eliminar contratos de proyectos Proyectos
Presupuestos proyectos Agregar, editar, eliminar presupuestos de proyectosProyectos
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\_impresionAplicar 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/ProyectosContrato.vb Métodos auxiliares de Contrato
Gui/ProyectosEditarContratos.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\_ catalogono 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: ```SQL 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: - Especificar límites válidos del catálogo, categoría y producto - Validar que un descuento está dentro del límite - Listar límites por categoría y producto ##### 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.vbEditar el límite de un producto
EditarProductoLibro.vb Catalogo.vbEditar el límite de un producto
EditarProductoLibroConsignacion.vb Catalogo.vbEditar 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 PreciosCrear, editar y eliminar listas de precios.Administración
39 Lista de Precios en VentaAsignar una lista de precios a ventas sin cliente asociado.Operación
#### Base de datos
**Tipo** **Nombre** **Uso**
Columna parametros.lista\_precios\_generalDefinir una lista de precios default
Tabla listas\_preciosRegistro 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\_categoriasRegistro de excepciones por categoría para las listas de precios
Tabla listas\_precios\_productosRegistro de excepciones por producto para las listas de precios
View precios\_productosPrecios 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/ListasPreciosactualizar\_lineas\_venta\_lista\_precios Cuando cambia la lista de precios de una venta hay que actualizar los precios del detalle
qry/ListasPrecioslineas\_categorias\_redondeo Datos para la lista de la pantalla EditarListaPreciosCategorias
qry/ListasPrecioslineas\_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/importarCorresponde a importar.perfiles\_columnas
AccionPerfilImportacion gen/importar, src/importarCorresponde 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ónimportar.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ónimportar.duplicar\_perfil Duplica el perfil recibido, incluyendo sus columnas y acciones.
Funciónimportar.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.vbPará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 - salidas\_bodega - trg\_salidas\_bodega\_costo\_promedio - lineas\_salidas\_bodega - trg\_lineas\_salida\_bodega\_costo\_promedio Según el tipo de salida de bodega se utilizan las siguientes columnas de la tabla salidas\_bodega:
**Tipo** **proyecto** **venta** **cobrada** **cliente**
Por CobrarNULL NULL TRUE Requerido
Cobrada NULL Requerido FALSE NULL
Proyecto Requerido NULL FALSENULL
No Cobrada NULL NULL FALSE NULL
Utilizada en las siguientes views: - egresos\_inventario - existencias\_bodega - pendientes\_entrega\_bodega ##### Ingresos a Bodega - ingresos\_bodega - trg\_ingresos\_bodega\_costo\_promedio - lineas\_ingresos\_bodega - trg\_lineas\_ingresos\_bodega\_costo\_promedioClases .NET #### 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