Список значений перечисления из базы 1С 8.3: пять способов получить его в файл

· 10 мин

Содержание

Чтобы выгрузить перечисление 1С в Excel без программирования, включите команду «Все функции» (Главное меню → Сервис → Параметры), откройте Все функции → Перечисления → <нужное перечисление> и выведите список в табличный документ, а его сохраните как .xlsx. Для XML и полной картины по всем перечислениям сразу удобнее Конфигуратор: выгрузка конфигурации в файлы даёт по одному XML на каждое перечисление.

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

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

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

У каждого значения есть несколько характеристик, и важно заранее понять, какая из них нужна получателю файла:

  • 🔤 Имя — служебный идентификатор латиницей или кириллицей без пробелов, например ЮридическоеЛицо. Именно оно уходит в XML при обмене.
  • 🏷️ Синоним — то, что видит пользователь на форме: «Юридическое лицо». Может отличаться от имени до неузнаваемости.
  • 🔢 Порядок — позиция значения в списке. По ней сортируются выпадающие списки, и по ней же можно сортировать в запросе.
  • 🆔 Уникальный идентификатор — UUID значения в метаданных. Виден только в файлах выгрузки конфигурации.
  • 💬 Комментарий — пояснение разработчика, если оно заполнено.

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

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

Какой способ выбрать

СпособНужны праваЧто получитеКогда удобен
«Все функции» → вывести списокПользовательСинонимы в ExcelРазово, одно перечисление
Консоль запросовПользователь с правом на внешние обработкиСсылка, порядок, представлениеНужна сортировка или несколько перечислений
Отчёт по конфигурацииДоступ в КонфигураторИмена, синонимы, комментарииДокументация по конфигурации
/DumpConfigToFilesДоступ в КонфигураторXML с именами и UUIDМассовая выгрузка, автоматизация
Код на встроенном языкеРазработчикЛюбой формат: CSV, XML, JSONИнтеграция, регулярная выгрузка
COM-соединениеАдминистратор ПК и базыДанные во внешнем скриптеВыгрузка без запуска клиента 1С
Кто вы и что нужно получить?

Как выгрузить перечисление в Excel из пользовательского режима

Этот способ работает в любой типовой конфигурации на интерфейсе «Такси»: БП 3.0, ЗУП 3.1, УТ 11. Разницы в путях нет, потому что команда «Все функции» — часть платформы, а не конфигурации.

Шаг 1. Включите команду «Все функции»

  1. Нажмите кнопку главного меню (три полоски в левом верхнем углу).
  2. Откройте Сервис → Параметры.
  3. Поставьте флажок «Отображать команду “Все функции”» и нажмите «Применить».

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

Шаг 2. Откройте перечисление

  1. Главное меню → Все функции.
  2. Разверните ветку «Перечисления».
  3. Найдите нужное по синониму. Список длинный, поэтому удобнее начать печатать название при выделенной ветке — курсор перепрыгнет к совпадению.
  4. Двойным щелчком откройте форму списка значений.

Шаг 3. Выведите и сохраните

  1. В форме списка нажмите Ещё → Вывести список….
  2. Оставьте нужные колонки, вывод — в табличный документ.
  3. В открывшемся табличном документе: Главное меню → Файл → Сохранить как.
  4. Тип файла — «Лист Excel 2007-…» (.xlsx), укажите папку и имя.

Короткий путь: выделите строки в списке (Ctrl+A), скопируйте (Ctrl+C) и вставьте в Excel. Для списка из 5–20 значений это быстрее всех остальных способов.

Ограничение способа одно: в файл попадает представление значения, то есть синоним. Служебного имени здесь нет.

Вариант с консолью запросов

Если нужен порядок значений или сразу несколько перечислений, откройте внешнюю обработку «Консоль запросов» (Главное меню → Файл → Открыть) и выполните запрос:

ВЫБРАТЬ
    "ЮридическоеФизическоеЛицо" КАК Перечисление,
    Т.Порядок КАК Порядок,
    ПРЕДСТАВЛЕНИЕ(Т.Ссылка) КАК Значение
ИЗ
    Перечисление.ЮридическоеФизическоеЛицо КАК Т

УПОРЯДОЧИТЬ ПО
    Порядок

Подставьте имя своего перечисления после Перечисление. — конструктор запроса покажет весь список в ветке «Перечисления». Результат консоль выводит в табличный документ, дальше сохранение в .xlsx так же, как в шаге 3.

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

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

Если нужны служебные имена, комментарии и UUID, данных пользовательского режима мало. Тут поможет Конфигуратор.

Отчёт по конфигурации

  1. Откройте базу в Конфигураторе.
  2. Меню Конфигурация → Отчет по конфигурации….
  3. Отметьте нужные объекты (ветка «Перечисления» целиком или одно перечисление) и формат вывода — табличный документ или текстовый файл.
  4. Полученный табличный документ сохраните через Файл → Сохранить как в .xlsx или .mxl.

В отчёте у каждого перечисления перечислены значения с именем, синонимом и комментарием. Это удобный формат для технической документации.

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

Конфигурация → Выгрузить конфигурацию в файлы… раскладывает метаданные по папкам. Перечисления лежат в каталоге Enums: по одному файлу на перечисление, например Enums\ЮридическоеФизическоеЛицо.xml.

То же самое можно сделать из командной строки, без открытия Конфигуратора вручную:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" DESIGNER ^
  /F "D:\Bases\Buh" /N "Администратор" /P "" ^
  /DumpConfigToFiles "D:\Dump\Buh" ^
  /Out "D:\Dump\dump.log"

Для серверной базы вместо /F укажите /S "сервер\имябазы". Путь к 1cv8.exe подставьте свой: номер версии в папке у каждого свой.

Выгрузка всей конфигурации БП 3.0 занимает заметное время и десятки тысяч файлов. Если нужны только перечисления, в актуальных версиях платформы у /DumpConfigToFiles есть параметр выгрузки по списку объектов — точный синтаксис смотрите в справке Конфигуратора по параметрам командной строки.

Выгрузка конфигурации не требует монопольного режима и ничего не меняет в базе: пользователи могут продолжать работать.

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

Внутри Enums\<Имя>.xml значения лежат в блоке ChildObjects. Каждое значение — элемент EnumValue с атрибутом uuid, а в его Properties есть Name, Synonym и Comment. Синоним записан как многоязычная строка: текст на русском лежит в v8:item с v8:lang = ru, в элементе v8:content.

Открывать такой файл в Excel напрямую неудобно — вложенность слишком глубокая. Быстрее превратить его в CSV коротким скриптом на Python, который не зависит от пространств имён:

import csv, sys
import xml.etree.ElementTree as ET

def local(tag):
    return tag.rsplit('}', 1)[-1]

root = ET.parse(sys.argv[1]).getroot()
rows = []
for el in root.iter():
    if local(el.tag) != 'EnumValue':
        continue
    name = synonym = ''
    for p in el.iter():
        if local(p.tag) == 'Name' and not name:
            name = p.text or ''
        if local(p.tag) == 'content' and not synonym:
            synonym = p.text or ''
    rows.append([len(rows), name, synonym, el.get('uuid', '')])

with open(sys.argv[2], 'w', newline='', encoding='utf-8-sig') as f:
    w = csv.writer(f, delimiter=';')
    w.writerow(['Порядок', 'Имя', 'Синоним', 'UUID'])
    w.writerows(rows)

Запуск: python enum2csv.py Enums\ЮридическоеФизическоеЛицо.xml enum.csv. Кодировка utf-8-sig добавляет метку BOM, и Excel открывает такой CSV с кириллицей без ручного импорта. Порядок строк в файле совпадает с порядком значений в конфигурации.

Экспорт перечисления в XML для обмена с другой системой

Файл из /DumpConfigToFiles описывает метаданные. Для обмена чаще нужен простой XML «имя — представление», который принимающая сторона загрузит в свой справочник соответствий. Его проще сформировать кодом.

Главный приём здесь — функция XMLСтрока(). Для значения перечисления она возвращает его имя: XMLСтрока(Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо) даст строку ЮридическоеЛицо. Обратное преобразование — XMLЗначение(Тип("ПеречислениеСсылка.ЮридическоеФизическоеЛицо"), "ЮридическоеЛицо"). Именно эти строки 1С пишет в XML при обмене, поэтому на них и стоит строить сопоставление.

Пример серверной процедуры для внешней обработки, которая выгружает все перечисления конфигурации в один XML:

&НаСервереБезКонтекста
Процедура ВыгрузитьПеречисленияВXML(ИмяФайла)

    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
    Запись.ЗаписатьОбъявлениеXML();
    Запись.ЗаписатьНачалоЭлемента("Enums");

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

        Запись.ЗаписатьНачалоЭлемента("Enum");
        Запись.ЗаписатьАтрибут("name", МетаПеречисление.Имя);
        Запись.ЗаписатьАтрибут("synonym", МетаПеречисление.Синоним);

        Порядок = 0;
        Для Каждого МетаЗначение Из МетаПеречисление.ЗначенияПеречисления Цикл
            Запись.ЗаписатьНачалоЭлемента("Value");
            Запись.ЗаписатьАтрибут("order", Формат(Порядок, "ЧН=0; ЧГ=0"));
            Запись.ЗаписатьАтрибут("name", МетаЗначение.Имя);
            Запись.ЗаписатьТекст(МетаЗначение.Синоним);
            Запись.ЗаписатьКонецЭлемента();
            Порядок = Порядок + 1;
        КонецЦикла;

        Запись.ЗаписатьКонецЭлемента();

    КонецЦикла;

    Запись.ЗаписатьКонецЭлемента();
    Запись.Закрыть();

КонецПроцедуры

На выходе получится файл такого вида:

<Enums>
  <Enum name="ЮридическоеФизическоеЛицо" synonym="Юридическое / физическое лицо">
    <Value order="0" name="ЮридическоеЛицо">Юридическое лицо</Value>
    <Value order="1" name="ФизическоеЛицо">Физическое лицо</Value>
  </Enum>
</Enums>

Процедура выполняется на сервере, поэтому ИмяФайла — путь на сервере 1С. В файловой базе это ваш компьютер, в клиент-серверной — машина с рабочим процессом. Чтобы отдать файл пользователю, запишите его во временный файл (ПолучитьИмяВременногоФайла("xml")), поместите в хранилище и скачайте на клиенте.

Нужен CSV для Excel — замените ЗаписьXML на ЗаписьТекста с кодировкой КодировкаТекста.UTF8 и разделителем «;». Нужен JSON — тот же цикл с ЗаписьJSON.

Выгрузка перечислений через COM-соединение

COM-соединение позволяет внешней программе подключиться к базе и прочитать метаданные без запуска клиента. Это способ для регулярной автоматической выгрузки по расписанию.

Перед запуском проверьте два условия:

  • 🔌 На компьютере зарегистрирован COM-коннектор: regsvr32 "C:\Program Files\1cv8\<версия>\bin\comcntr.dll" от имени администратора.
  • ⚖️ Разрядность совпадает: 64-битный PowerShell работает только с 64-битной платформой, 32-битный — с 32-битной. Иначе объект V83.COMConnector не создастся.

Пример на PowerShell, который пишет значения одного перечисления в CSV:

$connector = New-Object -ComObject V83.COMConnector
$base = $connector.Connect('File="D:\Bases\Buh";Usr="Администратор";Pwd="";')

$enum   = $base.Metadata.Enums.Find("ЮридическоеФизическоеЛицо")
$values = $enum.EnumValues

$rows = for ($i = 0; $i -lt $values.Count(); $i++) {
    $v = $values.Get($i)
    [PSCustomObject]@{ Order = $i; Name = $v.Name; Synonym = $v.Synonym }
}

$rows | Export-Csv "D:\Dump\enum.csv" -Delimiter ';' -Encoding UTF8 -NoTypeInformation

Для серверной базы строка подключения выглядит так: Srvr="server";Ref="buh";Usr="...";Pwd="...";.

Каждое COM-подключение — это полноценный сеанс 1С, и он занимает клиентскую лицензию. Не держите соединение открытым дольше выгрузки и не храните пароль в тексте скрипта: заведите для выгрузки отдельного пользователя с минимальными правами.

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

Перед тем как отдать файл, сверьте три вещи:

  1. Количество значений. Оно должно совпадать с числом строк в форме списка из «Все функции».
  2. Кодировка. Откройте CSV в Excel через импорт данных с выбором UTF-8, а не двойным щелчком — иначе кириллица превратится в набор символов.
  3. Какая колонка ключевая. Получатель должен знать, что сопоставлять по имени, а синоним — только подпись.

Что чаще всего идёт не так:

Диагностика: выберите симптом

Ещё одна ловушка — сортировка. Если отсортировать список в Excel по алфавиту, порядок значений потеряется. Для выпадающих списков во внешней системе это важно, поэтому выгружайте колонку с порядком, даже если она кажется лишней.

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

Можно ли загрузить отредактированное перечисление обратно из Excel?
Нет. Значения перечисления меняются только в Конфигураторе или через расширение конфигурации. Файл годится для справки и маппинга, но не для загрузки.
Чем перечисление отличается от справочника при выгрузке?
Справочник хранит записи с реквизитами и выгружается любой обработкой обмена. У перечисления есть только значения, и выгружают их как часть метаданных.
Сохраняется ли UUID значения перечисления между базами?
Да, если базы на одной конфигурации: идентификатор задан в метаданных. Но для обмена надёжнее имя значения — его 1С и пишет в XML.
Как выгрузить перечисление в облачной базе 1С:Фреш?
Конфигуратора там нет. Остаётся способ через «Все функции» и сохранение табличного документа в Excel.
Почему в «Все функции» одно перечисление называется иначе, чем в коде?
В дереве показан синоним, а в коде используется имя. Это два разных свойства одного объекта.