Разработка и Конфигурация · 10 мин
Как выгрузить перечисление 1С: практическое руководство
Как выгрузить перечисление 1С в файл: через обработку, запрос, встроенный язык и СКД. Примеры кода, проверка результата, типичные ошибки и ограничения.
Перечисление в 1С — это предопределённый набор значений, заданный в конфигурации: виды документов, статусы заказов, способы оплаты, ставки НДС. В отличие от справочника, список значений перечисления нельзя изменить в пользовательском режиме — он жёстко зашит в метаданные. Поэтому выгрузка перечисления сводится к чтению его значений из метаданных конфигурации и сохранению их в нужный формат: текстовый файл, Excel, XML или таблицу для дальнейшей обработки.
Задача возникает в нескольких ситуациях: при интеграции с внешними системами, где нужно передать справочник кодов и названий; при миграции данных между базами; при подготовке документации по конфигурации; при настройке сопоставления значений в обменах. Способ выгрузки зависит от того, кто выполняет задачу — разработчик с доступом к конфигуратору или пользователь без прав на изменение кода.
Ниже разобраны рабочие способы: через встроенный язык с записью в файл, через консоль запросов, через универсальные обработки и через схему компоновки данных. Для каждого приведены условия применения, примеры кода и способы проверить, что выгрузка прошла корректно.
Что такое перечисление и чем оно отличается от справочника
Перечисление — объект метаданных, значения которого определяет разработчик в конфигураторе. Пользователь не может добавить новое значение, переименовать или удалить существующее. Каждое значение имеет имя (идентификатор), синоним (представление для пользователя) и порядковый номер. При выгрузке важно решить, что именно нужно получить: внутренние имена, представления или оба варианта.
Ключевое отличие от справочника: справочник хранится в таблицах базы данных и заполняется пользователями, а перечисление — часть структуры конфигурации. Поэтому типовые обработки выгрузки справочников не подходят для перечислений. Для перечисления нужно обращаться к коллекции метаданных, а не к данным базы.
Выгрузка перечисления кодом в текстовый файл
Самый прямой способ — небольшой фрагмент кода на встроенном языке. Его можно выполнить в консоли кода (входит в состав многих инструментов разработчика), во внешней обработке или временно в модуле формы. Код перебирает значения перечисления и записывает их построчно в файл.
Текст = Новый ТекстовыйДокумент;
Для Каждого Значение Из Метаданные.Перечисления.СпособыОплаты.ЗначенияПеречисления Цикл
Текст.ДобавитьСтроку(Значение.Имя + ";" + Значение.Синоним);
КонецЦикла;
Текст.Записать("C:\Выгрузка\СпособыОплаты.txt", КодировкаТекста.UTF8);
Если нужны не только имена и синонимы, но и порядковые номера, добавьте счётчик в цикл или получите индекс через Метаданные.Перечисления.СпособыОплаты.ЗначенияПеречисления.Индекс(Значение). Для выгрузки в CSV замените разделитель на запятую или точку с запятой и добавьте строку заголовков перед циклом.
Для Каждого Значение Из Метаданные.Перечисления.СтавкиНДС.ЗначенияПеречисления Цикл
Сообщить(Значение.Имя + ";" + Значение.Синоним);
КонецЦикла;Перебор значений через менеджер перечисления
Альтернативный подход — работа через менеджер перечисления без обращения к метаданным. Метод Перечисления.ИмяПеречисления.Количество() возвращает число значений, а Перечисления.ИмяПеречисления.Получить(Индекс) — значение по индексу (нумерация с нуля). Такой вариант удобен, когда нужны сами ссылки на значения, а не их описания в метаданных.
Для Инд = 0 По Перечисления.СпособыОплаты.Количество() - 1 Цикл
ЗначениеПеречисления = Перечисления.СпособыОплаты.Получить(Инд);
Сообщить(Строка(ЗначениеПеречисления));
КонецЦикла;
Строковое представление значения перечисления совпадает с его синонимом, поэтому для выгрузки «человекочитаемого» списка достаточно Строка(ЗначениеПеречисления). Если же нужен внутренний идентификатор для сопоставления при обмене — используйте вариант с метаданными, где доступно поле Имя.
Выгрузка через консоль запросов и СКД
Если под рукой есть консоль запросов, значения перечисления можно получить запросом без написания обработки. Перечисления доступны в запросах как таблицы: ВЫБРАТЬ Ссылка ИЗ Перечисление.СпособыОплаты вернёт все значения. Результат запроса в консоли обычно можно сохранить в табличный документ, а из него — в Excel или CSV.
Вариант со схемой компоновки данных подходит, когда выгрузку нужно оформить как отчёт с колонками «Имя» и «Представление». Создаётся внешний отчёт с набором данных-запросом по таблице перечисления, результат выводится в табличный документ и сохраняется стандартной командой «Файл → Сохранить как». Это удобно, если список нужно периодически выгружать пользователю без прав разработчика.
Сравнение вариантов
Быстро и гибко, любой формат файла. Требуются права на выполнение кода и базовые навыки встроенного языка.
Не нужно писать обработку, результат сразу в таблице. Ограничение: доступны только ссылки и представления, без имён из метаданных.
Подходит для регулярной выгрузки пользователем. Требует одноразовой разработки отчёта.
Даёт полное описание всех перечислений сразу. Файл громоздкий, требует парсинга.
Выгрузка всех перечислений конфигурации сразу
Когда нужен полный список перечислений со всеми значениями — например, для документирования конфигурации или анализа перед обновлением — перебирается вся коллекция Метаданные.Перечисления. Каждое перечисление записывается блоком: имя объекта, затем его значения.
Текст = Новый ТекстовыйДокумент;
Для Каждого Переч Из Метаданные.Перечисления Цикл
Текст.ДобавитьСтроку("== " + Переч.Имя + " ==");
Для Каждого Значение Из Переч.ЗначенияПеречисления Цикл
Текст.ДобавитьСтроку(Значение.Имя + ";" + Значение.Синоним);
КонецЦикла;
КонецЦикла;
Текст.Записать("C:\Выгрузка\ВсеПеречисления.txt", КодировкаТекста.UTF8);
Другой путь — выгрузка конфигурации в файлы XML через конфигуратор («Конфигурация → Выгрузить конфигурацию в файлы»). В полученном каталоге каждое перечисление описано отдельным XML-файлом, из которого скриптом можно извлечь значения. Способ оправдан при массовой обработке, но для разовой выгрузки одного перечисления избыточен.
- 1Определите точное имя перечисления в конфигураторе или через Метаданные
- 2Откройте консоль кода или создайте внешнюю обработку
- 3Вставьте код перебора значений с записью в файл
- 4Укажите путь к файлу, доступный серверу или клиенту
- 5Выполните код и откройте файл для проверки
- 6Сверьте количество строк с количеством значений в конфигураторе
Проверка результата и типичные ошибки
После выгрузки откройте файл и сверьте число строк с количеством значений перечисления в конфигураторе. Проверьте кодировку: кириллица в синонимах должна читаться корректно — для этого файл записывается в UTF-8, а не в ANSI. Если файл открывается в Excel с «кракозябрами», сохраните его в UTF-8 с BOM или импортируйте через мастер текстов с явным указанием кодировки.
Частая ошибка — обращение к перечислению по синониму вместо имени: Метаданные.Перечисления["Способы оплаты"] вызовет ошибку, потому что индексация идёт по имени без пробелов. Ещё одна проблема — запись файла на сервере при клиент-серверном режиме: код, выполняемый на сервере, не видит локальный диск пользователя. В этом случае файл сохраняется на сервере или передаётся клиенту через временное хранилище.
Ограничения и альтернативы
Выгрузка перечислений невозможна штатными пользовательскими средствами без инструментов разработчика: в режиме «Предприятие» нет команды «выгрузить перечисление». Если нет прав на запуск внешних обработок и консоли кода, остаётся либо запросить выгрузку у администратора, либо использовать отчёт на СКД, который администратор подключит как внешний.
При интеграциях часто выгоднее не выгружать перечисление в файл, а передавать значения напрямую через план обмена, HTTP-сервис или формат EnterpriseData — там перечисления сопоставляются с значениями внешней системы по правилам конвертации. Ручная выгрузка оправдана как разовая задача или для подготовки таблиц соответствия.
Как проверить результат
Совпадает с числом значений перечисления в конфигураторе
Строк меньше или больше — проверьте цикл и условия
Кириллица читается в редакторе и Excel
Нечитаемые символы — файл записан не в UTF-8
Имена без пробелов, синонимы соответствуют отображаемым в программе
Пустые значения или дубли — ошибка в обращении к полям
Что важно запомнить
Перечисление выгружается через метаданные конфигурации, а не через данные базы. Практичные способы: код с перебором значений и записью в файл, консоль запросов, внешний отчёт на СКД. Всегда проверяйте количество строк, кодировку и соответствие имён.
Частые вопросы
Можно ли выгрузить перечисление без доступа к конфигуратору?
Да, если есть права на запуск внешних обработок или консоли запросов. Консоль запросов позволяет обратиться к таблице перечисления запросом вида «ВЫБРАТЬ Ссылка ИЗ Перечисление.ИмяПеречисления» и сохранить результат в табличный документ, а оттуда — в Excel.
Чем отличается имя значения от синонима при выгрузке?
Имя — внутренний идентификатор без пробелов, используемый в коде и при сопоставлении в обменах. Синоним — представление, которое видит пользователь в интерфейсе. Для интеграций обычно нужны имена, для отчётности и документации — синонимы.
Почему файл создался, но я не могу его найти?
В клиент-серверном режиме код часто выполняется на сервере, и файл записывается на диск сервера, а не на компьютер пользователя. Проверьте, где выполняется код, либо передавайте содержимое клиенту через временное хранилище и сохраняйте локально.
Как выгрузить перечисление в Excel сразу, без текстового файла?
Сформируйте табличный документ в коде: создайте объект ТабличныйДокумент, выведите значения построчно и сохраните его методом Записать с типом файла XLSX. Либо используйте консоль запросов — её результат сохраняется в Excel штатной командой.
Можно ли выгрузить значения перечисления запросом с именами, а не ссылками?
Запрос возвращает только ссылки на значения; внутренние имена из метаданных запросом недоступны. Если нужны имена, получите результат запроса и для каждой ссылки определите индекс через Перечисления.Имя.Индекс(Значение), а затем имя через метаданные.
Опасно ли выполнять код выгрузки в рабочей базе?
Код, который только читает метаданные и записывает файл, не изменяет данные базы и безопасен. Риск появляется, если фрагмент содержит команды записи объектов или удаления — поэтому перед запуском чужого кода просмотрите его целиком или выполните на копии базы.