Как сохранить и прочитать таблицу значений во внешней обработке 1С?

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

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

Разберем, почему данный подход не сработает в платформе 1С:Предприятие, и рассмотрим надежные альтернативные варианты сохранения и чтения данных.

Ограничение платформы: почему нельзя программно записать данные в макет

Проанализируем архитектуру работы с макетами и метаданными:

  1. Макеты метаданных любых объектов конфигурации, а также внешних отчетов и обработок (файлы .epf и .erf), в режиме «1С:Предприятие» открываются исключительно для чтения.
  2. Платформа не предоставляет штатных инструментов для модификации структуры файла внешней обработки и изменения ее метаданных во время выполнения программного кода. Это фундаментальное ограничение безопасности, предотвращающее самомодификацию исполняемого кода и внедрение вредоносных алгоритмов.

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

Способ 1. Сохранение данных во внешний файл на диске

Если необходимо переносить данные между разными компьютерами или сохранять файл автономно от информационной базы, наиболее простым решением является запись данных во внешний файл.

1. Использование методов ЗначениеВФайл и ЗначениеИзФайла

Это самый быстрый встроенный способ сохранения произвольных сериализуемых типов платформы (включая таблицы значений) во внутреннем бинарном формате 1С:


// Запись таблицы значений в файл
ПутьКФайлу = "C:\Temp\ExportedData.dat";
ЗначениеВФайл(ПутьКФайлу, ТаблицаДанных);

// Чтение таблицы значений из файла
ТаблицаДанных = Новый ТаблицаЗначений;
Если ЗначениеИзФайла(ПутьКФайлу, ТаблицаДанных) Тогда
    // Таблица успешно заполнена
КонецЕсли;

2. Сериализация в формат XML через СериализаторXDTO

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


// Запись в XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\ExportedData.xml");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТаблицаДанных);
ЗаписьXML.Закрыть();

// Чтение из XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("C:\Temp\ExportedData.xml");
ТаблицаДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();

Способ 2. Использование системного хранилища настроек

Когда данные необходимо сохранять в разрезе текущего пользователя без создания файлов на диске, отлично подходит объект ХранилищеОбщихНастроек. Механизм сохраняет данные непосредственно в системные таблицы информационной базы:


ИмяОбработки = "МояВнешняяОбработка";
КлючНастроек = "СохраненнаяТаблица";

// Сохранение таблицы значений
ХранилищеОбщихНастроек.Сохранить(ИмяОбработки, КлючНастроек, ТаблицаДанных);

// Загрузка таблицы значений
ТаблицаДанных = ХранилищеОбщихНастроек.Загрузить(ИмяОбработки, КлючНастроек);

Способ 3. Хранение данных в реквизитах базы с типом ХранилищеЗначения

Если сохраненные данные должны быть доступны сразу всем пользователям или централизованно храниться в конкретном документе или справочнике, используется объект ХранилищеЗначения:


// Упаковка таблицы значений в двоичные данные со сжатием
Хранилище = Новый ХранилищеЗначения(ТаблицаДанных, Новый СжатиеДанных(9));

// Извлечение данных обратно в таблицу значений
ТаблицаДанных = Хранилище.Получить();

Способ 4. Использование механизмов БСП

В типовых конфигурациях на базе «Библиотеки стандартных подсистем» (БСП) внешние обработки чаще всего подключаются через справочник Дополнительные отчеты и обработки. В таком сценарии для хранения настроек и результатов работы рекомендуется использовать механизмы подсистемы «Варианты отчетов» или стандартные регистры сведений сохранения настроек пользователей БСП.

← На главную