Почему в конфигураторе недоступна команда «Добавить в расширение» для колонок формы и как это исправить?

Программист 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

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

Анализируем причину блокировки интерфейса

Рассмотрим стандартную ситуацию: перед нами стоит задача кастомизировать форму документа ЗаказКлиента. Мы открываем форму в основной конфигурации, переходим к списку реквизитов или дереву элементов формы, нажимаем правую кнопку мыши на нужной колонке (например, ТипНоменклатуры в табличной части Товары) и видим, что пункт «Добавить в расширение» просто отсутствует или неактивен.

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

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

Пошаговое решение: правильный алгоритм заимствования

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

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

Особенности работы с «Определяемыми типами»

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

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

Влияние среды разработки: EDT против Конфигуратора

Выясним, как влияет выбор среды разработки на этот процесс. Если вы используете 1C:EDT (Enterprise Development Tool), механизм заимствования работает через создание XML-копий объектов. Часто возникает ситуация, когда проект, начатый в EDT, позже открывается в обычном Конфигураторе. Из-за различий в индексации связей между объектами Конфигуратор может «потерять» понимание того, что родительская форма уже заимствована.

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

Программный метод как альтернатива (Best Practice)

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

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


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

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

Резюме для практического применения

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

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

← На главную