1С 8 загрузка из xml

Иногда в работе сталкиваешься с ситуацией, когда возникает необходимость перенести данные из одной конфигурации 1С в другую. Для переноса данных между идентичными конфигурациями существует обработка Выгрузка и загрузка данных xml.

Внешняя обработка выгрузка и загрузка данных в xml 1с 8.3

В некоторых конфигурациях имеется типовой функционал для обмена данными (например, выгрузка из конфигурации Зарплата и управление персоналом в Бухгалтерию предприятия или из Управления торговлей в Бухгалтерию предприятия, из Зарплата и кадры государственного учреждения в Бухгалтерию государственных учреждений и т.п.).

В случае, если конфигурации разные, приходится создавать правила переноса в конфигурации 1С: Конвертация данных. Также некоторые данные можно загрузить из табличного документа Excel, с помощью обработки Загрузки данных из табличного документа.

Для переноса данных между идентичными конфигурациями существует обработка Выгрузка и загрузка данных XML. Для корректной работы обработки база, в которую загружаются данные, должна быть того же релиза, что и база выгруженных данных.

Данная обработка поставляется в составе конфигурации 1С: Конвертация данных 2, а также скачать ее можно с сайта 1С или с диска ИТС.

Это универсальная обработка, которая подходит для любых конфигураций, с ее помощью можно произвести полную или частичную выгрузку данных в формате xml и соответственно загрузить их в другую информационную базу. Примером использования может быть выгрузка и загрузка справочников, обмен данными (выгрузка и загрузка документов) между конфигурациями, выгрузка для восстановления информации при сбое информационной базы.

Рассмотрим принцип работы данной обработки.

Выгрузка данных из 1С 8.3 в xml

Откроем обработку в базе Источнике, т.е. информационной базе, откуда будем выгружать наши данные: меню Файл — Открыть.

Выберем и откроем файл обработки Выгрузка и загрузка данных XML.

Откроется обработка, в которой необходимо произвести настройку выгрузки.

Данные объектов выгрузки отображены в таблице, где надо отметить, что будем выгружать. При этом у каждого поля стоит отметка Выгружать при необходимости. Это означает, что если выгружаемый объект связан с другими объектами, то при анализе объекта выгрузки программа 1С 8.3 (кнопка Определить данные, выгружаемые по ссылке) покажет связанные объекты. При необходимости выгрузки их нужно будет также отметить.

Например, при выгрузке справочника Номенклатура можно загрузить Единицы измерения. При выгрузке справочника Контрагенты или Организации можно выгрузить Банковские счета и Договора. Если их не выгрузить, то при загрузке этих данных не будет, а при переносе документов эти поля окажутся пустыми и в этих полях вместо данных будет надпись <Объект не найден>.

Предусмотрено два варианта выгрузки данных из 1С 8.3 в xml — на клиентский компьютер и в файл на сервере. При установленном переключателе выгрузить данные На клиентский компьютер выгрузка начинается сразу, при выборе варианта В файл на сервере можем указать место выгрузки.

При выгрузке можно установить галочку выгружать в формате FastInfoSet. Данный формат использует альтернативный синтаксис отображения xml-данных, обеспечивает меньший объем файлов и более высокую скорость обработки, чем скорость обработки данных, записанных в обычном xml-формате. Файл этого формата имеет расширение .fi или .finf.

Для примера, в новую созданную базу 1С 8.3 выгрузим справочники Организации, Контрагенты и Номенклатура.

О том, как создать новую базу 1С подробнее читайте в статье Как создать информационную базу в 1С 8.3

Отметив в списке необходимые для выгрузки объекты, нажимаем кнопку Определить данные, выгружаемые по ссылке и галочками программа 1С 8.3 отметит связанные объекты и при необходимости их также нужно пометить для выгрузки, поэтому отметим также справочники Договоры Контрагентов, Банки и Банковские счета. Затем только нажимаем кнопку Выгрузить. После формирования файла программа спросит, что делать с подготовленным файлом: Открыть или Сохранить.

Нажимаем Сохранить и указываем папку. В нашем примере папка Выгрузка из 1С.

Нажимаем кнопку Сохранить — файл выгружен.

Загрузка данных из xml файла в базу 1С 8.3

Откроем информационную базу-приемник, т.е. базу 1С 8.3, куда будем загружать наши данные.

В том случае, если планируется загрузить данные в рабочую базу (не пустую) необходимо выполнить резервное копирование перед загрузкой.

Открываем обработку Выгрузка и загрузка данных XML (меню Файл — Открыть) и нажимаем кнопку Загрузить данные.

В открывшемся окне выбираем наш ранее сохраненный файл, нажимаем кнопку Открыть и ждем окончания загрузки данных из файла.

В служебном сообщение появится информация об окончании загрузки.

Проверяем наши справочники.

Справочник Контрагенты (Справочники — Контрагенты).

Проверим, перенесся ли справочник Договоры. Проверим вкладу Договоры в элементе справочника Контрагенты.

Есть. Но для этого при выгрузке мы его тоже отметили.

Проверим справочник Номенклатура (Справочники — Номенклатура).

Данные перенесены.

См. также:

  • Как выгрузить документ, отчет из 1С 8.3 в Excel
  • Загрузка из Excel в 1С 8.3
  • Как выгрузить базу 1С 8.3 на флешку

Если Вы еще не являетесь подписчиком системы БухЭксперт8:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Как в «1С:Бухгалтерии 8» (ред. 3.0) загрузить данные из XML-файла электронного представления в регламентированный отчет?

Видеоролик выполнен в программе «1С:Бухгалтерия 8» версия 3.0.78.54.

Для форм отчетности, которые можно представлять в электронном виде, доступны кнопки Выгрузить и Загрузить. Команда Выгрузить служит для выгрузки отчетов в XML-файлы электронного представления, а команда Загрузить – для загрузки отчетов из таких файлов.

Функционал регламентированной отчетности позволяет загружать отчеты из файла выгрузки как в виде XML-файла для дальнейшей отправки по каналам связи, так и непосредственно в виде данных отчета.

Чтобы загрузить отчет в виде XML-файла, в списке отчетов единого рабочего места 1С-Отчетность следует нажать на кнопку Загрузить — Файл для отправки. В открывшемся окне потребуется найти папку с сохраненным файлом и подтвердить передачу выбранного файла, после чего открывается окно файла отчета с данными в формате XML. В окне файла отчета можно выбрать и установить другую организацию, другой период отчета, другого получателя и другой вид документа. Но редактировать данные отчета, представленные в формате XML, достаточно сложно. После нажатия на кнопку Записать и закрыть в списке отчетов появляется сохраненный отчет, который можно отправить в контролирующий орган напрямую из программы через сервис 1С-Отчетность.

В отличие от загрузки самих файлов электронного представления, загрузка данных отчета из файла выгрузки позволяет получить заполненный регламентированный отчет так, как если бы он был подготовлен в самой программе.

Загрузить данные файла выгрузки можно:

  • из списка отчетов 1С-Отчетности – при этом будет создан новый отчет;
  • из формы регламентированного отчета соответствующего вида – при этом будет выполнена замена показателей отчета на данные из загружаемого файла.

Чтобы создать новый отчет из файла выгрузки, следует перейти в раздел Отчеты единого рабочего места 1С-Отчетность и нажать на кнопку Загрузить — Отчет. В открывшемся окне потребуется найти папку с сохраненным файлом и подтвердить передачу выбранного файла, после чего открывается окно файла отчета. В окне файла отчета можно выбрать и установить другую организацию, другой период отчета, другого получателя и другой вид документа. После нажатия на кнопку Загрузить и закрыть открывается экранная форма отчета.

С отчетом, созданным из файла выгрузки, можно работать так же, как и с любым другим регламентированным отчетом, созданным в программе. Исключение — нельзя расшифровать показатели отчета, загруженные из другой программы, поскольку расшифровке подлежат только данные «своей» информационной базы.

Файл выгрузки можно загрузить непосредственно в форму регламентированного отчета и получить заполненный регламентированный отчет. Для этого следует воспользоваться кнопкой Загрузить, расположенной на верхней командной панели открытого отчета.

При попытке загрузить файл, не соответствующий виду открытого отчета или его отчетному периоду, будет выдано сообщение о невозможности такой загрузки.

Также невозможно загрузить данные из файла с форматом электронного представления, отличным от утвержденного для текущей формы отчета. В том случае, если данные из файла выгрузки загружаются в существующий отчет, и процесс завершается с ошибкой из-за несоответствия форматов, предыдущее заполнение отчета не изменяется.

При успешной загрузке файла в открытый отчет показатели существующего отчета очищаются и заменяются данными из файла выгрузки.

Дальнейшие действия с отчетом ничем не отличаются от действий, которые требуется выполнять при работе с любым другим регламентированным отчетом такого вида.

Приветствую вас, друзья. Хочу поделиться опытом работы с файлами XML, возможно, пригодится начинающим в этом деле )

1 пример — запись\чтение XML, выгрузим документ в xml файл и загрузим его обратно

2 пример, выгрузка номенклатуры в идентичную конфигурацию по COM Соединению.

Для выгрузки документа в базу с другой конфигурацией будем объявлять элементы и пространства имен вручную.

&НаКлиенте Функция ПолучитьПутьКФайлу(Режим) ЗаписьXML = Новый ЗаписьXML; ///1 ВАРИАНТ, Прописываем путь к фалу, при записи — файл будет перезаписываться ПутьКФайлу = «d:\Temp\Test.XML»; ///2 ВАРИАНТ, Указываем путь при сохранении/открытии Диалог = Новый ДиалогВыбораФайла(Режим); Диалог.Заголовок = «Выбрать»; Диалог.Фильтр = «XML (*.xml)|*.xml»; Диалог.МножественныйВыбор = Ложь; Диалог.Каталог = «F:\»; //При желании, (Открывается этот диск по умолчанию) Если Диалог.Выбрать() Тогда ПутьКФайлу = Диалог.ПолноеИмяФайла; Иначе возврат Неопределено; КонецЕсли; Возврат ПутьКФайлу ; КонецФункции &НаКлиенте Процедура ЗаписьВРучную_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Сохранение); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; Документ = СсылкаНаДокумент; /// СсылкаНаДокумент — реквизит со ссылкой на документ «ПоступлениеТоваров» ЗаписьXML.ОткрытьФайл(ПутьКФайлу, «UTF-8»); //Открываем файл для записи, указываем кодировку ЗаписьXML.ЗаписатьОбъявлениеXML(); // Записываем объявление XML ЗаписьXML.ЗаписатьНачалоЭлемента(«ПоступлениеТоваров»); // Начало элемента Документа «ПоступлениеТоваров» ЗаписьXML.ЗаписатьАтрибут(«Код»,Строка(Документ.Код)); ЗаписьXML.ЗаписатьАтрибут(«Дата»,Строка(Документ.Дата)); ЗаписьXML.ЗаписатьАтрибут(«Номер»,Строка(Документ.Номер)); ЗаписьXML.ЗаписатьАтрибут(«Ответственный»,Строка(Документ.Ответственный)); ЗаписьXML.ЗаписатьАтрибут(«Комментарии»,Строка(Документ.Комментарии)); ЗаписьXML.ЗаписатьАтрибут(«Склад»,Строка(Документ.Склад)); ///Запись табличной части «Товары» Для Каждого выборка из Документ.Товары Цикл // Начинаем выгружать табличную часть «Товары» ЗаписьXML.ЗаписатьНачалоЭлемента(«ТаблицаТовары»); // Начало элемента «ТаблицаТовары» ЗаписьXML.ЗаписатьАтрибут(«Номенклатура»,Строка(Выборка.Номенклатура)); //ЗаписьXML.ЗаписатьАтрибут(«КодНоменклатуры»,Строка(Выборка.Номенклатура.Код)); ///ЕСЛИ СОВПАДАЮТ КОДЫ В БАЗАХ, МОЖНО ПРОИЗВОДИТЬ ПОИСК ПО КОДУ ПРИ ЧТЕНИИ ЗаписьXML.ЗаписатьАтрибут(«Количество»,Строка(Выборка.Количество)); ЗаписьXML.ЗаписатьАтрибут(«Цена»,Строка(Выборка.Цена)); ЗаписьXML.ЗаписатьАтрибут(«Сумма»,Строка(Выборка.Сумма)); ЗаписьXML.ЗаписатьАтрибут(«ЕД»,Строка(Выборка.Номенклатура.ЕдиницаИзмерения)); ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента «ТаблицаТовары» КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента «ПоступлениеТоваров» Сообщить(«Файл успешно записан!»); КонецПроцедуры

Чтение файла:

&НаКлиенте Процедура ЧтениеВРучную_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Открытие); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ПутьКФайлу); //Открываем файл ///Запись документа должна быть на сервере ЧтениеXMLНаСервере(ЧтениеXML); ПоказатьОповещениеПользователя(«Уведомление»,,»Документ записан!»,БиблиотекаКартинок.Успешно32); КонецПроцедуры &НаСервере Процедура ЧтениеXMLНаСервере(ЧтениеXML) Документ = Документы.ПоступлениеТоваров.СоздатьДокумент(); ///НОВЫЙ ДОКУМЕНТ Товары = Документ.Товары; ///ТАБЛИЧНАЯ ЧАСТЬ «Товары» Пока ЧтениеXML.Прочитать() Цикл //Цикл по структуре Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда //Определяем начало элемента Если ЧтениеXML.Имя = «ПоступлениеТоваров» Тогда Документ.Код = ЧтениеXML.ЗначениеАтрибута(«Код»); Документ.Дата = Дата(ЧтениеXML.ЗначениеАтрибута(«Дата»)); ///Преобразовываем обратно в дату Документ.Номер = ЧтениеXML.ЗначениеАтрибута(«Номер»); Документ.Ответственный = Справочники.Пользователи.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута(«Ответственный»)); Документ.Комментарии = ЧтениеXML.ЗначениеАтрибута(«Комментарии»); Документ.Склад = Справочники.Склады.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута(«Склад»)); КонецЕсли; Если ЧтениеXML.Имя = «ТаблицаТовары» Тогда ///Чтение элемента «ТаблицаТовары» НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = Справочники.Пользователи.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута(«Номенклатура»)); //НоваяСтрока.КодНоменклатуры = Справочники.Пользователи.НайтиПоКоду(ЧтениеXML.ЗначениеАтрибута(«КодНоменклатуры»)); НоваяСтрока.Количество = Число(ЧтениеXML.ЗначениеАтрибута(«Количество»)); НоваяСтрока.Цена = Число(ЧтениеXML.ЗначениеАтрибута(«Цена»)); НоваяСтрока.Сумма = Число(ЧтениеXML.ЗначениеАтрибута(«Сумма»)); НоваяСтрока.ЕД = НоваяСтрока.Номенклатура.ЕденицаИзмерения; КонецЕсли; КонецЕсли ; КонецЦикла; Документ.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры

Такой метод не всегда эффективен, так как наименования реквизитов могут отличаться, и запись осуществится с ошибками (Например с пустыми реквизитами), вполне подойдет для выгрузки и загрузки определенных элементов между не типовыми конфигурациями. Для более сложных задач (Выгрузка\Загрузка документов и справочников со структурой подчиненности) между не типовыми конфигурациями рекомендуется использовать Конвертацию данных и универсальный обмен данными в формате XML .

Пример Выгрузки и загрузки данных между одинаковыми базами средствами XDTO.

&НаКлиенте Процедура ЗаписьСредствамиXDTO_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Сохранение); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; Документ = СсылкаНаДокумент; /// СсылкаНаДокумент — реквизит со ссылкой на документ «ПоступлениеТоваров» ///////////////////////////////////////////////////////////////////////// //Выгрузка Запись = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ПутьКФайлу, «UTF-8″); //Открываем файл для записи, указываем кодировку //записываем объявление xml файла: <?xml version=»1.0»?> Запись.ЗаписатьОбъявлениеXML(); //записываем корневой элемент, по спецификации xml он может быть только один, назовем его «Данные» Запись.ЗаписатьНачалоЭлемента(«ПоступлениеТоваров»); //для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент //они будут работать на все вложеные элементы //пространство имен по-умолчанию Запись.ЗаписатьСоответствиеПространстваИмен(«», «http://v8.1c.ru/8.1/data/enterprise/current-config»); //пространства имен остальные префиксы Запись.ЗаписатьСоответствиеПространстваИмен(«xsd», «http://www.w3.org/2001/XMLSchema»); Запись.ЗаписатьСоответствиеПространстваИмен(«xsi», «http://www.w3.org/2001/XMLSchema-instance»); //вместо этого кода в боевой реализации выгрузки будет создание ОбъектаXDTO и его сериализация //через ФабрикуXDTO и загруженные в нее схемы конфигурации приемника СериализаторXDTO.ЗаписатьXML(Запись, Документ.ПолучитьОбъект()); /////ПРИМЕР ЗАПИСИ НЕСКОЛЬКИХ ДОКУМЕНТОВ //Выборка = Справочники.ПоступлениеТоваров.Выбрать(); //Пока Выборка.Следующий() Цикл // СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект()); //КонецЦикла; //записываем конец корневого элемента Запись.ЗаписатьКонецЭлемента(); Сообщить(«Файл успешно записан!»); //// посмотреть содержимое xml //Текст = Запись.Закрыть(); //Сообщить(«Содержимое файла:»); //Сообщить(Текст); КонецПроцедуры /////////////////////////////////ЗАГРУЗИМ ОБРАТНО //////////////////////////////////////////////////// &НаКлиенте Процедура ЧтениеСредствамиXDTO_XML() ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Открытие); Если ПутьКФайлу = Неопределено Тогда ///Если не выбран путь к фалу прерываем операцию возврат; КонецЕсли; ///////////////////////////////////////////////////////////////////////// //Загрузка Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ПутьКФайлу); //Открываем файл ///Запись документа должна быть на сервере ЧтениеXMLНаСервереЧасть2(Чтение); КонецПроцедуры &НаСервере Процедура ЧтениеXMLНаСервереЧасть2(Чтение) //прочитаем начало xml файла Чтение.ПерейтиКСодержимому(); //прочитаем начало корневого элемента Чтение.Прочитать(); //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника, //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл //читаем очередной элемент справочника Объект = СериализаторXDTO.ПрочитатьXML(Чтение); //покажем что прочитали, осталось только записать объект Сообщить(«»+ТипЗнч(Объект)+» — «+Объект); Объект.Записать(РежимЗаписиДокумента.Проведение); КонецЦикла; Чтение.Закрыть(); КонецПроцедуры

Пример выгрузки номенклатуры в одинаковую базу, без сохранения файла XML на диске:

&НаСервере Функция ПодключениеПоCOM() //КаталогБазыДанных=»C:\ЗУП3″; ///ФАЙЛОВАЯ БАЗА БазаДанных =»ZUP3″; ///СЕРВЕР Сервер =»Server1″; Пользователь =»Admin»; Пароль =»Admin»; V8 = Новый COMОбъект(«V83.ComConnector»); //Открытие = «file='» + КаталогБазыДанных + «‘; usr='» + Пользователь + «‘; pwd='» + Пароль + «‘;»; /// ФАЙЛОВОЕ Открытие= «srvr='» + Сервер + «‘; ref='» + БазаДанных + «‘; usr='» + Пользователь + «‘; pwd='» + Пароль + «‘;»; /// СЕРВЕРНОЕ Соединение = V8.Connect(Открытие); Возврат Соединение; КонецФункции &НаСервере Процедура ПодключитьсяИЗаписать() Соединение = ПодключениеПоCOM(); ///////////////////////////////////////////////////////////////////////// //Выгрузка Запись = Новый ЗаписьXML; Запись.УстановитьСтроку(); //записываем объявление xml файла: <?xml version=»1.0″?> Запись.ЗаписатьОбъявлениеXML(); //записываем корневой элемент, по спецификации xml он может быть только один, назовем его «Данные» Запись.ЗаписатьНачалоЭлемента(«Данные»); //для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент //они будут работать на все вложеные элементы //пространство имен по-умолчанию Запись.ЗаписатьСоответствиеПространстваИмен(«», «http://v8.1c.ru/8.1/data/enterprise/current-config»); //пространства имен остальные префиксы Запись.ЗаписатьСоответствиеПространстваИмен(«xsd», «http://www.w3.org/2001/XMLSchema»); Запись.ЗаписатьСоответствиеПространстваИмен(«xsi», «http://www.w3.org/2001/XMLSchema-instance»); //ограничение количества выгружаемых элементов для примера Кол = 4; Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл //вместо этого кода в боевой реализации выгрузки будет создание ОбъектаXDTO и его сериализация //через ФабрикуXDTO и загруженные в нее схемы конфигурации приемника СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект()); // Кол = Кол — 1; Если Кол=0 Тогда Прервать; КонецЕсли; КонецЦикла; //записываем конец корневого элемента Запись.ЗаписатьКонецЭлемента(); Текст = Запись.Закрыть(); //а теперь загрузим это в новую базу ///////////////////////////////////////////////////////////////////////// //Загрузка Чтение = Соединение.NewObject(«ЧтениеXML»); Чтение.УстановитьСтроку(Текст); //прочитаем начало xml файла Чтение.ПерейтиКСодержимому(); //прочитаем начало корневого элемента Чтение.Прочитать(); //читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника, //а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл //читаем очередной элемент справочника Объект = Соединение.СериализаторXDTO.ПрочитатьXML(Чтение); //покажем что прочитали, осталось только записать объект // Сообщить(«»+ТипЗнч(Объект)+» — «+Объект); //Запишем.. Объект.Записать(); КонецЦикла; Чтение.Закрыть(); Сообщить(«Операция завершена!»); КонецПроцедуры

Кстати, можно использовать данный метод между не типовыми конфигурациями, без использования «СериализаторXDTO» как в первом примере )

Спасибо за внимания! Прошу строго не судить ) возможно данный пример поможет именно для решение вашей задачи !) Удачи (=

Буду рад услышать более эффективные решения для подобных задач ! Спасибо !)