Abierto
Cerca

Fuentes de datos externas 1s 8.2. Fuentes de datos externas. Ejemplo de cadena de conexión

Para trabajar con datos que no son 1C, por ejemplo: una base de datos SQL, una base de datos Access, un archivo Excel y muchos otros, se introdujo en la plataforma tecnológica un mecanismo (objeto) llamado Fuentes de datos externas, a partir de la versión 8.2.14.

En este artículo, veamos cómo interactúa este objeto con el archivo de Excel al que estamos acostumbrados. Por ejemplo, es necesario leer datos de un archivo *.xls en una base de datos 1C en algunos intervalos. Si antes necesitábamos inicializar usando objetos Com, luego crear una tabla de valores, leer datos línea por línea, ahora estas manipulaciones simplemente desaparecen. Cuando utilizamos una fuente de datos externa, podemos consultar y recuperar datos al instante.

Digamos que tenemos un libro de Excel con el siguiente contenido. Del cual necesitamos leer datos.

En primer lugar, en el modo configurador, agregue una nueva fuente de datos y llámela Excel.

Ahora necesitamos agregar datos, una tabla con los campos que tendremos en 1C. Creémoslas de la misma manera que se nombran las columnas en el archivo. Para hacer esto, vaya al objeto creado y en la pestaña Datos, haga clic en Agregar. Aquí recomiendo encarecidamente crearlo manualmente, ya que con bastante frecuencia surgen problemas cuando 1c-ina intenta configurarlo automáticamente.

Llamemos a nuestra tabla DataTable. Después de eso, vaya a la pestaña Datos y cree campos (similares a un archivo).

En las propiedades de cada campo debes especificar Nombre, Tipo y Nombre en la fuente de datos (idéntico al archivo).
Asigne un nombre en la fuente de datos. Aquí indicamos el nombre de la hoja en *. xls con un “$” añadido al final. Tenemos Lista1$.
Asegúrese de especificar los campos clave. Aquí, desde la teoría de las bases de datos, es necesario indicar el campo por el cual la fila será completamente única.
Campo de presentación: indicamos el campo que proporcionará una breve representación de la línea, en nuestro caso Nomenclatura.

¡Todo! En realidad, esta es toda la configuración. A continuación, sólo necesita especificar la cadena de conexión en cualquier procedimiento y después de conectarse, podrá trabajar con la fuente de datos.

Cadena de conexión para archivos XLSX (Office 2007 y posteriores)

Controlador=(Controlador de Microsoft Excel (*.xls, *.xlsx, *.xlsm, *.xlsb));DBQ=D:\FileExcel.xlsx;

Cadena de conexión para archivos XLS y anteriores.

Controlador=(Controlador de Microsoft Excel (*.xls)); ID del conductor=790; DBQ=D:\ArchivoExcel.xls;

Creemos un nuevo procesamiento externo que se conectará e informará la conexión.

Procedimiento ButtonExecutePress(Button)ConnectionParameters = NewConnectionParametersExternalDataSource; Parámetros de conexión. ConnectionString= “Controlador= (Controlador de Microsoft Excel (*. xls)); ID del conductor = 790; DBQ= D:\fruta. xls; "; Fuentes de datos externas. Sobresalir. Establecer parámetros de conexión general (parámetros de conexión); Fuentes de datos externas. Sobresalir. Establecer una conexión(); Solicitud = Nueva Solicitud(); Pedido. Texto = "SELECCIONAR | Tabla de datos. Código, | Tabla de datos. Nomenclatura, | Tabla de datos. Unidad, | Tabla de datos. Cantidad | DESDE | Fuente de datos externa. Sobresalir. Mesa. Tabla de datos AS Tabla de datos"; TK = Solicitud. Ejecutar ( ). Descargar(); Informe ("Conectado"); Fin del Procedimiento

Si establecemos un punto de interrupción y miramos lo que tenemos en la especificación, veremos lo siguiente:

PD No debe haber líneas vacías en el archivo de Excel antes de los nombres de los campos; de lo contrario, se producirá un error odbc. sqlstate 07002 (el controlador Odbc Excel tiene muy pocos parámetros).

Fuentes de datos externas 1C: un objeto de metadatos relativamente nuevo 1C 8.3 y 8.2, con el que es posible conectarse a fuentes de datos externas de 1C: tablas SQL, Excel, Access, FoxPro (dbf), otra base de datos de 1C, Oracle, Paradox (db) , - e incluso leer desde archivos txt/csv simples.

Esto ofrece muchas posibilidades de interoperabilidad con otros sistemas. Miremos más de cerca.

Configuración de fuentes de datos externas en 1C 8

La configuración de fuentes externas es individual para cada tipo de sistema. Pero, como regla general, la parte general de la configuración es la misma: configurar la cadena de conexión:

Obtenga 267 lecciones en video sobre 1C gratis:

Si la cadena de conexión se especifica correctamente, el sistema le pedirá que seleccione la tabla deseada de la base de datos. Como resultado, obtendremos una tabla preparada en la que podemos especificar el campo clave (un campo único) y el campo de presentación (cómo se reflejará el registro en 1C):

Usando fuentes de datos externas en 1C 8.3

Las fuentes de datos externas en 1C se pueden utilizar como otras tablas de bases de datos. La plataforma genera automáticamente un formulario para ellos si no se especifica ninguno. También es posible utilizar datos de fuentes externas en las consultas.

En la versión 8 del programa 1C, los desarrolladores agregaron a la funcionalidad la capacidad de conectar bases de datos de terceros y obtener información de ellas directamente desde el configurador, sin utilizar conexiones COM ni objetos OLE. Esta característica se implementa mediante un nuevo objeto: "Fuentes de datos externos".

Las fuentes de datos externas en 1C se pueden utilizar de la misma forma que otras tablas del sistema:

  1. Al crear informes y cálculos utilizando un sistema de composición de datos (DCS);
  2. Para obtener enlaces a información almacenada en fuentes de terceros;
  3. Para cambiar datos almacenados en tablas;
  4. Al generar solicitudes.

Es importante saber que este mecanismo no está diseñado para funcionar con otras bases de datos de 1C, ya que el modelo operativo 1C.Enterprise en sí no implica interferencia con los datos a nivel de tablas físicas.

Creando una nueva fuente

Agregar una nueva fuente externa al programa se produce en el modo "Configurador". Hay una rama correspondiente en el árbol de configuración (Fig. 1)

Tendrás que trabajar duro al crear una nueva fuente, a pesar de que el formulario del nuevo objeto tiene sólo cuatro pestañas:

  1. Básico;
  2. Datos;
  3. Funciones;
  4. Derechos.

La primera pestaña tiene sólo un parámetro interesante: el modo de control de bloqueo. Si no tiene preguntas sobre el bloqueo de datos en transacciones o las complejidades de paralelizar los flujos de información, puede dejar esta opción en modo de bloqueo automático. Sin embargo, este enfoque puede dar lugar a restricciones excesivas (por ejemplo, cuando, en lugar de un registro separado, el programa bloquea toda la tabla física, privando a otros usuarios de la posibilidad de trabajar con ella).

Los bloqueos administrados, a diferencia de los automáticos, utilizan el mecanismo de transacción inherente al propio programa, y ​​no al DBMS, lo que permite transferir las capturas de tablas a un nivel mucho más bajo.

Al establecer este parámetro en "Automático y administrado", le brindamos al sistema la capacidad de determinar qué modo usar accediendo directamente a una propiedad similar para cada tabla específica.

Pestaña “Datos” del formulario de propiedades de fuente externa

La forma de la pestaña "Datos" se muestra en la Fig. 2

Arroz. 2

Aquí podemos agregar tablas y cubos de fuentes externas. Hay dos formas de agregar una tabla:

  1. Manualmente, se abrirá frente a nosotros el formulario para agregar una tabla (Fig. 3);

Arroz. 3

  1. O seleccione de la lista de tablas fuente físicas (Fig. 4), en cuyo caso se abre un constructor especial frente a nosotros.

Arroz. 4

Echemos un vistazo más de cerca al formulario para agregar una tabla. La propiedad "Nombre" se utiliza para identificar de forma única un objeto en la configuración.

La comparación del objeto de metadatos y la tabla física final se realiza a través de la propiedad “Nombre en la fuente de datos” ubicada en la pestaña “Avanzado” (Fig. 5)

Arroz. 5

A continuación debemos determinar el tipo de tabla, o más bien su objetividad. Si los datos almacenados en una estructura se pueden identificar de forma única a través de cualquier campo, la tabla puede ser de objeto. Si la individualidad de un registro está determinada por un conjunto de campos clave, la tabla debe tener un tipo que no sea de objeto.

Comparando dichas tablas con otros objetos de metadatos, se puede dar la siguiente analogía:

  • Las tablas de objetos son libros de referencia;
  • Los no objetos son registros de información.

El conjunto de campos clave se define en el siguiente parámetro de formulario (“Campos clave”). Este campo es obligatorio; si lo deja en blanco, no se podrá guardar la configuración.

Como puede verse en la Fig. 5, algunos campos y botones del formulario no son editables:

  • Expresión en la fuente de datos;
  • Tipo de datos de tabla;
  • Campo de presentación;
  • Ver controladores.

Se pueden utilizar solo después de que completemos los campos de la tabla, definamos su tipo y les asignemos identificadores (Fig.6).

Arroz. 6

Aquí debe prestar atención al parámetro "Permitir nulo" si esta casilla de verificación está marcada, no es recomendable utilizar dicho campo como clave.

Constructor de mesas

Quizás el punto más importante e interesante al trabajar con fuentes externas sea la creación de una cadena de conexión. Su constructor se abre si hace clic en el botón con tres puntos al lado del parámetro "Cadena de conexión".

En primer lugar, se nos pedirá que decidamos el controlador que se utilizará para la conexión (Fig. 7)

Arroz. 7

La definición incorrecta de este parámetro no le permitirá conectarse a una base de datos de terceros. También debe comprender que no todos los controladores especificados en la lista desplegable se pueden utilizar para generar automáticamente una cadena de conexión. Si la plataforma genera un error (Fig. 8), entonces la cadena de conexión deberá ingresarse manualmente.

Fig.8

Arroz. 9

La línea en sí es una construcción estrictamente regulada.

Cadena de conexión de ejemplo

Consideremos una base de datos de terceros creada en Microsoft Access y ubicada en la raíz de la unidad D. Para conectar esta base de datos debemos usar el controlador apropiado, pero al seleccionarlo en el constructor de filas se genera el error Fig. 8.

Nosotros mismos configuraremos los parámetros de conexión.

Driver=(Microsoft Access Driver (*.mdb)): así es como se ve la primera parte de la línea. Entre llaves definimos el controlador.

Para archivos de Excel, se verá como (Controlador de Microsoft Excel (*.xls)), para archivos de Excel creados en una oficina anterior a 2003, la línea del controlador se verá como (Controlador de Microsoft Excel (*.xls, *.xlsx, *. xlsm, *.xlsb)).

Separando este parámetro del siguiente con una coma, debemos introducir la dirección de nuestro almacenamiento (en nuestro caso DBQ=D:\Database1.mdb).

Sumando estos dos parámetros, obtenemos Driver=(Microsoft Access Driver (*.mdb));DBQ=D:\Database1.mdb. Al escribir este parámetro, obtenemos acceso a las estructuras internas de esta base de datos.

Para el objeto “Fuente externa”, no basta con crearlo en la configuración; también debe estar conectado en modo “Enterprise”. Esto se puede hacer desde el menú “Todas las funciones”->Fuentes externas. Cuando ingresamos a nuestra tabla por primera vez, debemos ingresar la misma cadena de conexión en el modo "Enterprise".

¿Por qué esta oportunidad es de tanto interés? Cualquier persona que haya programado en 1C y esté bastante familiarizada con SQL y esté al menos familiarizada en general con la arquitectura y los principios de desarrollo de otras plataformas tecnológicas para aplicaciones empresariales le dirá con firmeza lo que más le gusta de 1C. Por supuesto, el generador de consultas es el mecanismo más conveniente y reflexivo para escribir consultas para recuperar datos de estructuras relacionales que he encontrado personalmente. Y ahora 1C nos ha brindado una oportunidad maravillosa de usarlo no solo con 1C, sino también con cualquier otra mesa. Es sólo que este "barril de miel" tiene muchas "moscas en el ungüento". Lo primero es lo primero:

1) Configuración y uso- sin "bailar con pandereta" no funcionará
a) Agregue una fuente de datos externa: no parece complicado
b) marque la casilla de verificación "Seleccionar de la lista" (obligatoria) esto es necesario para verificar la funcionalidad desde el principio y le evitará problemas innecesarios
c) - asegúrese de hacer clic en "..." - la conexión es ODBC. No OLEDB como todos estamos acostumbrados, sino un nivel más bajo

D) Pero aquí ten MUCHO CUIDADO.

Este es un controlador ODBC; si usa la versión cliente-servidor, debe estar en el servidor. Si está desarrollando en un sistema y trabajando en otro (como suele ser el caso), asegúrese de que no le esperen sorpresas. Una recomendación extraña, pero elija el controlador más antiguo o más común si no le preocupa especialmente la velocidad y no tiene la intención de ir más allá de las capacidades del estándar SQL92. Esto le dará una mejor compatibilidad. Por ejemplo, para SQL Server 2008, el mejor controlador será SQL Server Native Client 11, pero recomiendo elegir solo SQL Server; de lo contrario, este cliente nativo deberá instalarse en el servidor o en todas las máquinas cliente (si usa el versión del archivo), y el beneficio es especial porque no le asignará ninguna tarea.
e) Cuadros de diálogo de selección de servidor estándar

E) Recomiendo responder “sí” a la pregunta sobre guardar la contraseña, de lo contrario no podrás iniciar este negocio.
g) Seleccione la tabla y los detalles... una oportunidad maravillosa: puede cambiarle inmediatamente el nombre como desee (y los detalles también), y en las propiedades verá los nombres de los campos de la fuente de datos.

Z) Y ahora lo inicia, abre el diseñador de consultas - selecciona estúpidamente todos los registros de la tabla y OPA - error. ¿Qué hacer? Si tienes una interfaz administrada, mira el menú de servicio, y si es normal...
Yo personalmente usé este código:
Código 1C v 8.x Parámetros = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parámetros.AuthenticationStandard = Verdadero;
Parámetros.Nombre de usuario = "sa";
Parámetros.Contraseña = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=base de datos";
Parámetros.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parámetros);
ExternalDataSources.DAX.SetUserConnectionParameters(Nombre de usuario(), Parámetros);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parámetros);

Fuentes de datos externos.DAX.SetConnection();
Puede que algunas piezas no sean necesarias, pero funciona.
Debes ejecutar el código UNA VEZ. Después de lo cual será normal conectar... el misticismo, por supuesto, no está claro por qué fue necesario...

2) Fuentes de datos de solo lectura- Sí, los milagros no suceden... pero a veces uno lo desea...

3) NO PUEDEN UTILIZARSE JUNTO CON FUENTES DE DATOS INTERNOS
Personalmente, este hecho me mató en el acto.

¿Cómo puede ser esto? Lo que estábamos esperando y ya imaginamos y nos lamimos los labios sobre cómo ahora combinaremos nuestros datos con 1C en una sola solicitud, los colapsaremos, los agruparemos, los insertaremos en el informe, pero ese no es el caso. ...
Pero, por supuesto, esto no detiene a las personas experimentadas... ¿Qué pensamiento les vino a la mente? Así es, tablas temporales:

4) NO SE PUEDEN UTILIZAR JUNTO CON TABLAS TEMPORALES

Pero esto ya no se parece a dificultades tecnológicas, sino que se parece mucho a lo que quieren que hagamos “para que la vida no parezca un paraíso” :).

5) Sólo se puede utilizar en conexiones ACS
Para aquellos que no lo saben, esto se encuentra en el ACS en la pestaña "Enlaces de conjuntos de datos". ¿Los usas a menudo? ¿Cómodo? Al parecer quieren obligarnos a usarlos más a menudo. Solo hay una columna "Condición de comunicación" y "Parámetro de comunicación". No he encontrado un ejemplo de su uso en ninguna configuración estándar; de alguna manera no todo es transparente en la documentación ni en el trabajo de Khrustaleva. ¿Alguien puede explicarme cómo funciona la "condición de conexión". Si escribe Atributos de origen = Atributos del receptor allí, no funciona. Por supuesto, la condición se puede escribir en el campo "Expresión"; en la mayoría de los casos esto es suficiente... pero de alguna manera no funciona muy fácilmente.

En total, este problema se resolvió anteriormente en algún lugar como este:
Código 1C v 8.x Función InitializeDataSource()

FechaInicio = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Si DataCon > "20100101" Entonces
DatosCon = "20100101";
terminara si;

CN = Números de nuevos clasificados(15,2);
KS = NewStringQualifiers(255);

Número de matriz = Nueva matriz();
ArrayNumber.Add(Tipo("Número"));

ArrayString = Nueva matriz();
ArrayString.Add(Tipo("Cadena"));

ArrayData = Nueva matriz();
ArrayDate.Add(Tipo("Fecha"));

//Completaremos el coste contable en la tabla
TypeNumber = Nuevos tipos de descripción (ArrayNumber, CN);
TypeString = Nueva descripción de tipo (ArrayString, KS);
TypeDate = Nueva descripción de tipo (ArrayDate);

//tabla para cargar datos desde SQL
TZ = Nueva tabla de valores();
TK.Columns.Add("Código de nomenclatura", TypeString);
TK.Columns.Add("Cantidad", Número de tipo);
TK.Columns.Add("Período", Tipo de fecha);

TK.Indices.Add("Período");

//Conectarse a SQL
Cadena de conexión = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Usar procedimiento para preparar=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Usar Cifrado de datos=False;Etiquetar con intercalación de columnas cuando sea posible=False;Catálogo inicial=Informes";
Conexión = Nuevo COMObject("ADODB.Connection");
Comando = Nuevo COMObject("ADODB.Command");
RecordSet = Nuevo COMObject("ADODB.RecordSet");
Fecha = "";
Intentar
Conexión.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Conexión;
Command.CommandText = "S_elect * from PH donde period >= "" + String(Format(DateStart, "DF=yyyyMMdd"))) + "" y punto<= "" + Строка(Формат(ДатаКон, "ДФ=ггггММдд")) + """;
RecordSet = Comando.Execute();
RecordSet.MoveFirst();
Excepción
Devolución de especificaciones técnicas;
intento final;

Mientras que RecordSet.EOF = Bucle falso
Línea = TK.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Nombre).Value;
Fila.Cantidad = RecordSet.Fields(RecordSet.Fields.Item(12).Nombre).Value;
Fila.Periodo = RecordSet.Fields(RecordSet.Fields.Item(13).Nombre).Value;
RecordSet.MoveNext();
Fin del ciclo;

Solicitud = Nueva Solicitud();
VrTable = Nuevo TemporalTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Fecha de inicio", Fecha de inicio);
Solicitud.SetParameter("DataCon", DateCon);
Consulta.Texto = "SELECCIONAR
| vrDataTable.NomenclatureCode,
| vrDataTable.Cantidad,
| vrDataTable.Periodo
|Colocar tabla de datos
|DESDE
| &vDataTable AS vrDataTable
|DONDE
| vrDataTable.Periodo >= &FechaInicio
| Y vrDataTable.Period<= &ДатаКон";
Solicitud.Ejecutar();
TZ = Indefinido;

Solicitud = Nueva Solicitud;
Query.TemporaryTableManager = VrTable;
Query.Text = "Aquí hay una consulta que involucra una tabla de variables";

Resultado = Consulta.Ejecutar();
Resultado de devolución;

Función final

Conjunto externo = InitializeDataSource();
Conjunto de datos = nueva estructura();
DataSet.Insert("Tabla SQL", ExternalSet);
SpecificReports.GenerateTypicalReport(EsteObjeto, Resultado, Datos de descifrado, OutputToReportForm, DataSet);

En realidad, no hay muchas líneas de código y son bastante estándar... en este caso, puede usar la funcionalidad completa del diseñador de consultas y darle solo la función COMPOSICIÓN DE DATOS al ACS.

Pero ciertamente no se ve tan bien... y cada vez necesitas escribir código para cargar valores en una tabla y comprobar si cometiste un error en el nombre de los detalles... y en lo que nos dieron 1C parece algo poco entusiasta. Aún no he decidido cuál es más cómodo de utilizar. Tú decides y escribes sobre tus decisiones y lo que te impulsó a tomarlas.

Información extraída del sitio.

La versión 8.2.14.533 es finalmente una versión más o menos estable de la versión 14 de la plataforma. Finalmente, se presentó la oportunidad de probar una oportunidad maravillosa: las "fuentes de datos externas".

¿Por qué esta oportunidad es de tanto interés? Cualquier persona que haya programado en 1C y esté bastante familiarizada con SQL y esté al menos familiarizada en general con la arquitectura y los principios de desarrollo de otras plataformas tecnológicas para aplicaciones empresariales le dirá con firmeza lo que más le gusta de 1C. Por supuesto, el generador de consultas es el mecanismo más conveniente y reflexivo para escribir consultas para recuperar datos de estructuras relacionales que he encontrado personalmente. Y ahora 1C nos ha brindado una oportunidad tan maravillosa de usarlo no solo con 1C, sino también con cualquier otra mesa. Es sólo que este "barril de miel" tiene muchas "moscas en el ungüento". Lo primero es lo primero:

1) Configuración y uso: sin "bailar con pandereta" no funcionará

A) Agregue una fuente de datos externa: no parece complicado
b) marque la casilla de verificación "Seleccionar de la lista" (obligatoria) esto es necesario para verificar la funcionalidad desde el principio y le evitará problemas innecesarios
V)
(IMG: http://pics.livejournal.com/comol/pic/0000cr1r.png)
- asegúrese de hacer clic en "..." - la conexión es ODBC. No OLEDB como todos estamos acostumbrados, sino un nivel más bajo

Pero estar aquí MUY CUIDADOSO.

Este es un controlador ODBC; si usa la versión cliente-servidor, debe estar en el servidor. Si está desarrollando en un sistema y trabajando en otro (como suele ser el caso), asegúrese de que no le esperen sorpresas. Una recomendación extraña, pero elija el controlador más antiguo o más común si no le preocupa especialmente la velocidad y no tiene la intención de ir más allá de las capacidades del estándar SQL92. Esto le dará una mejor compatibilidad. Por ejemplo, para SQL Server 2008, el mejor controlador será SQL Server Native Client 11, pero recomiendo elegir solo SQL Server; de lo contrario, este cliente nativo deberá instalarse en el servidor o en todas las máquinas cliente (si usa el versión del archivo), y el beneficio es especial porque no le asignará ninguna tarea.

E) Cuadros de diálogo de selección de servidor estándar

G) Seleccione la tabla y los detalles... una oportunidad maravillosa: puede cambiarle inmediatamente el nombre como desee (y los detalles también), y en las propiedades verá los nombres de los campos de la fuente de datos.

Z) Y ahora lo inicia, abre el diseñador de consultas - selecciona estúpidamente todos los registros de la tabla y OPA - error. ¿Qué hacer? Si tienes una interfaz administrada, mira el menú de servicio, y si es normal...
Yo personalmente usé este código:

Parámetros = ExternalDataSources.DAX.GetGeneralConnectionParameters();
Parámetros.AuthenticationStandard = Verdadero;
Parámetros.Nombre de usuario = "sa";
Parámetros.Contraseña = "pas";
Parameters.ConnectionString = "DRIVER=(SQL Server);SERVER=servet;UID=sa;PWD=;DATABASE=base de datos";
Parámetros.DBMS = "MSSQLServer";

ExternalDataSources.DAX.SetCommonConnectionParameters(Parámetros);
ExternalDataSources.DAX.SetUserConnectionParameters(Nombre de usuario(), Parámetros);
ExternalDataSources.DAX.SetSessionConnectionParameters(Parámetros);

Fuentes de datos externos.DAX.SetConnection();

Puede que algunas piezas no sean necesarias, pero funciona. Necesitas ejecutar el código UNA VEZ. Después de lo cual será normal conectar... el misticismo, por supuesto, no está claro por qué fue necesario esto...

2) Fuentes de datos de solo lectura
Sí, los milagros no suceden... pero a veces uno lo desea así...

3) NO PUEDEN UTILIZARSE JUNTO CON FUENTES DE DATOS INTERNOS
Personalmente, este hecho me mató en el acto.

¿Cómo puede ser esto? Lo que estábamos esperando y ya imaginamos y nos lamimos los labios sobre cómo ahora combinaremos nuestros datos con 1C en una sola solicitud, los colapsaremos, los agruparemos, los insertaremos en el informe, pero ese no es el caso. ...

Pero, por supuesto, esto no detiene a las personas experimentadas... ¿Qué pensamiento les vino a la mente? Así es, tablas temporales:

4) NO SE PUEDEN UTILIZAR JUNTO CON TABLAS TEMPORALES

Pero esto ya no se parece a dificultades tecnológicas, sino que se parece mucho a lo que quieren que hagamos “para que la vida no parezca un paraíso” (IMG:).

5) Sólo se puede utilizar en conexiones ACS

Para aquellos que no lo saben, esto se encuentra en el ACS en la pestaña "Enlaces de conjuntos de datos". ¿Los usas a menudo? ¿Cómodo? Al parecer quieren obligarnos a usarlos más a menudo. Solo hay una columna "Condición de comunicación" y "Parámetro de comunicación". No he encontrado un ejemplo de su uso en ninguna configuración estándar; de alguna manera no todo es transparente en la documentación ni en el trabajo de Khrustaleva. ¿Alguien puede explicarme cómo funciona la "condición de conexión". Si escribe Atributos de origen = Atributos del receptor allí, no funciona. Por supuesto, la condición se puede escribir en el campo "Expresión"; en la mayoría de los casos esto es suficiente... pero de alguna manera no funciona muy fácilmente.

En total, este problema se resolvió anteriormente en algún lugar como este:

Función InicializarFuenteDeDatos()

FechaInicio = SettingsComposer.Settings.DataParameters.Items.Value;
DataCon = SettingsBuilder.Settings.DataParameters.Items.Value;
Si DataCon > "20100101" Entonces
DatosCon = "20100101";
terminara si;

CN = Números de nuevos clasificados(15,2);
KS = NewStringQualifiers(255);

Número de matriz = Nueva matriz();
ArrayNumber.Add(Tipo("Número"));

ArrayString = Nueva matriz();
ArrayString.Add(Tipo("Cadena"));

ArrayData = Nueva matriz();
ArrayDate.Add(Tipo("Fecha"));

//Completaremos el coste contable en la tabla
TypeNumber = Nuevos tipos de descripción (ArrayNumber, CN);
TypeString = Nueva descripción de tipo (ArrayString, KS);
TypeDate = Nueva descripción de tipo (ArrayDate);

//tabla para cargar datos desde SQL
TZ = Nueva tabla de valores();
TK.Columns.Add("Código de nomenclatura", TypeString);
TK.Columns.Add("Cantidad", Número de tipo);
TK.Columns.Add("Período", Tipo de fecha);

TK.Indices.Add("Período");

//Conectarse a SQL
Cadena de conexión = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=sa;Pwd=;Data Source=;Usar procedimiento para preparar=1;Auto Translate=True;Packet Size=4096;Workstation ID=;Usar Cifrado de datos=False;Etiquetar con intercalación de columnas cuando sea posible=False;Catálogo inicial=Informes";
Conexión = Nuevo COMObject("ADODB.Connection");
Comando = Nuevo COMObject("ADODB.Command");
RecordSet = Nuevo COMObject("ADODB.RecordSet");
Fecha = "";
Intentar
Conexión.Open(AbbrLP(ConnectionString));
Command.ActiveConnection = Conexión;
Command.CommandText = "Seleccione * de PH donde punto >= "" + String(Format(DateStart, "DF=yyyyMMdd")) + "" y punto RecordSet = Command.Execute();
RecordSet.MoveFirst();
Excepción
Devolución de especificaciones técnicas;
intento final;

Mientras que RecordSet.EOF = Bucle falso
Línea = TK.Add();
Row.NomenclatureCode = RecordSet.Fields(RecordSet.Fields.Item(1).Nombre).Value;
Fila.Cantidad = RecordSet.Fields(RecordSet.Fields.Item(12).Nombre).Value;
Fila.Periodo = RecordSet.Fields(RecordSet.Fields.Item(13).Nombre).Value;
RecordSet.MoveNext();
Fin del ciclo;

Solicitud = Nueva Solicitud();
VrTable = Nuevo TemporalTableManager();
Query.SetParameter("vrDataTable", TK);
Query.SetParameter("Fecha de inicio", Fecha de inicio);
Solicitud.SetParameter("DataCon", DateCon);
Consulta.Texto = "SELECCIONAR
| vrDataTable.NomenclatureCode,
| vrDataTable.Cantidad,
| vrDataTable.Periodo
|Colocar tabla de datos
|DESDE
| &vDataTable AS vrDataTable
|DONDE
| vrDataTable.Periodo >= &FechaInicio
| Y vrDataTable.Period Query.Execute();
TZ = Indefinido;

Solicitud = Nueva Solicitud;
Query.TemporaryTableManager = VrTable;
Query.Text = "Aquí hay una consulta que involucra una tabla de variables";

Resultado = Consulta.Ejecutar();
Resultado de devolución;

Función final

Conjunto externo = InitializeDataSource();
Conjunto de datos = nueva estructura();
DataSet.Insert("Tabla SQL", ExternalSet);
SpecificReports.GenerateTypicalReport(EsteObjeto, Resultado, Datos de descifrado, OutputToReportForm, DataSet);

En realidad, no hay muchas líneas de código y son bastante estándar... en este caso, puede usar la funcionalidad completa del diseñador de consultas y darle solo la función COMPOSICIÓN DE DATOS al ACS.

Pero ciertamente no se ve tan bien... y cada vez necesitas escribir código para cargar valores en una tabla y comprobar si cometiste un error en el nombre de los detalles... y en lo que nos dieron 1C parece algo poco entusiasta. Aún no he decidido cuál es más cómodo de utilizar. Tú decides y escribes sobre tus decisiones y lo que te impulsó a tomarlas.

[debes registrarte para ver el enlace]