В поисках пропавшей кнопки

29.05.12

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

Не обнаружив кнопку "Найти в списке" в типовых решениях на управляемых формах (БП 3.0, УТ 11) сначала очень удивился, а потом решил ее добавить. Добавить кнопку можно всего за несколько минут во все необходимые документы и справочники, причем при обновлении ничего дополнительно делать не придется - добавляется одна общая команда.

Итак, по пунктам:

  1. Создаем общую команду "НайтиВСписке"
  2. В свойствах команды указываем:
    • Группа - Командная панель формы.Важное
    • Тип параметра команды - ставим флажок "Составной тип" и отмечаем те справочники и документы, в которых мы хотим видеть нашу кнопку.
    • Отображение - Картинка
    • Картинка - выбираем подходящую картинку (в типовой БП 3.0 есть картинка "КнопкаНайтиВСписке")
    • Остальные свойства оставляем без изменений.
  3. В модуль команды помещаем следующий программный код:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    МетаИмя = ВернутьИмя(ПараметрКоманды);
    
    НашлиОткрытую = Ложь;
    
    Окна = ПолучитьОкна();
    Для каждого Окно Из Окна Цикл
    
        Форма = Окно.ПолучитьСодержимое();
        
        Если Форма = Неопределено Тогда
            Продолжить;
        КонецЕсли;    
        
        Если Форма.ИмяФормы = МетаИмя + ".Форма.ФормаСписка" Тогда
            Форма.Элементы.Список.ТекущаяСтрока = ПараметрКоманды;
            Форма.Активизировать();
            НашлиОткрытую = Истина;
        КонецЕсли;
        
    КонецЦикла;
    
    Если Не НашлиОткрытую Тогда
        ОткрытьФорму(МетаИмя + ".ФормаСписка", Новый Структура("ТекущаяСтрока", ПараметрКоманды));  
    КонецЕсли;    
            
КонецПроцедуры


&НаСервере
Функция ВернутьИмя(ПараметрКоманды)

    Возврат ПараметрКоманды.Метаданные().ПолноеИмя();

КонецФункции

Все, кнопка готова - сохраняем, запускаем, пользуемся.

Все очень просто и быстро, но есть один момент. Сейчас наша кнопка появилась и в форме элемента (документа) и в форме списка, что очевидно не имеет смысла. А вот чтобы ее убрать из форм списков, нужно зайти в каждую из форм и выключить соответствующий флажок в командном интерфейсе формы - раздел Командная панель - Важное. В принципе можно этого и не делать - нажатие на кнопку в форме списка не приведет к ошибке, зато не придется проделывать эту операцию при обновлениях. А можно и сделать .... - выбор остается за вами. Хорошего кода!

p.s.
В приведенном коде учтены замечания из комментариев, что позволило его улучшить.

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

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

5000 руб.

14.01.2016    55441    17    23    

43

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    19724    28    6    

44

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    21869    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10989    smielka    37    

105

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

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

27.12.2023    17964    1225    elcoan    53    

125

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    12660    167    acces969    31    

126

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

05.07.2022    7386    kalyaka    6    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mr zafod 23 29.05.12 05:40 Сейчас в теме
+1, но перемудрили

&НаСервере
Функция ВернутьИмя(ПараметрКоманды)

Тип = ТипЗнч(ПараметрКоманды);
МетаТип = Метаданные.НайтиПоТипу(Тип);

Если Метаданные.Справочники.Содержит(МетаТип) Тогда
Префикс = "Справочник.";
ИначеЕсли Метаданные.Документы.Содержит(МетаТип) Тогда
Префикс = "Документ.";
Иначе
Возврат "";
КонецЕсли;

Возврат Префикс + МетаТип.Имя;

КонецФункции


решается на ура

&НаСервере
Функция ВернутьИмя(ПараметрКоманды)

Возврат ПараметрКоманды.Метаданные().ПолноеИмя();

КонецФункции
3. TSSV 1153 29.05.12 10:43 Сейчас в теме
(1) mr zafod, (2) khaoos, Спасибо за ценные замечания! Учел их - доработал код.
2. khaoos 239 29.05.12 06:16 Сейчас в теме
Еще замечание. Форму списка лучше открывать следующим образом:
ОткрытьФорму(ИмяФормыСписка, Новый Структура("ТекущаяСтрока", ПараметрКоманды)),
то есть не использовать обращение к элементам формы, а использовать параметры. И в принципе, не стоит разделять случай, есть ли родительская форма или нет, существующий экземпляр формы списка должен быть найден и активирован, в противном случае открыт новый.
4. zhleonid8 29.05.12 11:11 Сейчас в теме
много таких кнопок надо добавить:) что б работать можно было комфортно бухгвлтерии
5. oberonm 9 29.05.12 16:15 Сейчас в теме
Интересное решение. Спасибо
6. МимохожийОднако 142 29.05.12 19:22 Сейчас в теме
А комбинация Ctrl-F не подходит?
13. Bassgood 1227 07.06.12 23:39 Сейчас в теме
(6) МимохожийОднако, а чем может помочь Ctrl+F в открытой форме документа? Автор описал способ как перейти к документу в списке через форму документа, а не как его найти непосредственно через открытый список.
18. МимохожийОднако 142 08.06.12 06:40 Сейчас в теме
(13) Я про режим поиска в списке. Там стандартная комбинация поиска подходит. Однако в управляемых формах предусмотрен режим поиска в Истории. Именно поэтому не нужен режим поиска в списке, который был. Для чего ищут объект в списке из формы объекта? приведи пример.
ИМХО.Нет смысла переносить функционал из предыдущего релиза платформы без нужды. Однако я ничуть не умаляю попытку добавить привычный функционал.
20. Bassgood 1227 08.06.12 14:31 Сейчас в теме
(18) МимохожийОднако, например открыли форму документа из формы обработки и нам захотелось посмотреть еще какие-либо документы этого вида, которые были оформлены до него (по каким-либо причинам, например просмотреть документы этого вида, оформленные на этого же сотрудника до этого), вместо того, чтобы искать в программе откуда можно открыть список этих документов и производить поиск уже в нем. А история в управляемом приложении, на сколько я помню, отображает историю недавно открытых форм, это немного не то, о чем идет речь.
Acort; TSSV; +2 Ответить
7. пользователь 29.05.12 20:42
Сообщение было скрыто модератором.
...
8. sstar90 30.05.12 07:07 Сейчас в теме
Автору спасибо. Простенько и со вкусом
9. sys1c 30.05.12 13:39 Сейчас в теме
раскажите как поиск по списку еще врубить! в последних версиях УТ 11, вырубили, остался тока гребанный полнотекстовый
10. Фред 30.05.12 14:27 Сейчас в теме
Ведь 3.0 более продвинутая...И в ней , чтоб работать надо добавлять?..))
Да, 1с без работы программистов не оставит!
11. An-Aleksey 64 30.05.12 20:08 Сейчас в теме
ПолучитьОкна()
Возвращаемое значение:
Тип: ОкнаКлиентскогоПриложения.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
Примечание:
В режиме запуска ОбычноеПриложение возвращает Неопределено.


Для большей универсальности можно:
   Окна = ПолучитьОкна();
	
	Если Окна = Неопределено Тогда
		ФормаСписка = ПолучитьФорму(МетаИмя + ".ФормаСписка", Новый Структура("ТекущаяСтрока", ПараметрКоманды));
		Если ФормаСписка.Открыта() Тогда
			ФормаСписка.Элементы.Список.ТекущаяСтрока = ПараметрКоманды;
	        ФормаСписка.Активизировать();
		Иначе			
			ФормаСписка.Открыть();
		КонецЕсли;
		Возврат;
	КонецЕсли;
		
	Для каждого Окно Из Окна Цикл
Показать


Кстати в файловой версии в режиме обычного приложения Активизировать() не отрабатывает.
По ошибке не падает, но и поверх остальных окон не отображает.

Автору однозначно +1 за идею.
14. Bassgood 1227 07.06.12 23:46 Сейчас в теме
(11) An-Aleksey, команды используются только в режиме управляемого приложения, так что заморачиваться над тем отрабатывает ли метод "Активизировать()" в режиме обычного приложения или нет в данном случае смысла не имеет.
16. An-Aleksey 64 08.06.12 00:44 Сейчас в теме
(14) Не все конфигурации переведены полностью на управляемое приложение. Особенно касается самописных и сильно нетиповых конфигураций, которые писались изначально на 8.1. В таких случаях может использоваться поэтапный перевод функционала на управляемые формы.
Как правильно замечено, в таких формах не будет функционала команд, однако сами команды легко можно будет вытащить на командные панели.

Возможно и не стоит перегружать общий пример, приведенный автором. Поделился лишь тем, с чем столкнулся при адаптации данного алгоритма в свое приложение.
17. Bassgood 1227 08.06.12 01:26 Сейчас в теме
(16) An-Aleksey, вытащить команды на командные панели обычных форм? На сколько я знаю такое сделать при редактировании обычной формы нельзя, или я что-то не так понял?
19. An-Aleksey 64 08.06.12 10:09 Сейчас в теме
(17)Все верно, в обычных формах такой фокус не пройдет. Но если в конфигурации включить галку "Использовать управляемые формы в обычном приложении", то можно добавлять управляемые формы и работать с ними, в том числе, в режиме обычного приложения.
Bassgood; TSSV; +2 Ответить
12. free-lancer-2018 211 31.05.12 09:47 Сейчас в теме
Давно этого решения мне не хватало
15. Bassgood 1227 07.06.12 23:49 Сейчас в теме
(0), автору спасибо за приведенный пример, демонстрирующий как можно грамотно воспользоваться возможностями разработки управляемого приложения с внесением в конфигурацию минимум изменений.
21. Stepan_1c 11.06.12 18:52 Сейчас в теме
взял работенку добавить печатную форму на управляемых формах подумав что раз в 8.1 делал то тут то что не сделать... прошло 2 вечера незаметно=) вот за это "Тип параметра команды - ставим флажок "Составной тип" и отмечаем те справочники и документы, в которых мы хотим видеть нашу кнопку." огромное спасибо. =) пошагал дальше осваивать.
22. Bassgood 1227 12.06.12 12:39 Сейчас в теме
(21) Stepan_1c, а печатные формы вообще то можно делать и без вмешательства в конфигурацию =)
23. Stepan_1c 12.06.12 12:59 Сейчас в теме
(22) Zigfridish, у меня нетиповая конфигурация на основе УНФ с управляемыми формами, в которой добавлены документы, для которых не включили эту команду для использования внешних печатных форм. т.е. при назначении внешней обработки не было возможности добавить этот документ в принципе. если в моем случае можно добавить как то еще печатную форму, буду рад услышать.=)
24. commo 22.06.12 12:46 Сейчас в теме
Оставьте свое сообщение