Дополнительные сведения в 1С:Предприятие — это универсальный механизм для хранения произвольной информации, привязанной к объектам системы (справочникам, документам, регистрам). Он позволяет расширять функционал без модификации конфигурации, добавляя пользовательские поля с разными типами данных. Однако у многих разработчиков и администраторов возникает вопрос: где физически хранятся эти данные и как к ним получить доступ?

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

1. Архитектура хранения дополнительных сведений в 1С

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

  • 🔹 Гибко настраивать состав полей без изменения метаданных
  • 🔹 Привязывать сведения к любым объектам (даже тем, которые не поддерживают реквизиты)
  • 🔹 Управлять доступом на уровне отдельных полей

В файловом варианте (для старых версий или локальных баз) дополнительные сведения хранятся в том же файле 1Cv8.1CD, но логически выделены в отдельные структуры. В клиент-серверном варианте (на MS SQL, PostgreSQL или IBM DB2) для них создаются отдельные таблицы с префиксом _InfoRg или _InfoRgX, где X — номер регистра.

💡

Чтобы увидеть реальные таблицы дополнительных сведений в SQL-базе, используйте запрос SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%InfoRg%'. Это поможет идентифицировать все регистры сведений, включая пользовательские.

2. Системные таблицы базы данных: где искать данные

В SQL-варианте дополнительные сведения хранятся в двух типах таблиц:

  1. Таблица заголовков — содержит ссылки на объекты, к которым привязаны сведения (например, _InfoRg12345). Здесь хранятся идентификаторы записей и привязка к объекту (справочнику, документу).
  2. Таблица данных — содержит сами значения полей (например, _InfoRg12345VT, где VT — Value Table). Здесь данные хранятся в бинарном формате, что усложняет прямой просмотр.

Пример структуры для регистра сведений с идентификатором 12345:

ТаблицаНазначениеПример полей
_InfoRg12345Заголовки записейLineNumber, Recipient_RTRef (ссылка на объект)
_InfoRg12345VTЗначения полейLineNumber, ValueData (бинарные данные)
_InfoRg12345RРесурсы (если есть)LineNumber, Resource1

Для чтения данных напрямую через SQL требуется декодировать бинарные поля с помощью функций , например, ВосстановитьЗначение(). Прямой запрос к _InfoRg*VT без обработки вернёт нечитаемые данные.

Как декодировать бинарные данные в SQL?

Для декодирования используйте функцию CONVERT(VARBINARY(MAX), ValueData) в паре с 1С-скриптом, который вызовет ВосстановитьЗначение(). Например:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ВосстановитьЗначение(ДвоичныеДанные.Значение) КАК Значение

|ИЗ

| &Таблица КАК ДвоичныеДанные";

Запрос.УстановитьПараметр("Таблица", СсылкаНаТаблицуValueTable);

3. Особенности хранения в файловом варианте 1С

В файловом варианте (например, 1С:Предприятие 8.3 в локальном режиме) дополнительные сведения хранятся внутри файла базы 1Cv8.1CD в виде внутренних структур, аналогичных таблицам SQL. Доступ к ним осуществляется через встроенные механизмы платформы, а не через прямые запросы.

Ключевые моменты:

  • 🔹 Данные хранятся в иерархическом формате, оптимизированном для быстрого доступа по ссылкам.
  • 🔹 Для работы используются те же объекты конфигурации (РегистрСведений), но физически данные упакованы в двоичном виде.
  • 🔹 При повреждении файла базы дополнительные сведения могут быть утеряны без возможности восстановления стандартными средствами (требуется использование chdbfl.exe или специализированных утилит).
📊 Какой вариант 1С вы используете?
Клиент-серверный (SQL)
Файловый
Облачный (1C:Fresh)
Не знаю

4. Программный доступ к дополнительным сведениям

Для работы с дополнительными сведениями в предусмотрены стандартные методы:

1. Через объект конфигурации (например, РегистрСведений.ДополнительныеСведения):

Данные = РегистрСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();

Данные.Объект = Справочник.Номенклатура.НайтиПоНаименованию("Товар1");

Данные.Поле1 = "Значение1";

Данные.Записать();

2. Через запрос (универсальный способ):

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ДополнительныеСведения.Объект КАК Объект,

| ДополнительныеСведения.Поле1 КАК Поле1

|ИЗ

| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения

|ГДЕ

| ДополнительныеСведения.Объект = &Объект";

Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект);

- Убедиться, что регистр сведений существует в конфигурации

- Проверить права доступа текущего пользователя

- Создать резервную копию базы (при массовых изменениях)

- Тестировать изменения на копии базы-->

3. Через HTTP-сервисы или REST API (для интеграций):

Если дополнительные сведения нужно экспортировать во внешнюю систему, используйте ПубликацияВебСервиса или HTTPСервис. Пример:

Функция ПолучитьДополнительныеСведения(Объект) Экспорт

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 ...";

// ... логика выборки

Возврат Результат;

КонецФункции

💡

Используйте менеджер записей регистра сведений для атомарных операций — это гарантирует целостность данных при одновременном доступе нескольких пользователей.

5. Производительность и оптимизация

Дополнительные сведения удобны, но могут замедлять работу системы при неграмотном использовании. Основные проблемы:

  • 🐢 Избыточные данные: Хранение больших текстовых полей или файлов в дополнительных сведениях увеличивает размер базы.
  • 🔄 Частые изменения: Каждая запись в регистр сведений фиксируется в транзакции, что может блокировать другие операции.
  • 🔍 Сложные запросы: Связи по ссылкам в дополнительных сведениях могут тормозить выборки.

Рекомендации по оптимизации:

  1. Используйте индексируемые поля для часто запрашиваемых данных.
  2. Для больших объёмов данных рассмотрите вынос в отдельные справочники.
  3. Ограничивайте количество полей в одном регистре сведений (оптимально — до 20).
ПроблемаПричинаРешение
Медленные выборкиОтсутствие индексов на поля фильтрацииДобавить индексы в конфигураторе
Блокировки при записиДлинные транзакцииРазбивать операции на мелкие транзакции
Раздувание базыХранение бинарных данных (файлов)Использовать ХранилищеЗначений
💡

Для анализа производительности используйте Технологический журнал (параметр /LogFile при запуске 1С). Он покажет, какие запросы к дополнительным сведениям занимают больше всего времени.

6. Типичные ошибки и как их избежать

Работа с дополнительными сведениями чревата ошибками, особенно у новичков. Рассмотрим самые распространённые:

1. Потеря данных при изменении структуры

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

2. Ошибки привязки объектов

Дополнительные сведения привязываются к объектам по ссылке. Если объект будет удалён, сведения останутся "висеть" в базе как "сироты". Чтобы избежать этого, используйте обработку события ПередУдалением:

Процедура ПередУдалением(Объект, Отмена)

ДополнительныеСведения.Очистить(Объект);

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

3. Проблемы с правами доступа

По умолчанию дополнительные сведения наследуют права объекта, к которому привязаны. Однако если вы ограничиваете доступ к самому регистру, пользователи не смогут прочитать данные даже при наличии прав на объект.

Как восстановить потерянные дополнительные сведения?

Если данные были утеряны из-за изменения конфигурации, попробуйте:

1. Восстановить базу из резервной копии.

2. Использовать утилиту v8unpack для извлечения данных из файлового варианта.

3. Обратиться в службу поддержки 1С с логами конфигуратора.

В большинстве случаев восстановление возможно только при наличии бэкапа.

💡

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

7. Альтернативные способы хранения произвольных данных

Дополнительные сведения — не единственный способ хранить пользовательские данные в . Рассмотрим альтернативы:

СпособПлюсыМинусы
Реквизиты объектаПростота доступа, нет дополнительных таблицТребует изменения конфигурации
Хранилище значенийПодходит для больших данных (файлы, изображения)Сложнее управлять структурой
Внешние источники (JSON, XML)Гибкость, независимость от 1СТребует интеграции
Пользовательские таблицы SQLМаксимальная производительностьСложность поддержки

Когда стоит выбрать альтернативу:

  • 🔹 Если нужна высокая производительность (например, для аналитических отчётов) → используйте отдельные таблицы SQL.
  • 🔹 Если данные редко изменяются, но занимают много места → ХранилищеЗначений.
  • 🔹 Если требуется гибкая структура без привязки к объектам 1С → JSON в реквизите.
📊 Какой способ хранения дополнительных данных вы предпочитаете?
Дополнительные сведения
Реквизиты объектов
Хранилище значений
Внешние файлы (JSON/XML)

FAQ: Частые вопросы о дополнительных сведениях в 1С

Можно ли перенести дополнительные сведения из одной базы в другую?

Да, но только с помощью выгрузки/загрузки данных через XML или Конвертацию данных. Прямой перенос таблиц SQL не рекомендуется из-за различий в идентификаторах объектов.

Инструкция:

  1. Выгрузите данные в XML через ЗаписьXML.
  2. В целевой базе загрузите данные с сопоставлением ссылок.
Почему дополнительные сведения не отображаются в отчётах?

Чаще всего это связано с:

  • Отсутствием прав на чтение регистра сведений.
  • Неправильной привязкой к объекту (например, указана неверная ссылка).
  • Ошибками в запросе (неверное имя поля или регистра).

Проверьте запрос через ПояснитьЗапрос() или отладчик.

Как очистить все дополнительные сведения для определённого объекта?

Используйте метод Очистить() менеджера записей:

Менеджер = РегистрСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();

Менеджер.Очистить(СсылкаНаОбъект);

Для массовой очистки используйте запрос с УДАЛИТЬ.

Можно ли хранить в дополнительных сведениях файлы (PDF, Excel)?

Технически да, но не рекомендуется. Файлы раздувают базу и замедляют работу. Лучше использовать:

  • ХранилищеЗначений (для файлов до 100 МБ).
  • Внешние хранилища (например, 1С:Документооборот или облако).
Как найти все объекты, к которым привязаны дополнительные сведения?

Выполните запрос:

ВЫБРАТЬ РАЗЛИЧНЫЕ

ДополнительныеСведения.Объект КАК Объект

ИЗ

РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения

Для ускорения добавьте условие по типу объекта, например, ГДЕ ДополнительныеСведения.Объект ССЫЛКА Справочник.Номенклатура.