Как отключить выпадающий список выбора организации и вернуть стандартную форму в 1С УПП 1.3.147.1?

Программист 1С v8.3 (Обычные формы)
← На главную

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

Понимание свойства "Быстрый выбор"

Для начала давайте разберем, что такое свойство «Быстрый выбор» и для чего оно предназначено в системе 1С. Это свойство объектов метаданных, таких как справочники или перечисления, которое позволяет системе выбирать элементы не из отдельной, полноценной формы выбора, а из компактного выпадающего списка прямо в поле ввода. Такой подход призван повысить удобство и скорость работы, особенно для справочников с небольшим количеством элементов, где нет сложной иерархии или большого объема данных для отбора. В выпадающем списке обычно отображаются только основные поля, такие как наименование или код.

Однако удобство быстрого выбора превращается в препятствие, когда нам требуется:

  1. Применять расширенные фильтры и отборы.
  2. Визуально анализировать данные в форме списка (колонки, сортировка).
  3. Выбирать элементы из очень большого справочника.

В таких случаях нам необходима полноценная форма выбора, с которой мы привыкли работать.

Почему свойство "Быстрый выбор" может быть заблокировано

Мы выясним, почему свойство «Быстрый выбор» может быть заблокировано для редактирования в конфигураторе, как это часто происходит со справочником «Организации». Синтаксис-помощник 1С нам подсказывает, что свойство «Быстрый выбор» является ТолькоЧтение и доступно для изменения только в том случае, если другой ключевой параметр объекта метаданных – «Способ выбора» – установлен в значение «Обоими способами».

Рассмотрим возможные состояния свойства «Способ выбора»:

  1. «Быстрый выбор»: В этом режиме система всегда будет использовать выпадающий список для выбора элементов, и свойство «Быстрый выбор» будет неактивно, так как его значение предопределено.
  2. «Из формы»: В этом случае всегда будет открываться форма выбора, и свойство «Быстрый выбор» также будет неактивно, потому что его использование исключено.
  3. «Обоими способами»: Только при этом значении свойства «Способ выбора» свойство «Быстрый выбор» становится доступным для редактирования. Оно будет определять режим выбора по умолчанию – выпадающий список или форма выбора, но пользователь сможет переключиться между ними, если система это позволяет.

Таким образом, если свойство «Быстрый выбор» для справочника «Организации» заблокировано, скорее всего, его «Способ выбора» установлен в «Быстрый выбор» или «Из формы». Кроме того, существует ещё одна распространенная причина блокировки – это настройки поддержки конфигурации. Если конфигурация находится на поддержке поставщика, а объект «Справочник.Организации» не снят с поддержки или правила поддержки не позволяют его изменять, то все его свойства, включая «Способ выбора» и «Быстрый выбор», будут недоступны для редактирования.

Анализ и стратегии решения проблемы

Мы рассмотрим несколько подходов к решению проблемы с выпадающим списком выбора организации. Эти методы могут быть применены как по отдельности, так и в комбинации, в зависимости от конкретной ситуации и уровня необходимых изменений.

Шаг 1: Проверка свойства "Способ выбора"

Первым делом мы должны проверить, какое значение имеет свойство «Способ выбора» для справочника «Организации». Для этого нам необходимо:

  1. Открыть конфигуратор 1С.
  2. Найти в дереве метаданных ветку «Справочники» и выбрать «Организации».
  3. Открыть свойства справочника.
  4. Найти свойство «Способ выбора» на вкладке «Основные» или «Прочее» (расположение может немного варьироваться в зависимости от версии платформы).

Если значение этого свойства установлено в «Быстрый выбор» или «Из формы», то это напрямую объясняет блокировку свойства «Быстрый выбор». Если же оно установлено в «Обоими способами», то свойство «Быстрый выбор» должно быть доступно для редактирования, и мы можем просто снять с него флажок, чтобы система по умолчанию открывала форму выбора. Однако, как мы уже говорили, часто это свойство также заблокировано.

Шаг 2: Влияние настройки поддержки конфигурации

Если свойства объекта метаданных заблокированы (доступна только возможность просмотра), мы должны проанализировать настройки поддержки конфигурации. Это очень распространенная ситуация для типовых конфигураций, находящихся на поддержке поставщика.

  1. В конфигураторе перейдем в меню «Конфигурация» -> «Поддержка» -> «Настройка поддержки…».
  2. Найдем объект «Справочник.Организации».

Если для этого объекта установлен режим, который запрещает изменения (например, «Объект редактируется с сохранением поддержки», но с ограничениями на свойства), то мы не сможем изменить свойства «Способ выбора» или «Быстрый выбор». В этом случае у нас есть несколько вариантов:

  1. Снять объект с поддержки: Это позволяет нам полностью модифицировать объект, но усложняет процесс обновления конфигурации, так как при каждом обновлении придется вручную объединять изменения. Это решение требует осторожности и глубокого понимания последствий.
  2. Изменить правила поддержки: Если есть возможность, можно изменить правила поддержки таким образом, чтобы разрешить редактирование конкретных свойств справочника, сохраняя при этом общую поддержку. Этот вариант также требует аккуратности.
  3. Использовать другие методы: Если изменение свойств на уровне метаданных невозможно или нежелательно, нам придется применить обходные пути, описанные далее.

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

Шаг 3: Переопределение "Быстрого выбора" на более низких уровнях

Даже если на уровне объекта метаданных свойства заблокированы, мы все еще можем повлиять на поведение выбора, используя принцип переопределения на более низких уровнях. Система 1С позволяет управлять режимом выбора на трех уровнях приоритета: элемент формы -> реквизит объекта -> объект метаданных. Мы рассмотрим, как использовать это.

Переопределение на уровне реквизита объекта

Если свойство «Способ выбора» у справочника «Организации» установлено в «Обоими способами» (что делает «Быстрый выбор» редактируемым), но мы хотим изменить его поведение только для определенного реквизита документа, мы можем это сделать. Например, в документе «Реализация товаров и услуг» есть реквизит «Организация». Мы можем настроить его свойство:

  1. Откроем конфигуратор, найдем документ (например, «РеализацияТоваровУслуг»).
  2. Перейдем на вкладку «Данные» и найдем реквизит «Организация».
  3. Откроем его свойства и найдем свойство «Быстрый выбор».
  4. Установим его в значение «Не использовать».

Это заставит именно этот реквизит всегда открывать форму выбора, даже если для самого справочника «Организации» по умолчанию установлен быстрый выбор.

Переопределение на уровне элемента формы

Этот способ имеет самый высокий приоритет и является наиболее точечным. Мы можем переопределить поведение выбора непосредственно для элемента формы в конкретном документе или отчете. Это очень полезно, когда нам нужно изменить поведение только в одной конкретной форме, не затрагивая другие места использования реквизита.

  1. Откроем форму документа или отчета, где используется поле выбора организации (например, форму документа «РеализацияТоваровУслуг»).
  2. В дереве элементов формы найдем соответствующий элемент, связанный с реквизитом «Организация».
  3. В свойствах этого элемента формы найдем свойство «Быстрый выбор».
  4. Установим его в значение «Не использовать».

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

Шаг 4: Создание и назначение собственной формы выбора

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

  1. Создание новой формы:

    В конфигураторе, для справочника «Организации», мы создадим новую форму списка. Для этого:

    1. Раскроем ветку справочника «Организации».
    2. Правой кнопкой мыши на элементе «Формы» выберем «Добавить» -> «Форма списка».
    3. Назовем ее, например, ФормаВыбораПользовательская.
    4. Разработаем дизайн этой формы, добавим необходимые элементы управления, такие как поля для отбора, кнопки, настроим порядок колонок и т.д. Мы можем скопировать содержимое стандартной формы списка и модифицировать его.
  2. Назначение формы выбора:

    После создания и настройки формы, нам необходимо указать системе, что именно она должна использоваться в качестве основной формы выбора для справочника «Организации»:

    1. Откроем свойства справочника «Организации».
    2. Перейдем на вкладку «Формы».
    3. Для свойства «Основная форма выбора» укажем нашу новую форму ФормаВыбораПользовательская.
  3. Реализация логики в пользовательской форме:

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

    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        // Установим отбор, чтобы видеть только действующие организации
        Список.Отбор.ПометкаУдаления.Установить(Ложь);
        
        // Можем добавить более сложные отборы, например, по виду деятельности
        // Список.Отбор.ВидДеятельности.ВидСравнения = ВидСравнения.Равно;
        // Список.Отбор.ВидДеятельности.Значение = Перечисления.ВидыДеятельности.Производство;
        // Список.Отбор.ВидДеятельности.Использование = Истина;
        
        // Если нужно передать параметры извне
        Если Параметры.Свойство("НачальныйОтбор") Тогда
            // Пример обработки параметра начального отбора
            // Для каждого ЭлементОтбора Из Параметры.НачальныйОтбор Цикл
            //     Список.Отбор[ЭлементОтбора.Ключ].Установить(ЭлементОтбора.Значение);
            // КонецЦикла;
        КонецЕсли;
    КонецПроцедуры
    

Этот метод дает нам полный контроль над поведением выбора и позволяет адаптировать его под самые специфические требования.

Шаг 5: Программное управление списком значений (для выпадающего списка)

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

Использование события "ОбработкаПолученияДанныхВыбора"

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

  1. Откроем конфигуратор.
  2. Найдем справочник «Организации» и откроем его модуль менеджера.
  3. Вставим следующий код:

Процедура ОбработкаПолученияДанныхВыбора(ЭлементОтбора, СтандартнаяОбработка, ДанныеВыбора) Экспорт
    // Отменяем стандартную обработку, чтобы полностью контролировать список
    СтандартнаяОбработка = Ложь;

    // Очищаем стандартный список, если он был сформирован до этого
    ДанныеВыбора.Очистить(); 

    // Мы формируем свой запрос для получения нужных организаций.
    // Например, только не помеченные на удаление и не "Неактивная".
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
               |    Организации.Ссылка КАК Организация
               |ИЗ
               |    Справочник.Организации КАК Организации
               |ГДЕ
               |    Организации.ПометкаУдаления = ЛОЖЬ
               |    И Организации.Наименование <> ""Неактивная""
               |УПОРЯДОЧИТЬ ПО
               |    Организации.Наименование"; // Добавим сортировку для удобства

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

    // Мы также можем добавить дополнительные элементы или значения, не существующие в базе
    // ДанныеВыбора.Добавить(Справочники.Организации.НайтиПоНаименованию("ООО Рога и Копыта"), "Рога и Копыта (дополнительный)");
    // Или даже простой текст
    // ДанныеВыбора.Добавить("Другая организация", "Пользовательский ввод");
КонецПроцедуры

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

Использование событий "НачалоВыбора" или "НачалоВыбораИзСписка" на форме

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

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

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

Этот метод позволяет нам гибко управлять процессом выбора, открывая нужную форму с нужными параметрами, независимо от настроек метаданных.

Шаг 6: Использование параметров выбора и отборов

Для более точного контроля над выбором, даже при использовании стандартных форм выбора, мы можем использовать свойство «ПараметрыВыбора» для элементов формы. Это позволяет нам устанавливать динамические отборы, которые будут применены при открытии стандартной формы выбора.

  1. Откроем форму документа или отчета, где мы работаем с полем «Организация».
  2. В модуле этой формы, например, в обработчике события ПриСозданииНаСервере, мы можем установить параметры выбора для элемента формы, связанного с организацией.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // ...
    // Установим параметры выбора для элемента формы "Организация"
    // Например, покажем только организации, которые не помечены на удаление
    Элементы.Организация.ПараметрыВыбора.Установить("Отбор.ПометкаУдаления", Ложь);
    
    // Мы можем добавить более сложные отборы, например, по пользовательскому свойству "Действует"
    // Или по виду деятельности, если он есть в справочнике
    // Элементы.Организация.ПараметрыВыбора.Установить("Отбор.Действует", Истина);
    // Элементы.Организация.ПараметрыВыбора.Установить("Отбор.ВидДеятельности", Перечисления.ВидыДеятельности.Производство);
    
    // Если нужно отбирать по какому-то свойству, которое не является реквизитом, 
    // но есть в форме выбора (например, виртуальные реквизиты или параметры)
    // Элементы.Организация.ПараметрыВыбора.Установить("НашПользовательскийОтбор", ТекущийПользователь);
    // ...
КонецПроцедуры

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

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

← На главную