Разбираем устройство чужой конфигурации 1С: от дерева объектов до таблиц SQL
Содержание
Структуру 1С читают в Конфигураторе: Конфигурация → Открыть конфигурацию, дальше дерево метаданных, окно свойств объекта и команда «Поиск ссылок на объект» в контекстном меню. Для массового анализа подключают объект Метаданные во встроенном языке, функцию ПолучитьСтруктуруХраненияБазыДанных() и выгрузку конфигурации в XML-файлы.
Этого набора хватает и разработчику, которому достался чужой код, и администратору, который хочет понять, в какой таблице SQL лежит справочник и почему база весит 80 ГБ. Главное — идти от общего к частному: сначала ветки дерева и подсистемы, потом один объект целиком, потом его связи. Иначе в тысячах объектов типовой БП или ERP легко утонуть.
Что входит в структуру конфигурации 1С
Конфигурация — это описание прикладного решения: какие в нём объекты, какие у них поля, формы, макеты и модули. Платформа по этому описанию строит таблицы базы данных и интерфейс. Когда говорят «прочитать структуру 1С», обычно имеют в виду три слоя.
- 🧱 Метаданные — объекты конфигурации: справочники, документы, регистры, планы счетов, перечисления, отчёты, обработки. У каждого объекта есть реквизиты, табличные части, формы, макеты, модули.
- 🔗 Связи — типы реквизитов (поле документа ссылается на справочник), движения документов по регистрам, подписки на события, подсистемы.
- 🗄️ Хранение — физические таблицы СУБД, в которые платформа превращает объекты:
_Reference…,_Document…,_AccumRg…, поля_Fld….
Зачем это нужно на практике:
- Найти, откуда берётся цифра в отчёте или поле печатной формы.
- Оценить, что сломается при доработке реквизита.
- Подготовить обмен или выгрузку во внешнюю систему — понять, какие поля есть у объекта.
- Разобраться с «тяжёлыми» таблицами при обслуживании базы на MS SQL или PostgreSQL.
- Принять дела у другого программиста и составить карту доработок.
Инструменты для изучения структуры: что выбрать
Задачи разные, и инструмент под каждую свой. Сводная таблица:
| Инструмент | Что показывает | Когда брать |
|---|---|---|
| Дерево конфигурации в Конфигураторе | Все объекты, их реквизиты, формы, модули | Первое знакомство, точечный разбор объекта |
| «Поиск ссылок на объект» | Где объект используется в других метаданных | Оценка последствий доработки |
| «Глобальный поиск» по модулям | Где встречается имя реквизита или процедуры в коде | Поиск логики заполнения поля |
| «Отчет по конфигурации» | Текстовое описание объектов со свойствами | Документирование, сравнение «на бумаге» |
Объект Метаданные в коде | Любые сведения о структуре, программно | Массовый анализ, свои отчёты |
ПолучитьСтруктуруХраненияБазыДанных() | Соответствие объектов и таблиц СУБД | Администрирование, анализ размеров таблиц |
| Выгрузка в XML-файлы / EDT | Конфигурация как набор файлов | Поиск по тексту, Git, автоматизация |
| Синтакс-помощник | Описание методов и свойств платформы | Проверить, что умеет объект ОбъектМетаданных |
Для разбора одной формы или одного документа хватает Конфигуратора. Если вопрос звучит как «найти все объекты, где…», сразу переходите к коду или к выгрузке в файлы — вручную по дереву вы это не соберёте.
Как прочитать структуру 1С в Конфигураторе: по шагам
Шаг 1. Откройте конфигурацию
Запустите базу в режиме «Конфигуратор» и выберите Конфигурация → Открыть конфигурацию. Слева появится дерево. Просто открыть и читать конфигурацию можно при работающих пользователях — монопольный режим для этого не нужен.
Если база на поддержке и вы ничего не меняете, ничего снимать с поддержки не надо. Чтение не трогает ни данные, ни конфигурацию базы данных.
Шаг 2. Пройдите по веткам дерева
Ветки дерева идут в устойчивом порядке: «Общие», «Константы», «Справочники», «Документы», «Журналы документов», «Перечисления», «Отчеты», «Обработки», далее планы видов характеристик, планы счетов, планы видов расчёта, регистры сведений, накопления, бухгалтерии и расчёта, бизнес-процессы и задачи.
Ветка «Общие» многое объясняет про архитектуру. Там лежат:
- 📦 Подсистемы — разделы интерфейса и логические группы объектов;
- ⚙️ Общие модули — основная серверная и клиентская логика;
- 🔔 Подписки на события — код, который срабатывает при записи или проведении объектов, хотя в модуле самого объекта его нет;
- 🔐 Роли — права доступа ;
- 🧩 Функциональные опции — переключатели, которые прячут или показывают реквизиты.
Шаг 3. Разберите один объект целиком
Двойной щелчок по объекту открывает окно редактирования с вкладками. Для документа самые полезные:
- «Данные» — реквизиты и табличные части с типами;
- «Движения» — по каким регистрам документ делает записи;
- «Формы», «Макеты» — интерфейс и печатные формы;
- «Прочее» — модуль объекта и модуль менеджера.
Окно «Свойства» (палитра свойств) показывает имя, синоним, тип реквизита, признак индексирования, проверку заполнения. Именно здесь видно, что поле Контрагент имеет тип СправочникСсылка.Контрагенты, а не просто «Контрагент».
Шаг 4. Найдите, где объект используется
Щёлкните правой кнопкой по объекту в дереве и выберите «Поиск ссылок на объект». Конфигуратор выведет список мест: реквизиты других объектов с этим типом, роли, подсистемы, формы, регистры. Это главный способ оценить последствия перед изменением.
Для поиска по коду используйте Правка → Глобальный поиск. Ищите по имени реквизита: например, .СтавкаНДС найдёт все модули, где это поле читается или заполняется. Отметьте поиск во всех модулях конфигурации, а не только в текущем окне.
Шаг 5. Сохраните описание
Конфигурация → Отчет по конфигурации формирует текстовое описание выбранных объектов со свойствами, реквизитами и типами. Его удобно отдать аналитику или положить в документацию проекта. Для большой конфигурации отметьте только нужные ветки, иначе отчёт выйдет на сотни страниц.
Программное чтение структуры: объект Метаданные
Всё, что видно в дереве, доступно из встроенного языка через свойство глобального контекста Метаданные. Оно возвращает объект конфигурации с коллекциями Справочники, Документы, РегистрыНакопления, РегистрыСведений и так далее. Каждый элемент коллекции — ОбъектМетаданных со свойствами Имя, Синоним, Реквизиты, ТабличныеЧасти и методом ПолноеИмя().
Список всех справочников с реквизитами и их типами:
Для Каждого МетаСправочник Из Метаданные.Справочники Цикл
Сообщить(МетаСправочник.ПолноеИмя() + " — " + МетаСправочник.Синоним);
Для Каждого Реквизит Из МетаСправочник.Реквизиты Цикл
Сообщить(" " + Реквизит.Имя + ": " + Строка(Реквизит.Тип));
КонецЦикла;
КонецЦикла;
Полезные методы для навигации:
| Метод | Что делает |
|---|---|
Метаданные.НайтиПоПолномуИмени("Документ.РеализацияТоваровУслуг") | Возвращает объект метаданных по строке или Неопределено |
Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)) | Определяет, к какому объекту относится ссылка |
Ссылка.Метаданные() | То же из самой ссылки или объекта |
ОбъектМетаданных.ПолноеИмя() | Строка вида Справочник.Номенклатура |
Реквизит.Тип.СодержитТип(Тип(...)) | Проверка, может ли поле хранить значение нужного типа |
Если поле составного типа, Строка(Реквизит.Тип) перечислит все типы через запятую. Для проверки в коде используйте СодержитТип() или массив Реквизит.Тип.Типы().
Как узнать имена таблиц в СУБД
Функция ПолучитьСтруктуруХраненияБазыДанных() возвращает таблицу значений с колонками ИмяТаблицыХранения, ИмяТаблицы, Метаданные, Назначение и вложенной таблицей Поля. Вызывать её нужно на сервере или в толстом клиенте.
&НаСервере
Процедура ПоказатьТаблицыСправочникаНаСервере()
ОбъектыМД = Новый Массив;
ОбъектыМД.Добавить(Метаданные.Справочники.Номенклатура);
Структура = ПолучитьСтруктуруХраненияБазыДанных(ОбъектыМД, Истина);
Для Каждого Строка Из Структура Цикл
Сообщить(Строка.ИмяТаблицы + " → " + Строка.ИмяТаблицыХранения);
Для Каждого Поле Из Строка.Поля Цикл
Сообщить(" " + Поле.ИмяПоля + " → " + Поле.ИмяПоляХранения);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Второй параметр Истина выдаёт имена в терминах СУБД (_Reference42, _Fld1530), Ложь — в терминах платформы. В одной выборке вы получите основную таблицу справочника, таблицы табличных частей и служебные таблицы итогов, если это регистр.
Читать таблицы напрямую из SQL можно для анализа размеров и диагностики, но писать в них в обход платформы нельзя: это ломает целостность базы и итоги регистров.
Как найти связи и зависимости между объектами
Связи в 1С бывают четырёх видов, и каждый ищется по-своему.
- 🔗 Ссылочные поля. Реквизит документа хранит ссылку на справочник. Находятся через «Поиск ссылок на объект» или программно — проверкой типов реквизитов.
- 📊 Движения. Документ пишет в регистры. Смотрите вкладку «Движения» документа или свойство
Движенияу метаданных документа. - 🔔 Подписки на события и общие модули. Логика при записи висит вне объекта. Откройте ветку «Общие → Подписки на события» и посмотрите свойство «Источник».
- 🧩 Функциональные опции и подсистемы. Определяют, видит ли пользователь реквизит или раздел. Отсюда частые вопросы «почему у меня нет такого поля».
Код, который находит все документы, двигающие нужный регистр:
МетаРегистр = Метаданные.РегистрыНакопления.ТоварыНаСкладах;
Для Каждого МетаДокумент Из Метаданные.Документы Цикл
Если МетаДокумент.Движения.Содержит(МетаРегистр) Тогда
Сообщить(МетаДокумент.ПолноеИмя());
КонецЕсли;
КонецЦикла;
А этот — все документы, у которых в шапке или в табличной части есть поле с типом «Контрагенты»:
ИскомыйТип = Тип("СправочникСсылка.Контрагенты");
Для Каждого МетаДокумент Из Метаданные.Документы Цикл
Для Каждого Реквизит Из МетаДокумент.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ИскомыйТип) Тогда
Сообщить(МетаДокумент.Имя + "." + Реквизит.Имя);
КонецЕсли;
КонецЦикла;
Для Каждого ТЧ Из МетаДокумент.ТабличныеЧасти Цикл
Для Каждого Реквизит Из ТЧ.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(ИскомыйТип) Тогда
Сообщить(МетаДокумент.Имя + "." + ТЧ.Имя + "." + Реквизит.Имя);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Имена ТоварыНаСкладах и Контрагенты замените на объекты своей конфигурации: в разных типовых решениях регистры называются по-разному. Если объекта с таким именем нет, обращение через точку вызовет ошибку — в этом случае используйте НайтиПоПолномуИмени() и проверку на Неопределено.
Разбор задач на реальных примерах
Откуда берётся поле в печатной форме
Задача: в счёте на оплату печатается не тот банковский счёт. Порядок действий:
- Откройте документ в дереве, вкладка «Макеты». Найдите макет печатной формы и посмотрите имя параметра в нужной ячейке.
- Глобальным поиском найдите это имя параметра в модулях. Обычно оно заполняется в модуле менеджера документа или в общем модуле печати.
- Дойдите до запроса, который выбирает данные, и посмотрите, из какого реквизита берётся счёт.
В типовых конфигурациях на БСП печать часто вынесена в общие модули с именами вида УправлениеПечатью…, поэтому поиск по одному модулю документа ничего не даст.
Почему документ не попадает в отчёт
Отчёт строится по регистру, а документ в этот регистр не пишет. Откройте схему компоновки отчёта, посмотрите, из какой таблицы идёт запрос. Затем проверьте вкладку «Движения» документа. Если регистра там нет — дело не в данных, а в структуре: этот вид документа в отчёт не попадёт в принципе.
Какая таблица SQL раздула базу
Администратор видит в СУБД таблицу _InfoRg12345 на 30 ГБ. Чтобы понять, что это, вызовите ПолучитьСтруктуруХраненияБазыДанных() без параметров и найдите строку с этим ИмяТаблицыХранения. Колонка Метаданные даст полное имя регистра. Дальше уже понятно, к кому идти: к разработчику или к пользователям, которые копят историю.
Выгрузка в файлы и автоматизация анализа
Когда объектов тысячи, удобнее работать с конфигурацией как с папкой файлов. Конфигурация → Выгрузить конфигурацию в файлы сохраняет её в XML: в корне Configuration.xml, дальше папки по видам объектов — Catalogs, Documents, AccumulationRegisters, CommonModules и другие. Модули лежат отдельными файлами .bsl.
Это же делается из командной строки, без открытия Конфигуратора вручную:
"C:\Program Files\1cv8\8.3.24.1467\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /DumpConfigToFiles "D:\Dump\Buh" /Out "D:\Dump\log.txt"
Для клиент-серверной базы вместо /F указывают /S "сервер\имябазы". Путь к 1cv8.exe подставьте под свою версию платформы. Параметр /Out пишет журнал — без него при ошибке непонятно, что пошло не так.
Что даёт выгрузка:
- 🔍 поиск по тексту любым редактором или
grep/findstr— например, все места, где упоминается реквизит; - 🗂️ сравнение версий через Git: видно, какие объекты и строки кода поменялись между релизами;
- 📈 свои отчёты: скрипт на Python или PowerShell разбирает XML и строит список объектов, реквизитов, типов;
- 🧰 работа в EDT — 1C:Enterprise Development Tools открывает такую выгрузку как проект с навигацией по ссылкам и поиском использования.
Если нужен анализ прямо в базе, оформите код из раздела про Метаданные во внешнюю обработку
. Результат выводите не в Сообщить(), а в таблицу значений или табличный документ — так его удобно сохранить в Excel.
Выгружайте конфигурацию на копии или в нерабочее время, если база большая: выгрузка нагружает сервер, а пользователи могут заметить замедление.
Частые ошибки при разборе структуры
- ❌ Путать имя и синоним. В коде и запросах работает только
Имя(РеализацияТоваровУслуг), синоним «Реализация (акт, накладная)» — это подпись для пользователя. - ❌ Не смотреть расширения. Часть доработок живёт не в основной конфигурации, а в расширениях:
Конфигурация → Расширения конфигурации. Обработчик там может перехватывать типовую процедуру, и в основном модуле вы его не увидите. - ❌ Игнорировать подписки на события. Код при записи документа ищут в модуле объекта, а он висит в общем модуле через подписку.
- ❌ Зашивать имена таблиц СУБД.
_Reference42в одной базе и в другой — разные справочники. Имена назначаются при создании объектов и после реструктуризации могут отличаться. Всегда берите их изПолучитьСтруктуруХраненияБазыДанных()для конкретной базы. - ❌ Путать основную конфигурацию и конфигурацию базы данных. Если в Конфигураторе есть изменения, не применённые через «Обновить конфигурацию
базы данных», дерево показывает не то, с чем работают пользователи. Рабочую версию открывают через
Конфигурация → Конфигурация базы данных → Открыть конфигурацию БД.
Частые вопросы
Можно ли посмотреть структуру 1С без Конфигуратора?
Метаданные доступен из внешней обработки в режиме «1С:Предприятие». Права на запуск внешних обработок при этом нужны.Где посмотреть структуру базы, если конфигурация закрыта паролем или поставлена без возможности изменения?
Как узнать, какие объекты изменены относительно типовой?
Конфигурация → Сравнить конфигурации. Отчёт покажет изменённые объекты, реквизиты и модули.