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