|   |   | 
| 
 | Открыть файл 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) Что ты высчитывать собрался? У областей имена совпадают с именами листов. Отличие лишь в том, что имена приведены к виду наименований объектов (пробелы заменены на подчеркивания)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |