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

05.09.17

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

В статье представлен простенький пример передачи файла с клиента на сервер и с сервера на клиент. Плюс к этому разобраны методы работы с записью XML. Платформа 8.3.10.2466. Конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.49.21).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Простой способ передачи файла с клиента на серве и обратно. Пример работы с XML.:
.epf 8,21Kb ver:1.1.1
34
34 Скачать (1 SM) Купить за 1 850 руб.

Большинство новичков-программистов, рано или поздно столкнется с проблемой передачи файла с клиента на сервер или в противоположную сторону! Необходимость передачи файла, скорее всего, возникнет после того, как программист на своем мониторе увидит ошибку вида:

ВнешняяОбработка.XML.Форма.Форма.Форма(61)}: Ошибка при вызове метода контекста (ОткрытьФайл);

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

Надеюсь, данная статья станет кому-нибудь полезной и поможет не забуксовать, столкнувшись с проблемой переноса. Ну и как маленький «бонусик» есть пример работы с xml (возможно тоже будем кому-то полезен, в частности для новичка)!

Это мой первый опыт в написании мини статьи, поэтому прошу строго не судить) 

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

&НаКлиенте
Процедура СоздатьXMLФайл(Команда)
    
    ДиалогВыбораФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);  // выбор каталога
    ДиалогВыбораФайла.Заголовок = "Выберите каталог!";
    Если ДиалогВыбораФайла.Выбрать() Тогда
        Путь = ДиалогВыбораФайла.Каталог + "\ФайлXML.xml";    // присваиваем переменной путь выбранного каталога + имя будущего файла    
        КомандаДляСозданияФайла = "dir>" + Путь;
        КомандаСистемы(КомандаДляСозданияФайла ,Путь); // создаем файл на компе
    КонецЕсли;
    
КонецПроцедуры


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

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




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

 

См. также

SALE! 10%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    143997    833    297    

431

SALE! 10%

Перенос данных 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.20.x), также подходят для релиза 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    54238    239    73    

194

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    73186    192    152    

129

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    25199    176    51    

133

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    37618    101    68    

97

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    172396    308    259    

385

SALE! 10%

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

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    196309    156    244    

285

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.240.x), ERP 2.5 (2.5.20.x), КА 2.5 (2.5.20.x), также подходят для релиза ERP 2.5 (2.5.19.x), КА 2.5 (2.5.19.x).

35000 31500 руб.

24.06.2020    64356    80    27    

90
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ALagutin 57 12.09.17 09:58 Сейчас в теме
А разве не проще будет через НачатьПомещениеФайлов()?
Andy_NTG; +1 Ответить
2. Sergant007007 44 12.09.17 11:05 Сейчас в теме
(1)
НачатьПомещениеФайлов


Синтаксис:

ПоместитьФайл(<Адрес>, <НачальноеИмяФайла>, <ВыбранноеИмяФайла>, <Интерактивно>, <УникальныйИдентификаторФормы>)
Параметры:
...................
................
...........
Примечание:

Если для конфигурации свойство РежимИспользованияМодальности установлено в НеИспользовать, следует использовать метод НачатьПомещениеФайла.

Чем по Вашему он проще?
3. ALagutin 57 12.09.17 14:29 Сейчас в теме
(2) Хотел написать "правильнее" вместо "проще", Т9 =)
4. Sergant007007 44 12.09.17 15:24 Сейчас в теме
5. smilebringer 23.09.17 22:07 Сейчас в теме
(4) Потому что, если, использование модальности выключено, то приложение вызовет исключение, не будет работать Ваш код. Сейчас актуально использовать НачатьПомещениеФайла
12. daddy86 10.01.21 04:16 Сейчас в теме
(2) 'НачатьПомещениеФайла' - с 8.3.15, 'ПоместитьФайл' - c 8.3.13, и уже "устаревшая" после 8.3.15.
6. KereberoS 3 28.09.19 01:28 Сейчас в теме
Какой смысл помещения файла не сервер для записи, если в итоге создается файл пустой , передается на клиент , где в итоге перезаписывается? Копипаст статьи?
7. manishka 3 16.11.19 07:53 Сейчас в теме
Методы ПоместитьФайл(), ПоместитьФайлы(), ПолучитьФайлы() являются устаревшими и не рекомендуются к использованию.
Рекомендуется переработать работу с файлами в прикладных решениях, с учетом новых возможностей платформы.

Источник: https://dl03.1c.ru/content/Platform/8_3_13_1865/1cv8upd_8_3_13_1865.htm#07736471-0d7a-11e8-a3f7-0050569f678a
8. adamsttemp 15.03.20 22:56 Сейчас в теме
спасибо за материал однозначно полезно, но не помешало бы перечисление основных методов и краткое описание. Хотя код понятен и есть комментарии, можно без этого, но немного сложнее.
9. MrBukas 08.07.20 12:43 Сейчас в теме
Проще и правильнее не через временный файл на сервере, а через поток в памяти
user809597; +1 Ответить
13. sulfur17 66 14.04.21 19:24 Сейчас в теме
10. burgomister 59 22.12.20 04:56 Сейчас в теме
А ещё лучше было бы, если бы привели один пример - как это сделать. Задача: Создать файл на сервере, сохранить его в клиенте.
user780057; +1 Ответить
11. daddy86 10.01.21 04:14 Сейчас в теме
(10) так и создавайте, а потом возвращайте на клиента.
'НачатьПомещениеФайла' в помощь.
Тут суть - не где и что создать, а то, что выбираете файл на клиенте, а теперь в 1С сервер без ухищрений его не видит (точнее, начинает искать "у себя на диске", если передадите просто путь к файлу, как раньше в ОФ).
14. AlenaSa 30 05.07.21 18:01 Сейчас в теме
Спасибо за статью! Понятно и просто.
15. sdaf 22.07.21 09:56 Сейчас в теме
16. user1878921 29.11.22 19:45 Сейчас в теме
(1) Эй ты,
Скрытый текст
17. oKuzh 27.02.23 12:30 Сейчас в теме
Большое спасибо за публикацию. Мне очень помогла
18. andy3626603 03.03.23 12:23 Сейчас в теме
Спасибо за публикацию. Очень помогла.
19. julia961 21.02.24 10:38 Сейчас в теме
Спасибо за публикацию, помогла.
Оставьте свое сообщение