Как программно получить навигационную ссылку на список документов с установленным отбором

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает задача сформировать для пользователя оповещение со ссылкой, при переходе по которой откроется список документов, отфильтрованный по конкретным критериям (например, по автору, подразделению или сумме). Это важная часть при построении эффективных интерфейсов, обеспечивающих быстрое взаимодействие пользователя с данными. Начиная с версии платформы 8.3.20, метод ПолучитьНавигационнуюСсылку получил расширение синтаксиса, позволяющее передавать настройки динамического списка. Однако на практике программисты часто сталкиваются с ошибками типизации или тем, что отборы «не подхватываются» формой.

В этой статье мы подробно разберем, как правильно использовать этот механизм, проанализируем типичные ошибки и выясним, почему установленные программно фильтры могут быть невидимы для конечного пользователя.

Разбор типичных ошибок при использовании метода

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


Настройки = Новый НастройкиТаблицыДинамическогоСписка();
Настройки.ФиксированныеНастройки = МоиНастройкиКД;
// Ошибка здесь: первым параметром передается форма
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Документы.Заявка.ПолучитьФорму("ФормаСписка"), Настройки);

Проанализируем причины возникновения ошибок:

  1. Неверный тип первого параметра: Метод ПолучитьНавигационнуюСсылку крайне чувствителен к типу первого аргумента. Если вы передаете объект типа УправляемаяФорма, платформа пытается использовать старый синтаксис (для получения ссылки на объект или его реквизит) и выдает ошибку, так как второй параметр в этом случае должен быть строкой (именем реквизита), а не объектом настроек.
  2. Путаница в объектах настроек: Часто разработчики пытаются передать напрямую НастройкиКомпоновкиДанных. Однако для работы со списками необходимо использовать специальный объект-контейнер — НастройкиТаблицыДинамическогоСписка.
  3. Не те метаданные: Передача менеджера документа (например, Документы.Заявка) также может привести к неудаче. Платформа ожидает именно объект описания метаданных.

Пошаговое решение: правильное формирование ссылки

Рассмотрим правильный алгоритм действий. Для того чтобы ссылка корректно сформировалась и открыла нужный список с отбором, нам необходимо выполнить следующие шаги.

Шаг 1. Подготовка настроек компоновки данных. Мы создаем стандартный объект настроек, к которому привыкли при работе с СКД. Здесь мы определяем поля отбора, виды сравнения и значения. Если логика формирования условий сложная, можно упростить программное создание СКД с помощью специализированных модулей-оберток.


НастройкиКД = Новый НастройкиКомпоновкиДанных;

Отбор = НастройкиКД.Отбор.Elements.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Автор");
Отбор.ПравоеЗначение = ПараметрыСеанса.ТекущийПользователь;
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.Использование = Истина;

Шаг 2. Создание контейнера настроек динамического списка. На этом этапе мы создаем объект НастройкиТаблицыДинамическогоСписка и помещаем наши настройки в свойство ФиксированныеНастройки. Важно понимать: всё, что попадает в фиксированные настройки, будет объединяться с основными настройками списка по правилу И.


НастройкиСписка = Новый НастройкиТаблицыДинамическогоСписка();
НастройкиСписка.ФиксированныеНастройки = НастройкиКД;

Шаг 3. Вызов метода получения ссылки. Теперь вызываем целевой метод, передавая в качестве первого параметра метаданные нужного документа. Выясним важную деталь: такая ссылка всегда будет открывать основную форму списка, заданную в конфигураторе для данного объекта.


МетаданныеДокумента = Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств;
Представление = "Заявки, созданные мной";

НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(МетаданныеДокумента, НастройкиСписка, Представление);

Почему отбор применен, но его не видно в настройках?

Распространенный вопрос пользователей и разработчиков: «Я перешел по ссылке, данные в списке отфильтрованы правильно, но если я нажму кнопку "Настроить список", я не вижу там этого отбора. Почему так происходит?».

Проанализируем поведение платформы 1С. Когда мы используем свойство ФиксированныеНастройки, платформа применяет эти условия «поверх» пользовательских. Фиксированные настройки:

Если ваша задача — сделать отбор «видимым» и редактируемым, вам следует использовать ПользовательскиеНастройки внутри объекта НастройкиТаблицыДинамическогоСписка. Также, в некоторых сценариях бывает полезно реализовать получение из динамического списка отчета СКД с сохранением всех наложенных фильтров для последующего анализа.

Особенности работы на разных версиях платформы

При использовании данного функционала следует учитывать стабильность релизов. Как показывает практика, в ветках 8.3.23 и 8.3.24 встречались ошибки платформы, при которых параметры навигационной ссылки могли игнорироваться в веб-клиенте. В таких случаях разработчикам иногда приходится использовать расширения, чтобы прокачать список и добавить дополнительную информацию или визуальные индикаторы отборов.

Если вы столкнулись с ситуацией, когда код написан верно, но ссылка открывает пустой список или список без фильтрации, проверьте следующее:

  1. Обновите платформу до актуального патча (проблема с десериализацией ссылок активно исправлялась разработчиками 1С в 2024 году).
  2. Убедитесь, что поле, по которому идет отбор, присутствует в основной таблице динамического списка.
  3. Если форма списка сложная, убедитесь, что другие программные механизмы не конфликтуют с инициализацией настроек при открытии по ссылке.

Альтернативный подход: ссылка на команду или обработку

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

В этом случае навигационная ссылка будет вести на команду, а логика фильтрации будет скрыта в коде метода ОбработкаКоманды. Это дает больше гибкости, например, если нужно открыть не основную форму списка, а специальное рабочее место.

Подведем итог: для успешного получения ссылки используйте связку Метаданные + НастройкиТаблицыДинамическогоСписка. Это современный и быстрый способ навигации, который значительно повышает удобство работы пользователей с системой оповещений.

← На главную