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