Мне надоело пользоваться стандартным системным обработчиком ячейки таблицы, и я написал свою процедуру.
Она позволяет, в зависимости от типа передаваемого значения, делать различные действия. Для справочника - предлагает открыть форму элемента в режиме редактирования или просмотра, а также найти и активизировать сам элемент в форме списка справочника.
Если передаваемое значение - это документ, то его можно открыть в режимах редактирования или просмотра, либо найти и активизировать его в своем журнале, либо в полном (общем) журнале документов.
Сделано все очень просто - при двойном щелчке по ячейке с расшифровкой выводится небольшое контекстное меню выбора действия. Пользователю только нужно выбрать то, что он хочет. В следующей версии обязательно предусмотрю дополнительные пункты меню: «Не знаю », «Что-нибудь ». ;-)
Для обеспечения универсальности весь программный код размещен в одной процедуре «ОбработкаЯчейкиТаблицы() ». Так как обработка ячейки происходит следующим образом: [ Локально -> Глобально -> Системный обработчик ], то и область действия процедуры будет зависеть от ее место расположения.
Собственно, процедура представлена ниже:
Процедура ОбработкаЯчейкиТаблицы (Расшифровка ,Флаг ,Табл ,Адрес ) Перем ТекТип ,ТекСписок , ТекЗнач , Конт ; Если ПустоеЗначение(Расшифровка )=0 Тогда ТекСписок =СоздатьОбъект("СписокЗначений" ); ТекТип =ТипЗначенияСтр(Расшифровка ); Если ТекТип ="Справочник" Тогда ТекСписок .ДобавитьЗначение ("1" ,"Редактировать элемент" ); ТекСписок .ДобавитьЗначение ("2" ,"Просмотреть элемент" ); ТекСписок .ДобавитьЗначение ("3" ,"Найти в форме списка" ); Если ТекСписок .ВыбратьЗначение (ТекЗнач ,,,,1 )=1 Тогда Если ТекЗнач ="1" Тогда ОткрытьФорму(Расшифровка ,,0 ); ИначеЕсли ТекЗнач ="2" Тогда ОткрытьФорму(Расшифровка ,,1 ); ИначеЕсли ТекЗнач ="3" Тогда Конт ="" ; ОткрытьФорму("Справочник." + Расшифровка .Вид () + "." + Метаданные.Справочник (Расшифровка .Вид ()).ОсновнаяФорма .Идентификатор , Конт ); Конт .АктивизироватьОбъект (Расшифровка ); КонецЕсли; КонецЕсли; ИначеЕсли ТекТип ="Документ" Тогда ТекСписок .ДобавитьЗначение ("1" ,"Редактировать документ" ); ТекСписок .ДобавитьЗначение ("2" ,"Просмотреть документ" ); ТекСписок .ДобавитьЗначение ("3" ,"Найти в своем журнале" ); ТекСписок .ДобавитьЗначение ("4" ,"Найти в общем журнале" ); Если ТекСписок .ВыбратьЗначение (ТекЗнач ,,,,1 )=1 Тогда Если ТекЗнач ="1" Тогда ОткрытьФорму(Расшифровка ,,0 ); ИначеЕсли ТекЗнач ="2" Тогда ОткрытьФорму(Расшифровка ,,1 ); ИначеЕсли ТекЗнач ="3" Тогда Конт ="" ; ТекЖурнал =Метаданные.Документ (Расшифровка .Вид ()).Журнал .Идентификатор ; ОткрытьФорму("Журнал." + ТекЖурнал + "." + Метаданные.Журнал (ТекЖурнал ).ОсновнаяФорма .Идентификатор , Конт ); Конт .УстановитьИнтервал (Расшифровка .ДатаДок , ПолучитьДатуТА()); Конт .АктивизироватьОбъект (Расшифровка ); ИначеЕсли ТекЗнач ="4" Тогда Конт ="" ; ТекЖурнал =Метаданные.ПолныйЖурнал .Идентификатор ; ОткрытьФорму("Журнал." + ТекЖурнал + "." + Метаданные.Журнал (ТекЖурнал ).ОсновнаяФорма .Идентификатор , Конт ); Конт .УстановитьИнтервал (Расшифровка .ДатаДок , ПолучитьДатуТА()); Конт .АктивизироватьОбъект (Расшифровка ); КонецЕсли; КонецЕсли; Иначе Флаг =1 ; КонецЕсли; Иначе Флаг =1 ; КонецЕсли; КонецПроцедуры
Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").
|