Как заменить значение 1 на слово "Да" в колонке списка формы в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на платформе 1С:Предприятие 7.7 часто возникает задача улучшить читаемость списков для пользователей. Стандартное отображение числовых флагов (0 или 1) или пустых полей не всегда информативно. Рассмотрим подробно, как настроить отображение понятных текстовых значений (например, "Да" или "Нет") вместо технических данных в табличной части формы списка.

Использование текстовых колонок вместо колонок данных

Основная ошибка, с которой мы можем столкнуться, — попытка прописать сложную формулу отображения в свойствах обычной колонки, привязанной к реквизиту справочника или документа. В 1С 7.7 колонки, напрямую связанные с данными ("Реквизит"), имеют ограниченные возможности форматирования.

Для решения нашей задачи необходимо использовать Текстовую колонку. Разберем алгоритм действий:

  1. В редакторе форм удаляем или скрываем старую колонку, которая показывала значение реквизита напрямую (например, колонку "Патент").
  2. Добавляем на форму новый элемент управления типа "Текст" (обычно это делается через меню "Вставить" -> "Текст" или перетаскиванием соответствующего инструмента).
  3. Размещаем этот элемент в табличной части формы списка. Он автоматически превратится в новую колонку.

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

Написание формулы отображения

Самый простой способ преобразовать числовое значение в текст — использовать встроенную функцию ?(). Это аналог условия "Если...То...Иначе".

Предположим, у нас есть реквизит Патент, который принимает значение 1 (истина) или 0/пусто (ложь). В поле "Формула" свойства текстовой колонки пропишем следующее выражение:

?(Патент = 1, "Да", "Нет")

Если нам нужно, чтобы при отсутствии признака выводилась пустая строка (чтобы не загромождать список словом "Нет"), изменим формулу:

?(Патент = 1, "Да", "")

Теперь при формировании списка программа будет проверять значение реквизита для каждой строки и подставлять соответствующий текст.

Безопасный вывод данных через функцию

Рассмотрим более сложный, но профессиональный подход. Если мы просто пропишем формулу в свойствах колонки, то при быстром прокручивании большого списка (скроллинге) могут возникать ошибки, так как система пытается вычислить значение для еще не полностью считанного объекта.

Чтобы избежать ошибок и реализовать более сложную логику, рекомендуется создать функцию в модуле формы. В этой функции мы обязательно должны проверить, выбран ли текущий документ или элемент справочника, используя метод Выбран().

В модуле формы создадим функцию:


Функция ПолучитьТекстПатента()
    // Проверяем, спозиционирована ли система на конкретной записи
    Если ТекущийДокумент.Выбран() = 1 Тогда
        Возврат ?(ТекущийДокумент.Патент = 1, "Да", "Нет");
    Иначе
        // Если объект не выбран (например, при быстрой прокрутке), возвращаем пустоту
        Возврат "";
    КонецЕсли;
КонецФункции

Затем в свойствах текстовой колонки в поле "Формула" просто укажем вызов этой функции:

ПолучитьТекстПатента()

Этот метод работает стабильнее и позволяет реализовывать логику любой сложности, например, проверять несколько условий одновременно (например, выводить "Картой" или "Наличными" в зависимости от вида оплаты).

Управление видимостью и идентификаторы колонок

После добавления текстовой колонки часто возникает задача управления ее видимостью программно (например, через настройки пользователя или фильтры). Здесь нас подстерегает важный нюанс платформы 1С 7.7.

Если мы назовем текстовую колонку (свойство Идентификатор) так же, как называется реквизит справочника (например, Патент), система выдаст ошибку или будет работать некорректно. Идентификатор элемента формы должен быть уникальным.

Разберем, как правильно настроить идентификаторы:

  1. Открываем свойства нашей текстовой колонки.
  2. В поле Идентификатор пишем уникальное имя, отличное от имени реквизита. Например: ПатентТекст или КолПатент.

Теперь, если в вашем коде используется список значений для управления видимостью колонок (например, механизм сохранения настроек интерфейса), необходимо обновить этот список, используя новый идентификатор.

Пример кода настройки списка колонок:


// Создаем список колонок, видимостью которых будем управлять
ПолныйСписокКолонок = СоздатьОбъект("СписокЗначений");

// Добавляем стандартные реквизиты
ПолныйСписокКолонок.ДобавитьЗначение("Код", "Код");
ПолныйСписокКолонок.ДобавитьЗначение("Наименование", "Наименование");

// Добавляем нашу текстовую колонку
// Важно: первым параметром передаем Идентификатор колонки на форме ("ПатентТекст"), 
// а вторым - заголовок для пользователя ("Патент")
ПолныйСписокКолонок.ДобавитьЗначение("ПатентТекст", "Патент");
ПолныйСписокКолонок.ДобавитьЗначение("БналТекст", "Безнал.");

Таким образом, мы разделили данные (реквизит объекта) и их представление (текстовая колонка формы), обеспечив корректную работу интерфейса и отсутствие конфликтов имен.

← На главную