v7: Открытие формы элемента справочника из формы списка #639735


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

В этой группе 1С