Имя: Пароль:
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
Система же говорит, ЧТО ей не нравится.
Екселевский файл, кстати, кто создаёт? Программно создаётся?
Если да, то его нужно отпустить, не?