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