Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Закрыть окошко MOXEL (число прочтений - 10277 )
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Закрыть окошко MOXEL
19. Мая 2008 :: 14:59
Печать  
Здравствуйте.

Может я туплю, но как можно закрыть окошко мокселя полученное Таблица.Показать() из кода?
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #1 - 19. Мая 2008 :: 16:14
Печать  
Из синтакс-помощника:
Показать(<?>,,);
Синтаксис:
Показать(<Заголовок>,<ИмяФайла>,<Активизировать>)
Назначение:
Открыть окно редактирования таблицы.
Параметры:
<Заголовок> - необязательный параметр. Заголовок окна редактирования. Если параметр не задан, в заголовке будет выдаваться слово ''Таблица''.
<ИмяФайла> - необязательный параметр. Имя файла для сохранения таблицы. Если параметр задан, то при закрытии окна табличного документа система будет предлагать сохранить документ в файле с указанным именем. Если файла с таким именем не существует, то будет создан новый файл с таким именем. Если параметр опущен или имеет пустое значение, то при закрытии окна табличного документа система не будет предлагать сохранить данные в файле.
<Активизировать> - необязательный параметр. Признак активизации. Число: 1 - активизировать окно табличного документа; 0 - не активизировать окно табличного документа;  -1 (минус единица) - закрыть окно если оно открыто; по умолчанию  1. (необязателен).
Код
Выбрать все
Таблица.Показать(,,-1); 

  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #2 - 19. Мая 2008 :: 17:53
Печать  
Провел следующий эксперимент:

Код
Выбрать все
Процедура ПриАктивацииОкна()
	Перем лКонт;
	_Сервис = СоздатьОбъект("Сервис");
	_ТабличныйДокумент = СоздатьОбъект("ТабличныйДокумент");
	Если _Сервис.АктивныйКонтекст(лКонт)=1 Тогда
		Если ТипЗначенияСтр(лКонт)="Таблица" Тогда
			_ТабличныйДокумент.ЗагрузитьИзТаблицы(лКонт);
			_ТабличныйДокумент.Показать(лКонт);
			лКонт.Показать(,,-1);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 



1С-ка почему-то закрывается с ошибкой?
Почему это может быть?
1С++ - 3.0 от 16-05-08
FormEx - 86 билд.
Yoksel - 0.3.0.0 HotFix от 19-05-2008.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #3 - 19. Мая 2008 :: 18:01
Печать  
Не знаю как вместе с Yoksel (не пользуюсь), но обычная таблица закрывается. У меня в пакетной печати так :
Код
Выбрать все
Если ОткрытьФорму(док,КонтФ,1)=1 Тогда      
		КонтФ.Печать();
		КонтФ.Форма.Закрыть(0);
		Если срр_Сервис.АктивныйКонтекст(КонтФ) = 1 Тогда
			Если ТипЗначенияСтр(КонтФ) = "Таблица" Тогда
                                    КонтФ.Напечатать(0);
                                    Контф.Показать(,,-1);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли; 

  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #4 - 19. Мая 2008 :: 18:15
Печать  
при незагруженом Yoksele тоже самое.

Код
Выбрать все
Процедура ПриАктивацииОкна()
	Перем лКонт;
	Если _Сервис.АктивныйКонтекст(лКонт)=1 Тогда
		Если ТипЗначенияСтр(лКонт)="Таблица" Тогда
				лКонт.Показать(,,-1);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 



1С-ка сворачивается в коврик с ошибкой память не может read
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #5 - 19. Мая 2008 :: 18:19
Печать  
А в отладчике прогонял ? Где вываливается ?
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #6 - 19. Мая 2008 :: 18:28
Печать  
на строчке:
Код
Выбрать все
лКонт.Показать(,,-1);
 

  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #7 - 19. Мая 2008 :: 18:30
Печать  
А чему равен
Код
Выбрать все
ТипЗначенияСтр(лКонт) 

в отладчике ? Или просто лКонт ?
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #8 - 19. Мая 2008 :: 18:30
Печать  
А это не может быть связано с тем, что это кусок кода выполняется в процедуре ПриАктивацииОкна() ?
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #9 - 19. Мая 2008 :: 18:30
Печать  
Alister писал(а) 19. Мая 2008 :: 18:30:
А чему равен
Код
Выбрать все
ТипЗначенияСтр(лКонт) 

в отладчике ?


"Таблица"
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #10 - 19. Мая 2008 :: 18:35
Печать  
Чесно не помню, что это за процедура ПриАктивацииОкна() , может подойдет ПослеОткрытия(Контекст) ?
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #11 - 19. Мая 2008 :: 18:36
Печать  
Это предопределенная процедура FormEx, вызывается при активации окна.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #12 - 19. Мая 2008 :: 18:48
Печать  
Экспериментировал в своем время с АктивныйКонтекст, когда делал сервисную обработку сохранения mxl в xls. Понял, что действий с окном таблицы лучше не производить. При вызове Показать (,,-1), например, также либо вылет, либо таблица вроде как закрывается, но на деле документ остается открытым, что приводит к утечкам памяти. Т.е., фактически, объект "Таблица", полученный через АктивныйКонтекст, неполноценен.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #13 - 19. Мая 2008 :: 18:49
Печать  
Проверил у себя 1срр 2.5 formex 78 тоже вылетает.
Подозреваю, что событие наступает при открытии окна, но когда оно еще не до конца создано и отображено.
А вообще это для чего так : только кликнул в окно, а оно раз и закрылось ? Подмигивание
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #14 - 19. Мая 2008 :: 18:55
Печать  
Uzhast писал(а) 19. Мая 2008 :: 18:48:
При вызове Показать (,,-1), например, также либо вылет, либо таблица вроде как закрывается, но на деле документ остается открытым, что приводит к утечкам памяти. Т.е., фактически, объект "Таблица", полученный через АктивныйКонтекст, неполноценен.

Приведенный мной упрощенный код (пакетная печать) 100% рабочий, в том смысле, что народ пользуется для печати актов и счет-фактур ежемесячно (документов 30-150 каждого вида) , вылетов не наблюдалось, док открылся, открылась таблица, док закрылся, пошла печать и таблица закрылась. Правда версии dll не самые последние - подбирал специально. 1cpp 2.5.0.4 2007-10-25 formex 2.0.5.78
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #15 - 19. Мая 2008 :: 18:58
Печать  
Alister писал(а) 19. Мая 2008 :: 18:49:
Проверил у себя 1срр 2.5 formex 78 тоже вылетает.
Подозреваю, что событие наступает при открытии окна, но когда оно еще не до конца создано и отображено.
А вообще это для чего так : только кликнул в окно, а оно раз и закрылось ? Подмигивание


Окно наверное отображено, потому-что
Код
Выбрать все
лКонт.Защита(1); 

и
Код
Выбрать все
лКонт.ТолькоПросмотр(1); 

срабатывают без проблем.
Yoksel тоже нормально загружает из таблицы, почему-то только закрыватся не хочет.

Я пробовал захватывать Yoksel - ем таблички любых печатных форм. Смотри первый вариант моего кода.  

  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #16 - 19. Мая 2008 :: 19:00
Печать  
Alister писал(а) 19. Мая 2008 :: 18:55:
Uzhast писал(а) 19. Мая 2008 :: 18:48:
При вызове Показать (,,-1), например, также либо вылет, либо таблица вроде как закрывается, но на деле документ остается открытым, что приводит к утечкам памяти. Т.е., фактически, объект "Таблица", полученный через АктивныйКонтекст, неполноценен.

Приведенный мной упрощенный код (пакетная печать) 100% рабочий, в том смысле, что народ пользуется для печати актов и счет-фактур ежемесячно (документов 30-150 каждого вида) , вылетов не наблюдалось, док открылся, открылась таблица, док закрылся, пошла печать и таблица закрылась. Правда версии dll не самые последние - подбирал специально.


У тебя просто код не из предопределенной процедуры вызывался, поэтому было все нормально.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #17 - 19. Мая 2008 :: 19:01
Печать  
Alister писал(а) 19. Мая 2008 :: 18:55:
Приведенный мной упрощенный код (пакетная печать) 100% рабочий, в том смысле, что народ пользуется для печати актов и счет-фактур ежемесячно (документов 30-150 каждого вида) , вылетов не наблюдалось, док открылся, открылась таблица, док закрылся, пошла печать и таблица закрылась. Правда версии dll не самые последние - подбирал специально.

Я ж говорю, иногда НА ВИД все вроде как работает, но на деле документ не ЗАКРЫВАЕТСЯ и происходят утечки памяти. Проверяется открытие очень больших таблиц. Например, которые в памяти занимают, скажем, 400Мб. Если в 1С вручную открыть такую таблицу, закрыть и открыть заново, то 1С будет занимать 400Мб. Если открытую таблицу закрыть программно после АктивныйКонтекст, а потом опять открыть, то 1С уже займет 800 Мб.

Поэтому код у тебя может быть и рабочий, но весьма вероятно, что приводит к постоянным ликам. Просто из-за небольшого объема таблиц и/или из-за небольшого количества обрабатываемых таблиц ты этого лика не замечаешь.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #18 - 19. Мая 2008 :: 19:06
Печать  
Не спорю - не проверял , главное юзеры довольны, не вылетает и не тормозит Улыбка Объемы конечно не по 400 Мб  Улыбка
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #19 - 19. Мая 2008 :: 19:09
Печать  
Donat , я так понял, что после открытия обычной 1С таблицы, ты передаешь ее Yoksel ( у которого свое окно ? ) поэтому закрываешь 1С таблицу ?
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #20 - 19. Мая 2008 :: 19:14
Печать  
Да Alister, именно так. После этого я хочу закрыть оригинальное окно, но не получается.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #21 - 19. Мая 2008 :: 19:16
Печать  
Alister писал(а) 19. Мая 2008 :: 19:09:
Donat , я так понял, что после открытия обычной 1С таблицы, ты передаешь ее Yoksel ( у которого свое окно ? ) поэтому закрываешь 1С таблицу ?

Не надо намекать на Йоксель, он ни в чем не виноват  Очень довольный
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #22 - 19. Мая 2008 :: 19:16
Печать  
Может все таки ПослеОткрытия(Контекст) попробуешь ?
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #23 - 19. Мая 2008 :: 19:17
Печать  
В обработке mxl=>xls я вообще просто делаю Таблица.Записать, ТабличныйДокумент.Открыть. Йоксель даже близко не касается полученной таблицы. А эффект от закрытия таблицы все равно нехороший. Поэтому я вообще убрал закрытие таблицы. Хотя с ним было бы гораздо лучше - потребление памяти не было бы таким большим.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #24 - 19. Мая 2008 :: 19:17
Печать  
Uzhast писал(а) 19. Мая 2008 :: 19:16:
Alister писал(а) 19. Мая 2008 :: 19:09:
Donat , я так понял, что после открытия обычной 1С таблицы, ты передаешь ее Yoksel ( у которого свое окно ? ) поэтому закрываешь 1С таблицу ?

Не надо намекать на Йоксель, он ни в чем не виноват  Очень довольный

Ни на что, не намекаю Улыбка Просто не пользуюсь, потому не знаю есть ли у него свое окно.
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #25 - 19. Мая 2008 :: 19:29
Печать  
Да нет Yoksel тут действительно не причем.
Глюк либо в ПолучитьАктивныйКонтекст, либо в ПриАктивацииОкна.
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #26 - 19. Мая 2008 :: 19:37
Печать  
Alister писал(а) 19. Мая 2008 :: 19:16:
Может все таки ПослеОткрытия(Контекст) попробуешь ?


Попробовал.
ПослеОткрытия не отлавливает открытие окна Таблица.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #27 - 19. Мая 2008 :: 19:54
Печать  
Donat писал(а) 19. Мая 2008 :: 19:37:
Попробовал.
ПослеОткрытия не отлавливает открытие окна Таблица.

Ясен пень. Так как у таблицы нет формы в обычном понимании. У Таблицы в данном случае есть только Контекст.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #28 - 19. Мая 2008 :: 20:04
Печать  
Можно еще наверно СписокТаблиц() помурыжить.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #29 - 19. Мая 2008 :: 20:48
Печать  
Ради интереса попробовал так
Код
Выбрать все
срр_Сервис.ОбработкаОжидания("ОбработкаОж",500); 


и собственно
Код
Выбрать все
Процедура ОбработкаОж() Экспорт
	Перем лКонт;
	Если срр_Сервис <> -1 Тогда
		Если  срр_Сервис.АктивныйКонтекст(лКонт) = 1 Тогда
			Если ТипЗначенияСтр(лКонт) = "Таблица" Тогда

				_ТабличныйДокумент = СоздатьОбъект("ТабличныйДокумент");
				_ТабличныйДокумент.ЗагрузитьИзТаблицы(лКонт);
				_ТабличныйДокумент.Показать(лКонт);
				лКонт.Показать(,,-1);

			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 


или
Код
Выбрать все
Процедура ОбработкаОж() Экспорт
	Перем лКонт;
	Если срр_Сервис <> -1 Тогда
		список = срр_Сервис.СписокТаблиц();
		Если  список.РазмерСписка() > 0 Тогда
			Для о = 1 По список.РазмерСписка() Цикл
				лКонт = список.ПолучитьЗначение(о);
				Если ТипЗначенияСтр(лКонт) = "Таблица" Тогда

					_ТабличныйДокумент = СоздатьОбъект("ТабличныйДокумент");
					_ТабличныйДокумент.ЗагрузитьИзТаблицы(лКонт);
					_ТабличныйДокумент.Показать(лКонт);
					лКонт.Показать(,,-1);

				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 


но во втором варианте начинает повторно грузить в Йоксель его же таблицу, а в первом нет Улыбка
  
Наверх
 
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #30 - 20. Мая 2008 :: 03:08
Печать  
На работе попробую. Когда прийду домой отпишусь, как получилось.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #31 - 20. Мая 2008 :: 05:25
Печать  
Я в подобных случаях использую вместо ОбработкаОжидания - "Сервис.ВнешнееСобытие" и "ОбработкаВнешнегоСобытия"
  
Наверх
ICQ  
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #32 - 20. Мая 2008 :: 08:31
Печать  
Дело собственно не в том, чем пользоватся ОбработкойОжидания или Внешним событием, а тем, что нельзя закрывать окно Таблица через контекст полученый _сервис.АктивныйКонтекст(). Печаль
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Закрыть окошко MOXEL
Ответ #33 - 20. Мая 2008 :: 08:40
Печать  
Не знаю, точно или нет, но, ИМХО, после события ПриАктивизацииОкна еще выполняются какие-либо прочие события, действия и т.д. Закрывая это окошко, ты лишаешь последующие методы Объекта для манипуляций. Проверить - в контексте дело или нет - очень просто. В ПриАктивизацииОкна сделай Сервис.ВнешнееСобытие("Таблица",ТвойАктивныйКонтекст,0) а в Обработке этого события попробуй закрыть через полученный контекст (только учти, что передаются данные в виде строки, можно тогда, например, и через общую переменную модуля). Если дело в контексте - то будет вылет, если дело в событии ПриАктивизации - то спокойно закроешь. Ведь ОбработкаОжидания - делает тоже самое - завершает работу События и после выполнения прочих команд закрывает окно.
З.Ы. Лично мне - было бы интересно, если бы ты произвел подобное тестирование, на предмет лучшего понимания работы механизма событий.
  
Наверх
ICQ  
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Закрыть окошко MOXEL
Ответ #34 - 22. Мая 2008 :: 08:19
Печать  
Провел тестирование, вроде бы удачно. 1С-ка не закрывается, а насчет потерь памяти надо смотреть отдельно, может сегодня попробую сделать таблицу размером метров 300 и посмотреть.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать