Хранилищеобщихнастроек сохранить ошибка формата объекта настроек

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

Объект.ОтборПересчета — это реквизит обработки с произвольным типом данных, в него я потом записываю значения отбора с типом

КомпоновщикНастроекКомпоновкиДанных

&НаСервере

Процедура СохранитьНастройки()  

Объект.ОтборПересчета = ОтборПересчетаНаФорме;

        
КлючОбъекта = «ОтборПересчета»;

КлючНастроек = «ОтборПересчета»;

ОписаниеНастроек = «ОтборПересчета»;

ИмяПользователя = «»;

        
Настройки = Новый Структура(«ЭтоНастройки», Объект.ОтборПересчета);    

    
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);

    
КонецПроцедуры

Возникает след. ошибка: Ошибка при вызове метода контекста (Сохранить)

    ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);

по причине:

Ошибка формата объекта настроек

Я понимаю, что например, если сохранить например реквизит «ДатаНачала» то будет работать. Но как сохранить именно данные Компановщика?

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

Объект.ОтборПересчета — это реквизит обработки с произвольным типом данных, в него я потом записываю значения отбора с типом

КомпоновщикНастроекКомпоновкиДанных

&НаСервере

Процедура СохранитьНастройки()  

Объект.ОтборПересчета = ОтборПересчетаНаФорме;

        

КлючОбъекта = «ОтборПересчета»;

КлючНастроек = «ОтборПересчета»;

ОписаниеНастроек = «ОтборПересчета»;

ИмяПользователя = «»;

        
Настройки = Новый Структура(«ЭтоНастройки», Объект.ОтборПересчета);    

    
ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);

    
КонецПроцедуры

Возникает след. ошибка: Ошибка при вызове метода контекста (Сохранить)

    ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователя);

по причине:

Ошибка формата объекта настроек

Я понимаю, что например, если сохранить например реквизит «ДатаНачала» то будет работать. Но как сохранить именно данные Компановщика?

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

Ваиант 1

Сохранение настроек:

    ИмяНастройки = «ТЕСТ»;
   
ЗначениеНастройки = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
   
СохранитьЗначение(ИмяНастройки, ЗначениеНастройки) ;

  • ИмяНастройки — ключ настроек, тип “строка”.
  • значение — значение произвольного типа, возможность заманчивая, но не стоит слишком увлекаться и сохранять все подряд.

Восстановление настроек:

    ИмяНастройки = «ТЕСТ»;
   
ЗначениеНастройки = ВосстановитьЗначение(ИмяНастройки);
    Если
ЗначениеНастройки = Неопределено Тогда
       
Сообщить(«Нет настройки с ключем ТЕСТ!»);
    КонецЕсли;

  • ИмяНастройки — ключ настройки, тип “строка”
  • возвращает значение произвольного типа, сохраненное ранее.Если восстановить не удалось, возвращает “Неопределено”
Плюсы
  • прост в использовании
  • возможно сохранить настройки произвольного типа текущего пользователя в текущей информационной базе
Минусы
  • Только толстый клиент

  • Возможно работать ТОЛЬКО с настройками текущего пользователя

Вариант 2

Использование объекта ХранилищеОбщихНастроекСчитаю этот вариант наиболее удобным и гибким.

Объект доступен в глобальном контексте. Содержит следующие методы:

Сохранение настроек: 

    // ключи могут быть произвольными строками
   
КлючОбъекта  = «MIKO«;
   
КлючНастроек = «ПанельТелефонии»;
   
// настройки могут быть произвольного типа
   
Настройки    = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
   
ИмяПользователя = ИмяПользователя();

    // имя пользователя — пользователь владелец настроек, если параметр не указать,
    // то настройки будут сохранены для ТЕКУЩЕГО пользователя
   
ИмяПользователя = ИмяПользователя();
   
ХранилищеОбщихНастроек.Cохранить(КлючОбъектаКлючНастроек, Настройки, , ИмяПользователя);

Под пользователем понимается именно пользователь информационной базы! Пример получения имени текущего пользователя:

    // получим имя
   
ИмяТекущегоПользователя = ИмяПользователя();
   
// в типовых конфигурация используется справочник «Пользователи»
    // в этом справочнике в стандартном реквизите «Код» обычно
    // хранят информацию по имени пользователя, пример получения имени:
   
ИмяПользователя = Справочники.Пользователи.НайтиПоНаименованию(«Администратор»).Код;
   
// обычно «Код», для этого справочника — строка фиксированной длинны, потому вероятно разумно обрезать пробелы справа:
   
ИмяПользователя = СокрП(ИмяПользователя);

Восстановление настроек: 

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

    Если СтруктураНастроек = Неопределено Тогда
       
Сообщить(«Не вышло восстановить настройки!»);
    КонецЕсли;

ВладелецНастроек — это имя пользователя, владельца настроек. Параметр очень важный. 

Настройки других пользователей могут получать ТОЛЬКО пользователи с расширенными правами.

Необходимо право «АдминистрированиеДанных«.

Пробелы справа игнорируются!

Плюсы
  • Возможно работать со значениями настроек других пользователей.
  • Доступность: Сервер, толстый клиент, внешнее соединение.

Получение всех ключей настроек по ключу объекта  

    // Пример получения всех настроек по ключу объекта
   
КлючОбъекта = «MIKO»;
   
ВладелецНастроек = ИмяПользователя();
    Попытка
       
// возвращает список значений
        // элементы списка — ключи настроек
       
СтруктураНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(КлючОбъекта, ВладелецНастроек);
    Исключение
       
Сообщить(«Нет прав на восстановление настроек.»);
    КонецПопытки;

Подведем итог

В рамках этой заметки я рассказал о двух вариантах работы с настройками пользователя. Пробуйте :).

Назначение объекта конфигурации «Хранилище настроек» понятно из названия — хранить различные пользовательские настройки. Область применения данного объекта широка — в любой, хоть сколь-нибудь серьезной конфигурации требуется хранить какие-либо пользовательские настройки.

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

Хранилища настроек в конфигураторе

Хранилища настроек в конфигураторе

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

Стандартные хранилища настроек

Итак, по умолчанию, в конфигурации имеются следующие хранилища настроек:

  • ХранилищеВариантовОтчетов — для доступа к настройкам вариантов отчетов.
  • ХранилищеПользовательскихНастроекОтчетов — для доступа к пользовательским настройкам отчетов.
  • ХранилищеНастроекДанныхФорм — для доступа к пользовательским настройкам данных форм.
  • ХранилищеОбщихНастроек — для доступа к общим настройкам.
  • ХранилищеСистемныхНастроек — для доступа к системным настройкам.
  • ХранилищеПользовательскихНастроекДинамическихСписков — для доступа к пользовательским настройкам динамических списков.

К каждому из этих хранилищ можно обратиться как к свойству глобального контекста.

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

Для работы с хранилищами настроек (как со стандартными, так и с добавленными программистом) используются следующие методы.

Запись и получение настройки:

ХранилищеОбщихНастроек.Сохранить(НазваниеОбъекта, НазваниеНастройки, ЗначениеНастройки, ОписаниеНастройки, ИмяПользователя);

ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить(НазваниеОбъекта, НазваниеНастройки, ОписаниеНастройки, ИмяПользователя);

Удаление лишней/ненужной настройки:

ХранилищеОбщихНастроек.Удалить(НазваниеОбъекта, НазваниеНастройки, ИмяПользователя);

Получение списка настроек:

СписокЗначенийНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(ИмяОбъекта, ИмяПользователя);

Параметры «НазваниеОбъекта», «НазваниеНастройки» и «ИмяПользователя» должны строковой тип.

В базе данных, все настройки хранятся в отдельно таблице.

Хранилища настроек создаваемые программистом

Теперь поговорим о тех хранилищах настроек, что создаются программистом. Вообще, программист ничем не ограничен в своем желании создать новое хранилище настроек, но обычно отдельные хранилища настроек создают по следующим причинам:

  • необходимо перемещение настроек между базами данных;
  • необходим ссылочный контроль при хранении настроек;
  • требуется особая структура настроек 1С.

Хранилища настроек добавляют в соответствующем разделе конфигурации.

Ключевой особенностью хранилищ настроек, созданных программистом является необходимость ручной реализации методов записи и получения значений (Сохранить() и Загрузить()). В этих методах программист должен описать сохранение (в регистры сведений, файлы, справочники и тд.) и загрузку настроек при помощи встроенного языка.

В остальном же, принципы работы с созданным хранилищем практически не отличается от работы со стандартными хранилищами настроек.

Доступ к созданному хранилищу можно получить таким образом:

ХранилищаНастроек.НазваниеХранилища.Загрузить();

Кроме этого, созданными хранилищами можно заменять стандартные в различных объектах конфигурации и в самой конфигурации.

Хранилища настроек в свойствах конфигурации

Хранилища настроек в свойствах конфигурации

Хранилища настроек в свойствах отчета

Хранилища настроек в свойствах отчета

Управляемые формы имеют два свойства:

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

Хранилище настроек в управляемых формах

Хранилище настроек в управляемых формах

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

Объект 1С «Хранилище настроек» — это общий объект конфигурации 1С, который позволяет разработчику создавать собственные механизмы хранения настроек в тех случаях, когда возможности стандартного механизма хранения настроек недостаточны.

Хранилища настроек позволяют разработчику хранить пользовательские настройки не в системных таблицах информационной базы, а в объектах конфигурации (например, в специальных справочниках или в регистрах сведений). Благодаря этому разработчик может реализовать собственный формат хранения этих настроек и собственные алгоритмы работы с этими настройками в случаях:

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

Создание своих настроек может понадобиться в том случае, если:

  • необходима миграция настроек между базами данных;
  • необходим ссылочный контроль настроек.

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

Стандартное хранилище настроек 1С используется платформой по умолчанию в тонком клиенте для сохранения настроек 1С пользователя в следующих механизмах платформы:

  1. командный управляемый интерфейс;
  2. формы;
  3. настройки и варианты отчетов.

По умолчанию в конфигурации имеются следующие хранилища настроек:

  1. ХранилищеВариантовОтчетов — для доступа к настройкам вариантов отчетов.
  2. ХранилищеПользовательскихНастроекОтчетов — для доступа к пользовательским настройкам отчетов.
  3. ХранилищеНастроекДанныхФорм — для доступа к пользовательским настройкам данных форм.
  4. ХранилищеОбщихНастроек — для доступа к общим настройкам.
  5. ХранилищеСистемныхНастроек — для доступа к системным настройкам.
  6. ХранилищеПользовательскихНастроекДинамическихСписков — для доступа к пользовательским настройкам динамических списков.

К каждому из этих хранилищ можно обратиться как к свойству глобального контекста.

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

Настройка объекта 1С «Хранилище настроек» в конфигураторе

Хранилище настроек  в конфигураторе 1С может создать разработчик.

Хранилище настроек 1С

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

хранилище настроек пользователя 1с

Использование Хранилища настроек, созданного разработчиком:

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

    ХранилищаНастроек.ИмяХранилища.Сохранить()

Рисунки по настройке хранения в управляемой форме

Использование Хранилища настроек

[свернуть]

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

Хранилище настроек 1С

[свернуть]

При добавлении в конфигурацию собственного хранилища настроек 1С требуется прописать обработчики загрузки и сохранения значений, иначе хранилище работать не будет.

Программные методы работы с хранилищами настроек 1С

Для работы с хранилищами настроек (как со стандартными, так и с добавленными программистом) используются следующие методы.

Запись и получение настройки:

ХранилищеОбщихНастроек.Сохранить(НазваниеОбъекта, НазваниеНастройки, ЗначениеНастройки, ОписаниеНастройки, ИмяПользователя);

ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить(НазваниеОбъекта, НазваниеНастройки, ОписаниеНастройки, ИмяПользователя);

Удаление настройки:

ХранилищеОбщихНастроек.Удалить(НазваниеОбъекта, НазваниеНастройки, ИмяПользователя);

Получение списка настроек:

СписокЗначенийНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(ИмяОбъекта, ИмяПользователя);

ВАЖНО! Параметры НазваниеОбъекта, НазваниеНастройки и ИмяПользователя должны строковой тип.

Ошибка формата объекта настроек

Автор ferrari314, 20 июл 2015, 10:48

0 Пользователей и 1 гость просматривают эту тему.

      ХранилищеОбщихНастроек.Сохранить("История." + НаборЗаписей[0].ИмяОтчета, ""+Форма.УИДДляИстории, СтруктураНастроек);

последний параметр содержит массив реквизитов формы типа Структура.
Вываливает:

ЦитироватьОшибка формата объекта настроек

Очевидно, на 3й параметр. Как обойти?

Вообще функция перебирает и сохраняет все настройки отчета для дальнейшего восстановления — каждый раз уникальная запись по УИД. Поправьте, если есть стандартные методы.


Честно говоря не очень понятно, что из себя представляет ваша «СтруктураНастроек»


Теги:

  • Форум База

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Ошибка формата объекта настроек

Похожие темы (5)

Рейтинг@Mail.ru

Поиск

четверг, 3 сентября 2015 г.

Обновление КАМИН 5.0.22. Ошибка формата объекта настроек.

Вот такое получаем при первом запуске:

Данная неприятность происходит из-за некорректно настроенных сохраненных настроек отчетов.
Решение:
Возвращаемся к 5.0.22
В режиме 1С:Предприятие: Администрирование — Настройки пользователей и прав — Настройки пользователей — Настройки отчетов.
Скорее всего увидим список настроек, один из которых косячный.
Либо удалить их сразу все, либо методом тыка обнаружить неправильный.
После чего обновляемся обычным способом.

Комментариев нет:

Отправить комментарий

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

Ваиант 1

Сохранение настроек:

    ИмяНастройки = «ТЕСТ»;
   
ЗначениеНастройки = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
   
СохранитьЗначение(ИмяНастройки, ЗначениеНастройки) ;

  • ИмяНастройки — ключ настроек, тип “строка”.
  • значение — значение произвольного типа, возможность заманчивая, но не стоит слишком увлекаться и сохранять все подряд.

Восстановление настроек:

    ИмяНастройки = «ТЕСТ»;
   
ЗначениеНастройки = ВосстановитьЗначение(ИмяНастройки);
    Если
ЗначениеНастройки = Неопределено Тогда
       
Сообщить(«Нет настройки с ключем ТЕСТ!»);
    КонецЕсли;

  • ИмяНастройки — ключ настройки, тип “строка”
  • возвращает значение произвольного типа, сохраненное ранее.Если восстановить не удалось, возвращает “Неопределено”
Плюсы
  • прост в использовании
  • возможно сохранить настройки произвольного типа текущего пользователя в текущей информационной базе
Минусы
  • Только толстый клиент

  • Возможно работать ТОЛЬКО с настройками текущего пользователя

Вариант 2

Использование объекта ХранилищеОбщихНастроекСчитаю этот вариант наиболее удобным и гибким.

Объект доступен в глобальном контексте. Содержит следующие методы:

Сохранение настроек: 

    // ключи могут быть произвольными строками
   
КлючОбъекта  = «MIKO«;
   
КлючНастроек = «ПанельТелефонии»;
   
// настройки могут быть произвольного типа
   
Настройки    = Новый Структура(«Это настройки произвольного типа, к примеру структура», «»);
   
ИмяПользователя = ИмяПользователя();

    // имя пользователя — пользователь владелец настроек, если параметр не указать,
    // то настройки будут сохранены для ТЕКУЩЕГО пользователя
   
ИмяПользователя = ИмяПользователя();
   
ХранилищеОбщихНастроек.Cохранить(КлючОбъектаКлючНастроек, Настройки, , ИмяПользователя);

Под пользователем понимается именно пользователь информационной базы! Пример получения имени текущего пользователя:

    // получим имя
   
ИмяТекущегоПользователя = ИмяПользователя();
   
// в типовых конфигурация используется справочник «Пользователи»
    // в этом справочнике в стандартном реквизите «Код» обычно
    // хранят информацию по имени пользователя, пример получения имени:
   
ИмяПользователя = Справочники.Пользователи.НайтиПоНаименованию(«Администратор»).Код;
   
// обычно «Код», для этого справочника — строка фиксированной длинны, потому вероятно разумно обрезать пробелы справа:
   
ИмяПользователя = СокрП(ИмяПользователя);

Восстановление настроек: 

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

    Если СтруктураНастроек = Неопределено Тогда
       
Сообщить(«Не вышло восстановить настройки!»);
    КонецЕсли;

ВладелецНастроек — это имя пользователя, владельца настроек. Параметр очень важный. 

Настройки других пользователей могут получать ТОЛЬКО пользователи с расширенными правами.

Необходимо право «АдминистрированиеДанных«.

Пробелы справа игнорируются!

Плюсы
  • Возможно работать со значениями настроек других пользователей.
  • Доступность: Сервер, толстый клиент, внешнее соединение.

Получение всех ключей настроек по ключу объекта  

    // Пример получения всех настроек по ключу объекта
   
КлючОбъекта = «MIKO»;
   
ВладелецНастроек = ИмяПользователя();
    Попытка
       
// возвращает список значений
        // элементы списка — ключи настроек
       
СтруктураНастроек = ХранилищеОбщихНастроек.ПолучитьСписок(КлючОбъекта, ВладелецНастроек);
    Исключение
       
Сообщить(«Нет прав на восстановление настроек.»);
    КонецПопытки;

Подведем итог

В рамках этой заметки я рассказал о двух вариантах работы с настройками пользователя. Пробуйте :).

  • Хонда фит ошибка p1491
  • Хранивший слышавший веривший созревший где ошибка
  • Хуавей ошибка карты памяти
  • Хотпоинт аристон посудомойка ошибка f02
  • Хонда фит ошибка p1354