Как изменить порядок колонок реквизита формы типа Таблица значений в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке управляемых форм в 1С:Предприятие 8 разработчики часто сталкиваются с досадным ограничением стандартного Конфигуратора: колонки реквизита формы с типом ТаблицаЗначений нельзя просто перетащить мышкой (Drag-and-drop), чтобы изменить их порядок. В отличие от элементов формы или обычных реквизитов, колонки таблицы фиксируются в той последовательности, в которой они были созданы. Если колонок много и они используются для внутренней логики, их хаотичный порядок затрудняет чтение структуры и поддержку кода.

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

Метод 1. Редактирование файлов выгрузки конфигурации (XML)

Проанализируем самый быстрый, но требующий осторожности способ — прямое вмешательство в XML-структуру формы. Поскольку Конфигуратор не предоставляет визуального интерфейса для сортировки, мы можем изменить порядок узлов непосредственно в файле описания формы.

Рассмотрим этот процесс по шагам:

  1. Выполним выгрузку конфигурации (или только нужной обработки/документа) в файлы. Для этого в меню выберем «Конфигурация» — «Выгрузить конфигурацию в файлы».
  2. Перейдем в каталог выгрузки и найдем XML-файл соответствующей формы (обычно он называется Form.xml в папке конкретного объекта).
  3. Откроем файл в текстовом редакторе (лучше использовать Notepad++, VS Code или аналогичные с подсветкой синтаксиса).
  4. Найдем раздел <Attributes>, а внутри него — наш реквизит типа ValueTable.
  5. Внутри узла реквизита будет секция <Columns>, содержащая блоки <Column>. Каждый такой блок описывает одну колонку.
  6. Аккуратно вырежем и вставим блоки <Column> в нужном нам порядке. Важно следить за тем, чтобы структура XML не нарушилась (все теги должны быть закрыты).
  7. Сохраним файл и выполним загрузку конфигурации из файлов обратно в 1С.

Важный момент: При перемещении блоков <Column> в XML сохраняются их уникальные идентификаторы и имена. Программный код, обращающийся к колонкам по имени (например, Объект.Таблица[0].МояКолонка), продолжит работать корректно, так как индексы пересчитаются автоматически в соответствии с новым порядком в XML.

Метод 2. Использование среды разработки EDT (Enterprise Development Tools)

Если вы идете в ногу со временем и используете EDT, то проблема решается гораздо проще. Давайте выясним, почему в этой среде работа с метаданными удобнее:

EDT построена на базе Eclipse и хранит проект в виде набора файлов изначально. В дереве реквизитов формы EDT реализована полноценная поддержка изменения порядка колонок. Мы можем просто захватить колонку мышкой и переместить её выше или ниже в иерархии. Среда разработки сама перестроит XML-структуру при сохранении, избавив нас от необходимости ручной правки тегов.

Если вы ранее не использовали EDT, это отличный повод попробовать инструмент, так как подобные интерфейсные «мелочи» там проработаны значительно лучше, чем в классическом Конфигураторе.

Метод 3. Программное формирование структуры таблицы

Рассмотрим ситуацию, когда таблица используется для внутренних нужд, например, для хранения состояний «страниц» или динамических настроек интерфейса. В таких случаях создание реквизита в визуальном редакторе может быть неоптимальным. Разберем, как сформировать таблицу программно, обеспечив строгий порядок колонок.

Наилучшим местом для этого является обработчик ПриСозданииНаСервере. Посмотрим на пример кода, который создает структуру «с нуля»:


&Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Описываем массив добавляемых колонок в нужном нам порядке
    МассивДобавляемыхРеквизитов = Новый Массив;
    ТипСтрока = Новый ОписаниеТипов("Строка");
    
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ИмяСтраницы", ТипСтрока, "ТЗ_Данные"));
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Заголовок", ТипСтрока, "ТЗ_Данные"));
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Индекс", Новый ОписаниеТипов("Число"), "ТЗ_Данные"));
    
    // Выполняем изменение структуры формы
    ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
    
КонецПроцедуры

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

Особенности платформы 8.3.23 и выше: Ловушка параметров

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

Выясним причину проблемы на примере события НачалоВыбора:

  1. В платформе 8.3.22 и ниже обработчик НачалоВыбора имеет 3 параметра: (Элемент, ДанныеВыбора, СтандартнаяОбработка).
  2. В платформе 8.3.23 был добавлен новый параметр, и теперь их 4: (Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка).

В чем заключается опасность? Если вы разрабатываете конфигурацию на версии 8.3.23 и создаете обработчик через нажатие на «лупу» в свойствах элемента, платформа автоматически генерирует процедуру с 4-мя параметрами. Если затем эта конфигурация будет запущена на сервере с платформой 8.3.22, система выдаст ошибку «Несоответствие количества параметров», так как старая платформа ожидает всего три параметра и не знает, что передавать в четвертый.

Более того, обратите внимание, что параметр СтандартнаяОбработка в новой версии сместился. Если вы привыкли обращаться к нему по индексу (хотя это и плохая практика) или просто копируете код, будьте предельно внимательны.

Рекомендация: Если ваша разработка предназначена для работы на разных версиях платформы, всегда проверяйте количество параметров в сгенерированных обработчиках и приводите их к минимальному общему знаменателю, либо используйте проверку версии через СистемнаяИнформация.ВерсияПриложения, хотя ручная корректировка параметров под требования режима совместимости является более предпочтительной.

Заключение

Мы выяснили, что отсутствие возможности визуального перемещения колонок в Конфигураторе — это не приговор. Для разового исправления порядка отлично подходит метод с правкой XML. Для постоянной профессиональной разработки лучше переходить на EDT. А для задач, где структура данных зависит от бизнес-логики, идеальным решением станет программное создание реквизитов. Не забывайте также о нюансах обновления платформы, чтобы ваш код оставался стабильным в любой среде.

← На главную