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