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

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

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

  1. Создаем общую команду «НайтиВСписке»
  2. В свойствах команды указываем:
    • Группа — Командная панель формы.Важное
    • Тип параметра команды — ставим флажок «Составной тип» и отмечаем те справочники и документы, в которых мы хотим видеть нашу кнопку.
    • Отображение — Картинка
    • Картинка — выбираем подходящую картинку (в типовой БП 3.0 есть картинка «КнопкаНайтиВСписке»)
    • Остальные свойства оставляем без изменений.
  3. В модуль команды помещаем следующий программный код:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

МетаИмя = ВернутьИмя(ПараметрКоманды);

НашлиОткрытую = Ложь;

Окна = ПолучитьОкна();
Для каждого Окно Из Окна Цикл

Форма = Окно.ПолучитьСодержимое();

Если Форма = Неопределено Тогда
Продолжить;
КонецЕсли;

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

КонецЦикла;

Если Не НашлиОткрытую Тогда
ОткрытьФорму(МетаИмя + ".ФормаСписка", Новый Структура("ТекущаяСтрока", ПараметрКоманды));
КонецЕсли;

КонецПроцедуры


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

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

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

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

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

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

23 Comments

  1. mr zafod

    +1, но перемудрили

    &НаСервере

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

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

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

    Если Метаданные.Справочники.С

    Reply
  2. khaoos

    Еще замечание. Форму списка лучше открывать следующим образом:

    ОткрытьФорму(ИмяФормыСписка, Новый Структура(«ТекущаяСтрока», ПараметрКоманды)),

    то есть не использовать обращение к элементам формы, а использовать параметры. И в принципе, не стоит разделять случай, есть ли родительская форма или нет, существующий экземпляр формы списка должен быть найден и активирован, в противном случае открыт новый.

    Reply
  3. TSSV

    (1) mr zafod, (2) khaoos, Спасибо за ценные замечания! Учел их — доработал код.

    Reply
  4. zhleonid8

    много таких кнопок надо добавить:) что б работать можно было комфортно бухгвлтерии

    Reply
  5. oberonm

    Интересное решение. Спасибо

    Reply
  6. МимохожийОднако

    А комбинация Ctrl-F не подходит?

    Reply
  7. sstar90

    Автору спасибо. Простенько и со вкусом

    Reply
  8. sys1c

    раскажите как поиск по списку еще врубить! в последних версиях УТ 11, вырубили, остался тока гребанный полнотекстовый

    Reply
  9. Фред

    Ведь 3.0 более продвинутая…И в ней , чтоб работать надо добавлять?..))

    Да, 1с без работы программистов не оставит!

    Reply
  10. An-Aleksey
    ПолучитьОкна()

    Возвращаемое значение:

    Тип: ОкнаКлиентскогоПриложения.

    Доступность:

    Тонкий клиент, веб-клиент, толстый клиент.

    Примечание:

    В режиме запуска ОбычноеПриложение возвращает Неопределено.

    Для большей универсальности можно:

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

    Показать

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

    По ошибке не падает, но и поверх остальных окон не отображает.

    Автору однозначно +1 за идею.

    Reply
  11. free-lancer-2018

    Давно этого решения мне не хватало

    Reply
  12. Bassgood

    (6) МимохожийОднако, а чем может помочь Ctrl+F в открытой форме документа? Автор описал способ как перейти к документу в списке через форму документа, а не как его найти непосредственно через открытый список.

    Reply
  13. Bassgood

    (11) An-Aleksey, команды используются только в режиме управляемого приложения, так что заморачиваться над тем отрабатывает ли метод «Активизировать()» в режиме обычного приложения или нет в данном случае смысла не имеет.

    Reply
  14. Bassgood

    (0), автору спасибо за приведенный пример, демонстрирующий как можно грамотно воспользоваться возможностями разработки управляемого приложения с внесением в конфигурацию минимум изменений.

    Reply
  15. An-Aleksey

    (14) Не все конфигурации переведены полностью на управляемое приложение. Особенно касается самописных и сильно нетиповых конфигураций, которые писались изначально на 8.1. В таких случаях может использоваться поэтапный перевод функционала на управляемые формы.

    Как правильно замечено, в таких формах не будет функционала команд, однако сами команды легко можно будет вытащить на командные панели.

    Возможно и не стоит перегружать общий пример, приведенный автором. Поделился лишь тем, с чем столкнулся при адаптации данного алгоритма в свое приложение.

    Reply
  16. Bassgood

    (16) An-Aleksey, вытащить команды на командные панели обычных форм? На сколько я знаю такое сделать при редактировании обычной формы нельзя, или я что-то не так понял?

    Reply
  17. МимохожийОднако

    (13) Я про режим поиска в списке. Там стандартная комбинация поиска подходит. Однако в управляемых формах предусмотрен режим поиска в Истории. Именно поэтому не нужен режим поиска в списке, который был. Для чего ищут объект в списке из формы объекта? приведи пример.

    ИМХО.Нет смысла переносить функционал из предыдущего релиза платформы без нужды. Однако я ничуть не умаляю попытку добавить привычный функционал.

    Reply
  18. An-Aleksey

    (17)Все верно, в обычных формах такой фокус не пройдет. Но если в конфигурации включить галку «Использовать управляемые формы в обычном приложении», то можно добавлять управляемые формы и работать с ними, в том числе, в режиме обычного приложения.

    Reply
  19. Bassgood

    (18) МимохожийОднако, например открыли форму документа из формы обработки и нам захотелось посмотреть еще какие-либо документы этого вида, которые были оформлены до него (по каким-либо причинам, например просмотреть документы этого вида, оформленные на этого же сотрудника до этого), вместо того, чтобы искать в программе откуда можно открыть список этих документов и производить поиск уже в нем. А история в управляемом приложении, на сколько я помню, отображает историю недавно открытых форм, это немного не то, о чем идет речь.

    Reply
  20. Stepan_1c

    взял работенку добавить печатную форму на управляемых формах подумав что раз в 8.1 делал то тут то что не сделать… прошло 2 вечера незаметно=) вот за это «Тип параметра команды — ставим флажок «Составной тип» и отмечаем те справочники и документы, в которых мы хотим видеть нашу кнопку.» огромное спасибо. =) пошагал дальше осваивать.

    Reply
  21. Bassgood

    (21) Stepan_1c, а печатные формы вообще то можно делать и без вмешательства в конфигурацию =)

    Reply
  22. Stepan_1c

    (22) Zigfridish, у меня нетиповая конфигурация на основе УНФ с управляемыми формами, в которой добавлены документы, для которых не включили эту команду для использования внешних печатных форм. т.е. при назначении внешней обработки не было возможности добавить этот документ в принципе. если в моем случае можно добавить как то еще печатную форму, буду рад услышать.=)

    Reply
  23. commo

    спасибо за решение

    Reply

Leave a Comment

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