Как реализовать автоматическое заполнение реквизитов при переходе по навигационной ссылке в 1С

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

При разработке интерфейсов на платформе 1С:Предприятие 8 часто возникает задача обеспечить удобную навигацию пользователя между связанными объектами. Типичный сценарий: пользователь открывает карточку Номенклатура, переходит по ссылке в панели навигации к связанному регистру сведений и нажимает кнопку "Создать". В этот момент система должна «понимать», что новая запись создается именно для той номенклатуры, из которой пришел пользователь. Разберем подробно, как это реализуется стандартными и программными средствами.

Способ 1. Использование свойства «Заполнять из данных заполнения»

Проанализируем самый простой и эффективный способ, который предоставляется платформой «из коробки». В конфигураторе у каждого измерения регистра сведений (или реквизита справочника/документа) есть свойство «Заполнять из данных заполнения». Давайте разберем по шагам, как это работает:

  1. Откроем в конфигураторе нужный нам РегистрСведений.
  2. Перейдем на вкладку «Данные» и выберем измерение (например, Номенклатура).
  3. В палитре свойств найдем флаг «Заполнять из данных заполнения» и установим его.

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

Способ 2. Использование параметра формы «ЗначенияЗаполнения»

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

Рассмотрим пример кода, который можно разместить в команде открытия формы:


&НаКлиенте
Процедура ОткрытьСвязанныйРегистр(Команда)
    
    ПараметрыЗаполнения = Новый Структура;
    ПараметрыЗаполнения.Вставить("Номенклатура", Объект.Ссылка);
    ПараметрыЗаполнения.Вставить("Склад", Объект.ОсновнойСклад);
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗначенияЗаполнения", ПараметрыЗаполнения);
    
    ОткрытьФорму("РегистрСведений.ЦеныНоменклатуры.ФормаСписка", ПараметрыФормы);
    
КонецПроцедуры

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

Способ 3. Обработка заполнения на стороне объекта

Для реализации сложной логики (например, если при заполнении Номенклатура нам нужно автоматически вычислить и подставить цену или единицу измерения) следует использовать обработчик события ОбработкаЗаполнения в модуле менеджера записи регистра или модуля объекта. Выясним причину, почему это важно: этот метод срабатывает всегда, независимо от того, как была открыта форма — интерактивно или программно.

Проанализируем пример кода в модуле менеджера записи регистра сведений:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    
    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Номенклатура") Тогда
        // Прямое заполнение из ссылки
        ЭтотОбъект.Номенклатура = ДанныеЗаполнения;
    ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
        // Заполнение из структуры параметров
        ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
    КонецЕсли;
    
    // Здесь можно добавить дополнительную логику
    Если ЗначениеЗаполнено(ЭтотОбъект.Номенклатура) Тогда
        ЭтотОбъект.ЕдиницаИзмерения = ЭтотОбъект.Номенклатура.ЕдиницаХраненияОстатков;
    КонецЕсли;

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

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

Способ 4. Связи параметров выбора (для справочников-аналогов)

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

Разберем, как это настроить в конфигураторе:

  1. Откройте форму, где выбирается зависимый объект.
  2. У реквизита в поле «Связи параметров выбора» укажите путь к данным ведущего реквизита (например, Объект.Владелец).
  3. Это позволит фильтровать список выбора и автоматически подставлять владельца при создании нового элемента из выпадающего списка.

Особенности работы в интерфейсе «Такси»

Стоит отметить, что в управляемом интерфейсе 1С (Такси) панель навигации формы автоматически связывает объекты по типам данных. Если вы добавили команду перехода в командный интерфейс формы, убедитесь, что в свойствах команды правильно настроен параметр «Связь по типу». Платформа самостоятельно пробросит ссылку на текущий объект в параметры открываемой формы, и если у измерения регистра включено свойство Заполнять из данных заполнения, магия произойдет автоматически без написания единой строки кода.

Важный момент: если вы столкнулись с ситуацией, когда данные не заполняются, проверьте, не переопределен ли отбор в процедуре ПриСозданииНаСервере формы списка регистра. Если программно сбросить отборы, переданные платформой, автоматическое заполнение может перестать работать.

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

← На главную