Универсальное сохранение элементов форм (Поле ввода, флажок, табличное поле) для 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 не будет опубликован. Обязательные поля помечены *