При работе с объектами расширений в 1С:Предприятии 8 разработчики часто сталкиваются с задачей сопоставления данных расширения, отображаемых в стандартном интерфейсе (список расширений), и данных, доступных при программной обработке. Одной из таких задач является получение строкового представления хэшсуммы расширения.
Давайте разберем, почему возникает эта разница в типах данных и как привести хэшсумму к привычному виду «x+XA6Ll5DsnYreZP8wP8V0qXUik=».
Когда мы обращаемся к свойству HashSum объекта расширения (полученного, например, через ConfigurationExtensions.Get()), платформа возвращает нам значение типа ДвоичныеДанные. Этот набор байтов является внутренним представлением контрольной суммы расширения, которое платформа использует для идентификации конкретной версии метаданных.
В пользовательском интерфейсе 1С эта же хэшсумма отображается в виде строки Base64. Чтобы получить такой же результат программно, нам необходимо выполнить конвертацию бинарных данных в строковый формат.
Для приведения двоичных данных к строковому представлению, которое мы видим в списке расширений, используется глобальная функция Base64Строка(). Она принимает на вход объект типа ДвоичныеДанные и возвращает строку в кодировке Base64.
Рассмотрим пример реализации процедуры, которая формирует список расширений и преобразует хэшсумму в читаемый вид:
&AtServer
Procedure UpdateAtServer(Val currentExtensionID = Undefined)
Var extensions, extension, extensionsItem;
ExtensionsList.Clear();
extensions = ConfigurationExtensions.Get(Undefined);
For each extension in extensions Do
extensionsItem = ExtensionsList.Add();
extensionsItem.UUID = extension.UUID;
extensionsItem.Name = extension.Name;
extensionsItem.Version = extension.Version;
// Преобразование хэшсуммы в текстовый формат Base64
extensionsItem.HashSum = Base64Строка(extension.HashSum);
// Дополнительная логика обработки параметров расширения
extensionsItem.IsActivated = extension.Active;
// ... прочие действия
EndDo;
EndProcedure
Base64Строка() корректно обрабатывает массив байтов, упаковывая их в стандартную последовательность символов, используемую в 1С для отображения контрольных сумм.При написании кода для работы с расширениями, важно учитывать чистоту и читаемость вашего алгоритма. Например, в коде часто можно встретить проверку типов через TypeOf(extension.SafeMode) = TypeOf(False). Хотя этот способ работает корректно и позволяет сравнить тип текущего значения с типом булевой константы Ложь, рекомендуется использовать Тип("Булево") для более явного указания намерений разработчика.
Использование Base64Строка() — это стандартный и наиболее эффективный путь решения данной задачи. Этот метод не требует сложных преобразований и позволяет быстро получить результат в любой версии платформы 1С:Предприятие 8.3.
Теперь вы можете легко сопоставлять программно полученные расширения с теми, что отображаются у пользователей или администраторов в интерфейсе системы.