Дополнительные сведения в 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-варианте дополнительные сведения хранятся в двух типах таблиц:
- Таблица заголовков — содержит ссылки на объекты, к которым привязаны сведения (например,
_InfoRg12345). Здесь хранятся идентификаторы записей и привязка к объекту (справочнику, документу). - Таблица данных — содержит сами значения полей (например,
_InfoRg12345VT, гдеVT— Value Table). Здесь данные хранятся в бинарном формате, что усложняет прямой просмотр.
Пример структуры для регистра сведений с идентификатором 12345:
| Таблица | Назначение | Пример полей |
|---|---|---|
_InfoRg12345 | Заголовки записей | LineNumber, Recipient_RTRef (ссылка на объект) |
_InfoRg12345VT | Значения полей | LineNumber, ValueData (бинарные данные) |
_InfoRg12345R | Ресурсы (если есть) | LineNumber, Resource1 |
Для чтения данных напрямую через SQL требуется декодировать бинарные поля с помощью функций 1С, например, ВосстановитьЗначение(). Прямой запрос к _InfoRg*VT без обработки вернёт нечитаемые данные.
Как декодировать бинарные данные в SQL?
Для декодирования используйте функцию CONVERT(VARBINARY(MAX), ValueData) в паре с 1С-скриптом, который вызовет ВосстановитьЗначение(). Например:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВосстановитьЗначение(ДвоичныеДанные.Значение) КАК Значение
|ИЗ
| &Таблица КАК ДвоичныеДанные";
Запрос.УстановитьПараметр("Таблица", СсылкаНаТаблицуValueTable);
3. Особенности хранения в файловом варианте 1С
В файловом варианте (например, 1С:Предприятие 8.3 в локальном режиме) дополнительные сведения хранятся внутри файла базы 1Cv8.1CD в виде внутренних структур, аналогичных таблицам SQL. Доступ к ним осуществляется через встроенные механизмы платформы, а не через прямые запросы.
Ключевые моменты:
- 🔹 Данные хранятся в иерархическом формате, оптимизированном для быстрого доступа по ссылкам.
- 🔹 Для работы используются те же объекты конфигурации (
РегистрСведений), но физически данные упакованы в двоичном виде. - 🔹 При повреждении файла базы дополнительные сведения могут быть утеряны без возможности восстановления стандартными средствами (требуется использование chdbfl.exe или специализированных утилит).
4. Программный доступ к дополнительным сведениям
Для работы с дополнительными сведениями в 1С предусмотрены стандартные методы:
1. Через объект конфигурации (например, РегистрСведений.ДополнительныеСведения):
Данные = РегистрСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
Данные.Объект = Справочник.Номенклатура.НайтиПоНаименованию("Товар1");
Данные.Поле1 = "Значение1";
Данные.Записать();
2. Через запрос (универсальный способ):
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Объект КАК Объект,
| ДополнительныеСведения.Поле1 КАК Поле1
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект";
Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект);
- Убедиться, что регистр сведений существует в конфигурации
- Проверить права доступа текущего пользователя
- Создать резервную копию базы (при массовых изменениях)
- Тестировать изменения на копии базы-->
3. Через HTTP-сервисы или REST API (для интеграций):
Если дополнительные сведения нужно экспортировать во внешнюю систему, используйте ПубликацияВебСервиса или HTTPСервис. Пример:
Функция ПолучитьДополнительныеСведения(Объект) Экспорт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 ...";
// ... логика выборки
Возврат Результат;
КонецФункции
Используйте менеджер записей регистра сведений для атомарных операций — это гарантирует целостность данных при одновременном доступе нескольких пользователей.
5. Производительность и оптимизация
Дополнительные сведения удобны, но могут замедлять работу системы при неграмотном использовании. Основные проблемы:
- 🐢 Избыточные данные: Хранение больших текстовых полей или файлов в дополнительных сведениях увеличивает размер базы.
- 🔄 Частые изменения: Каждая запись в регистр сведений фиксируется в транзакции, что может блокировать другие операции.
- 🔍 Сложные запросы: Связи по ссылкам в дополнительных сведениях могут тормозить выборки.
Рекомендации по оптимизации:
- Используйте индексируемые поля для часто запрашиваемых данных.
- Для больших объёмов данных рассмотрите вынос в отдельные справочники.
- Ограничивайте количество полей в одном регистре сведений (оптимально — до 20).
| Проблема | Причина | Решение |
|---|---|---|
| Медленные выборки | Отсутствие индексов на поля фильтрации | Добавить индексы в конфигураторе |
| Блокировки при записи | Длинные транзакции | Разбивать операции на мелкие транзакции |
| Раздувание базы | Хранение бинарных данных (файлов) | Использовать ХранилищеЗначений |
Для анализа производительности используйте Технологический журнал (параметр /LogFile при запуске 1С). Он покажет, какие запросы к дополнительным сведениям занимают больше всего времени.
6. Типичные ошибки и как их избежать
Работа с дополнительными сведениями чревата ошибками, особенно у новичков. Рассмотрим самые распространённые:
1. Потеря данных при изменении структуры
Если вы удалите поле из регистра сведений в конфигураторе, все данные этого поля будут безвозвратно утеряны. Всегда делайте резервную копию перед изменением структуры!
2. Ошибки привязки объектов
Дополнительные сведения привязываются к объектам по ссылке. Если объект будет удалён, сведения останутся "висеть" в базе как "сироты". Чтобы избежать этого, используйте обработку события ПередУдалением:
Процедура ПередУдалением(Объект, Отмена)
ДополнительныеСведения.Очистить(Объект);
КонецПроцедуры
3. Проблемы с правами доступа
По умолчанию дополнительные сведения наследуют права объекта, к которому привязаны. Однако если вы ограничиваете доступ к самому регистру, пользователи не смогут прочитать данные даже при наличии прав на объект.
Как восстановить потерянные дополнительные сведения?
Если данные были утеряны из-за изменения конфигурации, попробуйте:
1. Восстановить базу из резервной копии.
2. Использовать утилиту v8unpack для извлечения данных из файлового варианта.
3. Обратиться в службу поддержки 1С с логами конфигуратора.
В большинстве случаев восстановление возможно только при наличии бэкапа.
Всегда тестируйте изменения в дополнительных сведениях на копии базы. Даже небольшая ошибка в конфигурации может привести к потере критичных данных.
7. Альтернативные способы хранения произвольных данных
Дополнительные сведения — не единственный способ хранить пользовательские данные в 1С. Рассмотрим альтернативы:
| Способ | Плюсы | Минусы |
|---|---|---|
| Реквизиты объекта | Простота доступа, нет дополнительных таблиц | Требует изменения конфигурации |
| Хранилище значений | Подходит для больших данных (файлы, изображения) | Сложнее управлять структурой |
| Внешние источники (JSON, XML) | Гибкость, независимость от 1С | Требует интеграции |
| Пользовательские таблицы SQL | Максимальная производительность | Сложность поддержки |
Когда стоит выбрать альтернативу:
- 🔹 Если нужна высокая производительность (например, для аналитических отчётов) → используйте отдельные таблицы SQL.
- 🔹 Если данные редко изменяются, но занимают много места →
ХранилищеЗначений. - 🔹 Если требуется гибкая структура без привязки к объектам 1С → JSON в реквизите.
FAQ: Частые вопросы о дополнительных сведениях в 1С
Можно ли перенести дополнительные сведения из одной базы в другую?
Да, но только с помощью выгрузки/загрузки данных через XML или Конвертацию данных. Прямой перенос таблиц SQL не рекомендуется из-за различий в идентификаторах объектов.
Инструкция:
- Выгрузите данные в XML через
ЗаписьXML. - В целевой базе загрузите данные с сопоставлением ссылок.
Почему дополнительные сведения не отображаются в отчётах?
Чаще всего это связано с:
- Отсутствием прав на чтение регистра сведений.
- Неправильной привязкой к объекту (например, указана неверная ссылка).
- Ошибками в запросе (неверное имя поля или регистра).
Проверьте запрос через ПояснитьЗапрос() или отладчик.
Как очистить все дополнительные сведения для определённого объекта?
Используйте метод Очистить() менеджера записей:
Менеджер = РегистрСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
Менеджер.Очистить(СсылкаНаОбъект);
Для массовой очистки используйте запрос с УДАЛИТЬ.
Можно ли хранить в дополнительных сведениях файлы (PDF, Excel)?
Технически да, но не рекомендуется. Файлы раздувают базу и замедляют работу. Лучше использовать:
ХранилищеЗначений(для файлов до 100 МБ).- Внешние хранилища (например, 1С:Документооборот или облако).
Как найти все объекты, к которым привязаны дополнительные сведения?
Выполните запрос:
ВЫБРАТЬ РАЗЛИЧНЫЕ
ДополнительныеСведения.Объект КАК Объект
ИЗ
РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
Для ускорения добавьте условие по типу объекта, например, ГДЕ ДополнительныеСведения.Объект ССЫЛКА Справочник.Номенклатура.