Новичок новичку: как выгрузить/загрузить XML данные

15.06.21

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

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

Здравствуйте.

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

Возникнуть такая задача может по разным причинам. Как правило — это бэкап и перенос из базы в базу. Сейчас нас не интересует причина, просто примем как данность: потребовалась выгрузка, а затем последующая загрузка. Ее мы и будем сегодня выполнять.

Прежде всего, сразу хочу Вас остановить бежать открывать конфигуратор. Есть прекрасный инструмент, созданный самой фирмой 1С, который называется ВыгрузкаЗагрузкаДанныхXML83.epf (есть и ВыгрузкаЗагрузкаДанныхXML82.epf). Этим инструментом можно воспользоваться, если требуется перенести вообще все записи в метаданных, например, все документы товаров и услуг или все строки в справочнике номенклатура. Однако тонкой настройки выгрузки и загрузки Вы не при этом не получите. Выгрузятся все документы, а не конкретный или за период, а при загрузке, если документ уже такой есть, вы можете получить или задвоение, или сообщение об ошибке (которую, впрочем можно игнорировать). В принципе, все решаемо, но потребует более осмысленных действий, чем просто нажатие на кнопку.

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

А у Вас ситуация: нужно срочно что-то выгрузить / загрузить и некогда разбираться c существующими инструментами, а конфигуратор открывать Вы умеете, или нужно доработать уже существующий механизм, или разработать свой для пользователя, который не хочет разбираться в Конвертации, а хочет иметь «волшебную» кнопку, которая сделает все за него.

Для начала выполнения кода по загрузке или выгрузке нам нужно 2 кнопки: по нажатии на одну будет происходить выгрузка, а по нажатии на другую будет происходить загрузка. Где они будут расположены не важно, для примера, создадим обработку, в которую добавим форму, а на форму закинем эти 2 кнопки.

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

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

В результате у Вас должна получиться форма похожая на:

 

 

Переходим в модуль формы и вставляем следующий текст:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	НачалоПериода = НачалоГода(ТекущаяДата());
	КонецПериода = КонецГода(ТекущаяДата());
КонецПроцедуры

&НаКлиенте
Процедура Выгрузить(Команда)
	АдресФайлаВоВременномХранилище = "";
	ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище);
	ПолучитьФайл(АдресФайлаВоВременномХранилище, "Выгрузка.xml");
КонецПроцедуры

&НаСервере
Функция ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище)
	Расширение = ".xml";
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ФП_Месячный.Номер КАК Номер,
	|	ФП_Месячный.Дата КАК Дата,
	|	ФП_Месячный.Период КАК Период,
	|	ФП_Месячный.Статьи.(
	|		НомерСтроки КАК НомерСтроки,
	|		Вид.Код КАК ВидКод,
	|		ПланГодовой КАК ПланГодовой,
	|		ПланМесячный КАК ПланМесячный
	|	) КАК Статьи
	|ИЗ
	|	Документ.ФП_Месячный КАК ФП_Месячный
	|ГДЕ
	|	ФП_Месячный.ПометкаУдаления = ЛОЖЬ
	|	И ФП_Месячный.Дата >= &Дата1
	|	И ФП_Месячный.Дата <= &Дата2";
	
	Запрос.УстановитьПараметр("Дата1", НачалоПериода);
	Запрос.УстановитьПараметр("Дата2", КонецПериода);	
	Выборка = Запрос.Выполнить().Выгрузить();
	
	//заполняем файло	
	ЗаписьXML = Новый Запись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.ЗаписатьКонецЭлемента();
			
			ЗаписьXML.ЗаписатьНачалоЭлемента("ПланМесячный");
			ЗаписьXML.ЗаписатьТекст(XMLСтрока(ТЧ.ПланМесячный));
			ЗаписьXML.ЗаписатьКонецЭлемента();
			
			ЗаписьXML.ЗаписатьКонецЭлемента();
		КонецЦикла;
		ЗаписьXML.ЗаписатьКонецЭлемента();
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
	//заполняем файло	
	
	Файл = Новый Файл(ИмяВременногоФайла);	
	Если Файл.Существует() Тогда		
		ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
		АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
		УдалитьФайлы(ИмяВременногоФайла);		
	КонецЕсли;	

КонецФункции


&НаКлиенте
Процедура Загрузить(Команда)
	ПриЗавершении = Новый ОписаниеОповещения("ПоместитьФайлКомандаЗавершение", ЭтотОбъект);
	ПередПомещением = Новый ОписаниеОповещения("ПоместитьФайлКомандаПередПомещением", ЭтотОбъект);
	ДиалогВыбораФайлов = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайлов.Заголовок = "Выбор файла для помещения";
	ДиалогВыбораФайлов.МножественныйВыбор = Ложь;
	ДиалогВыбораФайлов.Фильтр = "Файлы выгрузки|*.xml";
	НачатьПомещениеФайла(ПриЗавершении, , ДиалогВыбораФайлов, Истина, , ПередПомещением);
КонецПроцедуры

&НаКлиенте
Процедура ПоместитьФайлКомандаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
	Если Результат Тогда
		ОбработатьНаСервере(Адрес);
		ОповеститьОбИзменении(Тип("ДокументСсылка.ФП_Месячный"));
		Сообщить("Загрузка завершена");
	Иначе
		Сообщить("Всетаки нужно было что-то выбрать");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПоместитьФайлКомандаПередПомещением(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт
	Если ПомещаемыйФайл.Размер() > 4*1024*1024 Тогда
		ПоказатьПредупреждение(, "Превышен максимальный размер файла");
		ОтказОтПомещенияФайла = Истина;
	КонецЕсли;
	Файл = ПомещаемыйФайл.Файл.ПолноеИмя;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ОбработатьНаСервере(Адрес)
	Данные = ПолучитьИзВременногоХранилища(Адрес);
	Парсер = Новый ЧтениеXML;
	Парсер.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Данные,КодировкаТекста.UTF8));
	Пока Парсер.Прочитать() Цикл
		
		Если (Парсер.Имя = "НовыйДокумент") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			НовыйДокумент = Документы.ФП_Месячный.СоздатьДокумент();
		КонецЕсли;
		
		Если (Парсер.Имя = "НовыйДокумент") И (Парсер.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда
			Попытка
				НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
			Исключение
			КонецПопытки;
		КонецЕсли;
		
		Если (Парсер.Имя = "Номер") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			Если Парсер.Прочитать() Тогда
				НовыйДокумент.Номер = Парсер.Значение;
			КонецЕсли;
		КонецЕсли;
		
		Если (Парсер.Имя = "Дата") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			Если Парсер.Прочитать() Тогда
				НовыйДокумент.Дата = XmlЗначение(Тип("Дата"), Парсер.Значение);
			КонецЕсли;
		КонецЕсли;
		
		Если (Парсер.Имя = "Период") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			Если Парсер.Прочитать() Тогда
				НовыйДокумент.Период = ПредопределенноеЗначение("Перечисление.ФП_Месяцы." + Парсер.Значение);
			КонецЕсли;
		КонецЕсли;
		
		Если (Парсер.Имя = "НоваяСтатья") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			НоваяСтрокаДокумента = НовыйДокумент.Статьи.Добавить();
		КонецЕсли;
		
		Если (Парсер.Имя = "ВидКод") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			Если Парсер.Прочитать() Тогда
				НоваяСтрокаДокумента.Вид = Справочники.ФП_СтатьиДвижения.НайтиПоКоду(Парсер.Значение);
			КонецЕсли;
		КонецЕсли;
		
		Если (Парсер.Имя = "ПланГодовой") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			Если Парсер.Прочитать() Тогда
				НоваяСтрокаДокумента.ПланГодовой = Парсер.Значение;
			КонецЕсли;
		КонецЕсли;
		
		Если (Парсер.Имя = "ПланМесячный") И (Парсер.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда
			Если Парсер.Прочитать() Тогда
				НоваяСтрокаДокумента.ПланМесячный = Парсер.Значение;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла; 
	Парсер.Закрыть();
	
КонецПроцедуры

Возвращаемся в форму. Переходим во вкладку команд формы. И указываем для команды выгрузить действие выгрузить, для команды загрузить действие загрузить:

 

 

В принципе, для моей конфигурации обработка уже рабочая. Но под Ваши задачи ее нужно переделать. А для этого разберем код.

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

 

 

Делать это не обязательно. Просто для удобства пользования.

Небольшое отступление.

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

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

Так вот 1С решила, что добавлять/читать документы или записи в справочнике можно только на сервере.

Соответственно, код по добавлению, изменению, чтению, будет выполняться на ДРУГОМ ПК. Не на Вашем!

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

Разбираем код выгрузки.

Команду выгрузки я подглядел в обработке ВыгрузкаЗагрузкаДанныхXML83.epf, о которой я говорил выше. Так что выгрузка у нас будет вполне себе типовая (правда я выкинул кучу строк ненужного кода, чем облегчил Вам труд)

Первым делом на клиенте создаем общее хранилище:

АдресФайлаВоВременномХранилище, так как мы не знаем ничего про него, то присваиваем ему пустой адрес.

Затем строчкой ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище); мы заполняем наше временное хранилище данными которые хотим сохранить в виде файла.

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

А вот процедуру ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище) разберем подробнее. Именно в ней происходит создание и заполнение временного файла обмена.

На сервере еще нет нужного нам файла, а потому первыми двумя строками мы определяем временный файл на сервере. Код выполняется на сервере, а потому временный файл тоже будет на сервере. Его мы заполним и поместим во временное хранилище из которого уже заберем себе на клиента.

Далее запросом получаем данные, которые необходимо выгружать в файл. Для примера, взят абстрактый документ, который называется ФП_Месячный, у него есть реквизиты: Дата, Номер, Период и табличная часть: Статьи.

Далее идет блок заполнения временного файла данными из запроса.

Первым делом мы объявляем новую ЗаписьXML. С помощью нее будет производиться запись во временный файл: ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла,"UTF-8");

UTF-8 — это кодировка текста. Ее можно принять как стандарт для большинства случаев.

ЗаписьXML.ЗаписатьОбъявлениеXML() - записываем во временный файл служебную информацию, например, информацию о кодировке. Тут думать не надо. Метод стандартный, все что нужно сделает сам.

Далее запись информации идет по принципу скобок в тексте. Есть открывающая, есть закрывающая и что-то в середине. Можно вкладывать одни элементы в другие:

Открываем элемент: ЗаписьXML.ЗаписатьНачалоЭлемента("НазваниеЭлемента");

//что-то делаем, конкретно в нашем случае, мы делаем запись о реквизите документа либо о самом документе

Закрываем элемент: ЗаписьXML.ЗаписатьКонецЭлемента()

Во время записи активно пользуемся функцией XMLСтрока(), которая преобразует метаданные в строковой тип, понятный для записи/чтения XML.

Так как сохранять данные мы можем только простые (число, дата, строка, булево…). То ссылочный тип данных Вид (это справочник с видами статей) мы сохранить не можем. Но мы можем сохранить Код Вида из справочника видов — это строка. Когда мы будем наоборот загружать данные из ХML, то мы будем получать Код. По коду искать ссылку в справочнике. И уже эту ссылку записывать в документ.

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

Ну и последним делом, мы удаляем на сервере временный файл. Если это не сделать, то сервер быстро переполниться временными файлами.

Вообще ситуация с временными файлами мне не нравится. Если загрузка/выгрузка будет идти постоянно, то накопитель сервера быстро выйдет из строя. Но так сделано разработчиками 1С. Этот код я подсмотрел у них в стандартной обработке.

Если можете подсказать как сделать все в оперативной памяти буду благодарен.

Разбираем код загрузки.

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

Вообще варианта 2:

1. Простой. Считать xml файл в переменную (массив) на клиенте. А после передав эту переменную на сервер, читая данные из массива записывать новые документы.

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

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

Рассмотрим вариант 2.

Помещать файл выгрузки на сервер во временное хранилище мы будем стандартной процедурой НачатьПомещениеФайла(). Так как механизм типовой, я просто скопировал код из примера 1С.

Для всех он будет одинаков. Единственно что я поменял, это фильтр (сделал xml). Стоит еще обратить внимание на размер. В моем случае он равен 4Гб. В Вашем, можете сделать меньше (больше нельзя).

Процедуру ПоместитьФайлКомандаЗавершение() переписал полностью. В ней я смотрю был ли выбран файл. Если файл был выбран, если он удовлетворяет размеру и расширению, тогда будет происходить чтение из данных указного файла в процедуре ОбработатьНаСервере(Адрес), где Адрес — это адрес временного хранилища. Ну а после того, как мы добавим данные, следует попросить систему перечитать базу, так как данные изменились. Это мы делаем процедурой ОповеститьОбИзменении(Тип("ДокументСсылка.ФП_Месячный")). Делать это не обязательно, но тогда чтобы увидеть результат нам придется закрыть и снова открыть список документов ФП_Месячный.

Рассмотрим процедуру ОбработатьНаСервере(Адрес)

Первым делом на сервере из временного хранилища нужно получить то, что мы помещали на клиенте: Данные = ПолучитьИзВременногоХранилища(Адрес);

Объявляем новую переменную с типом ЧтениеXML. В ней будет храниться весь документ XML.

Хитрая строка Парсер.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Данные,КодировкаТекста.UTF8)) преобразует двоичные данные в строку xml, которую затем записывает в объявленную ранее переменную с типом ЧтениеXML.

А далее читаем каждую строчку из XML и, в зависимости от данных, заполняем документ.

Ссылочные данные документа заполняются через их поиск по коду из xml.

Отступление.

Да возможность передачи ссылки имеется. Но я не рекомендую ее использовать, дабы данные не задвоились. То есть Документы с одинаковыми Кодами по сути будут разные так как у них разные ссылки (GUID). А если вести запись по коду документа, то документов с одинаковыми кодами Вы не получите. Будет сформировано исключительное событие и перенос данных в базу будет приостановлен. Поэтому я использую оператор попытка при записи документа. Если документ с таким кодом и датой уже есть, то запись произведена не будет, а будет переход к следующей записи.

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

&НаСервере
Функция ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ФП_Месячный.Номер КАК Номер,
	|	ФП_Месячный.Дата КАК Дата,
	|	ФП_Месячный.Период КАК Период,
	|	ФП_Месячный.Статьи.(
	|		НомерСтроки КАК НомерСтроки,
	|		Вид.Код КАК ВидКод,
	|		ПланГодовой КАК ПланГодовой,
	|		ПланМесячный КАК ПланМесячный
	|	) КАК Статьи
	|ИЗ
	|	Документ.ФП_Месячный КАК ФП_Месячный
	|ГДЕ
	|	ФП_Месячный.ПометкаУдаления = ЛОЖЬ
	|	И ФП_Месячный.Дата >= &Дата1
	|	И ФП_Месячный.Дата <= &Дата2";
	
	Запрос.УстановитьПараметр("Дата1", НачалоПериода);
	Запрос.УстановитьПараметр("Дата2", КонецПериода);	
	Выборка = Запрос.Выполнить().Выгрузить();

	//заполняем файло
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Выборка);
	//заполняем файло	
	АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(ЗаписьXML.Закрыть(), УникальныйИдентификатор);
	
КонецФункции

 

&НаСервереБезКонтекста
Процедура ОбработатьНаСервере(Адрес)
	Данные = ПолучитьИзВременногоХранилища(Адрес);
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Данные));
	Объекты = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
	Для Каждого Документ Из Объекты Цикл
		Попытка
			НовыйДокумент = Документы.ФП_Месячный.СоздатьДокумент();
			НовыйДокумент.Номер = Документ.Номер;
			НовыйДокумент.Дата = Документ.Дата;
			НовыйДокумент.Период = Документ.Период;
			Для Каждого Статья Из Документ.Статьи Цикл
				НоваяСтрокаДокумента = НовыйДокумент.Статьи.Добавить();
				НоваяСтрокаДокумента.Вид = Справочники.ФП_СтатьиДвижения.НайтиПоКоду(Статья.ВидКод);
				НоваяСтрокаДокумента.ПланГодовой = Статья.ПланГодовой;
				НоваяСтрокаДокумента.ПланМесячный = Статья.ПланМесячный;
			КонецЦикла;
			НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
		Исключение
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры

 

xml чтение запись передача файла на сервер без создания временных файлов сервере

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141529    798    297    

419

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    24026    169    51    

127

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 руб.

23.07.2020    51273    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56210    59    105    

61

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171178    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186886    589    509    

526

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36595    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    72098    180    150    

122
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. starik-2005 3088 04.06.21 07:31 Сейчас в теме
Интересно, конечно, но известно ли уважаемому сэру, что выгрузить и загрузить документ в одной базе данных можно и куда проще - тремя строчками кода вместо вот этого всего?
3. makfromkz 35 10.06.21 18:32 Сейчас в теме
(1) приведите пожалуйста эти три строчки кода
4. starik-2005 3088 10.06.21 22:11 Сейчас в теме
(3)
з = новый записьхмл;
 з.установитьстроку();
 Сериализаторхдто.записатьхмл( з, объект);
 Хмл = з.хакрыть()


Дальше с хмл, в которой бужет иксэмэль выгружаемого объекта, можно отправить куда угодно, там через сериализаторхдто получить объект и записать его
6. user1312100 226 11.06.21 06:15 Сейчас в теме
(4) Что является здесь объектом?
2. user1312100 226 04.06.21 10:39 Сейчас в теме
Эти знания не обязательно применять к одной и той же базе. Это пример загрузки/выгрузки на одном виде документа для понимания.
А можно увидеть эти три строчки кода?
Filchaleks; Award; user705698_bursev; user1346422; +4 Ответить
5. user1312100 226 11.06.21 06:14 Сейчас в теме
(4) Что является здесь объектом?
7. user1312100 226 11.06.21 09:03 Сейчас в теме
Хорошо, функцию выгрузки, благодаря Вашему уточнению, можно переписать так:

&НаСервере
Функция ВыгрузитьНаСервере(АдресФайлаВоВременномХранилище)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ФП_Месячный.Номер КАК Номер,
	|	ФП_Месячный.Дата КАК Дата,
	|	ФП_Месячный.Период КАК Период,
	|	ФП_Месячный.Статьи.(
	|		НомерСтроки КАК НомерСтроки,
	|		Вид.Код КАК ВидКод,
	|		ПланГодовой КАК ПланГодовой,
	|		ПланМесячный КАК ПланМесячный
	|	) КАК Статьи
	|ИЗ
	|	Документ.ФП_Месячный КАК ФП_Месячный
	|ГДЕ
	|	ФП_Месячный.ПометкаУдаления = ЛОЖЬ
	|	И ФП_Месячный.Дата >= &Дата1
	|	И ФП_Месячный.Дата <= &Дата2";
	
	Запрос.УстановитьПараметр("Дата1", НачалоПериода);
	Запрос.УстановитьПараметр("Дата2", КонецПериода);	
	Выборка = Запрос.Выполнить().Выгрузить();
	
	//заполняем файло
	ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Выборка);
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
	//заполняем файло	
	АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(ЗаписьXML.Закрыть(), УникальныйИдентификатор);
	
КонецФункции
Показать


Подскажите как теперь читать из полученного файла данные. Он выглядит совсем по другому.
Я могу как и ранее читать XML построчно, но это далеко не волшебные 3 строки, о которых Вы говорите.
Можно пример чтения такого файла?
Идеально бы получить из этого файла xml таблицу значений. Пока остановился на этом:

&НаСервереБезКонтекста
Процедура ОбработатьНаСервере(Адрес)
	Данные = ПолучитьИзВременногоХранилища(Адрес);
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ПолучитьСтрокуИзДвоичныхДанных(Данные,КодировкаТекста.UTF8));
	ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
КонецПроцедуры
8. starik-2005 3088 11.06.21 10:29 Сейчас в теме
(7) а почему фабрика?

Сериализаторхдто( ч ).Записать() - все.

Фактически сериализатор возвращает объект. Если это массив объектов, то можно циклом для каждого объект из сериализаторхдто( ч) цикл - пробежаться и хаписать. Те же три строки кода...
9. user1312100 226 11.06.21 11:05 Сейчас в теме
(8) Я не понял что такое у Вас "Объект", а на этот вопрос Вы не ответили. Потому СериализаторXDTO у меня выдавал ошибку, что бы я ему не скармливал. а фабрика работает и не матерится.

Сериализаторхдто( ч ).Записать() - Я надеюсь Вы никогда не будете писать тексты для синтасис-помошника ))) что, блин, такое "ч"? Вы понимаете, что общаетесь с новичком?

Как результат: Процедура или функция с указанным именем не определена (СериализаторXDTO)
10. starik-2005 3088 11.06.21 19:07 Сейчас в теме
(9) ч - чтениехмл, как бы ежу должно понятно быть. А про сериализатор в тот самый помощник можно заглянуть. Объект - это объект - что тут непонятного?)))
11. user1312100 226 12.06.21 05:01 Сейчас в теме
(10) Ваша строка Сериализаторхдто( ч ).Записать() - не работает. Записать() - конфигуратор не понимает. Даже просто СериализаторXDTO(ЧтениеXML) - выдает ошибку, СериализаторXDTO.ПрочитатьXML(ЧтениеXML); -выдает ошибку.

Вам же явно написали не получается. Ничего смешного, что не получается у новичка, тут нет. (((

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

Мы вообще говорим об управляемых формах?
12. starik-2005 3088 12.06.21 09:56 Сейчас в теме
(11) я текст писал с той целью что чел поймет, что к чему.

Суть:
1. Получаем объект. Документ, справочник, набор записей регистра - не важно.
2. С помощью сериализатора записываем его в хмл.
3. Хмл этот дальше можем в файл записать, можем в память, можем в сервис интернету....
Это в части записи.

В части чтения:
1. Получаем хмл
2. Засовываем в сериализатор, на выходе которого у нас получается объект, который мы до этого сериализовывали.
3. Делаем с объектом что нам надо - записываем, например.
softgarant; marku; +2 Ответить
13. user1312100 226 13.06.21 20:11 Сейчас в теме
(12)Я таких алгоритмов тысячу напишу! Код, пожалуйста! Говорю же сериализатор выдает ошибку. Я даже эту ошибку процитировал.
14. user1312100 226 15.06.21 06:19 Сейчас в теме
Новичок разобрался. Статью дополняю.
15. пользователь 20.06.21 23:16
Сообщение было скрыто модератором.
...
16. jan-pechka 426 01.11.23 15:33 Сейчас в теме
на итс готовая обработка есть для выгрузки/загрузки через xml спр, доков, регистров. Эта обработка есть так же в полном комплекте Конвертация данных2:
https://its.1c.ru/db/metod8dev/content/4126/hdoc
п.с. прикреплю саму обработку оттуда на всякий случай
Прикрепленные файлы:
UploadToXML_Выгру-Загруз данных через xml.zip
user1976593; +1 Ответить
Оставьте свое сообщение