При разработке конфигураций на платформе 1С:Предприятие 8.3 часто возникает необходимость связать два справочника, которые не находятся в иерархической связи «владелец — подчиненный». Стандартная панель навигации формы обычно автоматически отображает только подчиненные объекты, однако для удобства пользователя мы можем добавить туда произвольные ссылки. Рассмотрим, как реализовать переход из карточки Контрагенты к списку другого справочника с автоматической фильтрацией по текущему контрагенту.
Это наиболее гибкий способ, который позволяет полностью контролировать процесс открытия формы и передаваемые параметры. Разберем по шагам, как это реализовать. Сначала нам необходимо создать объект метаданных типа Команда.
ОткрытьСвязанныйСправочник.СправочникСсылка.Контрагенты. Это позволит команде «понимать», из какого объекта она вызывается.Панель навигации формы.Перейти. Именно это свойство отвечает за то, что ссылка появится в верхней части формы в стандартном месте для переходов.Теперь проанализируем программный код, который должен располагаться в модуле этой команды. Мы будем использовать обработчик ОбработкаКоманды, чтобы открыть форму списка и передать в нее структуру отбора.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// ПараметрКоманды — это ссылка на текущего Контрагента, из формы которого нажата ссылка
// Формируем структуру отбора по реквизиту "Контрагент" в целевом справочнике
Отбор = Новый Структура("Контрагент", ПараметрКоманды);
// Помещаем отбор в параметры формы
ПараметрыФормы = Новый Структура("Отбор", Отбор);
// Открываем форму списка целевого справочника
ОткрытьФорму("Справочник.МойСвязанныйСправочник.ФормаСписка",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
Важно обратить внимание на параметр ПараметрыВыполненияКоманды.Источник. Передавая его в качестве владельца открываемой формы, мы обеспечиваем корректную работу интерфейса и связей между окнами.
Если задача заключается только в выводе связанных записей по одному реквизиту, мы можем воспользоваться мощным механизмом платформы — Критериями отбора. Этот метод хорош тем, что он не требует написания кода и автоматически поддерживается платформой.
Рассмотрим алгоритм настройки:
СвязиПоКонтрагенту.СправочникСсылка.Контрагенты.Контрагенты, перейдем на вкладку Командный интерфейс и в группе Перейти включим видимость нашего критерия отбора.Этот способ предпочтительнее, если вам нужно вывести сразу несколько связанных списков в одном месте, так как платформа сама оптимизирует запросы к базе данных.
Проанализируем ситуацию: когда мы передаем отбор через простую структуру Отбор (как в первом способе), пользователь может зайти в меню «Настроить список» и случайно или намеренно удалить этот фильтр. Чтобы запретить изменение этого отбора, следует использовать ФиксированныеНастройки.
Выясним, как изменить код команды для использования этого механизма:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Настройки = Новый НастройкиКомпоновкиДанных;
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
// Указываем поле, по которому фильтруем
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ПараметрКоманды;
ЭлементОтбора.Использование = Истину;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки);
ОткрытьФорму("Справочник.МойСвязанныйСправочник.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник);
КонецПроцедуры
Использование ФиксированныеНастройки гарантирует, что в открывшемся списке будут отображаться только данные, относящиеся к конкретному владельцу, и пользователь не сможет увидеть лишнюю информацию через стандартные настройки.
Иногда пользователям неудобно искать ссылки в верхней панели навигации (группа «Перейти»). В таком случае мы можем разместить гиперссылку прямо в теле формы, рядом с основными реквизитами. Разберем, как это сделать через элементы формы типа Декорация. Для ускорения и стандартизации такой настройки можно использовать готовый модуль для программного изменения управляемых форм.
Рассмотрим порядок действий в редакторе формы:
Декорация - Надпись.«Открыть связанные договоры».Нажатие создадим обработчик на клиенте.Код в модуле формы будет выглядеть следующим образом:
&НаКлиенте
Процедура ДекорацияСвязанныеДанныеНажатие(Элемент)
// Используем Объект.Ссылка для получения текущего контрагента
Отбор = Новый Структура("Контрагент", Объект.Ссылка);
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму("Справочник.МойСвязанныйСправочник.ФормаСписка", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
Такой подход делает интерфейс более интуитивно понятным, так как важные переходы находятся прямо перед глазами оператора.
При проектировании интерфейса важно помнить о логическом разделении ссылок. Платформа 1С предлагает три стандартные группы команд:
Если ваша конфигурация находится на поддержке и вы не хотите вносить изменения непосредственно в основную базу, рекомендуется реализовать данную задачу через Расширение конфигурации. Для этого достаточно добавить в расширение целевой справочник и создать в нем команду, привязанную к типу из основной конфигурации. Это позволит сохранить возможность легкого обновления системы, не теряя при этом добавленный функционал. При необходимости кастомизации форм в расширениях без написания кода можно использовать готовое решение для добавления реквизитов и элементов на управляемые формы.
Таким образом, мы проанализировали различные методы добавления гиперссылок: от чисто визуальных элементов на форме до системных команд и критериев отбора. Выбор конкретного метода зависит от требований к безопасности данных (возможность изменения отбора пользователем) и эргономике интерфейса.