Как в 1С 7.7 передать параметры при открытии формы документа?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Почему не работает передача через глобальные переменные сразу после ОткрытьФорму

Рассмотрим типовую ошибку, с которой сталкиваются начинающие разработчики:


Процедура ПоказанияИПУ()
    Гл_Жилье = СписокКвартир.Элемент;
    Гл_АвтоФормирование = 1;
    ОткрытьФорму("Документ.РасчетПоИндивидуальнымСчетчикам");
    Гл_АвтоФормирование = 0;
КонецПроцедуры

Проанализируем причину некорректной работы такого фрагмента. Метод ОткрытьФорму в платформе 1С 7.7 работает в немодальном режиме. Это означает, что после вызова команды система инициирует создание окна и сразу же продолжает выполнение текущего модуля, не дожидаясь завершения процедур инициализации открываемого документа. Строка Гл_АвтоФормирование = 0 выполняется мгновенно, и к моменту, когда в открываемом документе начнут отрабатывать события ВводНового или ПриОткрытии, глобальная переменная уже будет сброшена в ноль.

Штатный способ: передача параметров через СписокЗначений

Наиболее надежный и правильный способ передачи любых данных при открытии формы — использование второго параметра процедуры ОткрытьФорму. В качестве контейнера для передачи нескольких значений используется объект СписокЗначений.

Разберем реализацию по шагам.

  1. Формирование параметров в вызывающей форме.

    В исходной процедуре создаем объект СписокЗначений, заполняем его нужными данными и передаем во втором параметре метода ОткрытьФорму:

    
    Процедура ПоказанияИПУ()
        ПараметрыОткрытия = СоздатьОбъект("СписокЗначений");
        ПараметрыОткрытия.Установить("Жилье", СписокКвартир.Элемент);
        ПараметрыОткрытия.Установить("АвтоФормирование", 1);
        
        ОткрытьФорму("Документ.РасчетПоИндивидуальнымСчетчикам", ПараметрыОткрытия);
    КонецПроцедуры
    
  2. Прием и обработка параметров в открываемом документе.

    В модуле формы открываемого документа переданный объект становится доступен через встроенный атрибут Форма.Параметр. Считывать его рекомендуется в предопределенной процедуре ПриОткрытии или ВводНового:

    
    Процедура ПриОткрытии()
        Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" Тогда
            ВыбЖилье = Форма.Параметр.Получить("Жилье");
            АвтоФормирование = Форма.Параметр.Получить("АвтоФормирование");
            
            Если АвтоФормирование = 1 Тогда
                // Вызываем внутреннюю процедуру заполнения табличной части
                ЗаполнитьСчетчики(ВыбЖилье);
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    

Особенности и нюансы работы с параметрами формы в 1С 7.7

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

  1. Проверка типа переданного параметра: если форма может открываться интерактивно пользователем напрямую из журнала или меню, Форма.Параметр не инициализируется. Чтобы избежать ошибок выполнения, всегда проверяйте тип через ТипЗначенияСтр(Форма.Параметр) или функцию ПустоеЗначение(Форма.Параметр).
  2. Порядок вызова предопределенных событий: при программном создании нового документа сначала выполняется процедура ВводНового(ПризнакКопирования), а затем ПриОткрытии(). Значение Форма.Параметр доступно и неизменно в обоих обработчиках.
  3. Повторное открытие: если форма документа уже открыта на рабочем столе пользователя, немодальный вызов ОткрытьФорму просто активизирует существующее окно, не вызывая повторно события ПриОткрытии и игнорируя новые параметры.
  4. Модальный режим: если требуется дождаться закрытия окна и получить измененные данные обратно, используйте ОткрытьФормуМодально("Документ.РасчетПоИндивидуальнымСчетчикам", ПараметрыОткрытия). При этом значения внутри переданного СписокЗначений могут быть изменены открытой формой и сразу же прочитаны в исходной процедуре.
← На главную