Доброго времени суток!
Только начинаю программировать, прошу пожалуйста подсказать в решении проблемы:
Перенос обработки с обычных на УФ,
При выполнении, выдает ошибку:
"Ошибка при выполнении файловой операции D:\Файлы\ПримерВыгрузки\Выгрузка данных водителя 00856 от 05072021-05072021.xls"
Данная ошибка выходит по причине того что запись Табличного документа в файл Excel происходит на сервере, а не на клиенте. у серверной машины нет доступа к ПК клиента(Расшарить папку для сервера нет возможности, так как пользователи работают в домене, а сервер находится не домене).
Возможно как то можно реализовывать через механизм временного хранилища(ПоместитьВоВременноеХранилище(),ПолучитьИзВременногоХранилища()) и двоичные данные, только не знаю как это сделать:(
Примечания по коду:
//представленный код процедуры выполняется на сервере
//переменная Каталог, указывается путь к папке на форме
Только начинаю программировать, прошу пожалуйста подсказать в решении проблемы:
Перенос обработки с обычных на УФ,
При выполнении, выдает ошибку:
"Ошибка при выполнении файловой операции D:\Файлы\ПримерВыгрузки\Выгрузка данных водителя 00856 от 05072021-05072021.xls"
Данная ошибка выходит по причине того что запись Табличного документа в файл Excel происходит на сервере, а не на клиенте. у серверной машины нет доступа к ПК клиента(Расшарить папку для сервера нет возможности, так как пользователи работают в домене, а сервер находится не домене).
Возможно как то можно реализовывать через механизм временного хранилища(ПоместитьВоВременноеХранилище(),ПолучитьИзВременногоХранилища()) и двоичные данные, только не знаю как это сделать:(
Примечания по коду:
//представленный код процедуры выполняется на сервере
//переменная Каталог, указывается путь к папке на форме
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабДок = Новый ТабличныйДокумент;
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработки.ПолучитьМакет("МакетВыгрузки");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ОбластьШапка");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьШапкаТаблицы);
Нач = Строка(Формат(НачалоПериода,"ДФ=дд"))+Строка(Формат(НачалоПериода,"ДФ=ММ"))+Строка(Формат(НачалоПериода,"ДФ=гггг"));
Кон = Строка(Формат(ОкончаниеПериода,"ДФ=дд"))+Строка(Формат(ОкончаниеПериода,"ДФ=ММ"))+Строка(Формат(ОкончаниеПериода,"ДФ=гггг"));
КолСотрудников = 0;
Пока Результат.Следующий() Цикл
КолСотрудников = КолСотрудников+1;
ТабДокВодитель = Новый ТабличныйДокумент;
ТабДокВодитель.Очистить();
ТабДокВодитель.Вывести(ОбластьШапкаТаблицы);
Стр = Результат.Выбрать();
Пока Стр.Следующий() Цикл
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("ОбластьДанные");
ОбластьДетальныхЗаписей.Параметры.Заполнить(Стр);
ТабДокВодитель.Вывести(ОбластьДетальныхЗаписей);
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
Путь = ?(Лев(Каталог,СтрДлина(Каталог)-1)="\",Каталог,Каталог+"\")+"Выгрузка данных водителя "+Строка(Результат.Водитель)+" от "+Нач+"-"+Кон+".xls";
ТабДокВодитель.Вывод=ИспользованиеВывода.Разрешить;
ТабДокВодитель.Записать(Путь, ТипФайлаТабличногоДокумента.XLS97);
КонецЦикла;
ВремКаталог = Каталог;
СоздатьКаталог(ВремКаталог);
Путь = ?(Лев(Каталог,СтрДлина(Каталог)-1)="\",Каталог,Каталог+"\")+"Выгрузка данных водителей "+Нач+"-"+Кон+".xls";
ТабДок.Вывод=ИспользованиеВывода.Разрешить;
Если КолСотрудников>1 Тогда
ТабДок.Записать(Путь, ТипФайлаТабличногоДокумента.XLS97);
КонецЕсли;
ПоказатьПо теме из базы знаний
- Как передать документ Word (ActiveDocument или ДвоичныеДанные) с сервера на клиент
- Передача файла с клиента на сервер и с сервера на клиент. Управляемые формы
- Работа с файлами в управляемых формах клиент серверной версии 8.3 и выше
- Динамические реквизиты на управляемой форме и передача файла Excel на сервер
- Передача данных с сервера на клиент
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)Вот пример, если поможет
&НаСервере
Функция ВыгрузитьНаСервере()
...
АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВремИмяФайла), УникальныйИдентификатор);
УдалитьФайлы(ВремИмяФайла);
Возврат АдресФайлаДанных;
КонецФункции
Показать&НаКлиенте
Процедура Выгрузить(Команда)
АдресФайлаДанныхВХранилище = ВыгрузитьНаСервере();
ДвДанные = ПолучитьИзВременногоХранилища(АдресФайлаДанныхВХранилище); //, ВремИмяФайла
ДвДанные.Записать(ИмяФайла);
КонецПроцедуры
В общем разобрался, через механизм временного хранилища,
На форме создал 3 реквизита для временных хранилищ с типом "строка", и 3 реквизита уникальных идентификатора с типом "уникальный идентификатор";
Код:
На форме создал 3 реквизита для временных хранилищ с типом "строка", и 3 реквизита уникальных идентификатора с типом "уникальный идентификатор";
Код:
&НаКлиенте
ПолучитьДанныеДляВыгрузкиНаСервере();
МассивДанныхВодитлей = ПолучитьИзВременногоХранилища(АдресХранилищаТабДокументов);
МассивНаименований = ПолучитьИзВременногоХранилища(АдресХранилищаНаименованийДокументов);
Каталог = Объект.Каталог;
Путь = ?(Лев(Каталог,СтрДлина(Каталог)-1)="\",Каталог,Каталог+"\");
Индекс = 0;
Для каждого ТабДокумент Из МассивДанныхВодитлей Цикл
Путь = МассивНаименований.Получить(Индекс);
Индекс = Индекс+1;
ТабДокумент.Вывод=ИспользованиеВывода.Разрешить;
ТабДокумент.Записать(Путь, ТипФайлаТабличногоДокумента.XLS97);
КонецЦикла;
Если МассивДанныхВодитлей.Количество() > 1 Тогда
НачалоПериода = Объект.НачалоПериода;
ОкончаниеПериода = Объект.ОкончаниеПериода;
Нач = Строка(Формат(НачалоПериода,"ДФ=дд"))+Строка(Формат(НачалоПериода,"ДФ=ММ"))+Строка(Формат(НачалоПериода,"ДФ=гггг"));
Кон = Строка(Формат(ОкончаниеПериода,"ДФ=дд"))+Строка(Формат(ОкончаниеПериода,"ДФ=ММ"))+Строка(Формат(ОкончаниеПериода,"ДФ=гггг"));
ТабДок = ПолучитьИзВременногоХранилища(АдресПутиОбщейВыгрузки);
ВремКаталог = Каталог;
СоздатьКаталог(ВремКаталог);
Путь = ?(Лев(Каталог,СтрДлина(Каталог)-1)="\",Каталог,Каталог+"\")+"Выгрузка данных водителей "+Нач+"-"+Кон+".xls";
ТабДок.Вывод=ИспользованиеВывода.Разрешить;
ТабДок.Записать(Путь, ТипФайлаТабличногоДокумента.XLS97);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанныеДляВыгрузкиНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = ".....";
Запрос.Параметры(.....);
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабДок = Новый ТабличныйДокумент;
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Макет = ОбъектОбработки.ПолучитьМакет("МакетВыгрузки");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ОбластьШапка");
ТабДок.Очистить();
ТабДок.Вывести(ОбластьШапкаТаблицы);
Нач = Строка(Формат(НачалоПериода,"ДФ=дд"))+Строка(Формат(НачалоПериода,"ДФ=ММ"))+Строка(Формат(НачалоПериода,"ДФ=гггг"));
Кон = Строка(Формат(ОкончаниеПериода,"ДФ=дд"))+Строка(Формат(ОкончаниеПериода,"ДФ=ММ"))+Строка(Формат(ОкончаниеПериода,"ДФ=гггг"));
КолСотрудников = 0;
МассивФайлов = Новый Массив;
МассивНаименованийФайлов = Новый Массив;
Пока Результат.Следующий() Цикл
КолСотрудников = КолСотрудников+1;
ТабДокВодитель = Новый ТабличныйДокумент;
ТабДокВодитель.Очистить();
ТабДокВодитель.Вывести(ОбластьШапкаТаблицы);
Стр = Результат.Выбрать();
Пока Стр.Следующий() Цикл
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("ОбластьДанные");
ОбластьДетальныхЗаписей.Параметры.Заполнить(Стр);
ТабДокВодитель.Вывести(ОбластьДетальныхЗаписей);
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
Путь = ?(Лев(Каталог,СтрДлина(Каталог)-1)="\",Каталог,Каталог+"\")+"Выгрузка данных водителя "+Строка(Результат.Водитель)+" от "+Нач+"-"+Кон+".xls";
ИмяФайла = "Выгрузка данных водителя "+Строка(Результат.Водитель)+" от "+Нач+"-"+Кон+".xls";
//Сохраняем ТабДокументы и пути их сохранения в массивы
МассивФайлов.Добавить(ТабДокВодитель);
МассивНаименованийФайлов.Добавить(Путь);
КонецЦикла;
//Помещаем массивы чтобы получить их позже на клиенте
ЭтаФорма.АдресХранилищаТабДокументов = ПоместитьВоВременноеХранилище((МассивФайлов), ЭтаФорма.УникальныйИдентификаторФайлов);
ЭтаФорма.АдресХранилищаНаименованийДокументов = ПоместитьВоВременноеХранилище((МассивНаименованийФайлов), ЭтаФорма.УникальныйИдентификаторНаименований);
Если КолСотрудников>1 Тогда
//сохраняем ТабДокумент с водителями во врем.хранилище чтобы позже получить его на клиенте
ЭтаФорма.АдресПутиОбщейВыгрузки = ПоместитьВоВременноеХранилище(ТабДок, ЭтаФорма.УникальныйИдентификаторОбщейВыгрузки);
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот