![]()
INDICE:
DEFINICION DEL FORMATO DE INTERCAMBIO ESTANDAR DE BASES DE DATOS DE CONSTRUCCION FIEBDC-3/98
PRESENTACION
La siguiente DEFINICION del
Formato de Intercambio ESTANDAR de Bases de Datos de CONSTRUCCION, fue aprobada
en abril de 1.977, para entrar en vigor a partir del 1 de enero de 1.998 como
VERSION 3.
Este documento se pone a
disposición de usuarios y empresas, con la única condición de que cualquier
implementación informática del presente formato debe recoger tanto la entrada
como la salida de datos.
Este formato pretende
abarcar toda la INFORMACION contenida en las actuales bases de datos de
CONSTRUCCION. No todos los desarrolladores de bases de datos necesitarán
utilizar todas las posibilidades del formato; así como tampoco todos los
programas de mediciones y presupuestos harán uso de toda la INFORMACION
suministrada.
Se prevé además, dentro del
propio formato, la posibilidad de ampliación; manteniendo en lo posible la
compatibilidad entre versiones en el caso de tratar nuevos contenidos que se
prevean en un futuro.
FORMATO FIEBDC-3.
ESPECIFICACION.
Toda la INFORMACION
necesaria para reconstruir completamente una base de datos u obra en soportes
físico y lógico distintos a aquellos en los cuales se produjo la INFORMACION es
el objetivo del formato FIEBDC, Formato de Intercambio ESTANDAR de Bases de
Datos de CONSTRUCCION.
La INFORMACION de una base
de datos, obra o certificación se dispondrá en cualquier número de archivos en
formato FIEBDC, con la extensión ".BC3", teniendo en cuenta que estos
archivos ordenados alfabéticamente contengan la INFORMACION en el orden
deseado.
La única limitación de
tamaño de cada archivo será la máxima que permita el soporte físico utilizado
para su transporte. Si se utiliza algún tipo de compresor de archivos, se
deberá incluir en el mismo soporte el descompresor o utilizar un formato
autodescomprimible.
El juego de caracteres a
emplear en los campos CODIGO será el definido por MS-DOS 6.0, incluyendo < .
> (ASCII-46), < $ > (ASCII-36), < # > (ASCII-35), < %>
(ASCII-37), < & > (ASCII-38), < _ > (ASCII-95).
El fin de línea será el
ESTANDAR de los archivos MS-DOS (ASCII-13 y ASCII-10). El fin de archivo se
marcará según el mismo ESTANDAR (ASCII-26). El único carácter de control
adicional que se permitirá será el tabulador (ASCII-9).
Cada archivo estará
compuesto de registros, zonas de texto entre el carácter de principio de
registro < ~ > (ASCII-126) y el siguiente principio de registro o fin de
archivo. Los archivos deberán contener registros completos, es decir, la
división de archivos se deberá realizar al comienzo de un registro (carácter
< ~ >).
Cada registro estará
compuesto de campos separados por caracteres < | > (ASCII-124). Todo
campo con INFORMACION tendrá que finalizar con el separador de campos y el
registro deberá contener todos los separadores de campos anteriores, aunque no
contengan INFORMACION. No es necesario disponer de finalizadores de los campos
posteriores al último con INFORMACION.
Cada campo estará compuesto
de subcampos separados por caracteres < \ > (ASCII-92). El separador
final, entre el último dato de un campo y el fin de campo es opcional.
El primer campo de cada
registro es la cabecera de registro, una letra mayúscula que identifica el tipo
de registro.
Se ignorará cualquier
INFORMACION entre el último separador de campos de un registro (carácter < |
>) o el comienzo del archivo y el comienzo del siguiente registro (carácter
< ~>).
Se ignorarán los caracteres
blancos (32), tabuladores (9) y de fin de línea (13 y 10), delante de los
separadores < ~ >, < | > y < \ >.
No se podrán actualizar
parcialmente campos de segundo orden (subcampos). Deberá actualizarse la
INFORMACION completa de un campo en cualquiera de los registros
La disposición de registros
dentro de un archivo es completamente libre, pero se garantizará la lectura
secuencial de los mismos para evitar ambigüedades en las sustituciones de
INFORMACION.
Los campos vacíos se
considerarán SIN INFORMACION, no con INFORMACION nula, esto permite producir
archivos de actualización que contengan únicamente la INFORMACION en alguno de
sus campos y, por supuesto, el CODIGO de referencia.
Para anular un campo numérico
deberá aparecer explícitamente el valor 0 (cero).
Para anular un campo
alfanumérico deberá aparecer explícitamente el ROTULO NUL.
CONVENIOS DE NOTACION
[a] Indica nada o "a"
{a} Indica cero o más ocurrencias de
"a"
(<DD>c) Tamaño máximo en número de caracteres
del campo
Todos los valores numéricos
irán sin separadores de miles y con el carácter punto '.' entre la parte entera
y la decimal.
REGISTRO TIPO
PROPIEDAD Y VERSION
Este registro se utiliza
para documentar la procedencia y el formato de los archivos y, cuando exista,
se dispondrá al comienzo del primer archivo.
~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO
\DDMMAA | PROGRAMA_EMISION | [CABECERA] \ { ROTULO_IDENTIFICACION \ } |
JUEGO_CARACTERES |
PROPIEDAD_ARCHIVO: Redactor
de la base de datos u obra, fecha, ...
VERSION_FORMATO: VERSION
del formato del archivo, la actual es FIEBDC-3
DDMMAA: DD representa el
día con dos dígitos, MM el mes y AA el año, si la fecha tiene menos de 5
dígitos representa mes y año únicamente, si tiene menos de tres, solo el año.
Si se identifica la fecha con un número impar de dígitos, se completará con el
carácter cero por la izquierda.
PROGRAMA_EMISION: Programa
y/o empresa que genera los ficheros en formato BC3.
CABECERA: Título general de
los ROTULOS_IDENTIFICACION.
ROTULO_IDENTIFICACION:
Asigna secuencialmente títulos a los valores definidos en el campo PRECIO del
registro ~C, que tal como se indica en su ESPECIFICACION, puede representar
distintas épocas, ámbitos geográficos, etc., estableciéndose una relación biunívoca
entre ambos.
JUEGO_CARACTERES: Asigna si
el juego de caracteres a emplear es el definido para D.O.S., cuyos
identificadores serán 850 ó 437, o es el definido para Windows, cuyo
identificador será ANSI. En caso de que dicho campo esté vacío se interpretará,
por omisión, que el juego de caracteres a utilizar será el 850 por
compatibilidad con versiones anteriores.
Este registro contiene la
INFORMACION básica de un concepto de cualquier tipo, material, auxiliar,
partida, capítulo, entidad, documento, etc., tanto en su VERSION paramétrica
como DEFINICION tradicional.
~C | {CODIGO \ } | UNIDAD | RESUMEN |
{PRECIO \} | { FECHA \ } | TIPO |
CODIGO: CODIGO del concepto
descrito. Un concepto puede tener varios CODIGOs que actuarán como sinónimos,
este mecanismo permite integrar distintos sistemas de clasificación.
Para distinguir el concepto
tipo raíz de un archivo, así como los conceptos tipo capítulo, se
ampliará su CODIGO con los caracteres '##' y '#' respectivamente; quedando dicha
NOTACION reflejada obligatoriamante en el registro tipo ~C ,siendo opcional en
los restantes registros del mismo concepto.
Las referencias a un CODIGO
con y sin # y/o ##, se entienden únicas a un mismo concepto.
Unicamente puede haber un
concepto raíz en una base de datos u obra.
UNIDAD: Unidad de medida.
Existe una relación de unidades de medida recomendadas, elaborada por la
Asociación de Redactores de Bases de Datos de CONSTRUCCION.
RESUMEN: Resumen del texto
descriptivo. Cada soporte indicará el número de caracteres que admite en su
campo resumen.
PRECIO: Precio del
concepto. Un concepto puede tener varios precios alternativos que representen
distintas épocas, ámbitos geográficos, etc., definidos biunívocamente respecto
al campo [CABECERA] \ { ROTULO_IDENTIFICACION \ } del registro ~V. Cuando haya
más de un precio se asignarán secuencialmente a cada ROTULO definido; si hay
más ROTULOS que precios, se asignará a aquellos el último precio definido.
FECHA: Fecha de la última
actualización del precio. Cuando haya más de una fecha se asignarán
secuencialmente a cada precio definido, si hay más precios que fechas, los
precios sin su correspondiente fecha tomarán la última fecha definida.
Las fechas se definirán en
el formato DDMMAA; DD representa el día con dos dígitos, MM el mes y AA el año,
si la fecha tiene menos de 5 dígitos representa mes y año únicamente, si tiene
menos de tres, solo el año. Si se identifica la fecha con un número impar de
dígitos, se completará con el carácter cero por la izquierda.
TIPO: Tipo de concepto,
Inicialmente se reservan los siguientes tipos:
0 (Sin clasificar) 1 (Mano
de obra), 2 (Maquinaria y medios aux.), 3 (Materiales).
Este registro contiene la
descomposición de un concepto en otros a través de una o dos cantidades. El
mismo registro lo emplearemos para definir la descomposición de un concepto
tipo unidad de obra en conceptos tipo materiales, mano de obra, maquinaria y
auxiliares y para la descomposición de un concepto tipo capítulo en conceptos
tipo unidad de obra o subcapítulo.
~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \
RENDIMIENTO \ } |
CODIGO_PADRE: CODIGO del
concepto descompuesto.
CODIGO_HIJO: CODIGO de cada
concepto que interviene en la descomposición.
FACTOR: Factor de
rendimiento, por defecto 1.0
RENDIMIENTO: Número de
unidades, rendimiento o medición.
Cuando CODIGO_HIJO es un
porcentaje, éste tiene tres partes:
1.- Prefijo que forma una máscara indicando
sobre qué elementos se aplica el porcentaje. Si el prefijo es nulo, el porcentaje
se aplica a todas las líneas anteriores.
2.- Un juego de caracteres que puede ser:
'&' para porcentajes acumulables.
'%' para porcentajes no acumulables
expresados en tantos por uno.
3.- El resto del CODIGO permite diferenciar
un porcentaje de otro.
Ejemplo:
LD%N0001
LD
- Sobre todas las líneas anteriores cuyo CODIGO comience por LD
%
- No acumulable en tanto por uno.
N0001
- CODIGO diferenciador.
El
rendimiento será el porcentaje que se aplica sobre las líneas anteriores a la
actual y que queden afectadas por la máscara.
Ejemplo
de una línea de descomposición: L%N004 \\0.03\
Esta
línea representa un porcentaje del 0.03 por uno (3%) de todas las líneas
anteriores a la actual, incluso porcentajes, cuyo CODIGO comience por L y cuyo
texto estará en la DEFINICION del CODIGO 'L%N004'.
REGISTRO TIPO AÑADIR
DESCOMPOSICION
Con este registro se pueden
añadir líneas de descomposición, el registro tipo ~D cambia la descomposición
completa. Para añadir conceptos nuevos a una base de datos, además de definir los
registros C,T,L,D,... deberíamos posicionar los nuevos conceptos en el capítulo
o capítulos donde queramos situarlos, para ello, es necesario un registro que
nos permita añadir una o varias líneas de descomposición por cada capítulo
donde queramos posicionar un nuevo concepto.
~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \
RENDIMIENTO \ } |
Todos los campos tienen el
mismo significado que en el registro tipo D.
Este registro contiene el
texto descriptivo de un concepto
~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |
CODIGO_CONCEPTO: CODIGO del
concepto descrito
TEXTO_DESCRIPTIVO: Texto
descriptivo del concepto sin limitación de tamaño. El texto podrá contener
caracteres fin de línea (ASCII-13 + ASCII-10) que se mantendrán al reformatearlo.
REGISTRO TIPO
DESCRIPCION PARAMETRICA
Este registro contiene la
descripción paramétrica, bien en formato tradicional bien en formato API para
DLL, que incluye la DEFINICION de parámetros, descomposiciones, comentario de
ayuda a la selección de parámetros, resúmenes, textos, pliegos, claves e
INFORMACION comercial, en función de tablas, expresiones y variables, para una
familia de conceptos.
Este
registro puede adoptar dos formas:
~P | CODIGO_FAMILIA |
DESCRIPCION_PARAMETRICA |
Cuando CODIGO_FAMILIA está
lleno, o bien DESCRIPCION_PARAMETRICA está llena, o bien
DESCRIPCION_PARAMETRICA está vacía. En éste último caso se accede a la
descripción paramétrica de la familia a través del archivo NOMBRE.DLL.
~P | | DESCRIPCION_PARAMETRICA | NOMBRE.DLL
|
Cuando CODIGO_FAMILIA está
vacío, se refiere al paramétrico global.
Si DESCRIPCION_PARAMETRICA
está llena, el paramétrico global se establece a partir de ésta. Si
DESCRIPCION_PARAMETRICA está vacía y NOMBRE.DLL está lleno, se establece a
partir de éste. Si DESCRIPCION_PARAMETRICA y NOMBRE.DLL están llenos a la vez,
tan solo es válida DESCRIPCION_PARAMETRICA.
CODIGO_FAMILIA: CODIGO del
concepto tipo familia descrito. Si se utiliza un modelo de codificación
dependiente de los parámetros (ver Anexos 2 y 3), este código debe poseer un
carácter ‘$’ en su séptima posición, y los conceptos en los que se deriva
tendrán como código los seis primeros caracteres del mismo más un carácter
adicional por cada parámetro que posea.
DESCRIPCION_PARAMETRICA:
Ver Anexo 2.
NOMBRE.DLL: Ver Anexo 3.
Este registro contiene las
diferentes secciones y textos del pliego de condiciones de un concepto. El
pliego de condiciones se estructura de forma jerárquica con el Sistema de
Clasificación por Codificación y de forma facetada en varias secciones de
distinto contenido.
SECCIONES DE LOS PLIEGOS.
Cuando el primer campo del
registro ~L está vacío, el registro define los CODIGOs de las SECCIONES de cada
pliego y sus ROTULOs correspondientes. Este registro es único para una base de
datos u obra.
~L | | { CODIGO_SECCION_PLIEGO \
ROTULO_SECCION_PLIEGO \ } |
CODIGO_SECCION_ PLIEGO:
CODIGO que define cada SECCION o faceta del pliego.
ROTULO_SECCION_PLIEGO:
DEFINICION del ROTULO asociado a cada CODIGO correspondiente de cada SECCION o
faceta del pliego.
Ejemplo de las secciones de
los pliegos definidas para la Base de Datos de CONSTRUCCION de la Comunidad de
Madrid y la Base de Datos de CONSTRUCCION de la Comunidad Valenciana, indicando
CODIGO y ROTULO de la SECCION:
~L|
| DES\ DESCRIPCION Y COMPLEMENTOS AL TEXTO
\PRE\ REQUISITOS PREVIOS A
LA EJECUCIÓN
\COM\ COMPONENTES
\EJE\ EJECUCION Y
ORGANIZACION
\NOR\ NORMATIVA
\CON\ CONTROL Y ACEPTACION
\SEG\ SEGURIDAD E HIGIENE
\VAL\ CRITERIOS DE
VALORACION Y MEDICION
\MAN\ MANTENIMIENTO
\VAR\ VARIOS \ |
MODELO 1 DE TEXTOS DE LOS
PLIEGOS.
Cuando el primer campo del
registro ~L no está vacío, identifica a un concepto determinado. Puede haber un
registro de este tipo por cada concepto de una base de datos u obra.
~L | CODIGO_CONCEPTO |
{CODIGO_SECCION_PLIEGO \TEXTO_SECCION_PLIEGO \ } |
CODIGO_CONCEPTO: CODIGO del
concepto descrito, contenido en la base de datos.
CODIGO_SECCION_PLIEGO:
DEFINICION del CODIGO asociado a cada pliego.
TEXTO_SECCION_PLIEGO: Texto
asignado a cada faceta o SECCION del pliego de condiciones del concepto.
El pliego de condiciones de
cada concepto estará dividido con caracteres '\' en varias secciones o facetas,
pensadas para imprimirse juntas o por separado.
Los fines de línea de cada
SECCION del pliego se tratarán como en el REGISTRO TIPO TEXTO.
MODELO 2 DE TEXTOS DE LOS
PLIEGOS.
Otra opción permite asignar
el Pliego mediante párrafos de texto asociados a conceptos, utilizando el
siguiente esquema de registros, como forma alternativa a la anterior:
~Q | { CODIGO_CONCEPTO \ } | {
CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO
\ { ABREV_AMBITO; } \ } |
~J | CODIGO_PARRAFO | TEXTO_PARRAFO |
TEXTO_PARRAFO_RTF |
cOdigo_concepto: CODIGO del
concepto descrito, contenido en la base de datos. Será único para cada registro
~Q.
Este registro es de
sustitución de la INFORMACION, no es de acumulación.
COdigo_seccion_pliego:
DEFINICION del CODIGO asociado a cada pliego. Corresponde al definido en el
registro de cabecera de pliego ~L.
CODIGO_PARRAFO: CODIGO del
texto asociado a cada sección del pliego.
ABREV_AMBITO: Identificador
del ámbito geográfico de la sección del pliego. Se define en un registro
propio.
TEXTO_PARRAFO: Texto que
define el contenido de los pliegos que se asocian a un concepto y se identifica
con CODIGO_PARRAFO.
TEXTO_PARRAFO_RTF: Texto
que define el contenido de los pliegos que se asocian a un concepto y se
identifica con CODIGO_PARRAFO, con formato RTF, de forma opcional, siendo
siempre obligatorio el campo TEXTO_PARRAFO.
REGISTRO TIPO AMBITO
GEOGRAFICO
Establece el ámbito
geográfico correspondiente a los Pliegos de Condiciones asociados a la Base de
Datos. No necesariamente deberá corresponder al campo CABECERA definido en el
registro ~V.
~W | { ABREV_AMBITO \ AMBITO \ } |
ABREV_AMBITO: Nombre
abreviado que identifica el territorio geográfico al que se refiere. (Comunidad
Autónoma, Provincia, Región, Comarca, Localidad, etc.). El identificador < *
> (ASCII - 42) indica AMBITO_GENERAL, y representa todo el territorio
nacional.
AMBITO: Nombre completo del
territorio geográfico.
Existe una relación de
abreviaturas recomendadas, elaborada por la Asociación de Redactores de Bases
de Datos de CONSTRUCCION.
REGISTRO TIPO
INFORMACION GRAFICA.
~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO.
EXT \ } |
CODIGO_CONCEPTO: CODIGO del
concepto descrito en la base de datos y contenido en ella.
ARCHIVO_GRAFICO. EXT:
Nombre del archivo que contiene la INFORMACION gráfica. Se usarán como
referencia programas estandarizados de uso general, para chequear y verificar
el contenido del fichero. Estos programas serán:
Ficheros tipo ráster: Extensión .BMP, .PCX : Windows 3.1
Ficheros vectoriales: Extensión .WMF : Windows 3.1
Extensión
.DXF : Autocad 12
Windows
Define las entidades
suministradoras de documentación técnica, tarifas de precios y especificaciones
de los conceptos contenidos en la Base de Datos.
~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | {
TIPO \ SUBNOMBRE
\ DIRECCIÓN \ CP \ LOCALIDAD \
PROVINCIA \ PAIS \ { TELEFONO; }
\ { FAX; } \ { PERSONA_CONTACTO; } \
} |
CODIGO_ENTIDAD: CODIGO del
SCc que define a la entidad (empresa, organismo, etc.).
RESUMEN: Nombre abreviado
de la entidad
NOMBRE: Nombre completo de
la entidad.
TIPO: Se definen los
siguientes:
C
central.
D
delegación.
R
representante.
SUBNOMBRE: Nombre de la
delegación o representante en caso de que sea distinto de la central.
Normalmente estará vacío.
DIRECCIÓN \ CP \ LOCALIDAD
\ PROVINCIA \ PAIS: Dirección postal de la entidad con todos sus datos,
existiendo una dirección por cada subcampo tipo, de forma ordenada y
secuencial.
TELEFONO: Números de
teléfono de la entidad, de forma ordenada y secuencial respecto al subcampo
tipo, separados con el carácter < ; > (ASCII-59). Se indicará con nueve
caracteres numéricos, incluido el prefijo de la provincia.
FAX: Números de fax de la
entidad, con las mismas especificaciones que el campo anterior.
PERSONA_CONTACTO: Nombre de
las personas de contacto con la entidad y cargo que desempeña, podrá haber
varias asociadas a cada subcampo tipo, de forma que estén separadas por el
carácter ASCII-59.
REGISTRO TIPO RELACIÓN
COMERCIAL
Este registro establece los
vínculos entre los conceptos de una Base de Datos General ( BDG ) con los
productos comerciales de una Base de Datos Específica ( BDE ), y/o viceversa.
Así una Base de Datos ( BD
) podrá contener CONCEPTOS genéricos de una BDG, CONCEPTOS referentes a
productos comerciales de una BDE, o ambas a la vez.
~O | CODIGO_RAIZ_BD # CODIGO_CONCEPTO | |
{ CODIGO_ARCHIVO \ CODIGO_ENTIDAD #
CODIGO_CONCEPTO \ } |
CODIGO_RAIZ_BD #
CODIGO_CONCEPTO: Identificador de un concepto de una BD, donde:
. CODIGO_RAIZ_BD: Se refiere a la
identificación del CODIGO de la entidad que elabora la BD. Este CODIGO debe ser
facilitado por la entidad que elabora la BD, para evitar ambigüedades.
. CODIGO_CONCEPTO: Se refiere a un
concepto que pertenece a CODIGO_RAIZ_BD, y empleado por ésta en su sistema de
clasificación por codificación.
CODIGO_ARCHIVO: Se refiere
al nombre del archivo que, de existir, indica el lugar donde se encuentra la
INFORMACION referente a CODIGO_ENTIDAD # CODIGO_CONCEPTO. Sin embargo si dicho
CODIGO_ARCHIVO no existe, entonces indica que CODIGO_ENTIDAD # CODIGO_CONCEPTO
se encuentra en la misma BD.
CODIGO_ENTIDAD #
CODIGO_CONCEPTO: Identificador de un concepto de una BD, donde:
. CODIGO_ENTIDAD: Se refiere a la
identificación del CODIGO de la entidad a la que se le asocia INFORMACION. Este
CODIGO debe ser facilitado por la entidad que elabora la BD, de acuerdo con su
sistema de clasificación, para evitar ambigüedades.
. CODIGO_CONCEPTO: Se refiere a un
concepto que pertenece a CODIGO_ENTIDAD, y empleado por la entidad que elabora
la BD en su sistema de clasificación por codificación.
Cuando CODIGO_CONCEPTO se
refiera a un producto comercial, dicho CODIGO deberá ser facilitado por el
fabricante, y no podrá coincidir nunca con la designación de CODIGO_RAIZ_BD,
CODIGO_ENTIDAD o CODIGO_CONCEPTO, cuando éste se refiere a un concepto
genérico. Al tener dicho producto comercial un tratamiento de CONCEPTO, éste
puede utilizar todos los registros existentes en el formato para especificar su
INFORMACION asociada (precio, INFORMACION gráfica, etc.).
REGISTRO TIPO
INFORMACION TECNICA
Este registro contiene la
ESPECIFICACION de otros datos referentes al concepto, como por ejemplo, peso
específico o nominal, características físicas, cuantías geométricas,
propiedades físico-mecánicas, etc.
Estos datos podrían
emplearse en otras utilidades, como el cálculo de los coeficientes de
transmisión térmica, aislamiento acústico, etc.
El registro tipo
INFORMACION Técnica puede adoptar dos formas:
Si el primer campo está
vacío, éste sirve como diccionario de términos de INFORMACION Técnica a los
cuales se les podrá asociar una descripción y una unidad de medida.
~X |
| { CODIGO_IT \ DESCRIPCION_IT \ UM \ } |
Si el primer campo
identifica a un concepto, la INFORMACION que se especificará a continuación
serán la/las parejas de términos de INFORMACION técnica con sus respectivos
valores.
~X | CODIGO_CONCEPTO | { CODIGO_IT \
VALOR_IT \ } |
CODIGO_IT: CODIGO de la
INFORMACION Técnica descrita.
DESCRIPCION_IT: Texto
descriptivo de la INFORMACION Técnica, sin limitación de tamaño.
UM: En el caso que los
valores de la INFORMACION Técnica sean valores numéricos, se indicará su Unidad
de Medida, de acuerdo con el Sistema Internacional de Unidades de Medida.
CODIGO_CONCEPTO: CODIGO del
concepto descrito, contenido en la base de datos. Será único para cada registro
~X.
VALOR_IT: Valor alfabético
o numérico de la INFORMACION Técnica.
Indica el número de
decimales en cada campo numérico.
~K | DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM |
CI |
DN : Decimales del campo número de partes iguales de la hoja de
mediciones.
DD : Decimales de Dimensiones de las tres magnitudes de la hoja de
mediciones.
DS : Decimales de la línea de subtotal o total de mediciones
DR : Decimales de rendimiento y factor en una descomposición.
DI : Decimales del importe resultante de multiplicar rendimiento x
precio
del concepto.
DP : Decimales del importe resultante del sumatorio de los costes
directos del concepto.
DC : Decimales del importe total del concepto. (CD+CI).
DM : Decimales del importe resultante de multiplicar la medición
total del concepto por
su precio.
CI : Porcentaje de costes indirectos.
En este registro figuran
las mediciones (cantidades), en que interviene un concepto de un presupuesto en
la descomposición de otro de mayor rango.
En el intercambio de
archivos de presupuestos, deberá figurar siempre este registro, exista o no
desglose de mediciones.
Cuando se trate de
intercambiar una relación de registros ~M que recogen un listado de mediciones
no estructurado, no es necesario la disposición de un CODIGO raíz ni los
registros ~D complementarios. El operador indicará en estos casos cual es el
destino de la medición.
~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | {
POSICION \ } | MEDICION_TOTAL
| { TIPO \ COMENTARIO \ UNIDADES \
LONGITUD \ LATITUD \ ALTURA \ } |
CODIGO_PADRE: CODIGO del
concepto padre o concepto descompuesto del presupuesto.
CODIGO_HIJO: CODIGO del
concepto hijo o concepto de la línea de descomposición.
Este campo es opcional en
el caso de intercambiar mediciones no estructuradas, es decir, que no
pertenecen a la estructura general y completa de un presupuesto.
POSICION: Posición del
CONCEPTO_HIJO en la descomposición del CONCEPTO_PADRE, este dato permite
identificar la medición cuando la descomposición del concepto padre incluye
varios conceptos hijo con el mismo CODIGO, la numeración de las posiciones
comenzará con el 1.
El campo POSICION deberá
especificarse siempre en intercambio de presupuestos cuando éste sea completo y
estructurado, e indicará el camino completo de la medición descrita en la
estructura del archivo. Por ejemplo 3 \ 5 \ 2, indicará la medición
correspondiente al capítulo 3 del archivo; subcapítulo 5 del capítulo 3; y
partida 2 del subcapítulo 5. En mediciones no estructuradas este campo es
opcional.
MEDICION_TOTAL: Debe
coincidir con el rendimiento del registro tipo '~D' correspondiente.
Incorpora el sumatorio del
producto de unidades, longitud, latitud y altura o el resultado de expresiones
de cada línea, al leer este registro se recalculará este valor.
TIPO: Indica el tipo de
línea de medición de que se trate. Usualmente este subcampo estará vacío. Los
tipos establecidos en esta VERSION son:
'1': Subtotal parcial: En esta línea
aparecerá el subtotal de las líneas anteriores desde el último subtotal hasta
la línea inmediatamente anterior a ésta.
'2': Subtotal acumulado: En esta línea
aparecerá el subtotal de todas las líneas anteriores desde la primera hasta la
línea inmediatamente anterior a ésta.
'3': Expresión: Indicará que en el subcampo
COMENTARIO aparecerá una expresión algebraica a evaluar. Se podrán utilizar los
operadores '(', ')', '+', '-', '*', '/' y '^'; las variables 'a', 'b', 'c' y
'd' (que tendrán por valor las cantidades introducidas en los subcampos UNIDADES,
LONGITUD, LATITUD y ALTURA respectivamente); y la constante 'p' para el valor
Pi=3.1415926. Si la expresión utiliza alguna variable, ésta será válida hasta
la siguiente línea de medición en la que se defina otra expresión.
COMENTARIO: Texto en la
línea de medición. Podrá ser un comentario o una expresión algebraica.
UNIDADES, LONGITUD,
LATITUD, ALTURA: Cuatro número reales con las mediciones. Si alguna magnitud no
existe se dejará este campo vacío.
REGISTRO TIPO AÑADIR
MEDICIONES
Igual que el registro tipo
~M pero añade las líneas de medición de este registro a las ya existentes en
vez de substituir toda la medición como hace en aquel.
~N | [ CODIGO_PADRE \ ] CODIGO_HIJO | {
POSICION \ } |MEDICION
| {TIPO \ COMENTARIO \ UNIDADES \
LONGITUD \ LATITUD \ ALTURA \ } |
Este registro establece la
relación entre CODIGOs y descriptores del tesauro, para permitir la búsqueda de
conceptos mediante términos clave.
~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \ } |
CODIGO_CONCEPTO: CODIGO del
concepto descrito en la base de datos y contenido en ella.
CLAVE_TESAURO: Términos
clave relacionados con el concepto. Los términos compuestos (hormigón armado,
cartón-yeso, mortero mixto) se identificarán unidos mediante < _ > (ASCII
- 95), ( hormigón_armado, cartón_yeso, mortero_mixto...). No está permitido el
empleo del espacio en blanco.
REGISTRO TIPO CAMBIO
DE CODIGO
Con este registro se
posibilita el cambio o anulación de los CODIGOs de los conceptos, única unidad
de INFORMACION que no se podía modificar con los registros definidos
anteriormente.
~B | CODIGO_CONCEPTO | CODIGO_NUEVO |
CODIGO_CONCEPTO: CODIGO del
concepto a cambiar o anular. Debe existir y pertenece a un concepto contenido
en la BD
CODIGO_NUEVO: Nuevo CODIGO
para CODIGO_CONCEPTO, no debe existir previamente. Si este campo está vacío, se
entiende que hay que eliminar CODIGO_CONCEPTO.
~V | PROPIEDAD_ARCHIVO | VERSION_FORMATO \
DDMMAA | PROGRAMA_EMISION |
[CABECERA] \ { ROTULO_IDENTIFICACION
\ } | JUEGO_CARACTERES |
~C | {CODIGO \ } | UNIDAD | RESUMEN | {
PRECIO \ } | { FECHA \ } | TIPO |
~D | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \
RENDIMIENTO \ } |
~Y | CODIGO_PADRE | { CODIGO_HIJO \ FACTOR \
RENDIMIENTO \ } |
~T | CODIGO_CONCEPTO | TEXTO_DESCRIPTIVO |
~P | CODIGO_FAMILIA |
DESCRIPCION_PARAMETRICA |
~P | | DESCRIPCION_PARAMETRICA | NOMBRE.DLL
|
~L | | { CODIGO_SECCION_PLIEGO \
ROTULO_SECCION_PLIEGO \ } |
~L | CODIGO_CONCEPTO |
{CODIGO_SECCION_PLIEGO \TEXTO_SECCION_PLIEGO \ } |
~Q | { CODIGO_CONCEPTO \ } | {
CODIGO_SECCION_PLIEGO \ CODIGO_PARRAFO
\ { ABREV_AMBITO; } \ } |
~J | CODIGO_PARRAFO | TEXTO_PARRAFO |
TEXTO_PARRAFO_RTF |
~W | { ABREV_AMBITO \ AMBITO \ } |
~G | CODIGO_CONCEPTO | { ARCHIVO_GRAFICO. EXT
\ } |
~E | CODIGO_ENTIDAD | RESUMEN | NOMBRE | {
TIPO \ SUBNOMBRE
\ DIRECCIÓN \ CP \ LOCALIDAD \
PROVINCIA \ PAIS \ { TELEFONO; }
\ { FAX; } \ { PERSONA_CONTACTO; } \
} |
~O | CODIGO_RAIZ_BD # CODIGO_CONCEPTO | | {
CODIGO_ARCHIVO \
CODIGO_ENTIDAD # CODIGO_CONCEPTO \ }
|
~X |
| { CODIGO_IT \ DESCRIPCION_IT \ UM \ } |
~X | CODIGO_CONCEPTO | { CODIGO_IT \
VALOR_IT \ } |
~K | DN \ DD \ DS \ DR \ DI \ DP
\ DC \ DM | CIE |
~M | [ CODIGO_PADRE \ ] CODIGO_HIJO | {
POSICION \ } | MEDICION
| { TIPO \ COMENTARIO \ UNIDADES \
LONGITUD \ LATITUD \ ALTURA \ } |
~N | [ CODIGO_PADRE \ ]
CODIGO_HIJO | { POSICION \ } | MEDICION
| { TIPO \ COMENTARIO \ UNIDADES \
LONGITUD \ LATITUD \ ALTURA \ } |
~A | CODIGO_CONCEPTO | { CLAVE_TESAURO \ } |
~B | CODIGO_CONCEPTO | CODIGO_NUEVO |
Anexo 1.
Cambios respecto a FIEBDC-3/95.
A continuación se indica la
lista de apartados y registros del FIEBDC-3/95 afectados por ampliaciones y/o
modificaciones:
1.
FORMATO
FIEBDC-3. ESPECIFICACION.
2.
~V.
Registro tipo PROPIEDAD Y VERSION.
3.
~C.
Registro tipo CONCEPTO.
4.
~P.
Registro tipo DESCRIPCION PARAMETRICA.
5.
~O.
Registro tipo INFORMACION COMERCIAL, que pasa a denominarse RELACION COMERCIAL.
6.
Se
añade el registro ~X. Registro tipo INFORMACION TÉCNICA.
7.
Se
añade el nuevo tratamiento de DESCRIPCIÓN PARAMÉTRICA: API ESTANDAR para
descripciones paramétricas compiladas en DLL (Anexo 3).
Anexo 2.
DESCRIPCIÓN PARAMÉTRICA: Formato ESTANDAR.
Un concepto paramétrico es
el que define su CODIGO, resumen, texto, pliego, descomposición e INFORMACION
comercial de forma paramétrica, esto es, de una forma variable mediante tablas
y expresiones aritméticas y lógicas función de parámetros.
En la descripción
paramétrica se encuentran las siguientes sentencias:
Se definen las variables:
%A %B %C %D Parámetros seleccionados del
concepto, de "a" a "z" ~ 1 a 26.
%O %P %Q %R Parámetros seleccionados de la obra,
de "a" a "z" ~ 1 a 26.
%E Variable que define las condiciones de error.
$A $B $C $D Textos de los parámetros seleccionados del
concepto.
$O $P $Q $R Textos de los parámetros seleccionados de la
obra.
$E Variable que define los textos de error.
De forma equivalente las
variables %O a %R y $O a $R tomarían el valor correspondiente a los valores de
los parámetros generales de la obra.
Cualquier variable de la
'A' a la 'Z' tanto numérica (%) como alfanumérica ($) se puede definir o
redefinir con cualquier número de dimensiones para ser utilizada posteriormente
en expresiones.
Se definen las constantes
de la 'a' a la 'z' con los valores numéricos del 1 al 26 respectivamente, para
permitir referenciar los parámetros de forma nemotécnica. Para la utilización
de otro tipo de caracteres, se determinará en el texto de la opción del
parámetro seleccionado el carácter de sustitución que se desea utilizar, anteponiéndole
un carácter especial ' ! ' .Si dicho carácter no existe la sustitución se
realiza relacionando el carácter con la posición que ocupa.
Ejemplo: PBPO.2$ M3
Hormigón $B $A
\
CONSISTENCIA \ plástica \ fluida \ blanda \
\
RESISTENCIA \ H-125 \ H-150 \ H-175 \ H-200 \
El
derivado PBPO.2aa sería: M3 Hormigón H-125 plástica
Con
el carácter especial:
\
CONSISTENCIA \ !p plástica \ !f fluida \ !b blanda \
\
RESISTENCIA \ !2 H-125 \ !5 H-150 \ !7 H-175 \ !0 H-200 \
El
mismo derivado sería: PBPO.2p2 M3 Hormigón H-125 plástica.
Las variables numéricas
deben permitir valores reales en coma flotante de doble precisión (64bits) y
las variables alfanuméricas deben poder almacenar textos de cualquier tamaño.
Cualquier variable puede definirse,
en la misma asignación, con cualquier número y tamaño de dimensiones (hasta 4),
en la DEFINICION de dimensiones tendrán que hacerse explícitas todas las
dimensiones.
%U=...... # define una variable con un dato
numérico
$X(8)=..... # define una lista de 8 datos
alfanuméricos
%V(3,4)=
..... # define una tabla con 3 filas y 4
columnas de datos n.
Las variables %E y $E son
especiales para devolver errores producidos por selecciones de parámetros no
coherentes. En una evaluación secuencial de expresiones, si en una expresión la
variable %E adopta un valor distinto de 0, ha habido algún error, se interrumpe
la evaluación de expresiones y se presenta el contenido de la variable $E donde
se almacena el texto del error producido.
Pueden haber múltiples asignaciones
de %E, cada una de ellas precedida de su correspondiente texto de error,
asignación de $E.
Las constantes
alfanuméricas se definirán entre comillas ($I="incluida parte
proporcional").
En la descripción
paramétrica podemos encontrar los siguientes tipos de sentencias:
SENTENCIA DE ROTULOS DE
PARAMETRO:
\
<ROTULO del parámetro> \ { <ROTULO de la opción> \ }
Los
parámetros definidos, hasta 4, se irán asignando a las variables ABCD en el
orden que se encuentren.
SENTENCIA DE ASIGNACION
NUMERICA:
<variable
numerica> = <expresión numérica>
SENTENCIA DE ASIGNACION
ALFANUMERICA:
<variable
alfanumerica> = <expresión alfanumérica>
SENTENCIA DE
RENDIMIENTO:(CONCEPTOS DESCOMPUESTOS)
<texto
de sustitución de CODIGO> : <expresión numérica> [ : <exp.num.> ]
Se pueden definir uno u opcionalmente dos rendimientos, el defecto del
rendimiento opcional es 1.
SENTENCIA DE MEDIOS
AUXILIARES:
%:
<expresión numérica> (en tanto por cien)
%%:
<expresión numérica> (en tanto por uno)
SENTENCIA DE
PRECIO:(CONCEPTOS SIMPLES) :: <expresión numérica>
En
caso de figurar conjuntamente un juego de sentencias de rendimiento a modo de
descomposición y una sentencia de precio, tendrá prioridad la sentencia de
precio, ignorando las sentencias de rendimiento.
SENTENCIA DE COMENTARIO:
\
COMENTARIO \ ó \ C \ <texto del comentario> \
Si
existe texto de comentario, se presentará como ayuda a la selección de
parámetros junto a las opciones de éstos.
SENTENCIA DE SUSTITUCION:
\
RESUMEN \ ó \ R \ <texto de sustitución del texto resumido> \
\
TEXTO \ ó \ T \ <texto de sustitución del texto descriptivo> \
\
PLIEGO \ ó \ P \ { <texto de sustitución de pliego> \ }
\
CLAVES \ ó \ K \ { <texto de sustitución de clave> \ }
\
COMERCIAL \ ó \ F \ { <texto de sustitución de CODIGO>\ <expresión_numérica>\}
Se
considera que una sentencia continua en la línea siguiente si:
. Acaba en un operador
. Acaba sin cerrar comillas '"'
. Comienza con '\' y no acaba con '\'
<constantes> PI, números, "texto" ...
<funciones> ABS( ), INT( ), SQRT( ) ...
<variables> [$%] [A-Z] [(dimensión{,dimensión})]
<expresión
numérica>:
Son aquellas que dan como resultado
un número en función de constantes y variables numéricas, expresiones lógicas,
funciones y operadores.
por ejemplo: %I= %A + 3.17*(1+%B) +
ABS(%P+3.15*%Q)/12000
<expresión
alfanumérica>:
Son aquellas que dan como resultada
un texto en función de constantes y variables alfanuméricas, operadores y
funciones numéricas.
Una
expresión alfanumérica puede incluir expresiones lógicas.
por
ejemplo: $I="parte proporcional"+" de perdidas"*(%A>a)
añadir
" de perdidas" a $I si el valor actual de %A es mayor que <a> ó
1.
<expresiones
lógicas>:
Son
aquellas que dan como resultado VERDADERO o FALSO. En expresiones numéricas el
verdadero se considera como 1 y el falso como 0, en alfanuméricas el falso se
considera suprimir texto.
%I = 323*(%A=a) + 345*(%A=b) +
1523*($I=$A & $J=$B)
$I
= "blanco"*(%C=c) + "negro"*(%C=d)
<texto
de sustitución>:
En
los textos de sustitución la INFORMACION es un texto constante (sin comillas)
con variables embebidas en él. Se consideran variables los caracteres $ y %
inmediatamente seguidos por una letra de la A a la Z.
En
los textos de sustitución, las variables alfanuméricas se sustituyen por sus
contenido de texto correspondiente, las numéricas se sustituyen por las
constantes de la "a" a la "z" correspondientes al valor
numérico de su contenido.
En
la expresión del rendimiento, la primera parte de la sentencia es un texto de
sustitución que una vez sustituidas las variables será el CODIGO del concepto
al que le corresponde la expresión numérica de la segunda parte de la expresión
como rendimiento. Si el resultado es 0, se ignora la sentencia y no se
considera ese componente o línea de descomposición.
CONVENIOS DE NOTACION
(EBNF)
[a] Indica nada o "a"
{a} Indica cero o más ocurrencias de
"a"
[a-b] Indica cualquier valor desde "a" a
"b" inclusivas
[abc] Indica cualquiera de los valores a, b ó c
<abc> Indica descripción informal
abc Indica símbolo terminal
%[A-Z] Variable numérica
$[A-Z] Variable alfanumérica
Variables
predefinidas:
[%$][ABCD] Parámetros del concepto
[%$][OPQR] Parámetros de la obra
[%$]E Variable especial para reportar errores
[%$][A-Z][(dim{,dim})] Variables definibles
# Comentarios (el texto comprendido entre
este carácter y el siguiente final de línea exclusive, no se tiene en cuenta)
, Separador de datos
: DEFINICION de rendimiento
:: DEFINICION de precio
%: DEFINICION de medios auxiliares en tanto
por cien
%%: DEFINICION de medios auxiliares en tanto por
uno
OPERADORES NUMERICOS (De
menor a mayor precedencia)
+ Suma
- Resta
* Multiplicación
/ División
^ Operador elevado a
OPERADORES LOGICOS (De
menor a mayor precedencia)
@ Operador lógico O
& Operador lógico Y
< Menor
> Mayor
<= Menor o igual
>= Mayor o igual
= Igual
<> Diferente
! Operador lógico NO
FUNCIONES -- VALOR
RETORNADO:
ABS(n) Valor absoluto de "n"
INT(n) Parte entera de "n"
ROUND(n,d) Redondeo de "n" a "d"
decimales
SIN(n) Seno (grados sexagesimales)
COS(n) Coseno (grados sexagesimales)
TAN(n) Tangente (grados sexagesimales)
ASIN(n) Arco seno (gs)
ACOS(n) Arco coseno (gs)
ATAN(n) Arco tangente (gs)
ATAN2(x,y) Arco tangente con dos parámetros
"x" e "y"
SQRT(n) Raíz cuadrada de "n"
ATOF(a) ConVERSION de alfanumérico
"a" a numérico
FTOA(n) ConVERSION de numérico "n"
a alfanumérico
Cada instrucción irá en
distinta línea, a menos que la instrucción acabe en un operador en cuyo caso se
considera que sigue en la siguiente línea.
Si una línea acaba sin
haber cerrado las comillas '"' o delimitador '\', se considerará que sigue
en la línea siguiente. Los caracteres fin de línea (ASCII-13 + ASCII-10)
contenidos en las descripciones paramétricas se mantendrán al reformatear.
CONTROL DE ERRORES DE
SELECCION.
Es frecuente encontrar un
gran número de combinaciones de parámetros posibles pero tener pocas de ellas
resueltas. Para evitar que el operador del sistema pruebe distintas
combinaciones de parámetros consiguiendo en todas ellas un mensaje de error, el
sistema debe ser capaz de guiarle en la selección de combinaciones correctas.
Cada vez que el operador
define un parámetro, el sistema evaluará todas las sentencias posibles y en las
sentencias del tipo: %E= ...., función de parámetros
Si todos los parámetros
intervinientes en la expresión son conocidos, se evaluará ésta y si el
resultado fuera de ERROR se presentará la previa DEFINICION de $E con el
mensaje del error.
Si todos los parámetros
menos uno son conocidos, se irá dando valores al parámetro desconocido y
evaluando la expresión hasta recorrer todos los valores válidos del parámetro.
De alguna forma, el sistema "marcará" los valores que producen ERROR
del parámetro estudiado en la pantalla de selección, para ayudar al operador a
seleccionar las combinaciones correctas.
Cada vez que se defina o
redefina un parámetro el sistema actualizará todos los valores marcados en
pantalla, por ejemplo pondrá en "medio brillo" los ROTULOs de las
opciones cuya selección no sería compatible con los parámetros seleccionados
previamente.
Este sistema de control de
errores de selección es sencillo de implementar en cualquier soporte, pero
obliga a los redactores de los descompuestos paramétricos a definir
explícitamente las combinaciones de parámetros incorrectas, ya que con este
método no se podrían encontrar combinaciones no permitidas cuando en la
descomposición paramétrica se llama a otros descompuestos o precios
paramétricos.
PROCEDIMIENTO DE LECTURA
DE DESCRIPCIONES PARAMETRICAS.
Recorrer la descripción
paramétrica ejecutando los siguientes pasos:
1.
Eliminar
desde el carácter '#' inclusive hasta el siguiente cambio de línea exclusive.
2.
Cambiar
tabuladores (9) por caracteres ' ' (32)
3.
Eliminar
caracteres ' ' (32) delante y detrás de los caracteres '\'
4.
Unir
líneas, eliminando el fin de línea, en líneas que comienzan con '\' y no acaban
con '\', que terminan con un operador y en la separación de datos de una
variable matricial.
5.
Eliminar
todos los caracteres ' ' (32) en zonas no entrecomilladas ("...") o
delimitadas (\...\)
6.
Eliminar
líneas vacías.
7.
Leer y
evaluar secuencialmente las sentencias de la forma:
Si
la sentencia comienza con '\' leer el ROTULO hasta el siguiente '\', si el
ROTULO es:
COMENTARIO
ó C- Palabra o carácter reservado que identifica el siguiente ROTULO entre '\'
como comentario a la selección de parámetros.
RESUMEN
ó R- Palabra o carácter reservado que identifica el siguiente ROTULO entre '\'
como el texto de sustitución del resumen del concepto.
TEXTO
ó T- Palabra o carácter reservado que identifica el siguiente ROTULO entre '\'
como el texto de sustitución del texto descriptivo del concepto.
PLIEGO
ó P- Palabra o carácter reservado que identifica los siguientes ROTULOs entre
'\' como los textos de sustitución de las distintas secciones del pliego.
CLAVES
ó K- Palabra o carácter reservado que identifica los siguientes ROTULOs entre
'\' como los textos de sustitución de los términos claves asociados al
concepto.
COMERCIAL
ó F - Palabra o carácter reservado que identifica los siguientes ROTULOs entre
'\' como los textos de sustitución y tarifas de la INFORMACION comercial del
concepto.
Cualquier
otro ROTULO identificará el nombre del siguiente parámetro y los siguientes
ROTULOs entre '\' como los ROTULOs de las opciones de dicho parámetro.
Si
la sentencia comienza con '::' el resto de la misma debe ser una expresión
numérica indicadora del Precio, sólo en familias de conceptos simples (sin
descomposición) y sólo puede haber una sentencia de este tipo.
Si
la sentencia comienza con '%:' el resto de la misma debe ser una expresión
numérica indicadora del Porcentaje de Medios Auxiliares, sólo puede haber una
sentencia de este tipo.
En
otro caso si la sentencia contiene el carácter ':' la parte anterior a él es un
texto de sustitución del CODIGO de una línea de descomposición y la posterior
una expresión numérica, o dos separadas por ':', indicadoras de el o los
rendimientos de dicha línea de descomposición.
En
aquellos casos donde pueda aparecer un carácter ’%’ seguido de un carácter
alfabético que se considere como tal y no como una variable de sustitución,
deberá emplearse ’%%’, para evitar la ambigüedad que se puede producir entre
una variable numérica que deba ser sustituida, una sentencia de medio auxiliar
o un texto.
El
resto de sentencias deberán ser de asignación de la forma variable/s = expresión/es
RESUMEN DE TIPOS DE
SENTENCIAS
Después de realizado el
filtro descrito arriba, cada línea, tira de caracteres acabada en
(ASCII-13)(ASCII-10), será una sentencia de alguno de los siguientes tipos:
{ \ ROTULO_parámetro \ {
opción_parámetro \ } (13)(10) }
{ variable = expresión
(13)(10) }
{ CODIGO : rendimiento [ :
rendimiento ] (13)(10) }
[ %: ó %%:
medios_auxiliares (13)(10) ] % (tanto por cien) %% (tanto por uno)
[ :: expresión_precio
(13)(10) ]
[ \ COMENTARIO \ ó \ C \
texto_comentario \ (13)(10) ]
[ \ RESUMEN \ ó \ R \
texto_resumen \ (13)(10) ]
[ \ TEXTO \ ó \ T \
texto_descriptivo \ (13)(10) ]
[ \ PLIEGO \ ó \ P \ {
texto_faceta_pliego \ }(13)(10) ]
[ \ CLAVES \ ó \ K \ {
término_clave \ }(13)(10) ]
[ \ COMERCIAL \ ó \ F \ {
CODIGO_producto_comercial \ tarifa \ } (13)(10) ]
Anexo 3.
DESCRIPCIÓN PARAMÉTRICA: API ESTANDAR para descripciones paramétricas
compiladas en DLL. Revisión de Abril 1998
INTRODUCCION
Debido a la necesidad
expuesta por los desarrolladores de bases de datos paramétricas de ampliar las
posibilidades del lenguaje de descripción paramétrica, poder compilar éste por
eficiencia y protección de datos y posibilitar la protección contra copia de
bases de datos paramétricas, se establece la siguiente ESPECIFICACION.
En este documento se
definen los componentes necesarios para el desarrollo de descripciones
paramétricas en cualquier lenguaje de aplicaciones para Windows (C, C++,
Pascal, Fortran, etc.) y sin ninguna limitación. Se incluye la DEFINICION de un
API ESTANDAR en C, un ejemplo de base de datos en formato DLL de 32 bits
desarrollado en C++ y un ejemplo de aplicación con la implementación del
interfaz con el API en C, definidos ambos en Microsoft Visual C++. Se podría
implementar el interfaz con el API para otros compiladores y lenguajes para
acceder a las mismas DLL.
Es decir; es posible
construir una base de datos que cumpla este API utilizando para ello cualquier
lenguaje de programación que permita desarrollar librerías de enlace dinámico
Windows (DLL). Asimismo, es posible construir un programa que lea cualquier
base de datos de estas características utilizando lenguajes de aplicaciones
para Windows.
El juego de caracteres
utilizado en los textos devueltos por las funciones del API será el
especificado en el registro ‘~V’.
ARCHIVOS QUE DEBE CONTENER UNA BASE DE
DATOS
Una base de datos que se
desee distribuir con las definiciones paramétricas compiladas en DLL, debe
contener los siguientes archivos:
base.dll En este archivo, único para cada
base de datos y de nombre cualquiera pero extensión ‘.DLL’, se encuentran las
funciones del API que la base de datos ofrece a las aplicaciones para que éstas
obtengan la INFORMACION que contiene la base.
base.bc3 Archivo o archivos ASCII de la base de
datos en formato FIEBDC-3/98. Los registros '~P' de los conceptos cuya
descripción paramétrica se acceda a través del archivo ‘base.dll’, tendrán el
campo ‘DESCRIPCIÓN_PARAMÉTRICA’ vacío. El CODIGO del concepto de este registro
deberá coincidir con el CODIGO del registro ‘~C’ correspondiente y con el
CODIGO utilizado en las llamadas a las funciones del API, incluida(s) la(s)
posible(s) almohadillas (‘#’). Ejemplo:
~P|ABCD12$| |
El registro '~P' correspondiente al
paramétrico global, tendrá el campo ‘DESCRIPCIÓN_PARAMÉTRICA’ vacío, y tendrá
un tercer campo con el nombre del archivo DLL en el que se encuentren las
funciones del API de la base. Ejemplo:
~P| | | BASE.DLL |
La DEFINICION paramétrica
de los conceptos implementados de esta forma podrá estar en el mismo archivo
que las funciones del API (el archivo ‘base.dll’) o situado en otro u otros
archivos cualesquiera, conforme desee el desarrollador de la base de datos. Las
aplicaciones sólo accederán a las funciones del API incluidas en el archivo
‘base.dll’, y éstas serán las encargadas de acceder a la INFORMACION en la
forma que el desarrollador de la base implemente.
DEFINICION DEL API: FIEBDC.H
Único archivo que define el
ESTANDAR. En este archivo se define el API en C, que las descripciones paramétricas
en DLL ofrecen a las aplicaciones. Este interfaz permite definiciones
paramétricas de ilimitado número de parámetros e ilimitadas opciones por
parámetro. Se soportan dos modelos de codificaciones:
1.
Un
modelo de codificación independiente de parámetros, en el que el CODIGO de un
concepto paramétrico es completamente libre y el número de caracteres del
CODIGO es independiente del número de parámetros.
2.
Un
modelo dependiente de los mismos. Es el modelo que definía FIEBDC-3/95 y en el
que el CODIGO de un concepto paramétrico debe tener un símbolo ‘$’ en su
séptima posición y en el que se asigna de la 'a' a la 'z' las opciones 0 a 25
de cada parámetro, ampliándose en esta VERSION con los rangos 'A' a 'Z' y '0' a
'9' para que el número de opciones por parámetro en este modelo de codificación
pase a 62 (de 0 a 61).
Para que los programas
puedan determinar si una base de datos responde a uno u otro modelo, se ha
definido la función BdcCodificacion(), que se especifica más adelante y que
indica si el sistema de codificación usado en la base de datos es dependiente o
independiente.
Si se adopta el primer
modelo, no es posible averiguar ‘a priori’, a partir de un CODIGO ‘ABCDEFGHIJ’
de concepto, si éste es un derivado paramétrico ni de que concepto paramétrico
procede o con qué valores de sus parámetros. Por ello, es establece el
siguiente criterio de búsqueda:
1.
Si el
concepto existe con este CODIGO en la base, se escogerá dicho concepto.
2.
En
caso de no existir, se intentará localizarlo en la base de datos como
perteneciente a un concepto paramétrico ‘al estilo’ FIEBDC-3/95. En el ejemplo,
se intentará buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los parámetros
‘GHIJ’ (que implica pasarle a sus cuatro parámetros valores ‘31’, ‘32’, ‘33’ y
‘34’ respectivamente).
3.
En
caso de no existir, se intentará localizarlo en la DLL. Si ésta posee un modelo
de codificación dependiente, se utilizará el mismo criterio que en el punto
anterior: en el ejemplo, buscar el concepto paramétrico ‘ABCDEF$’ y pasarle los
parámetros ‘GHIJ’. Si la base posee un modelo independiente, se utilizará la
función ‘BdcDecodifica()’, tal como se especifica más adelante.
4.
Si no
se cumplen ninguna de las condiciones anteriores, se supone que el concepto no
existe en la base.
Vea en el archivo
‘fiebdc.h’ adjuntado la definición del API.
ESPECIFICACION DE LAS FUNCIONES DEL
API
1. FUNCIONES GENERALES
LONG EXPORTA
BdcCodificacion (
VOID
);
Propósito
Indica si la base de datos
utiliza un modelo de codificación dependiente o independiente del número y
valor de los parámetros.
Valor devuelto
Devolverá ‘0’ si la
codificación sigue un modelo dependiente (al ‘estilo’ FIEBDC-3/95), y ‘1’ si
sigue un modelo independiente.
LONG EXPORTA BdcTipoPliego
(
VOID
);
Propósito
Indica qué tipo o tipos de
Pliegos de Condiciones están implementados en la base. Dichos modelos se
especifican en el apartado ‘REGISTROS TIPO PLIEGOS’ de las especificaciones del
formato.
Valor devuelto
Devolverá ‘0’ si no está
implementado ningún tipo de pliego.
Devolverá ‘1’ si está
implementado el modelo uno de textos de pliegos. Es este caso, se utilizará la
función BdcPliego() para obtener los textos de los pliegos.
Devolverá ‘2’ si está
implementado el modelo dos de textos de pliegos. En este caso, se utilizarán
las funciones BdcCodigoParrafo() y BdcTextoParrafo() para obtener los textos de
los pliegos.
Devolverá ‘3’ si están
implementados tanto el modelo uno como el modelo dos.
2. FUNCIONES REFERENTES AL
PARAMÉTRICO GLOBAL
2.1. Accesibles en cualquier
momento
2.1.1. Obtención de sus
parámetros
LONG EXPORTA
BdcGloParNumero (
VOID
);
Propósito
Obtener el número de
parámetros de concepto paramétrico global.
Valor devuelto
Devuelve el número de
parámetros. En caso de error, la función devuelve -1. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcGloError().
LONG EXPORTA
BdcGloOpcNumero (
LONG par // número de parámetro del concepto
);
Propósito
Obtiene el número de
opciones de que consta el parámetro ‘par’.
Parámetros
par: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de parámetros del concepto paramétrico
global.
Valor devuelto
Devuelve el número de
opciones del parámetro ‘par’. En caso de producirse un error, devuelve –1. Para
obtener más INFORMACION sobre el error producido, llame a la función
BdcGloError().
LPCSTR EXPORTA
BdcGloParRotulo (
LONG par // número de parámetro del concepto
);
Propósito
Obtiene el rótulo que
identifica el parámetro ‘par’ del concepto.
Parámetros
par: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de parámetros del concepto paramétrico
global.
Valor devuelto
Devuelve el rótulo que
identifica el parámetro ‘par’ del concepto, como puntero constante ‘far’ a una
cadena de caracteres. La propia función es responsable de asignar memoria al
puntero. En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcGloError().
LPCSTR EXPORTA
BdcGloOpcRotulo (
LONG par, // número de parámetro del concepto
LONG opc // número de la opción del parámetro
);
Propósito
Obtiene el rótulo que
identifica la opción ‘opc’ del parámetro ‘par’ del concepto.
Parámetros
par: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de parámetros del concepto paramétrico
global.
opc: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de opciones que posee el parámetro
‘par’ del concepto paramétrico global.
Valor devuelto
Devuelve el rótulo que
identifica la opción ‘opc’ del parámetro ‘par’ del concepto, como puntero
constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. En caso de error, la función devuelve NULL. Para obtener
más INFORMACION sobre el error producido, llame a la función BdcGloError().
2.1.2. Mensajes / CODIGOs
de error
LONG EXPORTA BdcGloError (
LPCSTR *err // mensaje de error devuelto
);
Propósito
Obtiene el tipo de error
producido. Una vez leído, se inicializa el CODIGO de error.
Parámetros
err: Puntero a un puntero constante ‘far’ a
una cadena de caracteres. En él se almacena el mensaje de error referente al
error producido. La función es responsable de asignar memoria al puntero. Si no
existe un mensaje definido para el error existente, ‘*err’ apuntará a la cadena
vacía "".
Valor devuelto
Devuelve el CODIGO de error
producido. Vea al final el apartado ‘CODIGOs de los mensajes de error’ para más
INFORMACION.
2.1.3. Asignación de
opciones a los parámetros
BOOL EXPORTA BdcGloCalcula
(
LPLONG opcl, // lista de opciones de los parámetros
);
Propósito
Asigna los valores de los
parámetros del concepto paramétrico global..
Parámetros
opcl: Puntero a un vector (array) de LONGs con las
opciones que se desea fijar a cada parámetro. Las opciones se numeran empezando
por cero.
Valor devuelto
Devuelve ‘0’ si se ejecuta
correctamente. En caso de error, devuelve ‘-1’. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcGloError().
3. FUNCIONES REFERENTES AL
RESTO DE PARAMÉTRICOS
3.1. Accesibles en
cualquier momento
3.1.1. Lectura de un
concepto paramétrico
HANDLE EXPORTA BdcLee (
LPCSTR cod // CODIGO del concepto
);
Propósito
Lee el concepto paramétrico
identificado por ‘cod’.
Parámetros
cod: Puntero constante ‘far’ a una cadena de
caracteres con el CODIGO del concepto paramétrico a leer. Si se utiliza un
modelo de codificación dependiente, se asume que dicho CODIGO tenga 7
caracteres y que el séptimo sea ‘$’. Dentro del CODIGO, los caracteres pueden
ser cualesquiera salvo el 0x00 (que indica el final del CODIGO).
Valor devuelto
Si la función encuentra el
paramétrico, retorna un HANDLE distinto de cero. En caso de error, o si no
existe el paramétrico, la función devuelve cero.
3.1.2. Lectura de un
concepto paramétrico a partir del CODIGO completo del derivado
HANDLE EXPORTA
BdcDecodifica (
LPCSTR cod, // CODIGO completo del derivado paramétrico
LPLONG opcl // puntero al espacio de memoria a
); //
rellenar con las opciones
Propósito
Lee el concepto paramétrico
al que pertenece el concepto de CODIGO ‘cod’. El HANDLE y las opciones ‘opcl’
devueltas se pueden utilizar directamente en una llamada a BdcCalcula().
Parámetros
cod: Puntero constante ‘far’ a una cadena de
caracteres con el CODIGO del concepto del que se desea obtener el concepto
paramétrico a la que pertenece. Dentro del CODIGO, los caracteres pueden ser
cualesquiera salvo el 0x00 (que indica el final del CODIGO).
opcl: Puntero a un vector (array) de LONGs en el
que la función devolverá las opciones a las que corresponda el derivado
paramétrico. El array debe estar previamente dimensionado con al menos el
número de parámetros del concepto. Las opciones se numeran empezando por cero.
Valor devuelto
Si la función encuentra el
paramétrico, retorna un HANDLE distinto de cero. En caso de error, o si no
existe ningún concepto paramétrico del que el concepto ‘cod’ es derivado, la
función devuelve cero.
3.1.3. Mensajes / CODIGOs
de error
LONG EXPORTA BdcError (
HANDLE h, // identificador del concepto
LPCSTR *err // mensaje de error devuelto
);
Propósito
Obtiene tipo de error
producido.
Parámetros
h: Identificador (HANDLE) del concepto,
que debe ser obtenido en una llamada anterior a la función BdcLee().
err: Puntero a un puntero constante ‘far’ a
una cadena de caracteres. En él se almacena el mensaje de error referente al
error producido. La función es responsable de asignar memoria al puntero. Si no
existe un mensaje definido para el error existente, ‘*err’ apuntará a la cadena
vacía "".
Valor devuelto
Devuelve el CODIGO de error
producido. Vea al final el apartado ‘CODIGOs de los mensajes de error’ para más
INFORMACION.
3.2. Accesibles después de
BdcLee
3.2.1. Obtención de sus
parámetros
LONG EXPORTA BdcParNumero (
HANDLE h // identificador del concepto
);
Propósito
Obtiene el número de
parámetros de concepto paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve el número de
parámetros. En caso de error, la función devuelve -1. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().
LONG EXPORTA BdcOpcNumero (
HANDLE h, // identificador del concepto
LONG par // número de parámetro del concepto
);
Propósito
Obtiene el número de
opciones de que consta el parámetro ‘par’.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
par: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de parámetros del concepto.
Valor devuelto
Devuelve el número de
opciones del parámetro ‘par’. En caso de producirse un error, la función
devuelve -1. Para obtener más INFORMACION sobre el error producido, llame a la
función BdcError().
LPCSTR EXPORTA BdcParRotulo
(
HANDLE h, // identificador del concepto
LONG par // número de parámetro del concepto
);
Propósito
Obtiene el rótulo que
identifica el parámetro ‘par’ del concepto.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
par: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de parámetros del concepto.
Valor devuelto
Devuelve el rótulo que identifica
el parámetro ‘par’ del concepto, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al puntero. En
caso de error, la función devuelve NULL. Para obtener más INFORMACION sobre el
error producido, llame a la función BdcError().
LPCSTR EXPORTA BdcOpcRotulo
(
HANDLE h, // identificador del concepto
LONG par, // número de parámetro del concepto
LONG opc // número de la opción del parámetro
);
Propósito
Obtiene rótulo que
identifica la opción ‘opc’ del parámetro ‘par’ del concepto.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
par: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de parámetros del concepto.
opc: Número del parámetro. Debe ser un valor
entre ‘0’ y ‘n-1’, siendo ‘n’ el número de opciones que posee el parámetro
‘par’ del concepto.
Valor devuelto
Devuelve el rótulo que
identifica la opción ‘opc’ del parámetro ‘par’ del concepto, como puntero
constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. En caso de error, la función devuelve NULL. Para
obtener más INFORMACION sobre el error producido, llame a la función BdcError().
3.2.2. Obtención de un
comentario
LPCSTR EXPORTA
BdcComentario (
HANDLE h, // identificador del concepto
);
Propósito
Obtiene un texto de
comentario del concepto paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve el comentario del
concepto, como puntero constante ‘far’ a una cadena de caracteres. La propia
función es responsable de asignar memoria al puntero. En caso de error, la
función devuelve NULL. Para obtener más INFORMACION sobre el error producido,
llame a la función BdcError().
3.2.3. Asignación de
opciones de los parámetros y validación o cálculo del derivado
BOOL EXPORTA BdcValida (
HANDLE h, // identificador del concepto
LPLONG opcl, // lista de opciones de los parámetros
);
Propósito
Averigua si una determinada
combinación paramétrica es correcta o no.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
opcl: Puntero a un vector (array) de LONGs con las
opciones que se desea fijar a cada parámetro. Las opciones se numeran empezando
por cero.
Valor devuelto
Devuelve ‘0’ si la
combinación es correcta. En caso contrario, devuelve ‘-1’. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().
BOOL EXPORTA BdcCalcula (
HANDLE h, // identificador del concepto
LPLONG opcl, // lista de opciones de los parámetros
);
Propósito
Calcula los datos
correspondientes a un derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
opcl: Puntero a un vector (array) de LONGs con las
opciones que se desea fijar a cada parámetro. Las opciones se numeran empezando
por cero.
Valor devuelto
Devuelve ‘0’ si se ejecuta
correctamente. En caso de error, o de que la combinación no sea correcta,
devuelve ‘-1’. Para obtener más INFORMACION sobre el error producido, llame a
la función BdcError().
LONG EXPORTA BdcValidos (
HANDLE h, // identificador del concepto
LPBYTE *opcl, // lista de opciones de los parámetros de
todos los derivados válidos
);
Propósito
Obtiene las opciones de
cada parámetro de todos los derivados paramétricos válidos de la familia
paramétrica. Si no se desea implementar esta función en una determinada
familia, la función deberá devolver ‘0’. Está pensada para aquellas familias
que posean un número elevado de combinaciones posibles, en las que el averiguar
cuáles de ellas son válidas mediante sucesivas llamadas a las funciones
BdcCalcula() o BdcValida() es muy costoso en tiempo. En una sola llamada a esta
función es posible, en estos casos, obtener todas las combinaciones válidas.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
opcl: Puntero a una matriz (array) bidimensional
de BYTEs a rellenar por la función, en el que cada columna corresponde a un
derivado paramétrico válido, y cada fila corresponde a los valores de cada uno
de los parámetros. La matriz se devuelve al estilo de ‘C’; es decir, por
columnas. Las opciones se numeran empezando por cero. La propia función es
responsable de asignar memoria al puntero. La memoria asignada en bytes será el
número de combinaciones válidas multiplicado por el número de parámetros.
Valor devuelto
Devuelve el número de
derivados paramétricos válidos. En caso de que dicha información no esté
disponible, devuelve ‘0’. En caso de error, devuelve ‘-1’. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().
Ordenación
Las combinaciones válidas a
devolver se ordenarán teniendo en cuesta que el primer parámetro tiene más
precedencia que el segundo, éste que el tercero, y así sucesivamente.
Ejemplo
Si una familia paramétrica
tiene 3 parámetros, con 9, 10 y 11 opciones por parámetro respectivamente, el
número total de combinaciones posibles es 9x10x11 = 990. Si son válidas sólo
las siguientes cuatro (escritos en el orden especificado en el párrafo
anterior):
1.
Valores
‘0’, ‘5’, y ‘9’ de los parámetros uno al tres, respectivamente.
2.
Valores
‘7’, ‘6’ y ‘5’ de los parámetros uno al tres, respectivamente.
3.
Valores
‘8’, ‘2’ y ‘4’ de los parámetros uno al tres, respectivamente.
4.
Valores
‘8’, ‘2’ y ‘10’ de los parámetros uno al tres, respectivamente.
Entonces la función
devolverá los 4x3=12 bytes siguientes: 0, 5, 9, 7, 6, 5, 8, 2, 4, 8, 2 y 10.
3.2.4. Liberación de
memoria
BOOL EXPORTA BdcCierra (
HANDLE h // identificador del concepto
);
Propósito
Cierra el concepto
paramétrico y libera la memoria asignada.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve ‘0’ si realiza la
operación correctamente. En caso de error, la función devuelve ‘-1’. Para
obtener más INFORMACION sobre el error producido, llame a la función
BdcError().
3.3. Accesibles después de
BdcCalcula
3.3.1. Obtención del
derivado paramétrico
LONG EXPORTA BdcDesNumero (
HANDLE h // identificador del concepto
);
Propósito
Obtiene el número de
conceptos en los que se descompone el derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve el número de
elementos de su descomposición. Un valor de cero indicará que el concepto no
tiene descomposición. Es posible que un mismo concepto paramétrico posea
derivados simples y compuestos. En caso de error, la función devuelve ‘-1’.
Para obtener más INFORMACION sobre el error producido, llame a la función
BdcError().
LPCSTR EXPORTA BdcDesCodigo
(
HANDLE h, // identificador del concepto
LONG des // número del elemento de la descomposición
);
Propósito
Obtiene el CODIGO del
elemento número ‘des’ en el que se descompone el derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
des: Número del elemento de la descomposición
del concepto. Los elementos se numeran empezando por cero.
Valor devuelto
Devuelve el CODIGO del
elemento número ‘des’ en el que se descompone el derivado paramétrico, como
puntero constante ‘far’ a una cadena de caracteres. La propia función es
responsable de asignar memoria al puntero. En caso de error, la función
devuelve NULL. Para obtener más INFORMACION sobre el error producido, llame a
la función BdcError().
BOOL EXPORTA BdcRendimiento
(
HANDLE h, // identificador del concepto
LONG des, // número del elemento de la
descomposición
double FAR *ren // rendimiento a obtener
);
Propósito
Obtiene el rendimiento del
elemento número ‘des’ en el que se descompone el derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
des: Número del elemento de la descomposición
del concepto. Los elementos se numeran empezando por cero.
*ren: Puntero en el que devolver el rendimiento
deseado. El rendimiento puede ser positivo, cero o negativo.
Valor devuelto
Devuelve ‘0’ si se ejecuta
correctamente. En caso de error, el rendimiento se asigna a cero y la función
devuelve ‘-1’. Para obtener más INFORMACION sobre el error producido, llame a
la función BdcError().
BOOL EXPORTA BdcPrecio (
HANDLE h, // identificador del concepto
double FAR *pre // precio unitario a devolver
);
Propósito
Obtiene el precio unitario
en el caso de que el derivado paramétrico sea un simple. Es posible que un
mismo concepto paramétrico tenga como derivados tanto simples como compuestos.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
*pre: Puntero en el que devolver el precio
unitario. Dicho precio puede ser positivo, cero o negativo.
Valor devuelto
Devuelve ‘0’ si se ejecuta
correctamente. En caso de error, el precio se asigna a cero y la función
devuelve ‘-1’. Para obtener más INFORMACION sobre el error producido, llame a
la función BdcError().
LPCSTR EXPORTA BdcCodigo (
HANDLE h // identificador del concepto
);
Propósito
Obtiene el CODIGO del
concepto.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve el CODIGO del
concepto, como puntero constante ‘far’ a una cadena de caracteres. Si se ha
calculado un derivado paramétrico (se ha llamado a BdcCalcula), este CODIGO
será el del derivado paramétrico. En caso contrario, será el CODIGO del
concepto paramétrico. La propia función es responsable de asignar memoria al
puntero. En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().
LPCSTR EXPORTA BdcUnidad (
HANDLE h // identificador del concepto
);
Propósito
Obtiene la unidad de medida
del derivado paramétrico. Esta función permite que un concepto paramétrico
pueda generar elementos derivados con distintas unidades de medición. Para que
dicha función actúe, el registro ~C debe contener el carácter especial ‘*’
dentro del campo unidad de medida. Dicho carácter indica que la unidad de
medida de los conceptos derivados los debe proporcionar el API. Si el redactor
de la BD desea que la unidad de medida sea un valor a escoger por parte del
usuario, deberá además añadirse la unidad de medida como una propiedad más del
concepto paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve el texto
correspondiente a la unidad de medida del derivado paramétrico, como puntero
constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. Si no existe definido un texto resumido, la función
devuelve la cadena vacía "". En caso de error, la función devuelve
NULL. Para obtener más INFORMACION sobre el error producido, llame a la función
BdcError().
LPCSTR EXPORTA BdcResumen (
HANDLE h // identificador del concepto
);
Propósito
Obtiene el texto resumido
del derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función BdcLee().
Valor devuelto
Devuelve el texto resumido
del derivado paramétrico, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al puntero. Si
no existe definido un texto resumido, la función devuelve la cadena vacía
"". En caso de error, la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().
LPCSTR EXPORTA BdcTexto (
HANDLE h // identificador del concepto
);
Propósito
Obtiene el texto completo de
descripción del derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve el texto completo
de descripción del derivado paramétrico, como puntero constante ‘far’ a una
cadena de caracteres. La propia función es responsable de asignar memoria al
puntero. Si no existe definido un texto completo de descripción, la función
devuelve la cadena vacía "". En caso de error, la función devuelve NULL.
Para obtener más INFORMACION sobre el error producido, llame a la función
BdcError().
LPCSTR EXPORTA BdcPliego (
HANDLE h, // identificador del concepto
LONG formato, //
identificador del formato
LONG tipo, //
especifica si el pliego a obtener es de la familia o del derivado
LPCSTR seccion, //
código de la sección del pliego
LPCSTR ambito //
abreviatura del ámbito
);
Propósito
Obtiene el texto del
pliego, según el modelo uno.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
formato: Identificador del formato de texto.
Se definen, por el momento, los siguientes formatos: ‘BDCFMT_ASCII’ (si se
desea obtener el pliego en formato ASCII) y ‘BDCFMT_RTF’ (si se desea obtener
el pliego en formato RTF).
tipo: Especifica si se desea obtener el pliego
común de la familia paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado
(valor ‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber realizado
previamente una llamada a BdcCalcula().
seccion: Código de la sección del pliego cuyo
texto se desea obtener. Deberá ser una de las secciones especificadas en el
registro ~L, según se indica en el apartado ‘REGISTROS TIPO PLIEGOS’ de la
especificaciones del formato. Si no existen secciones definidas, el valor de
este parámetro no es utilizado.
ambito: Ámbito del cual se desea obtener el texto del
pliego. Corresponde a uno de los campos ‘ABREV_AMBITO’ especificados en el
registro ~W, según se indica en el apartado ‘REGISTRO TIPO ÁMBITO GEOGRÁFICO’
de las especificaciones del formato. Si no existen ámbitos definidos (no existe
un registro ~W), el valor de este parámetro es ignorado. En ese caso, es
posible que el ámbito sea un parámetro global de la base.
Valor devuelto
Devuelve el texto del
pliego del derivado paramétrico en el formato solicitado, como puntero
constante ‘far’ a una cadena de caracteres. La propia función es responsable de
asignar memoria al puntero. Si no existe definido un texto de pliego, la
función devuelve la cadena vacía "". En caso de error (por ejemplo
formato no soportado por la BDC), la función devuelve NULL. Para obtener más
INFORMACION sobre el error producido, llame a la función BdcError().
LPCSTR EXPORTA
BdcCodParrafo (
HANDLE h, // identificador del concepto
LONG tipo, //
especifica si el pliego a obtener es de la familia o del derivado
LPCSTR seccion, //
código de la sección del pliego
LPCSTR ambito //
abreviatura del ámbito
);
Propósito
Obtiene los códigos de los
párrafos de pliego, según el modelo dos.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
tipo: Especifica si se desea obtener el pliego
común de la familia paramétrica (valor ‘BDCPLI_FAMILIA’) o el del derivado
(valor ‘BDCPLI_DERIVADO’). En el primer caso, no es necesario haber realizado
previamente una llamada a BdcCalcula().
seccion: Código de la sección del pliego cuyos
códigos de párrafo se desea obtener. Deberá ser una de las secciones especificadas
en el registro ~L, según se indica en el apartado ‘REGISTROS TIPO PLIEGOS’ de
la especificaciones del formato. Si no existen secciones definidas, el valor de
este parámetro no es utilizado.
ambito: Ámbito del cual se desea obtener los códigos de
párrafo. Corresponde a uno de los campos ‘ABREV_AMBITO’ especificados en el
registro ~W, según se indica en el apartado ‘REGISTRO TIPO ÁMBITO GEOGRÁFICO’
de las especificaciones del formato. Si no existen ámbitos definidos (no existe
un registro ~W), el valor de este parámetro es ignorado. En ese caso, es
posible que el ámbito sea un parámetro global de la base.
Valor devuelto
Devuelve un texto con los
códigos de párrafo del pliego del derivado paramétrico, como puntero constante
‘far’ a una cadena de caracteres. La propia función es responsable de asignar
memoria al puntero. Si no existe definido ningún código de párrafo, la función
devuelve la cadena vacía "". En caso de error (por ejemplo ámbito no
soportado por la BDC), la función devuelve NULL. Para obtener más INFORMACION
sobre el error producido, llame a la función BdcError(). Los códigos irán
separados con el separador de subcampos habitual, es decir, el texto devuelto
tendrá la sintaxis
{ CODIGO_PARRAFO \ }
LPCSTR EXPORTA
BdcTexParrafo (
LONG formato // identificador del formato
LPCSTR cod_parrafo //
código del párrafo del pliego
);
Propósito
Obtiene el texto del pliego
del derivado paramétrico correspondiente al código de párrafo ‘cod_parrafo’,
según el modelo dos. El código de párrafo se obtiene mediante una llamada a la
función BdcCodParrafo.
Parámetros
formato: Identificador del formato de texto.
Se definen, por el momento, los siguientes formatos: ‘BDCFMT_ASCII’ (si se
desea obtener el pliego en formato ASCII) y ‘BDCFMT_RTF’ (si se desea obtener
el pliego en formato RTF).
cod_parrafo Código del párrafo del pliego cuyo texto
se desea obtener.
Valor devuelto
Devuelve el texto del
párrafo en el formato solicitado, como puntero constante ‘far’ a una cadena de
caracteres. La propia función es responsable de asignar memoria al puntero.
Esta memoria se liberará en la siguiente llamada a esta función dentro del
mismo proceso. Si no existe definido un texto de pliego con este código de
párrafo, la función devuelve la cadena vacía "". En caso de error
(por ejemplo formato no soportado por la BDC), la función devuelve NULL. Para
obtener más INFORMACION sobre el error producido, llame a la función
BdcError().
LPCSTR EXPORTA BdcClaves (
HANDLE h // identificador del concepto
);
Propósito
Obtiene las claves de
tesauro del derivado paramétrico.
Parámetros
h: Identificador (HANDLE) del concepto
paramétrico, que debe ser obtenido en una llamada anterior a la función
BdcLee().
Valor devuelto
Devuelve las claves de
tesauro del derivado paramétrico, como puntero constante ‘far’ a una cadena de
caracteres, con el mismo formato que el registro ‘~A’, es decir,
‘{CLAVE_TESAURO\}’. La propia función es responsable de asignar memoria al
puntero. Si no existen definidas claves del tesauro, la función devuelve la
cadena vacía "". En caso de error, la función devuelve NULL. Para obtener
más INFORMACION sobre el error producido, llame a la función BdcError().
4. MENSAJES DE ERROR
Los CODIGOs de error se
almacenan en un LONG (entero de 32 bits) de manera que cada error corresponde a
un bit. De esta forma, es posible definir hasta 32 CODIGOs de error que pueden
producirse de forma aislada o conjunta. Las llamadas a las funciones
BdcGloError() y BdcError() eliminan los CODIGOs de error producidos
anteriormente.
Por ejemplo, para saber si
un determinado error se ha producido con el concepto ‘Concepto’, se debe
utilizar la sintaxis:
const
char *Mensaje;
LONG
cod_err = BdcError ((HANDLE)Concepto, &Mensaje);
if
(cod_err & BDCERR_BASE_DATOS) {
// Se ha producido el error
‘BDCERR_BASE_DATOS’
...
}
4.1. CODIGOs de los
mensajes de error
BDCERR_CORRECTO No hay error.
BDCERR_BASE_DATOS Existe un mensaje de error. Es el caso
en el que la DEFINICION paramétrica se indica una combinación inválida y se
devuelve un mensaje de error explicativo.
BDCERR_PARAMETRO Se pasó a BdcCalcula o BdcGloCalcula un
parámetro inexistente.
BDCERR_OPCION Se pasó a BdcCalcula o BdcGloCalcula una
opción inexistente.
BDCERR_MAX_OPCIONES Se definieron más de 62 opciones en un
determinado parámetro.
BDCERR_NO_LEIDO Se intentó utilizar BdcCalcula() antes que
BdcLee().
BDCERR_NO_CALCULADO Se intentó acceder a datos de un derivado
paramétrico antes de utilizar BdcCalcula().
BDCERR_DESCOMPOSICION Se intentó acceder a un elemento de
la descomposición inexistente.
BDCERR_SIN_CODIGO No existe CODIGO definido.
BDCERR_SIN_MEMORIA Memoria insuficiente.
BDCERR_CONCEPTO_NULO Se pasó un HANDLE nulo.
BDCERR_FMT_NO_SOPORTADO El formato de texto solicitado no está
soportado por la BDC
EJEMPLOS
1. BASE DE DATOS EJEMPLO:
BASE.DLL
En los archivos que
acompañan a este documento (y que pueden encontrarse en la página web de la
asociación, ‘http://www.fiebdc.es’), se suministran tanto los archivos que
constituyen la base como los fuentes necesarios para construirla (compilarla).
El ejemplo construido posee
las siguientes características (no todas las bases que se realicen conforme a
este formato deben tener estas mismas características):
1.
Se ha
utilizado un modelo de codificación independiente de los parámetros.
2.
Se ha
utilizado el modelo uno de textos de pliegos.
3.
Existe
un paramétrico global, si bien el valor de su único parámetro sólo es utilizado
en el concepto ‘SBRG.1$’.
4.
Existe
un concepto (‘Esp$’) que no responde a los criterios de FIEBDC-3/95: posee más
de cuatro parámetros y el código de la familia sólo tiene 4 caracteres.
5.
Todos
los conceptos paramétricos poseen un CODIGO terminado en ‘$’, si bien el
formato no lo exige.
6.
Existe
un concepto (‘SBRG.1$’) cuyos derivados poseen un código que no responde a los
criterios de FIEBDC-3/95. Para la asignación de código se ha seguido la técnica
de definir una tabla de sinónimos: así, el concepto que resulta de escoger el
primer valor del único parámetro que posee, en lugar de poseer el código
‘SBRG.1a’ posee el código ‘SBRG.1_18’.
7.
Los
textos de los pliegos sólo están definidos en formato ASCII y para los derivados
paramétricos. No están divididos ni en secciones (facetas) ni en ámbitos.
1.1. Archivos para la
distribución de la Base de Datos.
Para distribuir la base
datos que se construyera con este ejemplo, se deberían proporcionar los
siguientes archivos:
base.dll DLL que contiene las descripciones
paramétricas y el interfaz ESTANDAR con aplicaciones (API).
base.bc3 Archivo ASCII de la base de datos en
formato FIEBDC-3/98. En el ejemplo, la base incluye en esta DLL el paramétrico
global de la base, así como las descripciones paramétricas de los conceptos
"ABPH.1$", "SBRG.1$", "EADR.3$" y
"Esp$", por lo que al menos debe contar con los siguientes registros:
~P| | | BASE.DLL |
~P| ABPH.1$ | |
~P| SBRG.1$ | |
~P| EADR.3$ | |
~P| Esp$ | |
1.2. Archivos necesarios
para la CONSTRUCCION de la Base de Datos.
Este ejemplo está preparado
para compilarse con Microsoft Visual C++ VERSION 2.2 o posterior como DLL de 32
bits. Sin apenas modificaciones, sería posible compilarlo como DLL de 16 bits o
utilizar el compilador Borland C++.
Para construir la DLL, son
necesarios los siguientes archivos:
fiebdc.h Archivo que define el formato.
base.h DEFINICION de variables y defines útiles para
la definición de las descripciones paramétricas.
interfaz.cpp Implementación de las funciones del API.
aplicat.cpp Implementación de las funciones de la
descripción paramétrica.
base.cpp Implementación de las descripciones
paramétricas de la base de datos en formato C++. Es la única parte que
escribirían los redactores de las bases de datos. Se ha utilizado una sintaxis
similar a la descripción paramétrica del formato FIEBDC-3/95, para facilitar
así el intercambio entre ambos formatos.
base.def DEFINICION de las funciones de
exportación del API.
2. APLICACION EJEMPLO:
PROGRAMA.EXE
En los archivos que
acompañan a este documento (y que pueden encontrarse en la página web de la
asociación, ‘http://www.fiebdc.es’), se suministran tanto el ejecutable
(‘Programa.EXE’) como los fuentes necesarios para construirlo (compilarlo).
Esta sencilla aplicación,
lee los conceptos que se incluyen en el propio fuente de la base BASE.DLL (en
una aplicación real, los conceptos se definen en los registros ~P de base.bc3),
y escribe en el archivo 'SALIDA.TXT' los rótulos de todos sus parámetros así
como todos los datos de todas sus combinaciones paramétricas.
Los fuentes son fácilmente
modificables para poder probar con el programa cualquier base de datos que
utilice paramétricos compilados en DLL de acuerdo con el API establecido en
este documento.
2.1. Archivos necesarios
para la CONSTRUCCION del programa ejemplo.
Este ejemplo está preparado
para compilarse con Microsoft Visual C++ VERSION 2.2 o posterior como
aplicación Windows 95 de 32 bits en modo consola. Sin apenas modificaciones,
sería posible compilarlo como aplicación de 16 bits o utilizar el compilador
Borland C++.
Para construir la
aplicación, son necesarios los siguientes archivos:
fiebdc.h Archivo que define el formato.
program.h Declaración de variables y funciones.
program0.c Funciones auxiliares de apertura y cierre
de la base de datos y tratamiento de los mensajes de error.
program.c Programa ejemplo.
Archivo con el texto de la especificación del formato FIEBDC98, así como los programas con los códigos fuente de los ejemplos - FIEBDC98.EXE (171 KB)