Перейти к содержимому

1с как обработке сохранить настройки

  • автор:

Сохранение произвольных параметров для внешней обработки

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

В предыдущих версиях типовых (УТ10.3, БП 2.0, ЗУП 2.5) никаких проблем с этим не было, т.к. был механизм Дополнительных параметров, позволяющий сохранять и использовать произвольные параметры при работе с внешней обработкой, однако, в новых версиях (УТ11, БП 3.0, ЗУП 3.1 и т.д.) нас лишили этого удобного механизма.

Ниже предлагается описание одного из способов сохранения и использования произвольных доп.параметров для внешних обработок. Для этой цели воспользуемся объектом «ХранилищеОбщихНастроек».

У этого объекта есть метод

По умолчанию (если параметр не задан) настройки сохраняются для текущего пользователя. Важно понимать, что во-первых, это просто строка, а во-вторых, в случае если у пользователя, вызвашего этот метод есть право «АдминистрированиеДанных» он может работать с настройками других пользователей и мы можем сохранить общие настройки для некого виртуального «пользователя» ВнешниеОбработки, естественно, никакого пользователя ВнешниеОбработки у нас в базе нет, это просто ключ, в разрезе которого мы будем хранить настройки для всех внешних обработок.

в нашем случае ключом будет Имя внешней обработки для которой сохраняем настройки, а — строка «ДополнительныеПараметры»(имя можно придумать любое).
Сами настройки передаются в параметре тип параметра произвольный. Удобнее всего для наших целей использовать структуру.

Вот собственно и все. Далее в самой внешней обработке мы сможем считать настройки с помощью метода

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

Буду рад, если кому-то пригодится этот прием в работе. Также,если после прочтения остались вопросы с удовольствием отвечу на них в комментариях.

1с как обработке сохранить настройки

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

На нет и суда нет.

Сделай регистр, в чём вопрос?

в бсп в справочнике внешних обработок хранится

(2) тогда сами придумайте справочник ДополнительныеОтчетыИОбработки, добавьте в него реквизит ХранилищеНастроек с типом ХранилищеЗначения и храните там для каждой внешней обработки структуру с настройками

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

1С. Сохранение настроек обработки

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

Решение

Для сохранения настроек воспользуемся хранилищем настроек. Если конфигурация позволяет, то можно создать свое хранилище, или же воспользоваться одним из системных. Считаем, что конфигурация типовая(не редактируется), в качестве хранилища будем использовать ХранилищеНастроекДанныхФорм.

В форме определим команду Сохранить настройки, в которой вызовем метод Сохранить() указав ключ объекта, ключ настроек, сами настройки и пользователя:

&НаКлиенте Процедура СохранитьНастройки(Команда) СохранитьНастройкиНаСервере(); КонецПроцедуры &НаСервере Процедура СохранитьНастройкиНаСервере() // Подготовка структуры настроек для сохранения НастройкиОбработки = Новый Структура(); НастройкиОбработки.Вставить("Реквизит1", Объект.Реквизит1); НастройкиОбработки.Вставить("Реквизит2", Объект.Реквизит2); НастройкиОбработки.Вставить("Реквизит3", Объект.Реквизит3); НастройкиОбработки.Вставить("ТабличнаяЧасть1", Объект.ТабличнаяЧасть1.Выгрузить()); // Сохранение настроек в хранилище ХранилищеНастроекДанныхФорм.Сохранить("Обработка_1", "НастройкиЗаполнения", НастройкиОбработки, , ПараметрыСеанса.ТекущийПользователь); КонецПроцедуры 

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

&НаКлиенте Процедура ВосстановитьНастройки(Команда) Оповещение = Новый ОписаниеОповещения("ВосстановитьНастройкиПродолжение", ЭтаФорма); ТекстВопроса = НСтр("ru = 'Настройки будут замещены сохраненными ранее. Продолжить?'"); ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры &НаКлиенте Процедура ВосстановитьНастройкиПродолжение(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда ВосстановитьНастройкиНаСервере(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ВосстановитьНастройкиНаСервере() НастройкиОбработки = ХранилищеНастроекДанныхФорм.Загрузить("Обработка_1", "НастройкиЗаполнения", , ПараметрыСеанса.ТекущийПользователь); Если НастройкиОбработки = Неопределено Тогда Возврат; // Нет сохраненных настроек КонецЕсли; // Восстановление настроек из хранилища Объект.Реквизит1 = НастройкиОбработки.Реквизит1; Объект.Реквизит2 = НастройкиОбработки.Реквизит2; Объект.Реквизит3 = НастройкиОбработки.Реквизит3; Объект.ТабличнаяЧасть1.Загрузить(НастройкиОбработки.ТабличнаяЧасть1); КонецПроцедуры 

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

Сохранение настроек внешней обработки

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

4. vadim1011985 98 20.01.16 17:23 Сейчас в теме

Вообще можно сделать проще. У Формы устанавливаем галочки «Сохранить значения», «восстанавилавать значения» Список реквизитов заполняется в «СохраняемыеЗначения» Пользователю остается после заполнения реквизитов нажать «Сохранить значение» на панели действия формы.

odamcha; paran; + 2 – Ответить
5. yz2508 08.10.19 10:47 Сейчас в теме

Функции для управляемой формы. Сохраняют, восстанавливают все поля ввода формы в/из настройки. Есть функция удаления настроек.

//// Начало Обработка пользовательский настроек &НаСервере Процедура СохранитьНастройкиНаСервере(КлючОбъекта, КлючНастроек, Пользователь = Неопределено) // ключи могут быть произвольными строками, например: //КлючОбъекта = "СохранениеНастроекПользователяФорма"; //КлючНастроек = "ВсеНастройки"; Настройки = Новый Структура; Для Каждого Элем ИЗ Элементы Цикл Если ТипЗнч(Элем) = Тип("ПолеФормы") Тогда Если Объект.Свойство(Элем.Имя) Тогда Настройки.Вставить(Элем.Имя, Объект[Элем.Имя]); Иначе Настройки.Вставить(Элем.Имя, ЭтаФорма[Элем.Имя]); КонецЕсли; КонецЕсли; КонецЦикла; //если пользователя не указать (значение Неопределено), // то настройки будут сохранены для ТЕКУЩЕГО пользователя ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройки,, Пользователь); КонецПроцедуры &НаСервере Процедура ВосстановитьНастройкиНаСервере(КлючОбъекта, КлючНастроек, Пользователь = Неопределено) //КлючОбъекта = "СохранениеНастроекПользователяФорма"; //КлючНастроек = "ВсеНастройки"; СтруктураНастроек = Неопределено; Попытка СтруктураНастроек = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта,КлючНастроек, ,Пользователь); // если настроек нет, то будет возвращено значение "Неопределено" Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Если СтруктураНастроек <> Неопределено Тогда Для Каждого Настройка Из СтруктураНастроек Цикл Если Объект.Свойство(Настройка.Ключ) Тогда Объект[Настройка.Ключ] = Настройка.Значение; Иначе ЭтаФорма[Настройка.Ключ] = Настройка.Значение; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры &НаСервере Процедура УдалитьНастройкиНаСервере(КлючОбъекта, КлючНастроек, Пользователь = Неопределено) //КлючОбъекта = "СохранениеНастроекПользователяФорма"; //КлючНастроек = "ВсеНастройки"; //Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); ХранилищеОбщихНастроек.Удалить(КлючОбъекта, КлючНастроек, Пользователь); Сообщить("Настройки " + КлючОбъекта + " для " + Пользователь + " удалены"); КонецПроцедуры //// Окончание Обработка пользовательский настроек

kuza_87; user591389_aska_rabota; kobayoshi; AndreyKyiv07; Merkalov; niki295; + 6 – Ответить
6. Merkalov 8 26.05.21 04:08 Сейчас в теме

(5)
Обнаружил один нюанс связанный с передачей пользователя в параметрах. Столкнулся с проблемой права доступа, ибо сначала передавал туда текущего пользователя из параметров сеанса, БСП отсутствует в самописке.

<ИмяПользователя>(необязательный)
Тип: Строка.
Имя пользователя, настройки которого сохраняются.
Если не указан, то сохраняются настройки текущего пользователя.
В случае переименования пользователя прежние настройки не заменяются. Если будет создан пользователь, имя которого совпадает с именем прежнего пользователя, для него будут использованы существующие настройки.
Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных.

Передавать в этом параметре нужно «ПользователиИнформационнойБазы.ТекущийПользователь(). Имя «.
Если не передавать пользователя, то автоматически подставится текущий, проблема лишь в том как потом удалить настройки текущего пользователя, потому что в методе «Удалить» у объекта ХранилищеОбщихНастроек параметр «Пользователь» является обязательным и по какому имени там насохранялись настройки неизвестно, поэтому советую все же передавать имя пользователя.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar