Как открыть 1с файл xml. Формирование файла XML. Простая выгрузка для стороннего приложения. Формирование документа «Счет-фактура»
В организации учет может вестить не только в решениях на платформе 1С:Предприятие, но и в других программным комплексах (Галактика, Парус, SAP и прочее). При этом появляются задачи интеграции двух приложений.
Напрмер, в некотором приложении (назовем его "X") требуется прочитать список документов конфигурации. О практической пользе решения подобной задачи говорить не будем, отмечу лишь, что наиболее удобным и универсальным способом в такой ситуации будет выгрузка списка документов в формате XML .
Обмен с использованием этого формата является универсальным, поскольку с ним могут работать большинство приложений. Рассмотрим как можно из 1С:Предприятия выгрузить список документов конфигурации в XML-файл.
Выгрузка в XML
И так, перейдем к главному. Нам нужно обойти список метаданных документов и сформировать список в XML-файле. На следующем скриншоте представлен алгоритм формирования XML-файла:
Функция СоздатьXML() Экспорт // Получаем имя временного файла Путь = ПолучитьИмяВременногоФайла() ; // Инициализируем класс "ЗаписьXML" Запись = Новый ЗаписьXML; // Открываем временный файл для записи - 8 " ) ; // Записываем объявление XML-файла Запись. ЗаписатьОбъявлениеXML() ; // Запись. ЗаписатьНачалоЭлемента(" ДокументыКонфигурации " ) ; // Первый элемент // Атрибут первого элемента с датой формирования файла Запись. ЗаписатьАтрибут(" generated " , Формат(ТекущаяДата() , " ДФ= гггг- ММ- ddThh:mm:ss; ДЛФ= DT " ) ) ; // Записываем элемент для каждого документа конфигурации. В текст помещаем имя документа. Для Каждого Док Из Метаданные. Документы Цикл Запись. ЗаписатьНачалоЭлемента(" Документ " ) ; Запись. ЗаписатьТекст(Док. Имя) ; Запись. ЗаписатьКонецЭлемента() ; КонецЦикла ; // Завершаем запись первого элемента Запись. ЗаписатьКонецЭлемента() ; Запись. Закрыть() ; // Закрываем файл // Получаем двоичные данные файла и помещаем их во временное хранилище ДвоичныеДанные = Новый ДвоичныеДанные(Путь) ; Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор) ; Возврат Адрес; // Возвращаем адрес файла в хранилище КонецФункцииКаждый созданный элемент должен быть правильно завершен. После выполнения "ЗаписатьНачалоЭлемента()" обязательно должен быть выполнен метод "ЗаписатьКонецЭлемента", иначе структура XML-файла будет некорректной.
Общий шаблон создания XML-файлов предсавляет собой следующую последовательность:
// 1. Инициализируем класс "ЗаписьXML" Запись = Новый ЗаписьXML; // 2. Открываем временный файл для записи Запись. ОткрытьФайл(Путь, " UTF- 8 " ) ; // 3. Записываем объявление XML-файла Запись. ЗаписатьОбъявлениеXML() ; // // 4. ++ Записываем содержимое XML-файла Запись. ЗаписатьНачалоЭлемента(" ЭлементXML " ) ; Запись. ЗаписатьКонецЭлемента() ; // -- Записываем содержимое XML-файла // 5. Закрываем файл Запись. Закрыть() ;С помощью этих пяти шагов создается практически любой XML-файл.
В нашем примере созданный файл переводится в двоичные данные и возвращается в место вызова функции "СоздатьXML". Далее этот файл может быть записан в файловую систему.
Пример выгруженного файла Вы могли видеть на скриншоте выше.
Стороннее приложение
Для примере создал приложение на.NET Framework, чтобы продемонстрировать чтенеие XML-файла в стороннем приложении.
Програма читает созданный файл и выводит документы в виде списка:
Можете попробовать сами, приложение доступно для загрузки по ссылке в конце статьи.
Универсальность
Формат XML используется в большинстве конфигурации обмена данными между прикладными решениями на платформе 1С:Предприятие. Другим часто используемым способом обмена является подключение через COM-соединение. XML-позволяет выполнять обмен практически с любыми приложениями, чем и заслужил называться универсальным.
Файлы для загрузки:
Приложение чтения XML-файла.
Обработка формирования XML-файла.
Перенос информации между базами данных является одной из задач их поддержки и администрирования. Для его эффективного выполнения в автоматизированных комплексах 1С создаются обработки. Они значительно облегчают рутинную работу, ускоряют процессы выгрузки-загрузки информации и одновременно реализуют контроль ее корректности. Выгрузка из 1с в xml позволяет создавать файл с содержимым любого объекта настроенной конфигурации, и использовать его, когда необходима выгрузка данных в идентичную конфигурацию.
Инструменты для создания выгрузки
Для экспорта информации, содержащейся в базах данных, главным образом используется формат xml. Для 1С разработано множество обработок (например, ВыгрузкаЗагрузкаДанныхxml82 epf), при помощи которых возможно выводить в файл и загружать данные. При этом пользователь должен получать файл определенной структуры, который позволяет загружать хранящуюся в нем информацию в родную базу данных или переносить ее в другое место. При создании выгрузки следует соблюдать следующие правила:
- Сохранить созданные файлы до момента полного восстановления и окончания процедур проверки корректности перенесенной информации;
- В случае использования обработки как инструмента резервного копирования создавать для копий данных отдельные подпапки и вести журнал их учета для быстрого поиска.
Поставляемая в программе поддержки пользователей 1С , которую можно найти на сайте или дисках ИТС, является великолепным средством для экспорта и импорта информации. Пользователь компьютера может выгрузить как всю базу, так и ее отдельные объекты, при этом кроме собственно экспорта производятся различные операции по проверке информации, помогающие избавиться от критических ошибок в данных.Обработка 1с выгрузка в xml работает в двух режимах:
- Выгрузка. Создает файл, содержащий выгружаемые объекты, определяемые пользователем;
- Загрузка. Производит чтение экспортируемого ранее файла и записывает находящиеся в нем сведения в информационную базу.
Обработка позволяет произвести контроль объектов на недопустимые символы, а также включает в себя функцию экспорта информации с ограничениями.
Выгрузка может использоваться не только при обмене информацией между базами 1С. С ее помощью можно обеспечить интеграцию различных комплексов, например, 1С и системы Парус. Универсальность формата XML позволяет создавать программы для переноса информации практически для любых информационных банков. Обработка выгрузка и загрузка данных xml – важнейший инструмент обмена информацией.
Процесс выгрузки данных в xml
Рассмотрим, как выгрузить из 1с в xml в обычном режиме. После закачки обработки ВыгрузкаЗагрузкаДанныхxml.epf и ее открытия необходимо выполнить следующие шаги:
- Отобрать объекты для экспорта;
- Настроить необходимые фильтры, например, по периоду;
- Определить месторасположение файла с информацией на дисковой подсистеме;
- Запустить выгрузку объектов.
Необходимо помнить, что заголовочная часть формата файла выгрузки отличается от формата файла, используемого при выгрузке по планам обмена.
xmlЗагрузка xml в 1с производится в базу-приемник с конфигурацией, идентичной базе-источнику. До того, как загрузить в 1с xml 1с необходимо открыть обработку в базе-приемнике. Затем нужно указать путь до выгруженного ранее файла и осуществить загрузку данных нажатием на кнопку «Загрузить данные».
При необходимости активируются флажки для загрузки данных в режиме обмена в распределенной информационной базе и игнорирования возникающих ошибок при загрузке объектов.
После этого необходимо проверить базы и убедиться, что все элементы загружены корректно, чтобы не получить их потери, например, если произошла ошибка в обработчике события после загрузки объекта.
Когда предприятие постоянно пользуется в своей работе каким-то программным комплексом, то, естественно, всегда возникает вопрос его постоянной поддержки и администрирования. Никак не обойтись при этом с задачами обмена, хранения и восстановления данных . Рассмотрим, как загрузить или выгрузить данные из 1С в формате XML, так как это является важной процедурой этой темы.
Строятся они так, чтобы при выгрузке можно было получить файл формата XML, в котором будут записаны необходимые клиенту данные. При этом одновременно с записью происходит и контроль корректности переносимых записей на предмет критических ошибок.
Таким образом, выгрузка в XML-файл (импорт записей) из одной информационной базы и последующая загрузка из XML в другую- представляют собой обмен данными в формате XML между базами.
Такая процедура, особенно при больших массивах информации, экономит большое количество ручной работы.
Импорт (полученный файл) может быть использован также как архив для восстановления в непредвиденных ситуациях(при потере или повреждении).
Таких инструментов-обработок разработано очень много, и они доступны в интернете. Ответственность за их использование ложится на плечи (и голову) клиента.
Но для официальных пользователей одинэски разработчиками создан универсальный обработчик «Выгрузка/загрузка данных XML».
ВАЖНО. Экспорт в XML в 1С и дальнейшая загрузка в XML из 1С допустима для идентичных конфигураций - в противном случае произойдёт её повреждение.
Универсальный обработчик
Основные моменты для использования универсального разработчика:
- Импорт файлов сохранять до окончания переноса записей и проверки их корректности;
- При использовании как резервных копий следует вести их учёт для сортировки поиска.
В его работе предусмотрены два режима: создание файла при сохранении информации и его чтение/запись - когда происходит импорт.
Кроме того, пользователь может устанавливать как при экспорте, так и загрузке данных дополнительные ограничения.
Извлекаем записи
Выгружать данные можно как по всей базе, так и избирательно - пообъектно.
После скачивания, установки и открытия обработчика выполняется следующее:
Их отбор производят в открывшемся после запуска диалоговом окне. Для этого устанавливают галочки в перечне, который отображает объекты метаданных для извлечения;
- Настраиваются необходимые фильтры (например, по дате);
- Выбирается место на дисковом пространстве;
- Запускается сама операция.
Заливаем записи в приёмник
Первым шагом для принятия данных в базу-приёмник нужно открыть в ней программу-обработчик.
После того как будет указан путь к файлу-источнику и активированы (при необходимости) флажки настроек процедуры - можно запускать процесс кнопкой «Загрузить данные».
Теперь вам известно, как загрузить или выгрузить данные из 1С в формате XML для сохранения данных и обмена между базами.
— всем известные веб-страницы, которые также представляют из себя аналог XML с нестрогими проверками.
Объекты чтения/записи XML, FastInfoset, HTML расширяют возможности чтения текстового файла встроенной обработкой тегов разметки.
Также они используются для объектов ПостроительDOM/ЗаписьDOM (см. далее) как источники данных.
Файлы XML 1С содержат текстовую информацию, то есть являются текстовыми файлами. Объекты ЧтениеXML 1С и ЗаписьXML 1С являются «надстройкой», позволяющей упростить работу с тегами XML файла 1С.
Объекты ЧтениеFastInfoset 1С и ЗаписьFastInfoset 1С, ЧтениеHTML 1С и ЗаписьHTML 1С полностью аналогичны ЧтениеXML 1С и ЗаписьXML 1С и служат для работы таким же способом с другими форматами.
Файл XML 1С, который использовался в примерах
Справочник>
Справочник>
Текстовое значениеРеквизит>
Справочник>
Конфигурация>
Пример 1. Считывание файла XML 1С в дерево значений с помощью ЧтениеXML 1С
//открываем файл XML 1С на чтение с помощью ЧтениеXML 1С
Файл = Новый ЧтениеXML();
Файл.ОткрытьФайл("D:\СтруктураКонфигурации.xml");
//подготовим дерево значений
//у каждой ветки XML может быть наименование, атрибуты и значение
дзXML = Новый ДеревоЗначений();
дзXML.Колонки.Добавить("Наименование");
дзXML.Колонки.Добавить("Значение");
дзXML.Колонки.Добавить("Атрибуты");
//так как атрибутов у строки XML может быть несколько - будем записывать их в таблицу значений
//каждый атрибут имеет имя и значение
тАтрибутов = Новый ТаблицаЗначений();
тАтрибутов.Колонки.Добавить("Имя");
тАтрибутов.Колонки.Добавить("Значение");
//уровень вложенности поможет нам понимать когда требуется добавить вложенную ветку, а когда нужно вернуться на уровень вверх
УровеньВложенности = 0;
//текущая строка - строка дерева, будет меняться при увеличении вложенности
ТекущаяСтрока = Неопределено;
//чтение файла XML 1С производится не построчно, а по структуре, при окончании файла чтение вернет ЛОЖЬ
Пока Файл.Прочитать() Цикл
//нас интересуют три вида узлов - начало элемента, текст (значение элемента) и конец элемента (чтобы вернуться на уровень вверх)
Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
УровеньВложенности = УровеньВложенности + 1;
//если это первая строка, то добавим ее в самый верх дерева и сохраним только наименование
Если ТекущаяСтрока = Неопределено Тогда
ТекущаяСтрока = дзXML.Строки.Добавить();
ТекущаяСтрока.Наименование = Файл.Имя;
Продолжить;
Иначе
//вложенные строки
ТекущаяСтрока = ТекущаяСтрока.Строки.Добавить();
ТекущаяСтрока.Наименование = Файл.Имя; //сохраним наименование
//есть ли у этого элемента XML атрибуты?
Если Файл.КоличествоАтрибутов() > 0 Тогда
//если да - скопируем подготовленную пустую таблицу для сохранения атрибутов
тАтрибутыУзла = тАтрибутов.Скопировать();
//цикл по количеству атрибутов у этого элемента
Для Сч = 0 по Файл.КоличествоАтрибутов()-1 Цикл
//для каждого атрибута запомним имя и значение
Строка = тАтрибутыУзла.Добавить();
Строка.Имя = Файл.ИмяАтрибута(Сч);
Строка.Значение = Файл.ЗначениеАтрибута(Сч);
КонецЦикла;
//сохраним таблицу атрибутов элемента в текущую строку
ТекущаяСтрока.Атрибуты = тАтрибутыУзла;
КонецЕсли;
КонецЕсли;
ИначеЕсли Файл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
//в начале элемента увеличиваем уровень вложенности, в конце элемента уменьшаем
УровеньВложенности = УровеньВложенности - 1;
//возвращаем текущую строку на уровень вверх
ТекущаяСтрока = ТекущаяСтрока.Родитель;
ИначеЕсли Файл.ТипУзла = ТипУзлаXML.Текст Тогда
//если у элемента есть значение - просто сохраним его
ТекущаяСтрока.Значение = Файл.Значение;
КонецЕсли;
КонецЦикла;
Файл.Закрыть();
Пример 2. Запись файла 1С XML с помощью объекта ЗаписьXML 1С
//создаем файл ЗаписьXML 1С
Файл = Новый ЗаписьXML();
Файл.ОткрытьФайл("D:\СтруктураКонфигурации.xml", "UTF-8");
Файл.ЗаписатьНачалоЭлемента("Конфигурация");
//по метаданным обходим все справочники (подробнее см. "Работа с метаданными")
Для каждого Справочник из Метаданные.Справочники Цикл
//ЗаписатьНачалоЭлемента - открывает новую [подчиненную] ветку
Файл.ЗаписатьНачалоЭлемента("Справочник");
//ЗаписатьАтрибут - записывает атрибут в открытую ранее ветку
Файл.ЗаписатьАтрибут("Имя", Справочник.Имя);
Файл.ЗаписатьАтрибут("Синоним", Справочник.Синоним);
//по метаданным обходим все реквизиты справочника
Для каждого Реквизит из Справочник.Реквизиты Цикл
КонецЦикла;
//по метаданным обходим все табличные части справочника
Для каждого ТЧ из Справочник.ТабличныеЧасти Цикл
Файл.ЗаписатьНачалоЭлемента("ТабличнаяЧасть");
Файл.ЗаписатьАтрибут("Имя", ТЧ.Имя);
Файл.ЗаписатьАтрибут("Синоним", ТЧ.Синоним);
Для каждого Реквизит из ТЧ.Реквизиты Цикл
Файл.ЗаписатьНачалоЭлемента("Реквизит");
Файл.ЗаписатьАтрибут("Имя", Реквизит.Имя);
Файл.ЗаписатьАтрибут("Синоним", Реквизит.Синоним);
Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
//ЗаписатьКонецЭлемента - "закрывает" открытую ранее с помощью ЗаписатьНачалоЭлемента ветку
Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
Файл.ЗаписатьКонецЭлемента();
Файл.Закрыть();