Получает из хранилища сохраненное в нем значение.
Синтаксис
Получить()Примеры платформы
МояКартинка = ХранилищеКартинки.Получить();Полное описание, параметры и ограничения
ХранилищеЗначения.Получить (ValueStorage.Get)
ХранилищеЗначения (ValueStorage)
Получить (Get)
Доступен, начиная с версии 8.0.
Синтаксис:
Получить()
Возвращаемое значение:
Тип: Произвольный.
Значение, содержащееся в хранилище.
Описание:
Получает из хранилища сохраненное в нем значение.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример:
МояКартинка = ХранилищеКартинки.Получить();
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Проверить политику файлового реквизита и управляющее поле
Для подготовленных файловых реквизитов читаем два новых свойства метаданных 8.3.26+. Отличаем режим хранения от Булево-поля, управляющего записью.
Где и как запускать
Полный серверный модуль собственной учебной конфигурации 8.5.1.1343. Нет применения настроек или удаления данных хранилища.
Подготовка
Создайте отдельную пустую учебную конфигурацию на платформе 8.5.1.1343 с режимом совместимости НеИспользовать. Не используйте производственную базу и не изменяйте предоставленные выгрузки КА2/УТ/УНФ.
Добавьте справочник УчебныеФайлы и три реквизита: Данные и Предпросмотр с типом ХранилищеЗначения, ИспользоватьВнешнееХранение с типом Булево. Обновите только свою учебную базу. Сами записи справочника создавать не нужно.
Создайте серверный общий модуль УчебныеЗадачи, вставьте полный модуль одного урока и вызовите ВыполнитьПример() из своей серверной команды.
Упражнения с Новый СоставХранимыхДанныхХранилищаДвоичныхДанных и параметрами подключения меняют только собственные объекты в памяти. Нет установки состава, записи менеджера, резервного копирования или физической очистки.
Для диагностики настоящего хранилища нужен отдельно подготовленный администратором учебный сервер. Код различает отсутствие поддержки платформой и ошибку чтения состояния, не включает сервис автоматически.
Процедура ВыполнитьПример() Экспорт
Справочник = Метаданные.Справочники.Найти("УчебныеФайлы");
Если Справочник = Неопределено Тогда
ВызватьИсключение "Сначала подготовьте собственный учебный справочник УчебныеФайлы";
КонецЕсли;
Данные = Справочник.Реквизиты.Найти("Данные");
Предпросмотр = Справочник.Реквизиты.Найти("Предпросмотр");
Если Данные = Неопределено ИЛИ Предпросмотр = Неопределено Тогда
ВызватьИсключение "Нужны два собственных реквизита ХранилищеЗначения";
КонецЕсли;
Если НЕ Данные.Тип.СодержитТип(Тип("ХранилищеЗначения"))
ИЛИ НЕ Предпросмотр.Тип.СодержитТип(Тип("ХранилищеЗначения")) Тогда
ВызватьИсключение "Состав допускает данные типа ХранилищеЗначения, не произвольную строку";
КонецЕсли;
Режим = Данные.ИспользованиеХраненияВХранилищеДвоичныхДанных;
Сообщить("Использование хранения: " + Строка(Режим));
Если Режим = ИспользованиеХраненияВХранилищеДвоичныхДанных.Использовать Тогда
Сообщить("На уровне описания реквизита хранение используется; доступность сервиса проверяется отдельно");
ИначеЕсли Режим = ИспользованиеХраненияВХранилищеДвоичныхДанных.НеИспользовать Тогда
Сообщить("На уровне описания реквизита хранение не используется");
КонецЕсли;
Поле = Данные.ПолеИспользованияХраненияВХранилищеДвоичныхДанных;
Если Поле = Неопределено Тогда
Сообщить("Управляющее поле не назначено; значение Булево у несуществующей записи не читается");
Иначе
Сообщить("Управляющий реквизит: " + Поле.Имя);
Сообщить(Поле.Тип.СодержитТип(Тип("Булево")));
КонецЕсли;
УчебноеСодержимое = Новый ХранилищеЗначения("Книга: учебное содержимое только в памяти");
Сообщить(УчебноеСодержимое.Получить() = "Книга: учебное содержимое только в памяти");
Сообщить("Значение не присвоено объекту справочника и не записано в сервис");
КонецПроцедурыРазбор по шагам
Оба свойства метаданных доступны с 8.3.26. Справка указывает для них Чтение и запись, однако этот урок только читает существующую настройку.
ИспользованиеХраненияВХранилищеДвоичныхДанных — системный режим, а не текущее содержимое файла или право пользователя.
ПолеИспользованияХраненияВХранилищеДвоичныхДанных при назначении содержит метаданные Булево-реквизита. Сначала проверяем возможное отсутствие, затем его тип.
Чтобы исследовать непустую ветку, настройте это свойство в Конфигураторе только своего учебного Данные на собственный реквизит ИспользоватьВнешнееХранение, если оно доступно в вашей подготовленной схеме.
Новый ХранилищеЗначения создаёт своё содержимое в памяти. Это не подключение к отдельному сервису и не подтверждение физического размещения файла.
Как проверить результат
Показан реальный режим и наличие/отсутствие управляющего поля. При назначенном поле проверка Булево — Истина.
Контроль собственного содержимого — Истина. Не создано записей справочника и не изменена политика хранения.
Ожидаемый результат
Ученик различает настройку схемы, управляющий реквизит и реальное сохранение двоичных данных.
На что обратить внимание
Свойство метаданных поля не является значением Булево конкретного элемента справочника.
ХранилищеЗначения и отдельное хранилище двоичных данных — не один и тот же объект.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Два пакета настроек панели разделов: сохраняем варианты в памяти
Создать собственные настройки командного интерфейса, упаковать текстовый и комбинированный режимы в два ХранилищеЗначения и реально перечитать их после изменения источника и извлечённого экземпляра. Показать фактический паспорт подготовленных профилей без применения к интерфейсу и без записи системных настроек.
Где и как запускать
Сервер: собственный неглобальный непривилегированный ПакетыКомандногоИнтерфейса85. Настройки и контейнеры остаются на сервере; клиент получает только Строка.
Подготовка
Будущий ручной опыт: собственная новая пустая учебная конфигурация на платформе 8.5.1.1343, управляемое приложение и толстый управляемый клиент. Не рабочая УТ, КА, УНФ или БП. Настройки и два контейнера создаются только в памяти функции без входных данных; пользовательские профили и база не читаются и не изменяются.
Общие → Общие модули → создать ПакетыКомандногоИнтерфейса85. Сервер=Да; Глобальный, Привилегированный, Вызов сервера, Клиент (управляемое приложение), Клиент (обычное приложение), Внешнее соединение=Нет. Повторное использование возвращаемых значений=Не использовать. Основной блок вставьте ЦЕЛИКОМ в пустой модуль.
Общие → Общие формы → создать управляемую ПроверкаПакетовИнтерфейса85. Добавьте один реквизит Протокол85: Строка неограниченной длины. Выведите его многострочным полем с ПутьКДанным=Протокол85 и ТолькоПросмотр=Да.
В свойствах своей формы установите АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это разные перечисления, не Булево. Обработчики сохранения и автоматического запуска не нужны.
В форме создайте команду Проверить85, Действие=Проверить85; выведите кнопку. Второй блок вставьте ЦЕЛИКОМ в пустой модуль формы. Настоящий объект Команда передаёт платформа при нажатии; не подставляйте его вручную.
Общие → Общие команды → создать ОткрытьПакетыИнтерфейса85 без параметра. Включите её в командный интерфейс собственной учебной подсистемы. Третий блок вставьте ЦЕЛИКОМ в модуль этой общей команды; &НаКлиенте задаёт исполнение, а #Если проверяет вид приложения.
После будущей проверки синтаксиса сохраните конфигурацию и обновите только собственную учебную базу. Откройте её толстым управляемым клиентом, своей общей командой откройте форму и нажмите Проверить85. Все настройки, упаковка и проверки находятся на сервере; клиенту передаётся только строка.
Не нужны виртуальная машина, отдельный системный пользователь, UUID, справочники, разрешение на запись или системное хранилище настроек. Здесь нет сохранения профиля пользователя: ХранилищеЗначения — созданный в памяти контейнер, который мы не помещаем в базу или файл.
Компиляция и выполнение в 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");
#Иначе
ВызватьИсключение "Нужен толстый управляемый клиент";
#КонецЕсли
КонецПроцедурыРазбор по шагам
Создаём собственные НастройкиКомандногоИнтерфейса и сразу задаём Текст. Проверка читает настоящий режим и формирует его описание; значение по умолчанию нам не требуется.
Первый ХранилищеЗначения принимает фактический объект настроек. Метка Сериализуется в описании настроек разрешает помещать их в такой контейнер. Создание контейнера само по себе не записывает пользовательский профиль.
Тот же исходный объект меняем на КартинкаИТекст и создаём второй пакет. Затем исходные настройки меняем ещё раз — на Картинка. Теперь у нас три разных целевых состояния, поэтому подмена контейнеров исходным объектом заметна.
Получить у каждого пакета возвращает произвольное значение: перед чтением свойства проверяем реальный тип НастройкиКомандногоИнтерфейса. Первый результат должен иметь Текст, второй — КартинкаИТекст. Оба фактических режима используются в сравнении и описании.
Первый извлечённый экземпляр изменяем на Картинка. После этого снова вызываем Получить у обоих пакетов и проверяем реальные Текст и КартинкаИТекст. Старые переменные не заменяют повторное чтение.
Снова читаем режим исходного объекта. Только после всех проверок строим строковый паспорт из фактических описаний двух перечитанных пакетов, источника и изменённого извлечённого экземпляра.
Форма очищает прежний текст перед обращением к серверу. При успехе показывает паспорт; при ошибке пишет, что пакеты не подтверждены, и передаёт исключение. Прошлый успешный отчёт не должен выглядеть результатом нового неудачного опыта.
Как проверить результат
В своей учебной базе откройте форму настоящей общей командой и нажмите Проверить85. Ожидайте: пакет 1 — только текст, пакет 2 — картинка и текст, исходный объект и изменённый извлечённый экземпляр — только картинка.
В отладчике остановитесь перед первым Получить. Проверьте фактическое поле Настройки85: Картинка. Затем по шагам убедитесь, что ПрочитаноА85 имеет Текст, а ПрочитаноБ85 — КартинкаИТекст. Не вызывайте обработчик вручную.
После изменения ПрочитаноА85 проверьте его реальную Картинка. Выполните оба повторных Получить: ПовторноА85 должен снова иметь Текст, ПовторноБ85 — КартинкаИТекст. Именно эти новые результаты дают окончательный паспорт.
Только в копии своего учебного модуля временно поменяйте первое присваивание Текст на Картинка, оставив ожидаемый Текст. Первое сравнение должно остановить опыт до упаковки; успешный паспорт появиться не должен.
Отдельный учебный опыт в своей копии: замените ПовторноА85 = ПакетА85.Получить() на ПовторноА85 = ПрочитаноА85. Изменённый экземпляр имеет Картинка, поэтому проверка должна остановиться. После проверки верните исходную строку вручную.
Повторное обычное нажатие создаёт новые собственные объекты и контейнеры. Не требуйте иных значений или изменений реальной панели разделов: такой операции в уроке нет.
Если компиляция, обращение к серверу или чтение контейнера завершились ошибкой, результат — незавершённый опыт. Не выдавайте сообщение об остановке за подтверждение упаковки или независимости.
Ожидаемый результат
Будущий успешный паспорт: пакет 1 — только текст; пакет 2 — картинка и текст; исходный объект и изменённый извлечённый экземпляр — только картинка. Оба повторно прочитанных пакета сохраняют заданные публичные режимы. Реальная панель разделов не изменяется этим кодом. Запуск в 1С пока не выполнен.
На что обратить внимание
НастройкиКомандногоИнтерфейса и его публичное свойство доступны на сервере и в толстом клиенте. Более широкая доступность перечисления ОтображениеПанелиРазделов не разрешает создавать настройки в тонком клиенте.
Сериализуется разрешает ХранилищеЗначения, но не доказывает конкретный XML, JSON, XDTO или внутренний строковый формат этих настроек. Никакого такого формата урок не строит и не сравнивает.
Получить возвращает Произвольный. Проверка типа стоит перед доступом к свойству каждого извлечённого значения; неизвестный объект не принимается за настройки по имени переменной.
Проверяется единственное публичное свойство режима и его фактическое сохранение при собственных изменениях. Это не сравнение скрытых полей, полной эквивалентности объектов, ссылочной идентичности или сериализованных байтов.
Успех упаковки не означает применения профиля к панели разделов. Системное хранилище настроек не вызывается, пользовательские настройки не сохраняются и реальная панель не обязана изменяться.
Конструктор контейнера требует фактическое собственное значение; необязательное сжатие не задаётся. Размер, алгоритм и побайтовая каноничность пакетов не предполагаются.
Описание режима получается явным сопоставлением фактического перечисления с его документированным смыслом. Код не использует числовые значения enum и не предполагает, что Строка(enum) совпадает с именем.
Новый запуск не продолжает и не чинит неудачный опыт. Проверки формы и имена команд помогают не перепутать учебный маршрут, но не являются защитой от подделки вызова.
В этой функции нет работы с базой, пользовательскими профилями, файловой системой или сетью. Будущий запуск на сервере из собственной формы остаётся реальным обращением клиента к серверу; его ошибки не скрываются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.