Простой способ передачи файла с клиента на сервер и обратно. Пример работы с 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
42 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

ВнешняяОбработка.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.КонецЭлемента Тогда     
            ////обработка
        КонецЕсли ;         
    КонецЦикла;      
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

НДС 22% Учетные задачи ККМ Файловый обмен (TXT, XML, DBF), FTP 1С 8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Бухгалтерский учет Налоговый учет НДС Платные (руб)

Готовое обновление для конфигурации 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 , 1С:Управление производственным предприятием 1.3 обеспечивающее полную поддержку новой ставки НДС 22%. Для 1С:УТ 10.3 реализована поддержка печати чеков ККМ, а также Правила обмена с 1С:БП 3.0. Решение встраивает необходимые изменения в перечисления и документы, включая торговые операции и печатные формы.

12200 руб.

16.12.2025    6148    76    0    

70

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

22650 руб.

12.06.2017    156982    937    306    

475

SALE! 10%

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

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

38000 34200 руб.

15.12.2021    32005    234    61    

174

SALE! 10%

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

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

38000 34200 руб.

23.07.2020    64808    303    83    

243

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

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

16531 руб.

18.02.2016    198283    656    543    

558

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

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

55200 руб.

11.01.2021    36900    32    56    

34

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

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

58000 руб.

15.04.2019    81376    219    169    

157

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

Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

58000 руб.

10.07.2018    76946    53    144    

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


Синтаксис:

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

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

Чем по Вашему он проще?
3. ALagutin 57 12.09.17 14:29 Сейчас в теме
(2) Хотел написать "правильнее" вместо "проще", Т9 =)
4. Sergant007007 45 12.09.17 15:24 Сейчас в теме
(3) Почему правильнее?
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
VyacheslavShilov; freeek; +2 Ответить
8. adamsttemp 15.03.20 22:56 Сейчас в теме
спасибо за материал однозначно полезно, но не помешало бы перечисление основных методов и краткое описание. Хотя код понятен и есть комментарии, можно без этого, но немного сложнее.
9. MrBukas 08.07.20 12:43 Сейчас в теме
Проще и правильнее не через временный файл на сервере, а через поток в памяти
user809597; +1 Ответить
13. sulfur17 70 14.04.21 19:24 Сейчас в теме
10. burgomister 62 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 Сейчас в теме
Спасибо за публикацию, помогла.
20. r_max 10.06.25 13:40 Сейчас в теме
Спасибо. Использовал, немного допилив под свои нужды.
21. MasI 9 26.09.25 19:09 Сейчас в теме
Большое спасибо, самое хорошее описание передачи с сервера на клиент
Для отправки сообщения требуется регистрация/авторизация