Универсальное сохранение элементов форм (Поле ввода, флажок, табличное поле) для 8.х

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

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

// Процедура сохранения

Процедура кнСохранить(Кнопка)

    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);

    ДиалогВыбораФайла.Фильтр = «Файл сохраненной настройки (*.sav)|*.sav»;

    ДиалогВыбораФайла.Заголовок = «Выберите файл»;

    ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;

    ДиалогВыбораФайла.Расширение = «sav»;

    ДиалогВыбораФайла.ИндексФильтра = 0;

    ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Ложь;

    Если ДиалогВыбораФайла.Выбрать() Тогда

        ИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла;

    Иначе

        Возврат;

    КонецЕсли;

    Настройка = Новый Соответствие();

    Для Каждого Стр Из ЭлементыФормы Цикл

        Если Строка(Стр)=«ПолеВвода» Тогда

            Настройка.Вставить(Стр.Имя, Стр.Значение);

        КонецЕсли;

        Если Строка(Стр)=«Флажок» Тогда

            Настройка.Вставить(Стр.Имя, Стр.Значение);

        КонецЕсли;

        Если Строка(Стр)=«ТабличноеПоле» Тогда

            ТП_ДляСохранения = Новый ТаблицаЗначений;

            Для Каждого Кол Из Стр.Колонки Цикл

                ТП_ДляСохранения.Колонки.Добавить(Кол.Имя);

            КонецЦикла;

            Для Каждого аа Из Стр.Значение Цикл

                вв=ТП_ДляСохранения.Добавить();

                Для Каждого Кол Из Стр.Колонки Цикл

                    вв[Кол.Имя]=аа[Кол.Имя];

                КонецЦикла;

            КонецЦикла;

            Настройка.Вставить(Стр.Имя, ТП_ДляСохранения);

        КонецЕсли;

    КонецЦикла;

    Если НЕ ЗначениеВФайл(ИмяФайла, Настройка) Тогда

        Предупреждение(«Настройка не сохранена!!!»);

    КонецЕсли;

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

//Процедура Открытия

Процедура кнОткрыть(Кнопка)

    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

    ДиалогВыбораФайла.Фильтр = «Файл сохраненной настройки (*.sav)|*.sav»;

    ДиалогВыбораФайла.Заголовок = «Выберите файл»;

    ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;

    ДиалогВыбораФайла.Расширение = «sav»;

    ДиалогВыбораФайла.ИндексФильтра = 0;

    ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина;

    Если ДиалогВыбораФайла.Выбрать() Тогда

        ИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла;

    Иначе

        Возврат;

    КонецЕсли;

    Настройка = ЗначениеИзФайла(ИмяФайла);

    Для Каждого Стр Из ЭлементыФормы Цикл

        Если Строка(Стр)=«ПолеВвода» Тогда

            Попытка

                Стр.Значение = Настройка[Стр.Имя];

            Исключение

            КонецПопытки;

        КонецЕсли;

        Если Строка(Стр)=«Флажок» Тогда

            Попытка

                Стр.Значение = Настройка[Стр.Имя];

            Исключение

            КонецПопытки;

        КонецЕсли;

        Если Строка(Стр)=«ТабличноеПоле» Тогда

            Попытка

                Стр.Значение.Очистить();

                ТП_ДляОткрытия = «»;

                ТП_ДляОткрытия = Настройка[Стр.Имя];

                Для Каждого Стп Из ТП_ДляОткрытия Цикл

                    СС=Стр.Значение.Добавить();

                    Для Каждого Кол Из Стр.Колонки Цикл

                        Попытка

                            СС[Кол.Имя]=Стп[Кол.Имя];

                        Исключение

                        КонецПопытки;

                    КонецЦикла;

                КонецЦикла;

            Исключение

            КонецПопытки;

        КонецЕсли;

    КонецЦикла;

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

8 Comments

  1. Serj1C

    Велосипед. Реализовано на уровне платформы. У формы надо выставить свойство «Сохранять значения», «Восстанавливать значения при открытии» и указать список сохраняемых значений. Далее в командной панели «Действия формы» появятся (при автозаполнении) кнопки «Сохранить значения» и «Загрузить значения».

    Reply
  2. tormozit

    (1) Ну строго говоря это немного не то. Ты описал механизм сохранения значений реквизитов основного реквизита формы и самой формы, а не элементов формы. Если форма не имеет основного реквизита, то описанный тобой платформенный механизм вообще не работает.

    Reply
  3. Andruykha

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

    Reply
  4. SiAl

    Велосипед?

    Reply
  5. Andruykha

    (4) SiAl, усовершенствованный и универсальный велосипед.

    Reply
  6. maxpostal

    Огромное спасибо!

    Reply
  7. AlexO

    А что, действительно оригинально и просто.

    за это плюс.

    Но вопрос:

    а что мешало сохранять в реквизиты все поля, а галочки по-умолчанию при загрузке формы выставлять?

    Reply
  8. Andrey1957

    (1) Кстати, у платформеной реализации обнаружился еще один глюк: при всех выше указанных взведенных опциях, 1С-ка не сохраняет настроек, пока пользователь хотя бы один раз не нажмет на кнопку: «сохранить настройки» и не выберет в открывшемся окне поименованную настройку для сохранения и не взведет в этом окне галку «сохранять автоматически». Без этого — хоть расшибись: при отсутствии хотя бы одной сохраненной настройки все сформированные настройки сохраняться не будут, равно как и не будет создаваться новой. По-хорошему, при взведении в конфигураторе на форме свойства «Сохранять значения» 1С-ка должна была бы в режиме работы 1С-Предприятие автоматически, после успешного формирования отчета (после нажатия кнопки «Сформировать») или, в крайнем случае, при закрытии формы, не только обновлять существующую настройку, но и создавать новую, если таковой не было. Увы, она этого не делает. Приходится пользователям писать в инструкциях, чтобы свою первую настройку они обязательно сохранили по кнопке «Сохранить настройки», что не есть хорошо.

    Reply

Leave a Comment

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