Функция для определения размера данных для 1С: Предприятия 8.Х
Универсальная функция, позволяющая определить размер данных (хранилища значения, двоичных данных, картинки, строки)
- Описание
- Подробнее
Описание
Разработана в ходе реализации проекта по взаимодействию с веб-сервером для контроля размера передаваемых данных.
Источник алгоритма расчёта: Как рассчитать размер данных помещенных в объект ХранилищеЗначения.
// Универсальная функция для определения размера данных (хранилища значения, двоичных данных, картинки, строки)
// Алгоритм расчета размера данных взят отсюда http://kb.mista.ru/article.php?id=386
//
// Параметры
// <Данные> — данные типа хранилище значений, двоичные данные, картинка, строка
//
// Возвращаемое значение:
// РазмерДанных — числовое значение в байтах
//
Функция ПолучитьРазмерДанных(Знач Данные)
Если ТипЗнч(Данные) = Тип(«ХранилищеЗначения») Тогда
ДанныеХранилища = Данные.Получить();
Если ДанныеХранилища = Неопределено Тогда
Возврат 0;
КонецЕсли;
Если ТипЗнч(ДанныеХранилища) = Тип(«Картинка») Тогда
ДанныеХранилища = ДанныеХранилища.ПолучитьДвоичныеДанные();
ИначеЕсли ТипЗнч(ДанныеХранилища) = Тип(«Строка») Тогда
Возврат СтрДлина(ДанныеХранилища);
КонецЕсли;
ДанныеBase64 = Base64Строка(ДанныеХранилища);
ИначеЕсли ТипЗнч(Данные) = Тип(«ДвоичныеДанные») Тогда
ДанныеBase64 = Base64Строка(Данные);
ИначеЕсли ТипЗнч(Данные) = Тип(«Картинка») Тогда
ДанныеBase64 = Base64Строка(Данные.ПолучитьДвоичныеДанные());
Иначе
Возврат СтрДлина(XMLСтрока(Данные));
КонецЕсли;
//Base64 — специальный формат хранения данных в текстовом формате
РазмерДанных = СтрДлина(ДанныеBase64) — ?(Прав(ДанныеBase64, 1) = «=», 1, 0) — ?(Прав(ДанныеBase64, 2) = «==», 1, 0);
РазмерДанных = Цел(РазмерДанных / 4 * 3); // в байтах
Возврат РазмерДанных;
КонецФункции

