Carga sencilla para aplicaciones de terceros. El proceso de descarga de datos en xml. Generando un archivo XML. Descarga simple para una aplicación de terceros 1s 8 ejemplo de lectura xml

Ahorrará tiempo al ingresar información sobre la compra de servicios de Peterhost en 1C.
Para hacer esto, debe cargar un archivo XML en 1C y a partir de él se generará el documento "Recepción de bienes y servicios", que contiene información sobre los servicios adquiridos. Se puede generar una factura basada en este documento.

A continuación se proporcionan instrucciones detalladas.

1. Conexión de procesamiento externo

1.1. Si utiliza la base de datos 1C:Enterprise 8.X con la configuración Enterprise Accounting 2.0, debe conectar el procesamiento externo () para cargar un documento en formato CommerceML
Esto se puede hacer de dos formas:
1. Guarde el archivo de procesamiento externo localmente en el disco y ábralo mediante el menú "Archivo" → "Abrir" antes de cada carga de datos en formato CML.
2. Conecte el procesamiento a la base de datos (IB) de forma permanente. Luego estará disponible para todos (en el caso de trabajar en red) desde el menú "Herramientas" → "Informes y procesamientos adicionales" → "Procesamiento externo adicional".

  • En el menú "Servicio", seleccione "Informes y procesamiento adicionales" - "Procesamiento externo adicional".
  • Haga clic en el botón "Agregar". Se abrirá un formulario para agregar un nuevo elemento de directorio:
  • En el campo "Nombre", especifique el nombre del procesamiento, por ejemplo, "Descargar datos en formato CommerceML (Grupo RU-CENTER)".
  • Presione el botón de selección de archivos y especifique la ruta al archivo de procesamiento de descarga ().
  • Presione el botón "Aceptar". Ahora el procesamiento está conectado a la base de datos y se encuentra en el directorio "Procesamiento externo adicional", y se puede abrir haciendo doble clic con el mouse.

1.2. En el caso de utilizar la configuración “Manufacturing Enterprise Management” (versión 10.3 y superiores) y “Trade Management” (versión 1.3 y superiores), este procesamiento ya está habilitado y se puede continuar con el paso 2.

2. Formación del documento "Recepción de bienes y servicios"

Como resultado de las acciones realizadas a continuación, la información sobre los servicios adquiridos en Peterhost se ingresará en 1C.
1. A continuación, debe guardar en su computadora un archivo XML con los datos del documento "Recepción de bienes y servicios" para el período requerido. El archivo en formato XML se encuentra en la sección Cuenta personal bajo el enlace "XML para 1C".
Presione el botón de selección a la derecha del campo "Nombre del archivo de datos" y seleccione este archivo (ver Figura 1). A la pregunta "¿Leer datos de un archivo?" responda "OK". El archivo de datos se leerá mediante procesamiento.
2. Si el procesamiento logra determinar todas las correspondencias entre los elementos de datos del archivo y los datos de la base de datos, se formulará la pregunta "¿Guardar datos en la base de datos?". Si responde "Sí", se creará un nuevo documento "Recepción de bienes y servicios". Ir al punto 3.
3. Si no se determinan todas las coincidencias de datos, se mostrará un mensaje: "Al cargar los datos, el programa no pudo encontrar automáticamente los objetos IS correspondientes a los elementos transferidos en el archivo de intercambio ..." y ofrecerá realizar la comparación. a mano. En este caso, debes hacer lo siguiente:

  • Presiona OK. Se abrirá un formulario para hacer coincidir objetos de archivo y objetos IB. Tiene varias pestañas que corresponden a diferentes tipos de objetos (organizaciones, contratistas, nomenclatura, etc.). Si los datos de algún tipo no coinciden, aparecerán signos de exclamación rojos en las pestañas correspondientes (consulte la Figura 2).
  • Vaya a las pestañas correspondientes y haga coincidir manualmente los elementos. Cabe señalar que las coincidencias de contrapartes y organizaciones se buscan por TIN, y las coincidencias de nomenclatura se buscan primero por número de artículo y luego por nombre. Si el elemento que corresponde a los datos del archivo no está en el IB, entonces se puede crear automáticamente a partir de los datos del archivo haciendo clic en el botón "Crear a partir de datos del archivo".
  • Al agregar un artículo, verifique la propiedad "Servicio" (consulte la Figura 3). También puede cambiar los nombres completos y breves del artículo en stock.
  • En la pestaña "Cuentas", es recomendable agregar cuentas de contabilidad de inventario para que al crear el documento "Recepción de bienes y servicios", estos números se ingresen automáticamente. Por ejemplo, se pueden establecer los siguientes valores para los servicios: "Cuenta" - 25 (Gastos generales de producción) y "Cuenta de IVA presentado" - 19.04 (IVA sobre servicios adquiridos) (ver Figura 4).
  • Después de hacer coincidir todos los elementos y presionar el botón "Aceptar", el programa solicitará confirmación para cargar el documento en IB, luego de lo cual creará un nuevo documento "Recepción de bienes y servicios" (ver Figura 5).

3. Publicación del documento "Recepción de bienes y servicios".

Para contabilizar el documento "Recibo de bienes y servicios", debe abrirlo haciendo doble clic y completar los campos que faltan, como "Compensación de anticipos" (por ejemplo, "Automático") y los campos del "Liquidación "Cuentas" (ver Figura 6). Los valores de estos campos están determinados por la política contable de su organización. Para publicar el documento, haga clic en el botón "Aceptar".

4. Formación del documento "Factura"

Después de crear y publicar con éxito el documento "Recepción de bienes y servicios", puede crear el documento "Factura recibida" basándose en él. Para hacer esto, haga clic en el enlace correspondiente en la parte inferior izquierda del formulario del documento.

En una organización, la contabilidad se puede llevar no solo en soluciones basadas en la plataforma 1C: Enterprise, sino también en otros sistemas de software (Galaktika, Parus, SAP, etc.). En este caso aparecen las tareas de integración de dos aplicaciones.

Por ejemplo, alguna aplicación (llamémosla "X") necesita leer una lista de documentos de configuración. No hablaremos de los beneficios prácticos de resolver un problema de este tipo, solo señalaré que la forma más conveniente y universal en tal situación sería cargar una lista de documentos en formato XML.

El intercambio mediante este formato es universal, ya que la mayoría de aplicaciones pueden funcionar con él. Consideremos cómo puede cargar una lista de documentos de configuración de 1C:Enterprise a un archivo XML.

Exportar a XML

Y entonces, pasemos a lo principal. Necesitamos iterar sobre la lista de metadatos del documento y generar la lista en un archivo XML. La siguiente captura de pantalla muestra el algoritmo para generar un archivo XML:

Exportación de función CreateXML() //Obtiene el nombre del archivo temporal Ruta = GetTemporaryFileName(); // Inicializa la clase "WriterXML" Entrada = Nueva entrada XML; //Abre un archivo temporal para escribir- 8 " ) ; // Escribir declaración de archivo XML Registro. EscribirDeclaraciónXML(); // Escribir. EscribirElementoInicio(" DocumentosConfiguraciones" ) ; // Primer elemento // Atributo del primer elemento con la fecha de generación del archivo Registro. WriteAttribute("generado", Formato(FechaActual(), "DF) = aaaa-MM- ddThh:mm:ss; DLF = DT" ) ) ; // Escribe un elemento para cada documento de configuración. Ponemos el nombre del documento en el texto. Para cada documento de metadatos. Registro del Ciclo de Documentos. WriteItemStart("Documento"); Registro. WriteText(Nombre del documento); Registro. EscribirEndElement(); FinCiclo; //Termina de escribir el primer elemento Registro. EscribirEndElement(); Registro. Cerca() ; //Cerrar el archivo //Obtiene los datos binarios del archivo y los coloca en un almacenamiento temporal BinaryData = Nuevo BinaryData(Ruta); Dirección = PlaceInTempStorage(BinaryData, New UniqueIdentifier) ​​​​; Dirección del remitente; // Devuelve la dirección del archivo almacenado Funciones finales

Cada elemento creado debe completarse correctamente. Después de ejecutar el método "WriteStartElement()", se debe ejecutar el método "WriteEndElement"; de lo contrario, la estructura del archivo XML será incorrecta.

La plantilla general para crear archivos XML es la siguiente secuencia:

// 1. Inicialice la clase "Escritura XML" Entrada = Nueva entrada XML; // 2. Abra un archivo temporal para escribir. Registro. Abrir archivo (ruta, "UTF - 8 " ) ; // 3. Escribe la declaración del archivo XML. Registro. EscribirDeclaraciónXML(); // // 4. ++ Escribe el contenido del archivo XML. Registro. WriteElementStart("ElementoXML"); Registro. EscribirEndElement(); // -- Escribir el contenido del archivo XML // 5. Cierra el archivo Registro. Cerca() ;

Estos cinco pasos crean casi cualquier archivo XML.

En nuestro ejemplo, el archivo creado se convierte en datos binarios y se devuelve al lugar donde se llamó la función "CreateXML". Este archivo luego se puede escribir en el sistema de archivos.

Puede ver un ejemplo del archivo cargado en la captura de pantalla anterior.

Aplicación de terceros

Por ejemplo, creé una aplicación en .NET Framework para demostrar la lectura de un archivo XML en una aplicación de terceros.

El programa lee el archivo creado y muestra los documentos en forma de lista:

Puede probarlo usted mismo, la aplicación está disponible para descargar desde el enlace al final del artículo.

Versatilidad

El formato XML se utiliza en la mayoría de las configuraciones para el intercambio de datos entre soluciones de aplicaciones en la plataforma 1C:Enterprise. Otro método de comunicación comúnmente utilizado es una conexión COM. XML le permite intercambiar con casi cualquier aplicación que merezca ser llamada universal.

Descargas:

Aplicación lectora de archivos XML.

Procesando la formación de un archivo XML.

Trabajar con documentos XML está disponible directamente desde el lenguaje integrado del sistema 1C:Enterprise 8.

Hay una posibilidad:

  • leer y escribir secuencialmente documentos xml:
    • convertir de una cadena derivada del texto del elemento o del valor del atributo XML a un valor según el tipo especificado;
    • obtener una representación de cadena de un valor para colocar en el texto del elemento o en el valor del atributo XML;
    • obtener el tipo de datos XML correspondiente al tipo pasado como parámetro;
    • comprobar la posibilidad de leer desde XML el valor del tipo especificado;
    • realizar la validación del esquema XML al leer XML
    • escriba el valor en formato XML;
    • Devuelve un tipo correspondiente al tipo de datos XML.
  • utilice el modelo de acceso a datos de objetos de documentos xml (DocumentDOM) que se ajuste a los siguientes estándares:
    • DOM nivel 2;
    • XPath (DOM nivel 3);
    • Cargar y guardar DOM (DOM nivel 3).
  • utilizar el modelo de objetos de esquema XML (esquema XML);
  • Utilice el estándar XML canónico 1.1 (Canonical XML 1.1).

Utilizando una conexión externa y mecanismos para trabajar con XML, es posible organizar la integración con los sistemas de aplicaciones de acuerdo con los formatos adoptados en estos sistemas. Para ello se utilizan mecanismos de transformación XSL. Por ejemplo, para dicha integración, puede utilizar el servidor BizTalk de Microsoft:

conjunto de información rápido

La plataforma proporciona herramientas para trabajar con documentos XML en el formato binario Fast Infoset. La tecnología Fast Infoset utiliza una sintaxis alternativa para mostrar datos XML. Esto da como resultado archivos más pequeños y un procesamiento más rápido que los datos escritos en el formato XML normal. Un archivo escrito en formato Fast Infoset tiene la extensión .fi o .finf.

Modos de funcionamiento

El procesamiento de datos UnloadingLoadingXML82 implementa 2 modos de operación: Descarga (creando un archivo de descarga de datos especificados por el usuario) y Carga (leyendo un archivo de descarga creado por el modo del mismo nombre y escribiendo los datos contenidos en él). El modo se establece seleccionando en el campo Modo.

Antes de iniciar un modo en particular (presionando el botón Ejecutar), debe especificar el nombre del archivo cargado, ya sea ingresándolo manualmente en el campo "Nombre de archivo" o usando el botón para seleccionar este campo y el cuadro de diálogo de selección de archivo estándar.

En el modo de descarga, es posible editar el uso de totales al escribir registros, lo que puede afectar la velocidad de descarga. Los botones "Deshabilitar totales" y "Habilitar totales" están disponibles cuando el indicador "Habilitar la capacidad de editar el uso de totales durante la carga de datos" está configurado y se usan para controlar manualmente el modo de uso de los totales al cargar datos. **Condiciones de aplicabilidad del procesamiento**

El procesamiento se puede utilizar solo en los casos en que la base de datos en la que se cargaron los datos y aquella en la que se cargaron los datos sean homogéneas (las configuraciones son idénticas, los datos pueden diferir), o todos los objetos cargados son casi completamente idénticos en composición y tipos de detalles y partes tabulares, propiedades del objeto de metadatos "principal", etc. Cabe señalar que, debido a estas limitaciones, el procesamiento está destinado principalmente a intercambios entre IB homogéneos.

El formato del archivo de carga difiere del formato de archivo creado al cargar de acuerdo con el plan de intercambio por la parte del encabezado. Para descargar datos (elementos de libros de referencia, conjuntos de registros, etc.), el procesamiento utiliza el mismo mecanismo de serialización XML que la descarga según planes de intercambio, en esta parte los formatos de archivo son idénticos.

Determinación de la composición de la descarga.

El procesamiento le permite realizar la descarga total y parcial de los datos de la base de datos en un archivo. La composición de los datos cargados se configura en el cuadro de diálogo configurando las casillas de verificación en la columna del árbol que muestra los objetos de metadatos para los cuales se pueden cargar datos. Una columna adicional de banderas, "Si es necesario", establece la necesidad de descargar objetos de este tipo "por referencia". Es decir, si la casilla de verificación está marcada solo en la columna "Si es necesario", los datos sobre dicho objeto no se cargarán por completo, sino solo en la medida necesaria para mantener la integridad referencial en la base de datos que descargará el archivo cargado.

Cuando se abre el formulario, el procesamiento establece el indicador de descarga por referencia para todos los objetos, lo que garantiza la integridad referencial del fragmento de la base de datos descargado.

Cuando hace clic en el botón "Definir objetos cargados por enlace", el procesamiento analiza qué enlaces de datos pueden estar contenidos en objetos que tienen el indicador de carga completo configurado y automáticamente completa la columna del indicador que indica la necesidad de cargar por enlace. Si el objeto ya tiene configurado el indicador de descarga completa, entonces el indicador de descarga por referencia no está configurado.

Posibles aplicaciones

El uso de este procesamiento es posible, por ejemplo, para crear una copia de seguridad total o parcial de datos, para intercambiar datos entre bases de datos y también como herramienta auxiliar para restaurar bases de datos problemáticas.

- páginas web conocidas, que también son análogas a XML con controles no estrictos.

Los objetos de lectura/escritura XML, FastInfoset y HTML amplían las posibilidades de leer un archivo de texto con el procesamiento integrado de etiquetas de marcado.

También se utilizan para objetos DOM Builder/DOM ​​​​Writer (ver más abajo) como fuentes de datos.

Los archivos XML 1C contienen información de texto, es decir, son archivos de texto. Los objetos XML Reader 1C y XML Writer 1C son un "complemento" que facilita el trabajo con etiquetas de archivos XML 1C.

Los objetos ReadFastInfoset 1C y WriteFastInfoset 1C, ReadHTML 1C y WriteHTML 1C son completamente similares a ReadXML 1C y WriteXML 1C y funcionan de la misma manera con otros formatos.

Archivo XML 1C utilizado en los ejemplos.

Directorio>

Directorio>

Valor del textoProps>
Directorio>
Configuración>

Ejemplo 1. Leer un archivo XML 1C en un árbol de valores usando ReadingXML 1C

//abre el archivo XML 1C para leerlo usando ReadingXML 1C
Archivo = Nuevo XMLReader();
File.OpenFile("D:\ConfigurationStructure.xml");

//preparar el árbol de valores
//cada rama XML puede tener un nombre, atributos y valor
dzXML = Nuevo árbol de valores();
dzXML.Columns.Add("Nombre");
dzXML.Columns.Add("Valor");
dzXML.Columns.Add("Atributos");

//dado que una cadena XML puede tener varios atributos, los escribiremos en la tabla de valores
//cada atributo tiene un nombre y valor
tAtributos = NewValueTable();
atributo.Columnas.Add("Nombre");
atributo.Columnas.Agregar("Valor");

// el nivel de anidamiento nos ayudará a comprender cuándo necesitamos agregar una rama anidada y cuándo debemos volver al nivel superior
Nivel de anidamiento = 0;
//línea actual - línea de árboles, cambiará a medida que aumente el anidamiento
FilaActual = Indefinido;
//la lectura del archivo XML 1C no se realiza línea por línea, pero según la estructura, al final del archivo la lectura devolverá FALSO
Mientras que el bucle File.Read()

//estamos interesados ​​en tres tipos de nodos: el comienzo del elemento, el texto (el valor del elemento) y el final del elemento (para regresar un nivel hacia arriba)
Si File.NodeType = XMLNodeType.ElementStart Entonces

Nivel de anidamiento = Nivel de anidamiento + 1;

//si esta es la primera línea, agréguela en la parte superior del árbol y guarde solo el nombre
Si CurrentRow = Indefinido Entonces
CurrentRow = dzXML.Rows.Add();
LíneaActual.Nombre = Archivo.Nombre;
Continuar;
De lo contrario
// líneas anidadas
CurrentRow = CurrentRow.Rows.Add();
LíneaActual.Nombre = Archivo.Nombre; //guardar nombre

//¿Este elemento XML tiene atributos?
Si File.NumberAttributes() > 0 Entonces
//en caso afirmativo, copie la tabla vacía preparada para guardar los atributos
tAttributesNode = tAttributes.Copy();
//recorre el número de atributos de este elemento
Para Count = 0 por File.NumberAttributes()-1 Loop
//para cada atributo recuerda el nombre y el valor
Cadena = tNodeAttributes.Add();
Cadena.Nombre = Archivo.NombreAtributo(N);
String.Value = Archivo.AttributeValue(Ac);
Fin del ciclo;
//guarda la tabla de atributos del elemento en la fila actual
CurrentRow.Attributes = tAttributesNode;
Terminara si;
Terminara si;

ElseIf File.NodeType = XMLNodeType.EndElement Entonces
// aumentar el nivel de anidamiento al principio del elemento, disminuir el nivel de anidamiento al final del elemento
Nivel de anidamiento = Nivel de anidamiento - 1;
//devuelve la línea actual un nivel más arriba
FilaActual = FilaActual.Parent;

ElseIf File.NodeType = XMLNodeType.Text Entonces
//si el elemento tiene un valor, simplemente guárdelo
LíneaActual.Value = Archivo.Valor;

Terminara si;

Fin del ciclo;

Archivo.Cerrar();

Ejemplo 2. Escribir un archivo XML 1C utilizando el objeto WriteXML 1C

//crea un archivo WriteXML 1C
Archivo = Nuevo XMLWriter();
File.OpenFile("D:\ConfigurationStructure.xml", "UTF-8");
File.WriteItemStart("Configuración");

// por metadatos omitimos todos los directorios (para más detalles, consulte "Trabajar con metadatos")
Para cada directorio de Metadata.Catalogs Loop

//WriteItemStart - abre una nueva rama [subordinada]
File.WriteItemStart("Directorio");
//WriteAttribute - escribe el atributo en la rama abierta previamente
File.WriteAttribute("Nombre", Directorio.Nombre);
File.WriteAttribute("Sinónimo", Directorio.Sinónimo);

// por metadatos omitimos todos los detalles del directorio
Para cada accesorio del Handbook.Props Loop




Fin del ciclo;

// mediante metadatos omitimos todas las partes tabulares del directorio
Para cada MP del bucle Directory.TabularParts
File.WriteItemBeginning("TablePart");
File.WriteAttribute("Nombre", PT.Nombre);
File.WriteAttribute("Sinónimo", PM.Sinónimo);

Para cada accesorio del ciclo PM.Props
File.WriteItemBeginning("Accesorios");
File.WriteAttribute("Nombre", Props.Name);
File.WriteAttribute("Sinónimo", Props.Synonym);
Archivo.WriteEndElement();
Fin del ciclo;

Archivo.WriteEndElement();
Fin del ciclo;

//SaveItemEnd - "cierra" la rama previamente abierta usando WriteItemStart
Archivo.WriteEndElement();
Fin del ciclo;

Archivo.WriteEndElement();
Archivo.Cerrar();