Имя: Пароль:
1C
1С v8
Ексель, как не закрыть окно?
,
0 assasu
 
23.07.13
11:53
простой код

перем КомОбъект;
&НаКлиенте
Процедура Команда1(Команда)
   ВывестиНаСервере();
КонецПроцедуры
&НаСервере
Процедура  ВывестиНаСервере()
   ОбъектОтчета = РеквизитФормыВЗначение("Объект");
   АктивныйДокумент = ОбъектОтчета.ПолучитьМакет("Макет");    
   КомОбъект = АктивныйДокумент.Получить();
   Попытка
       Книга = КомОбъект.Application.Workbooks(1);
       Страница1=Книга.Worksheets(1);
       Страница1.Range("A1").Value = 10;
       Страница1.Range("A2").Value = 15;
               
       КомОбъект.Application.Visible = 1;
       КомОбъект.Windows(1).Visible = 1;
   Исключение
       Сообщить(ОписаниеОшибки());        
       КомОбъект.Application.Quit();
   КонецПопытки;    
КонецПроцедуры

если встать отладчиком на последнюю строку процедуры ВывестиНаСервере , то вижу открытый и заполненный файл екселя. после того как вернулся в вызывающую процедуру окно тут же закрывается.
1 George Wheels
 
23.07.13
11:56
На каком-то этапе происходит исключение.
2 assasu
 
23.07.13
11:58
в ветку
Исключение
       Сообщить(ОписаниеОшибки());        
       КомОбъект.Application.Quit();
не заходим вообще. нет там ошибок
3 George Wheels
 
23.07.13
11:59
Книга.Activate()
4 George Wheels
 
23.07.13
12:00
(3) + И посмотри в процессах может там висит EXCEL.exe (или даже не один).
5 assasu
 
23.07.13
12:02
(4) чисто в процессах
6 assasu
 
23.07.13
12:03
(3) не. это не помогло
7 assasu
 
23.07.13
12:08
в обычных формах тоже самое..но если сделать вот так (без вызывающей процедуры) то все окно не закроется

перем КомОбъект;

Процедура Кнопка1Нажатие(Элемент)
   АктивныйДокумент = ПолучитьМакет("Макет");
   
   КомОбъект = АктивныйДокумент.Получить();

   Попытка
       Книга = КомОбъект.Application.Workbooks(1);
       Страница1=Книга.Worksheets(1);
       Страница1.Range("A1").Value = 10;
       Страница1.Range("A2").Value = 15;
       
       КомОбъект.Application.Visible = 1;
       КомОбъект.Windows(1).Visible = 1;
       Книга.Activate();
   Исключение
       Сообщить(ОписаниеОшибки());        
       КомОбъект.Application.Quit();
   КонецПопытки;    
   
КонецПроцедуры
8 George Wheels
 
23.07.13
12:12
А если убрать Перем КомОбъект
9 assasu
 
23.07.13
12:14
(8) тогда окно тоже умирает.  Но вот в УФ не срабатывает это .
10 RomaH
 
naïve
23.07.13
12:19
файловая база?
11 assasu
 
23.07.13
12:20
да, файловая
12 George Wheels
 
23.07.13
12:27
Попробовал в УФ. В процессах висит ексель.
13 George Wheels
 
23.07.13
12:29
(12) + Нет всё сработало как надо. Сперва забыл App.Visible = 1;
14 assasu
 
23.07.13
12:32
(13) ну окно то закрывается?
15 George Wheels
 
23.07.13
12:33
&НаКлиенте
Процедура Ексель(Команда)
   ВывестиНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВывестиНаСервере()

   Попытка
       App = Новый COMОбъект("Excel.Application");
   Исключение
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Не установлен Excel. Обратитесь к администратору системы.";
       Сообщение.Сообщить();
       Возврат;
   КонецПопытки;
   
   WB = App.Workbooks;
   Попытка
       Документ = WB.Open(ИмяФайла, 0);
       App.Visible = 1;
       Документ.Activate();
   Исключение
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Неудача";
       Сообщение.Сообщить();
       App.Quit();
       Возврат;
   КонецПопытки;
   

КонецПроцедуры

В этом варианте окно Excel отображается
16 assasu
 
23.07.13
12:36
(15) этот вариант ни к чему. он использует WB.Open(ИмяФайла, 0);, т.е. открывает существующий файл.
в моем случае это макет activedocument у обработки
17 George Wheels
 
23.07.13
12:37
Попробуй
App = КомОбъект.Application
и дальше работать с App.
Похоже переменная КомОбъект обнуляется при завершении.
18 assasu
 
23.07.13
12:43
(17) неа, то же самое . не помогает даже КомОбъект.SaveAs(ПутьКФайлу); Файл записывается, но потом окно умирает
19 George Wheels
 
23.07.13
12:48
(17) Только что попробовал - работает. хз
20 assasu
 
23.07.13
12:49
(19) покажи код
21 George Wheels
 
23.07.13
13:04
(19) + Косяк. Отображается только пустое окно Excel. Книга закрыта.
22 assasu
 
23.07.13
13:10
нужна помощь гуру. не проканывает даже такой вариант
   ОбъектОтчета = РеквизитФормыВЗначение("Объект");
   АктивныйДокумент = ОбъектОтчета.ПолучитьМакет("Макет");
   
   ОбъектОтчета.КомОбъект = АктивныйДокумент.Получить();
   
   Попытка
       Книга = ОбъектОтчета.КомОбъект.Application.Workbooks(1);
       Страница1=Книга.Worksheets(1);
       Страница1.Range("A1").Value = 10;
       Страница1.Range("A2").Value = 15;
       
       ОбъектОтчета.КомОбъект.Application.Visible = 1;
       ОбъектОтчета.КомОбъект.Windows(1).Visible = 1;
       ЗначениеВРеквизитФормы(ОбъектОтчета, "Объект");
       
   Исключение
       Сообщить(ОписаниеОшибки());        
       ОбъектОтчета.КомОбъект.Application.Quit();
   КонецПопытки;    

где КомОбъект экспортная переменная описанная в модуле внешней обработки.
23 George Wheels
 
23.07.13
16:05
Не выходит каменный цветок. Вариант, как мне кажется, один. Сохранить файл (это без проблем получается), потом его открывать.
24 assasu
 
24.07.13
05:17
да, выход есть. правда еще про имена файлов приходится задумываться
25 Rie
 
модератор
24.07.13
05:43
(22) Так, смеха ради - попробуй присвоить Visible -1, а не 1.

(24) Не надо задумываться. Строка(Новый УникальныйИдентификатор()) - прекрасное имя для временного файла.
26 assasu
 
24.07.13
07:25
(25) про имена это верно.. смотрю типовую конфу - там такие кракозябры довольно распространены)
27 assasu
 
24.07.13
07:29
(25) неа..
как только код возвращается сюда

&НаКлиенте
Процедура Команда1(Команда)
   ВывестиНаСервере();
КонецПроцедуры

так окно екселя умирает.
28 Rie
 
модератор
24.07.13
07:37
(27) Эээ... Что-то я не глянул раньше... Так а где объекты-то создаются и живут?
29 assasu
 
24.07.13
07:45
(28) в модуле формы:
&НаКлиенте
Процедура Команда1(Команда)
   ВывестиНаСервере();
КонецПроцедуры
&НаСервере
Процедура  ВывестиНаСервере()        
   ОбъектОтчета = РеквизитФормыВЗначение("Объект");
   ОбъектОтчета.ВывестиНаСервере1();
КонецПроцедуры (*)

в модуле обработки

перем КомОбъект Экспорт;
Процедура ВывестиНаСервере1()Экспорт
   АктивныйДокумент = ЭтотОбъект.ПолучитьМакет("Макет");
   
   КомОбъект = АктивныйДокумент.Получить();
   
   Попытка
       Книга = КомОбъект.Application.Workbooks(1);
       Страница1=Книга.Worksheets(1);
       Страница1.Range("A1").Value = 10;
       Страница1.Range("A2").Value = 15;
       
       КомОбъект.Application.Visible = -1;
       КомОбъект.Windows(1).Visible = -1;
   Исключение
       Сообщить(ОписаниеОшибки());        
       КомОбъект.Application.Quit();
   КонецПопытки;    
   
КонецПроцедуры

если встать отладчиком на строку с (*) вижу ексель и данные, как только возврат в команду так екселя нет- закрылся