Как в 1С 7.7 открыть произвольную форму выбора справочника из документа?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Особенности интерактивного выбора элементов в 1С 7.7

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

Перехват события начала выбора в модуле формы документа

Для того чтобы подменить стандартную форму выбора справочника на произвольную (например, дополнительную форму списка с особым отбором), используем предопределенную процедуру ПриНачалеВыбораЗначения в модуле формы документа.

Разберем основные параметры этой процедуры:

  1. ИдентЭлемДиалога — идентификатор элемента диалога на форме документа, для которого выполняется выбор.
  2. ФлагСтандОбр — флаг стандартной обработки. Если присвоить этому параметру значение 0, платформа не будет открывать форму выбора по умолчанию.

Проанализируем пример кода, который необходимо разместить в модуле формы документа:


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

Передача контекста и обработка параметров в форме справочника

Рассмотрим, как принять контекст вызывающего документа в форме справочника. При вызове функции ОткрытьФорму первым параметром передается путь к открываемой форме, а вторым — произвольное значение или Контекст формы документа.

В модуле открываемой формы справочника (например, ФормаСпискаДополнительная) в процедуре ПриОткрытии мы можем получить переданный контекст через свойство Форма.Параметр:


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

Возврат выбранного значения в документ

Выясним, как правильно вернуть выбранный элемент справочника обратно в реквизит документа при немодальном открытии формы списка. В модуле формы списка справочника для передачи выделенного элемента применяется метод Форма.ВыполнитьВыбор():


Процедура ПриВыбореСтроки()
    // Передаем текущий выбранный элемент в вызывающую форму
    Форма.ВыполнитьВыбор(ТекущийЭлемент());
КонецПроцедуры

Важные нюансы и частые ошибки

Проанализируем возможные ошибки, с которыми сталкиваются разработчики при реализации этой схемы:

  1. Отказ от сброса флага: Если не установить ФлагСтандОбр = 0, платформа откроет одновременно две формы: вашу дополнительную форму и стандартную форму выбора справочника по умолчанию.
  2. Ошибки в идентификаторах: Убедитесь, что значение в условии ИдентЭлемДиалога = "..." точно совпадает с идентификатором элемента диалога на форме документа.
  3. Использование модального режима: Если требуется приостановить выполнение кода документа до момента завершения выбора пользователем, можно использовать функцию ОткрытьФормуМодально() вместо ОткрытьФорму().
← На главную