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

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

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

Разберем ситуацию: почему форма отсутствует в конфигураторе?

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

Выясним причину: это происходит из-за механизма автогенерации. Платформа 1С умеет самостоятельно строить интерфейс «на лету» на основании состава измерений и ресурсов регистра. Если разработчик явно не создал форму, система использует стандартный шаблон.

Рассмотрим, как сделать такую форму видимой для редактирования:

  1. Откройте окно редактирования регистра сведений в конфигураторе.
  2. Перейдите на закладку Формы.
  3. Найдите поле Форма записи. Рядом с ним расположена иконка в виде лупы.
  4. Нажмите на «лупу». Система обнаружит, что объекта не существует, и предложит создать новую форму.
  5. После завершения работы конструктора форма появится в дереве метаданных. Теперь вы можете добавлять на неё новые реквизиты, элементы и прописывать логику в модуле.

Программное обращение к форме записи

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

Посмотрим на пример использования метода ПолучитьФорму. Этот метод позволяет создать объект формы в памяти, изменить его параметры и только потом отобразить пользователю.


// Пример получения формы записи регистра сведений
ФормаЗаписи = ПолучитьФорму("РегистрСведений.ИмяВашегоРегистра.ФормаЗаписи");

// Теперь мы можем обратиться к свойствам формы
ФормаЗаписи.ТолькоПросмотр = Истина;
ФормаЗаписи.Открыть();

Важно помнить, что в управляемом приложении использование ПолучитьФорму считается устаревающим подходом. Рассмотрим современный стандарт — использование метода ОткрытьФорму. Чтобы открыть форму конкретной записи (для редактирования), нам необходимо передать Ключ записи.


// Формируем структуру параметров для открытия конкретной записи
ПараметрыОткрытия = Новый Структура;
// Ключ записи формируется по значениям всех измерений регистра
КлючЗаписи = РегистрыСведений.ИмяВашегоРегистра.СоздатьКлючЗаписи(Новый Структура("Измерение1, Измерение2", Значение1, Значение2));
ПараметрыОткрытия.Вставить("Ключ", КлючЗаписи);

ОткрытьФорму("РегистрСведений.ИмяВашегоРегистра.ФормаЗаписи", ПараметрыОткрытия);

Проблема отсутствия контекстной подсказки (IntelliSense)

Часто программисты жалуются на то, что после написания ФормаЗаписи. в конфигураторе не выпадает список доступных методов и свойств. Проанализируем, почему это происходит.

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

Как с этим работать:

Использование расширений для изменения стандартных форм

Если вы работаете с типовой конфигурацией (например, 1С:ERP или Бухгалтерия) и вам нужно изменить форму записи, которую вы не хотите снимать с поддержки, целесообразно использовать Расширения.

Выясним алгоритм действий:

  1. Создайте новое расширение или используйте существующее.
  2. Добавьте нужный регистр сведений в расширение.
  3. Если форма записи уже существует в основной конфигурации, добавьте её в расширение. Если её нет — создайте её в расширении (система предложит «заимствовать» или создать новую).
  4. Используйте аннотации &Перед, &После или &Вместо в модуле формы расширения для перехвата стандартных событий (например, ПриСозданииНаСервере).

Передача параметров при создании формы

Иногда нужно не просто открыть форму, а передать в неё специфические данные, которые определят её поведение (например, скрыть определенные элементы управления). Для этого используется коллекция Параметры.

Посмотрим на пример кода при вызове:


ПараметрыФормы = Новый Структура("РежимВыбора, ТолькоДляЧтения", Истина, Истина);
ОткрытьФорму("РегистрСведений.ИмяРегистра.ФормаЗаписи", ПараметрыФормы);

А внутри модуля формы, в обработчике ПриСозданииНаСервере, мы анализируем эти данные:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("ТолькоДляЧтения") И Параметры.ТолькоДляЧтения Тогда
        Элементы.ГруппаВажныеДанные.Доступность = Ложь;
    КонецЕсли;
КонецПроцедуры

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

← На главную