Из чего собрана конфигурация 1С: дерево объектов и работа с ним
Содержание
Объект конфигурации 1С — это описание одной сущности прикладного решения: справочника «Номенклатура», документа «Реализация товаров и услуг», регистра накопления «Товары на складах». Все объекты видны в Конфигураторе в дереве Конфигурация → Открыть конфигурацию. Платформа по этому описанию сама создаёт таблицы в базе, формы, права и программные типы.
Работать с объектами можно тремя способами. Пользователь видит их как разделы, списки и отчёты. Администратор настраивает права и функциональные опции. Разработчик меняет сами объекты: в основной конфигурации, если она снята с поддержки, или через расширение, если типовую нужно обновлять без потерь. Всё сказанное относится к платформе 8.3 и одинаково для БП 3.0, ЗУП 3.1, УТ 11 и других решений.
Объект конфигурации и его роль в прикладном решении
Конфигурация — это набор объектов и связей между ними. Платформа 1С:Предприятие сама по себе ничего не «знает» о складе или зарплате. Всю предметную логику задают объекты конфигурации.
У каждого объекта есть три слоя:
- 🧱 Структура — реквизиты, табличные части, измерения и ресурсы. По ним платформа строит таблицы СУБД.
- 🖥 Интерфейс — формы, команды, макеты печатных форм.
- ⚙️ Поведение — модуль объекта, модуль менеджера, модули форм, обработчики подписок на события.
Объект создаётся в дереве конфигурации, после чего выполняется Конфигурация → Обновить конфигурацию базы данных (F7). Только на этом шаге платформа меняет структуру таблиц. До обновления изменения живут лишь в основной конфигурации.
Отличие объекта от «таблицы в базе» важно для понимания. Один справочник с двумя табличными частями даёт в СУБД три таблицы, а иногда и больше: для итогов, истории, полнотекстового поиска. Разработчик работает с объектом, а не с таблицами.
Виды объектов конфигурации: классификация с примерами
Дерево конфигурации делится на ветки. Каждая ветка — свой вид объекта со своими свойствами и поведением.
Прикладные объекты
| Вид объекта | Что хранит | Пример в типовых |
|---|---|---|
| Константы | Одно значение на всю базу | Основная валюта, флаг использования складов |
| Справочники | Списки однородных элементов | Номенклатура, Контрагенты, Сотрудники |
| Документы | Факты хозяйственной жизни с датой | Поступление товаров, Начисление зарплаты |
| Журналы документов | Общий список нескольких видов документов | Журнал кассовых документов |
| Перечисления | Фиксированный набор значений, задаётся только в Конфигураторе | Виды операций, Ставки НДС |
| Отчёты и обработки | Вывод данных и сервисные действия | ОСВ, Групповое перепроведение |
| Планы видов характеристик | Описания свойств с типом значения | Дополнительные реквизиты и сведения |
| Планы счетов | Счета с субконто | Хозрасчётный |
| Планы видов расчёта | Виды начислений и удержаний | Начисления в ЗУП |
Предопределённые элементы
У справочников, планов счетов и планов видов характеристик бывают предопределённые элементы. Их задают в Конфигураторе, и код обращается к ним по имени: Справочники.ВидыКонтактнойИнформации.EmailКонтрагента, ПланыСчетов.Хозрасчетный.Касса. Пользователь может изменить наименование такого элемента, но удалить его нельзя. Если программа ругается на отсутствующий предопределённый элемент, причина почти всегда в задвоении или ручной пометке на удаление, а не в самом объекте.
Регистры
Регистры хранят итоговую и накопленную информацию. Их обычно заполняют документы при проведении — это называется движениями.
- 📊 Регистр сведений — значения во времени или без времени: курсы валют, цены, адреса.
- 📦 Регистр накопления — остатки и обороты: товары на складах, взаиморасчёты.
- 📒 Регистр бухгалтерии — проводки по плану счетов.
- 💰 Регистр расчёта — расчёты с периодом действия, например начисления по сотрудникам.
Процессы и внешние данные
- 🔄 Бизнес-процессы и задачи — маршруты согласования и задания исполнителям.
- 🔌 Внешние источники данных — подключение таблиц сторонней СУБД как объектов 1С.
Общие объекты
Ветка «Общие» — служебный слой. В ней лежат подсистемы, общие модули, роли, параметры сеанса, общие реквизиты, планы обмена, подписки на события, регламентные задания, функциональные опции, определяемые типы, общие формы, команды, макеты и картинки, стили, HTTP- и web-сервисы, XDTO-пакеты.
Пользователь их напрямую не видит, но от них зависит почти всё. Роли определяют права, подсистемы — разделы интерфейса, функциональные опции — видимость команд и полей.
Объекты конфигурации и метаданные: в чём разница
Эти термины часто путают. Разница простая:
- Объект конфигурации (объект метаданных) — описание: «справочник Номенклатура, реквизиты Артикул и Единица измерения, код длиной 11».
- Объект данных — конкретная запись: «Бумага А4, артикул 10045, пачка».
Метаданные — это вся совокупность описаний. В коде они доступны через глобальное свойство Метаданные. По нему программа узнаёт, какие объекты есть в конфигурации и как они устроены.
Для каждого объекта конфигурации платформа порождает набор типов. Для справочника «Номенклатура» это, например:
| Тип | Для чего |
|---|---|
СправочникМенеджер.Номенклатура | Поиск, создание элементов, выборка |
СправочникСсылка.Номенклатура | Ссылка на элемент, хранится в реквизитах других объектов |
СправочникОбъект.Номенклатура | Изменение и запись элемента |
СправочникВыборка.Номенклатура | Перебор элементов |
Пример: вывести все документы конфигурации с их синонимами.
Для Каждого ОбъектМД Из Метаданные.Документы Цикл
Сообщить(ОбъектМД.Имя + " — " + ОбъектМД.Синоним);
КонецЦикла;
Ещё один частый приём — узнать, к какому объекту относится ссылка:
ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка));
Если Метаданные.Документы.Содержит(ОбъектМД) Тогда
Сообщить("Это документ: " + ОбъектМД.ПолноеИмя());
КонецЕсли;
У объекта есть имя и синоним. Имя (РеализацияТоваровУслуг) используется в коде и не содержит пробелов. Синоним («Реализация (акт, накладная, УПД)») видит пользователь. Меняйте синоним свободно, а имя — только с поиском всех мест в коде.
Подчинённость и иерархия объектов
В дереве у каждого объекта есть подчинённые элементы. У документа это реквизиты, табличные части с их реквизитами, формы, команды и макеты. Они не существуют отдельно от владельца: удалили документ — исчезли и его формы.
Кроме вложенности в дереве, есть ещё несколько видов подчинения.
Подчинённые справочники
У справочника есть свойство «Владельцы» на закладке «Владельцы». Если указать в нём «Контрагенты», справочник «Договоры контрагентов» станет подчинённым. Каждый договор будет принадлежать конкретному контрагенту, а в списке договоры отберутся по владельцу.
Иерархия внутри справочника
Справочник может быть иерархическим: группы и элементы или только элементы. Так устроены папки номенклатуры. Глубину иерархии можно ограничить в свойствах.
Регистры, подчинённые регистратору
Регистр накопления всегда подчинён регистратору: записи в него делает документ. Регистр сведений может работать в режиме «Подчинение регистратору» или «Независимый». В первом случае записи удаляются вместе с отменой проведения документа.
Подсистемы
Подсистемы тоже вкладываются друг в друга. Верхний уровень даёт разделы панели разделов, вложенные — группы внутри раздела. Один объект может входить сразу в несколько подсистем.
Как работать с объектами на практике
Набор действий одинаков для любых решений. Пути ниже — из Конфигуратора платформы 8.3.
Создать объект
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - Выделите нужную ветку, например «Справочники», и нажмите кнопку добавления или клавишу Insert.
- Задайте имя, синоним, реквизиты, табличные части.
- Включите объект в подсистему и дайте права в ролях. Без прав пользователь объект не увидит.
- Сохраните и выполните
Конфигурация → Обновить конфигурацию базы данных.
Найти, где используется объект
Перед удалением или переименованием проверьте, на что объект влияет. В контекстном меню объекта в дереве есть команда поиска ссылок на объект. Она покажет реквизиты других объектов, роли, подсистемы и формы, где он упомянут.
Для поиска упоминаний в коде используйте глобальный поиск: Правка → Глобальный поиск или Ctrl+Shift+F. Ищите по имени объекта.
Изменить типовую конфигурацию безопасно
Если база на поддержке поставщика, правьте не основную конфигурацию, а расширение. Расширения появились в платформе 8.3.6. Новый реквизит, своя печатная форма, изменённый обработчик — всё это делается в расширении через заимствование объекта. Типовая при этом остаётся на поддержке и обновляется без объединения.
Конфигурация → Расширения конфигурации→ добавить расширение.- В дереве основной конфигурации на нужном объекте — команда «Добавить в расширение».
- Внутри заимствованного объекта добавьте реквизит или форму.
- Обновите конфигурацию базы данных для расширения.
Расширение с новыми реквизитами меняет структуру данных. Перед подключением к рабочей базе сохраните копию через Администрирование → Выгрузить информационную базу.
Получить отчёт по конфигурации
Конфигурация → Отчет по конфигурации выгружает описание всех объектов в текстовый файл или табличный документ. Удобно, чтобы сравнить состав реквизитов до и после доработки или передать структуру подрядчику.
Анализ и оптимизация объектов
Проблемы со скоростью часто идут не от «медленного сервера», а от устройства объектов. Что стоит проверить.
Индексы
Реквизит, по которому часто ищут или фильтруют, должен иметь свойство «Индексировать». Варианты: «Индексировать» и «Индексировать с доп. упорядочиванием». Измерения регистров индексируются платформой, но порядок измерений влияет на скорость: первым ставьте то, по которому отбор идёт чаще всего.
Не индексируйте всё подряд. Каждый индекс замедляет запись и занимает место.
Составные типы
Реквизит с составным типом из десятка ссылок неудобен для запросов: при разыменовании через точку платформа соединяет все таблицы из типа. Если реквизит может ссылаться на несколько видов объектов, обращайтесь к нему с явным приведением через ВЫРАЗИТЬ в запросе.
Хранилища значений
Файлы и картинки в реквизите типа ХранилищеЗначения прямо в таблице справочника раздувают её. Типовые решения выносят файлы в отдельные справочники присоединённых файлов или на диск. Так же поступайте в своих доработках.
Размер таблиц
Какой объект занимает больше всего места, покажет сама СУБД. Сопоставить имена таблиц СУБД с объектами конфигурации помогает функция ПолучитьСтруктуруХраненияБазыДанных():
Структура = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого Строка Из Структура Цикл
Если ЗначениеЗаполнено(Строка.Метаданные) Тогда
Сообщить(Строка.ИмяТаблицы + " → " + Строка.Метаданные);
КонецЕсли;
КонецЦикла;
Выполнять её нужно на сервере. Результат — таблица значений с именами таблиц СУБД и полным именем объекта.
Проверка конфигурации
Конфигурация → Проверка конфигурации находит ссылки на несуществующие объекты, ошибки в модулях и неиспользуемые процедуры. Запускайте её после каждой крупной доработки, до переноса в рабочую базу.
Типовые конфигурации: что в них устроено иначе
Типовые решения 1С собраны на одних и тех же объектах, но по своим правилам.
- 📚 Библиотека стандартных подсистем (БСП). Общие модули, роли, справочники присоединённых файлов, дополнительные реквизиты. Многие доработки делаются её механизмами без изменения структуры: например, дополнительные реквизиты через план видов характеристик добавляются в режиме «Предприятие», без Конфигуратора.
- 🏷 Префикс «Удалить». Объекты и реквизиты, которые разработчик вывел из употребления, переименовывают с префиксом
Удалить. Данные в них остаются для переноса при обновлении. Использовать их в своих доработках не стоит — в следующих релизах они исчезнут. - 🔒 Поддержка поставщика. Объект на замке нельзя изменить, пока не включена возможность изменения. Включение возможности изменения превращает каждое следующее обновление в объединение конфигураций. Это главный довод в пользу расширений.
- 🎚 Функциональные опции. Многие объекты в типовых есть всегда, но скрыты, пока в настройках программы не включена соответствующая функция. Если пользователь «не видит документ», сначала проверьте настройки функциональности (в БП 3.0 —
Главное → Функциональность), а уже потом права.
Ошибки, которые дорого обходятся
- ❌ Удаление реквизита в рабочей базе. При обновлении структуры колонка удаляется вместе с данными. Безопаснее сначала переименовать реквизит с префиксом
Удалить, перенести данные и удалить его в следующей версии. - ❌ Смена типа реквизита. Если поменять «Строка» на ссылку на справочник, платформа не сможет преобразовать значения, и они пропадут. Создайте новый реквизит и заполните его обработкой.
- ❌ Переименование без поиска по коду. Связи в метаданных платформа обновит сама, а текст модулей, запросов и внешних обработок — нет. Внешние отчёты сломаются молча, до первого запуска.
- ❌ Новый объект без прав. Объект создан, база обновлена, а пользователь пишет «нет раздела». Не добавлен в роль или подсистему.
- ❌ Перечисление вместо справочника. Список, который пользователи захотят пополнять, нельзя делать перечислением: каждое новое значение потребует правки конфигурации.