Как передать значение из табличной части документа в форму обработки по горячей клавише?

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

Разберем ситуацию, когда пользователю нужно по выбранной строке в табличной части документа найти цены поставщиков в специальной обработке. Чтобы не заставлять менеджера вручную копировать артикул и вставлять его в строку поиска, мы автоматизируем процесс. Настроим систему так, чтобы по нажатию горячей клавиши открывалась нужная обработка, а поиск запускался автоматически по данным текущей выделенной строки.

Создание команды и получение данных строки

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

Для получения данных на клиенте используется свойство ТекущиеДанные таблицы формы. Обязательно добавим проверку на заполненность, так как если таблица пуста, система вернет Неопределено, что приведет к ошибке при обращении к реквизитам.


&НаКлиенте
Процедура ОткрытьПоискПоПрайсам(Команда)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    
    Если ТекущиеДанные <> Неопределено Тогда
        // Подготовка параметров и открытие формы
    КонецЕсли;
КонецПроцедуры

Передача параметра и открытие формы

Теперь подготовим параметры для передачи. Выясним, как правильно отправить данные. Для этого создадим объект Структура, куда поместим наш артикул (или, что еще надежнее, саму ссылку на номенклатуру). Затем используем метод ОткрытьФорму().


&НаКлиенте
Процедура ОткрытьПоискПоПрайсам(Команда)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    
    Если ТекущиеДанные <> Неопределено Тогда
        ПараметрыОткрытия = Новый Структура;
        ПараметрыОткрытия.Вставить("Артикул", ТекущиеДанные.Артикул);
        
        ОткрытьФорму("Обработка.ПоискПоПрайсам.Форма", ПараметрыОткрытия);
    КонецЕсли;
КонецПроцедуры

Прием параметра в форме обработки

Проанализируем, как принять переданные данные в самой обработке, чтобы поиск запустился автоматически. Это действие выполняется в стандартном обработчике формы обработки ПриСозданииНаСервере. Мы прочитаем переданное значение из коллекции Параметры.


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

Альтернативные и более удобные варианты реализации

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

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