Имя: Пароль:
 
1C
1С v8
Ошибка открытия Excel на сервере
0 JIeoIIoJIbD
 
09.07.14
09:47
Добрый день коллеги, столкнулся с неведомой до этого дня ошибкой вида :

"{Обработка.ЗагрузкаИзExcel.Форма.Форма.Форма(68)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Не удалось найти 'C:\Users\steplitskiy\Desktop\Таблица.xls'. Проверьте задание имени и местоположения файла.

При попытке открытия файла с использованием списка недавно использованных файлов из меню ''Файл'' убедитесь, что файл не был переименован, перемещен или удален."


при этом файл ни где не открыт . Может кто сталкивался с подобной проблемой ? , код :

    
    ПодключитьРасширениеРаботыСФайлами();
        
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Таблица(*.xls)|*.xls";
    ДиалогОткрытияФайла.Фильтр                = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор    = Ложь;
    ДиалогОткрытияФайла.Заголовок             = "Выберите файл c описью вложения";
    
    Если ДиалогОткрытияФайла.Выбрать() Тогда
        ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
    Объект.ИмяФайла = ИмяФайла;
    Иначе
        Возврат;
    КонецЕсли;
    




           
    Если НЕ ЗначениеЗаполнено(Объект.ИмяФайла) Тогда
        Предупреждение("Необходимо выбрать файл", ,"Achtung!");
    Возврат;
    КонецЕсли;
    
        
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Объект.ИмяФайла);
        //Состояние("Обработка файла Microsoft Excel...");
    Исключение
        Сообщить(ОписаниеОшибки());
1 JIeoIIoJIbD
 
09.07.14
09:49
1С:Предприятие 8.3 (8.3.3.721)

Управление производственным предприятием, редакция 1.3 (1.3.48.2)
2 Maxus43
 
09.07.14
09:49
файл то там точно есть?)
3 Maxus43
 
09.07.14
09:50
с раб стола - вобще не по феншую. Клади файлы на диск C(D) лучше, причем не в корень, а в папку
4 JIeoIIoJIbD
 
09.07.14
09:52
файл есть 100.1% трогал, открывал, проверял , переносил в C:\1С\Таблица.xls увы, но  результат не изменился
5 Никулин Леонид
 
09.07.14
09:54
Попробуй файлик открыть интерактивно. Без использования 1Цэ.  Твой сервер вообще умеет работать с xls?
6 JIeoIIoJIbD
 
09.07.14
09:55
на сервере права Администратора, для DCOM соответственно тоже, при всех этих страшных ругательных словобуквах на файловой версии все работает.
7 Maxus43
 
09.07.14
09:58
файл открывается в контексте сервера или клиента?
8 JIeoIIoJIbD
 
09.07.14
09:59
&НаСервере
9 Maxus43
 
09.07.14
10:01
(8) т.е. вопросы ещё остались?
10 Maxus43
 
09.07.14
10:02
Рабочий стол - он твой, а не сервера. Запихни гвоорю на диск в папку, на рабочие столы юзеров защита идёт
11 JIeoIIoJIbD
 
09.07.14
10:03
в контексте сервера пытаюсь открыть файл , ошибка все еще висит
12 hhhh
 
09.07.14
10:03
(8) открой под пользователем USR1C82
13 PaulBC
 
09.07.14
10:03
Обсуждалось не раз уже.
Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы)
14 hhhh
 
09.07.14
10:04
(11) файл точно на сервере или на локальном компе?
15 JIeoIIoJIbD
 
09.07.14
10:04
(4)  "переносил в C:\1С\Таблица.xls увы, но  результат не изменился"  

такие дела
16 ДенисЧ
 
09.07.14
10:04
17 JIeoIIoJIbD
 
09.07.14
10:04
файл точно на сервере, подключаюсь по RDP
18 Maxus43
 
09.07.14
10:05
(15) проверь права на эту папку юзера под которым сервер 1с работает. явно укажи ему разрешение
19 f_vadim
 
09.07.14
10:05
прав нету
20 JIeoIIoJIbD
 
09.07.14
10:06
(13) создать папку ....
21 Никулин Леонид
 
09.07.14
10:06
(16) это мой дедушка...
22 hhhh
 
09.07.14
10:07
(17) но точно точно есть все права на папку C:\Users\steplitskiy\Desktop\ пользователю USR1C82 ??
23 Escander
 
09.07.14
10:12
Из консоли сервера этот файл открывается?
24 Escander
 
09.07.14
10:13
(22) папка правильная указана в (13)
25 JIeoIIoJIbD
 
09.07.14
11:18
Спасибо всем за участи , решение проблемы в посте № (13)

Создать папку C:\Windows\SysWOW64\config\systemprofile\Desktop или C:\Windows\System32\config\systemprofile\Desktop (в зависимости от разрядности вашей системы)


и через ADO


// <Описание функции>
//
// Параметры
//  <Параметр1>  - <Тип.Вид> - <описание параметра>
//                 <продолжение описания параметра>
//  <Параметр2>  - <Тип.Вид> - <описание параметра>
//                 <продолжение описания параметра>
//
// Возвращаемое значение:
//   <Тип.Вид>   - <описание возвращаемого значения>
//
Функция Подключить_ADO(ИмяФайла,HDR = Ложь) Экспорт

    Connection = Новый COMОбъект("ADODB.Connection");
    
    HDR = ?(HDR, "YES","NO");
    Попытка        
        //Excel 2000 - 2003
        Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ИмяФайла + "; Extended Properties=""Excel 8.0; HDR="+HDR+"; IMEX=1"";";
        Connection.Open();
                
    Исключение
        Попытка
            //Excel 2007
            Connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ИмяФайла + ";Extended Properties=""Excel 12.0; HDR="+HDR+";"";Persist Security Info=False;";            
            Connection.Open();    
        Исключение        
            Сообщить(ОписаниеОшибки());
            Connection = Неопределено;
        КонецПопытки;
    КонецПопытки;
    
    Возврат Connection;
    
КонецФункции


//  Читает данные с листа Excel в таблицу значений
//
//    ДиалогВыбораНомераЛиста - в случает нескольких листов предлагать пользователю интерактивно выбрать
//                              номер листа, НомерЛиста не учитывается
//
Функция АК_ПолучитьДанныеExcel(ИмяФайла, НомерЛиста = 1, ДиалогВыбораНомераЛиста = Ложь, HDR=Ложь) Экспорт
    
    //НомерЛиста = 1;
    //ДиалогВыбораНомераЛиста = Ложь;
    //HDR=Ложь;
    //Connection =
    
    тзИсходныеДанные = Новый ТаблицаЗначений;
    
    Если Не ЗначениеЗаполнено(ИмяФайла) Тогда
        
        Возврат тзИсходныеДанные;
    КонецЕсли;
    
    Подключить_ADO(ИмяФайла,HDR);
    
    Попытка
        
        Если Connection = Неопределено Тогда
            
            Возврат тзИсходныеДанные;
        КонецЕсли;
        
        ИмяЛиста = УстановитьИмяЛиста(НомерЛиста,ДиалогВыбораНомераЛиста);
        Если ИмяЛиста = Ложь Тогда
            Возврат тзИсходныеДанные;
        КонецЕсли;
        
        Если Не ЗначениеЗаполнено(ИмяЛиста) Тогда
        
            Возврат тзИсходныеДанные;
        КонецЕсли;
    
        RecordSet = Новый COMОбъект("ADODB.Recordset");
        
        ТекстЗапроса = "SELECT * FROM [" + ИмяЛиста + "]";
        
        Попытка
            
            RecordSet.Open(ТекстЗапроса, Connection );
        Исключение
            Connection = Неопределено;
            
            Возврат тзИсходныеДанные;
        КонецПопытки;
        
        КоличествоКолонок = RecordSet.Fields.Count;
        
        Для к =1 По КоличествоКолонок Цикл
            
            тзИсходныеДанные.Колонки.Добавить("Колонка" + Строка(к));            

        КонецЦикла;
        
        НумерацияКолонки = 0;
        
        ПризнакПервойСтроки = Истина;
        Пока RecordSet.EOF() = 0 Цикл
            
            НовСтрока = тзИсходныеДанные.Добавить();
            
            НумерацияКолонки = 0;
            
            Для каждого Позиция Из RecordSet.Fields Цикл
                
                НовСтрока[НумерацияКолонки] = Позиция.Value;
                
                НумерацияКолонки = НумерацияКолонки + 1;
                
                Если ПризнакПервойСтроки Тогда                    
                    тзИсходныеДанные.Колонки[НумерацияКолонки-1].Заголовок = Позиция.Name;
                КонецЕсли;
            КонецЦикла;
            
            RecordSet.MoveNext();
            ПризнакПервойСтроки = Ложь;
            
        КонецЦикла;
    Исключение
        
        #Если Клиент Тогда
            
            Сообщить ("Проблемы с ADO: " + ОписаниеОшибки());
        #КонецЕсли
    КонецПопытки;
    
    Попытка
        Connection.Close();
    Исключение
        
    КонецПопытки;
    Connection = Неопределено;
    
    Возврат тзИсходныеДанные;
    
КонецФункции


//По заданному номеру листа возвращает его имя в книге Excel
//
//    ДиалогВыбораНомераЛиста - в случает нескольких листов предлагать пользователю интерактивно выбрать
//                              номер листа, НомерЛиста не учитывается
//
Функция УстановитьИмяЛиста(Знач НомерЛиста, ДиалогВыбораНомераЛиста = Ложь) Экспорт

        Если Connection = Неопределено Тогда
            Возврат "";
        КонецЕсли;
        
        НовОб = Новый COMОбъект("ADOX.Catalog");
        
        НовОб.ActiveConnection = Connection;
        
        КолЛистов = НовОб.Tables.Count;
        
        Если КолЛистов = 0 Тогда
            Возврат "";
        ИначеЕсли НомерЛиста > КолЛистов Тогда
            Возврат "";
        КонецЕсли;
        
        Если ДиалогВыбораНомераЛиста Тогда
            
            Если КолЛистов = 1 Тогда
                НомерЛиста = 1;
            Иначе
                Страницы = Новый СписокЗначений();
                Для Каждого Таблица Из НовОб.Tables Цикл
                    Страницы.Добавить(Таблица.Name,Таблица.Name);
                КонецЦикла;
                
                Страница = Страницы.ВыбратьЭлемент("Укажите нужную страницу");
                Если Страница = Неопределено Тогда
                    Возврат Ложь;
                КонецЕсли;
                
                Возврат Страница.Значение;
            КонецЕсли;
            
        ИначеЕсли НомерЛиста = 0 Тогда
            
            НомерЛиста = 1;
            
        Иначе
        КонецЕсли;
        
        Возврат НовОб.Tables(НомерЛиста - 1).Name;
        
КонецФункции // ПолучитьИмяЛиста()