|
Ексель, как не закрыть окно? | ☑ | ||
---|---|---|---|---|
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(); КонецПопытки; КонецПроцедуры если встать отладчиком на строку с (*) вижу ексель и данные, как только возврат в команду так екселя нет- закрылся |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |