Переключение на Главную Страницу Страницы: 1 2 3 [4]  ОтправитьПечать
Очень популярная тема (более 25 ответов) ТП+Запрос - как замена Журналов в 1с (число прочтений - 11983 )
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #45 - 03. Июня 2009 :: 07:48
Печать  
Eprst писал(а) 03. Июня 2009 :: 07:37:
Ну ё.. ты же не программно делаешь Новый , а интерактивно через ОткрытьФорму - вот там и  поймаешь..
Улыбка

Взависимости от подхода мог и программно Улыбка а на счет ловить зачем? если она и так срабатывает тогда, если интерактивно Улыбка мне подменять ничего не нужно Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #46 - 03. Июня 2009 :: 07:55
Печать  
А вот тут ты ошибаешься, если ты делаешь новый документ через
ОткрытьФорму, то ПризнакКопирования в в Ввод нового будет =0..
А если там прописаны спец. действия при ПризнакКопирования =1 ?
Например, лишние реквизиты "занулить" или нумер хитрый или...

Вот тогда и нужно будет перехватить и выполнить ВВодНового(1,ОбъектКопирования)
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #47 - 03. Июня 2009 :: 08:09
Печать  
Eprst писал(а) 03. Июня 2009 :: 07:55:
А вот тут ты ошибаешься, если ты делаешь новый документ через
ОткрытьФорму, то ПризнакКопирования в в Ввод нового будет =0..
А если там прописаны спец. действия при ПризнакКопирования =1 ?
Например, лишние реквизиты "занулить" или нумер хитрый или...

Вот тогда и нужно будет перехватить и выполнить ВВодНового(1,ОбъектКопирования)


У меня так вообще то работает Подмигивание
кф="";
ОткрытьФорму("Документ.Накладная",кф);
.......
кф.ВводНового(1);
кф.Форма.Обновить();

Другое дело что возможно сработает 2 раза ВводНового(), но это в моем случае не принципиально Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #48 - 03. Июня 2009 :: 08:27
Печать  
а вот как получить ГК не понятно для перехватчика Печаль причем еще не понятно то, как работает снятьПерехватСобытийГК() Печаль
у меня же параллельно перехватываются события для записи в журнал изменений и если здесь снять, интересно настройка "ПерехватитьСобытияГК" тоже снимется и снова нужно ставить в управлениенастройками.включить("ПерехватитьСобытияГК")?
интересно вообще как себя поведут 2 объекта Перехватчика, один локальный и конкретный, а другой глобальный (для журнала изменений) пашет.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #49 - 03. Июня 2009 :: 09:01
Печать  
К сожалению, ты периодически путаешься с терминологией.
Например, события формы документа (ВводНового и куча др.) и события контекста документа (только 2 события по проведению и его отмене.

А сейчас ты путаешь отключение перехвата одного, конкретного группового контекста (т.е. формы) и отключение всего перехвата на уровне сеанса 1С. Это совершенно разные и несвязанные вещи.
Поэтому при использовании СнятьПерехватСобытийГК() никакой другой перехват не будет выключен, все будет штатно работать, настройка ВК также не снимется Улыбка
Сам подумай, если бы снималось все, какой был бы дурдом в использовании Перехватчика.

Проблем с получением ГК при перехвате нет. Просто запоминай этот ГК в своем классе-перехватчике в момент установки перехвата как атрибут класса/объекта-перехватчика, а потом юзай в любых событиях, которые перехватываются данным классом.
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #50 - 03. Июня 2009 :: 09:18
Печать  
Артур, я так понимаю этот код все равно постоянно делать?
Код
Выбрать все
УпрНастр = СоздатьОбъект("УправлениеНастройками");
УпрНастр.Сбросить("Отладчик");
УпрНастр.Включить("ПерехватитьСобытияГК");
 



и ниже я так понял что то вроде этого? только не понятно что ставить вместо "ГК" всмысле откуда получить этот ГК в моем случае, просто или я чего-то путаю или не понимаю малость Печаль Просто например у меня есть уже класс по записи изменений в журнал и там срабатывает событие_Вводнового(), в итоге получается еще один класс мутить для этого одного действия, причем редко используемого?

                             
Код
Выбрать все
Перехватчик=СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГК(ГК);
Перехватчик.ВыполнитьОригинальноеСобытиеГК(ГК,"ВводНового",);
Перехватчик.СнятьПерехватСобытийГК(ГК);
 

  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #51 - 03. Июня 2009 :: 09:36
Печать  
pavlo писал(а) 03. Июня 2009 :: 09:18:
Артур, я так понимаю этот код все равно постоянно делать?
Код
Выбрать все
УпрНастр = СоздатьОбъект("УправлениеНастройками");
УпрНастр.Сбросить("Отладчик");
УпрНастр.Включить("ПерехватитьСобытияГК");
 


Ты мой ответ читал или все-таки нет??
УправлениеНастройками отвечает за работу ВСЕЙ 1С++ в течение сеанса 1С !!
Конкретный перехват на конкретную форму здесь совершенно ни при чем !
Приведенный тобой код нужно включать при загрузке 1С++, чтобы исключить глюки с реестром на клиентских машинах, и самое главное, включить возможность любого перехвата с помощью Перехватчика !

pavlo писал(а) 03. Июня 2009 :: 09:18:
и ниже я так понял что то вроде этого? только не понятно что ставить вместо "ГК" всмысле откуда получить этот ГК в моем случае, просто или я чего-то путаю или не понимаю малость Печаль

Код
Выбрать все
Перехватчик=СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГК(ГК); !! НЕВЕРНО - читай доку
Перехватчик.ВыполнитьОригинальноеСобытиеГК(ГК,"ВводНового",);
Перехватчик.СнятьПерехватСобытийГК(ГК);
 


Как правило, код установки перехвата используется в 2-х вариантах:
1. внешний код устанавливает перехват на объект-класса перехватчика.
Перехватчик.ПерехватитьСобытияГК(ГК, ОбъектПерехватчик);

2. или сам перехват вызывается внутри объекта-перехватчика, а внешний код вызывает спец.метод этого объекта.
внешний код - Типа ОбъектПерехватчик.УстановитьПерехват(ГК);
а внутри метода УстановитьПерехват(парамКонтФормы) в классе написано
Перехватчик.ПерехватитьСобытияГК(ппарамКонтФормы, вирт());

Для обоих случаев ты просто добавляешь переменную _КонтФормы (или _ГК) в модуль класса как приватный атрибут класса.
Перем _КонтФормы;

Далее для случая 2 - перед/после установкой перехвата ты сохраняешь переданный тебе ГК в нужную переменную _КонтФормы.
_КонтФормы = ГК;

Для случая 1 аналогичный код должен выполнить внешний код, что сложнее Печаль

Поэтому, как правило, методически правильно реализовывать именно метод/вариант 2 !

Далее внутри своего класса-перехватчика уже можно юзать
Перехватчик.ВыполнитьОригинальноеСобытиеГК(_КонтФормы,"ВводНового",);
или
Перехватчик.СнятьПерехватСобытийГК(_КонтФормы);

ЗЫ если нужно снимать перехват событий конкретного контекста из внешнего кода, то, как правило, лучше в классе реализовать спец.метод типа СнятьПерехват(), внутри которого написано все тот же код
Перехватчик.СнятьПерехватСобытийГК(_КонтФормы);
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #52 - 03. Июня 2009 :: 09:44
Печать  
Ну и главное, что нужно помнить при работе с Перехватчиком, что

наш собственный объект-обработчик перехвата событий группового контекста работает всегда только с одним групповым контекстом (контекстом формы, контекстом документа), а не с их кучей/списком/набором

Т.е. строгая связь один-к-одному.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #53 - 03. Июня 2009 :: 09:51
Печать  
Возможно, при разработке интерфейса Перехватчика и пользовательских классов-обработчиков перехвата ГК мне нужно было больше внимания уделить этой связи и четко ее выделить.
Например, можно было бы сделать так -
любой класс-обработчик перехвата ГК должен иметь спец.атрибут _КонтФормы, в которую при вызове Перехватчик.УстановитьПерехватСобытийГК( ГК ) сама ВК 1С++ и должна была автоматически записать переданный контекст.

Т.е. если такого атрибута в классе нет или он описан как экспортный, то при установке перехвата выдается исключение.

Я не пошел по такому пути, потому что этот вариант ограничивал разработчиков, я предпочитаю максимально гибкие варианты с минимумом ограничений.

Сейчас уже интерфейс Перехватчика не изменишь Улыбка
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #54 - 03. Июня 2009 :: 10:03
Печать  
Мне лично просто не нравится подход в моем случае, то есть мне нужно определить перехватчик - это понятно, передать ГК - если просто Контекст можно, а не групповой тут понятно тогда.
А вот делать отдельный класс, для того чтобы там просто сделать одно действие в виде ВыполнитьОригинальное.... дико смущает и напрягает.
В итоге просто получится везде где есть перехватчик и свои действия, нужен свой класс для отработки Печаль ну да можно совместить классы, если не используются один и те же события, но не суть.... главное что дупить классы с одинаковыми событиями приходится если я правильно понял...

На счет идеи того, чтобы перехватчик сам ГК давал понял, и понял что уже переделать не имеет смысла.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #55 - 03. Июня 2009 :: 10:16
Печать  
Вот ничего ты, похоже, не понял Печаль
Попробуй пояснить свои мысли!

pavlo писал(а) 03. Июня 2009 :: 10:03:
Мне лично просто не нравится подход в моем случае, то есть мне нужно определить перехватчик - это понятно, передать ГК - если просто Контекст можно, а не групповой тут понятно тогда.

Это ты про что??

Цитата:
А вот делать отдельный класс, для того чтобы там просто сделать одно действие в виде ВыполнитьОригинальное.... дико смущает и напрягает.

Я разве про это писал?

Цитата:
В итоге просто получится везде где есть перехватчик и свои действия, нужен свой класс для отработки Печаль ну да можно совместить классы, если не используются один и те же события, но не суть.... главное что дупить классы с одинаковыми событиями приходится если я правильно понял...

И это поясни, нифига не понятно.
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #56 - 03. Июня 2009 :: 11:09
Печать  
эти все непонятности видать от того, что я не совсем понимаю как это пашет Улыбка
1.  не могу до конца понять где я могу получить ГК, если есть только простой контекст у меня? Улыбка
2. чтобы перехваченное событие отработать, нужно ведь класс свой создать с событиями скажем событие_вводНового() и там делать нужные вещи и потом там же отдать обработку родному событию?
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #57 - 03. Июня 2009 :: 11:28
Печать  
pavlo писал(а) 03. Июня 2009 :: 11:09:
эти все непонятности видать от того, что я не совсем понимаю как это пашет Улыбка
1.  не могу до конца понять где я могу получить ГК, если есть только простой контекст у меня? Улыбка
2. чтобы перехваченное событие отработать, нужно ведь класс свой создать с событиями скажем событие_вводНового() и там делать нужные вещи и потом там же отдать обработку родному событию?

1. Пойми, что родной контекст и групповой контекст - это разные вещи.
Родной контекст у тебя - это ведь контекст Документа ? СоздатьОбъект("Документ.Накладная", верно?
А ГК - это форма этого документа.
В общем случае, из обычного контекста невозможно получить ГК.
Например, поэтому, имея только обычный контекст, нельзя вызвать его событие ВводНового, т.к. нет ГК.

Чтобы получить ГК объекта, нужно открыть форму этого объекта как минимум.

2. Чтобы перехваченное событие отработать, нужно установить перехват на созданный объект класса-обработчика перехвата.
В этом классе должны быть обработчики событий типа Событие_ВводНового.
И уже в этом классе, а точнее, в обработчике нужного события можно выполнить спец.действия для этого события, и отдать управление родному обработчику события из модуля формы ГК.

А создавать отдельные классы на каждое событие или нет, зависит от твоей задачи.
  

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



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #58 - 03. Июня 2009 :: 13:00
Печать  
в данном случае задача одна, просто перехватить ВводНового() и передать ему ВводНового(1) и все Улыбка
По поводу ГК я так и понимал что ГК не есть Контекст, отсюда и не понимаю как я получу этот ГК Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: ТП+Запрос - как замена Журналов в 1с
Ответ #59 - 04. Июня 2009 :: 07:05
Печать  
trad писал(а) 03. Июня 2009 :: 06:45:
я вот не понимаю 1с.
есть программные аналоги интерактивных действий: ввод нового, ввод на основании, а вот копирования нет Печаль

ps
что, сложно было сделать?
ведь она умеет заполнять реквизиты копированием объекта.
нужно было только вынести это в програм интерфейс


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

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 
ОтправитьПечать