К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как выгрузить перечисление 1С: практическое руководство

Как выгрузить перечисление 1С в файл: через обработку, запрос, встроенный язык и СКД. Примеры кода, проверка результата, типичные ошибки и ограничения.

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

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

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

Что такое перечисление и чем оно отличается от справочника

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

Ключевое отличие от справочника: справочник хранится в таблицах базы данных и заполняется пользователями, а перечисление — часть структуры конфигурации. Поэтому типовые обработки выгрузки справочников не подходят для перечислений. Для перечисления нужно обращаться к коллекции метаданных, а не к данным базы.

Выгрузка перечисления кодом в текстовый файл

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

Текст = Новый ТекстовыйДокумент;

Для Каждого Значение Из Метаданные.Перечисления.СпособыОплаты.ЗначенияПеречисления Цикл

Текст.ДобавитьСтроку(Значение.Имя + ";" + Значение.Синоним);

КонецЦикла;

Текст.Записать("C:\Выгрузка\СпособыОплаты.txt", КодировкаТекста.UTF8);

Если нужны не только имена и синонимы, но и порядковые номера, добавьте счётчик в цикл или получите индекс через Метаданные.Перечисления.СпособыОплаты.ЗначенияПеречисления.Индекс(Значение). Для выгрузки в CSV замените разделитель на запятую или точку с запятой и добавьте строку заголовков перед циклом.

bsl
Для Каждого Значение Из Метаданные.Перечисления.СтавкиНДС.ЗначенияПеречисления Цикл
    Сообщить(Значение.Имя + ";" + Значение.Синоним);
КонецЦикла;

Перебор значений через менеджер перечисления

Альтернативный подход — работа через менеджер перечисления без обращения к метаданным. Метод Перечисления.ИмяПеречисления.Количество() возвращает число значений, а Перечисления.ИмяПеречисления.Получить(Индекс) — значение по индексу (нумерация с нуля). Такой вариант удобен, когда нужны сами ссылки на значения, а не их описания в метаданных.

Для Инд = 0 По Перечисления.СпособыОплаты.Количество() - 1 Цикл

ЗначениеПеречисления = Перечисления.СпособыОплаты.Получить(Инд);

Сообщить(Строка(ЗначениеПеречисления));

КонецЦикла;

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

Выгрузка через консоль запросов и СКД

Если под рукой есть консоль запросов, значения перечисления можно получить запросом без написания обработки. Перечисления доступны в запросах как таблицы: ВЫБРАТЬ Ссылка ИЗ Перечисление.СпособыОплаты вернёт все значения. Результат запроса в консоли обычно можно сохранить в табличный документ, а из него — в Excel или CSV.

Вариант со схемой компоновки данных подходит, когда выгрузку нужно оформить как отчёт с колонками «Имя» и «Представление». Создаётся внешний отчёт с набором данных-запросом по таблице перечисления, результат выводится в табличный документ и сохраняется стандартной командой «Файл → Сохранить как». Это удобно, если список нужно периодически выгружать пользователю без прав разработчика.

Сравнение вариантов

Код в консоли кода

Быстро и гибко, любой формат файла. Требуются права на выполнение кода и базовые навыки встроенного языка.

Консоль запросов

Не нужно писать обработку, результат сразу в таблице. Ограничение: доступны только ссылки и представления, без имён из метаданных.

Внешний отчёт на СКД

Подходит для регулярной выгрузки пользователем. Требует одноразовой разработки отчёта.

Выгрузка конфигурации в XML

Даёт полное описание всех перечислений сразу. Файл громоздкий, требует парсинга.

Выгрузка всех перечислений конфигурации сразу

Когда нужен полный список перечислений со всеми значениями — например, для документирования конфигурации или анализа перед обновлением — перебирается вся коллекция Метаданные.Перечисления. Каждое перечисление записывается блоком: имя объекта, затем его значения.

Текст = Новый ТекстовыйДокумент;

Для Каждого Переч Из Метаданные.Перечисления Цикл

Текст.ДобавитьСтроку("== " + Переч.Имя + " ==");

Для Каждого Значение Из Переч.ЗначенияПеречисления Цикл

Текст.ДобавитьСтроку(Значение.Имя + ";" + Значение.Синоним);

КонецЦикла;

КонецЦикла;

Текст.Записать("C:\Выгрузка\ВсеПеречисления.txt", КодировкаТекста.UTF8);

Другой путь — выгрузка конфигурации в файлы XML через конфигуратор («Конфигурация → Выгрузить конфигурацию в файлы»). В полученном каталоге каждое перечисление описано отдельным XML-файлом, из которого скриптом можно извлечь значения. Способ оправдан при массовой обработке, но для разовой выгрузки одного перечисления избыточен.

Порядок действий для разовой выгрузки
  1. 1
    Определите точное имя перечисления в конфигураторе или через Метаданные
  2. 2
    Откройте консоль кода или создайте внешнюю обработку
  3. 3
    Вставьте код перебора значений с записью в файл
  4. 4
    Укажите путь к файлу, доступный серверу или клиенту
  5. 5
    Выполните код и откройте файл для проверки
  6. 6
    Сверьте количество строк с количеством значений в конфигураторе

Проверка результата и типичные ошибки

После выгрузки откройте файл и сверьте число строк с количеством значений перечисления в конфигураторе. Проверьте кодировку: кириллица в синонимах должна читаться корректно — для этого файл записывается в UTF-8, а не в ANSI. Если файл открывается в Excel с «кракозябрами», сохраните его в UTF-8 с BOM или импортируйте через мастер текстов с явным указанием кодировки.

Частая ошибка — обращение к перечислению по синониму вместо имени: Метаданные.Перечисления["Способы оплаты"] вызовет ошибку, потому что индексация идёт по имени без пробелов. Ещё одна проблема — запись файла на сервере при клиент-серверном режиме: код, выполняемый на сервере, не видит локальный диск пользователя. В этом случае файл сохраняется на сервере или передаётся клиенту через временное хранилище.

Типичные ошибки
01
Обращение к перечислению по синониму вместо имени — код падает с ошибкой, потому что имена не содержат пробелов
02
Запись файла в локальный путь при выполнении кода на сервере — файл создаётся на сервере, а не у пользователя
03
Сохранение в ANSI вместо UTF-8 — кириллические синонимы становятся нечитаемыми при открытии в Excel
04
Ожидание, что выгрузка справочников захватит перечисления — типовые обработки работают только с данными, а перечисления хранятся в метаданных

Ограничения и альтернативы

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

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

Контрольные точки

Как проверить результат

Количество строк в файле
Норма

Совпадает с числом значений перечисления в конфигураторе

Тревожный признак

Строк меньше или больше — проверьте цикл и условия

Кодировка файла
Норма

Кириллица читается в редакторе и Excel

Тревожный признак

Нечитаемые символы — файл записан не в UTF-8

Содержимое колонок
Норма

Имена без пробелов, синонимы соответствуют отображаемым в программе

Тревожный признак

Пустые значения или дубли — ошибка в обращении к полям

Итог

Что важно запомнить

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

Частые вопросы

Можно ли выгрузить перечисление без доступа к конфигуратору?

Да, если есть права на запуск внешних обработок или консоли запросов. Консоль запросов позволяет обратиться к таблице перечисления запросом вида «ВЫБРАТЬ Ссылка ИЗ Перечисление.ИмяПеречисления» и сохранить результат в табличный документ, а оттуда — в Excel.

Чем отличается имя значения от синонима при выгрузке?

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

Почему файл создался, но я не могу его найти?

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

Как выгрузить перечисление в Excel сразу, без текстового файла?

Сформируйте табличный документ в коде: создайте объект ТабличныйДокумент, выведите значения построчно и сохраните его методом Записать с типом файла XLSX. Либо используйте консоль запросов — её результат сохраняется в Excel штатной командой.

Можно ли выгрузить значения перечисления запросом с именами, а не ссылками?

Запрос возвращает только ссылки на значения; внутренние имена из метаданных запросом недоступны. Если нужны имена, получите результат запроса и для каждой ссылки определите индекс через Перечисления.Имя.Индекс(Значение), а затем имя через метаданные.

Опасно ли выполнять код выгрузки в рабочей базе?

Код, который только читает метаданные и записывает файл, не изменяет данные базы и безопасен. Риск появляется, если фрагмент содержит команды записи объектов или удаления — поэтому перед запуском чужого кода просмотрите его целиком или выполните на копии базы.