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