Проверка размера данных в хранилищах значений
Обработка проверяет все реквизиты справочников, документов, констант и регистров (бизнес процессы пока нет).
Выводит в таблицу все реквизиты, где есть хранилища значений, и выводит их размеры.
Сделана в связи с тем, что 1С может иногда вылетать, когда очень большие объемы хранятся в хранилищах.
Позволяет подсчитать объемы.
Выдает все реквизиты, у которых тип – хранилище значений:
Выдает те объекты, у которых хранятся значения в хранилище, с указанием размера:
Любые данные в 1С можно получить в виде строкового представления с помощью функции ЗначениеВСтрокуВнутр.
Выполним данную функцию с объектом ХранилищеЗначения:
Функция возвращает строку вида:
Обладая данными можем рассчитать кол-во байтов помещенных в эти данные:
Т.к. формат base64 имеет ограничение — общая длина строки, состоящая из 4-х символьных стрингов составляет 72 символа (за исключением самой последней строки — там уже сколько получится), то нужно из общего числа символов отнять число символов перевода строки (Символ(13)+Символ(10)). Это действие выполняет выражение 2*(СтрЧислоСтрок(ДанныеBase64)-1). Во второй строчке учитываем случай, когда на завершение остаются один или два байта.
Хранилище значений — это тип, который появился в 8-ой версии 1С позволяющий сохранять прямо в базе различные данные, включая двоичные данные (произвольные файлы). Например, так можно хранить в базе данных JPG-картинки, Word-документы и т.д. Причем данные будут храниться в самой базе (файле 1CD или в таблицах на SQL-сервере) и будут включены в штатную выгрузку базы или резервную копию средствами SQL Server.
Тип Хранилище значения может быть назначен реквизиту справочника, документа, ресурсу регистра сведений и т.д.
Восьмерка поддерживает сжатие данных, помещаемых в хранилище:
Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().
Если это был, например, Word-документ (doc-файл, или другой файл зарегистрированного типа), то его можно открыть так:
Чтобы очистить поле типа Хранилище значения, нужно присвоить ему Неопределено:
Код 1C v 8.х
Если в Хранилище значений содержались какие-то ссылки, то они не будут контролироваться при контроле ссылочной целостности (операция Удаление помеченных объектов или метод НайтиПоСсылкам).
К сожалению, 1С не содержит встроенных методов для проверки того, заполнено хранилище или нет.
Такой вариант не работает:
Код 1C v 8.х
Работает только такой вариант:
Код 1C v 8.х
Но он требует затрат времени на извлечение данных из хранилища.
Поэтому, если это критично, нужно заводить еще один флаг, который указывает, содержит ли хранилище значение.