Как убрать или скрыть колонки в форме Заказ поставщику через расширение в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке расширений для современных конфигураций, таких как 1С:Управление торговлей 11, программисты часто сталкиваются с ситуацией, когда привычные методы редактирования формы не срабатывают. Одной из самых распространенных задач является скрытие или удаление лишних колонок (например, «Цена», «Сумма», «НДС») из табличной части документа Заказ поставщику. В этом материале мы подробно разберем, почему платформа блокирует удаление элементов и как правильно решить эту задачу программным путем.

Выясняем причину: почему нельзя просто удалить колонку?

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

Рассмотрим, почему кнопка «Удалить» для таких элементов становится недоступной:

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

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

Проблема игнорирования свойства Видимость в редакторе

Часто разработчики пробуют просто снять галочку Видимость в свойствах элемента в расширении. Однако на практике это изменение часто игнорируется при запуске программы в режиме «1С:Предприятие». Проанализируем, почему так происходит:

Решение проблемы: программное скрытие колонок

Самый надежный и правильный способ скрыть колонки в расширении — это использование программного кода с аннотацией &После. Разберем по шагам, как это реализовать.

Шаг 1: Заимствование процедуры

Найдите в модуле формы Заказ поставщику процедуру ПриСозданииНаСервере. Нажмите на нее правой кнопкой мыши и выберите «Добавить в расширение», указав тип вызова После. Платформа создаст в модуле расширения шаблон процедуры:


&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Здесь будет наш код
КонецПроцедуры

Шаг 2: Написание кода скрытия

Внутри этой процедуры нам нужно обратиться к коллекции Элементы и установить свойство Видимость в значение Ложь для нужных колонок. Обратите внимание, что обращаться нужно именно к именам элементов формы, а не к именам реквизитов объекта.


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

    // Скрываем колонку Сумма
    Если Элементы.Найти("ТоварыСумма") <> Неопределено Тогда
        Элементы.ТоварыСумма.Видимость = Ложь;
    КонецЕсли;

    // Скрываем колонку Сумма НДС
    Если Элементы.Найти("ТоварыСуммаНДС") <> Неопределено Тогда
        Элементы.ТоварыСуммаНДС.Видимость = Ложь;
    КонецЕсли;
    
КонецПроцедуры

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

Что делать, если программное скрытие не помогло?

Если после внесения правок в код колонки все равно видны, проанализируем ситуацию дальше. В типовых конфигурациях 1С существует механизм «Настройки формы». Рассмотрим два дополнительных действия:

1. Очистка пользовательских настроек

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

  1. Запустите «1С:Предприятие».
  2. Зайдите в меню Администрирование — Обслуживание — Настройки пользователей и прав.
  3. Выберите пункт Очистка настроек.
  4. Найдите нужного пользователя и документ Заказ поставщику, после чего удалите настройки формы.

2. Использование Условного оформления

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


ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыЦена");

// Условие оставляем пустым, чтобы правило действовало всегда

Условное оформление отрабатывает на уровне платформы при отрисовке интерфейса, и оно часто оказывается «сильнее» прямых установок свойства Видимость.

Работа с хранилищем расширения

Если вы работаете в команде и используете Хранилище расширения, обратите внимание на специфику захвата объектов. Выясним основные правила:

Резюме

Для удаления (скрытия) суммовых показателей в форме заказа поставщика через расширение в современных версиях 1С v8.3.14+ следует отказаться от попыток физического удаления элементов. Вместо этого мы используем программный метод &После("ПриСозданииНаСервере"), устанавливая Видимость = Ложь. Если это не помогает — очищаем пользовательские настройки интерфейса или применяем условное оформление. Это гарантирует стабильную работу расширения и отсутствие конфликтов при обновлениях основной конфигурации.

← На главную