Как организовать хранение данных в закрытой конфигурации 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Когда вы работаете с полностью закрытой конфигурацией 1С, где доступ к внесению изменений в основные метаданные ограничен, перед разработчиком часто встает вопрос: как организовать хранение собственных данных, которые не предусмотрены типовым функционалом? Давайте разберем доступные варианты и определим, как сделать это максимально эффективно.

Варианты реализации хранилища данных

В зависимости от объема данных и требований к их целостности, рассмотрим несколько подходов к организации автономного хранилища:

  1. Использование расширений конфигурации. Это наиболее профессиональный путь. Расширения позволяют добавлять собственные справочники, документы и регистры, не затрагивая основную конфигурацию. Данные расширения хранятся в основной базе, но логически отделены от нее.
  2. Внешние СУБД (SQLite или Firebird). Если требуется полноценная работа с данными, можно использовать файловые СУБД. Вы подключаетесь к внешнему файлу базы данных через драйвер и работаете с ним как с полноценным регистром, используя SQL-запросы.
  3. Сериализация данных. Для небольших объемов данных можно использовать JSON или XML файлы. Это позволяет сохранять структуру данных прямо на диске без установки дополнительных компонентов СУБД.
  4. Хранилище общих настроек. Встроенный механизм 1С, позволяющий сохранять данные типа Структура или Массив с привязкой к пользователю или конфигурации.

Разбор работы с расширениями

Расширения — это стандартный механизм 1С, который позволяет безопасно внедрять новые объекты. Важное преимущество: при обновлении основной конфигурации ваши данные, созданные в расширении, сохраняются, так как они находятся в отдельном слое метаданных. Не стоит бояться обновлений, если вы используете механизм расширений правильно.

Решение проблемы с удалением объектов в расширении

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

Причина проблемы кроется в том, что стандартная обработка может не учитывать ссылки на объекты расширения, если она сама не была запущена в контексте, который «видит» ваши новые метаданные.

Пошаговое решение:

  1. Программное удаление. Вместо использования интерактивной обработки создайте собственную внешнюю обработку для удаления. Это самый надежный путь, так как вы полностью контролируете процесс поиска и удаления объектов.
  2. Использование метода Удалить(). При написании кода в своей обработке, выбирайте все объекты с пометкой удаления и вызывайте их метод Удалить().

Посмотрим на пример кода для удаления объекта:


Выборка = Справочники.ВашСправочникРасширения.Выбрать();
Пока Выборка.Следующий() Цикл
    Если Выборка.ПометкаУдаления Тогда
        ОбъектСсылка = Выборка.Ссылка.ПолучитьОбъект();
        ОбъектСсылка.Удалить();
    КонецЕсли;
КонецЦикла;

Почему стоит избегать Excel?

Хотя Excel кажется простым вариантом, он имеет ряд существенных минусов: необходимость установки офисного пакета на сервере, нестабильность при одновременном доступе и возможные ошибки при чтении данных. Вместо Excel лучше использовать JSON. Это современный и быстрый формат, который легко считывается и записывается платформой 1С без использования сторонних COM-объектов.

Заключение и рекомендации

Для реализации задачи «типа справочника» мы рекомендуем начать с использования расширений конфигурации. Это официальный и поддерживаемый инструмент. Если же объем данных велик или требуется сложная аналитика — используйте SQLite, так как это дает высокую производительность при работе с одним файлом базы данных. Помните, что ключ к успеху — это понимание того, как данные взаимодействуют с метаданными платформы. Не бойтесь экспериментировать с расширениями, ведь это лучший способ расширить функционал закрытой системы, сохранив возможность автоматического обновления конфигурации.

← На главную