Данное расширение конфигурации предназначено для режима совместимости платформы 8.3.8 и выше.
Оно содержит невидимую общую команду с сочетанием клавиш ALT+Q. Эта команда позволяет открыть форму объекта по ссылке из текущей ячейки любой таблицы в почти любой управляемой форме.
Благодаря недокументированной особенности платформы глобальная непараметризованная команда формы по горячей клавише срабатывает во всех формах, открытых без блокирования других форм, без ее добавления в них. Поэтому
- Команда не будет работать в формах, открытых в режиме блокирования владельца.
- Возможно в будущем эта особенность поведения платформы будет устранена.
Так как на клиенте снаружи из управляемой формы невозможно универсально получить путь к данным поля формы и в частности поля таблицы формы, то в этой команде подразумевается, что имя поля таблицы имеет структуру <ИмяТаблицы><ИмяКолонкиДанных>. Поэтому команда не будет работать в тех таблицах, где не соблюдается этот принцип.
Как подключить расширение конфигурации?
- В режиме предприятия откройте "Все функции/Стандартные/Управление расширениями конфигурации"
- Нажмите "Добавить" и выберите скаченный файл расширения (*.cfe)
- Нажмите "Перезапустить"
- Теперь все новые сеансы в этой базе будут использовать это расширение.
Так как расширение состоит только из одной команды, то его легко сделать самостоятельно используя код модуля команды
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрКоманды = ПолучитьСсылкуТекущейЯчейки();
Если Не ЗначениеЗаполнено(ПараметрКоманды) Тогда
Возврат;
КонецЕсли;
ПоказатьЗначение(, ПараметрКоманды);
КонецПроцедуры
&НаКлиенте
Функция ПолучитьСсылкуТекущейЯчейки()
ТекущееОкно = АктивноеОкно();
Если ТипЗнч(ТекущееОкно) = Тип("ОкноКлиентскогоПриложения") Тогда
ТекущаяФорма = ТекущееОкно.ПолучитьСодержимое();
Если ТипЗнч(ТекущаяФорма) = Тип("УправляемаяФорма") Тогда
Если ТипЗнч(ТекущаяФорма.ТекущийЭлемент) = Тип("ТаблицаФормы") Тогда
ДанныеСтроки = ТекущаяФорма.ТекущийЭлемент.ТекущиеДанные;
ТекущееПоле = ТекущаяФорма.ТекущийЭлемент.ТекущийЭлемент;
ЗначениеПоля = Неопределено;
ПолноеИмяПоля = ТекущееПоле.Имя;
ПутьКДанным = НайтиПутьКДаннымПоля(ДанныеСтроки, ПолноеИмяПоля, ЗначениеПоля);
ДлинаИмениДочернегоРеквизита = 0;
Пока Не ЗначениеЗаполнено(ПутьКДанным) И ДлинаИмениДочернегоРеквизита < СтрДлина(ПолноеИмяПоля) Цикл
ДлинаИмениДочернегоРеквизита = ДлинаИмениДочернегоРеквизита + 1;
Если "_" <> Сред(ПолноеИмяПоля, СтрДлина(ПолноеИмяПоля) - ДлинаИмениДочернегоРеквизита + 1, 1) Тогда
Продолжить;
КонецЕсли;
ИмяРеквизита = Лев(ПолноеИмяПоля, СтрДлина(ПолноеИмяПоля) - ДлинаИмениДочернегоРеквизита - 1);
ИмяДочернегоРеквизита = Прав(ПолноеИмяПоля, ДлинаИмениДочернегоРеквизита);
ПутьКДанным = НайтиПутьКДаннымПоля(ДанныеСтроки, ИмяРеквизита, ЗначениеПоля);
Если ЗначениеЗаполнено(ПутьКДанным) Тогда
Попытка
ЗначениеПоля = ЗначениеПоля[ИмяДочернегоРеквизита];
Исключение
ПутьКДанным = Неопределено;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если Не ЗначениеЗаполнено(ПутьКДанным) Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
Пустышка = ЗначениеПоля.УникальныйИдентификатор();
Исключение
Возврат Неопределено;
КонецПопытки;
Возврат ЗначениеПоля;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
&НаКлиенте
Функция НайтиПутьКДаннымПоля(Знач ДанныеСтроки, Знач ПолноеИмяПоля, ЗначениеПоля)
ДлинаСтроки = СтрДлина(ПолноеИмяПоля);
ПутьКДанным = "";
Пока ДлинаСтроки > 0 Цикл
ПроверяемоеИмя = Прав(ПолноеИмяПоля, ДлинаСтроки);
ДлинаСтроки = ДлинаСтроки - 1;
Попытка
ЗначениеПоля = ДанныеСтроки[ПроверяемоеИмя];
ПутьКДанным = ПроверяемоеИмя;
Прервать;
Исключение
Продолжить;
КонецПопытки;
КонецЦикла;
Возврат ПутьКДанным;
КонецФункции
Лицензия - BSD (бесплатно для коммерческого использования)