Почему в расширении не отображается табличная часть на форме и как это исправить

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

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

Проблема программного переопределения формы (ОбработкаПолученияФормы)

Рассмотрим наиболее неочевидную, но часто встречающуюся причину. В современных типовых решениях (таких как ERP, УТ 11 или КА) разработчики часто используют механизм управления формами через модуль менеджера. Если в модуле менеджера документа переопределена процедура ОбработкаПолученияФормы, система может игнорировать ту форму, которую вы добавили в расширение как основную.

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

Разберем, как это исправить:

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

Пример кода для перехвата управления формой:


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

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

Синхронизация путей к данным в дереве элементов

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

Рассмотрим шаги по восстановлению связи:

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

Важно: Если вы видите, что пути подсвечены красным или пусты, значит, связь потеряна. Перепривяжите их вручную, выбрав соответствующие реквизиты из выпадающего списка.

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

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

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

Настройка прав доступа (Роли в расширении)

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

Алгоритм действий для настройки прав:

  1. В дереве расширения перейдем в ветку Общие -> Роли.
  2. Создадим новую роль, например, Расш1_ОсновнаяРоль.
  3. В окне редактирования роли найдем наш документ и добавленную табличную часть.
  4. Установим права Чтение и Просмотр для табличной части и всех её новых реквизитов (например, ПроцентКомиссии).
  5. Для самого документа в этой роли должны быть установлены права как минимум на просмотр.
  6. В режиме «Предприятие» зайдем в профили групп доступа и добавим созданную роль пользователям или создадим новый профиль.

Без этого действия колонка ПроцентКомиссии просто не отрисуется на форме, так как у системы не будет прав на её отображение.

Реализация логики пересчета в расширении

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

Рассмотрим по шагам создание обработчика:

  1. В редакторе формы выберем поле ввода ТоварыПроцентКомиссии.
  2. В свойствах нажмем на лупу рядом с событием ПриИзменении.
  3. Система предложит создать обработчик. Выберем создание на клиенте.

В модуле формы расширения напишем следующий код:


&НаКлиенте
Процедура Расш1_ТоварыПроцентКомиссииПриИзменении(Элемент)
    
    // Получаем текущую строку таблицы
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    
    Если ТекущаяСтрока <> Неопределено Тогда
        // Вызываем процедуру расчета
        РассчитатьВознаграждениеНаСтроке(ТекущаяСтрока);
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Процедура РассчитатьВознаграждениеНаСтроке(СтрокаТаблицы)
    
    // Логика: Вознаграждение = СуммаПродажи * (ПроцентКомиссии / 100)
    СтрокаТаблицы.Вознаграждение = СтрокаТаблицы.СуммаПродажи * (СтрокаТаблицы.ПроцентКомиссии / 100);
    
КонецПроцедуры

Если в типовой конфигурации уже существует процедура расчета строки, лучше не дублировать код, а подключиться к ней с помощью аннотации &После. Это позволит сохранить типовую логику (например, расчет НДС или скидок) и дополнить её своим расчетом.


&После("РассчитатьСуммуТабличнойЧасти")
Процедура Расш1_РассчитатьСуммуТабличнойЧасти(СтрокаТаблицы)
    // Эта процедура выполнится сразу после типового расчета
    СтрокаТаблицы.Вознаграждение = СтрокаТаблицы.СуммаПродажи * (СтрокаТаблицы.ПроцентКомиссии / 100);
КонецПроцедуры

Итоги и рекомендации

Мы проанализировали основные причины, по которым табличные части могут не отображаться в расширении. Чаще всего проблема кроется в программном выборе формы через ОбработкаПолученияФормы или в отсутствии прав доступа на новые реквизиты в рамках расширения.

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

← На главную