При разработке расширений для современных конфигураций, таких как 1С:Управление торговлей 11, программисты часто сталкиваются с ситуацией, когда привычные методы редактирования формы не срабатывают. Одной из самых распространенных задач является скрытие или удаление лишних колонок (например, «Цена», «Сумма», «НДС») из табличной части документа Заказ поставщику. В этом материале мы подробно разберем, почему платформа блокирует удаление элементов и как правильно решить эту задачу программным путем.
Начиная с версии платформы 8.3.14, компания 1С существенно изменила логику работы механизма расширений. Если вы добавили форму из основной конфигурации в расширение (заимствовали ее), вы заметите, что у большинства элементов в дереве формы появился значок в виде желтого пазла. Это означает, что элемент является заимствованным.
Рассмотрим, почему кнопка «Удалить» для таких элементов становится недоступной:
Таким образом, если мы видим «желтый пазл» у элемента ТоварыЦена или ТоварыСумма, мы должны понимать: физически удалить его из структуры формы в расширении нельзя. Нам необходимо использовать методы управления видимостью.
Часто разработчики пробуют просто снять галочку Видимость в свойствах элемента в расширении. Однако на практике это изменение часто игнорируется при запуске программы в режиме «1С:Предприятие». Проанализируем, почему так происходит:
ПриСозданииНаСервере типовой конфигурации часто вызываются общие модули, которые динамически определяют состав колонок в зависимости от прав пользователя, настроек соглашений или статуса документа. Этот код выполняется позже, чем применяются статические настройки из расширения.Самый надежный и правильный способ скрыть колонки в расширении — это использование программного кода с аннотацией &После. Разберем по шагам, как это реализовать.
Шаг 1: Заимствование процедуры
Найдите в модуле формы Заказ поставщику процедуру ПриСозданииНаСервере. Нажмите на нее правой кнопкой мыши и выберите «Добавить в расширение», указав тип вызова После. Платформа создаст в модуле расширения шаблон процедуры:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Здесь будет наш код
КонецПроцедуры
Шаг 2: Написание кода скрытия
Внутри этой процедуры нам нужно обратиться к коллекции Элементы и установить свойство Видимость в значение Ложь для нужных колонок. Обратите внимание, что обращаться нужно именно к именам элементов формы, а не к именам реквизитов объекта.
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Скрываем колонку Цена в табличной части Товары
Если Элементы.Найти("ТоварыЦена") <> Неопределено Тогда
Элементы.ТоварыЦена.Видимость = Ложь;
КонецЕсли;
// Скрываем колонку Сумма
Если Элементы.Найти("ТоварыСумма") <> Неопределено Тогда
Элементы.ТоварыСумма.Видимость = Ложь;
КонецЕсли;
// Скрываем колонку Сумма НДС
Если Элементы.Найти("ТоварыСуммаНДС") <> Неопределено Тогда
Элементы.ТоварыСуммаНДС.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Важный нюанс: Использование метода Найти() позволяет избежать ошибок, если в какой-то из версий конфигурации поставщика имя элемента изменится или он будет удален из формы.
Если после внесения правок в код колонки все равно видны, проанализируем ситуацию дальше. В типовых конфигурациях 1С существует механизм «Настройки формы». Рассмотрим два дополнительных действия:
Это действие критически важно при работе с интерфейсом в расширениях. Чтобы проверить результат своей работы без влияния старых настроек, выполните следующее:
Заказ поставщику, после чего удалите настройки формы.В некоторых случаях типовой код может принудительно включать видимость элементов уже после выполнения процедуры ПриСозданииНаСервере. Чтобы гарантированно скрыть элемент, мы можем использовать механизм Условного оформления формы. Проанализируем пример кода:
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыЦена");
// Условие оставляем пустым, чтобы правило действовало всегда
Условное оформление отрабатывает на уровне платформы при отрисовке интерфейса, и оно часто оказывается «сильнее» прямых установок свойства Видимость.
Если вы работаете в команде и используете Хранилище расширения, обратите внимание на специфику захвата объектов. Выясним основные правила:
Для удаления (скрытия) суммовых показателей в форме заказа поставщика через расширение в современных версиях 1С v8.3.14+ следует отказаться от попыток физического удаления элементов. Вместо этого мы используем программный метод &После("ПриСозданииНаСервере"), устанавливая Видимость = Ложь. Если это не помогает — очищаем пользовательские настройки интерфейса или применяем условное оформление. Это гарантирует стабильную работу расширения и отсутствие конфликтов при обновлениях основной конфигурации.