1С 8.5/8.3 Программное открытие форм регистра сведений
Данные > Примеры кода 1С > 1С 8.3 Регистры сведений
Перейти в раздел примеры кода 1С 8.3:

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