Простой способ передачи файла с клиента на сервер и обратно. Пример работы с 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
37
37 Скачать (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.КонецЭлемента Тогда     
            ////обработка
        КонецЕсли ;         
    КонецЦикла;      
КонецПроцедуры

 

См. также

Перенос данных 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.21.x).

35000 руб.

23.07.2020    57747    266    75    

220

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    147130    864    300    

446

Перенос данных 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 руб.

15.04.2019    75260    202    157    

141

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

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

35000 руб.

15.12.2021    27182    193    56    

149

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

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

53111 руб.

03.12.2020    39174    111    72    

104

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

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

5400 руб.

12.08.2021    39258    447    69    

182

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

18000 руб.

20.11.2015    161623    402    386    

529
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 61 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 Сейчас в теме
Спасибо за публикацию, помогла.
Оставьте свое сообщение