Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы() (число прочтений - 4031 )
GoldNovice
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 17. Ноября 2010
Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
17. Ноября 2010 :: 02:56
Печать  
Собс-но сабж...
Копал SendKeys("%{F4}{ENTER}") в гл.проц. ПриЗавершенииРаботыСистемы(), однако в момент выхода все равно отрабатывает запрос "Сохранить документ. Да.Нет".
Модули форм менять не буду. Много объектов + частые обновы.
Чую можно как то Перехватчиком порешать.
Кто сталкивался - помогите, пож...
____________________________
P/S/ Про ошибку в ДНК знаю  Очень довольный
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #1 - 17. Ноября 2010 :: 05:57
Печать  
GoldNovice писал(а) 17. Ноября 2010 :: 02:56:
Чую можно как то Перехватчиком порешать.

Так если чуешь, то порешай ... кто мешает перехватить событие формы ПриЗакрытии?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #2 - 17. Ноября 2010 :: 10:56
Печать  
Dmitry The Wing писал(а) 17. Ноября 2010 :: 05:57:
GoldNovice писал(а) 17. Ноября 2010 :: 02:56:
Чую можно как то Перехватчиком порешать.

Так если чуешь, то порешай ... кто мешает перехватить событие формы ПриЗакрытии?

Помнится мне, что до ПриЗакрытии в этом случае дело не доходит Печаль
  

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


1C++ rocks!

Сообщений: 8
Зарегистрирован: 17. Ноября 2010
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #3 - 17. Ноября 2010 :: 13:55
Печать  
artbear писал(а) 17. Ноября 2010 :: 10:56:
Помнится мне, что до ПриЗакрытии в этом случае дело не доходит Печаль

Простите, Печаль - означает невозможность сабжа?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #4 - 17. Ноября 2010 :: 14:03
Печать  
GoldNovice писал(а) 17. Ноября 2010 :: 13:55:
artbear писал(а) 17. Ноября 2010 :: 10:56:
Помнится мне, что до ПриЗакрытии в этом случае дело не доходит Печаль

Простите, Печаль - означает невозможность сабжа?

Почему невозможность? нужно пробовать, проверять.
Тем более, что народ давно над этой задачей бился, что-то такое помнится, но смутно Улыбка попробуй погуглить на 1С форумах - у нас, на мисте и др.
  

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



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #5 - 18. Ноября 2010 :: 13:07
Печать  
Как вариант - сохранять список открытых окон с хендлами окон и контекстом (это как-раз Перехватчик позволит сдеалать) а при завершении работы системы посылать им всем Контекст.Записать() и Контекст.Форма.Закрыть(0)
Но возникает вопрос - что делать с документами у которых ПриЗаписиПерепроводить = 1. Если попробовать Провести() то он ведь может и не провестись - фиг его знает в каком он в данный момент состоянии. IMHO лучше сохранять состояние документа где-то вне базы, а при открытии восстанавливать его (состояние). И пусть уже юзер решает что с объектом делать - записывать или нуегонах!
У меня кстати именно так и сделано.
  
Наверх
ICQ  
IP записан
 
GoldNovice
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 17. Ноября 2010
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #6 - 18. Ноября 2010 :: 13:43
Печать  
avgreen писал(а) 18. Ноября 2010 :: 13:07:
Как вариант - сохранять список открытых окон с хендлами окон и контекстом (это как-раз Перехватчик позволит сдеалать) а при завершении работы системы посылать им всем Контекст.Записать() и Контекст.Форма.Закрыть(0)
Но возникает вопрос - что делать с документами у которых ПриЗаписиПерепроводить = 1. Если попробовать Провести() то он ведь может и не провестись - фиг его знает в каком он в данный момент состоянии. IMHO лучше сохранять состояние документа где-то вне базы, а при открытии восстанавливать его (состояние). И пусть уже юзер решает что с объектом делать - записывать или нуегонах!
У меня кстати именно так и сделано.

Интересно было бы взглянуть... Круглые глаза
Я попытался по методике, описаной http://www.1cpp.ru/forum/YaBB.pl?num=1237144948/4#4 Slider-ом
В перехватчике события форм ПриОткрытии закидывал контекст в глобальный список.
ПриЗавершенииРаботыСистемы - восстанавливал из списка и производил запись с закрытием, как вы и советовали. Один ... все равно выдает запрос сохранять или нет... ума не приложу
  
Наверх
 
IP записан
 
ТочноеЯдро
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 21
Зарегистрирован: 28. Января 2010
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #7 - 18. Ноября 2010 :: 14:31
Печать  
А флаг модифицированности формы сбросить ?
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #8 - 18. Ноября 2010 :: 15:26
Печать  
GoldNovice писал(а) 18. Ноября 2010 :: 13:43:
Интересно было бы взглянуть... Круглые глаза

К сожалению это все настолько завязано в Перехватчике что выковырять его отдельно врядли смогу
Цитата:
Я попытался по методике, описаной http://www.1cpp.ru/forum/YaBB.pl?num=1237144948/4#4 Slider-ом
В перехватчике события форм ПриОткрытии закидывал контекст в глобальный список.

Потом неплохо было-бы ПриЗакрытии подчищать этот список. А то ХЕЗ как там будет уничтожаться контекст если на него есть ссылки
Цитата:
ПриЗавершенииРаботыСистемы - восстанавливал из списка и производил запись с закрытием, как вы и советовали. Один ... все равно выдает запрос сохранять или нет... ума не приложу

Странно! Вот кусок из хелпа 1С
Цитата:
Форма.Закрыть(<?>);
Синтаксис:
Форма.Закрыть(<ЗапрСохр>)
Назначение:
Закрыть форму.
Параметры:
<ЗапрСохр> - необязательный параметр. Число: 0 - закрыть форму без вопросов; 1 - если документ, счет, элемент справочника изменен, то будет запрос о сохранении изменений. Значение по  умолчанию - 1.

Может чего-то не так делал?
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #9 - 19. Ноября 2010 :: 06:24
Печать  
avgreen писал(а) 18. Ноября 2010 :: 13:07:
Как вариант - сохранять список открытых окон с хендлами окон и....

Стопудов это лишнее. Есть же
FormEx.Сервис.СписокВсехОткрытыхОкон()
Назначение:
возвращает список значений со всеми открытыми формами

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

Делаешь через этот список свои дела (Записываешь в БД или в своё хранилище) а потом ЗавершитьРаботуСистемы( 0 ) и всё.
  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #10 - 19. Ноября 2010 :: 07:13
Печать  
dnp писал(а) 19. Ноября 2010 :: 06:24:
avgreen писал(а) 18. Ноября 2010 :: 13:07:
Как вариант - сохранять список открытых окон с хендлами окон и....

Стопудов это лишнее. Есть же
FormEx.Сервис.СписокВсехОткрытыхОкон()
Назначение:
возвращает список значений со всеми открытыми формами

[skip]

Появился этот метод по моему недавно и я еще не привык к нему Улыбка
А делал это все еще в далеком 2000 году и потом только переделал на Перехватчик....

Кстати - а что возвращает эта функция? Контексты? Если да - тогда без проблем можно реализовать Subj
  
Наверх
ICQ  
IP записан
 
GoldNovice
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 17. Ноября 2010
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #11 - 22. Ноября 2010 :: 06:12
Печать  
Функция возвращает Контексты. Вот только это не помогает. Всю цепочку вызовов отслеживаю предупреждениями:
1. Сохранить документ?. Да-Нет
2. Событие ПриЗаписи() в перехватчике
3. Событие ПриЗакрытии() в перехватчике
4. Родное событие документа ПриЗакрытии(), (что естественно, мы вызываем оригинальное событие из событий перехватчика)
5. СобытиеГМ_ПриЗавершенииРаботыСистемы()
Как побороть 1 пункт? Озадачен
  

test_conf.zip ( 11 KB | Загрузки )
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #12 - 23. Ноября 2010 :: 10:16
Печать  
GoldNovice писал(а) 22. Ноября 2010 :: 06:12:
Функция возвращает Контексты. Вот только это не помогает. Всю цепочку вызовов отслеживаю предупреждениями:
1. Сохранить документ?. Да-Нет
2. Событие ПриЗаписи() в перехватчике
3. Событие ПриЗакрытии() в перехватчике
4. Родное событие документа ПриЗакрытии(), (что естественно, мы вызываем оригинальное событие из событий перехватчика)
5. СобытиеГМ_ПриЗавершенииРаботыСистемы()
Как побороть 1 пункт? Озадачен

Я чего-то не пойму у тебя вот это не работает
Цитата:
Форма.Закрыть(<?>);
Синтаксис:
Форма.Закрыть(<ЗапрСохр>)
Назначение:
Закрыть форму.
Параметры:
<ЗапрСохр> - необязательный параметр. Число: 0 - закрыть форму без вопросов; 1 - если документ, счет, элемент справочника изменен, то будет запрос о сохранении изменений. Значение по  умолчанию - 1.

Т.е. если Форма.Закрыть(0) - все равно выдает вопрос "Записать Да/Нет"?
  
Наверх
ICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #13 - 23. Ноября 2010 :: 10:19
Печать  
Давай я перефразирую твоё желание?
Цитата:
1. Работает Таймер или ОбработкаОжидания(...)
2. Он(а) каким-либо образом получает команду "Все на выход!"
3. По этой команде инициируется ЗавершитьРаботуСистемы(1), поскольку ЗавершитьРаботуСистемы(0) не устраивает потерей несохраненных объектов
4. На каждый несохраненный объект 1С задает вопрос "Записать? Да\Нет"
5. Если ответили "Да" то отрабатывают штатные ПриЗаписи и т.п. и обработчики Перехватчиков

Задача - обмануть систему, заставить её думать что в пп.4 везде ответили "Да", хотя пользователь ни чего не жал.


Если я правильно понял, то мой ответ:

1. Такой обман вряд ли возможен без доработки FormEx или 1CPP.

2. Такой вариант вообще фиговая идея. А если в ПриЗАписи() или ОбработкаПроведения() или ещё где - возникнет СтатусВозврата(0) ? Опять начинаешь докручивать и допиливать, чтобы учесть что закрытие может быть не интерактивным а "системным" и ослаб##ть на этот случай проверки?... Бррррр...

3. Как минимум - попробуй пробежаться по контекстам, и кинуть им команду Конт.Записать(), флаг модифицированности сбросится. А уже после этого кидай команду ЗавершитьРаботуСистемы() с нулем или единицей, если всё удачно сохранилось, вопросов не должно появиться...
  
Наверх
ICQ  
IP записан
 
GoldNovice
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 17. Ноября 2010
Re: Автосохранение открытых объектов без вопросов ПриЗавершенииРаботыСистемы()
Ответ #14 - 23. Ноября 2010 :: 11:18
Печать  
Ура! Решено!
Проблему решил при помощи Конт.Записать() в перехватчике события ПриЗакрытии(), но не только этим.
Дело в том, что я использую в работе административную утилиту MDIAdmin.exe и Admin1C.dll при ней.
На этапе отладки я отключил загрузку dll-ки (как выясняется зря).
Теперь если просто выходим из 1С - по прежнему выдается запрос на сохранение. Если при помощи MDIAdmin - все тип-топ. Сохраняет Класс.
Осталось за малым... обработка всех СтатусВозврата(0)... Но это уже другая история...
__________________
Для порядка выложу решенную мини-конфу, если какой-нидь другой нубиец будет решать подобное...
Спасибо Всем! Удачи!
  

vihod_bez_msg.zip ( 8 KB | Загрузки )
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать