gifts2017

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

Опубликовал Сергей (TSSV) в раздел Программирование - Практика программирования

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

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

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


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

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

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

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Roman Biblbox (mr zafod) 29.05.12 05:40
+1, но перемудрили

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

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

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

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

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


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

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

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

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


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


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

Автору однозначно +1 за идею.
12. Серж Иванов (adminfo2002) 31.05.12 09:47
Давно этого решения мне не хватало
13. Zigfridish (Bassgood) 07.06.12 23:39
(6) МимохожийОднако, а чем может помочь Ctrl+F в открытой форме документа? Автор описал способ как перейти к документу в списке через форму документа, а не как его найти непосредственно через открытый список.
14. Zigfridish (Bassgood) 07.06.12 23:46
(11) An-Aleksey, команды используются только в режиме управляемого приложения, так что заморачиваться над тем отрабатывает ли метод "Активизировать()" в режиме обычного приложения или нет в данном случае смысла не имеет.
15. Zigfridish (Bassgood) 07.06.12 23:49
(0), автору спасибо за приведенный пример, демонстрирующий как можно грамотно воспользоваться возможностями разработки управляемого приложения с внесением в конфигурацию минимум изменений.
16. Алексей Ан (An-Aleksey) 08.06.12 00:44
(14) Не все конфигурации переведены полностью на управляемое приложение. Особенно касается самописных и сильно нетиповых конфигураций, которые писались изначально на 8.1. В таких случаях может использоваться поэтапный перевод функционала на управляемые формы.
Как правильно замечено, в таких формах не будет функционала команд, однако сами команды легко можно будет вытащить на командные панели.

Возможно и не стоит перегружать общий пример, приведенный автором. Поделился лишь тем, с чем столкнулся при адаптации данного алгоритма в свое приложение.
17. Zigfridish (Bassgood) 08.06.12 01:26
(16) An-Aleksey, вытащить команды на командные панели обычных форм? На сколько я знаю такое сделать при редактировании обычной формы нельзя, или я что-то не так понял?
18. Александр (МимохожийОднако) 08.06.12 06:40
(13) Я про режим поиска в списке. Там стандартная комбинация поиска подходит. Однако в управляемых формах предусмотрен режим поиска в Истории. Именно поэтому не нужен режим поиска в списке, который был. Для чего ищут объект в списке из формы объекта? приведи пример.
ИМХО.Нет смысла переносить функционал из предыдущего релиза платформы без нужды. Однако я ничуть не умаляю попытку добавить привычный функционал.
19. Алексей Ан (An-Aleksey) 08.06.12 10:09
(17)Все верно, в обычных формах такой фокус не пройдет. Но если в конфигурации включить галку "Использовать управляемые формы в обычном приложении", то можно добавлять управляемые формы и работать с ними, в том числе, в режиме обычного приложения.
Bassgood; TSSV; +2 Ответить
20. Zigfridish (Bassgood) 08.06.12 14:31
(18) МимохожийОднако, например открыли форму документа из формы обработки и нам захотелось посмотреть еще какие-либо документы этого вида, которые были оформлены до него (по каким-либо причинам, например просмотреть документы этого вида, оформленные на этого же сотрудника до этого), вместо того, чтобы искать в программе откуда можно открыть список этих документов и производить поиск уже в нем. А история в управляемом приложении, на сколько я помню, отображает историю недавно открытых форм, это немного не то, о чем идет речь.
Acort; TSSV; +2 Ответить
21. Stepan Shipitsyn (Stepan_1c) 11.06.12 18:52
взял работенку добавить печатную форму на управляемых формах подумав что раз в 8.1 делал то тут то что не сделать... прошло 2 вечера незаметно=) вот за это "Тип параметра команды - ставим флажок "Составной тип" и отмечаем те справочники и документы, в которых мы хотим видеть нашу кнопку." огромное спасибо. =) пошагал дальше осваивать.
22. Zigfridish (Bassgood) 12.06.12 12:39
(21) Stepan_1c, а печатные формы вообще то можно делать и без вмешательства в конфигурацию =)
23. Stepan Shipitsyn (Stepan_1c) 12.06.12 12:59
(22) Zigfridish, у меня нетиповая конфигурация на основе УНФ с управляемыми формами, в которой добавлены документы, для которых не включили эту команду для использования внешних печатных форм. т.е. при назначении внешней обработки не было возможности добавить этот документ в принципе. если в моем случае можно добавить как то еще печатную форму, буду рад услышать.=)
24. Алексей Аборин (commo) 22.06.12 12:46
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа