Добрый день! Помогите пожалуйста решить данную проблему: в обработке есть возможность настройки отбора, нужно чтобы при закрытии формы настройки сохранялись, соответственно при открытии повторно считывались. Вот как реализовано:
Объект.ОтборПересчета — это реквизит обработки с произвольным типом данных, в него я потом записываю значения отбора с типом
КомпоновщикНастроекКомпоновкиДанных
&НаСервере
Процедура СохранитьНастройки()
Объект.ОтборПересчета = ОтборПересчетаНаФорме;
КлючОбъекта = «ОтборПересчета»;
КлючНастроек = «ОтборПересчета»;
ОписаниеНастроек = «ОтборПересчета»;
ИмяПользователя = «»;
Настройки = Новый Структура(«ЭтоНастройки», Объект.ОтборПересчета);
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
КонецПроцедуры
Возникает след. ошибка: Ошибка при вызове метода контекста (Сохранить)
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);
по причине:
Ошибка формата объекта настроек
Я понимаю, что например, если сохранить например реквизит «ДатаНачала» то будет работать. Но как сохранить именно данные Компановщика?
Задача: Необходим механизм, позволяющий сохранять произвольные пользовательские данные (настройки). Настройки относятся к внешней обработке, вариант с изменением конфигурации не рассматривается. План видов характеристик трогать тоже нет желания.
В рамках заметки предложено два вариант работы с настройками пользователя.
Ваиант 1
Сохранение настроек:
ИмяНастройки = «ТЕСТ»;
ЗначениеНастройки = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
СохранитьЗначение(ИмяНастройки, ЗначениеНастройки) ;
- ИмяНастройки — ключ настроек, тип “строка”.
- значение — значение произвольного типа, возможность заманчивая, но не стоит слишком увлекаться и сохранять все подряд.
Восстановление настроек:
ИмяНастройки = «ТЕСТ»;
ЗначениеНастройки = ВосстановитьЗначение(ИмяНастройки);
Если ЗначениеНастройки = Неопределено Тогда
Сообщить(«Нет настройки с ключем ТЕСТ!»);
КонецЕсли;
- ИмяНастройки — ключ настройки, тип “строка”
- возвращает значение произвольного типа, сохраненное ранее.Если восстановить не удалось, возвращает “Неопределено”
Плюсы
- прост в использовании
- возможно сохранить настройки произвольного типа текущего пользователя в текущей информационной базе
Минусы
-
Только толстый клиент
- Возможно работать ТОЛЬКО с настройками текущего пользователя
Вариант 2
Использование объекта ХранилищеОбщихНастроек. Считаю этот вариант наиболее удобным и гибким.
Объект доступен в глобальном контексте. Содержит следующие методы:
Сохранение настроек:
// ключи могут быть произвольными строками
КлючОбъекта = «MIKO«;
КлючНастроек = «ПанельТелефонии»;
// настройки могут быть произвольного типа
Настройки = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
ИмяПользователя = ИмяПользователя();
// имя пользователя — пользователь владелец настроек, если параметр не указать,
// то настройки будут сохранены для ТЕКУЩЕГО пользователя
ИмяПользователя = ИмяПользователя();
ХранилищеОбщихНастроек.Cохранить(КлючОбъекта, КлючНастроек, Настройки, , ИмяПользователя);
Под пользователем понимается именно пользователь информационной базы! Пример получения имени текущего пользователя:
// получим имя
ИмяТекущегоПользователя = ИмяПользователя();
// в типовых конфигурация используется справочник «Пользователи»
// в этом справочнике в стандартном реквизите «Код» обычно
// хранят информацию по имени пользователя, пример получения имени:
ИмяПользователя = Справочники.Пользователи.НайтиПоНаименованию(«Администратор»).Код;
// обычно «Код», для этого справочника — строка фиксированной длинны, потому вероятно разумно обрезать пробелы справа:
ИмяПользователя = СокрП(ИмяПользователя);
Восстановление настроек:
КлючОбъекта = «MIKO«;
КлючНастроек = «ПанельТелефонии»;
ВладелецНастроек = ИмяПользователя();
// Для восстановления настроек необходимо воспользоваться функцией Загрузить
СтруктураНастроек = Неопределено;
Попытка
СтруктураНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта,КлючНастроек,,ВладелецНастроек);
// если настроек нет, то будет возвращено значение «Неопределено»
Исключение
Сообщить(«Нет прав на восстановление настроек.»);
КонецПопытки;
Если СтруктураНастроек = Неопределено Тогда
Сообщить(«Не вышло восстановить настройки!»);
КонецЕсли;
ВладелецНастроек — это имя пользователя, владельца настроек. Параметр очень важный.
Настройки других пользователей могут получать ТОЛЬКО пользователи с расширенными правами.
Необходимо право «АдминистрированиеДанных«.
Пробелы справа игнорируются!
Плюсы
- Возможно работать со значениями настроек других пользователей.
- Доступность: Сервер, толстый клиент, внешнее соединение.
Получение всех ключей настроек по ключу объекта
// Пример получения всех настроек по ключу объекта
КлючОбъекта = «MIKO»;
ВладелецНастроек = ИмяПользователя();
Попытка
// возвращает список значений
// элементы списка — ключи настроек
СтруктураНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(КлючОбъекта, ВладелецНастроек);
Исключение
Сообщить(«Нет прав на восстановление настроек.»);
КонецПопытки;
Подведем итог
В рамках этой заметки я рассказал о двух вариантах работы с настройками пользователя. Пробуйте :).
Назначение объекта конфигурации «Хранилище настроек» понятно из названия — хранить различные пользовательские настройки. Область применения данного объекта широка — в любой, хоть сколь-нибудь серьезной конфигурации требуется хранить какие-либо пользовательские настройки.
Для удобства программистов в каждой конфигурации существует несколько стандартных хранилищ настроек, кроме этого есть возможность создать столько дополнительных хранилищ настроек, сколько будет нужно.

Сначала разберемся со стандартными хранилищами настроек, которые присутствуют в любой конфигурации 1С начиная с версии 8.2.
Стандартные хранилища настроек
Итак, по умолчанию, в конфигурации имеются следующие хранилища настроек:
- ХранилищеВариантовОтчетов — для доступа к настройкам вариантов отчетов.
- ХранилищеПользовательскихНастроекОтчетов — для доступа к пользовательским настройкам отчетов.
- ХранилищеНастроекДанныхФорм — для доступа к пользовательским настройкам данных форм.
- ХранилищеОбщихНастроек — для доступа к общим настройкам.
- ХранилищеСистемныхНастроек — для доступа к системным настройкам.
- ХранилищеПользовательскихНастроекДинамическихСписков — для доступа к пользовательским настройкам динамических списков.
К каждому из этих хранилищ можно обратиться как к свойству глобального контекста.
Стандартные хранилище программист может использовать для своих нужд, сохраняя различные настройки в разрезе пользователя, объекта и самой настройки.
Для работы с хранилищами настроек (как со стандартными, так и с добавленными программистом) используются следующие методы.
Запись и получение настройки:
|
ХранилищеОбщихНастроек.Сохранить(НазваниеОбъекта, НазваниеНастройки, ЗначениеНастройки, ОписаниеНастройки, ИмяПользователя); ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить(НазваниеОбъекта, НазваниеНастройки, ОписаниеНастройки, ИмяПользователя); |
Удаление лишней/ненужной настройки:
|
ХранилищеОбщихНастроек.Удалить(НазваниеОбъекта, НазваниеНастройки, ИмяПользователя); |
Получение списка настроек:
|
СписокЗначенийНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(ИмяОбъекта, ИмяПользователя); |
Параметры «НазваниеОбъекта», «НазваниеНастройки» и «ИмяПользователя» должны строковой тип.
В базе данных, все настройки хранятся в отдельно таблице.
Хранилища настроек создаваемые программистом
Теперь поговорим о тех хранилищах настроек, что создаются программистом. Вообще, программист ничем не ограничен в своем желании создать новое хранилище настроек, но обычно отдельные хранилища настроек создают по следующим причинам:
- необходимо перемещение настроек между базами данных;
- необходим ссылочный контроль при хранении настроек;
- требуется особая структура настроек 1С.
Хранилища настроек добавляют в соответствующем разделе конфигурации.
Ключевой особенностью хранилищ настроек, созданных программистом является необходимость ручной реализации методов записи и получения значений (Сохранить() и Загрузить()). В этих методах программист должен описать сохранение (в регистры сведений, файлы, справочники и тд.) и загрузку настроек при помощи встроенного языка.
В остальном же, принципы работы с созданным хранилищем практически не отличается от работы со стандартными хранилищами настроек.
Доступ к созданному хранилищу можно получить таким образом:
|
ХранилищаНастроек.НазваниеХранилища.Загрузить(); |
Кроме этого, созданными хранилищами можно заменять стандартные в различных объектах конфигурации и в самой конфигурации.


Управляемые формы имеют два свойства:
- Автоматическое сохранение данных — если выбрано значение «Использовать», то данные будут сохраняться автоматически в стандартное хранилище настроек данных форм;
- Сохранение данных в настройках — если выбрано значение «Использовать список», то в окне реквизитов формы появится столбец «Сохранение», с помощью которого можно указать какие реквизиты формы должны сохраняться, а также появиться возможность выбрать хранилище настроек для этих данных.

На этом все, надеюсь данная статья Вам помогла.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Загрузка…
Объект 1С «Хранилище настроек» — это общий объект конфигурации 1С, который позволяет разработчику создавать собственные механизмы хранения настроек в тех случаях, когда возможности стандартного механизма хранения настроек недостаточны.
Хранилища настроек позволяют разработчику хранить пользовательские настройки не в системных таблицах информационной базы, а в объектах конфигурации (например, в специальных справочниках или в регистрах сведений). Благодаря этому разработчик может реализовать собственный формат хранения этих настроек и собственные алгоритмы работы с этими настройками в случаях:
- когда требуется особенная структура хранения настроек;
- когда необходимо обеспечить передачу настроек в пределах распределенной информационной базы;
- когда существуют особенные требования к администрированию настроек и т.д.
Создание своих настроек может понадобиться в том случае, если:
- необходима миграция настроек между базами данных;
- необходим ссылочный контроль настроек.
В свойствах конфигурации, отчетов, обработок или форм можно переопределить сохранение настроек в хранилище, добавленное разработчиком. А в формах загрузки и сохранения настроек описать алгоритмы, в соответствии с которыми настройки будут сохраняться/восстанавливаться.
Стандартное хранилище настроек 1С используется платформой по умолчанию в тонком клиенте для сохранения настроек 1С пользователя в следующих механизмах платформы:
- командный управляемый интерфейс;
- формы;
- настройки и варианты отчетов.
По умолчанию в конфигурации имеются следующие хранилища настроек:
- ХранилищеВариантовОтчетов — для доступа к настройкам вариантов отчетов.
- ХранилищеПользовательскихНастроекОтчетов — для доступа к пользовательским настройкам отчетов.
- ХранилищеНастроекДанныхФорм — для доступа к пользовательским настройкам данных форм.
- ХранилищеОбщихНастроек — для доступа к общим настройкам.
- ХранилищеСистемныхНастроек — для доступа к системным настройкам.
- ХранилищеПользовательскихНастроекДинамическихСписков — для доступа к пользовательским настройкам динамических списков.
К каждому из этих хранилищ можно обратиться как к свойству глобального контекста.
Стандартные хранилище разработчик может использовать для своих нужд, сохраняя различные настройки в разрезе пользователя, объекта и самой настройки.
Настройка объекта 1С «Хранилище настроек» в конфигураторе
Хранилище настроек в конфигураторе 1С может создать разработчик.


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

Использование Хранилища настроек, созданного разработчиком:
- В тонком клиенте 1С возможно автоматическое использование хранилища.
- В управляемой форме — настройкой параметров:
- АвтоматическоеСохранениеДанныхВНастройках – автоматически в стандартное хранилище настроек форм;
- СохранениеДанныхВНастройках – «Использовать список» – в списке реквизитов формы появится колонка флагов «Сохранение»; а ниже параметра — поле «Хранилище настроек», в котором можно указать созданное хранилище настроек.
- В отчете (в том числе внешнем) — настройкой параметров «Хранилище вариантов» и «Хранилище настроек» (для выбора созданного хранилища).
- В толстом клиенте — необходимо прописать непосредственный вызов сохранения настроек 1С:
ХранилищаНастроек.ИмяХранилища.Сохранить()
Рисунки по настройке хранения в управляемой форме


[свернуть]
Хранилище настроек 1С (настройка в отчете)

[свернуть]
При добавлении в конфигурацию собственного хранилища настроек 1С требуется прописать обработчики загрузки и сохранения значений, иначе хранилище работать не будет.
Программные методы работы с хранилищами настроек 1С
Для работы с хранилищами настроек (как со стандартными, так и с добавленными программистом) используются следующие методы.
Запись и получение настройки:
|
ХранилищеОбщихНастроек.Сохранить(НазваниеОбъекта, НазваниеНастройки, ЗначениеНастройки, ОписаниеНастройки, ИмяПользователя); ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить(НазваниеОбъекта, НазваниеНастройки, ОписаниеНастройки, ИмяПользователя); |
Удаление настройки:
|
ХранилищеОбщихНастроек.Удалить(НазваниеОбъекта, НазваниеНастройки, ИмяПользователя); |
Получение списка настроек:
|
СписокЗначенийНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(ИмяОбъекта, ИмяПользователя); |
ВАЖНО! Параметры НазваниеОбъекта, НазваниеНастройки и ИмяПользователя должны строковой тип.
