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

29.05.12

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

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

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

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


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

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

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

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

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

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

См. также

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

Работа с интерфейсом Рабочее место Платформа 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    10738    750    elcoan    45    

106

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

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

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

2 стартмани

10.04.2023    9615    151    acces969    31    

118

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

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

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

1 стартмани

05.07.2022    3666    kalyaka    2    

27

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

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

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

3600 руб.

29.04.2022    12080    1    5    

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

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

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

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

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

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


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

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

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

КонецФункции
3. TSSV 1144 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. МимохожийОднако 141 29.05.12 19:22 Сейчас в теме
А комбинация Ctrl-F не подходит?
13. Bassgood 1425 07.06.12 23:39 Сейчас в теме
(6) МимохожийОднако, а чем может помочь Ctrl+F в открытой форме документа? Автор описал способ как перейти к документу в списке через форму документа, а не как его найти непосредственно через открытый список.
18. МимохожийОднако 141 08.06.12 06:40 Сейчас в теме
(13) Я про режим поиска в списке. Там стандартная комбинация поиска подходит. Однако в управляемых формах предусмотрен режим поиска в Истории. Именно поэтому не нужен режим поиска в списке, который был. Для чего ищут объект в списке из формы объекта? приведи пример.
ИМХО.Нет смысла переносить функционал из предыдущего релиза платформы без нужды. Однако я ничуть не умаляю попытку добавить привычный функционал.
20. Bassgood 1425 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 1425 07.06.12 23:46 Сейчас в теме
(11) An-Aleksey, команды используются только в режиме управляемого приложения, так что заморачиваться над тем отрабатывает ли метод "Активизировать()" в режиме обычного приложения или нет в данном случае смысла не имеет.
16. An-Aleksey 64 08.06.12 00:44 Сейчас в теме
(14) Не все конфигурации переведены полностью на управляемое приложение. Особенно касается самописных и сильно нетиповых конфигураций, которые писались изначально на 8.1. В таких случаях может использоваться поэтапный перевод функционала на управляемые формы.
Как правильно замечено, в таких формах не будет функционала команд, однако сами команды легко можно будет вытащить на командные панели.

Возможно и не стоит перегружать общий пример, приведенный автором. Поделился лишь тем, с чем столкнулся при адаптации данного алгоритма в свое приложение.
17. Bassgood 1425 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 174 31.05.12 09:47 Сейчас в теме
Давно этого решения мне не хватало
15. Bassgood 1425 07.06.12 23:49 Сейчас в теме
(0), автору спасибо за приведенный пример, демонстрирующий как можно грамотно воспользоваться возможностями разработки управляемого приложения с внесением в конфигурацию минимум изменений.
21. Stepan_1c 11.06.12 18:52 Сейчас в теме
взял работенку добавить печатную форму на управляемых формах подумав что раз в 8.1 делал то тут то что не сделать... прошло 2 вечера незаметно=) вот за это "Тип параметра команды - ставим флажок "Составной тип" и отмечаем те справочники и документы, в которых мы хотим видеть нашу кнопку." огромное спасибо. =) пошагал дальше осваивать.
22. Bassgood 1425 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 Сейчас в теме
Оставьте свое сообщение