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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Рассмотрим подробно способы реализации этой задачи в платформе 1С, их плюсы и нюансы программной работы.

Способ 1. Создание отдельных реквизитов и полей ввода для каждой закладки

Это самый простой и наглядный подход, который отлично подходит, если количество закладок фиксировано и относительно невелико.

Разберем по шагам порядок действий:

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

Преимущества: Простой в настройке метод, не требующий написания сложного программного кода для переключения значений.

Недостатки: Дублирование элементов и реквизитов формы, что не всегда удобно при большом количестве закладок или при их динамическом создании.

Способ 2. Использование одной пары полей ввода и структуры соответствия

Если мы хотим избежать дублирования элементов на форме и использовать единую пару полей ввода (например, ДатаНачала и ДатаОкончания), логику переключения дат для закладок необходимо реализовать программно.

Проанализируем алгоритм реализации данного решения:

  1. Создаем на форме всего два реквизита: ДатаНачала и ДатаОкончания, а также реквизит ПредыдущаяСтраница с типом Строка для фиксации имени покидаемой закладки.
  2. Для хранения периодов закладок используем коллекцию типа Соответствие или Структура, где ключом будет выступать имя страницы формы (например, Элементы.Страницы.ТекущаяСтраница.Имя), а значением — структура с датами.
  3. Назначаем обработчик события ПриСменеСтраницы для группы страниц.

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

Посмотрим на пример реализации кода модуля формы:


&НаКлиенте
Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
    
    // 1. Сохраняем введенные даты для предыдущей страницы
    Если ЗначениеЗаполнено(ПредыдущаяСтраница) Тогда
        СтруктураДаты = Новый Структура("ДатаНачала, ДатаОкончания", ДатаНачала, ДатаОкончания);
        СоответствиеДаты.Вставить(ПредыдущаяСтраница, СтруктураДаты);
    КонецЕсли;
    
    // 2. Считываем даты для новой выбранной страницы
    ИмяНовойСтраницы = ТекущаяСтраница.Имя;
    СтруктураДатыНовая = СоответствиеДаты.Получить(ИмяНовойСтраницы);
    
    Если СтруктураДатыНовая <> Неопределено Тогда
        ДатаНачала = СтруктураДатыНовая.ДатаНачала;
        ДатаОкончания = СтруктураДатыНовая.ДатаОкончания;
    Иначе
        ДатаНачала = '00010101';
        ДатаОкончания = '00010101';
    КонецЕсли;
    
    // 3. Обновляем имя текущей страницы для следующего переключения
    ПредыдущаяСтраница = ИмяНовойСтраницы;

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

Сохранение значений периодов между сеансами работы

Чтобы введенные периоды для закладок не сбрасывались после закрытия формы или сеанса работы, необходимо организовать их запись и считывание с помощью системного хранилища настроек.

Проанализируем, как правильно сохранить коллекцию соответствия при закрытии формы и восстановить её при открытии:


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

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

&НаСервере
Процедура ПриЗакрытииНаСервере()
    
    // Сохраняем соответствие периодов в хранилище системных настроек
    КлючОбъекта = "Обработка_НастройкиПериодовЗакладок";
    ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, "СоответствиеДаты", СоответствиеДаты);

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

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

← На главную