Работа с расширениями конфигурации — это мощный инструмент, который позволяет вносить изменения в логику и интерфейс программы, не снимая основную конфигурацию с поддержки. Однако начинающие (и даже опытные) разработчики часто сталкиваются с загадочным поведением визуального редактора 1С. Одна из типичных ситуаций: вы заимствуете форму документа в расширение, добавляете туда кнопку, а затем, как только заимствуете табличные части этого же документа, элементы формы (закладки, таблицы) внезапно исчезают из редактора Конфигуратора, хотя в режиме «Предприятие» они могут продолжать отображаться.
В этой статье мы подробно разберем, почему возникает этот эффект «исчезновения», проанализируем технические причины и рассмотрим несколько надежных способов решения проблемы.
Проанализируем ситуацию, описанную пользователем. Проблема заключается в том, что Конфигуратор 1С — это сложная система, которая должна постоянно сопоставлять данные основной конфигурации и данные расширения. Когда мы добавляем форму в расширение, она создается как «снимок» (proxy) формы из основной базы. В этот момент редактор «знает», что элемент формы связан, например, с табличной частью Затраты.
Однако, как только мы заимствуем саму табличную часть Затраты в расширение, структура объекта внутри расширения меняется. Для Конфигуратора это выглядит так: путь к данным элемента формы теперь должен указывать не на «внешний» объект основной базы, а на «внутренний» объект расширения. Если этот пересчет связей в кэше Конфигуратора происходит некорректно, визуальный редактор помечает элементы формы как ошибочные и скрывает их, чтобы предотвратить некорректное редактирование. При этом в дереве элементов формы они остаются, так как метаданные физически никуда не делись.
Как показывает практика, многих проблем с визуальным отображением можно избежать, если соблюдать строгий порядок действий при работе с расширением. Рассмотрим правильный алгоритм:
В этом случае при создании «снимка» формы в расширении Конфигуратор сразу увидит, что соответствующие табличные части уже существуют в контексте расширения, и корректно пропишет все пути к данным (ПутьКДанным).
Если форма уже заимствована и элементы пропали, попробуем восстановить их видимость вручную, не удаляя форму. Проанализируем свойства элементов в дереве формы (левая панель редактора):
Объект.Затраты).Часто это действие заставляет редактор «проснуться» и перерисовать элемент, так как связь с метаданными расширения обновляется принудительно.
Многие эксперты 1С рекомендуют вообще избегать заимствования формы целиком в визуальный редактор расширения, если ваша задача — просто добавить кнопку или изменить видимость поля. Это делает расширение гораздо более стабильным при обновлениях конфигурации. Вместо визуального добавления кнопки, мы можем создать её программно.
Разберем, как это сделать правильно. В расширении для формы создаем обработчик события ПриСозданииНаСервере с типом вызова &После:
&НаСервере
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Создаем новую команду формы
НоваяКоманда = ЭтаФорма.Команды.Добавить("Расш1_РаспределитьПоТарифу");
НоваяКоманда.Действие = "Расш1_Подключаемый_РаспределитьПоТарифу";
НоваяКоманда.Заголовок = "Распределить по тарифу";
// Добавляем кнопку на форму в нужную группу (например, на закладку Затраты)
// "ГруппаЗатратыКоманднаяПанель" - имя существующей группы на форме
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("Расш1_КнопкаРаспределить", Тип("КнопкаФормы"), ЭтаФорма.Элементы.ГруппаЗатратыКоманднаяПанель);
НовыйЭлемент.ИмяКоманды = "Расш1_РаспределитьПоТарифу";
КонецПроцедуры
В этом случае вам не нужно заимствовать все табличные части в визуальный редактор формы. Достаточно того, что они есть в метаданных расширения для работы серверного кода. Визуальный баг Конфигуратора при таком подходе просто не возникнет.
Если ваша задача — добавить кнопку, которая выполняет какие-либо расчеты в табличной части (например, распределение затрат), стоит рассмотреть вариант без использования расширений интерфейса. В БСП (Библиотеке стандартных подсистем) существует механизм «Дополнительные отчеты и обработки» с видом ЗаполнениеОбъекта.
Преимущества этого метода:
Иногда причина кроется не в логике действий разработчика, а в техническом состоянии самой платформы 1С. Проанализируем два важных момента:
Режим совместимости, как и у основной конфигурации. Если у расширения этот режим ниже, визуальный редактор форм (особенно в интерфейсе «Такси») может вести себя непредсказуемо.%AppData%\1C\1Cv8). Это часто помогает при «залипании» старых связей в расширениях.Подведем итог: Столкнувшись с исчезновением закладок в расширении, в первую очередь попробуйте пересоздать расширение, заимствуя данные до заимствования формы. Если это не помогает или кажется слишком трудоемким, переходите к программному созданию элементов управления. Это сделает вашу разработку профессиональнее и устойчивее к ошибкам платформы.