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