Как программно открыть форму записи регистра сведений с отбором по одному измерению?

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

Часто при разработке на платформе 1С возникает задача открыть форму записи независимого регистра сведений из модуля формы документа. Сложность заключается в том, что в регистре может быть много измерений, но нам нужно найти и отредактировать конкретную запись, опираясь лишь на одно уникальное значение (например, ссылку на ЗаказПокупателя).

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

Шаг 1: Поиск существующей записи через запрос

Прежде чем открывать форму, нам необходимо понять, существует ли уже запись с нужным нам измерением. Поскольку у нас есть ЗаказПокупателя, мы используем механизм Запрос, чтобы получить КлючЗаписи или убедиться в отсутствии данных.

Для поиска записи выполним следующий код:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Регистр.КлючЗаписи КАК КлючЗаписи
    |ИЗ
    |    РегистрСведений.ДополнительныеРеквизитыНоменклатуры КАК Регистр
    |ГДЕ
    |    Регистр.ЗаказПокупателя = &ЗаказПокупателя";

Запрос.УстановитьПараметр("ЗаказПокупателя", Объект.Ссылка);
Результат = Запрос.Выполнить();

Шаг 2: Выбор метода открытия формы

После выполнения запроса у нас есть два варианта развития событий: запись найдена или запись отсутствует. Разберем каждый из них.

Вариант А: Запись найдена

Если Результат.Пустой() равен Ложь, значит, запись существует. В этом случае мы получаем КлючЗаписи из выборки и передаем его в метод ОткрытьФорму. Это самый надежный способ открыть именно ту строку, которую выбрал пользователь.


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

Вариант Б: Запись не найдена (Создание новой)

Если запись не найдена, нам нужно создать новую. Для этого мы инициализируем МенеджерЗаписи, заполняем его измерения и открываем форму, передав этот менеджер как параметр.


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

Важные нюансы реализации

При работе с регистрами сведений важно учитывать следующее:

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

← На главную