Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Программное закрытие формы (число прочтений - 13763 )
MAXXL
Junior Member
**
Отсутствует



Сообщений: 17
Зарегистрирован: 25. Августа 2006
Программное закрытие формы
23. Февраля 2008 :: 09:00
Печать  
Решил тут сделать обработку, чтобы пакетно распечатать документы из 1С:Бухгалтерия 7.7
Написал такой код:
Код
Выбрать все
Конт="";
ОткрытьФорму(Док.ТекущийДокумент()+ "#", Конт);
Конт = "";
Если Сервис.АктивныйКонтекст(Конт) = 1 Тогда
	// получен активный контекст, можно попытаться вызвать процедуру модуля
	Сервис.ВыполнитьПроцедуру(Конт,"Печать",);
	Если Сервис.АктивныйКонтекст(Конт) = 1 Тогда
			    Если ТипЗначенияСтр(Конт) = "Таблица" Тогда
				Конт.Показать("","",-1);
				//Конт.Напечатать(0);
		КонецЕсли;
		Сервис.АктивныйКонтекст(Конт);
		Конт.Форма.Закрыть(0);
	КонецЕсли;
КонецЕсли;
 


Так вот,печатные формы печатаются, закрываются. По идее хотелось чтобы и форма документа после этого закрылась, а она остается на экране до завершения работы обработки. Получается что на экране висит несколько десятков экранных форм документов, и если их слишком много, то 1С совсем зависает Печаль Подскажите как сделать более правильно
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Программное закрытие формы
Ответ #1 - 23. Февраля 2008 :: 09:08
Печать  
У FormEx есть метод для закрытия форм, поищи
  
Наверх
ICQ  
IP записан
 
MAXXL
Junior Member
**
Отсутствует



Сообщений: 17
Зарегистрирован: 25. Августа 2006
Re: Программное закрытие формы
Ответ #2 - 23. Февраля 2008 :: 11:14
Печать  
Перечитал вроде весь доковский файл... так и не нашел Печаль Ткните носом,плиз
  
Наверх
 
IP записан
 
mvgfirst
Full Member
***
Отсутствует


В борьбе бобра с ослом
всегда побеждает бобро!

Сообщений: 152
Местоположение: Украина г. Кривой Рог
Зарегистрирован: 17. Августа 2007
Пол: Мужской
Re: Программное закрытие формы
Ответ #3 - 23. Февраля 2008 :: 14:35
Печать  
А если весь код который ты написал вписать в обработку ПриОткрытии.. и после завершении работы кода ставить СтатусВозврата(0). Очень уж мне сильно кажется что в этом варианте форма не откроется.
  
Наверх
ICQ  
IP записан
 
MAXXL
Junior Member
**
Отсутствует



Сообщений: 17
Зарегистрирован: 25. Августа 2006
Re: Программное закрытие формы
Ответ #4 - 23. Февраля 2008 :: 15:08
Печать  
ПриОткрытии чего, этой обработки? Или документов? Так смысл в том чтобы не затрагивать исходную конфу... А формы документов открываются,и еще как... Я же писал, что их можно открыть столько что 1С просто зависает...
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Программное закрытие формы
Ответ #5 - 23. Февраля 2008 :: 15:12
Печать  
OFF, но нафига вообще так извращаться?
Разве нельзя просто в обработке перенести процедуру печати и не открывая формы
произвести печать?
  
Наверх
 
IP записан
 
MAXXL
Junior Member
**
Отсутствует



Сообщений: 17
Зарегистрирован: 25. Августа 2006
Re: Программное закрытие формы
Ответ #6 - 23. Февраля 2008 :: 15:22
Печать  
Можно. На один, на два.... А на все типы документов что есть в конфигурации?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Программное закрытие формы
Ответ #7 - 23. Февраля 2008 :: 15:43
Печать  
Не удалось повторить, проверил 2 раза - все закрывается
Код
Выбрать все
фл=ОткрытьФорму(ВыбДок1,Конт);
Если фл<>1 Тогда
	  продолжить
КонецЕсли;
ВыполняемыйМодуль=СоздатьОбъект("ВыполняемыйМодуль");
ИмяПроцедуры="Печать";
СписокЗначений=СоздатьОбъект("СписокЗначений");
фл=ВыполняемыйМодуль.ВыполнитьПроцедуруКонтекста(Конт, ИмяПроцедуры,СписокЗначений);
Конт.Форма.Закрыть();  

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Программное закрытие формы
Ответ #8 - 23. Февраля 2008 :: 16:48
Печать  
Цитата:
Синтаксис:
Закрыть()
Назначение:
закрывает форму (в отличие от стандартного метода Форма.Закрыть() который ожидает завершения выполнения текущего кода)


Объект РасширениеФормы
  
Наверх
ICQ  
IP записан
 
MAXXL
Junior Member
**
Отсутствует



Сообщений: 17
Зарегистрирован: 25. Августа 2006
Re: Программное закрытие формы
Ответ #9 - 23. Февраля 2008 :: 22:08
Печать  
(kiruha) Не печатает, и не закрывается  Печаль
(Nick) Закрывается  Улыбкажаль только что не то - закрывается форма моей обработки, а документ остается открытым... Что нужно - перебирать все окна после каждого вызова документа и закрывать новые?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Программное закрытие формы
Ответ #10 - 23. Февраля 2008 :: 22:58
Печать  
Проверь свой код лучше.
Начни с самого простого - приведенного и только дальше усложняй.

Вот как минимум одна ошибка
Код
Выбрать все
Конт="";
ОткрытьФорму(Док.ТекущийДокумент()+ "#", Конт);
Конт = ""; 



Тем более если даже не печатает - artbear весьма удивится  Подмигивание

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



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Программное закрытие формы
Ответ #11 - 24. Февраля 2008 :: 04:29
Печать  
Код
Выбрать все
  Конт="";
  ОткрытьФорму(Док.ТекущийДокумент(), Конт);
  оРасширениеФормы.УстановитьФорму(Конт.Форма)
  ...............
  оРасширениеФормы.Закрыть();
  Конт = "";
 



Должно быть как то так
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Программное закрытие формы
Ответ #12 - 24. Февраля 2008 :: 12:37
Печать  
MAXXL писал(а) 23. Февраля 2008 :: 09:00:
Решил тут сделать обработку, чтобы пакетно распечатать документы из 1С:Бухгалтерия 7.7

Правильный код такой:
Код
Выбрать все
Конт="";
ОткрытьФорму(Док.ТекущийДокумент(), Конт); // "#" можно не использовать
Если ТипЗначения(Конт) = 100 Тогда
	// получен активный контекст, можно попытаться вызвать процедуру модуля
	Сервис.ВыполнитьПроцедуру(Конт,"Печать",);
// или Конт.Печать();
	КонтекстПечТаблицы = 0; // зачем одно имя переменной для разных значений !!
	Если Сервис.АктивныйКонтекст(КонтекстПечТаблицы) = 1 Тогда    
		Если ТипЗначенияСтр(КонтекстПечТаблицы) = "Таблица" Тогда
			КонтекстПечТаблицы.Показать("","",-1);   
		КонецЕсли;    
	КонецЕсли;  
КонецЕсли;

Система = СоздатьОбъект("Система");
Система.ЗакрытьФорму(Конт);
 


Две последние строчки гарантированно закроют открывшуюся форму документа!
Но также есть некоторое ограничение - для очень большого числа открываемых документов 1С все равно вылетит. Но количество открываемых документов без падения 1С НАМНОГО БОЛЬШЕ, чем в варианте Конт.Форма.Закрыть() .

Правда, должна быть загружена ВК 1С++  - класс Система из нее Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Программное закрытие формы
Ответ #13 - 24. Февраля 2008 :: 12:42
Печать  
Артур, а разве нелья просто обращатся к функциям контекста через точку?
Или приводимое рещение при использования только с FormEx?
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Программное закрытие формы
Ответ #14 - 24. Февраля 2008 :: 12:44
Печать  
Nick писал(а) 24. Февраля 2008 :: 12:42:
Артур, а разве нелья просто обращатся к функциям контекста через точку?
Или приводимое рещение при использования только с FormEx?

Можно при использовании 1С++.
Я в коде специально в комментах написал Улыбка
// или Конт.Печать();
Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать