Как сохранять данные внешней обработкой в базе 1С без изменения метаданных

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

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

Разберем основные варианты реализации такого хранения, их ограничения, особенности работы с правами доступа и безопасным режимом.

Вариант 1. Использование Хранилища общих настроек платформы

Платформа 1С предоставляет системный объект ХранилищеОбщихНастроек, позволяющий сохранять произвольные сериализуемые структуры данных (структуры, соответствия, массивы) непосредственно в служебную таблицу информационной базы.

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


// Сохранение данных под пустым именем пользователя делает их общедоступными
КлючОбъекта = "ФискализацияДокументов";
КлючНастроек = "Статус_" + Строка(ДокументСсылка.УникальныйИдентификатор());
ДанныеДляСохранения = Новый Структура("Пробит, ДатаЧека, НомерФД", Истина, ТекущаяДатаСеанса(), 12345);

ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, ДанныеДляСохранения, , "");

Чтение ранее сохраненных данных выполняется аналогичным образом:


КлючОбъекта = "ФискализацияДокументов";
КлючНастроек = "Статус_" + Строка(ДокументСсылка.УникальныйИдентификатор());

Данные = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, , "");
Если Данные <> Неопределено И Данные.Пробит Тогда
    // Документ уже обработан
КонецЕсли;

Важные нюансы работы с Хранилищем общих настроек:

  1. Права доступа: Чтение и запись настроек текущего пользователя выполняются без специальных прав. Однако для чтения и изменения настроек других пользователей или общесистемных данных (с пустым именем пользователя) у пользователя должно быть назначено право АдминистрированиеДанных либо код должен выполняться в привилегированном режиме.
  2. Безопасный режим: Если внешняя обработка подключена через стандартные механизмы БСП в безопасном режиме, вызов метода УстановитьПривилегированныйРежим(Истина) игнорируется платформой. Для работы с общими настройками от имени непривилегированного пользователя внешнюю обработку необходимо регистрировать с отключенным безопасным режимом.

Вариант 2. Использование подсистемы «Дополнительные сведения» (БСП)

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

Проанализируем преимущества этого подхода:

  1. Данные привязаны к конкретному объекту метаданных через план видов характеристик ДополнительныеРеквизитыИСведения.
  2. Чтение и запись выполняются через стандартные процедуры и функции БСП, что гарантирует корректную работу в любых клиентских режимах (включая тонкий и веб-клиент).
  3. Данные не стираются при очистке системных кэшей и настроек пользователей.

Вариант 3. Использование служебного регистра соответствий БСП

В типовых конфигурациях, содержащих подсистемы обмена данными, присутствует регистр сведений СоответствияОбъектовИнформационныхБаз. Он предназначен для сопоставления ссылок базы с внешними строковыми или уникальными идентификаторами.

Внешняя обработка может программно создавать записи в этом регистре, передавая ссылку на документ в качестве объекта 1С и строковый статус или внешний номер чека в качестве идентификатора приемника.

Вариант 4. Вынос логики хранения во внешний сервис

Если решение должно работать абсолютно в любой конфигурации (включая самописные конфигурации без БСП и базовые версии), надежным техническим решением является создание локального или сетевого микросервиса (HTTP-сервиса на C#, Python или Go), взаимодействующего с торговым оборудованием.

Разберем архитектуру такого решения:

  1. Внешняя обработка формирует JSON-пакет с данными документа и его УникальныйИдентификатор().
  2. Обработка отправляет HTTP-запрос к микросервису через объект HTTPСоединение на стороне сервера (&НаСервере).
  3. Микросервис самостоятельно ведет базу выполненных операций (например, в SQLite или Key-Value хранилище) и предотвращает повторную фискализацию одного и того же GUID.
  4. Микросервис возвращает в 1С ответ с результатом выполнения операции.

Такой подход полностью исключает файловые блокировки, проблемы с правами пользователей в 1С и платформенными ограничениями базовых версий.

← На главную