SFilchakov
10.06.16
✎
22:32
Всем привет!
Хочу кое что в хмл запихнуть.
Пишу в модуле объекта обработки
Процедура СоздатьФайлДанныхВыгрузки(СтруктураВыгрузки)
ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(«d:\doc.xml»);
КонецПроцедуры
\\\\
И сразу падает:
Ошибка при вызове метода контекста (ОткрытьФайл)
ЗаписьXML.ОткрытьФайл(«d:\doc.xml»);
по причине:
Каталог не обнаружен ‘d:\doc.xml’
//////
Хотя все примеры по создания файла xml так и начинаются:
ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл(«d:\doc.xml»);
///
Пробовал и так:
ЗаписьXML=Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(«d:\doc.xml»);
То же самое.
Подскажите, что не так?
Dmitry1c
10.06.16
✎
22:33
наклонная черта в другую сторону..
Dmitry1c
10.06.16
✎
22:35
или контекст на сервере
SFilchakov
10.06.16
✎
22:38
Что значит контекст на сервере?
Это в модуле обработки на 8.3
Поменял наклон, тоже самое.
Лефмихалыч
10.06.16
✎
22:38
(0) это все происходит на сервере приложений, а там все не так, как у тебя на клиенте
SFilchakov
10.06.16
✎
22:40
Это надо делать на клиенте что ли?
SFilchakov
10.06.16
✎
22:42
Спасибо, теперь понял.
А как же желать загрузку выгрузку по регламентному заданию через файл xml? если регламентное задание крутится на сервере, а файл можно создать только на клиенте и перейти с сервера на клиент нельзя?
Лефмихалыч
10.06.16
✎
23:05
(6) файл можно создать и на сервере. Просто надо создавать его на дисках и в папках, которые существуют на сервере
Лефмихалыч
10.06.16
✎
23:06
+(7) даже — не просто существуют, а еще и права на запись в них должны быть у пользователя, под которым запущена служба сервера приложений (ragent)
SFilchakov
10.06.16
✎
23:15
А где этого пользователя можно посмотреть?
Стальная Крыса
11.06.16
✎
04:18
На том компьютере, где работает сервер 1С
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену… по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший
Открытие файла пдф на сервере |
Я |
Eskeych
03.10.22 — 13:34
Хочу сделать открытие пдф документа и подпись ецп в http запросе. для этого мне нужно выполнить код
ЗаписьПДФ = Новый ЗаписьPDF();
ЗаписьПдф.Открыть(АдресКФайлуНаПК)
ну и дальше выполняется код
тут вылезла ошибка: «ошибка вызова метода контекста открыть()»
в синтакс-помощнике доступность стоит веб-сервис, сервис, тонкий клиент
Eskeych
1 — 03.10.22 — 13:38
ЗаписьPDF (PDFWriter)
Открыть (Open)
Вариант синтаксиса: Открыть файл
Синтаксис:
Открыть(<ИмяФайла>)
Параметры:
<ИмяФайла> (необязательный)
Тип: Строка.
Имя файла для записи PDF-документа.
Вариант синтаксиса: Установить поток
Синтаксис:
Открыть(<Поток>)
Параметры:
<Поток> (необязательный)
Тип: Поток, ПотокВПамяти, ФайловыйПоток.
Поток для записи PDF-файла.
Описание:
Открывает PDF-документ для записи.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
См. также:
ЗаписьPDF, метод ОткрытьАсинх
ЗаписьPDF, метод НачатьОткрытие
Использование в версии:
Доступен, начиная с версии 8.3.16.
Описание изменено в версии 8.3.18.
Воть
Мультук
2 — 03.10.22 — 13:39
(0)
1) Сервер и клиент физически разные компьютеры?
2) АдресКФайлуНаПК = «c:123.pdf»; //Лежит на локальном компьютере
или
АдресКФайлуНаПК = «servermydoc123.pdf»; //Лежит в сети, доступен учетке от которой крутится 1с на сервере
Garykom
3 — 03.10.22 — 13:44
(0) Вот ты и столкнулся что PDF не подходящий для подписи…
Eskeych
4 — 03.10.22 — 13:46
(3) яы его интерактивно выбирал и подписывал. Но в http запросе не хочет открывать.
Eskeych
5 — 03.10.22 — 13:47
(2) на локальном компе лежит. я имер ввиду на сервере &НаСервере вот это)
Garykom
6 — 03.10.22 — 13:48
(4) Под http запросом подразумеваешь http-сервис?
А он от чьего имени работает?
Eskeych
7 — 03.10.22 — 13:49
(2) на апаче развернул сервер, и на этом же пк хочу подписать. 2) АдресКФайлуНаПК = «c:123.pdf»; //Лежит на локальном компьютере вот этот вариант
Eskeych
8 — 03.10.22 — 13:50
(6) да, http-сервис. Вызываю с браузера) В каком смысле от чьего имени вызываю?)
Garykom
9 — 03.10.22 — 13:50
(7) А апач на попытку получить этот «c:123.pdf» что скажет?
Garykom
10 — 03.10.22 — 13:51
(9)+ Точнее апач дергает 1С от какого юзера, с какими правами и видимостью/доступом?
Eskeych
11 — 03.10.22 — 13:53
(9) это намек на то что бы прописать сетевой пусть к файлику?
(10) это демка БП с полными правами
Eskeych
12 — 03.10.22 — 13:53
файловая, дальше все будет в грм
Eskeych
13 — 03.10.22 — 13:57
Кстати, я думал передать файлик во временное хранилище и оттуда его запульнуть в записьPDF.Открыть(адресВремХран), по сути тогда 1с уже будет видеть этот файл. Взлетит или нет?)
Kassern
14 — 03.10.22 — 13:58
(13) Это проверить меньше минуты, дольше наверное пост сюда написать)
Eskeych
15 — 03.10.22 — 14:03
(14) не, ругается)
Eskeych
16 — 03.10.22 — 14:25
ап)
Сергиус
17 — 03.10.22 — 15:08
(15)Какой путь в АдресКФайлуНаПК?
Eskeych
18 — 03.10.22 — 15:29
(17) на раб столе C:UsersNewDesktopcovd.pdf
Eskeych
19 — 03.10.22 — 15:32
может быть у апача нет доступа к файлу? и нужно его как-нибудь дать?)
Kassern
20 — 03.10.22 — 15:37
(19) пробовали создать общую папку доступную всем?
Kassern
21 — 03.10.22 — 15:38
И покажите как вы через хранилище пробовали, скиньте кусок кода, как вы передавали с директивами и получали ДД.
mikecool
22 — 03.10.22 — 15:40
(15) значит тебе нельзя ((
Ногаминебить
23 — 03.10.22 — 15:42
(15) записьPDF.Открыть(адресВремХран)
Так сюда не адрес нужен, а имя файла вроде как. Надо файл временный на сервере создать, его заполнить и потом к имени обращаться.
Kassern
24 — 03.10.22 — 15:43
(23) я потому и просил, чтобы он кусок кода скинул. Может он из тех, кто на переменных экономит))
Eskeych
25 — 03.10.22 — 15:43
(21) та его уже затер, много попыток. Хочу попробовать вот так сделать:
ИмяВременногоФайла = КаталогВременныхФайлов() + «.pdf»;
ДвоичныйФайл = СтрокаНабора.Файл.Получить();
ДвоичныйФайл.Записать(ИмяВременногоФайла);
Eskeych
26 — 03.10.22 — 15:43
это на инфостарте нашел
Eskeych
27 — 03.10.22 — 15:44
(23) пробовал прописывать файл C:UsersNewDesktopcovd.pdf вот так прям не видит и все. Пишет что {ФормированиеТестовыхДанных HTTPСервис.Customers.Модуль(84)}: Ошибка при вызове метода контекста (Открыть)
Kassern
28 — 03.10.22 — 15:48
В общем код должен быть примерно таким
&НаКлиенте
Процедура ПрочитатьФайлНаКлиенте()
Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = «Выберите файл PDF»;
Диалог.ПолноеИмяФайла = «»;
Диалог.ПредварительныйПросмотр = Истина;
//Диалог.Фильтр=»» — тут свой формат pdf можете прописать
ВыбранФайл=Диалог.Выбрать();
Если ВыбранФайл Тогда
Файл=Новый Файл(Диалог.ПолноеИмяФайла);
ДД=Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
Адрес=ПоместитьВоВременноеХранилище(ДД,УникальныйИдентификатор);
ЗагрузитьФайлНаСервере(Адрес);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьФайлНаСервере(Адрес)
ДД=ПолучитьИзВременногоХранилища(Адрес);
Поток=ДД.ОткрытьПотокДляЧтения();
ЗаписьПДФ = Новый ЗаписьPDF();
ЗаписьПдф.Открыть(Поток);
КонецПроцедуры
Eskeych
29 — 03.10.22 — 15:53
(28) с потоком может и сработать. Но есть одно НО) я не могу получить файл на сервере сразу. ругается. хотел двоичные данные сделать, он говорит, что ошибка при вызове конструктора (двоичные данные). Все таки проблема в доступе к файлу?
писал так ДД = Новый ДвоичныеДанные(«C:UsersNewDesktopcovd.pdf»);
Eskeych
30 — 03.10.22 — 15:54
(29) или меня уже плавит?
Kassern
31 — 03.10.22 — 15:55
(29) Вы код целиком покажите, вы этот кусок где запускали, на клиенте, или на сервере?
Ногаминебить
32 — 03.10.22 — 15:55
Патамушта тогда надо ИмяВременногоФайла = КаталогВременныхФайлов() + «КакоетоКлевоеИмя.pdf»; И его уже туда, где щас юзерслалала
Eskeych
33 — 03.10.22 — 15:58
(31) это все http запрос. выполняется все на сервере, как я понял.
Функция GetcustomersListGetCustomersList(Запрос)
ПутьКФайлыПодписанный = «192.168.50.104обменcontract_offer-29-51 — копия.pdf»; //пробовал закинуть в общую папку
//ДД = Новый ДвоичныеДанные(«C:/Users/New/Desktop/contract.pdf»); // это получаю с пк
//КопироватьФайл(«C:/Users/New/Desktop/contract_offer-29-51.pdf», ПутьКФайлыПодписанный);
Адрес = ПоместитьВоВременноеХранилище(ПутьКФайлыПодписанный);
ДанныеСертификата = ДанныеСертификата();
Штамп = Штамп(ДанныеСертификата.Наименование, ДанныеСертификата.ДанныеСертификата);
ПутьКаталога = КаталогВременныхФайлов() + «.pdf»;
//ДД.Записать(ПутьКаталога);
МенеджерКриптографии = Новый МенеджерКриптографии(ДанныеСертификата.ИмяПрограммы, «», ДанныеСертификата.ТипПрограммы);
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = «145236»;
ПодписьPDF = Новый ОписаниеПодписиPDF;
ПодписьPDF.Имя = «ПодписьДоговора»;
ПодписьPDF.Сертификат = Новый СертификатКриптографии(ДанныеСертификата.ДанныеСертификата);
ПодписьPDF.ТипПодписи = ТипПодписиPDF.Сертифицирующая;
ПодписьPDF.БлокировкаДокумента = Истина;
ПодписьPDF.Верх = 5;
ПодписьPDF.Лево = 70;
ПодписьPDF.НомерСтраницы = 1;
ЗаписьPDF = Новый ЗаписьPDF();
ЗаписьPDF.Открыть(ПутьКаталога);
//
//ЗаписьPDF.ЗаписатьПодпись(МенеджерКриптографии, ПодписьPDF, Штамп);
//ЗаписьPDF.Закрыть();
Массив = Новый Массив;
Массив.Добавить(«ываываыв»);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Массив);
СтрокаДляОтвета = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить(«Content-type», «application/JSON; charset=utf-8»);
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
Eskeych
34 — 03.10.22 — 16:00
функция передолюана уже во все дыры, не ругайтесь, почищу потом)
Kassern
35 — 03.10.22 — 16:01
(33) Сделайте простенькую проверку.
Файл = Новый файл(ПутьДоФайла);
Файл.Существует() — что выдает?
Kassern
36 — 03.10.22 — 16:02
Скорее всего юзвер, под которым запускается служба апача у вас системная учетная запись, у нее нет прав на чтение этого файла, вот вы и любаетесь с последствиями.
Eskeych
37 — 03.10.22 — 16:03
(35) пробовал создавать, ругается на Новый Файл
Eskeych
38 — 03.10.22 — 16:03
Сейчас скину точную ошибку
Eskeych
39 — 03.10.22 — 16:04
Ошибка при вызове конструктора (ФАйл) вот что пишет
Eskeych
40 — 03.10.22 — 16:06
(36) апач запущен кстати от имени системы, а не юзера
Kassern
41 — 03.10.22 — 16:08
(40) попробуйте от админа запустить и протестить
Eskeych
42 — 03.10.22 — 16:16
и апач и 1с запущены от имени админа
Ivan_495
43 — 03.10.22 — 16:22
путь пропиши d:имя.pdf
Eskeych
44 — 03.10.22 — 16:32
(43) не не работает, даже в папках с общим доступом.
Ivan_495
45 — 03.10.22 — 16:35
с клиента попробуй
Kassern
46 — 03.10.22 — 16:38
(44) можете в base64 передать данный pdf файл и тогда http сервис его без проблем скушает и обработает)
Eskeych
47 — 03.10.22 — 16:44
(46) сейчас пилю регистр в котором буду хранить двоичные данные файлов. и из них формировать док и отправлять. Отпишусь если получится)
Eskeych
48 — 03.10.22 — 17:15
В общем на каталог временных фалов тоже ругается.
НаборЗаписей = РегистрыСведений.БК_РегистрСведений1.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
ИмяВремХранилища = КаталогВременныхФайлов() + «namefile.pdf»;
Строка = НаборЗаписей[0];
ДвочиныйФайл = Строка.Файл.Получить();
Если ДвочиныйФайл <> Неопределено Тогда
ДвочиныйФайл.Записать(ИмяВремХранилища);
КонецЕсли;
Eskeych
49 — 03.10.22 — 17:16
видимо что-то реально с доступом к папкам
Kassern
50 — 03.10.22 — 17:27
(48) зачем что-то записывать, когда есть поток?
Eskeych
51 — 03.10.22 — 17:34
Попытка записи в поток не поддерживающий запись — ответ
Garykom
52 — 03.10.22 — 19:05
(18) >на раб столе C:UsersNewDesktopcovd.pdf
Ты в курсе что рабочий стол одного юзера недоступен другому без админских прав?
Eskeych
53 — 04.10.22 — 09:07
(52) все было запущено от админа и 1с и апач. Кстати указал каталог временных файлов при публикации. ПДФ вроде как открыл, но не хочет писать подпись
Garykom
54 — 04.10.22 — 09:41
Fram
55 — 04.10.22 — 11:15
Интересно все что тс пишет происходит и делается в пределах одной системы. А то все обсуждение можно затирать если это не так )
Eskeych
56 — 04.10.22 — 11:42
(54) в общем сделал и то и то, не пашет. Текущий код:
НаборЗаписей = РегистрыСведений.БК_РегистрСведений1.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
ИмяВремХранилища = КаталогВременныхФайлов() + «namefile.pdf»;
Строка = НаборЗаписей[0];
ДвочиныйФайл = Строка.Файл.Получить();
Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + «.pdf»;
ИмяПромеж = Каталог + ИмяФайла;
ДвочиныйФайл.Записать(ИмяПромеж);
ДанныеСертификата = ДанныеСертификата();
Штамп = Штамп(ДанныеСертификата.Наименование, ДанныеСертификата.ДанныеСертификата);
МенеджерКриптографии = Новый МенеджерКриптографии(«Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider», «», 80);
МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = «145»;
ПодписьPDF = Новый ОписаниеПодписиPDF;
ПодписьPDF.Имя = «ПодписьДоговора»;
ПодписьPDF.Сертификат = Новый СертификатКриптографии(ДанныеСертификата.ДанныеСертификата);
ПодписьPDF.ТипПодписи = ТипПодписиPDF.Сертифицирующая;
//ПодписьPDF.БлокировкаДокумента = Истина;
//ПодписьPDF.Верх = 5;
//ПодписьPDF.Лево = 70;
//ПодписьPDF.НомерСтраницы = 1;
ЗаписьPDF = Новый ЗаписьPDF();
ЗаписьPDF.Открыть(ИмяПромеж);
ЗаписьPDF.ЗаписатьПодпись(МенеджерКриптографии, ПодписьPDF, Штамп);
ЗаписьPDF.Закрыть();
Массив = Новый Массив;
Массив.Добавить(«ываываыв»);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Массив);
СтрокаДляОтвета = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить(«Content-type», «application/JSON; charset=utf-8»);
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
из ДД собираю док. Уже ОТКРЫВАЕТ но, не хочет записывать, права на папку и файлы я дал.
Вылетает при выполнении кодманды «ЗаписьPDF.ЗаписатьПодпись(МенеджерКриптографии, ПодписьPDF, Штамп);»
он создает файл. Сохраняет его отображает штамп. Но не доподписывает. подпись оставляет но при проверке пишет что подпись недействительна.
если это все подписывать обработкой то все норм. Кстати, после того как http сервис вываливает с этой ошибкой «Ошибка при вызове метода контекста (ЗаписатьПодпись)» . Нужно чистить кеш иначе даже обработка выдает ошибку 0х00000000 тип оне находит контейнер сетрификата.
Eskeych
57 — 04.10.22 — 11:44
Ошибка при получении свойства сертификата (0x00000000) вот ошибка. Решается если добавить заново базу в список estart
Garykom
58 — 04.10.22 — 13:56
(56) Ты понимаешь что фоновое подписание «на сервере» это не тривиальная задача?
пиши микросервис на Go как я делал в свое время https://github.com/Garykom/mdlp
Денис Кузевич Заглянувший Сообщений: 4 |
Хочу сообщить о небольшой проблеме в обработке загрузки данных в БП3.0. В ситуации когда Сервер 1С Предприятия находится на одном физическом сервере, а клиенты запускаются на другом, то при выборе файла данных появляется ошибка: Связано с тем, что код чтения файла выполняется на сервере, а путь получен на клиенте, соответственно файла на сервере не существует! |
В обработке на основной форме сверху есть режим. Надо переключить «На клиенте» |
|
Артём Бавенд Заглянувший Сообщений: 971 |
Здравствуйте. Прошу выслать обработки: загрузка в бп 3,0 и 2,0 |
Артём Бавенд Заглянувший Сообщений: 971 |
Технология загрузки Корректировок. Почему, когда загружается корректировка реализации, она подтягивает за собой первоначальный документ, на основании которого была создана корректировка? Нарушает систему работы, если используется запрет на изменение или создание документов в закрытом периоде, а документ находится как раз в закрытом. А без загрузки этого документа, корректировка грузится не корректно. Во первых не подставляется документ основание. И даже если его подставить вручную, то документ корректировки перезаполняется по этому документу основанию… короче его значения, которые из альфы приходят, полностью заменяются значенимями из вновь подставленного документа основания, т.о. корректировка теряет смысл и приходится делать ее вручную в БП. |
Элина Мухамедзянова Заглянувший Сообщений: 168 |
#5
27.01.2015 14:58:05
Добрый день. Выслала на почту. |
||
Элина Мухамедзянова Заглянувший Сообщений: 168 |
#6
27.01.2015 17:53:49
Артём, Воспроизвести вашу ситуацию не удалось. Просьба проверить загрузку снова с обработкой, высланной нами ранее. |
||
Роман Батов Заглянувший Сообщений: 9 |
Здравствуйте. |
Добрый день, Роман. |
|
Роман Батов Заглянувший Сообщений: 9 |
Спасибо Вам огромное за оперативность |
#10
17.03.2015 14:13:12 Добрый день, вышлите пожалуйста обработку загрузки в БП 3.0 , методичку по обмену АА-БП. |
|
#11
17.03.2015 14:39:18 Добрый день, Алексей. |
|
Артём Бавенд Заглянувший Сообщений: 971 |
#12
06.04.2015 09:58:33
Здравствуйте. Изменено: Артём Бавенд — 06.04.2015 09:59:02 |
||||
#13
06.04.2015 16:42:42 Добрый день, Артём. Ваше сообщение передано разработчику, ответ будет дан в этой ветке форума. |
|
Александра Олифер Посетитель Сообщений: 138 |
#14
07.04.2015 10:46:10
На типовой конфигурации данная ситуация не воспроизводится, необходимо удаленное подключение. Пришлите, пожалуйста, параметры подключения на alfa@rarus.ru |
||
Ситуация. По расписанию регламентного задания выполняется обмен по плану обмена. В процессе обмена читается..должен читаться xml. Но обмен не выполняется по причине ошибки чтения файла: В ЖР более подробно: «{ОбщийМодуль.УправлениеОбменом.Модуль}: Ошибка при вызове метода контекста (ОткрытьФайл) по причине: по причине: Ошибка при выполнении файловой операции ‘\servобмен
ame.xml'» Чтение выполняется в ЗУП (8.2). Выгрузка из 8.1. В чем может быть причина ошибки? Форматы xml платформ? Или что-то другое?
может банально доступа нет к этой папке?
Ну вроде ж русским языком написано: «Ошибка при выполнении *файловой* операции». Нет там этого файла.
Все там есть, доступ к папке для всех полный
Файл не занят другим приложением, доступен к изменению, хотя это не требуется.
И, кстати, попытался прочитать его просто, выполнив кусок кода в режиме предприятия (ЧтениеXML.ОткрытьФайл(…)). Все ок.
*предположение* у тебя НАСТРОЕН АВТОМАТИЧЕСКИЙ обмен. Который ПОЧЕМУ-ТО не завершился. Этот файл заблокирован ЭТИМ процессом. НАДО: перегрузить сервер 1С.
Обмен завершился. Я же ошибку показал. Файл не заблокирован — 100%
Ладно, замяли. Видно, что никто не сталкивался.
Тэги:
Комментарии доступны только авторизированным пользователям
03.10.2017
В статье представлен простенький пример передачи файла с клиента на сервер и с сервера на клиент. Плюс к этому разобраны методы работы с записью XML.
Платформа 8.3.10.2466.
Конфигурация Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.49.21).
Большинство новичков-программистов, рано или поздно столкнется с проблемой передачи файла с клиента на сервер или в противоположную сторону! Необходимость передачи файла, скорее всего, возникнет после того, как программист на своем мониторе увидит ошибку вида:
ВнешняяОбработка.XML.Форма.Форма.Форма(61)}: Ошибка при вызове метода контекста (ОткрытьФайл);
Ошибка довольно простая и заключается в том, что находясь на сервере, программист пытается добраться до файла, лежащего у него на компе (на клиенте)! Выход из такой ситуации напрашивается сам собой — передать файл на машину-сервер!
Надеюсь, данная статья станет кому-нибудь полезной и поможет не забуксовать, столкнувшись с проблемой переноса. Ну и как маленький «бонусик» есть пример работы с xml (возможно тоже будем кому-то полезен, в частности для новичка)!
Это мой первый опыт в написании мини статьи, поэтому прошу строго не судить)
Весь программный код лежит в модуле формы:
&НаКлиенте
Процедура СоздатьXMLФайл(Команда)
ДиалогВыбораФайла=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); // выбор каталога
ДиалогВыбораФайла.Заголовок = "Выберите каталог!";
Если ДиалогВыбораФайла.Выбрать() Тогда
Путь = ДиалогВыбораФайла.Каталог + "ФайлXML.xml"; // присваиваем переменной путь выбранного каталога + имя будущего файла
КомандаДляСозданияФайла = "dir>" + Путь;
КомандаСистемы(КомандаДляСозданияФайла ,Путь); // создаем файл на компе
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВXML(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл для записи в него данных из 1с!";
Если Диалог.Выбрать() Тогда
Путь = Диалог.ПолноеИмяФайла; // выбираем созданный нами файлик для записи в него данных из 1с в формате xml
АдресВременногоХранилища = "";
ПоместитьФайл(АдресВременногоХранилища, Путь,,Ложь, ЭтаФорма.УникальныйИдентификатор); // помещаем наш файл во временное хранилище (для его передачи на сервер)
Адрес = ВыгрузитьВXMLНаСервере(АдресВременногоХранилища);
Двоичное=ПолучитьИзВременногоХранилища(Адрес); // по адресу временного хранилища получаем двоичные данные
Двоичное.Записать(Путь); // перезаписываем наш файлик на клиенте
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВыгрузитьВXMLНаСервере(АдресВременногоХранилища)
ДД = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); // вытаскиваем на сервере из временного хранилища как двоичные данные
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); // получаем имя временного файла на сервере
ДД.Записать(ИмяВременногоФайла); // записываем двоичные данные
//перенос файла с клиента на сервер завершен, на сервере создался файл с путем в переменной - "ИмяВременногоФайла"
Запрос = Новый Запрос; // Запросом вытаскиваем в выборку любые данные
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка,
| РеализацияТоваровУслуг.Контрагент,
| РеализацияТоваровУслуг.Номер,
| РеализацияТоваровУслуг.Организация,
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.ЕдиницаИзмерения,
| РеализацияТоваровУслугТовары.Количество,
| РеализацияТоваровУслугТовары.Цена,
| РеализацияТоваровУслугТовары.Сумма
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ПО (РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка)
|ГДЕ
| РеализацияТоваровУслуг.Дата = &Дата";
Запрос.УстановитьПараметр("Дата", '20230312235959');
Результат = Запрос.Выполнить().Выбрать();
Запись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.КонецЭлемента Тогда
////обработка
КонецЕсли ;
КонецЦикла;
КонецПроцедуры