При разработке подключаемых внешних обработок и отчетов часто возникает необходимость сохранять служебные данные или статусы обработки существующих документов (например, признак пробития чека, внешний идентификатор операции, дату последней выгрузки). Основная сложность заключается в том, что решение должно работать универсально: в файловых и клиент-серверных базах, на тонком и веб-клиенте, а также в базовых или типовых конфигурациях, где добавление новых объектов метаданных (справочников, регистров сведений) запрещено или нежелательно.
Разберем основные варианты реализации такого хранения, их ограничения, особенности работы с правами доступа и безопасным режимом.
Платформа 1С предоставляет системный объект ХранилищеОбщихНастроек, позволяющий сохранять произвольные сериализуемые структуры данных (структуры, соответствия, массивы) непосредственно в служебную таблицу информационной базы.
Рассмотрим, как организовать сохранение и чтение данных, общих для всех пользователей информационной базы:
// Сохранение данных под пустым именем пользователя делает их общедоступными
КлючОбъекта = "ФискализацияДокументов";
КлючНастроек = "Статус_" + Строка(ДокументСсылка.УникальныйИдентификатор());
ДанныеДляСохранения = Новый Структура("Пробит, ДатаЧека, НомерФД", Истина, ТекущаяДатаСеанса(), 12345);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, ДанныеДляСохранения, , "");
Чтение ранее сохраненных данных выполняется аналогичным образом:
КлючОбъекта = "ФискализацияДокументов";
КлючНастроек = "Статус_" + Строка(ДокументСсылка.УникальныйИдентификатор());
Данные = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, , "");
Если Данные <> Неопределено И Данные.Пробит Тогда
// Документ уже обработан
КонецЕсли;
Важные нюансы работы с Хранилищем общих настроек:
АдминистрированиеДанных либо код должен выполняться в привилегированном режиме.УстановитьПривилегированныйРежим(Истина) игнорируется платформой. Для работы с общими настройками от имени непривилегированного пользователя внешнюю обработку необходимо регистрировать с отключенным безопасным режимом.Если конфигурация создана на базе «Библиотеки стандартных подсистем» (БСП), оптимальным решением является использование штатного регистра сведений ДополнительныеСведения. Этот механизм поддерживается практически во всех типовых конфигурациях и не требует изменения структуры конфигурации.
Проанализируем преимущества этого подхода:
ДополнительныеРеквизитыИСведения.В типовых конфигурациях, содержащих подсистемы обмена данными, присутствует регистр сведений СоответствияОбъектовИнформационныхБаз. Он предназначен для сопоставления ссылок базы с внешними строковыми или уникальными идентификаторами.
Внешняя обработка может программно создавать записи в этом регистре, передавая ссылку на документ в качестве объекта 1С и строковый статус или внешний номер чека в качестве идентификатора приемника.
Если решение должно работать абсолютно в любой конфигурации (включая самописные конфигурации без БСП и базовые версии), надежным техническим решением является создание локального или сетевого микросервиса (HTTP-сервиса на C#, Python или Go), взаимодействующего с торговым оборудованием.
Разберем архитектуру такого решения:
УникальныйИдентификатор().HTTPСоединение на стороне сервера (&НаСервере).Такой подход полностью исключает файловые блокировки, проблемы с правами пользователей в 1С и платформенными ограничениями базовых версий.