fixin (fixin) wrote,
fixin
fixin

Category:

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



Надоело мне, что настройки форм все время слетают в моей файловой версии PIM. Только настроишь - бац, слетело. И так раз в одну-две недели.


Я не стал дергать Нуралиева, сам написал код сохранения и восстановления настрое.


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


Код получился небольшой и элегантный.




Функция ИнициироватьНастройкиФормы(Форма, ИмяНастройки, КнопочнаяПанель = Неопределено, Элементы) Экспорт
 //Реквизиты - массив строк с названиями элементов управления формы, данные которых надо сохранять
 Описатель = бфФормы.ДатьОписательФормы(Форма);
 Описатель.Вставить("СохраняемыеЭлементыФормы", Элементы);
 Описатель.Вставить("ИмяСохраняемойНастройкиФормы", ИмяНастройки);
 
 //Считываем настройку по умолчанию
 З = Новый Запрос(
 "ВЫБРАТЬ
 | пимНастройкиФорм.Ссылка,
 | пимНастройкиФорм.ИмяНастройки
 |ИЗ
 | Справочник.пимНастройкиФорм КАК пимНастройкиФорм
 |ГДЕ
 | пимНастройкиФорм.Основная И ИмяНастройки = &ИмяНастройки");
 З.УстановитьПараметр("ИмяНастройки", ИмяНастройки);
 
 ТЗНастройки = З.Выполнить().Выгрузить();
 Если ТЗНастройки.Количество() > 0 Тогда
  ЗагрузитьНастройкуФормы(Форма, Элементы, ТЗНастройки[0].Ссылка);
 КонецЕсли;


КонецФункции



Функция ЗагрузитьНастройкиФормы(Форма) Экспорт
 Описатель = бфФормы.ДатьОписательФормы(Форма);
 Элементы = бфКоллекции.СвойствоСтруктуры(Описатель, "СохраняемыеЭлементыФормы", Новый Массив());
 ИмяНастройки = бфКоллекции.СвойствоСтруктуры(Описатель, "ИмяСохраняемойНастройкиФормы ", Неопределено);
 
 Ф = Справочники.пимНастройкиФорм.ПолучитьФормуВыбора();
 Ф.ЭлементыФормы.флПоУмолчанию.Видимость = ложь;
 Ф.ИмяНастройки = ИмяНастройки;
 
 ДопОтбор = Ф.Отбор.ИмяНастройки;
 ДопОтбор.ВидСравнения = ВидСравнения.Равно;
 ДопОтбор.Значение = ИмяНастройки;
 ДопОтбор.Использование = Истина;
 
 РезНастройка = Ф.ОткрытьМодально();


 Если Не ЗначениеЗаполнено(РезНастройка) Тогда
  Возврат Неопределено;
 КонецЕсли;
 
 ЗагрузитьНастройкуФормы(Форма, Элементы, РезНастройка);
 
КонецФункции


Функция ЗагрузитьНастройкуФормы(Форма, Элементы, РезНастройка) Экспорт
 
 Для Каждого Элемент ИЗ Элементы Цикл
  ИскСтр = РезНастройка.Настройки.Найти(Элемент, "Реквизит");
  Если ИскСтр = Неопределено Тогда
   Продолжить;
  КонецЕсли;
  
  Попытка
   Зн = ЗначениеИзСтрокиВнутр(ИскСтр.Значение);
   ТекЗн = Форма.ЭлементыФормы[Элемент].Значение;
   Если Найти(ТипЗнч(ТекЗн), "табличная часть") <> 0 ТОгда
     ТекЗн.Загрузить(Зн);
   Иначе
    Форма.ЭлементыФормы[Элемент].Значение = Зн;
   КонецЕсли;
  Исключение
  КонецПопытки;
 КонецЦикла;


КонецФункции



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


КонецФункции


 


 

Tags: pim
Subscribe
promo fixin december 31, 2037 16:57 1417
Buy for 30 tokens
UPD: Друзья, в августе 2019 года блог переехал на http://fixinchik.ru. Welcome! Добро пожаловать в журнал Осипова Сергея Александровича, известного также как Fixin и Гений 1С. Рекомендую ознакомиться с Часто Задаваемыми Вопросами обо мне. Что я хочу в подарок - список. Мой проект "…
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 35 comments