ХранилищеЗначения.Получить

Методы · Get

Получает из хранилища сохраненное в нем значение.

Синтаксис

Получить()

Примеры платформы

МояКартинка = ХранилищеКартинки.Получить();
Полное описание, параметры и ограничения

ХранилищеЗначения.Получить (ValueStorage.Get)

ХранилищеЗначения (ValueStorage)

Получить (Get)

Доступен, начиная с версии 8.0.

Синтаксис:
Получить()
Возвращаемое значение:
Тип: Произвольный.
Значение, содержащееся в хранилище.
Описание:

Получает из хранилища сохраненное в нем значение.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Пример:

МояКартинка = ХранилищеКартинки.Получить();

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Проверить политику файлового реквизита и управляющее поле

Для подготовленных файловых реквизитов читаем два новых свойства метаданных 8.3.26+. Отличаем режим хранения от Булево-поля, управляющего записью.

Где и как запускать

Полный серверный модуль собственной учебной конфигурации 8.5.1.1343. Нет применения настроек или удаления данных хранилища.

Подготовка

  1. Создайте отдельную пустую учебную конфигурацию на платформе 8.5.1.1343 с режимом совместимости НеИспользовать. Не используйте производственную базу и не изменяйте предоставленные выгрузки КА2/УТ/УНФ.

  2. Добавьте справочник УчебныеФайлы и три реквизита: Данные и Предпросмотр с типом ХранилищеЗначения, ИспользоватьВнешнееХранение с типом Булево. Обновите только свою учебную базу. Сами записи справочника создавать не нужно.

  3. Создайте серверный общий модуль УчебныеЗадачи, вставьте полный модуль одного урока и вызовите ВыполнитьПример() из своей серверной команды.

  4. Упражнения с Новый СоставХранимыхДанныхХранилищаДвоичныхДанных и параметрами подключения меняют только собственные объекты в памяти. Нет установки состава, записи менеджера, резервного копирования или физической очистки.

  5. Для диагностики настоящего хранилища нужен отдельно подготовленный администратором учебный сервер. Код различает отсутствие поддержки платформой и ошибку чтения состояния, не включает сервис автоматически.

Процедура ВыполнитьПример() Экспорт
    Справочник = Метаданные.Справочники.Найти("УчебныеФайлы");
    Если Справочник = Неопределено Тогда
        ВызватьИсключение "Сначала подготовьте собственный учебный справочник УчебныеФайлы";
    КонецЕсли;
    Данные = Справочник.Реквизиты.Найти("Данные");
    Предпросмотр = Справочник.Реквизиты.Найти("Предпросмотр");
    Если Данные = Неопределено ИЛИ Предпросмотр = Неопределено Тогда
        ВызватьИсключение "Нужны два собственных реквизита ХранилищеЗначения";
    КонецЕсли;
    Если НЕ Данные.Тип.СодержитТип(Тип("ХранилищеЗначения"))
        ИЛИ НЕ Предпросмотр.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда
        ВызватьИсключение "Состав допускает данные типа ХранилищеЗначения, не произвольную строку";
    КонецЕсли;
    Режим = Данные.ИспользованиеХраненияВХранилищеДвоичныхДанных;
    Сообщить("Использование хранения: " + Строка(Режим));
    Если Режим = ИспользованиеХраненияВХранилищеДвоичныхДанных.Использовать Тогда
        Сообщить("На уровне описания реквизита хранение используется; доступность сервиса проверяется отдельно");
    ИначеЕсли Режим = ИспользованиеХраненияВХранилищеДвоичныхДанных.НеИспользовать Тогда
        Сообщить("На уровне описания реквизита хранение не используется");
    КонецЕсли;
    Поле = Данные.ПолеИспользованияХраненияВХранилищеДвоичныхДанных;
    Если Поле = Неопределено Тогда
        Сообщить("Управляющее поле не назначено; значение Булево у несуществующей записи не читается");
    Иначе
        Сообщить("Управляющий реквизит: " + Поле.Имя);
        Сообщить(Поле.Тип.СодержитТип(Тип("Булево")));
    КонецЕсли;
    УчебноеСодержимое = Новый ХранилищеЗначения("Книга: учебное содержимое только в памяти");
    Сообщить(УчебноеСодержимое.Получить() = "Книга: учебное содержимое только в памяти");
    Сообщить("Значение не присвоено объекту справочника и не записано в сервис");
КонецПроцедуры

Разбор по шагам

  1. Оба свойства метаданных доступны с 8.3.26. Справка указывает для них Чтение и запись, однако этот урок только читает существующую настройку.

  2. ИспользованиеХраненияВХранилищеДвоичныхДанных — системный режим, а не текущее содержимое файла или право пользователя.

  3. ПолеИспользованияХраненияВХранилищеДвоичныхДанных при назначении содержит метаданные Булево-реквизита. Сначала проверяем возможное отсутствие, затем его тип.

  4. Чтобы исследовать непустую ветку, настройте это свойство в Конфигураторе только своего учебного Данные на собственный реквизит ИспользоватьВнешнееХранение, если оно доступно в вашей подготовленной схеме.

  5. Новый ХранилищеЗначения создаёт своё содержимое в памяти. Это не подключение к отдельному сервису и не подтверждение физического размещения файла.

Как проверить результат

  1. Показан реальный режим и наличие/отсутствие управляющего поля. При назначенном поле проверка Булево — Истина.

  2. Контроль собственного содержимого — Истина. Не создано записей справочника и не изменена политика хранения.

Ожидаемый результат

Ученик различает настройку схемы, управляющий реквизит и реальное сохранение двоичных данных.

На что обратить внимание

  1. Свойство метаданных поля не является значением Булево конкретного элемента справочника.

  2. ХранилищеЗначения и отдельное хранилище двоичных данных — не один и тот же объект.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Два пакета настроек панели разделов: сохраняем варианты в памяти

Создать собственные настройки командного интерфейса, упаковать текстовый и комбинированный режимы в два ХранилищеЗначения и реально перечитать их после изменения источника и извлечённого экземпляра. Показать фактический паспорт подготовленных профилей без применения к интерфейсу и без записи системных настроек.

Где и как запускать

Сервер: собственный неглобальный непривилегированный ПакетыКомандногоИнтерфейса85. Настройки и контейнеры остаются на сервере; клиент получает только Строка.

Подготовка

  1. Будущий ручной опыт: собственная новая пустая учебная конфигурация на платформе 8.5.1.1343, управляемое приложение и толстый управляемый клиент. Не рабочая УТ, КА, УНФ или БП. Настройки и два контейнера создаются только в памяти функции без входных данных; пользовательские профили и база не читаются и не изменяются.

  2. Общие → Общие модули → создать ПакетыКомандногоИнтерфейса85. Сервер=Да; Глобальный, Привилегированный, Вызов сервера, Клиент (управляемое приложение), Клиент (обычное приложение), Внешнее соединение=Нет. Повторное использование возвращаемых значений=Не использовать. Основной блок вставьте ЦЕЛИКОМ в пустой модуль.

  3. Общие → Общие формы → создать управляемую ПроверкаПакетовИнтерфейса85. Добавьте один реквизит Протокол85: Строка неограниченной длины. Выведите его многострочным полем с ПутьКДанным=Протокол85 и ТолькоПросмотр=Да.

  4. В свойствах своей формы установите АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это разные перечисления, не Булево. Обработчики сохранения и автоматического запуска не нужны.

  5. В форме создайте команду Проверить85, Действие=Проверить85; выведите кнопку. Второй блок вставьте ЦЕЛИКОМ в пустой модуль формы. Настоящий объект Команда передаёт платформа при нажатии; не подставляйте его вручную.

  6. Общие → Общие команды → создать ОткрытьПакетыИнтерфейса85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы. Третий блок вставьте ЦЕЛИКОМ в модуль этой общей команды; &НаКлиенте задаёт исполнение, а #Если проверяет вид приложения.

  7. После будущей проверки синтаксиса сохраните конфигурацию и обновите только собственную учебную базу. Откройте её толстым управляемым клиентом, своей общей командой откройте форму и нажмите Проверить85. Все настройки, упаковка и проверки находятся на сервере; клиенту передаётся только строка.

  8. Не нужны виртуальная машина, отдельный системный пользователь, UUID, справочники, разрешение на запись или системное хранилище настроек. Здесь нет сохранения профиля пользователя: ХранилищеЗначения — созданный в памяти контейнер, который мы не помещаем в базу или файл.

  9. Компиляция и выполнение в 1С ещё не проверялись. Любое исключение, иной фактический тип или режим означает незавершённый опыт, а не успешное создание пакетов.

Функция ПодготовитьПакеты85() Экспорт
    Настройки85 = Новый НастройкиКомандногоИнтерфейса();
    Если ТипЗнч(Настройки85) <> Тип("НастройкиКомандногоИнтерфейса") Тогда
        ВызватьИсключение "Не созданы собственные настройки командного интерфейса";
    КонецЕсли;
    Настройки85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Текст;
    ОписаниеА85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.Текст);
    ПакетА85 = Новый ХранилищеЗначения(Настройки85);
    Если ТипЗнч(ПакетА85) <> Тип("ХранилищеЗначения") Тогда
        ВызватьИсключение "Не создан первый собственный пакет";
    КонецЕсли;
    Настройки85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.КартинкаИТекст;
    ОписаниеБ85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.КартинкаИТекст);
    ПакетБ85 = Новый ХранилищеЗначения(Настройки85);
    Если ТипЗнч(ПакетБ85) <> Тип("ХранилищеЗначения") Тогда
        ВызватьИсключение "Не создан второй собственный пакет";
    КонецЕсли;
    Настройки85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Картинка;
    ОписаниеИсточника85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.Картинка);
    ПрочитаноА85 = ПакетА85.Получить();
    ПрочитаноБ85 = ПакетБ85.Получить();
    ОписаниеПрочитанногоА85 = ОписаниеПрофиля85(ПрочитаноА85, ОтображениеПанелиРазделов.Текст);
    ОписаниеПрочитанногоБ85 = ОписаниеПрофиля85(ПрочитаноБ85, ОтображениеПанелиРазделов.КартинкаИТекст);
    Если ОписаниеПрочитанногоА85 <> ОписаниеА85 Или ОписаниеПрочитанногоБ85 <> ОписаниеБ85 Тогда
        ВызватьИсключение "Первое чтение не подтвердило подготовленные режимы";
    КонецЕсли;
    ПрочитаноА85.ОтображениеПанелиРазделов = ОтображениеПанелиРазделов.Картинка;
    ОписаниеИзмененногоА85 = ОписаниеПрофиля85(ПрочитаноА85, ОтображениеПанелиРазделов.Картинка);
    ПовторноА85 = ПакетА85.Получить();
    ПовторноБ85 = ПакетБ85.Получить();
    ОписаниеПовторноА85 = ОписаниеПрофиля85(ПовторноА85, ОтображениеПанелиРазделов.Текст);
    ОписаниеПовторноБ85 = ОписаниеПрофиля85(ПовторноБ85, ОтображениеПанелиРазделов.КартинкаИТекст);
    ОписаниеИсточникаПовторно85 = ОписаниеПрофиля85(Настройки85, ОтображениеПанелиРазделов.Картинка);
    Если ОписаниеПовторноА85 <> ОписаниеА85
        Или ОписаниеПовторноБ85 <> ОписаниеБ85
        Или ОписаниеИсточникаПовторно85 <> ОписаниеИсточника85
        Или ОписаниеИзмененногоА85 <> ОписаниеИсточникаПовторно85 Тогда
        ВызватьИсключение "Повторное чтение не подтвердило сохранение подготовленных режимов";
    КонецЕсли;
    Возврат "Пакет 1: " + ОписаниеПовторноА85
        + "; пакет 2: " + ОписаниеПовторноБ85
        + "; исходный объект: " + ОписаниеИсточникаПовторно85
        + "; изменённый извлечённый экземпляр: " + ОписаниеИзмененногоА85
        + "; повторное чтение обоих пакетов подтвердило их публичный режим";
КонецФункции

Функция ОписаниеПрофиля85(Знач Настройки85, Знач ОжидаемыйРежим85)
    Если ТипЗнч(Настройки85) <> Тип("НастройкиКомандногоИнтерфейса")
        Или ТипЗнч(ОжидаемыйРежим85) <> Тип("ОтображениеПанелиРазделов") Тогда
        ВызватьИсключение "Нужны собственные настройки и настоящий ожидаемый режим";
    КонецЕсли;
    Режим85 = Настройки85.ОтображениеПанелиРазделов;
    Если ТипЗнч(Режим85) <> Тип("ОтображениеПанелиРазделов") Или Режим85 <> ОжидаемыйРежим85 Тогда
        ВызватьИсключение "Фактический тип или режим профиля не подтверждён";
    КонецЕсли;
    Если Режим85 = ОтображениеПанелиРазделов.Текст Тогда
        Возврат "только текст";
    ИначеЕсли Режим85 = ОтображениеПанелиРазделов.КартинкаИТекст Тогда
        Возврат "картинка и текст";
    ИначеЕсли Режим85 = ОтображениеПанелиРазделов.Картинка Тогда
        Возврат "только картинка";
    Иначе
        ВызватьИсключение "Режим не входит в три варианта собственного опыта";
    КонецЕсли;
КонецФункции
Полный модуль собственной формы ПроверкаПакетовИнтерфейса85

Общие → Общие формы → ПроверкаПакетовИнтерфейса85 → пустой модуль формы. Вставить ЦЕЛИКОМ; своя команда Проверить85 связана через Действие.

Настоящая команда формы &НаКлиенте; обращение к своему общему модулю &НаСервере. Передаётся только строковый паспорт.

&НаКлиенте
Процедура Проверить85(Команда)
    Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "Проверить85" Тогда
        ВызватьИсключение "Нужна настоящая собственная команда формы";
    КонецЕсли;
    Протокол85 = "";
    Попытка
        Получено85 = ПодготовитьНаСервере85();
        Если ТипЗнч(Получено85) <> Тип("Строка") Или Получено85 = "" Тогда
            ВызватьИсключение "Сервер не вернул полный строковый паспорт";
        КонецЕсли;
        Протокол85 = Получено85;
    Исключение
        Протокол85 = "Пакеты НЕ подтверждены. Опыт остановлен.";
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаСервере
Функция ПодготовитьНаСервере85()
    Если ИмяФормы <> "ОбщаяФорма.ПроверкаПакетовИнтерфейса85"
        Или АвтоматическоеСохранениеДанныхВНастройках <> АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать
        Или СохранениеДанныхВНастройках <> СохранениеДанныхФормыВНастройках.НеИспользовать Тогда
        ВызватьИсключение "Нужна своя форма с отключённым сохранением данных";
    КонецЕсли;
    Отчёт85 = ПакетыКомандногоИнтерфейса85.ПодготовитьПакеты85();
    Если ТипЗнч(Отчёт85) <> Тип("Строка") Или Отчёт85 = "" Тогда
        ВызватьИсключение "Не получен полный строковый паспорт собственного модуля";
    КонецЕсли;
    Возврат Отчёт85;
КонецФункции
Полный модуль собственной общей команды ОткрытьПакетыИнтерфейса85

Общие → Общие команды → ОткрытьПакетыИнтерфейса85 → пустой модуль команды. Вставить ЦЕЛИКОМ, включить без параметра в свой учебный интерфейс.

&НаКлиенте; толстый управляемый клиент, настоящее ОбработкаКоманды с двумя штатными параметрами.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Если ПараметрКоманды <> Неопределено
            Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
            ВызватьИсключение "Откройте собственную форму штатной общей командой без параметра";
        КонецЕсли;
        ОткрытьФорму("ОбщаяФорма.ПроверкаПакетовИнтерфейса85");
    #Иначе
        ВызватьИсключение "Нужен толстый управляемый клиент";
    #КонецЕсли
КонецПроцедуры

Разбор по шагам

  1. Создаём собственные НастройкиКомандногоИнтерфейса и сразу задаём Текст. Проверка читает настоящий режим и формирует его описание; значение по умолчанию нам не требуется.

  2. Первый ХранилищеЗначения принимает фактический объект настроек. Метка Сериализуется в описании настроек разрешает помещать их в такой контейнер. Создание контейнера само по себе не записывает пользовательский профиль.

  3. Тот же исходный объект меняем на КартинкаИТекст и создаём второй пакет. Затем исходные настройки меняем ещё раз — на Картинка. Теперь у нас три разных целевых состояния, поэтому подмена контейнеров исходным объектом заметна.

  4. Получить у каждого пакета возвращает произвольное значение: перед чтением свойства проверяем реальный тип НастройкиКомандногоИнтерфейса. Первый результат должен иметь Текст, второй — КартинкаИТекст. Оба фактических режима используются в сравнении и описании.

  5. Первый извлечённый экземпляр изменяем на Картинка. После этого снова вызываем Получить у обоих пакетов и проверяем реальные Текст и КартинкаИТекст. Старые переменные не заменяют повторное чтение.

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

  7. Форма очищает прежний текст перед обращением к серверу. При успехе показывает паспорт; при ошибке пишет, что пакеты не подтверждены, и передаёт исключение. Прошлый успешный отчёт не должен выглядеть результатом нового неудачного опыта.

Как проверить результат

  1. В своей учебной базе откройте форму настоящей общей командой и нажмите Проверить85. Ожидайте: пакет 1 — только текст, пакет 2 — картинка и текст, исходный объект и изменённый извлечённый экземпляр — только картинка.

  2. В отладчике остановитесь перед первым Получить. Проверьте фактическое поле Настройки85: Картинка. Затем по шагам убедитесь, что ПрочитаноА85 имеет Текст, а ПрочитаноБ85 — КартинкаИТекст. Не вызывайте обработчик вручную.

  3. После изменения ПрочитаноА85 проверьте его реальную Картинка. Выполните оба повторных Получить: ПовторноА85 должен снова иметь Текст, ПовторноБ85 — КартинкаИТекст. Именно эти новые результаты дают окончательный паспорт.

  4. Только в копии своего учебного модуля временно поменяйте первое присваивание Текст на Картинка, оставив ожидаемый Текст. Первое сравнение должно остановить опыт до упаковки; успешный паспорт появиться не должен.

  5. Отдельный учебный опыт в своей копии: замените ПовторноА85 = ПакетА85.Получить() на ПовторноА85 = ПрочитаноА85. Изменённый экземпляр имеет Картинка, поэтому проверка должна остановиться. После проверки верните исходную строку вручную.

  6. Повторное обычное нажатие создаёт новые собственные объекты и контейнеры. Не требуйте иных значений или изменений реальной панели разделов: такой операции в уроке нет.

  7. Если компиляция, обращение к серверу или чтение контейнера завершились ошибкой, результат — незавершённый опыт. Не выдавайте сообщение об остановке за подтверждение упаковки или независимости.

Ожидаемый результат

Будущий успешный паспорт: пакет 1 — только текст; пакет 2 — картинка и текст; исходный объект и изменённый извлечённый экземпляр — только картинка. Оба повторно прочитанных пакета сохраняют заданные публичные режимы. Реальная панель разделов не изменяется этим кодом. Запуск в 1С пока не выполнен.

На что обратить внимание

  1. НастройкиКомандногоИнтерфейса и его публичное свойство доступны на сервере и в толстом клиенте. Более широкая доступность перечисления ОтображениеПанелиРазделов не разрешает создавать настройки в тонком клиенте.

  2. Сериализуется разрешает ХранилищеЗначения, но не доказывает конкретный XML, JSON, XDTO или внутренний строковый формат этих настроек. Никакого такого формата урок не строит и не сравнивает.

  3. Получить возвращает Произвольный. Проверка типа стоит перед доступом к свойству каждого извлечённого значения; неизвестный объект не принимается за настройки по имени переменной.

  4. Проверяется единственное публичное свойство режима и его фактическое сохранение при собственных изменениях. Это не сравнение скрытых полей, полной эквивалентности объектов, ссылочной идентичности или сериализованных байтов.

  5. Успех упаковки не означает применения профиля к панели разделов. Системное хранилище настроек не вызывается, пользовательские настройки не сохраняются и реальная панель не обязана изменяться.

  6. Конструктор контейнера требует фактическое собственное значение; необязательное сжатие не задаётся. Размер, алгоритм и побайтовая каноничность пакетов не предполагаются.

  7. Описание режима получается явным сопоставлением фактического перечисления с его документированным смыслом. Код не использует числовые значения enum и не предполагает, что Строка(enum) совпадает с именем.

  8. Новый запуск не продолжает и не чинит неудачный опыт. Проверки формы и имена команд помогают не перепутать учебный маршрут, но не являются защитой от подделки вызова.

  9. В этой функции нет работы с базой, пользовательскими профилями, файловой системой или сетью. Будущий запуск на сервере из собственной формы остаётся реальным обращением клиента к серверу; его ошибки не скрываются.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.