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

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

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

Анализ проблемы: почему настройки списка не открываются

Когда мы работаем в конфигураторе внутри расширения, мы часто сталкиваемся с тем, что стандартные свойства объекта, такие как Настройка списка или Основная таблица, становятся недоступными для редактирования или кнопка открытия просто не реагирует. Это связано с механизмом заимствования объектов 1С. Если форма заимствована из основной конфигурации, платформа ограничивает возможность изменения структуры метаданных в режиме расширения, чтобы сохранить целостность и обеспечить корректное обновление основной конфигурации.

Если вы пытаетесь перенастроить список с ПриобретениеТоваровУслуг на ЗаказКлиента, но конфигуратор блокирует доступ к настройкам, значит, механизм расширений защищает «оригинальную» логику объекта от прямого вмешательства в свойства реквизита.

Вариант решения №1: Работа с внешней обработкой

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

  1. Выгрузите объект из расширения во внешний файл.
  2. Откройте этот файл в режиме Конфигуратора как внешнюю обработку.
  3. В свойствах формы выберите нужный динамический список.
  4. В поле Основная таблица укажите нужный объект (например, Документ.ЗаказКлиента).
  5. Сохраните изменения.

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

Вариант решения №2: Программное переопределение (рекомендуемый метод)

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

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


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

Важные советы при реализации

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

← На главную