Что делать, если в 1С 7.7 сдвигается таблица и обрезается правая колонка при скрытии первой?

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

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

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

Это известный баг платформы 7.7, и, к сожалению, исправить его на уровне самой платформы невозможно. Однако существуют надежные обходные пути, которые позволяют добиться нужного результата без визуальных искажений. Рассмотрим их подробно.

Решение 1: Переход на "План раскраски" в FormEx (Рекомендуемый способ)

Наиболее правильным, гибким и современным (в рамках 1С 7.7) решением является использование механизма "План раскраски", встроенного в компоненту FormEx. Этот метод был создан как раз для того, чтобы уйти от привязки раскраски к первой колонке и предоставить разработчикам более мощный инструмент.

Суть метода: вы создаете отдельную колонку в табличной части, в которой для каждой строки указываете не цвет, а имя стиля. Сами стили (цвет фона, цвет текста, шрифт и т.д.) заранее настраиваются в свойствах табличного поля на форме. Компонента FormEx сама находит нужный стиль по имени и применяет его ко всей строке.

Разберем по шагам, как перейти на "План раскраски":

  1. Добавьте служебную колонку. В вашей табличной части (или Таблице Значений, которая выводится на форму) создайте новую колонку, например, с именем "СтильСтроки". В ней будут храниться строковые идентификаторы стилей. Важно: эту колонку можно разместить где угодно, не обязательно первой, и ее можно спокойно скрывать — это не вызовет бага со сдвигом.
  2. Настройте стили. Откройте свойства табличного поля на форме. В свойствах FormEx найдите раздел, связанный с планом раскраски или стилями (часто называется "Раскраска"). Здесь вы можете создать несколько стилей, задав им уникальные имена. Например:
    • Стиль "Выполнено": зеленый фон.
    • Стиль "Просрочено": красный цвет текста, жирный шрифт.
    • Стиль "КОтгрузке": светло-желтый фон.
  3. Укажите колонку с планом раскраски. В тех же свойствах табличного поля укажите, что источником для плана раскраски является ваша новая колонка ("СтильСтроки").
  4. Заполняйте колонку в коде. В процессе программного формирования таблицы анализируйте данные каждой строки и в колонку "СтильСтроки" записывайте имя нужного стиля.
    
    // Пример заполнения таблицы
    Пока Выборка.ПолучитьСтроку() = 1 Цикл
        НоваяСтрока = ТаблицаНаФорме.НоваяСтрока();
        НоваяСтрока.Номенклатура = Выборка.Номенклатура;
        НоваяСтрока.Количество = Выборка.Количество;
        
        // Логика определения стиля
        Если Выборка.Статус = "Выполнен" Тогда
            НоваяСтрока.СтильСтроки = "Выполнено";
        ИначеЕсли Выборка.ДатаОтгрузки < ТекущаяДата() Тогда
            НоваяСтрока.СтильСтроки = "Просрочено";
        КонецЕсли;
    КонецЦикла;
    

Преимущества этого подхода:

Единственный недостаток — если у вас много форм со старым методом раскраски, их придется доработать. Однако это вложение времени окупится стабильностью и удобством дальнейшей поддержки.

Решение 2: Изменение порядка колонок (Быстрый обходной путь)

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

Суть метода: не делать служебную невидимую колонку первой.

  1. Сделайте первой в табличной части любую видимую колонку. Отличным кандидатом является колонка с номером строки ("НомерСтроки") или какой-нибудь ключевой реквизит, например, артикул или код.
  2. Вашу служебную колонку для раскраски разместите второй, третьей или любой другой по счету.
  3. Теперь вы можете скрыть вашу служебную колонку, и это не вызовет сдвига таблицы, так как первая колонка осталась видимой.

У этого метода есть ограничение, о котором важно помнить. При использовании старого метода FormEx раскрашивает все колонки, начиная от служебной и правее. Это значит, что первая колонка ("НомерСтроки") останется нераскрашенной. Во многих случаях это некритично и даже выглядит аккуратно — номера строк остаются стандартного серого цвета, а содержательные данные подсвечиваются.

Решение 3: Использование свойства INDENT (Экспериментальный вариант)

В обсуждении упоминался еще один способ, связанный с настройками FormEx — использование INDENT[-1]. Этот параметр, вероятно, позволяет управлять тем, с какой колонки начинается раскраска.

Гипотеза: указав отрицательный отступ INDENT[-1], можно "сказать" компоненте, чтобы она начала применять раскраску с колонки, расположенной левее служебной. Это теоретически позволило бы оставить служебную колонку первой и скрытой, но при этом закрасить ее саму (и все остальные). Этот метод требует проверки и изучения документации к вашей версии FormEx, но может оказаться полезным в нестандартных ситуациях.

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

← На главную