База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сохранить таблицу значений в 1С с использованием хранилища?
- В этой теме 1 ответ, 2 участника, последнее обновление 11 часов, 37 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
18 июня 2026 в 10:01 #37867
Процедура СохранитьСписокНазванийСчетов()
// Константы для ключей
КлючОбъекта = «ПоступленияГПОБелэнерго»;
КлючНастроек = «»;
ИмяПользователя = «»;ТаблицаДляСохранения = СписокНазванийСчетов.Выгрузить();
Хранилище_Зн = Новый ХранилищеЗначения(ТаблицаДляСохранения, Новый СжатиеДанных(9));
Хранилище_Зн.Получить();// Сохраняем в хранилище общих настроек
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Хранилище_Зн,, ИмяПользователя);
КонецПроцедуры как происходит запись в хранилище -
18 июня 2026 в 10:01 #37868
Ваша процедура сохраняет данные в некий объект
ХранилищеОбщихНастроек, вызывая методСохранить. Разберём по шагам, что происходит при записи в хранилище:1. Подготовка данных для сохранения
Вы берёте объектСписокНазванийСчетов(вероятно, это ТаблицаЗначений или аналог) и вызываете у него методВыгрузить(). Это создаёт обычную ТаблицуЗначений, пригодную для сериализации.2. Создание объекта ХранилищеЗначения
Создаётся объектХранилищеЗначенияна основе таблицы с данными, с применением сжатия:1С (Код)1Хранилище_Зн = Новый ХранилищеЗначения(ТаблицаДляСохранения, Новый СжатиеДанных(9));Это упаковывает данные в бинарный формат сжатия, который можно хранить в базе.
3. Вызов метода
Получить()
В вашем коде есть вызовХранилище_Зн.Получить();— он возвращает исходные данные из хранилища, но результат не используется, поэтому этот вызов избыточен и не влияет на сохранение.4. Сохранение в хранилище общих настроек
МетодХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Хранилище_Зн,, ИмяПользователя);— это вызов пользовательской процедуры или метода, который реализует логику сохранения настроек в базе.Обычно в таких реализациях происходит следующее:
— По ключам (КлючОбъекта,КлючНастроек,ИмяПользователя) ищется или создаётся элемент справочника или запись регистра сведений, предназначенная для хранения настроек.
— В реквизит или ресурс с типомХранилищеЗначениязаписывается объектХранилище_Зн.
— Запись сохраняется в базе.5. Где именно хранится?
Варианты реализации:
— В справочнике (например, «ВариантыОтчетов» или специализированном справочнике настроек).
— В регистре сведений с реквизитом типаХранилищеЗначения.
— В пользовательском объекте метаданных, созданном специально для хранения настроек.6. Права и доступ
Если сохранение происходит в общий объект (без указания пользователя), то настройки будут общими для всех пользователей. Если указывается пользователь, то настройки персональные.—
### Пример типовой реализации метода
Сохранить(упрощённо):|Функция Сохранить(КлючОбъекта, КлючНастроек, ЗначениеХранилища, НеИспользуется, ИмяПользователя) Экспорт
|
| // Поиск элемента справочника настроек по ключам
| Запрос = Новый Запрос;
| Запрос.Текст =
| «ВЫБРАТЬ ПЕРВЫЕ 1
| | Настройки.Ссылка
| |ИЗ
| | Справочник.ОбщиеНастройки КАК Настройки
| |ГДЕ
| | Настройки.КлючОбъекта = &КлючОбъекта
| | И Настройки.КлючНастроек = &КлючНастроек
| | И Настройки.Пользователь = &Пользователь»;
| Запрос.УстановитьПараметр(«КлючОбъекта», КлючОбъекта);
| Запрос.УстановитьПараметр(«КлючНастроек», КлючНастроек);
| Запрос.УстановитьПараметр(«Пользователь», ИмяПользователя);
|
| Результат = Запрос.Выполнить();
| Если Результат.Пустой() Тогда
| Элемент = Справочники.ОбщиеНастройки.СоздатьЭлемент();
| Элемент.КлючОбъекта = КлючОбъекта;
| Элемент.КлючНастроек = КлючНастроек;
| Элемент.Пользователь = ИмяПользователя;
| Иначе
| Элемент = Результат.Выбрать().Ссылка.ПолучитьОбъект();
| КонецЕсли;
|
| Элемент.ЗначениеНастройки = ЗначениеХранилища;
| Элемент.Записать();
|
|КонецФункции—
### Итог
— Вы создаёте сжатое хранилище значений из таблицы.
— Вызываете метод сохранения, который записывает это хранилище в базу (справочник или регистр сведений).
— Данные сохраняются в поле типаХранилищеЗначения, что позволяет хранить сложные структуры.
— При чтении из базы вы получаете объектХранилищеЗначения, из которого можно восстановить исходные данные.Если у вас нет кода
ХранилищеОбщихНастроек.Сохранить, то это либо внешний модуль, либо общий модуль с пользовательской реализацией. Чтобы понять точнее, нужно смотреть реализацию этого метода.—
Рекомендую посмотреть здесь, там подробно описаны разные варианты хранения настроек в базе с использованием хранилища значений и сжатия:
https://infostart.ru/public/1330558/
https://infostart.ru/public/22132/
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.