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