Как правильно организовать выбор года в форме 1С:Предприятие 8?

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

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

Способ 1. Использование числового поля с кнопками регулирования

Этот метод является наиболее простым и эффективным, если нам нужно позволить пользователю быстро «пролистывать» годы или вводить их с клавиатуры. Мы создаем поле с типом данных Число и настраиваем его так, чтобы оно выглядело и вело себя как счетчик года.

Рассмотрим по шагам программный способ создания и настройки такого элемента управления непосредственно в коде формы. Это особенно полезно, когда состав реквизитов формы определяется динамически.


// Пример программного создания поля года на форме
НовыйЭлемент = Элементы.Добавить("ПериодГод", Тип("ПолеФормы"));
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ПериодГод"; // Имя реквизита формы типа Число
НовыйЭлемент.КнопкаРегулирования = Истина;
НовыйЭлемент.ФорматРедактирования = "ЧГ=0"; // Отключаем группировку разделителей (чтобы не было 2 024)
НовыйЭлемент.МинимальноеЗначение = 2000;
НовыйЭлемент.МаксимальноеЗначение = 2100;

// Устанавливаем текущий год по умолчанию
ЭтаФорма.ПериодГод = Год(ТекущаяДата());

Разберем важные параметры этого кода. Свойство КнопкаРегулирования добавляет в поле небольшие стрелочки «вверх» и «вниз», которые позволяют менять значение на единицу. Параметр формата ЧГ=0 (или ЧГ=) критически важен: он гарантирует, что число 2024 не превратится в строку с пробелом «2 024», что выглядело бы некорректно для даты.

Способ 2. Поле выбора с фиксированным или динамическим списком

Если бизнес-логика предполагает выбор года из ограниченного диапазона (например, только за последние 5 лет), проанализируем вариант с использованием выпадающего списка. Это исключает ввод ошибочных данных пользователем.

Для реализации этого подхода выполним следующие действия:

  1. Создадим реквизит формы с типом Число (длина 4, точность 0).
  2. Разместим его на форме и установим свойство РежимВыбораИзСписка в значение Истина.
  3. Заполним список выбора программно при открытии формы.

Посмотрим на пример кода, который формирует список лет вокруг текущей даты:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ТекущийГод = Год(ТекущаяДата());
    ЭлементГод = Элементы.ПериодГод; // Имя элемента на форме
    
    // Очищаем список, если он был заполнен
    ЭлементГод.СписокВыбора.Очистить();
    
    // Заполняем список: 5 лет назад и 2 года вперед
    Для Каждого ТекущееЗначение Из Диапазон(-5, 2) Цикл
        ГодДляСписка = ТекущийГод + ТекущееЗначение;
        ЭлементГод.СписокВыбора.Добавить(ГодДляСписка, Формат(ГодДляСписка, "ЧГ=0"));
    КонецЦикла;
    
    ЭтаФорма.ПериодГод = ТекущийГод;
    
КонецПроцедуры

Такой подход удобен тем, что пользователь выбирает значение из наглядного перечня. Если же диапазон лет очень велик, можно добавить в список специальные пункты «Ранее...» и «Далее...», при нажатии на которые список будет перестраиваться на следующее десятилетие.

Способ 3. Визуальная маскировка типа Дата

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

Проанализируем необходимые настройки свойств в конфигураторе или программно:

Важно помнить, что при таком способе в значении реквизита все равно будет храниться полная дата (день и месяц). Чтобы избежать путаницы, в событии ПриИзменении рекомендуется принудительно устанавливать дату на начало года:


&НаКлиенте
Процедура ПериодГодПриИзменении(Элемент)
    Объект.ПериодГод = НачалоГода(Объект.ПериодГод);
КонецПроцедуры

Способ 4. Использование типа «СтандартныйПериод»

В современных конфигурациях на платформе 8.3 часто используется стандартный тип данных СтандартныйПериод. Он обладает мощным встроенным редактором. Мы можем ограничить доступные варианты выбора, оставив только «Год».

Рассмотрим преимущества этого метода: при нажатии на кнопку выбора откроется системное окно 1С, где выбор года реализован максимально нативно для пользователя. Это выглядит профессионально и не требует написания сложной логики по обработке переходов между десятилетиями.

Итоги и рекомендации

Выбор конкретного метода зависит от ваших задач:

При использовании числовых полей всегда проверяйте параметр Группировка (ЧГ=0), чтобы интерфейс программы выглядел аккуратно и соответствовал ожиданиям пользователей. Мы рассмотрели основные технические приемы, которые помогут вам сделать формы в 1С более удобными и функциональными.

← На главную