Имя: Пароль:
1C
1С v8
Открыть файл exel на сервере
, , VID1234
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) Что ты высчитывать собрался? У областей имена совпадают с именами листов. Отличие лишь в том, что имена приведены к виду наименований объектов (пробелы заменены на подчеркивания)
AdBlock убивает бесплатный контент. 1Сергей