Открывашка ячеек таблиц

12.04.23

Разработка - Работа с интерфейсом

Глобальное сочетание клавиш для открытия объекта по ссылке из текущей ячейки любой таблицы в большинстве управляемых форм

Скачать файлы

Наименование Файл Версия Размер
Открывашка ячеек таблиц:
.cfe 6,75Kb
17
.cfe 1.00 6,75Kb 17 Скачать

Данное расширение конфигурации предназначено для режима совместимости платформы 8.3.8 и выше.

Оно содержит невидимую общую команду с сочетанием клавиш ALT+Q. Эта команда позволяет открыть форму объекта по ссылке из текущей ячейки любой таблицы в почти любой управляемой форме.

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

  1. Команда не будет работать в формах, открытых в режиме блокирования владельца.
  2. Возможно в будущем эта особенность поведения платформы будет устранена.

Так как на клиенте снаружи из управляемой формы невозможно универсально получить путь к данным поля формы и в частности поля таблицы формы, то в этой команде подразумевается, что имя поля таблицы имеет структуру <ИмяТаблицы><ИмяКолонкиДанных>. Поэтому команда не будет работать в тех таблицах, где не соблюдается этот принцип.

Как подключить расширение конфигурации?

  1. В режиме предприятия откройте "Все функции/Стандартные/Управление расширениями конфигурации"
  2. Нажмите "Добавить" и выберите скаченный файл расширения (*.cfe)
  3. Нажмите "Перезапустить"
  4. Теперь все новые сеансы в этой базе будут использовать это расширение.

Так как расширение состоит только из одной команды, то его легко сделать самостоятельно используя код модуля команды

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ПараметрКоманды = ПолучитьСсылкуТекущейЯчейки();
	Если Не ЗначениеЗаполнено(ПараметрКоманды) Тогда
		Возврат;
	КонецЕсли; 
	ПоказатьЗначение(, ПараметрКоманды);
	
КонецПроцедуры

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

&НаКлиенте
Функция НайтиПутьКДаннымПоля(Знач ДанныеСтроки, Знач ПолноеИмяПоля, ЗначениеПоля)
	
	ДлинаСтроки = СтрДлина(ПолноеИмяПоля);
	ПутьКДанным = "";
	Пока ДлинаСтроки > 0 Цикл
		ПроверяемоеИмя = Прав(ПолноеИмяПоля, ДлинаСтроки);
		ДлинаСтроки = ДлинаСтроки - 1;
		Попытка
			ЗначениеПоля = ДанныеСтроки[ПроверяемоеИмя];
			ПутьКДанным = ПроверяемоеИмя;
			Прервать;
		Исключение
			Продолжить;
		КонецПопытки;
	КонецЦикла;
	Возврат ПутьКДанным;
	
КонецФункции

Лицензия - BSD (бесплатно для коммерческого использования)

открыть ссылку из таблицы

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16698    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10737    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    9614    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 92 28.10.18 09:45 Сейчас в теме
А почему не сделать серверный вызов и получить путь к данным элемента формы?
2. json 3297 28.10.18 10:37 Сейчас в теме
(1) из клиентского кода, расположенного вне самой формы, нельзя обратиться к контексту этой формы на сервере.
Другими словами, чтобы выполнить то, что вы предлагаете, серверный код должен располагаться в модуле самой формы
TreeDogNight; triviumfan; +2 Ответить
3. MVK80 28.10.18 11:35 Сейчас в теме
ТекущаяФорма = ТекущееОкно.ПолучитьСодержимое();
ПолучитьСодержимое() - не нашел в синтаксис-помощнике (платформы 8.3.13 и 8.3.14). Это тоже что-то недокументированное для поддержки старых версий (раньше было, сейчас нет)?
4. tormozit 7136 28.10.18 11:41 Сейчас в теме
(3) Да. В одной из последних версий платформы этот метод заменили на свойство Содержимое. Кстати где ты взял 8.3.14? Ее еще не публиковали.
5. MVK80 28.10.18 12:00 Сейчас в теме
(4), работаю во франче, а они походу первые должны тестировать новые версии платформ и выявлять баги,
Так что я лично ничего не качал, у нас установили её :).
6. nvv1970 28.10.18 18:14 Сейчас в теме
(5) вероятно какой-то очень особенный франч, на котором тренируются ))
Наверно проект на тестовой платформе ведете?
7. Cyberhawk 135 29.10.18 10:52 Сейчас в теме
Вместо
Попытка
			ЗначениеПоля = ДанныеСтроки[ПроверяемоеИмя];
			ПутьКДанным = ПроверяемоеИмя;
			Прервать;

можно сделать без попытки:
	    ИмяПоляДляЗонда = ПроверяемоеИмя;
		СтароеЗначение = "" + Новый УникальныйИдентификатор;
		Зонд = Новый Структура(ИмяПоляДляЗонда, СтароеЗначение);
		ЗаполнитьЗначенияСвойств(Зонд, ДанныеСтроки);
		НовоеЗначение = Зонд[ИмяПоляДляЗонда];
		Если НовоеЗначение <> СтароеЗначение Тогда
			ПутьКДанным = ПроверяемоеИмя;
			Прервать;
		КонецЕсли;
Показать
tormozit; +1 Ответить
8. tormozit 7136 29.10.18 21:56 Сейчас в теме
(7) Согласен, что без попытки будет красивее. Также голый вариант без попытки упрощает отладку в случае использования фичи "Остановка по ошибке". Но в представленном мной коде в целом есть и другая попытка, где такой прием не поможет. Поэтому остается только увеличение красоты. Однако на другой чаше весов лежит лаконичность, т.к. публикация не про правильный код, а про удобную возможность для пользователя. Как мне кажется они в данном случае чащи весов почти уравновешены.
9. Cyberhawk 135 30.10.18 08:51 Сейчас в теме
(8) Не спорю: с попыткой код более краток и, наверное, даже более понятен разработчику (особенно не умудренному опытом).
А какой попытки нельзя избежать - там, где вызывается метод УникальныйИдентификатор? А зачем оно надо?
10. tormozit 7136 30.10.18 09:00 Сейчас в теме
(9) Вызов метода УникальныйИдентификатор в попытке нужен, чтобы проверить, что значение является ссылкой.
12. Cyberhawk 135 31.10.18 13:02 Сейчас в теме
(10) А что плохого будет, если это не проверять?
33. Патриот 450 18.10.21 19:20 Сейчас в теме
(10) конечно уже пару лет прошло, но вдруг пригодится в этой или других наработках)
	ТипЗначения = Тип(Значение);
	//Два способа проверить, что значения является ссылкой:
	
	//1. сделать через перебор вида
	Справочники.ТипВсеСсылки().СодержитТип(ТипЗначения);
	//только вначале надо сделать проверку на неопределно, т.к. есть косяк вида
	//Справочники.ТипВсеСсылки().СодержитТип(тип("неопределено")) = истина
	
	//2. также можно завязаться на
	Метаданные.НайтиПоТипу(ТипЗначения);
Показать
34. tormozit 7136 18.10.21 23:08 Сейчас в теме
(33) Нужны не все типы ссылок, а только тех, которые имеют объекты. Поэтому твои способы не подойдут.
35. Патриот 450 19.10.21 07:08 Сейчас в теме
(34) определив, что значение является ссылкой, можно без попытки выполнить твой код, получения уникального идентификатора.
Но очевидно, перед этим надо исключить перечисления, у которых нет объекта
твой код

Попытка
Пустышка = ЗначениеПоля.УникальныйИдентификатор();
Исключение
Возврат Неопределено;
КонецПопытки;


функия, которую надо слегка допилить, выкинув перечисления, и заменив возвращаемое значение ОбщегоНазначения.МенеджерОбъектаПоСсылке
Функция МенеджерОбъектаПоСсылке(Ссылка) Экспорт
	
	ИмяОбъекта = Ссылка.Метаданные().Имя;
	ТипСсылки = ТипЗнч(Ссылка);
	
	Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат Справочники[ИмяОбъекта];
		
	ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат Документы[ИмяОбъекта];
		
	ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат БизнесПроцессы[ИмяОбъекта];
		
	ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат ПланыВидовХарактеристик[ИмяОбъекта];
		
	ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат ПланыСчетов[ИмяОбъекта];
		
	ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат ПланыВидовРасчета[ИмяОбъекта];
		
	ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат Задачи[ИмяОбъекта];
		
	ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат ПланыОбмена[ИмяОбъекта];
		
	ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
		Возврат Перечисления[ИмяОбъекта];
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

Показать
36. tormozit 7136 19.10.21 08:53 Сейчас в теме
(35) Ну и зачем этим заниматься? Зачем писать в 10 раз больше кода, который к тому же работает в 10 раз дольше?
37. Патриот 450 19.10.21 09:58 Сейчас в теме
(36) я не призывал исправлять данный код. Я увидел твой коммент
 Согласен, что без попытки будет красивее. Также голый вариант без попытки упрощает отладку в случае использования фичи "Остановка по ошибке". Но в представленном мной коде в целом есть и другая попытка, где такой прием не поможет.
что нельзя избавиться здесь от попытки и написал, как это можно сделать, вдруг оно пригодится.
38. tormozit 7136 19.10.21 10:35 Сейчас в теме
(37) Естественно я имел ввиду обращение к другому свойству другой переменной. По сути я писал про общий случай - далеко не всегда оправдано избавляться от попытки.
11. asg.aleks 66 31.10.18 12:22 Сейчас в теме
(7)
ДанныеСтроки - это всегда ДанныеФормыЭлементКоллекции, значит можно еще проще:

		Если ДанныеСтроки.Свойство(ПроверяемоеИмя) Тогда
			ЗначениеПоля = ДанныеСтроки[ПроверяемоеИмя];
			ПутьКДанным = ПроверяемоеИмя;
			Прервать;
		КонецЕсли; 
TreeDogNight; SlavaKron; tormozit; +3 Ответить
13. tormozit 7136 31.10.18 13:18 Сейчас в теме
(11) Откроется значение не ссылочного типа в маленьком окошке по центру экрана с блокированием других окон.
14. asg.aleks 66 31.10.18 14:49 Сейчас в теме
(13)
Это, наверное, все же к (12)... Или я чего-то не понял.
15. tormozit 7136 31.10.18 14:50 Сейчас в теме
(14) Да. Но исправить уже не могу.
16. Cyberhawk 135 31.10.18 15:14 Сейчас в теме
(13) Ну. "Открывашка ячеек таблиц" вроде это и должна делать, не?
17. tormozit 7136 31.10.18 15:28 Сейчас в теме
(16) Лично меня открытие других типов раздражает, т.к. пользы от этого я не вижу. Есть идеи для более точного названия в 3-4 слова?
18. Cyberhawk 135 31.10.18 15:59 Сейчас в теме
(17)
1. Польза для пустых ячеек видится: при открытии ячейки показывать, Нулл это или Неопределено или ПустаяСсылка (и какого типа)
2. "Открывашка ссылок в таблицах форм"?
19. tormozit 7136 31.10.18 17:08 Сейчас в теме
(18) Управляемые формы не поддерживают значение Null. Это не инструмент разработчика, а фича для обычного пользователя. Поэтому Неопределено/ПустаяСсылка ему не интересны и будут только раздражать.
21. Cyberhawk 135 31.10.18 17:21 Сейчас в теме
(19) Мне кажется, что от того, что ничего вообще не будет происходить при нажатии на горячую клавишу, раздражения будет больше
23. tormozit 7136 31.10.18 18:04 Сейчас в теме
(21) Я пробовал. Мне так не показалось. Ты пробовал?
24. Cyberhawk 135 31.10.18 18:21 Сейчас в теме
(23) Нет, поставил мысленный эксперимент. Ведь раз пользователь нажимает что-то, то он ожидает, что это к чему-то приведет. Кому понравится, когда на осознанное нажатие горячей клавиши от программы нет в ответ никакой реакции?
Также отсутствие реакции на горячую клавишу может вызывать раздражение (из-за непонимания) в тех ячейках, где вместо ссылки выведена строка (например, представление ссылки как обход ограничений прав). Если бы твоя открывашка открывала любые значения, пользователь бы сразу понял, что там в ячейке "сидит" строка, а не ссылка. А так он остается один на один с проблемой.
25. tormozit 7136 31.10.18 19:52 Сейчас в теме
(24) Думаю ты преувеличиваешь проблему. Коллеги пользуются этой фичей и все не жаловались на такое.
20. tormozit 7136 31.10.18 17:10 Сейчас в теме
(18)
"Открывашка ссылок в таблицах форм"
в таблица могут отображаться в каждой строке свой объект (строка связана с ссылкой), который тоже может открываться, но это расширение не делает.
22. Cyberhawk 135 31.10.18 17:22 Сейчас в теме
(20) Ну тогда "Открывашка ссылок в ячейках таблиц" или "Открывашка ссылок в ячейках таблиц форм"
26. saandreev 01.11.18 12:04 Сейчас в теме
Есть такой способ (чисто платформенный) - становимся в ячейку, нажимаем ctrl+F (в некоторых случаях alt+F) и ctrl+shift+f4. И не нужны никакие доработки и расширения.
Риник; teploukhov; +2 Ответить
27. tormozit 7136 01.11.18 12:18 Сейчас в теме
(26) Способ через диалог поиска годный. Но поиск может быть выключен и сочетание не везде одинаковое, поэтому требуется 2-3 нажатия сочетаний клавиш, что уже не так удобно.
TreeDogNight; +1 Ответить
28. saandreev 01.11.18 12:40 Сейчас в теме
(27) согласен, тут по потребностям, мне не так часто требуется открывать что-то из ячеек таблицы, поэтому платформенные сочетания меня полностью устраивают
29. TreeDogNight 22 24.10.19 07:11 Сейчас в теме
Очень полезная штуковина! А есть какие-нибудь варианты, чтобы нечто подобное реализовать в обычных формах?
30. tormozit 7136 24.10.19 07:15 Сейчас в теме
(29) Универсально - нет. Придется искать способ добавлять кнопку в каждую форму.
TreeDogNight; +1 Ответить
31. TreeDogNight 22 24.10.19 07:32 Сейчас в теме
(30) Это очень прискорбно...
39. tormozit 7136 16.04.23 17:46 Сейчас в теме
(31) С использованием подсистемы "Инструменты разработчика Tormozit" это стало частично возможно
https://www.hostedredmine.com/issues/956695
https://www.hostedredmine.com/issues/956961
32. Evil Beaver 8107 08.10.21 11:18 Сейчас в теме
Оставьте свое сообщение