Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехвадчик событий, помогите разобраться! (число прочтений - 10406 )
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехвадчик событий, помогите разобраться!
Ответ #15 - 18. Января 2012 :: 10:41
Печать  
Александр84 писал(а) 18. Января 2012 :: 10:39:
Получилось, только при интерактивном вводе документа, если делать создание документа обработкой (Док.Новый();Док.Записать()) то не срабатывает


Улыбка)))))

А с какой радости должно то ?!

ВВодНового - это интерактивная процедура формы документа.

При программном создании документа ты сам можешь задать время с помощью метода УстановитьВремя какое хочешь, тут никакие перехватчики не нужны.


  
Наверх
 
IP записан
 
Александр84
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 30. Сентября 2011
Re: Перехвадчик событий, помогите разобраться!
Ответ #16 - 18. Января 2012 :: 10:52
Печать  
Улыбка
Это понятно что можно задать, но хотелось что бы во всех обменах не переписавть создание документа, а сделать типо как подписку на событие в 1cv8, что бы для всех случаев ввода (ручного, программного) срабатывал ПерехватСобытия  Подмигивание
  
Наверх
 
IP записан
 
Александр84
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 30. Сентября 2011
Re: Перехвадчик событий, помогите разобраться!
Ответ #17 - 18. Января 2012 :: 10:53
Печать  
Есть идеи как это можно сделать?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехвадчик событий, помогите разобраться!
Ответ #18 - 18. Января 2012 :: 10:58
Печать  
Разве что переопределишь документ своим классом и в нём переопределишь нужные методы документа, типа Док.Новый()
в котором выполнишь базовый метод Новый() и установишь нужное тебе время сразу.
Т.е при строке Док = СоздатьОбъект(""Документ.НужныйВид")
будет создан твой экземпляр класса, в котором будет всё, что ты хочешь.

  
Наверх
 
IP записан
 
Александр84
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 17
Зарегистрирован: 30. Сентября 2011
Re: Перехвадчик событий, помогите разобраться!
Ответ #19 - 18. Января 2012 :: 11:22
Печать  
Т.е при строке Док = СоздатьОбъект(""Документ.НужныйВид")

Это же прописывается в обработке так что все равно в обработки лезть тогда смылса не проще написать  Док = СоздатьОбъект(""Документ.НужныйВид")
Док.УстановитьВремя(,,)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехвадчик событий, помогите разобраться!
Ответ #20 - 18. Января 2012 :: 11:44
Печать  
Ты не понял ничерта.
Ты переопределяешь объект типа Документ собственным классом-наследником от штатного Документ..

И во всех модулях, где у тебя есть строки для создания объекта типа документ, например, док = СоздатьОбъект("Документ.Реализация"), будет создан твой экземпляр класса, а на Документ.Реализация, фирштейн ?

а в этом классе, ты переопрделишь один метод Док.Новый() на свой с установкой времени.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Перехвадчик событий, помогите разобраться!
Ответ #21 - 19. Января 2012 :: 06:22
Печать  
Записал себе когда-то для памяти:

Порядок установки времени для программно создаваемых документов:

АвтоВремяОтключить() -> Новый() -> Установить время() -> Записать()
Новый() -> АвтоВремяОтключить() -> Установить время() -> Записать() // без разницы, в каком порядке

Новый() -> АвтоВремяТекущее() -> Записать()
АвтоВремяТекущее() -> Новый() -> Записать() // без разницы, в каком порядке
АвтоВремяТекущее() -> Новый() -> Записать() -> УстановитьВремя() // Записывать не обязательно!!!


Новый() -> Записать() // помещает в конец дня
АвтоВремяОтключить() -> Новый() -> Записать() // позиционирует документ на 06:00:00
Эти 2 ситуации не зависят от настройки пользователя "время записи новых документов"

АвтоВремяНачалоДня/АвтоВремяТекущее/АвтоВремяКонецДня ведут себя одинаково.
Позиционирование в начало дня - -10 секунд от первого документа в дне (или 00:00:01)
Позиционирование в конец дня - +10 секунд после последнего документа (или 23:59:59)


Если в форме документа, то для нового
АвтоВремяОтключить() -> Установить время()
Для записанного - точно не помню, но вроде просто УстановитьВремя()
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Перехвадчик событий, помогите разобраться!
Ответ #22 - 17. Декабря 2012 :: 23:55
Печать  
Eprst писал(а) 18. Января 2012 :: 11:44:
Ты не понял ничерта.
Ты переопределяешь объект типа Документ собственным классом-наследником от штатного Документ..

И во всех модулях, где у тебя есть строки для создания объекта типа документ, например, док = СоздатьОбъект("Документ.Реализация"), будет создан твой экземпляр класса, а на Документ.Реализация, фирштейн ?

а в этом классе, ты переопрделишь один метод Док.Новый() на свой с установкой времени.


а как потом продолжить манипуляции с самим документом.? который мы пытаемся создать.
необходимо записать документ, а не получается. вот мой пример

класс Документ.Новый1 = классСозданияДокумента@MD{};

в классе:
Процедура Новый() Экспорт
     Сообщить("Новый документ: ");      
КонецПроцедуры

в обработке откуда создается документ:
Процедура Выполнить()
     Док = СоздатьОбъект("Документ.Новый1");
     Док.Новый();
     Док.Записать();
КонецПроцедуры

при выполнении обработки получаю след текст ошибки
Новый документ:
Док.Записать();
{Обработка.новый1.Форма.Модуль(5)}: Поле агрегатного объекта не обнаружено (Записать)
  
Наверх
ICQ  
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Перехвадчик событий, помогите разобраться!
Ответ #23 - 18. Декабря 2012 :: 01:35
Печать  
Сделал вот такое изменение в классе:
процедура Новый() Экспорт
     ВремДок = я().ПолучитьБазовыйКласс();
     
     ВремДок.Новый();
     ВремДок.ДатаДок = '01.01.2012';
КонецПроцедуры

в результате получил созданный и записанный документ, но он остается заблокированным системой да же после выхода из 1С.

оказывается если отключить класс в DefCls, то документы начинают открываться
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехвадчик событий, помогите разобраться!
Ответ #24 - 18. Декабря 2012 :: 07:02
Печать  
не не так,
в описалове так должно быть:
класс Документ.Реализация = Документ.Реализация.ert:Document.Реализация {};

в твоём случае (и лучше тестовые классы в мд не пихать, а вынести наружу - так легче править)

класс Документ.Новый1 = классСозданияДокумента@MD:Document.Новый1{};
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Перехвадчик событий, помогите разобраться!
Ответ #25 - 18. Декабря 2012 :: 08:54
Печать  
//======================================================================
Процедура Инит(Конт) Экспорт
     КонтекстФормы=Конт;      
     
     Перехватчик.ПерехватитьСобытияГК(КонтекстФормы, вирт());
     
     ОбъектФорма                  = СоздатьОбъект("Форма");
     ОбъектФорма.УстановитьФорму(КонтекстФормы.Форма);
      Если контТип(КонтекстФормы)="Документ" Тогда
           Если тФормы.Вид()))=1 Тогда
                 Перехватчик.ПерехватитьСобытияПроведенияДокумента(КонтекстФормы.Вид(), вирт());
           КонецЕсли;            
      КонецЕсли;
КонецПроцедуры // Инит


Ошибка оказывается возникает в классПерехватГлобальника, а в частности в
Перехватчик.ПерехватитьСобытияПроведенияДокумента(КонтекстФормы.Вид(), вирт());
  
Наверх
ICQ  
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Перехвадчик событий, помогите разобраться!
Ответ #26 - 18. Декабря 2012 :: 09:00
Печать  
Спасибо, как правильно описать класс нашел на форуме.

класс Документ.Новый1 = Class\СозданиеДокумента.ert : Document.Новый1{};

но вот что делать с ошибкой пока не знаю.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехвадчик событий, помогите разобраться!
Ответ #27 - 18. Декабря 2012 :: 09:03
Печать  
С какой именно ошибкой ?!
  
Наверх
 
IP записан
 
undo
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 53
Местоположение: Ульянвоск
Зарегистрирован: 25. Декабря 2008
Пол: Мужской
Re: Перехвадчик событий, помогите разобраться!
Ответ #28 - 18. Декабря 2012 :: 09:05
Печать  
в журнале пытаюсь открыть документ, он не открывается, после повторного клика пишет объект заблокирован, если вызвать просмотр документа то программа валится. 
Вот тестовая конфигурация на которой проверяю.
  

2012_12_18.rar ( 604 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Перехвадчик событий, помогите разобраться!
Ответ #29 - 18. Декабря 2012 :: 09:45
Печать  
для начала, заремь перехват проведения документа.
Есть конфликт с перехватом проведения документа и переопределением документа своим классом.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать