При разработке систем обмена данными часто возникает ситуация, когда типовую конфигурацию изменять запрещено (например, она находится на жесткой поддержке или это условие заказчика), но для реализации бизнес-логики требуются собственные справочники, таблицы соответствий или служебные данные. Рассмотрим подробно, как организовать хранение таких данных «снаружи» базы 1С, проанализируем плюсы и минусы различных форматов и выберем наиболее эффективные инструменты для платформы 1С:Предприятие 8.2.
Если заказчик настаивает на хранении данных в файлах, формат DBF является одним из самых надежных и производительных решений для 1С. В отличие от простых текстовых файлов или сериализованных таблиц значений, работа с DBF через встроенный объект XBase позволяет использовать индексацию.
Разберем, почему это важно. Если данных станет «много», поиск нужной записи в обычном текстовом файле потребует его полного прочтения в память. Объект XBase позволяет работать с файлом порционно и мгновенно находить записи по индексу (файлы .cdx).
Проанализируем пример создания и записи данных в DBF:
// Создание структуры файла
НовыйФайл = Новый XBase;
НовыйФайл.Поля.Добавить("ID", "S", 36); // УИД объекта
НовыйФайл.Поля.Добавить("NAME", "S", 150);
НовыйФайл.Поля.Добавить("PRICE", "N", 15, 2);
НовыйФайл.СоздатьФайл("C:\ExternalData\ExtraCatalog.dbf");
НовыйФайл.Индексы.Добавить("ID_IDX", "ID");
НовыйФайл.СоздатьИндексныйФайл("C:\ExternalData\ExtraCatalog.cdx");
// Запись данных
НовыйФайл.Добавить();
НовыйФайл.ID = "550e8400-e29b-41d4-a716-446655440000";
НовыйФайл.NAME = "Внешний товар №1";
НовыйФайл.PRICE = 1250.50;
НовыйФайл.Записать();
НовыйФайл.ЗакрытьФайл();
Для поиска данных мы будем использовать метод Найти(), который работает практически мгновенно даже при десятках тысяч записей, если поле проиндексировано. Это значительно эффективнее, чем механизмы ЗначениеВФайл.
Начиная с версии платформы 8.2.14, у нас появилась возможность использовать объект метаданных Внешние источники данных. Это наиболее «цивилизованный» способ работы со сторонними базами данных (SQL Server, PostgreSQL, SQLite). Несмотря на ограничение «конфигурацию менять нельзя», в некоторых случаях разрешается добавлять объекты, которые не затрагивают существующие связи (например, через расширения или если разрешено минимальное вмешательство в дерево метаданных).
Основные преимущества использования ВИД:
Важное ограничение для версии 8.2: помним, что в одном запросе нельзя одновременно обращаться к таблицам базы 1С и к таблицам внешнего источника. Данные придется объединять программно на стороне 1С в таблице значений.
Если нам нужно хранить сложные структурированные данные, но мы не хотим разворачивать полноценный SQL-сервер, отличным вариантом будет SQLite. Это легковесная база данных в одном файле. Для работы с ней в 1С 8.2 мы можем использовать технологию ADO.
Рассмотрим ситуацию: нам нужно быстро выбрать данные из внешней таблицы. Для этого потребуется установленный в системе драйвер SQLite3 ODBC Driver. Посмотрим на пример подключения:
Соединение = Новый COMОбъект("ADODB.Connection");
ConnectionString = "Driver={SQLite3 ODBC Driver};Database=C:\ExternalData\myData.db;";
Соединение.Open(ConnectionString);
ЗапросSQL = "SELECT * FROM ExtraData WHERE Status = 'Active'";
RecordSet = Соединение.Execute(ЗапросSQL);
Пока НЕ RecordSet.EOF Цикл
Сообщить(RecordSet.Fields("Name").Value);
RecordSet.MoveNext();
КонецЦикла;
Соединение.Close();
Этот метод гарантирует целостность данных благодаря поддержке транзакций. В отличие от файлов .txt или .xml, база данных SQLite не повредится, если в момент записи произойдет аварийное завершение сеанса 1С.
В начале обсуждения часто предлагается использовать сериализацию 1С (сохранение ТаблицыЗначений целиком в файл). Проанализируем риски этого подхода:
ЗначениеИзФайла 1С загружает весь объект целиком в оперативную память. Если ваша внешняя таблица вырастет до 500 МБ, каждое обращение к ней может привести к зависанию системы или ошибке Out of memory.Этот механизм подходит только для хранения настроек или очень маленьких списков (до 1000 записей).
Если ваша конфигурация основана на БСП (Библиотека стандартных подсистем), выясним, нет ли возможности использовать механизм Дополнительных сведений. Это регистр сведений, который уже есть в системе и предназначен для хранения произвольных данных в разрезе любых объектов (справочников, документов).
Преимущества:
В сложных случаях, когда объем внешних данных сопоставим с основной базой, рассмотрим вариант создания отдельной легкой конфигурации на 1С (так называемой «базы-спутника»). Связь между основной базой и спутником можно организовать через:
Этот подход идеален для распределенных систем (РИБ), так как позволяет узлам работать автономно, обращаясь к локальным копиям данных, и синхронизировать их централизованно.
Выясним, какой формат выбрать в зависимости от условий:
Таким образом, мы обеспечим масштабируемость системы и стабильность обмена данными даже при жестких ограничениях на изменение основной конфигурации.