Leyendo el FIEBDC

Hola he estado leyendo el FIEBDC y me he propuesto entenderlo a fondo, sin embargo me he barado en el principio, quizas alguien me pueda explicar algunas cosas...

Empezando por el principio el primer registro seria

~V | [ PROPIEDAD_ARCHIVO ] | VERSION_FORMATO [ \ DDMMAAAA ] | [ PROGRAMA_EMISION ] | [ CABECERA ] \ { ROTULO_IDENTIFICACION \ } | [ JUEGO_CARACTERES ] | [ COMENTARIO ] |[ TIPO INFORMACIÓN ] | [ NÚMERO CERTIFICACIÓN ] | [ FECHA CERTIFICACIÓN ] |

He buscado en muchas bases de precios, catalogos en formatos bc3 y ninguno indica ningun valor en [ PROPIEDAD_ARCHIVO ] en el FIEBDC aparece "PROPIEDAD_ARCHIVO: Redactor de la base de datos u obra,fecha, …" cosa que no me dice mucho... sin embargo pienso que no es muy importante ni complicado...
Algo que si encuentro un poco complicado o enredado para mi son las relaciones biunivocas (me toco buscar en google "define:biunivoca") que se encuentran en el "ROTULO_IDENTIFICACION" que reza asi:
"ROTULO_IDENTIFICACION: Asigna secuencialmente títulos a los valores definidos en el campo PRECIO del registro ~C, y los conjuntos de campos de números de decimales del registro ~K, 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. Véanse los anexos 5 (Ámbitos territoriales) y 6 (Divisas).
En el caso de que en el registro ~V existan más campos ROTULO_IDENTIFICACION que campos PRECIO en el registro ~C o que conjuntos de campos de decimales en el registro ~K, se entenderá que el PRECIO y los conjuntos de campos de decimales de dicho resto serán iguales al último definido."
Y aunque al parecer explota muchas posibilidades tampoco he visto que lo llenen en ninguna base de precios, ni catalogos de los que he descargado..
Alguien sabe por qué?
Muchas gracias
 
El siguiente registro seria el
~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \ IVA | { DRC \ DC \ \ DFS \ DRS \ \ DUO \ DI \ DES \ DN \ DD \ DS \DSP\ DEC \DIVISA \ } | [ n ] |
Este al parecer es bastante sencillo puesto que cada Campo y Subcampo esta bien documentado con respecto a lo que significa cada uno, sin embargo los valores que pueden tomar son los menciona ni los restringe...
En un catalogo encontre lo siguiente:
"~V||FIEBDC-3/2002\240409|Menfis 6.5.23|\|ANSI|
~K|0\2\2\3\2\2\2\2\EUR\|0\0\0\0\16\|2\2\0\-6\3\-6\2\2\2\-6\2\3\EUR\||"
Lo que significaria:
~V||FIEBDC-3/2002\240409|Menfis 6.5.23|\|ANSI|
~K|DN=0\DD=2\DS=2\DR=3\DI=2\DP=2\DC=2\DM=2\DIVISA=EUR\|CI=0\GG=0\BI=0\BAJA=0\IVA=16\|DRC=2\DC=2\DFS=0\DRS=-6\DUO=3\DI=-6\DES=2\DN=2\DD=2\DS=-6\DSP=2\DEC=3\DIVISA=EUR\|n=|

Qué me parecio raro:

DS=2, DI=2, DRS=-6, DI=-6, DS=-6
DS: Decimales de la línea de subtotal o total de mediciones. Por defecto 2 decimales.
DI: Decimales del importe resultante de multiplicar rendimiento x precio del concepto. Por defecto 2 decimales
DRS: Decimales de los rendimientos de las unidades de obra y de los elementos compuestos, y decimales del resultado de la multiplicación de dichos rendimientos por sus respectivos factores. Por defecto 3 decimales.
DI: Decimales de los importes resultantes de multiplicar los rendimientos totales de los elementos compuestos y/o elementos simples por sus respectivos precios, decimales del importe resultante del sumatorio de los costes directos de la unidad de obra y decimales de los costes indirectos. Decimales de los sumatorios sobre los que se aplican los porcentajes. Por defecto 2 decimales.
DS: Decimales del total de mediciones. Por defecto 2 decimales.

Lo primero que no me parecio es que usaran la misma abreviatura para dos cosas diferentes, pero eso no es tan grave. Lo que si me dejo totalmente en la luna fue el valor "-6" que significa ese valor para una cantidad de decimales?

y la "n"
n: Es el número de la opción de la función BdcGloParNumero que se refiere al concepto divisa.
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().
que funcion tiene?

Espero que mis dudas sean pertinentes y puedan ser resueltas...
Muchas gracias...!
 
Lo que si me dejo totalmente en la luna fue el valor "-6" que significa ese valor para una cantidad de decimales?
Si lees con detenimiento la definición del formato encontraras:

REGISTRO TIPO COEFICIENTES.

Cuando el campo numérico aparece con signo negativo, indica número máximo de decimales. En caso contrario indica número exacto de decimales.

Un saludo.
 
Registro tipo coeficientes.

Aitor: Muchas gracias la verdad es que a veces paso por encima de las palabras y no me entero de muchas cosas, gracias por la aclaracion.

Ahora tengo una pregunta con respecto al FIEBDC-3/2007 y el /2004.
Al parecer entre el 2004 y el 2007 desaparecieron unos campos

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \ IVA | { DRC \ DC \ DRO \ DFS \ DRS \ DFO \ DUO \ DI \ DES \ DN \ DD \ DS \ DIVISA \ } | [ n ] |

~K | { DN \ DD \ DS \ DR \ DI \ DP \ DC \ DM \ DIVISA \ } | CI \ GG \ BI \ BAJA \ IVA | { DRC \ DC \ \ DFS \ DRS \ \ DUO \ DI \ DES \ DN \ DD \ DS \DSP\ DEC \DIVISA \ } | [ n ] |

sin ambargo nunca he visto que un programa, por ejemplo presto(no lo he probado en otros), utilice tantos marcadores para los decimales que va a utilizar...
Tu como autor del programa BC3Excel como los interpretaste, porque incluso en las mismas deficiones de tantas cantidades de decimales me veo un poco perdido...
Muchas gracias de antemano.
 

PachiB

Esmeralda
Te sugeriría que implementases una librería que interprete y genere información en ese formato a partir de una API razonable. Esa puede ser una buena manera de comprender cómo funciona y, si la compartes, probablemente sería una buena forma de perfeccionarla.
 
Api

De hecho estoy tratando de crear un programa que interprete los ficheros BC3 y genere un modelo relacional SQL bien formado con relaciones, integridad de referencias, etc... porque he notado que a veces al manejar grandes cantidades de datos es un lio que ni te imaginas que a mi forma de ver solo se solucionaria haciendo esto...
Si tienes mas ideas por favor comentalas...
un saludo
 
Registro ~D

El registro ~D describe la descomposicion de un concepto, en otros termino crea una relacion jerarquica entre dos conceptos, el codigo ~D presenta la siguiente estructura:
~D | CODIGO_PADRE | < CODIGO_HIJO \ [ FACTOR ] \ [ RENDIMIENTO ] \ > |
en condiciones ideales entiendo como funciona el registro ~D sin embargo me cuesta un poco plasmar las restricciones que van luego de la definicion ideal...

Mi duda es si alguien ha visto un registro formado de esta manera...

"Cuando el CODIGO_HIJO incluye el carácter ‘%’ o el carácter ‘&’ es un porcentaje sobre las líneas anteriores de la descomposición. El código de los porcentajes 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 carácter, que puede ser ‘&’ (porcentaje acumulable), o ‘%’ (porcentaje no acumulable).

3) Una serie de caracteres libres que permite diferenciar un porcentaje de otro.

Ejemplo: OP%N0001
OP: Sobre todas la líneas anteriores cuyo código comience por OP.
%: Porcentaje no acumulable
N0001: Código 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: O%N0001 \\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 código comience por O y cuyo texto estará en la definición del código 'O%N0001'.

Ejemplo: ~C | O%N0001 | % | Medios auxiliares |

A efectos de cálculo de precios compuestos los porcentajes acumulables y no acumulables se comportan de la misma forma. La diferencia entre ellos únicamente se manifiesta en el cálculo de cantidades de simples que hay en un presupuesto, para ello se consideraran los acumulables (‘&’) como porcentajes de perdidas, roturas u otros casos que impliquen una mayor cantidad de los recursos en líneas superiores. Los no acumulables (‘%’) se pueden referir a pequeño material u otros casos que no impliquen una mayor necesidad de recursos en líneas superiores.

La existencia del factor en líneas de descomposición y el uso casi nulo que se ha hecho de los porcentajes acumulables (‘&’) hace que éstos se mantengan por razones históricas pero se desaconseja su uso."

Muchas gracias!
 

_frany_

Novel
De hecho estoy tratando de crear un programa que interprete los ficheros BC3 y genere un modelo relacional SQL bien formado con relaciones, integridad de referencias, etc.
El fin de todo esto es crearte una nueva base de datos propia?
Pero esa base de datos que trabaje como un programa de mediciones?
Me interesa la idea.
Como piensas hacer la base y que entorno de programación vas a usar?

Revisando tu otro post veo que eres informático por lo que seguro te es mas fácil de crear que a mi.
Mi pregunta ahora es la siguiente:
1ª crees que con sql y un entorno programado en VB puedo obtener algo parecido a lo que hace presto?
2ª Crees que la velocidad seria parecida a presto , o superarla?

Todo esto es debido a que con dicha base podría personalizarme a mi antojo cualquier cosa. ( dentro claro está de mis conocimientos en basic)


Un saludo.
 
Hola a todos.

Os adjunto un esquema grafico de la relación entre los componentes de un fichero en formato FIEBDC (BC3) que puede que a alguno le interese.

DESCARGAR en:

No hay que dar ningún dato personal ni correo electronico para bajar el ejemplo solamente hay que pinchar en DOWNLOAD NOW with Filefactory Basic, pasarás a otra página donde te pide que esperes, cuando termine la cuenta atrás, en la parte inferior pincha en Download with Filefactory Basic.

Una vista en baja resolución del esquema:
 
Tu como autor del programa BC3Excel como los interpretaste, porque incluso en las mismas deficiones de tantas cantidades de decimales me veo un poco perdido...
Muchas gracias de antemano.
Yo también me pierdo porque ¿ para que ? tantas combinaciones, la disparidad de resultados finalmente con la combinación de decimales para los calculos suele ser la principal causa para la no concordancia entre presupuestos realizados con diferentes programas comerciales y que son intercambiados entre si , la verdad es que la inmensa mayoria utilizan la versión antigua ( más sencilla ) y por lo general con sus valores por defecto por omisión o indicándolos.
 
Hola a todos.
Primero que todo quiero agradecerles por mantener este hilo vivo, también me disculpo por no haber contestado ni agradecido por sus aportes.
Empezando por _frany_
El fin de todo esto es crearte una nueva base de datos propia?
Pero esa base de datos que trabaje como un programa de mediciones?
La idea es convertir una base de datos en formato BC3 a la misma base pero en formato SQL para poder cargarla a un motor de base de datos ya sea Oracle, MSQL Server, MySQL. Claro que para hacerlo para cada uno de estos toca hacer un script diferente, pero ese no es el problema más grande, el más grande es extraer los datos del BC3 y convertirlos en algo que yo pueda usar en mi esquema de tablas.

Inicialmente la base que se obtenga de la transformación no podrá funcionar con un programa de mediciones, puesto que hasta ahora todos los programas de mediciones o usan sus propios motores de base de datos (eg: Presto) otros trabajan con MSQLServer (Premeti creo) y cada quien tiene su propia forma de funcionar...la única diferencia es que esto será código abierto, totalmente abierto a contribuciones, mejoras, propuestas, etc.

Me interesa la idea.
Como piensas hacer la base y que entorno de programación vas a usar?
Con respecto al entorno de programación mi primera opción seria C# es mucho más amable y potente que Basic, dale una ojeada y te darás cuenta de lo que te digo...yo no "nací" programando en C# pero definitivamente es mucho más amable que C++ o incluso Java, y sobretodo hay muchísima información flotando en la web.

Revisando tu otro post veo que eres informático por lo que seguro te es mas fácil de crear que a mi
Efectivamente soy informático, me infiltre en esta página porque estoy haciendo prácticas en una empresa de ingenieros y esta fue la mejor página que encontré para investigar acerca de mis dudas.

Mi pregunta ahora es la siguiente:
1ª crees que con sql y un entorno programado en VB puedo obtener algo parecido a lo que hace presto?
2ª Crees que la velocidad seria parecida a presto , o superarla?
No solo creo, estoy seguro que con un motor SQL no solo se mejoran las prestaciones en cuestión a respuesta del programa, sino que por otro lado se obtiene muchísima más seguridad, persistencia, usabilidad, etc… en los datos.

La velocidad, no se todo lo que hace ni como lo hace presto, pero se me hace que presto a pesar que lo puede hacer mejor no lo hace porque le conviene, y sí podría ser incluso más rápido que Presto. Te explico porque. Hace tiempo los motores de bases de datos libres existen y se pueden embedir en la instalación de una aplicación, hasta esta versión apareció el presto servidor SQL y cuesta 10 veces que el presto servidor anterior que es tan lento que puedo merendar mientras está cargando al inicio o al guardar al final. El caso hasta ahora se le da por poner un motor de bases de datos decente.
El caso no sé pero me suena que presto se hace lento es porque quiere, no porque no pueda.

Todo esto es debido a que con dicha base podría personalizarme a mi antojo cualquier cosa. ( dentro claro está de mis conocimientos en basic)
Bueno espero que Basic te permita hacer muchas cosas y aunque el código no está comentado puedas entender no a la primera pero sí que alcances tus ideas. Publicare el proyecto para descargar y auto actualizar el código en tu entorno de programación (VS2010) en cuanto aprenda como hacerlo :s mientras tanto lo hare por descarga directa.

Os adjunto un esquema grafico de la relación entre los componentes de un fichero en formato FIEBDC (BC3) que puede que a alguno le interese
Para Aitor: Muchas gracias por tu interés y tus aportes, yo ya te conocía por la publicación del BC3Excel y me siento honrado por el hecho de haber tenido tu atención.

Un saludo.

Pd: aquí les dejo el código fuente de cada iteración, o mejor dicho de cada día de trabajo, cada uno va ganando funcionalidad y velocidad de ejecución. Hasta ahora solo genera un archivo de texto estilo log en el que registra información que recupero del BC3.
Primera Versión

Segunda Versión

Tercera Versión

Cuarta Versión

Pd: También les dejo un documento con el que medio voy apañándome cada vez que miro un registro, aunque en la gran mayoría de las veces me aburro y me pongo a escribir código, ahí voy comparando versión a versión del BC3 cada registro, también está incompleto pero poco a poco iré completándolo.

Registros:

Pd3: También les dejo links de descarga del Visual Studio 2010 Ultimate RC1 para que lo prueben y le cojan gustico a la programación en C# :D
 

PachiB

Esmeralda
Suena muy bien. ¡Ánimo!

(P.S. Personalmente hubiese elegido algo más expresivo y ágil como Python, Ruby o Perl para hacer algo así pero si te manejas con más soltura en C#...)
 
La verdad es que C# es el unico lenguaje que he usado desde que deje de ver C++ en la universidad (que fue hace poco mas bien) y no me he dado la oportunidad de aprender ninguno de los lenguajes que mencionaste, sin embargo me han dado buenas referencias de dos de los tres que mencionaste...
Gracias por tu interes, tratare de hacerlo lo mejor posible.

WOW! acabo de leer tu curriculum, eres todo un maestro! asi como lo dice el status de tu usuario... espero que al fin y al cabo te guste lo que salga de mi programita...
me gustaria preguntarte si podria consultarte por esta via cuando tenga dudas acerca de como hacer x o y cosa...
un saludo!
 
Bueno aqui he subido gran parte del codigo fuente, le faltan detalles pero por lo menos ya no cuelga la maquina.
un saludo
 

PachiB

Esmeralda
Jeje, gracias por los cumplidos pero seguro que no es para tanto :eek:

Si le dedicas tiempo, estudio y ganas de aprender seguro que sale algo muy interesante. Además, el problema que te has planteado es muy interesante.

Sobre lenguajes, cada uno tiene su punto fuerte y también influyen los gustos pero, personalmente, te recomiendo Python (o Ruby). Antes programaba fundamentalmente en C++ y ahora procuro evitar todo lo que no sea Python ya que es muy ágil y expresivo.

En este caso, C# te puede dar la ventaja de una distribución más fácil.

Sobre las preguntas, tú lánzalas, que si puedo te echo una mano, aunque cada vez estoy menos por aquí.

Una cuestión fundamental es que estudies código fuente de calidad y veas cómo hacen otras personas las cosas.
 
Hola Aitor, nuevamente muchisimas gracias por tu aporte. Sin embargo quisiera preguntarte, esos son todos los registros que utilizas?
Que haces con el resto de registros?
muchas gracias.
 
Siento no haber contestado antes pero es que no habia visto este mensaje último.

Que ¿ que hago con el resto de registros/parametros ? nada porque no son importantes.

Ahora bien si alguien quiere los pliegos de condiciones ó las imagenes/graficos adjuntos ó los marcas comerciales, etc.. pues se puede procesar sin mayor problema, pero yo solo he extractado lo único y verdaderamente importante (La estructura y partidas del presupuesto, las mediciones de las mismas y las descomposiciones de los precios complejos ),

El procesado de los registros de precios paramétricos son de una complejidad muy grande en su trasvase a una hoja de cálculo que sea funcional y yo no he visto la forma ni he ahondado mucho dado que no suele ser muy corriente en el intercambio de presupuestos en formato BC3.

Un saludo.
 
Hola ofajardof,

Yo te podría ayudar con esta API. A mi también me gustaría hacer un conversor de bc3 a SQL para poder explotar la info. Yo programo en PHP, Java.
Si puedes ponerte en contacto para comentar esto.

Un saludo
 
Hola nachoelg2 y ofajardof
Yo utilizo una base de datos MDB de Access desde Visual Basic pero se puede utilizar MySql o Sql Server o SQLite ó cualquier otra base de datos SQL (Oracle, Progress, etc.)
Os dejo el código para crear mi particular estructura (vosotros debeis ver cual es la vuestra necesaria) para almacenar los datos resultado de la conversión de un fichero BC3.

Public Sub CREATE_DATABASE_BC3FILE(FILENAME As String)
'---------------------------------------------------------------------------------------
'PROCEDURE: CREATE_DATABASE_BC3FILE
'AUTHOR: AITOR SOLOZABAL MERINO - ESTUDIO 3 - aitor@estudio3.es / aitorsolozabal@gmail.com
'PURPOSE: Crear una base de datos ACCESS fichero MDB mediante secuencias SQL
'---------------------------------------------------------------------------------------
'
Dim GCONN As ADODB.Connection
Dim GCMD As ADODB.Command
Dim STRSQL As String
Dim CATALOG
On Error GoTo CREATE_DATABASE_PARSER_BC3FILE_ERROR
' DELETE THE DATABASE IF IT ALREADY EXISTS.
On Error Resume Next
Kill FILENAME
On Error GoTo 0
'------------------------------------------------------
' CREATE NEW MDB ACCESS DATABASE FILE
'------------------------------------------------------
'! CreateObject found - adox.catalog
Set CATALOG = CreateObject("ADOX.CATALOG")
'CATALOG.CREATE "PROVIDER=MICROSOFT.JET.OLEDB.4.0;JET OLEDB:ENGINE TYPE=5;DATA SOURCE=" & FILENAME
CATALOG.Create "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & FILENAME
Set CATALOG = Nothing
'-------------------------------------------------------
' CREAR LA ESTRUCTURA DE TABLAS ( CAMPOS E INDICES )
Set GCONN = New ADODB.Connection
Set GCMD = New ADODB.Command
GCONN.ConnectionString = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & FILENAME ';USER ID=ADMIN;PASSWORD=;"
GCONN.Open
Set GCMD.ActiveConnection = GCONN
'-------------------------------------------------------CREAR TABLA CLIENTES
STRSQL = "CREATE TABLE [CLIENTES] ("
STRSQL = STRSQL & "ID_CLI TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "NOM_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "EMP_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "NIF_CLI TEXT (12) NULL ,"
STRSQL = STRSQL & "DIR_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "CP_CLI TEXT (5) NULL ,"
STRSQL = STRSQL & "POB_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "PRV_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "PAIS_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "FEC_CLI DATETIME NULL,"
STRSQL = STRSQL & "TLF_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "FAX_CLI TEXT (50) NULL ,"
STRSQL = STRSQL & "EMAIL_CLI TEXT (255) NULL ,"
STRSQL = STRSQL & "WEB_CLI TEXT (255) NULL ,"
STRSQL = STRSQL & "OBS_CLI TEXT NULL,"
STRSQL = STRSQL & "PRIMARY KEY(ID_CLI)"
STRSQL = STRSQL & ");"
GCMD.CommandText = STRSQL
GCMD.Execute
'-------------------------------------------------------CREAR TABLA PRESUPUESTOS
STRSQL = "CREATE TABLE [PRESUPUESTOS] ("
STRSQL = STRSQL & "ID_PRESUP TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "ID_CLI TEXT (20) NULL,"
STRSQL = STRSQL & "FICHERO_BC3 TEXT (255) NULL ,"
STRSQL = STRSQL & "CONTENIDO_BC3 TEXT NULL,"
STRSQL = STRSQL & "DN1 SMALLINT NULL,"
STRSQL = STRSQL & "DD1 SMALLINT NULL,"
STRSQL = STRSQL & "DS1 SMALLINT NULL,"
STRSQL = STRSQL & "DR SMALLINT NULL,"
STRSQL = STRSQL & "DI1 SMALLINT NULL,"
STRSQL = STRSQL & "DP SMALLINT NULL,"
STRSQL = STRSQL & "DC1 SMALLINT NULL,"
STRSQL = STRSQL & "DM SMALLINT NULL,"
STRSQL = STRSQL & "DIVISA1 TEXT (5) NULL,"
STRSQL = STRSQL & "COSTOS_INDIRECTOS_BC3 FLOAT NULL,"
STRSQL = STRSQL & "GASTOS_GENERALES_BC3 FLOAT NULL,"
STRSQL = STRSQL & "BENEFICIO_INDUSTRIAL_BC3 FLOAT NULL,"
STRSQL = STRSQL & "BAJA_BC3 FLOAT NULL,"
STRSQL = STRSQL & "IVA_BC3 FLOAT NULL,"
STRSQL = STRSQL & "DRC SMALLINT NULL,"
STRSQL = STRSQL & "DC2 SMALLINT NULL,"
STRSQL = STRSQL & "DRO SMALLINT NULL,"
STRSQL = STRSQL & "DFS SMALLINT NULL,"
STRSQL = STRSQL & "DRS SMALLINT NULL,"
STRSQL = STRSQL & "DFO SMALLINT NULL,"
STRSQL = STRSQL & "DUO SMALLINT NULL,"
STRSQL = STRSQL & "DI2 SMALLINT NULL,"
STRSQL = STRSQL & "DES SMALLINT NULL,"
STRSQL = STRSQL & "DN2 SMALLINT NULL,"
STRSQL = STRSQL & "DD2 SMALLINT NULL,"
STRSQL = STRSQL & "DS2 SMALLINT NULL,"
STRSQL = STRSQL & "DSP SMALLINT NULL,"
STRSQL = STRSQL & "DEE SMALLINT NULL,"
STRSQL = STRSQL & "DIVISA2 TEXT (5) NULL,"
STRSQL = STRSQL & "CODIGO_BC3 TEXT (20) NULL,"
STRSQL = STRSQL & "DESC_1_BC3 TEXT (255) NULL,"
STRSQL = STRSQL & "RENDIMIENTO_BC3 SMALLINT NULL,"
STRSQL = STRSQL & "PRECIO_BC3 FLOAT NULL,"
STRSQL = STRSQL & "PRECIO_CALCULADO FLOAT NULL,"
STRSQL = STRSQL & "DESC_2_BC3 LONGCHAR NULL,"
STRSQL = STRSQL & "CABECERA_BC3 TEXT (255) NULL,"
STRSQL = STRSQL & "PRIMARY KEY(ID_PRESUP)"
STRSQL = STRSQL & ");"
GCMD.CommandText = STRSQL
GCMD.Execute
'-------------------------------------------------------CREAR TABLA CONCEPTOS
STRSQL = "CREATE TABLE [CONCEPTOS] ("
STRSQL = STRSQL & "ID_PRESUP TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "CODIGO_BC3 TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "TIPO_BC3 TEXT (5) NULL,"
STRSQL = STRSQL & "UNIDAD_BC3 TEXT (5) NULL,"
STRSQL = STRSQL & "DESC_1_BC3 TEXT (255) NULL,"
STRSQL = STRSQL & "PRECIO_BC3 FLOAT NULL,"
STRSQL = STRSQL & "DESC_2_BC3 TEXT NULL,"
STRSQL = STRSQL & "PRECIO_CALCULADO FLOAT NULL,"
STRSQL = STRSQL & "DIFERENCIA_CALCULO FLOAT NULL,"
STRSQL = STRSQL & "CATEGORIA TEXT (1) NULL,"
STRSQL = STRSQL & "PRIMARY KEY(ID_PRESUP,CODIGO_BC3)"
STRSQL = STRSQL & ");"
GCMD.CommandText = STRSQL
GCMD.Execute
'-------------------------------------------------------CREAR TABLA LINPRECIO
'If DESCOMPOSICION_PRECIOS Then
STRSQL = "CREATE TABLE [LINPRECIO] ("
STRSQL = STRSQL & "ID_PRESUP TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "CONCEPTO_PADRE TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "CONCEPTO_HIJO TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "ORDEN_BC3 SMALLINT NOT NULL,"
STRSQL = STRSQL & "CANTIDAD_BC3 FLOAT NULL,"
STRSQL = STRSQL & "PRECIO_BC3 FLOAT NULL,"
STRSQL = STRSQL & "IMPORTE_CALCULADO FLOAT NULL,"
STRSQL = STRSQL & "PRIMARY KEY(ID_PRESUP,CONCEPTO_PADRE,ORDEN_BC3)"
STRSQL = STRSQL & ");"
GCMD.CommandText = STRSQL
GCMD.Execute
'End If
'-------------------------------------------------------CREAR TABLA LINPRESUP
STRSQL = "CREATE TABLE [LINPRESUP] ("
STRSQL = STRSQL & "ID_PRESUP TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "POSICION_BC3 TEXT (100) NOT NULL ,"
STRSQL = STRSQL & "CONCEPTO_PADRE TEXT (20) NULL ,"
STRSQL = STRSQL & "CONCEPTO_HIJO TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "CANTIDAD_BC3 FLOAT NULL,"
STRSQL = STRSQL & "CANTIDAD_CALCULADA FLOAT NULL,"
STRSQL = STRSQL & "DIFERENCIA_CALCULO FLOAT NULL,"
STRSQL = STRSQL & "PRECIO_CALCULADO FLOAT NULL,"
STRSQL = STRSQL & "IMPORTE_CALCULADO FLOAT NULL,"
STRSQL = STRSQL & "PRIMARY KEY(ID_PRESUP,POSICION_BC3)"
STRSQL = STRSQL & ");"
GCMD.CommandText = STRSQL
GCMD.Execute
'-------------------------------------------------------CREAR TABLA LINPRESUPDTL
'If DETALLE_MEDICIONES Then
STRSQL = "CREATE TABLE [LINPRESUPDTL] ("
STRSQL = STRSQL & "ID_PRESUP TEXT (20) NOT NULL ,"
STRSQL = STRSQL & "POSICION_BC3 TEXT (100) NOT NULL ,"
STRSQL = STRSQL & "ORDEN_BC3 SMALLINT NOT NULL ,"
STRSQL = STRSQL & "TIPO_LINEA_BC3 TEXT (1) NULL ,"
STRSQL = STRSQL & "COMENTARIO_LINEA_BC3 TEXT(255) NULL ,"
STRSQL = STRSQL & "UNIDADES_BC3 FLOAT NULL,"
STRSQL = STRSQL & "LONGITUD_BC3 FLOAT NULL,"
STRSQL = STRSQL & "LATITUD_BC3 FLOAT NULL,"
STRSQL = STRSQL & "ALTITUD_BC3 FLOAT NULL,"
STRSQL = STRSQL & "MEDICION_CALCULADA FLOAT NULL,"
STRSQL = STRSQL & "SUBTOTAL_CALCULADO FLOAT NULL,"
STRSQL = STRSQL & "PRIMARY KEY(ID_PRESUP,POSICION_BC3,ORDEN_BC3)"
STRSQL = STRSQL & ");"
GCMD.CommandText = STRSQL
GCMD.Execute
'End If
'------------------------------------------------------- CLOSE THE DATABASE CONNECTION.
GCONN.Close
On Error GoTo 0
Exit Sub
CREATE_DATABASE_BC3FILE_ERROR:
msgbox "Error " & Err.Number & " (" & Err.Description & ") IN PROCEDURE CREATE_DATABASE_BC3FILE OF MÓDULO1"
End Sub

Una imagen de las relaciones entre tablas en el mensaje siguiente.
 
Arriba