Первый вариант:
Используем прилагаемый файл конфигурации.
Останится отредактировать только параметр Тип параметра команды у команды. Как сделать, описано ниже.
Второй вариант:
1) Создаем команду с именем (например): НайтиВСписке
2) Далее настройка параметров команды
Параметр Группа
Устанавливаем значение Командная панель формы.Важное
Параметр Тип параметра команды
Нажимаем кнопку выбора.
В открывшемся окне раскрываем все папки кроме «ПеречислениеСсылка» и «ТочкаМаршрутаБизнессПроцессаСсылка».
Нажимаем комбнацию «Ctrl + A». Нажимаем «Пробел». Должны появится флажки у выделенных объектов.
Нажимаем ОК.
Параметр Картинка
Так как в режиме управляемого приложения установить стандартную картинку «Найти в списке» не даст конфигуратор, нам необходимо перевести конфигурацию в «Обычное приложение».
Переходим в корневой узел конфигурации.
Открываем свойства.
Находим параметр «Основной режим запуска».
Меняем его на «обычное приложение».
Теперь можно выбрать для нашей команды стандартную картинку «Найти в списке»
3) Добавляем код для нашей команды
&НаСервере
Функция ПолучитьДанныеМенеджераНаСервере(Ссылка)
Менеджер = Новый Структура();
Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
Менеджер.Вставить(«ТипОбъекта», «Справочник»);
ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
Менеджер.Вставить(«ТипОбъекта», «Документ»);
ИначеЕсли ПланывидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
Менеджер.Вставить(«ТипОбъекта», «ПланВидовХарактеристик»);
ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
Менеджер.Вставить(«ТипОбъекта», «Задача»);
ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда
Менеджер.Вставить(«ТипОбъекта», «БизнесПроцесс»);
КонецЕсли;
Менеджер.Вставить(«ИмяМенеджера», Ссылка.Метаданные().Имя);
Менеджер.Вставить(«ИмяФормыСписка», Ссылка.Метаданные().ОсновнаяФормаСписка.ПолноеИмя());
Возврат Менеджер;
КонецФункции
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Перем ТипОбъекта;
//Разрешить использовать не основные формы списка объект для позиционирования
РазрешитьИспользоватьНеОсновныеФормыСписка = Истина;
//Заменять идентифицированную форму списка на основную форму списка.
//При значении Истина, рекомендую флаг РазрешитьИспользоватьНеОсновныеФормыСписка установить в Ложь;
ЗаменятьОткрытуюФормуНовой = Ложь;
//—————————————————————————
ДанныеМенеджера = ПолучитьДанныеМенеджераНаСервере(ПараметрКоманды);
Если ДанныеМенеджера.Свойство(«ТипОбъекта», ТипОбъекта) <> Неопределено Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить(«ТекущаяСтрока», ПараметрКоманды);
ИмяФормы = «»+ТипОбъекта+«.»+ДанныеМенеджера.ИмяМенеджера+«.ФормаСписка»;
ИмяОбъекта = «»+ТипОбъекта+«.»+ДанныеМенеджера.ИмяМенеджера;
ИмяФормыВыбора = «»+ТипОбъекта+«.»+ДанныеМенеджера.ИмяМенеджера+«.ФормаВыбора»;
ИмяФормыСписка = ДанныеМенеджера.ИмяФормыСписка;
Если ИмяФормы = ПараметрыВыполненияКоманды.Источник.ИмяФормы Тогда
Возврат;
ИначеЕсли ПараметрыВыполненияКоманды.Источник.ИмяФормы = ИмяФормыВыбора Тогда
Возврат;
КонецЕсли;
Окна = ПолучитьОкна();
Для Н = 0 По Окна.Количество() — 1 Цикл
ФормаОкна = Окна[н].ПолучитьСодержимое();
Если ФормаОкна = Неопределено Тогда
Продолжить;
ИначеЕсли ФормаОкна.ИмяФормы = ИмяФормыСписка Тогда
//Нашли основную форму списка
ОсновнаяФормаСписка = ФормаОкна;
НашеОкно = Окна[н];
ФормаНашегоОкна = ФормаОкна;
Прервать;
ИначеЕсли РазрешитьИспользоватьНеОсновныеФормыСписка
И Найти(ФормаОкна.ИмяФормы, ИмяОбъекта) И Найти(НРег(ФормаОкна.ИмяФормы), «формасписка») Тогда
//Нашли форму списка нашего объекта, но не основную
ИмяФормы = ФормаОкна.ИмяФормы;
НашеОкно = Окна[н];
ФормаНашегоОкна = ФормаОкна;
КонецЕсли;
КонецЦикла;
Если НашеОкно <> Неопределено Тогда
Если ЗаменятьОткрытуюФормуНовой Тогда
ОткрытьФорму(ИмяФормы, ПараметрыФормы, , Ложь, НашеОкно);
Иначе
Для Каждого Элемент Из ФормаНашегоОкна.Элементы Цикл
Если ТипЗнч(Элемент) = Тип(«ТаблицаФормы») Тогда
Элемент.ТекущаяСтрока = ПараметрКоманды;
КонецЕсли;
КонецЦикла;
НашеОкно.Активизировать();
КонецЕсли;
Иначе
ОткрытьФорму(ИмяФормы, ПараметрыФормы, , Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Вот собственно и все.
Флаг РазрешитьИспользоватьНеОсновныеФормыСписка определяет разрешено ли использовать для позиционирования искомого элемента формы объекта, содержащие в имени текст «ФормаСписка».
А нахрена?! Для примера, документ «Заказ покупателя» в УТ11 имеет две формы списка «ФормаСписка» и «ФормаСпискаДокументов». Основной является «ФормаСписка», однако из интерфейса открывается «ФормаСпискаДокументов».
Для того, чтобы при использовании команды «Найти в списке», при открытой форме «ФормаСпискаДокументов» не открывалась форма «ФормаСписка», а использовалась форма «ФормаСпискаДокументов», была написан этот код.
Флаг ЗаменятьОткрытуюФормуНовой определяет, будет ли заменяться уже открытая форма новой.
Есть некоторые особенности:
- Данная команда будет появлять во всех формах. Даже там где она не нужна (форма списка, форма выбора).
- Даже если у вас уже открыта форма списка искомого элемента, открытая через диалог, будет открыта новая форма списка.
Я не понял почему это происходи. Если кто найдет причину, отпишите. Утранил. - Как видно из кода, искомое значение пересылается во все списки формы списка. Решение не совсем корректное с точки зрения разработки, но зато универсальное. Верно только для уже открытых форм.
Алгоритм позволяющий добавить такую привычную и крайне необходимую возможность для управляемого приложения, как команда «найти в списке». Минимальное изменение конфигурации — Только добавление новой команды.
Перейти к публикации
Молодец.
Добавлю от себя код функции Функция ПолучитьТипОбъектаМетаданных(Ссылка) можно сократить из параметров команды можно достучатся до названия объекта
Добавлю: можно сделать всё за один вызов, вытащить все нужные сведения из метаданных и вернуть их структурой. Совершенно незачем дёргать сервер столько раз. Кроме того, правильнее было бы «на сервере без контекста».
(2) на сервере без контекста — не работает в модуле общей команды. Наверное, потому что, там контекста нет.
Приведенный код не работает, если основные формы выбора и списка не определены и генерируются по умолчанию.
Проще наверное как-то так будет (конечно не идеально — есть простор для фантазии)
Показать
Продолжение
Показать
Полезная штука. Плюсую.
Отличная штука.
Команда не появляется в форме группы справочников.
Есть нюанс. Если в форме списка у пользователя заданы ограничения, например, по периоду, то код не сработает, если искомый объект будет попадать под этим ограничения.