Имя: Пароль:
1C
1С v8
Куда копать - не открывает файл Excel
0 RomaH
 
naïve
13.01.12
11:53

&НаСервереБезКонтекста
Процедура ЗагрузитьИзФайлаНаСервере(АдресХранилища)
   
   ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
   
   ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
   
   ДвоичныеДанные.Записать(ИмяФайла);
   
   ЗагрузитьФайл(ИмяФайла);
   
   
   УдалитьФайлы(ИмяФайла);
   
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьФайл(ИмяФайла)
   
   Ексель = Новый COMОбъект("Excel.Application");
   
   Ексель.Workbooks.Open(ИмяФайла);


говорит что либо файла не существует, либо занят другим приложением, либо имя книги совпадает с открытым в данный момент

уникалльный временный файл, сушествует (я его на точке останова могу открыть интерактивно)
создается сервером и удалается без проблем

что еще может быть?
1 palm1c
 
13.01.12
11:54
Открой диспетчер задач и поубивай все эксели.
2 RomaH
 
naïve
13.01.12
11:54
убито все
3 wade25
 
13.01.12
11:55
Яб кэш почистил навсякий)
4 RomaH
 
naïve
13.01.12
11:55
до выполнения     Ексель = Новый COMОбъект("Excel.Application");
екселей нет в процессах
5 RomaH
 
naïve
13.01.12
11:56
(3) как и где?
6 Ковычки
 
13.01.12
11:56
Книга=ПолучитьCOMОбъект(ИмяФайла,"Excel.Application");
7 Tatitutu
 
13.01.12
11:58
ИмяФайла - что возвращает ?

может
ИмяФайла = ПолучитьИмяВременногоФайла(".xlsx");
8 palm1c
 
13.01.12
11:58
Значит, не делай через временный файл, делай через постоянный :)
9 RomaH
 
naïve
13.01.12
12:02
делаю через постоянный - одна фигня
(6) эта конструкция просто висит - и ничего не выводит

   Ексель = Новый COMОбъект("Excel.Application");
   
   Ексель.Workbooks.Open(ИмяФайла);

- эта хотя бы ошибку
10 RomaH
 
naïve
13.01.12
12:03
(7) не понял  ... что может? - возвращает имя НОВОГО временного файла куда пиштся файл, а потом оттуда же и открывается
11 Ковычки
 
13.01.12
12:04
а сервер имеет право на все это ?
12 RomaH
 
naïve
13.01.12
12:04
&НаСервереБезКонтекста
Процедура ЗагрузитьИзФайлаНаСервере(АдресХранилища)
   
   ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
   
   ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
   ИмяФайла = "C:\ФайлТаблицы.xls";
   
   ДвоичныеДанные.Записать(ИмяФайла);
   
   ЗагрузитьФайл(ИмяФайла);
   
   
   УдалитьФайлы(ИмяФайла);
   
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьФайл(ИмяФайла)
   
   Ексель = Новый COMОбъект("Excel.Application");
   
   Ексель.Workbooks.Open(ИмяФайла);


один фиг
13 RomaH
 
naïve
13.01.12
12:04
сервер запущет из под моей учетки
14 RomaH
 
naïve
13.01.12
12:05
т.е. конфигурация

SQL на другой машине
сервре 1С на рабочей - где и запускаю все это дело

8.2.14.540
15 palm1c
 
13.01.12
12:08
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ИмяФайла = "C:\ФайлТаблицы.xls";

Тут нет ошибки? там есть икс, а там нет?
16 palm1c
 
13.01.12
12:08
Попробуй закомментить строку с удалением файла
17 palm1c
 
13.01.12
12:09
Хочешь, я скину тебе рабочий вариант на 100%
18 RomaH
 
naïve
13.01.12
12:09
(15) это уже поиски, было и "х" - один фиг
на серваке установлен 2007 офис
исходный сделан на 2007 ... но пробовал уже и 2003
(16) - до неё не доходит .... ошибка внутри процедуры ЗагрузитьФайл
19 RomaH
 
naïve
13.01.12
12:09
(17) давай ...
20 palm1c
 
13.01.12
12:11
НачСтрока=1;
   
   ОбъектExcel    =Неопределено;
   РабочаяКнига=Неопределено;
   Листы        =Неопределено;
   СписокЛистов= Новый СписокЗначений();
   ФС = Новый Файл(ФайлВыгрузки);
   Если ФС.Существует()=Истина Тогда
       Попытка
           ОбъектExcel= Новый COMОбъект("Excel.Application");    
       Исключение
           Предупреждение("Похоже, Excel не установлен на компьютере, ничего сделать не могу!!!");
       КонецПопытки;    
       
       ОбъектExcel.Workbooks.Open(СокрЛП(ФайлВыгрузки));
       КнигаExcel = ОбъектExcel.ActiveWorkbook;
       ЛистExcel = КнигаExcel.Worksheets(1);
       КоличествоСтрок = ЛистExcel.Cells.CurrentRegion.Rows.Count;
       
       НачСтрока=1;
       КонСтрока=КоличествоСтрок;    
       
       сообщить(КоличествоСтрок);
       
       Сообщить("Начало загрузки таблицы - "+Формат(ТекущаяДата(), "ДЛФ=DT"));
       ЭлементыФормы.ИндикаторСостояния.МинимальноеЗначение=(НачСтрока+1);
       ЭлементыФормы.ИндикаторСостояния.МаксимальноеЗначение=КонСтрока-1;
       
       ЭлементыФормы.ИндикаторСостояния.МинимальноеЗначение=(НачСтрока+1);
       ЭлементыФормы.ИндикаторСостояния.МаксимальноеЗначение=КонСтрока;
       Состояние("Открытие Excel-файла...");
       
       НашлиТМЦ=0;        
       
       БылДок=0;
       Для ии=НачСтрока по КонСтрока-1 Цикл
           
           ИндикаторСостояния=ии;    
           //сообщить(ии);
           Попытка     ///------- потому, что в некоторых экселях по числам, а в других по буквам типа
               ЭтоСклад=ЛистExcel.Range("R8" + "C"+Формат(ии,"ЧГ=0")).Value;
               Код=ЛистExcel.Range("R9" + "C"+Формат(ии,"ЧГ=0")).Value;
               Имя=ЛистExcel.Range("R1" + "C"+Формат(ии,"ЧГ=0")).Value;
               Кво=ЛистExcel.Range("R3" + "C"+Формат(ии,"ЧГ=0")).Value;
               Цена=ЛистExcel.Range("R6" + "C"+Формат(ии,"ЧГ=0")).Value;
               
           
           Исключение
               ЭтоСклад=ЛистExcel.Range("H"+Формат(ии,"ЧГ=0")).Value;
               Код=ЛистExcel.Range("I"+Формат(ии,"ЧГ=0")).Value;
               Имя=ЛистExcel.Range("A"+Формат(ии,"ЧГ=0")).Value;
               Кво=ЛистExcel.Range("C"+Формат(ии,"ЧГ=0")).Value;
               Цена=ЛистExcel.Range("F"+Формат(ии,"ЧГ=0")).Value;
           
           КонецПопытки;
21 RomaH
 
naïve
13.01.12
12:13
(20) и чем он отличается от (0)?
       Попытка
           ОбъектExcel= Новый COMОбъект("Excel.Application");    
       Исключение
           Предупреждение("Похоже, Excel не установлен на компьютере, ничего сделать не могу!!!");
       КонецПопытки;    
       
       ОбъектExcel.Workbooks.Open(СокрЛП(ФайлВыгрузки));

только попыткой? - у меня ком объект создается, а вот книгу не открыть
22 palm1c
 
13.01.12
12:15
Это у меня работает, 100%.
ФайлВыгрузки - поле ввода на форме.
23 RomaH
 
naïve
13.01.12
12:16
хрен с ним - загружу через макет
(22) а у меня не работает

{Справочник.ВредныеПроизводственныеФакторыИРаботы.Форма.ФормаЗагрузкиСправочника.Форма(42)}: Ошибка при вызове метода контекста (Open)
   Ексель.Workbooks.Open(СокрЛП(ИмяФайла));
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу 'C:\ФайлТаблицы.xls'. Это может быть вызвано одной из следующих причин.

• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
24 palm1c
 
13.01.12
12:16
(21) Отличается тем, что выдаёт диагностические сообщения, не?
:)
25 RomaH
 
naïve
13.01.12
12:17
(24) где?
еще раз у меня ком объект создается
26 palm1c
 
13.01.12
12:17
(23)  Я бы копал в сторону прав доступа к файлу.
Серьёзно.
27 RomaH
 
naïve
13.01.12
12:17
падает тут:
ОбъектExcel.Workbooks.Open(СокрЛП(ФайлВыгрузки));
28 Ковычки
 
13.01.12
12:17
Нет доступа к файлу
29 RomaH
 
naïve
13.01.12
12:18
сервер запущен из под моей учетки
файл создан и если не грузить - удаляется

точка останова на

ОбъектExcel.Workbooks.Open(СокрЛП(ФайлВыгрузки));

файл есть и я его могу открыть интерактивно

с какой стороны нет доступа?
30 palm1c
 
13.01.12
12:18
Смотри свойства файла. Расшарь его для всех и попробуй.
31 palm1c
 
13.01.12
12:19
Файл не удаляй. Дай доступ для всех и всё у тебя получится.
32 palm1c
 
13.01.12
12:20
Сначала сделай, чтобы он загрузился, а потом уже с удалением можно что-то придумать. Он удаляется не раньше, чем нужно?
33 Ковычки
 
13.01.12
12:20
Ексель = Новый COMОбъект("Excel.Application");    
Книги = Ексель.Workbooks;
Если Книги.Count = 0 Тогда
   Книги.Add();
КонецЕсли;
Книга = Книги.Open(СокрЛП(ФайлВыгрузки));
34 RomaH
 
naïve
13.01.12
12:22
35 RomaH
 
naïve
13.01.12
12:24
(33) в условие заходит, но не помогает (совсем)
36 Ковычки
 
13.01.12
12:25
(35) уже лучче
37 palm1c
 
13.01.12
12:25
(34) Правой кнопкой по файлу - свойства - безопасность.
И полные права для учетки, под которой крутится 1с, не?
38 Ковычки
 
13.01.12
12:25
Ексель = Новый COMОбъект("Excel.Application");
Ексель.Visible = -1;
39 НЕА123
 
13.01.12
12:26
Ф = Новый Файл(ФайлВыгрузки);
Если  Ф.Существует() Тогда
....Open

зайдет в Open?
40 НЕА123
 
13.01.12
12:28
может задержку попробовать? может не успевает записаться до открытия.
41 RomaH
 
naïve
13.01.12
12:28
(37) ты читаешь что я пишу - 1С крутиться под моей же учеткой - см (34)
(39) а ничего что я его вижу - и если файл не грузить - он нормально удалается?
42 RomaH
 
naïve
13.01.12
12:28
(40) - а точка останова на что?

добавил права на файл - всем - (на точке останова) - один фиг
43 RomaH
 
naïve
13.01.12
12:29
(38) это что даст?
44 RomaH
 
naïve
13.01.12
12:30
(38) не понял нафига это - и программа тоже
45 Ковычки
 
13.01.12
12:31
чисто позырить, просто сделай и все тут
46 Ковычки
 
13.01.12
12:31
Ексель.Visible = Истина;
47 RomaH
 
naïve
13.01.12
12:31
ок делаем так:

&НаСервереБезКонтекста
Процедура ЗагрузитьИзФайлаНаСервере(АдресХранилища)
   
   //ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
   //
   //ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
   ИмяФайла = "C:\ФайлТаблицы.xls";
   
   ДвоичныеДанные.Записать(ИмяФайла);
   
   ЗагрузитьФайл(ИмяФайла);
   
   
   //УдалитьФайлы(ИмяФайла);
   
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьФайл(ИмяФайла)
   
   Ексель = Новый COMОбъект("Excel.Application");
   
   Ексель.Visible = -1;

   Книги = Ексель.Workbooks;
   Если Книги.Count = 0 Тогда
       Книги.Add();
   КонецЕсли;        
   Ексель.Workbooks.Open(СокрЛП(ИмяФайла));
   

т.е. ничего не создаем и не удалаем - файл есть
(45) сделал - где че смотреть-то?
48 RomaH
 
naïve
13.01.12
12:32
т.е.

&НаСервереБезКонтекста
Процедура ЗагрузитьИзФайлаНаСервере(АдресХранилища)
   
   //ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
   //
   //ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
   ИмяФайла = "C:\ФайлТаблицы.xls";
   
   //ДвоичныеДанные.Записать(ИмяФайла);
   
   ЗагрузитьФайл(ИмяФайла);
   
   
   //УдалитьФайлы(ИмяФайла);
   
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗагрузитьФайл(ИмяФайла)
   
   Ексель = Новый COMОбъект("Excel.Application");
   
   Ексель.Visible = Истина;

   Книги = Ексель.Workbooks;
   Если Книги.Count = 0 Тогда
       Книги.Add();
   КонецЕсли;        
   Ексель.Workbooks.Open(СокрЛП(ИмяФайла));
49 Ковычки
 
13.01.12
12:32
если оно под твоей учеткой, то и окно екселя обязано появиться
50 Ковычки
 
13.01.12
12:33
Ексель.Workbooks.Open(СокрЛП(ИмяФайла));
на
Книга = Книги.Open(СокрЛП(ИмяФайла));

(почти одно, но второе более политически верное)
51 Ковычки
 
13.01.12
12:34
под этой же учеткой интерактивно в виндузе находишься ?
(это по поводу отображения екселя)
52 RomaH
 
naïve
13.01.12
12:34
(50) не
(51) да
53 Ковычки
 
13.01.12
12:36
и файл так понимаю нормально в екселе интерактивно открывается ?
54 RomaH
 
naïve
13.01.12
12:36
(46) про визибл так и не понял - ничего не меняет в плане отображания

да
55 Ковычки
 
13.01.12
12:37
тогда х.з. все это
восьмерку не знаю, особенно связанную с сервером адинес
56 palm1c
 
13.01.12
13:08
Я думаю, тут есть несколько вариантов:

• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.

:)
57 palm1c
 
13.01.12
13:09
Система же говорит, ЧТО ей не нравится.
Екселевский файл, кстати, кто создаёт? Программно создаётся?
Если да, то его нужно отпустить, не?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн