|
v7: Открытие формы элемента справочника из формы списка | ☑ | ||
---|---|---|---|---|
0
sournk
17.11.12
✎
10:12
|
Как отловить следующие интерактивные события в форме списка справочника с редактированием элементов в диалоге:
- открытия существующего элемента справочника, - создания нового элемента справочника, - удаления и установки/снятия пометки удаления элемента. ? |
|||
1
Фокусник
17.11.12
✎
10:52
|
(0) Почему это хочется сделать именно в форме списка, какая цель преследуется?
|
|||
2
sournk
17.11.12
✎
10:55
|
Универсально вести список часто используемых элементов для форм списков любых справочников.
|
|||
3
Фокусник
17.11.12
✎
11:09
|
(2) Возможно, было бы достаточно в ПриОткрытии() формы элемента фиксировать факт открытия этого элемента (вид справочника, элемент, количество открытий). Здесь, наверное важнее, придумать КУДА фиксировать этот "факт открытия", а также как-то учитывать частоту открытия (а не просто количество открытий) :)
А зачем пометки удаления, создания новых фиксировать? |
|||
4
sournk
17.11.12
✎
11:13
|
Ну пометки удаления может и не нужно. Это так для кучи. Алгоритм определения оптимальности списка часто открываемых можно выдумать вообще любой, куда писать тоже не сложно выбрать.
Сейчас техническая проблема как раз избежать редактирования кода всех форм элементов для тех справочников, в чьих формах списков будет использоваться этот лист часто открываемых элементов. |
|||
5
Mikeware
17.11.12
✎
11:14
|
(2) ога, "частоудаляемые элементы справочников"...
|
|||
6
Mikeware
17.11.12
✎
11:18
|
(4) т.е. проблема чисто в ленивости?
ну, заюзай альфовский инсертер, в конце концов... |
|||
7
sournk
17.11.12
✎
11:37
|
(5) По пометки удаления: Возможно для некоторых справочников объекты, с которых сняты пометки удаления будут помещаться в список.
(6) Если надо будет применить этот инструмент в пяти конфах и хотя бы пяти справочниках в каждой, то действительно лениво еще и код формы каждого элемента лопатить. Да и архитектурно как-то криво. Если уж код формы списка менять по-любому, то им бы и ограничиться и не плодить лишнего. |
|||
8
Фокусник
17.11.12
✎
11:44
|
(4) "Сейчас техническая проблема как раз избежать редактирования кода всех форм элементов для тех справочников, в чьих формах списков будет использоваться этот лист часто открываемых элементов."
ИМХО, в правильной конфигурации в каждом ПриОткрытии() формы элемента должен быть вызов глобальной процедуры. А в форме списка зачем определять факт открытия, я так и не понял :) |
|||
9
sournk
17.11.12
✎
11:49
|
(8) В каких конфах это будет использоваться я не знаю. Тем более уж их правильность ))
|
|||
10
PZh
17.11.12
✎
14:39
|
(0)
Можно сделать так: 1. Новые определять с помощью таблички _1SUIDCTL (запоминать последний ID справочника - соответственно все после него это новые, пишется при открытии формы списка и перед началом работы того алгоритма, который эту инфу использует) 2. (Тут правда понадобиться глобальная переменка и процедурка). Пометку удаления и открытие отслеживать через обработку ожидания (только не стандартную, а 1cpp, FormEx). Старт обработки и передачу текущего элемента повесить на события нажатия клавы и мыши в форме списка (текущий элемент передавать через глобальную переменку). Открытие определять командой Блокировка(1) А если серьезно, то пункт 2 лучше сделать через ПриОткрытии и ПриУдаленииЭлемента. Можно инсталятором вставлять свои код, всю логику вынося в глобальные процедуры или в отдельную обработку. |
|||
11
ADirks
17.11.12
✎
14:47
|
(0) 1С++, Перехватчик
|
|||
12
Mikeware
17.11.12
✎
20:34
|
(11)до этого ему еще дорасти надо...
|
|||
13
sournk
19.11.12
✎
15:00
|
(11) Как же с помощью Перехватчика события из пунктов №1 и №2 получить?
|
|||
14
Ёпрст
19.11.12
✎
15:02
|
(13) в перехвате предопределенных событий вестимо.
|
|||
15
sournk
19.11.12
✎
15:04
|
(14) Разве есть такое предопределенное событие в форме списка???
|
|||
16
ADirks
19.11.12
✎
18:30
|
(13) Надо мониторить:
События в форме списка ПриНачалеРедактированияСтроки ПриЗаписи События в форме элемента (тоже надо мониторить) ПриОткрытии ПриЗаписи Установка / снятие пометки удаления - штатно, в ГМ тип прилетевшего в событие контекста определяется FormEx'ом как оФорма = СоздатьОбъект("РасширениеФормы"); оФорма.УстановитьФорму(Конт.Форма); Тип = оФорма.ПолныйТипОбъекта(); |
|||
17
sournk
20.11.12
✎
08:02
|
(16) Ни одно из событий ПриНачалеРедактированияСтроки, ПриЗаписи не вызывается в ФОРМЕ СПИСКА С РЕДАКТИРОВАНИЕМ ЭЛЕМЕНТОМ В ДИАЛОГЕ.
|
|||
18
ADirks
20.11.12
✎
08:41
|
Не читаем?
События в форме элемента (тоже надо мониторить) ПриОткрытии ПриЗаписи |
|||
19
sournk
20.11.12
✎
08:55
|
(18) Как сказано выше, задача сделать это именно в форме списка, без внесения изменений в код форм элементов.
|
|||
20
Ёпрст
20.11.12
✎
08:57
|
(19) еще раз вниматочно читаем, для чего нужен класс.Перехватчик.
На основе него сто лет в обед сделан контроль прав на объекты. Пасёт всё, все события. Ничего "дописывать" куда либо не надо. |
|||
21
ADirks
20.11.12
✎
09:05
|
(19) А мне показалось, что ты хотя бы глянул, чё за перехватчик такой.
Оказалось показалось. |
|||
22
sournk
20.11.12
✎
09:22
|
(20)(21) Я и пытаюсь Перехватчиком получить обработку этих событий, но как отловить именно нужное мне событие не могу найти.
Отлично перехватываются как раз предложенные ПриНачалеРедактированияСтроки и даже ОбработкаВыбораЗначения, но это все не те события. |
|||
23
Ёпрст
20.11.12
✎
09:23
|
(22) может, того, у мужика в кепке \спросишь, какие вообще есть события ?
|
|||
24
sournk
20.11.12
✎
09:25
|
(23) а здесь нельзя спросить?
|
|||
25
sournk
20.11.12
✎
09:26
|
(22) в хелпе нашлось тока
1. Необходимо использовать пользовательский класс 1С++, в котором должны быть определены обработчики соответствующих событий с названием события (ПриЗакрытии, ПриНачалеВыбораЗначения, ПриНажатииКнопкиКлавиатуры) или со специальным названием в виде Событие_НаименованиеСобытия (Событие_ПриЗакрытии, Событие_ПриНачалеВыбораЗначения, СобытиеГМ_ПриНажатииКнопкиКлавиатуры) |
|||
26
Ёпрст
20.11.12
✎
09:28
|
(24) Если ты не знаком с методами работы со справочников, то для начала - спрашивать нужно мужика в кепке в пофигураторе.
А уж потом, тута |
|||
27
Ёпрст
20.11.12
✎
09:30
|
Если что, есть предопределенные методы как формы списка, так и формы элемента.
И ВводНового, в форме элемента, никто не отменял, как и ПриВводеСтроки , если редактирование в списке |
|||
28
Ёпрст
20.11.12
✎
09:32
|
Перехватчик позволяет перехватить все предопределенные события, понять, где оно вызвано, можно через полныйТипОбъекта, например.
|
|||
29
sournk
20.11.12
✎
09:41
|
(26) Вы наверное меня не верно поняли.
1. (27) Нет в форме списка предопределенной процедуры на простое открытие существующего элемента. 2. (27) Формы элементов я править не могу. 3. (28) В Перехватчике каких-то дополнительных событий, позволяющих как-то отловить открытие элемента я тоже не нашел. |
|||
30
Ёпрст
20.11.12
✎
09:45
|
(29) да уж...
к мужику в кепке то ходил ? Спрашивал ? :))) Про перехватчик тоже смотрю, ничего не читал. Там если чего, мд-ник вообще можно не править. |
|||
31
Ёпрст
20.11.12
✎
09:45
|
совсем
|
|||
32
Ёпрст
20.11.12
✎
09:46
|
Если че, ПриОткрытии (в форме элемента) и ПриНачалеРедактированияСтроки в форме списка , это ежели элемент справочника ужо есть
|
|||
33
sournk
20.11.12
✎
10:21
|
(32) Вы сами-то пробовали???
1. Событие ПриНачалеРедактированияСтроки не возникает при открытии элемента в форме списка! 2. А событие ПриОткрытии формы элемента может возникать не только при открытии из формы списка, поэтому обработать открытие именно из нее не получается. |
|||
34
sournk
20.11.12
✎
10:22
|
(32) Ясно дело, что я Перехватчиком подписался на события ПриНачалеРедактированияСтроки и ПриОткрытии и не правлю кода форм.
Дело не этом. А в том, что правильно нужные события не обработать. |
|||
35
sournk
20.11.12
✎
10:25
|
(32) Более того, для обработки ПриОктрытии нужен контекст формы элемента. А где его взять в модуле формы списка?
|
|||
36
Ёпрст
20.11.12
✎
10:26
|
(33) Болеешь ?
|
|||
37
Ёпрст
20.11.12
✎
10:26
|
Или может прочитаешь сперва, что тебе пишут ?
|
|||
38
Ёпрст
20.11.12
✎
10:27
|
При редактировании в списке - ПриНачалеРедактированияСтроки , при редактировании в диалоге - ПриОткрытии у ФОРМЫ ЭЛЕМЕНТА.
Что тут может быть не яссного вообще ? |
|||
39
Ёпрст
20.11.12
✎
10:28
|
Проверить , откуда был вызов, можно, посмотрев полный тип объекта у расширения формы.
|
|||
40
sournk
20.11.12
✎
10:35
|
(38) Еще раз: ПриНачалеРедактированияСтроки не вызывается при открытии элемента.
Подписываемся на события. оКонтекстФормы - форма списка справочника:
Код в классе оОбрботчкикПерехвата:
При открытии элемента из формы списка событие ПриНачалеРедактированииСтроки не вызывается. Что тут не так? |
|||
41
Ёпрст
20.11.12
✎
10:39
|
(40) да уж..
про перехватчик ты тоже не читал.. |
|||
42
Ёпрст
20.11.12
✎
10:42
|
Лень объяснять, что есть события глобального контекста и локального, и что перехватывать надо и там и там, смотри сам:
http://webfile.ru/6224214 подключать так: ЗагрузитьВнешнююКомпоненту("1cpp.dll"); Настройки=СоздатьОбъект("УправлениеНастройками"); Настройки.Сбросить("Проверка типов"); Настройки.Сбросить("Отладка"); //Настройки.Сбросить("Оптимизация"); Настройки.Включить("Оптимизация"); Настройки.Включить("TurboBL"); Настройки.Включить("ПерехватитьСобытияГК"); Перехватчик = СоздатьОбъект("Перехватчик"); ПерехватчикСобытийГМ = СоздатьОбъект("ПерехватСобытий"); Перехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМ); //ПерехватчикСобытийГМ.ПерехватитьПроведение(); //Перехватчик.ПодключитьСобытие_ЗаписьСобытияЖурналаРегистрации(); |
|||
43
sournk
20.11.12
✎
12:16
|
(42) Зачем объяснять разницу между глоб. и локальным контекстом. Локальный выбран не случайно. Т.к. в конфе может быть зареган уже обработчик глобального модуля. Да и к сути вопроса никакого отношения не имеет. Даже если повесить все на глобальный контекст, то проблема не решается.
Остается открытым вопрос №2 из (33), потому что даже в вашей реализации "Событие_ПриОткрытии Справочник.Номенклатура.Форма" вызывается как и при открытии элемента из формы списка, так и при ОткрытьФорму(Элемент) из любого другого места. Последнее мне не нужно! Интересует ТОЛЬКО из формы списка. |
|||
44
sournk
20.11.12
✎
12:17
|
(43) выше не глобального модуля, а глоб. контекста конечно.
|
|||
45
Ёпрст
20.11.12
✎
12:23
|
(43) да уж..
|
|||
46
antoneus
20.11.12
✎
12:25
|
в форме списка
Форма.ОбработкаВыбораСтроки(1) и предопределенная ПриВыбореСтроки() |
|||
47
ADirks
20.11.12
✎
12:26
|
(43) Вообще-то ПриОткрытии() есть ещё у документов, их журналов, отчётов, обработок ...
Яж говорю: тип прилетевшего в событие контекста определяется FormEx'ом как оФорма = СоздатьОбъект("РасширениеФормы"); оФорма.УстановитьФорму(Конт.Форма); Тип = оФорма.ПолныйТипОбъекта(); |
|||
48
Ёпрст
20.11.12
✎
12:26
|
(46) автор не догонит
|
|||
49
Ёпрст
20.11.12
✎
12:27
|
(47) он хочет отличать открытие формы из списка от програмного открытия формы откуда угодно, про (46) врят ли догонит..
:) |
|||
50
Ёпрст
20.11.12
✎
12:27
|
Хотя, можно и без этого обойтись.
|
|||
51
antoneus
20.11.12
✎
12:30
|
(49) мое дело предложить)
|
|||
52
sournk
20.11.12
✎
12:58
|
(46) Оказывается, ПриВыбореСтроки() даже при Форма.ОбработкаВыбораСтроки(1) срабатывает, если дважды мышью ткнуть на элемент или нажать Enter, но не срабатывает, если нажать на панели кнопку открытия элемента.
|
|||
53
sournk
20.11.12
✎
12:59
|
(47) Тип вернет "Справочник.Номенклатура.Форма" в любом случае, что при открытии элемента из формы списка, что при открытии его например из кода какой-нить обработки через ОткрытьФорму(), например.
|
|||
54
Ёпрст
20.11.12
✎
13:07
|
:)
Редактировать - обоими способами В ПриОткрытии РедактироватьВДиалоге(0,0); в ПредОпределенных ПриРедактированииСтроки/ПриРедактированииНовойСтроки тупо ОткрытьФорму() с параметром (либо существующего элемента, либо нового) + статусВозврата(0). Усё. |
|||
55
Ёпрст
20.11.12
✎
13:08
|
в ПриОткрытии/ВводНового смотреть форма.параметр - если то че надо - радуемся, что открыли с нужной формы списка.
|
|||
56
Ёпрст
20.11.12
✎
13:09
|
и всё это, можно прописать в перехватчике, чтоб мд не менять
(ну окромя "редактирования обеими способами") |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |