Выгрузка в XML и загрузка из XML. Пример с передачей файла с клиента на сервер и обратно

22.07.20

Интеграция - Загрузка и выгрузка в Excel

Столкнулся с проблемой передачи файла с клиента на сервер и обратно для выгрузки и загрузки данных в XML. Много примеров для выгрузки/загрузки, но не встретил ни одного, где описывался бы механизм передачи файла на сервер и обратно

Скачать файлы

Наименование Файл Версия Размер
Образец выгрузки/загрузки XML
.epf 10,02Kb
106
.epf 10,02Kb 106 Скачать

Стоит следующая задача. В рабочей базе неведомым образом очистились данные реквизита НомерСчета у справочника БанковскиеСчета, необходимо восстановить данные. В копии эти данные имеются. Так что задача проста, выгрузить данные в XML из копии и загрузить эти данные в рабочую базу. Решил использовать [code]ЗаписьXML[/code] и [code]ЧтениеXML[/code], так как решение задачи при помощи этих методов показалось мне самым быстрым способом.

Так как операция одноразовая, то путь к файлу можно было бы указать сразу в коде, но решил, что хорошо было бы выбирать файл, в который выгружать данные и файл, из которого эти данные, соответственно, загружать. И тут столкнулся с очевидной проблемой: выбираю файл на клиенте, на сервере этого файла нет. [code]ЗаписьXML[/code] доступна на клиенте, но нельзя передать на сервер. Поэтому очевидное решение - надо использовать временное хранилище, куда помещать файл на клиенте, а на сервере из временного хранилища мы уже будет получать этот файл, заполнять его и снова помещать в хранилище, чтобы записать его на клиенте.

Выгрузка в XML:

Клиент: Выбрать файл - Поместить файл во временное хранилище

Сервер: Получить файл из временного хранилища - записать файл в каталог временных файлов - заполнить файл данными - поместить файл во временное хранилище- удалить файл из каталога временных файлов

Клиент: Получить файл из временного хранилище - записать файл

Загрузка из XML:

Клиент: Выбрать файл - Поместить файл во временное хранилище

Сервер: Получить файл из временного хранилища - записать файл в каталог временных файлов - загрузить данные - удалить файл из каталога временных файлов


&НаКлиенте
Процедура ВыгрузитьСчета(Команда)
	
	//Открываем форму выбора каталога для сохранения файла
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораКаталогаСохраненияФайла", ЭтаФорма);
	ОткрытьФорму("ВнешняяОбработка._ГУОВ_ВыгрузкаЗагрузкаБанковскихСчетовXML.Форма.ФормаВыбораФайла", Новый Структура("Направление", "Выгрузка"),ЭтаФорма,,ВариантОткрытияОкна.ОтдельноеОкно,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВыгрузитьСчетаНаСервере(АдресХранилища, ИмяФайла)
	
	//Получаем из временного хранилища файл, который будем заполнять
	ДД = ПолучитьИзВременногоХранилища(АдресХранилища);
	
	//Запишем временный файл в каталог временных файлов
	Путь = КаталогВременныхФайлов();
	ДД.Записать(Путь+ИмяФайла);
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	БанковскиеСчета.Ссылка,
	               |	БанковскиеСчета.НомерСчета,
	               |	БанковскиеСчета.Наименование
	               |ИЗ
	               |	Справочник.БанковскиеСчета КАК БанковскиеСчета
	               |ГДЕ
	               |	БанковскиеСчета.ЭтоГруппа
	               |	И НЕ БанковскиеСчета.ПометкаУдаления";
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(Путь+ИмяФайла);
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьНачалоЭлемента("Справочник");
	
	Счетчик = 0;
	Для каждого Строка Из РезультатЗапроса Цикл
	
		Если ЗначениеЗаполнено(Строка.НомерСчета) Тогда
			ЗаписьXML.ЗаписатьНачалоЭлемента("Элемент");
			ЗаписьXML.ЗаписатьАтрибут("Ссылка", ЗначениеВСтрокуВнутр(Строка.Ссылка));
			ЗаписьXML.ЗаписатьАтрибут("Наименование", Строка.Наименование);
			ЗаписьXML.ЗаписатьАтрибут("НомерСчета", Строка.НомерСчета);
			ЗаписьXML.ЗаписатьКонецЭлемента();
			Счетчик = Счетчик + 1;
		КонецЕсли;
	
	КонецЦикла;
	Сообщить("" + Счетчик);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.Закрыть();
	
	//После заполнения файла помещаем его во временное хранилище
	ДвД = Новый ДвоичныеДанные(Путь+ИмяФайла);
	АдресВрХранилищца = ПоместитьВоВременноеХранилище(ДвД);
	УдалитьФайлы(Путь, ИмяФайла);
	Возврат АдресВрХранилищца;
	
КонецФункции

&НаКлиенте
Процедура ЗагрузитьСчета(Команда)
	
	//Открываем форму выбора файла
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораКаталогаСохраненияФайла", ЭтаФорма);
	ОткрытьФорму("ВнешняяОбработка._ГУОВ_ВыгрузкаЗагрузкаБанковскихСчетовXML.Форма.ФормаВыбораФайла", Новый Структура("Направление", "Загрузка"),ЭтаФорма,,ВариантОткрытияОкна.ОтдельноеОкно,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

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

// <Описание процедуры>
//
// Параметры:
// ПараметрыОбработки - Структура - направление выгрузки и каталог либо файл
//
&НаКлиенте
Процедура ПослеВыбораКаталогаСохраненияФайла(ПараметрыОбработки, Параметр2) Экспорт 

	//Общая процедура обработки выбора для выгрузки/загрузки
	Если ПараметрыОбработки = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ПараметрыОбработки.Направление = "Выгрузка" Тогда
		//Создание файла xml в выбранном каталоге
		ИмяФайла = "unloading.xml";
		ПолноеИмяФайла = ПараметрыОбработки.КаталогФайл + "\" + ИмяФайла;
		ЗаписьXML = Новый ЗаписьXML;
		ЗаписьXML.ОткрытьФайл(ПолноеИмяФайла);
		ЗаписьXML.Закрыть();
		Сообщить("Создан файл выгрузки: " + ПолноеИмяФайла);
		
		//Помещаем файл во временное хранилище
		ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
		Адрес = ПоместитьВоВременноеХранилище(ДД);
		
		//На сервере осуществляем заполнение файла
		АдресХранилища = ВыгрузитьСчетаНаСервере(Адрес, ИмяФайла);
		
		//Получаем из хранилища заполненный файл и записываем его на клиентском компьютере
		ДвД = ПолучитьИзВременногоХранилища(АдресХранилища);
		ДвД.Записать(ПолноеИмяФайла);
	Иначе 
		//Загружаем данные из xml
		ПолноеИмяФайла = ПараметрыОбработки.КаталогФайл;
		
		//Помещаем файл во временное хранилище
		ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
		Адрес = ПоместитьВоВременноеХранилище(ДД);
		
		//Обрабатываем файл на сервере
		ЗагрузитьСчетаНаСервере(Адрес, ПолноеИмяФайла);
	КонецЕсли;

КонецПроцедуры // ПослеВыбораКаталогаСохраненияФайла()

 

См. также

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210153    620    524    

439

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

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

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150708    367    375    

501

Маркетплейсный загрузчик для 12-ти маркетплейсов в "БП 3", "УТ 11", "КА 2", ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    31892    226    63    

117

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

Загрузка и выгрузка в Excel Оптовая торговля Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    214909    925    886    

939

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15071    79    0    

60

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101368    296    173    

312
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4670 03.02.17 22:27 Сейчас в теме
Не могу понять, какая проблема с передачей туда-сюда. Механизм и так понятен из примеров. Смотрим управляемую форму Универсальный обмен данными XML.
alexveraww; +1 Ответить
4. Anchoret 60 06.02.17 08:57 Сейчас в теме
(1) с примерами-то как раз и была проблема, не мог найти ничего подходящего.

(2) согласен, можно выбрать каталог для сохранения, а с сервера уже достать файл и записать его на клиенте. Пятница была, соображал уже плохо=)
5. Aphanas 92 06.02.17 10:04 Сейчас в теме
(4) На сервер пустой файл вообще не надо отправлять. Можно создать XML-файл на сервере. Обратно на клиент его можно отправить как в виде файла (т. е. в виде двоичных данных), предварительно записав во временный файл, так и просто в виде строки. Во втором случае можно обойтись без обращения к диску на сервере.
Anchoret; +1 Ответить
2. Aphanas 92 06.02.17 04:41 Сейчас в теме
Помещение пустого файла во временное хранилище при выгрузке - совершенно лишняя операция.
Anchoret; +1 Ответить
3. Probot1c 06.02.17 04:57 Сейчас в теме
Батник написал на копирование и все
6. KereberoS 3 28.09.19 01:20 Сейчас в теме
(3) батник на копирование? Вы вообще не понимаете, что такое клиент-серверное программирование?
Оставьте свое сообщение