Как перенести структуру колонок из таблицы на форме в табличную часть объекта в 1С

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

В процессе разработки в среде 1С:Предприятие часто возникает задача, когда необходимо перенести сложную структуру колонок из Таблицы Значений, созданной непосредственно в реквизитах формы, в Табличную Часть объекта (обработки, документа или справочника). Казалось бы, стандартная операция копирования (Ctrl+C — Ctrl+V) должна работать, но в обычном конфигураторе 1С при попытке вставить колонки формы в метаданные объекта ничего не происходит. Это связано с тем, что типы объектов метаданных и элементов формы различаются во внутреннем представлении платформы.

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

Причина возникновения проблемы

Разберем ситуацию: у вас есть ОбщаяФорма или форма обработки, на которой создан реквизит с типом ТаблицаЗначений. В этой таблице настроены десятки колонок с определенными типами данных, заголовками и свойствами. Теперь вам нужно, чтобы эта же структура стала частью физической таблицы объекта в метаданных. Конфигуратор 1С воспринимает реквизиты формы и реквизиты табличных частей как разные сущности. Несмотря на визуальное сходство, их описания в структуре метаданных несовместимы для прямого буфера обмена.

Способ 1: Использование 1C:EDT (Enterprise Development Tools)

Рассмотрим более современный подход к разработке — использование среды 1C:EDT. Она построена на базе Eclipse и предлагает гораздо более гибкие механизмы работы с объектами конфигурации. В отличие от стандартного конфигуратора, EDT оперирует объектами как структурированными проектами.

Проанализируем шаги по переносу в EDT:

  1. Откройте ваш проект в 1C:EDT.
  2. Найдите нужную форму и её реквизит (Таблицу Значений).
  3. Выделите колонки в дереве реквизитов формы.
  4. Используйте стандартное копирование.
  5. Перейдите к целевому объекту метаданных (например, к обработке) и вставьте скопированные элементы в раздел Табличные части.

Среда EDT автоматически попытается преобразовать XML-описания колонок формы в формат реквизитов табличной части. Это самый быстрый и безопасный способ, если вы уже используете EDT в своей работе.

Способ 2: Редактирование XML-файлов конфигурации

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

Шаг 1. Выгрузка конфигурации

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

Шаг 2. Поиск исходных данных

Нам необходимо найти файл формы, где расположена исходная таблица. Обычно путь выглядит так: \DataProcessors\ИмяОбработки\Forms\ИмяФормы\Ext\Form.xml. В этом файле ищем секцию <Attributes>, а внутри неё — нашу таблицу значений. Каждая колонка описана узлом <Columns>.

Шаг 3. Подготовка целевого файла

Теперь откроем файл описания самого объекта (обработки или документа). Это файл с расширением .mdo, находящийся в корневой папке объекта. Например: \DataProcessors\ИмяОбработки.mdo. В нем нам нужно найти секцию <TabularSections>.

Шаг 4. Перенос данных

Нам нужно скопировать узлы, описывающие колонки, и преобразовать их в формат <Attributes> табличной части. Структура описания типов (TypeDescription) в 1С идентична, что значительно упрощает задачу. Пример структуры реквизита в .mdo файле выглядит следующим образом:


<Attributes uuid="...">
  <name>ИмяРеквизита</name>
  <synonym>
    <key>ru</key>
    <value>Синоним реквизита</value>
  </synonym>
  <type>
    <types>String</types>
    <stringQualifiers>
      <length>150</length>
    </stringQualifiers>
  </type>
</Attributes>

Важно помнить, что при ручном переносе нужно либо генерировать новые UUID (уникальные идентификаторы), либо удалять атрибут uuid из тега, чтобы система создала новый при загрузке. Также следует очистить свойства, специфичные только для формы (например, viewView, editView), которые не поддерживаются в метаданных объекта.

Шаг 5. Загрузка изменений

После сохранения изменений в XML-файлах выполните обратную операцию в конфигураторе: Конфигурация — Разработка конфигурации — Загрузить конфигурацию из файлов....

Способ 3: Программная генерация через Схему Компоновки Данных (СКД)

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

  1. Создадим в объекте временную Схему компоновки данных.
  2. Добавим новый Набор данных - объект.
  3. В поле Имя объекта содержащего данные впишем имя нашей будущей таблицы.
  4. В конфигураторе 1С есть возможность импортировать описание полей. Хотя напрямую из ТЗ формы это сделать сложно, мы можем создать фиктивный запрос, который вернет таблицу с нужными именами и типами.
  5. Используя список полей в СКД, мы получаем визуальный перечень, из которого (в некоторых версиях платформы) можно копировать описания типов более эффективно, чем создавая их с нуля в ТЧ.

Способ 4: Использование внешних инструментов («Инструментарий разработчика»)

Проанализируем ситуацию, когда у нас есть доступ к внешним расширениям конфигуратора. Существуют инструменты, такие как «Инструментарий разработчика» (автор С. Бондарев) или «Снегопат».

В «Инструментарии разработчика» есть специальные консоли, которые позволяют:

Пример кода, который может сгенерировать подобный инструмент для анализа структуры:


Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
    Сообщить("Имя: " + Колонка.Имя + "; Тип: " + Колонка.ТипЗначения);
КонецЦикла;

Этот код можно запустить в консоли, а полученный список имен и типов использовать для автоматизированного создания реквизитов через скрипты «Снегопата».

Практические рекомендации

Выберем оптимальный путь в зависимости от объема данных:

  1. Если у вас до 5 колонок — проще и быстрее создать их вручную в конфигураторе, открыв два окна рядом.
  2. Если колонок от 10 до 50 — используйте метод с выгрузкой в XML. Это гарантирует точность типов данных, особенно если используются сложные составные типы.
  3. Если вы занимаетесь масштабной разработкой или тиражируемым решением — рассмотрите переход на 1C:EDT. Возможность копирования между формами и метаданными объектов сэкономит вам часы работы в долгосрочной перспективе.

Подведем итог. Перенос структуры из формы в объект — задача, требующая понимания того, как 1С хранит данные «под капотом». Несмотря на отсутствие прямой кнопки «Скопировать в ТЧ», использование XML-модификаций или специализированных инструментов разработчика позволяет решить эту проблему эффективно и без ошибок в описании типов.

← На главную