Как открыть документ из таблицы значений на форме 1С по двойному клику

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

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

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

Выясняем причину проблемы

Проанализируем поведение платформы 1С. Если при нажатии на элемент отображается только текстовая строка с названием, номером и датой документа, это означает, что в данное поле записана не ссылочная информация, а текстовое представление объекта.

Сам реквизит таблицы значений или табличной части на форме при этом имеет тип Строка. Чтобы платформа 1С знала, какую именно форму нужно открыть, тип реквизита должен быть ссылочным (например, ДокументСсылка.ЗаказПокупателя) или составным типом, включающим нужные типы ссылок на документы.

Исправление типа реквизита в конфигураторе и на форме

Разберем по шагам процесс исправления этой ошибки:

  1. Откроем форму обработки в конфигураторе.
  2. Найдем реквизит таблицы (или реквизит объекта формы), в котором хранится ссылка на документ.
  3. Перейдем в свойства реквизита и вместо типа Строка укажем нужный ссылочный тип. Если в этой колонке могут отображаться разные типы документов (например, ЗаказПокупателя и РеализацияТоваровУслуг), необходимо выбрать Составной тип данных и отметить галочками все допустимые ссылки на документы.
  4. Для соответствующего поля ввода в колонке элемента формы убедимся, что включено свойство КнопкаОткрытия (или признак открытия).

Заполнение таблицы значений ссылочными данными в коде 1С

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

Рассмотрим фрагмент кода, где из результата запроса выбирается ссылка на документ регистратор или заказ:


РезультатЗапроса = Запрос.Выполнить(); 
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    НоваяСтрока = ТаблицаФормы.Добавить();
    НоваяСтрока.ДоговорКонтрагента = Выборка.ДоговорКонтрагента;
    
    // Присваиваем напрямую ссылку из выборки запроса
    НоваяСтрока.ЗаказПокупателя = Выборка.ЗаказПокупателя;
    НоваяСтрока.Номенклатура = Выборка.Номенклатура;
    НоваяСтрока.Регистратор = Выборка.Регистратор;
    
    НоваяСтрока.КоличествоНачальныйОстаток = Выборка.КоличествоНачальныйОстаток;
    НоваяСтрока.КоличествоКонечныйОстаток = Выборка.КоличествоКонечныйОстаток;
КонецЦикла;

Если реквизит ЗаказПокупателя в таблице настроен как ДокументСсылка.ЗаказПокупателя или имеет составной тип, при прямом присвоении Выборка.ЗаказПокупателя платформа автоматически отобразит гиперссылку с кнопкой открытия.

Программное открытие документа по двойному клику

Если вам требуется перехватить стандартный выбор строки и настроить собственное поведение (например, открывать документ по особому условию), можно воспользоваться событиями элемента формы ТабличноеПоле или Таблица.

Разберем пример обработки события Выбор (или ПриИзменении/ОбработкаОткрытия) элемента формы:


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

КонецПроцедуры

Метод ПоказатьЗначение() принимает ссылку на объект и открывает его основную форму просмотра или редактирования. Это универсальный способ открытия любых ссылочных типов данных в платформе 1С.

← На главную