Формирование файла XML. Простая выгрузка для стороннего приложения
В организации учет может вестить не только в решениях на платформе 1С:Предприятие, но и в других программным комплексах (Галактика, Парус, SAP и прочее). При этом появляются задачи интеграции двух приложений.
Напрмер, в некотором приложении (назовем его «X») требуется прочитать список документов конфигурации. О практической пользе решения подобной задачи говорить не будем, отмечу лишь, что наиболее удобным и универсальным способом в такой ситуации будет выгрузка списка документов в формате XML .
Обмен с использованием этого формата является универсальным, поскольку с ним могут работать большинство приложений. Рассмотрим как можно из 1С:Предприятия выгрузить список документов конфигурации в XML-файл.
Выгрузка в XML
И так, перейдем к главному. Нам нужно обойти список метаданных документов и сформировать список в XML-файле. На следующем скриншоте представлен алгоритм формирования XML-файла:
Функция СоздатьXML() Экспорт // Получаем имя временного файла Путь = ПолучитьИмяВременногоФайла(); // Инициализируем класс "ЗаписьXML" Запись = Новый ЗаписьXML; // Открываем временный файл для записи Запись.ОткрытьФайл(Путь, "UTF-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-файла.
Описание и установка обработки «Выгрузка и загрузка данных XML»
Универсальная обработка «Выгрузка и загрузка данных XML» производит полную или частичную выгрузку данных информационной базы в файл в формате XML. Впоследствии этот файл может быть загружен в информационную базу с помощью этой же обработки. Формат файла выгрузки отличается от формата файла, создаваемого при выгрузке по плану обмена, заголовочной частью.
Обработка может использоваться только в тех случаях, когда информационная база, в которой осуществлялась выгрузка данных, и та, в которой данные загружаются, являются однородными (конфигурации идентичны, данные могут различаться), либо все выгружаемые объекты практически полностью идентичны по составу и типам реквизитов и табличных частей, свойствам «ведущего» объекта метаданных и т. д.
Использование этой обработки возможно, например, для создания полной или частичной резервной копии данных, осуществления обмена данными между информационными базами, а также как вспомогательный инструмент при восстановлении сбойных информационных баз.
Обработка поддерживает выгрузку данных с возможностью задания отбора по периоду. Также реализована проверка объектов на наличие недопустимых символов при обмене через XML.
Обработка «Выгрузка и загрузка данных XML» поставляется в составе конфигурации «Конвертация данных, редакция 2».
Внешняя обработка Выгрузка и загрузка данных XML.epf для запуска в «1С:Предприятии» версии 8.3 находится в каталоге EXE/EXTREPS/UNIREPS83/UploadToXML
Чтение XML-документов в 1С: как открывать файлы, способы их записи и преобразования в структуру
Работа с учетными программами представляет собой совокупность ежедневного выполняемых рутинных процессов. Использование сразу нескольких систем, отличающихся форматами хранения данных, обуславливает потребность в наличии универсального способа обработки. Подобным вариантом, оказывающим помощь в выгрузке, передаче и последующей загрузке информации в базу стал расширяемый язык разметки eXtensible Markup Language, рекомендованный к применению W3C (Консорциум Всемирной Паутины). Сегодня предприятия, пользующиеся стандартизированными библиотеками, имеют возможность в кратчайшие сроки реализовывать процесс обмена — создание, чтение и запись файлов XML, преобразуемых в структуру 1С, позволяет решить многие актуальные задачи.
Общее представление
- Объявление механизмов, применяемых для чтения.
- Определение цикла поочередного обхода.
- Считывание данных и их атрибутов.
- Представление информации, включая опцию записи в таблицы или переменные.
- Завершение процесса.
Результатом обработки, выполненной таким способом, становится вывод сообщений, содержащих импортированные сведения. При необходимости есть возможность заполнить заданную структуру и использовать ее для дальнейшей генерации документов и справочных записей. Стоит отметить, что функциональные возможности 1С позволяют быстро прочитать XML файл, что обуславливает популярность формата в тех случаях, когда требуется оперативный обмен данными со смежными источниками.
Механизм XDTO
В целях обеспечения доступности рассматриваемой методики разработчики учетной программы интегрировали собственную конфигурацию — Data Transfer Objects. В редакциях 8.1 и выше опция трансфера доступна по умолчанию, и позволяет пользователям не вдаваться в специфику формирования файловых объектов. За технические нюансы отвечает непосредственно платформа 1С, тогда как взаимодействующим с ней сотрудникам остается только указать информацию, требующую обработки. Правда, стоит учесть, что для полноценной реализации новой функции потребуется выполнение ряда специфических манипуляций.
Загрузка с помощью XDTO возможна после сообщения учетной программе его структуры, для передачи которой используется набор схем. Они создаются как с помощью специального приложения, так и в обычном текстовом редакторе. Итоговый документ должен описывать содержание и типы данных, которые будут использованы объектом. Перед тем как записать XML файл в 1С, схематическое описание загружается в общую конфигурацию, в раздел «Пакеты».
Самый простой вариант — создание вручную. Достаточно отразить наличие головного элемента и вложения с определенными атрибутами, экспортировать получившуюся в результате набора структуру в формат xsd, и передать ее второй стороне, исключая необходимость повторной генерации XDTO. Для сохранения новых версий на жестком диске применяется типовой серверный алгоритм, при этом следует учитывать, что сведения добавляются отдельно по каждой позиции, а при увеличении количества уровней вложения описывать придется все заголовки.
Готовые решения для всех направлений
Ускорьте работу сотрудников склада при помощи мобильной автоматизации. Навсегда устраните ошибки при приёмке, отгрузке, инвентаризации и перемещении товара.
Мобильность, точность и скорость пересчёта товара в торговом зале и на складе, позволят вам не потерять дни продаж во время проведения инвентаризации и при приёмке товара.
Обязательная маркировка товаров — это возможность для каждой организации на 100% исключить приёмку на свой склад контрафактного товара и отследить цепочку поставок от производителя
Скорость, точность приёмки и отгрузки товаров на складе — краеугольный камень в E-commerce бизнесе. Начни использовать современные, более эффективные мобильные инструменты.
Повысьте точность учета имущества организации, уровень контроля сохранности и перемещения каждой единицы. Мобильный учет снизит вероятность краж и естественных потерь.
Повысьте эффективность деятельности производственного предприятия за счет внедрения мобильной автоматизации для учёта товарно-материальных ценностей.
Первое в России готовое решение для учёта товара по RFID-меткам на каждом из этапов цепочки поставок.
Исключи ошибки сопоставления и считывания акцизных марок алкогольной продукции при помощи мобильных инструментов учёта.
Получение статуса партнёра «Клеверенс» позволит вашей компании выйти на новый уровень решения задач на предприятиях ваших клиентов.
Получение сертифицированного статуса партнёра «Клеверенс» позволит вашей компании выйти на новый уровень решения задач на предприятиях ваших клиентов..
Используй современные мобильные инструменты для проведения инвентаризации товара. Повысь скорость и точность бизнес-процесса.
Считывание файла средствами внутреннего языка
Максимально простая процедура, для реализации которой создается объект ЧтениеXML — 1С, заранее получившая необходимую информацию, раскладывает содержание полученного документа по нужным разделам.
Особенности записи данных
В целях оперативного выполнения подобной операции платформой осуществляется отдельная обработка. Пользователь открывает учетную программу, авторизуется и последовательно выбирает разделы «Файл — выгрузка», указывая конкретную область сохранения документа — жесткий или съемный накопитель — а также требуемый формат. Стоит отметить, что скорость во многом зависит от размера объекта, так что перед запуском очередного цикла следует уточнить, какую именно информацию нужно выгрузить. Программа допускает слияние путем добавления новых позиций — в этом случае в качестве конечного указывается уже существующий элемент, либо используется буфер.
Выгрузка с помощью XDTO
Пакет представляет собой объект метаданных, предназначенный для обмена с использованием рассматриваемого формата. Его задача — создание понятной системе структуры, которая в дальнейшем будет использоваться ею в процессе выгрузки. Альтернативное решение — уже упомянутое применение файлового структурирования, при котором параметры задаются вручную. В обоих случаях завершение процедуры, означающее определение схемы, позволяет перейти к созданию документов любой сложности.
Как программно создать файл XML в 1С
Взаимодействие с документацией реализуется непосредственно через встроенный системный язык. Функционал, предлагаемый разработчиками начиная с версии 8.1, позволяет:
- Последовательно считывать и записывать информацию.
- Преобразовывать строки, выбранные из текстового содержания или значения атрибута, в заданный тип.
- Формировать строковое атрибутное представление для размещения в тексте.
- Получать формат, соответствующий переданному типовому параметру.
- Проверять возможность прочтения и соответствие структуре по умолчанию.
- Применять функцию «записатьXML» и возвращать тип данных.
- Использовать модель схемы и объектного доступа DOM, соответствующую стандартам Level 2, XPath и Load and Save, а также канонической версии 1.1 Canonical.
Используя внешнее соединение, механизмы работы и преобразования, можно организовывать интеграцию с прикладным обеспечением в соответствии с принятыми форматами.
Как осуществляется перенос между базами
Разработчики предлагают для решения подобной задачи форму 1С: Конвертация, основывающуюся на использовании стандартных файлов XML. Алгоритм процедуры предусматривает предварительное формирование пользователем документа, содержащего перечень последовательных правил, на основе которых и будет выполняться заданная операция. Программный продукт обеспечивает оперативный трансфер как между идентичными, так и между различными по типологии конфигурациями. В первом случае продолжительность процесса составляет не более часа, тогда как в остальных придется ждать чуть дольше.
Локализация баз данных в одном месте, равно как и наличие доступа сразу к нескольким хранилищам, обеспечивает возможность использования механизма OLE. Это достаточно удобная заготовка, в ходе которой реализуется прямая файловая транзакция, что не слишком сокращает время обработки, но при этом сводит к нулю вероятность возникновения ошибок. Нужно учитывать, что технология не подходит для применения в тех случаях, когда речь идет о распределенных областях хранения.
Еще один, пожалуй, самый распространенный метод — файловый перенос. Простота и удобство обуславливаются возможностью использования любых форматов, включая doc, xls или dbf, однако на практике удобнее всего открыть в 1С файл XML, так как его структура позволяет сразу распределить информацию в соответствии с заданной схемой. Алгоритм укладывается в три последовательных операции: выгрузка, передача, загрузка. При этом фактическое местонахождение пользователей не имеет значения, что делает способ абсолютно универсальным. Небольшие размеры формируемых документов позволяют передавать их онлайн, через съемные носители или облачные сервисы хранения.
Из минусов, характерных для файлового метода, выделяют только два аспекта. Первый — необходимость наличия у юзера хотя бы начального уровня знаний и практических навыков работы с платформой. Второй — потребность в написании двух обработок, с помощью которых 1С и будет выгружать и загружать передаваемые данные.
Как правильно сформировать XML-документ произвольной структуры
Многие специалисты индустрии IT скрупулезно подходят к вопросу формирования файлов рассматриваемого стандарта, поскольку любые несоответствия, выявляемые программой в ходе прочтения, делают реализацию заданного процесса невозможной. В первую очередь это касается грамотного использования синтаксиса — так, например, несоблюдение порядка применения открывающих и закрывающих тегов приведет к появлению ошибки в тот момент, когда приложение получит команду его обработки.
На самом деле спецификация, определяющая правила корректного составления подобных схем и описаний, достаточно проста, и не требует особых пользовательских навыков. Можно сказать, что сегодня она даже не рассматривается в качестве обязательной для детального изучения, поскольку для создания нужных файлов всегда можно использовать встроенные программные механизмы или отдельные конфигураторы. В то же время нельзя не учитывать критичность ошибок, исключающих открытие документов другими приложениями и системными элементами.
Одно из преимуществ XML — отсутствие зависимости от конкретной платформы. Любая программа, предназначенная для обработки подобных объектов, способна считывать и использовать содержащуюся в них информацию, невзирая на то, какое оборудование или операционная система имеются в распоряжении пользователя. Так, например, грамотное применение структуры тегов позволяет открывать и обрабатывать данные, полученные с сервера, при помощи различных офисных приложений. Подобная совместимость во многом обуславливает популярность технологии в тех случаях, когда требуется быстрые трансферы между базами и компьютерами сети.
Стандартный алгоритм файловой генерации представляет собой следующую последовательность действий:
- Инициализация в 1С нового класса «ЗаписьXML», к примеру, с идентичным наименованием.
- Открытие временного файла и запись объявления.
- Заполнение содержания, с обязательным указанием начала и конца элемента.
- Запись и закрытие полученного объекта.
По умолчанию сгенерированный документ будет переведен в двоичные данные и вернется в место вызова функции создания, после чего может сохраняться в файловой структуре.
Преобразование объекта XDTO в текст
В ходе интеграции информационных систем, реализуемом с помощью вспомогательных сервисов, возможно появление необходимости в переводе пакета в текстовый вид — к примеру, с целью сохранения обменных логов. В подобной ситуации целесообразно придерживаться следующего алгоритма действий:
- Создать типовой файл записи.
- Отметить, что XML должно выводиться в строку 1С.
- Записать объект XDTO в элемент.
- Завершить процесс, получив результирующий вывод.
При этом нужно учитывать, что используемая пакетная переменная данных содержит информацию в формате, соответствующем одной из конфигураций, предложенных по умолчанию. В тех случаях, когда от платформы поступает запрос в сторону внешнего сервиса, предоставляющего динамическое описание, есть вероятность ошибки кода, обуславливаемой отсутствием в механизме сведений о структуре. Решение проблемы — замена в содержании элемента «ФабрикаXDTO» на «Прокси.ФабрикаXDTO», где последний является объектом типа WSПрокси, обеспечивающим обращение к ресурсу.
XML файлы 1С: запись и чтение
Формат XML пользуется большой популярностью при обмене различными текстовыми документами между информационными системами. Возможность создания уникальной структуры у документов позволяет ее использовать во многих областях – электронные библиотеки, WEB, импорт/экспорт, а также многих других. Без возможности удобной работы с этим форматом системы 1С не смогли бы получить такую популярность. Поскольку 1С активно использует WEB-технологии, каждый разработчик должен уметь читать XML и записывать в них информацию.
Представление файла XML и его чтение
Одним из ключевых преимуществ языка разметки XML является достаточно удобная и интуитивно понятная структура и синтаксис. При его создании авторы ставили цель создать язык разметки, который был бы удобен для чтения и человеком, и ЭВМ. На сегодняшний день XML получил широкое развитие в другие форматы, но остается популярным и широко используемым. Структура XML файла строится по следующей схеме:
Для рассмотрения примера импорта данных в 1С достаточно будет представленного выше файла. Чтобы написанная процедура смогла прочитать XML файл, достаточно в нее передать путь к самому файлу. Это можно сделать через интерфейс, позволив пользователям самостоятельно указывать файл, либо жестко прописав в тексте обработки.
Одним из популярных способов работы с XML размером до 100 МБ в 1С считается использование объектной модели документа (DOM). Его смысл заключается в поочередной обработке всех узлов документа, представленных в XML. На встроенном языке 1С этот алгоритм выглядит так:
- Объявление механизмов, с помощью которых происходит чтение XML файла; Цикл для обхода узлов;
- Считывания данных и атрибутов в узле;
- Вывод информации. Если есть необходимость, на этом этапе может происходить запись в переменные или сразу в нужные таблицы;
- Завершение работы механизма.
&НаСервере Процедура ЧитатьНаСервере(ПутьКФайлу) //объявление механизмов МеханизмЧтения = Новый ЧтениеXML; МеханизмЧтения.ОткрытьФайл(ПутьКФайлу); Построитель = Новый ПостроительDOM; Документ = Построитель.Прочитать(МеханизмЧтения); //цикл для обхода узлов Для каждого элемента Из Документ.ЭлементДокумента.ДочерниеУзлы Цикл //считывание данных Если элемента.ИмяУзла = "Товар" Тогда товар = элемента; Для каждого значения Из товар.ДочерниеУзлы Цикл Если значения.ИмяУзла = "Наименование" тогда Наименование = значения; Цвет = Наименование.Атрибуты.ПолучитьИменованныйЭлемент("Цвет"); ИначеЕсли значения.ИмяУзла = "Цена" тогда Стоимость = значения; Валюта = Стоимость.Атрибуты.ПолучитьИменованныйЭлемент("Валюта"); КонецЕсли; КонецЦикла; //вывод сообщений Сообщить("Наименование: " + Наименование.ТекстовоеСодержимое + "; цвет: "+Цвет.Значение +"; Цена: "+Стоимость.ТекстовоеСодержимое + "; Валюта: "+Валюта.Значение); КонецЕсли; КонецЦикла; //закрытие механизма НеханизмЧтения.Закрыть(); КонецПроцедуры
В качестве результата мы выводим пользователю сообщения с импортированными данными. Также вы можете поместить все данные в нужную структуру и на ее основании запрограммировать создание документа или записей в справочнике. Скорость работы 1С с xml достаточно велика, поэтому все чаще именно этот формат используется при обмене данными с другими источниками.
Для выгрузки информации нам также пригодится взаимодействие с файлами формата XML. Рассмотрим пример записи с помощью объекта платформы 1С ЗаписьXML и выгрузим данные по номенклатуре. Главными его преимуществами являются простота кода и скорость обработки данных. Серверный алгоритм записи файла XML можно представить в виде нескольких последовательных шагов:
- Подключаемся к файлу xml;
- Создаем головные элементы и в них записываем данные. Если вы хотите выгрузить в XML файл большой объем информации, то на этом этапе у вас будут использоваться циклы. Будьте аккуратны и не забывайте, что запрос данных нужно делать до цикла, а не в нем;
- Закрываем файл.
//открываем файл Nomenclatura.xml и записываем головной элемент ЗаписьВФайл = Новый ЗаписьХML(); ЗаписьВФайл.ОткрытьФайл("D:\Nomenclatura.xml", "UTF-8"); ЗаписьВФайл.3аписатьНачалоЭлемента("Товары"); //выбираем данные для записи ВыборкаИзСправочника = Справочники.Номенклатура.Выбрать(); //цикл, в котором происходит запись Пока ВыборкаИзСправочника.Следующий() цикл //запись новых данных ЗаписьВФайл.ЗаписатьНачалоЭлемента("Товар"); ЗаписьВФайл.ЗаписатьАтрибут("Наименование", ВыборкаИзСправочника.Наименование); ЗаписьВФайл.ЗаписатьАтрибут("НачальнаяЦена", Строка(ВыборкаИзСправочника.НачальнаяЦена)); ЗаписьВФайл.ЗаписатьКонецЭлемента(); КонецЦикла; //Закрываем головной элемент и файл ЗаписьВФайл.ЗаписатьКонецЭлемента(); ЗаписьВФайл.Закрыть();
Механизм XDTO в 1С
Разработчики компании 1С для обмена информацией через XML создали собственный механизм – XDTO (XML Data Transfer Objects). Начиная с версии 8.1, в платформе появляется возможность обмениваться данными с другими системами, не вникая в вопросы формирования файла XML. Большинство технических вопросов берет на себя 1С, а нам остается только указывать данные, необходимые, чтобы сформировать XML. Правда, для этого разработчику необходимо заранее проделать некоторые манипуляции.
Чтобы загрузить файл XML, используя XDTO, мы должны сообщить 1С структуру файла. Она передается через набор схем, которые можно создать в редакторе текста или воспользоваться специализированной программой. В результате должен получиться файл, описывающий общую структуру и типы данных, используемые в файле XML. Перед тем как считывать или записывать новый XML, разработчик должен загрузить его схему в конфигурацию в раздел «ПакетыXDTO».
В данном случае создадим руками простой пакет, чтобы 1С понимала структуру нашего файла для примера. Чтобы формирование файла закончилось успешно, нам нужно отразить в схеме, что у нас присутствует головной элемент и вложение с атрибутами. Созданную схему нужно экспортировать в файл формата xsd и передать вместе с xml, чтобы другой стороне не понадобилось разбираться со структурой и опять создавать пакет xdto.
Сохранить новый XML на жесткий диск поможет серверный алгоритм, похожий на предыдущий. Отличие состоит лишь в необходимости добавления данных по 1 товару в фабрику XDTO – специальный механизм платформы 8.3 1С. Если есть необходимость делать больше уровней вложенности – придется описывать каждый головной элемент.
//Открываем файл XML ЗаписьВФайл = Новый ЗаписьXML; ЗаписьВФайл.ОткрытьФайл("D:\Nomenclatura.xml", "UTF-8"); //Указываем 1C, какой тип данных следует создать - головной элемент ВсеТовары = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://wiseadviceXML.org","Товары")); //выбираем данные для выгрузки ВыборкаИзСправочника = Справочники.Номенклатура.Выбрать(); //Добавляем отдельные товары в головной элемент Пока ВыборкаИзСправочника.Следующий() цикл Товар = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://wiseadviceXML.org","Товар")); Товар.Наименование = ВыборкаИзСправочника.Наименование; Товар.НачальнаяЦена = Строка(ВыборкаИзСправочника.НачальнаяЦена); ВсеТовары.Добавить(Товар); КонецЦикла; //записываем данные и закрываем файл ФабрикаXDTO.ЗаписатьXML(ЗаписьВФайл, ВсеТовары); ЗаписьВФайл.Закрыть();
Рассмотренные механизмы являются достаточно универсальными и при правильной настройке могут решить большинство задач. Однако во взаимодействии 1С и XML достаточно много нюансов. Изучать их намного эффективнее в реальных условиях, а не на тестовых задачах, в которых обработка XML файла решает достаточно узкие задачи.