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