|
Открыть файл exel на сервере | ☑ | ||
---|---|---|---|---|
0
iva77ru
25.09.24
✎
13:59
|
Добрый день.
1С:Предприятие 8.3 (8.3.22.2239), также пробовал 8.3.24.1667 На клиенте работает, а на сервере нет. Сервер запускал из-под текущего пользователя. Код: &НаСервере Процедура ОткрытьНаСервере() ИмяФайла = "D:\1C\Обработки\f1.xlsx"; НомерЛиста = 1; Попытка Excel = Новый COMОбъект("Excel.Application"); WB = Excel.Workbooks.Open(ИмяФайла); ЛистЭксель = WB.Worksheets(НомерЛиста); Исключение Сообщить(ОписаниеОшибки()); //Возврат тз; КонецПопытки; м = 1; Текст ошибки: {ВнешняяОбработка.ЗапускЭксель.Форма.Форма.Форма(68)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "D:\1C\Обработки\f1.xlsx". Это может быть вызвано одной из следующих причин. • Указан несуществующий файл или путь. • Файл используется другой программой. • Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент. Вылетает на строке: Excel.Workbooks.Open(ИмяФайла) Посоветуйте, в чем причина ошибки? |
|||
1
Волшебник
25.09.24
✎
14:12
|
Нет доступа к файлу от учётки сервера. Да и диска там такого нет
|
|||
2
d4rkmesa
25.09.24
✎
14:14
|
(0) Задайтесь вопросом, где находится расположение "D:\1C\Обработки\f1.xlsx" в контексте сервера. И что такое сервер.
|
|||
3
Ногаминебить
25.09.24
✎
14:15
|
Передать на сервер двоичные данные, создать на сервере временный файл, залить в него двоичные данные, открыть, чота с ним сделать, удалить временный файл.
|
|||
4
iva77ru
25.09.24
✎
14:23
|
Сервер запускаю от той же учетки, что и пользователь.На клиенте работает. Вариант передать на сервер, залить данные во временный, открыть таже ошибка.
|
|||
5
Волшебник
25.09.24
✎
14:24
|
(4) Сказки
|
|||
6
iva77ru
25.09.24
✎
14:25
|
{ВнешнийОтчет.ЗагрузкаДоплат.Форма.ФормаОтчета.Форма(300)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу "C:\Users\izhiltsov\AppData\Local\Temp\v8_3DB_1d0.xlsx". Это может быть вызвано одной из следующих причин.
• Указан несуществующий файл или путь. • Файл используется другой программой. • Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент. |
|||
7
Волшебник
25.09.24
✎
14:26
|
(6) Мы это уже читали
|
|||
8
vde69
25.09.24
✎
14:28
|
(6) почитай, зачем 1с использует "поместитьвовременноехранилище"
|
|||
9
Мультук
гуру
25.09.24
✎
14:32
|
(6)
не показывай свой код, которым передаёшь файл с клиента на сервер. Вдруг, мы что такое {такое} узнаем и сможем помочь. P.S. Я даже не представляю себе что может поломаться |
|||
10
d4rkmesa
25.09.24
✎
14:34
|
(4) Передаете на сервер через НачатьПомещениеФайлаНаСервер или НачатьПомещениеФайловНаСервер (самый простой способ вроде) ?
|
|||
11
Franchiser
гуру
25.09.24
✎
14:37
|
(0) ижильцова на сервере нет и вряд ли сервер работает под учётной ижильцова
|
|||
12
Ногаминебить
25.09.24
✎
14:36
|
&НаКлиенте
Процедура Загрузить(Команда) двд = Новый ДвоичныеДанные(Путь); табдок=ЧитаемЕксель(ДВД); &НаСервере Функция ЧитаемЕксель(двд) ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx"); ДвД.Записать(ИмяВременногоФайла); ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ИмяВременногоФайла); Так работает? |
|||
13
ass1c
25.09.24
✎
14:43
|
Шаблон, где файл или файлы выбираешь на клиенте через диалог:
&НаКлиенте Процедура ЗагрузитьЧтоТО(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыбранныеФайлы", ЭтаФорма); ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл: "; ДиалогОткрытияФайла.Фильтр = "Excel файлы(*.xls;*.xlsx)|*.xls;*.xlsx"; НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, ЭтаФорма.УникальныйИдентификатор); Модифицированность = Истина; КонецПроцедуры &НаКлиенте Процедура ОбработатьВыбранныеФайлы(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт Если ПомещенныеФайлы = Неопределено Тогда Возврат; КонецЕсли; Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл ПрочитатьФайлНаСервере(ПереданныйФайл.Хранение, ПереданныйФайл.Имя); КонецЦикла; КонецПроцедуры &НаСервере Процедура ПрочитатьФайлНаСервере(п_Адрес, п_ИмяФайла) Если НЕ ЭтоАдресВременногоХранилища(п_Адрес) Тогда Возврат; КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(п_Адрес); ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xlsx"); ДвоичныеДанные.Записать(ИмяПромежуточногоФайла); ИмяФайла = ИмяПромежуточногоФайла; //Твой Код.....Делай что хочешь с этим файлом КонецПроцедуры |
|||
14
iva77ru
25.09.24
✎
14:49
|
Попробывал на др. ПК платформа 1С такая же. На сервере работает.
|
|||
15
iva77ru
25.09.24
✎
14:51
|
Ногаминебить - все так. На этой ПК на сервере вылетает в ошибку.
|
|||
16
iva77ru
25.09.24
✎
14:54
|
ass1c - спасибо, тоже через временные делаю.
|
|||
17
Franchiser
гуру
25.09.24
✎
15:06
|
(16) что мешает делать не через временные?
|
|||
18
iva77ru
25.09.24
✎
15:12
|
Нашел, за помощь спасибо. Вот решение, возможно кому-то сэкономит время:
Обсуждалось не раз уже. Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы) https://forum.infostart.ru/forum9/topic132619/ |
|||
19
СвинТуз
25.09.24
✎
16:20
|
(18)
жесть. Решение универсальное. |
|||
20
СвинТуз
25.09.24
✎
16:20
|
(18)
на сервере может быть не установлен Эксель |
|||
21
arsik
гуру
25.09.24
✎
16:23
|
(0)(18) А нахера все это?
1С сама, без офиса, прекрасно xls в ТабличныйДокумент читает. |
|||
22
Franchiser
гуру
25.09.24
✎
17:32
|
(21) ну при чтении из 1с тоже бывают нюансы: там можно читать либо как текст, либо как значения. И не всегда корректно работает чтение. Если читаешь как текст числа, то нужно убирать неразрывные пробелы, например. А если читаешь значения, то тоже бывают проблемы.
|
|||
23
arsik
гуру
25.09.24
✎
18:41
|
(22) Да это намного проще обходится, чем (0) и не зависит от софта на сервере-клиенте
|
|||
24
DrZombi
гуру
26.09.24
✎
10:06
|
(18) Увы, будущее за линуксом.
Заполнение шаблона Word docx на сервере, без ComОбъект и внешних компонент, только механизмами самой Платформы 1С, методом XML-инъекции https://infostart.ru/1c/reports/1171429/ |
|||
25
Ногаминебить
26.09.24
✎
10:20
|
Как по мне одно из главных неудобств ухода от xls к табличныйдокумент - хитромудрая работа с многолистовыми файлами. Но вариантов действительно немного. Приходится приспосабливаться.
|
|||
26
arsik
гуру
26.09.24
✎
10:28
|
(25) И в чем проблема? Листы в области читаются. Каждую область можно читать отдельно как табличный документ. Вообще не проблема, что может быть проще:
Для каждого Лист из ТабличныйДокумент.Области Цикл |
|||
27
Ногаминебить
26.09.24
✎
10:32
|
(26) Когда этих листов не один десяток и половина скрыта геморно искать и высчитывать. :) А если еще и лист какой потом добавили - то запросто все поедет. По имени по старинке было как-то привычнее.
|
|||
28
arsik
гуру
26.09.24
✎
10:50
|
(27) Что ты высчитывать собрался? У областей имена совпадают с именами листов. Отличие лишь в том, что имена приведены к виду наименований объектов (пробелы заменены на подчеркивания)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |