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

В этой статье мы разберём все этапы — от подготовки конфигурации до тестирования результата. Вы узнаете, как добавить параметр в управляемую форму и обычную форму, какие инструменты использовать для отладки, и как правильно документировать изменения. Материал будет полезен как начинающим специалистам, так и опытным программистам, которые хотят систематизировать свои знания.

Особое внимание уделим практическим примерам: добавим параметр для фильтрации данных в табличной части, настроим передачу значения между формами и рассмотрим, как избежать распространённых ошибок при работе с ПараметрыСеанса. Все инструкции актуальны для последних версий платформы 1С:Предприятие 8.3.23+.

1. Подготовка: что нужно знать перед добавлением параметра

Прежде чем приступать к изменению формы, важно понять, зачем именно вам нужен новый параметр. Параметры в 1С используются для:

  • 🔹 Передачи данных между формами (например, идентификатор документа или фильтр для списка).
  • 🔹 Управления визуальными элементами (скрытие/отображение кнопок, изменение надписей).
  • 🔹 Хранения временных значений, которые не нужно сохранять в базе (например, промежуточные результаты расчётов).
  • 🔹 Настройки поведения формы в зависимости от контекста (режим просмотра/редактирования, права пользователя).

Также определитесь с типом формы, так как процесс добавления параметров отличается:

  • 📌 Управляемые формы (рекомендуемый стандарт для новых разработок).
  • 📌 Обычные формы (устаревший формат, но ещё встречается в legacy-конфигурациях).
📊 Какой тип форм вы чаще используете в 1С?
Управляемые
Обычные
Оба типа
Не знаю

Если вы работаете с управляемой формой, параметры объявляются в модуле формы и автоматически становятся доступны в клиентском и серверном контекстах. В обычных формах придётся вручную управлять передачей данных между клиентом и сервером.

⚠️ Внимание: Перед изменением форм всегда создавайте резервную копию конфигурации или используйте систему контроля версий. Некоторые параметры могут конфликтовать с существующей логикой, особенно если форма наследуется от базовой конфигурации.

2. Добавление параметра в управляемую форму

Рассмотрим процесс на примере добавления параметра ФильтрПоДате, который будет ограничивать данные в табличной части формы документа. Этот сценарий актуален для отчётов, справочников или документов, где нужно динамически менять отображаемую информацию.

Шаг 1: Объявление параметра в модуле формы

Откройте форму в Конфигураторе (например, форму документа РеализацияТоваровУслуг). Перейдите в модуль формы и добавьте объявление параметра в разделе Перем (переменные):

Перем ФильтрПоДате Тип Дата;

Если параметр должен быть доступен и на сервере, и на клиенте, используйте модификатор Экспорт:

Перем ФильтрПоДате Экспорт;

Шаг 2: Инициализация параметра

В обработчике события ПриСозданииНаСервере задайте начальное значение параметра. Например, установим фильтр на текущую дату:

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ФильтрПоДате = ТекущаяДата();

КонецПроцедуры

Шаг 3: Использование параметра в логике формы

Теперь параметр ФильтрПоДате можно использовать в других обработчиках. Например, отфильтруем данные в табличной части:

Процедура ПриАктивизацииСтрокиТабличнойЧасти(Элемент)

Если Объект.Дата < ФильтрПоДате Тогда

Элемент.Доступность = Ложь;

КонецЕсли;

КонецПроцедуры

Объявлен ли параметр в разделе Перем?|

Задано ли начальное значение в ПриСозданииНаСервере?|

Используется ли параметр в логике формы?|

Протестировано ли поведение при разных значениях параметра?-->

Шаг 4: Передача параметра извне

Чтобы передать значение параметра при открытии формы, используйте метод ОткрытьФорму с указанием параметров:

ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", Новый Структура("ФильтрПоДате", НачалоМесяца(ТекущаяДата())));
⚠️ Внимание: При передаче параметров через ОткрытьФорму убедитесь, что имена параметров в структуре совпадают с именами переменных в модуле формы. В противном случае значение не будет передано.

3. Работа с параметрами в обычных формах

В обычных формах процесс сложнее, так как требуется явная передача данных между клиентом и сервером. Рассмотрим, как добавить параметр РежимПросмотра, который будет определять, доступна ли форма для редактирования.

Шаг 1: Объявление параметра

В модуле формы объявите параметр с модификатором Экспорт:

Перем РежимПросмотра Экспорт;

Шаг 2: Передача параметра при открытии формы

Используйте метод ОткрытьФормуМодально с передачей параметров через структуру:

ПараметрыФормы = Новый Структура();

ПараметрыФормы.Вставить("РежимПросмотра", Истина);

ОткрытьФормуМодально("Справочник.Номенклатура.ФормаСписка", ПараметрыФормы);

Шаг 3: Обработка параметра на клиенте

В обработчике ПриОткрытии получите значение параметра и примените его:

Процедура ПриОткрытии()

Если Параметры.РежимПросмотра Тогда

ЭлементыФормы.КнопкаДобавить.Видимость = Ложь;

ЭлементыФормы.КнопкаИзменить.Видимость = Ложь;

КонецЕсли;

КонецПроцедуры

В обычных формах параметры передаются через коллекцию Параметры, которая доступна в клиентском контексте. Для обмена данными с сервером используйте методы УстановитьПараметр и ПолучитьПараметр.

ПараметрыСеанса.Вставить("ТекущийДокумент", СсылкаНаДокумент);

Это позволит избежать потери данных при закрытии формы.-->

4. Типичные ошибки и как их избежать

При работе с параметрами в 1С разработчики часто сталкиваются с одними и теми же проблемами. Рассмотрим самые распространённые ошибки и способы их решения.

Ошибка Причина Решение
Параметр не передаётся в форму Несовпадение имён параметров в структуре и модуле формы Проверьте регистр и написание имён (например, ФильтрПоДатефильтрподата)
Ошибка "Неопределённый идентификатор" Параметр не объявлен в разделе Перем Добавьте объявление переменной с модификатором Экспорт
Параметр сбрасывается при обновлении формы Значение не сохраняется в ПриСозданииНаСервере Инициализируйте параметр в обработчике ПриСозданииНаСервере, а не в ПриОткрытии
Не работает фильтрация по параметру Параметр не используется в запросе или обработчике событий Проверьте, что параметр подставляется в условия отбора (например, в УстановитьФильтр)

Ещё одна частая проблема — конфликт имён параметров с существующими переменными или методами формы. Например, если вы объявите параметр с именем ЭлементыФормы, это приведёт к ошибке, так как ЭлементыФормы — это встроенная коллекция. Чтобы избежать таких ситуаций:

  • 🔹 Используйте префиксы для параметров (например, п_ФильтрПоДате).
  • 🔹 Проверяйте имена в синтакс-помощнике (Ctrl+Space в Конфигураторе).
  • 🔹 Избегайте зарезервированных слов (Истина, Ложь, Неопределён).
Что делать, если параметр не обновляется при изменении?

Если значение параметра меняется в коде, но не отображается в форме, проверьте:

1. Контекст выполнения: параметр изменён на сервере, но не синхронизирован с клиентом (используйте ОбновитьФорму()).

2. Обработчики событий: возможно, логика перезаписывает значение параметра в другом месте (проверьте ПриИзменении).

3. Кэширование: в управляемых формах иногда помогает вызов Обновить() для элемента, зависящего от параметра.

5. Продвинутые сценарии: динамические параметры и массивы

Иногда стандартных параметров недостаточно — например, когда нужно передавать массив значений или динамически формировать фильтры. Рассмотрим два продвинутых примера.

Пример 1: Передача массива в параметре

Допустим, вам нужно передать в форму список идентификаторов документов для выделения в таблице. Объявите параметр как Массив:

Перем ВыделенныеДокументы Экспорт;

При открытии формы передайте массив:

Параметры = Новый Структура();

Параметры.Вставить("ВыделенныеДокументы", Новый Массив);

Параметры.ВыделенныеДокументы.Добавить(Документ1.Ссылка);

Параметры.ВыделенныеДокументы.Добавить(Документ2.Ссылка);

ОткрытьФорму("Документ.ЗаказПокупателя.ФормаСписка", Параметры);

В форме используйте параметр для пометки строк:

Процедура ПриАктивизацииСтроки(Элемент)

Если ВыделенныеДокументы.Найти(Элемент.ТекущиеДанные.Ссылка) <> Неопределён Тогда

Элемент.ЦветФона = ВебЦвета.Желтый;

КонецЕсли;

КонецПроцедуры

Пример 2: Динамический фильтр с несколькими параметрами

Если фильтр зависит от нескольких условий (например, дата + организация + склад), удобно передавать структуру параметров:

Перем ПараметрыФильтра Экспорт;

При открытии формы:

Фильтр = Новый Структура();

Фильтр.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДата()));

Фильтр.Вставить("Организация", ТекущаяОрганизация());

Фильтр.Вставить("Склад", Constants.ОсновнойСклад.Получить());

ОткрытьФорму("Документ.ПоступлениеТоваров.ФормаСписка", Новый Структура("ПараметрыФильтра", Фильтр));

В форме примените фильтр к таблице:

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ПоступлениеТоваровСсылка КАК Ссылка

|ИЗ

| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров

|ГДЕ

| ПоступлениеТоваров.Дата >= &ДатаНачала

| И ПоступлениеТоваров.Организация = &Организация

| И ПоступлениеТоваров.Склад = &Склад";

Запрос.УстановитьПараметр("ДатаНачала", ПараметрыФильтра.ДатаНачала);

Запрос.УстановитьПараметр("Организация", ПараметрыФильтра.Организация);

Запрос.УстановитьПараметр("Склад", ПараметрыФильтра.Склад);

Результат = Запрос.Выполнить();

Объект.Список = Результат.Выгрузить();

КонецПроцедуры

💡

Использование структур для параметров упрощает поддержку кода и позволяет гибко расширять функционал без изменения сигнатуры методов.

6. Оптимизация и отладка

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

Инструменты отладки

  • 🔧 Точки останова в Конфигураторе (F9): установите их в обработчиках ПриСозданииНаСервере и ПриОткрытии, чтобы проверить значения параметров.
  • 🔧 Вывод в сообщения: используйте Сообщить() для отображения текущих значений:
    Сообщить("Значение ФильтрПоДате: " + ФильтрПоДате);
  • 🔧 Журнал регистрации: включите запись событий формы в Администрирование → Журнал регистрации.

Проверка производительности

Если параметры используются в запросах или циклах, они могут влиять на скорость работы формы. Чтобы оптимизировать код:

  • 📊 Избегайте избыточных вычислений в обработчиках событий (например, не вызывайте ТекущаяДата() внутри цикла).
  • 📊 Для больших массивов данных используйте отложенную загрузку (например, через ПланировщикЗадач).
  • 📊 Если параметр используется только для отображения, передавайте его только на клиент (без Экспорт).

Критическая ошибка: если параметр объявлен с модификатором Экспорт, но не инициализирован в ПриСозданииНаСервере, это может привести к падению формы при обращении к нему из клиентского кода. Всегда задавайте начальное значение, даже если оно Неопределён.

7. Документирование изменений

Добавление параметров — это изменение конфигурации, которое должно быть задокументировано. Это поможет другим разработчикам понять логику работы формы и избежать ошибок при дальнейшей поддержке.

Что включать в документацию

  • 📝 Назначение параметра: краткое описание, для чего он нужен (например, "Фильтр по дате для табличной части").
  • 📝 Тип данных: Дата, Строка, Массив и т.д.
  • 📝 Источник значения: откуда берётся значение (передаётся извне, вычисляется в форме, берётся из настроек пользователя).
  • 📝 Зависимые элементы: какие кнопки, поля или запросы используют этот параметр.

Пример документации в коде

Используйте комментарии в модуле формы:

// Параметр: ФильтрПоДате

// Назначение: Ограничивает отображаемые строки в табличной части по дате.

// Тип: Дата

// Источник: Передаётся при открытии формы или устанавливается в ТекущаяДата() по умолчанию.

// Используется в:

// - ПриАктивизацииСтрокиТабличнойЧасти (скрытие устаревших строк)

// - ПриФормированииОтчёта (фильтрация данных для печати)

Перем ФильтрПоДате Экспорт;

Для командной работы удобно вести журнал изменений в отдельном файле или системе управления версиями (например, Git). Пример записи:

// [2026-05-15] Иванов И.И.

// Добавлен параметр ФильтрПоДате в форму документа РеализацияТоваровУслуг.

// Цель: фильтрация устаревших строк в табличной части.

// Тестирование: проверено на конфигурации УТ 11.5.12.100.

8. Альтернативные подходы: когда параметров недостаточно

Иногда параметры формы не подходят для решения задачи. Рассмотрим альтернативные способы передачи данных:

Подход Когда использовать Пример
ПараметрыСеанса Нужно передать данные между разными формами или сеансами ПараметрыСеанса.Вставить("ТекущийКлиент", Клиент.Ссылка);
ХранилищеЗначений Нужно сохранить данные между запусками 1С Хранилище = Новый ХранилищеЗначений; Хранилище.Вставить("Настройки", МоиНастройки);
Глобальные переменные Данные нужны во многих местах конфигурации (осторожно: может привести к конфликтам!) Перем г_ТекущийПользователь Экспорт;
Реквизиты формы Значение должно сохраняться при закрытии/открытии формы Добавьте реквизит в палитре свойств формы

Например, если вам нужно передать сложную структуру данных между формами, лучше использовать ПараметрыСеанса:

// В первой форме:

ПараметрыСеанса.Вставить("ФильтрОтчёта", МояСтруктураФильтра);

// Во второй форме:

Фильтр = ПараметрыСеанса.Получить("ФильтрОтчёта");

⚠️ Внимание: Злоупотребление глобальными переменными и ПараметрамиСеанса может привести к утечкам памяти и конфликтам в многопользовательском режиме. Используйте их только когда это действительно необходимо.
💡

Параметры формы — самый безопасный способ передачи данных, так как они автоматически очищаются при закрытии формы и не влияют на другие сеансы.

FAQ: Частые вопросы по работе с параметрами в 1С

Можно ли передать в форму параметр типа "ДокументОбъект"?

Да, но лучше передавать ссылку на документ (ДокументСсылка), а не сам объект. Это уменьшит нагрузку на память. Пример:

ОткрытьФорму("Документ.ЗаказПокупателя.ФормаОбъекта",

Новый Структура("СсылкаНаДокумент", Документ.Ссылка));

В форме получите объект по ссылке:

Объект = СсылкаНаДокумент.ПолучитьОбъект();
Как передать параметр в форму из внешней обработки?

Используйте метод ОткрытьФорму с указанием полного имени формы и структуры параметров:

Параметры = Новый Структура("МойПараметр", Значение);

ОткрытьФорму("Документ.МояФорма.ФормаОбъекта", Параметры, ЭтотОбъект);

Если форма не открывается, проверьте права доступа и корректность имени формы в Конфигураторе.

Почему параметр не обновляется при изменении на клиенте?

В управляемых формах изменения параметров на клиенте не синхронизируются с сервером автоматически. Чтобы обновить значение, используйте:

Процедура МойПараметрПриИзменении(Элемент)

ОбновитьФорму(); // Принудительное обновление

КонецПроцедуры

Или передавайте изменения на сервер через ВыполнитьНаСервере().

Как передать параметр в форму отчёта?

Для форм отчётов используйте метод КомпоновщикНастроек.Параметры:

Настройки = Отчёт.КомпоновщикНастроек.ПолучитьНастройки();

Настройки.Параметры.УстановитьЗначениеПараметра("Период", Период);

В схеме компоновки данных объявите параметр с тем же именем.

Можно ли использовать параметры в мобильном клиенте 1С?

Да, но с ограничениями. В мобильном клиенте:

  • 📱 Поддерживаются только примитивные типы (Строка, Число, Дата).
  • 📱 Не рекомендуется передавать большие массивы или объекты.
  • 📱 Для сложных данных используйте ПараметрыСеанса или веб-сервисы.