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