Se deben rellenar una serie de tablas que posibilitan la creación de los centros de coste teniendo en cuenta las variables que se desee y el objeto desde el que se genera.
La primera tabla que se debe rellenar es la tabla de definición de los centros de coste desde el formulario Centros Coste Definición:
Aquí se define de forma posicional las partes que componen cada centro de coste.
En el ejemplo muy básico que se acompaña se define que el centro de coste se compondrá de un único valor obtenido de una única tabla, que en este caso coincide con la tabla general de mantenimiento de centros de coste Conta_CentrosCoste.
Lo que estamos haciendo aquí es componer la selección desde este asistente de selección que hemos visto antes:
Los campos de la tabla son:
- PosIni: Posición inicial de la subcadena que compone el centro de coste.
- NumCaract: Número de caracteres que ocupará dentro de la cadena
- Alineación: Derecha (D) o Izquierda (I).
- ValorRelleno: Valor de relleno en caso de que el valor devuelto sea menor que la longitud definida.
- Etiqueta: Nombre con el que se identifica el campo.
- Tabla: Nombre de la tabla de la que se va a leer el valor. Puede ser una vista.
- CampoCC: campo del que va a tomar el valor para componer el centro de coste.
- CampoId: Campo identificativo para poder cargar la combo de selección en las pantallas de definición de centro de coste.
- CampoDesc: Descripción del campo clave que se muestra asociado al ID anterior.
- WhereSQL: parte del Where que se puede indicar para modificar la carga del combo.
- OrderSQL: Campo por el que se ordenará el resultado de la combo.
- Requerido: indica si el campo es obligatorio o no.
- DependDefIdDoc: Identificador del IdDoc de esta misma tabla que se utilizará como referencia para cargar los datos.
- DependeDefCampoI: Campo que se cargará dentro de la lista.
Veamos un ejemplo más complejo donde el primer dato (posición 1) es relativo a la delegación con 2 caracteres de longitud, el siguiente campo depende de la línea de negocio y también tiene una longitud de 2 caracteres empezando desde el tercero, el siguiente va en función del cliente y en última posición la planta del cliente.
Según este ejemplo, el campo Centro de Coste se compondrá de 13 dígitos que se compondrán de la siguiente forma:
Esta definición concuerda con la pantalla de selección de centros de coste, donde los campos que aparecen y los combos que devuelven los valores son los indicados en esta tabla de configuración.
CENTROS DE COSTE POR LÍNEA AUTOMÁTICOS
La configuración de los centros de coste de forma automática posibilita que dependiendo del documento desde el cual se introduce el desglose del centro de coste se genere el mismo con unos valores u otros.
Para que la generación automática esté habilitada es necesario que el parámetro CENTROCOSTE_LINEA_AUTO esté a ON.
Con esta modalidad de gestión de los centros de coste por línea automatizados, es conveniente revisar los valores de la tabla Conta_CentrosCoste_Config para asegurarnos que el objeto al que queremos asignar centros de coste tiene activada esta gestión. En caso de que no, habrá que modificar el valor directamente en la tabla estableciendo a TRUE la columna ACTIVADO de dicha tabla.
Otra tabla que hay que configurar se llama CONTA_CENTROSCOSTE_AUTOMAT. Pero esta tabla la podemos editar desde la pantalla Centros Coste Automático. En esta tabla se debe rellenar la definición de los centros de coste para cada uno de los posibles objetos a los que se haya de asociar códigos analíticos.
El objetivo de la tabla es definir una serie de selects o valores fijos dependiendo de los distintos tipos de objetos, cuya unión formarán el código de los centros de coste.
Los campos de los que se compone son:
- Objeto: Objeto desde el que se compone el centro de coste.
- PosIniDef: posición inicial absoluta dentro del código del centro de coste.
- PosIni: Posición inicial relativa.
- NumCaract: Número de caracteres que ocupará el valor obtenido.
- ValoresFijos: Indica un valor fijo para unir al código del centro de coste.
- CampoEnlaz: Campo de enlace. Se utiliza para la creación de la parte Where de la sentencia.
- CamposEnlazEsCadena: check que indica si el campo de enlace es numérico o alfanumérico para la correcta creación de la sentencia que obtendrá el valor.
- SQLEnlaz: sentencia SQL que devolverá el valor para formar el código del centro de coste.
En el ejemplo que nos ocupa, se han definido las reglas para algún objeto, por ejemplo, para los pedidos_lineas
Los campos de la tabla son:
Objeto: a qué objeto se asociará el centro de coste.
PosIniDef: Posición del carácter inicial.
Posini: Posición del carácter inicial.
NumCaract: Número de caracteres que componen el centro de coste o el fragmento.
ValoresFijos: Para forzar unos valores fijos que compondrán el centro de coste o fragmento del mismo.
CampoEnlaz: Campo de la tabla del objeto que se va a utilizar para enlazar con la consulta indicada en SQLEnlaz.
CamposEnlazEsCadena: Si el CampoEnlaz es de tipo texto, este campo lo pondremos a true.
SQLEnlaz: la consulta SQL que nos devolverá el centro de coste o fragmento del mismo para este registro.
Si el propósito es que el centro de coste se componga de diversos fragmentos que no haya forma de obtener de una manera directa, entonces en la tabla actual Conta_CentrosCoste_Automat podremos añadir tantos registros para el mismo objeto como fragmentos vayamos a obtener. Cada registro tendrá una posición de inicio, número de caracteres, consulta y campo de enlace diferentes.
Por ejemplo, podríamos plantear una configuración donde el centro de coste para las líneas del pedido se basase tal y como hemos tratado en un ejemplo anterior en delegación + línea de negocio + cliente + planta. En tal caso, la relación de registros de la tabla quedaría como se muestra a continuación.
Objeto | PosIniDef | PosIni | NumCaract | ValoresFijos | CampoEnlaz | CampoEnlaz EsCadena | SQLEnlaz |
Pedido_Linea | 1 | 1 | 2 | NULL | IdPedido | 1 | select top 1 Del.CentroCoste from Delegaciones Del inner join Series_Facturacion sf on sf.IdDelegacion = del.IdDelegacion inner join Pedidos_Cli_Cabecera pcc on pcc.SeriePedido = sf.SerieFactura where pcc.IdPedido = |
Pedido_Linea | 3 | 3 | 2 | NULL | IdArticulo | 1 | Select top 1 lin.CentroCoste from LineasNegocio lin inner join Articulos_Familias af on af.IdLineaNegocio = lin.IdLineaNegocio inner join articulos a on a.IdFamilia = af.IdFamilia Where a.IdArticulo = |
Pedido_Linea | 5 | 5 | 4 | NULL | IdPedido | 1 | Select cd.Padre from clientes_datos cd inner join Pedidos_Cli_Cabecera pcc on pcc.IdCliente = cd.IdCliente where pcc.IdPedido = |
Pedido_Linea | 9 | 9 | 5 | NULL | IdPedido | 1 | Select right(IdCliente,5) from Pedidos_Cli_Cabecera where IdPedido = |
Como se puede apreciar, ninguna de las consultas Select están finalizadas. Esto se debe a que a continuación del signo = el programa intentará completarla añadiendo a su derecha la propiedad del objeto especificada en CampoEnlaz.
NOTA: Si trabajamos con centros de coste por línea y con partes, lo que se debe realizar es una asignación automática de los centros de coste en las líneas de los partes, ya que en caso contrario, el proceso comprueba y borra el centro de coste de la línea que ha insertado el pedido (en caso de tener una asignación configurada en objeto pedido) y busca copiar el centro de coste del parte, y si las líneas del parte no tiene asignado un centro de coste, borra la asignación de los centros de coste del pedido.
En este caso lo que debemos hacer es activar la asignación automática de los centros de coste en las líneas de los partes, trasladando la lógica que hemos aplicado en otros objetos.
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo