В процессе разработки в среде 1С:Предприятие часто возникает задача, когда необходимо перенести сложную структуру колонок из Таблицы Значений, созданной непосредственно в реквизитах формы, в Табличную Часть объекта (обработки, документа или справочника). Казалось бы, стандартная операция копирования (Ctrl+C — Ctrl+V) должна работать, но в обычном конфигураторе 1С при попытке вставить колонки формы в метаданные объекта ничего не происходит. Это связано с тем, что типы объектов метаданных и элементов формы различаются во внутреннем представлении платформы.
В этой статье мы подробно разберем, почему так происходит, и рассмотрим несколько эффективных способов решения этой задачи: от ручной правки XML до использования современных инструментов разработки.
Разберем ситуацию: у вас есть ОбщаяФорма или форма обработки, на которой создан реквизит с типом ТаблицаЗначений. В этой таблице настроены десятки колонок с определенными типами данных, заголовками и свойствами. Теперь вам нужно, чтобы эта же структура стала частью физической таблицы объекта в метаданных. Конфигуратор 1С воспринимает реквизиты формы и реквизиты табличных частей как разные сущности. Несмотря на визуальное сходство, их описания в структуре метаданных несовместимы для прямого буфера обмена.
Рассмотрим более современный подход к разработке — использование среды 1C:EDT. Она построена на базе Eclipse и предлагает гораздо более гибкие механизмы работы с объектами конфигурации. В отличие от стандартного конфигуратора, EDT оперирует объектами как структурированными проектами.
Проанализируем шаги по переносу в EDT:
Среда EDT автоматически попытается преобразовать XML-описания колонок формы в формат реквизитов табличной части. Это самый быстрый и безопасный способ, если вы уже используете EDT в своей работе.
Если вы работаете в классическом конфигураторе, наиболее действенным методом будет выгрузка конфигурации в файлы и их последующая правка. Разберем этот процесс по шагам, так как он требует внимательности.
Шаг 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-файлах выполните обратную операцию в конфигураторе: Конфигурация — Разработка конфигурации — Загрузить конфигурацию из файлов....
Выясним еще один «хитрый» способ, который позволяет избежать прямого редактирования файлов. Мы можем использовать временную СКД как промежуточное звено для описания структуры.
Проанализируем ситуацию, когда у нас есть доступ к внешним расширениям конфигуратора. Существуют инструменты, такие как «Инструментарий разработчика» (автор С. Бондарев) или «Снегопат».
В «Инструментарии разработчика» есть специальные консоли, которые позволяют:
ТаблицыЗначений в режиме 1С:Предприятие.Пример кода, который может сгенерировать подобный инструмент для анализа структуры:
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Сообщить("Имя: " + Колонка.Имя + "; Тип: " + Колонка.ТипЗначения);
КонецЦикла;
Этот код можно запустить в консоли, а полученный список имен и типов использовать для автоматизированного создания реквизитов через скрипты «Снегопата».
Выберем оптимальный путь в зависимости от объема данных:
Подведем итог. Перенос структуры из формы в объект — задача, требующая понимания того, как 1С хранит данные «под капотом». Несмотря на отсутствие прямой кнопки «Скопировать в ТЧ», использование XML-модификаций или специализированных инструментов разработчика позволяет решить эту проблему эффективно и без ошибок в описании типов.