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