Как передать данные из функции в форму при открытии в 1С:Предприятие?

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

Часто в процессе разработки на управляемых формах возникает необходимость выполнить проверку на сервере, получить результат (например, ссылку на документ) и на основании этого результата открыть новую форму, передав в нее полученные данные. Разберем этот процесс подробно по шагам.

Шаг 1: Правильная реализация серверной функции

Для того чтобы функция работала корректно, важно возвращать данные в единообразном формате. Если мы ищем один документ, мы возвращаем Ссылка, если список — Массив. В коде важно избегать логических ошибок в запросе и проверять результат выполнения.


Функция ПолучитьСсылкиНаДокументы(Менеджер) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЗаданиеМенеджера.Ссылка КАК Ссылка
        |ИЗ
        |    Документ.ЗаданиеМенеджера КАК ЗаданиеМенеджера
        |ГДЕ
        |    ЗаданиеМенеджера.Проведен = ИСТИНА
        |    И ЗаданиеМенеджера.Менеджер = &Менеджер
        |    И НАЧАЛОПЕРИОДА(ЗаданиеМенеджера.Дата, ДЕНЬ) = НАЧАЛОПЕРИОДА(&ТекущаяДата, ДЕНЬ)
        |УПОРЯДОЧИТЬ ПО
        |    ЗаданиеМенеджера.НомерРейса УБЫВ";
        
    Запрос.УстановитьПараметр("Менеджер", Менеджер);
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    
    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
        Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");
    КонецЕсли;
    
    Возврат Новый Массив; // Возвращаем пустой массив для единообразия типов
КонецФункции

Шаг 2: Передача данных в процедуру и открытие формы

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

Важно помнить, что Структура — это ассоциативный массив. Вторым параметром мы передаем именно переменную, а не строку в кавычках, иначе форма получит просто текст «Ссылка» вместо объекта.


&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
        МассивСсылок = ПолучитьСсылкиНаДокументы(Объект.Менеджер);
        
        Если МассивСсылок.Количество() > 0 Тогда
            // Создаем структуру параметров
            СтруктураПараметров = Новый Структура("СсылкиНаДокументы", МассивСсылок);
            
            // Открываем форму с передачей параметров
            ОткрытьФорму("Обработка.ОформлениеПродажНовая.Форма.ВыборДокумента", 
                СтруктураПараметров, 
                ЭтаФорма, 
                , 
                , 
                , 
                , 
                РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
        Иначе
            Предупреждение("Документов не обнаружено");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Шаг 3: Как получить данные внутри открываемой формы

Когда форма открыта, переданные нами параметры становятся доступны через свойство Параметры. Рассмотрим, как их извлечь в процедуре ПриСозданииНаСервере открываемой формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("СсылкиНаДокументы") Тогда
        ПолученныйМассив = Параметры.СсылкиНаДокументы;
        // Здесь мы можем использовать полученные данные для создания элементов управления или кнопок
    КонецЕсли;
КонецПроцедуры

Важные рекомендации

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

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

← На главную