Как скрыть колонку «Файл картинки» в динамическом списке, если ее нет в конфигураторе

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

В процессе разработки или поддержки конфигураций на базе 1С:Предприятие 8.3 (особенно таких сложных, как УТ 11, ERP или КА), программисты часто сталкиваются с «загадочным» появлением колонок в табличных частях и списках. Одной из самых распространенных проблем является колонка Файл картинки. Вы открываете форму в конфигураторе, просматриваете дерево элементов, но нужного поля там нет, хотя в режиме предприятия оно занимает полезное пространство экрана. В этой статье мы подробно разберем, почему так происходит, и как программно или интерактивно управлять видимостью таких элементов.

Выясним причину появления колонки

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

  1. Автозаполнение полей: Если у элемента формы Список (динамический список) установлено свойство Автозаполнение, платформа автоматически создает элементы формы для всех полей, входящих в основную таблицу или запрос списка.
  2. Пользовательские настройки: В управляемых формах пользователи имеют право самостоятельно добавлять поля из доступных данных через меню «Изменить форму».
  3. Расширения конфигурации: Поле может быть добавлено в расширении, и в основной конфигурации вы его не увидите.
  4. Программное добавление: Элемент может создаваться динамически в процедуре ПриСозданииНаСервере кодом из общих модулей или модулей формы.
  5. Свойства картинки строк: У таблицы могут быть заполнены свойства ПутьКДаннымКартинкиСтрок, что заставляет систему резервировать место под иконку.

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

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

В режиме «1С:Предприятие» перейдем в меню «Ещё» — «Установить стандартные настройки». Если колонка исчезла, значит, причина была в индивидуальных настройках интерфейса. Также можно зайти в «Ещё» — «Изменить форму», найти в дереве нужный элемент и просто снять с него флажок видимости или нажать кнопку «Установить стандартные настройки» непосредственно в этом окне.

Способ 2. Программный поиск элемента через отладчик

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

  1. Установим точку останова в самом конце процедуры ПриСозданииНаСервере.
  2. Запустим отладку и в окне «Вычислить выражение» введем Элементы.
  3. Просмотрим содержимое коллекции. Ищите элементы, имена которых начинаются с имени вашего списка, например: СписокНоменклатураФайлКартинки или СписокРодительФайлКартинки.

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


Для Каждого Элемент Из Элементы Цикл
    Сообщить("Имя элемента: " + Элемент.Имя + " | Заголовок: " + Элемент.Заголовок);
КонецЦикла;

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

Способ 3. Программное управление видимостью

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


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

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

Важно различать свойства Видимость и ПользовательскаяВидимость. Если вы установите Видимость = Ложь, поле полностью исключается из состава формы, и пользователь не сможет включить его обратно через настройки. Если же использовать ПользовательскаяВидимость, поле будет скрыто по умолчанию, но останется доступным для выбора в меню «Изменить форму».

Способ 4. Отключение автозаполнения и «Использовать всегда»

Посмотрим на настройки самого динамического списка в конфигураторе. Откроем свойства реквизита Список и перейдем в «Настройка списка» — вкладка «Поля».

Проанализируем список доступных полей. Если для поля ФайлКартинки (или аналогичного) установлена галочка «Использовать всегда», платформа будет стараться вытащить эти данные из базы в любом случае. Если при этом на самой форме у таблицы включено Автозаполнение, колонка будет создана автоматически.

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

Способ 5. Особенности работы с расширениями

Если вы работаете в конфигурации УТ 11, помните, что многие визуальные решения (отображение картинок, статусов, остатков) реализованы через расширения. Если колонка добавлена в расширении:

  1. Откройте форму именно в том расширении, где она модифицирована.
  2. Найдите элемент в дереве и установите свойство Видимость в значение Ложь.
  3. Или воспользуйтесь программным кодом в обработчике &После("ПриСозданииНаСервере"), чтобы перекрыть настройки расширения.

Рассмотрим пример кода в расширении:


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

Подведем итоги

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

← На главную