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