При разработке интерфейсов в 1С:Предприятие 8 часто возникает задача предоставить пользователю возможность выбора конкретного года. Стандартный тип данных Дата по умолчанию предлагает календарь, в котором пользователю приходится сначала выбирать месяц и число, что неудобно и замедляет работу. В этой статье мы подробно рассмотрим несколько профессиональных способов организации выбора года, проанализируем их преимущества и разберем примеры программной реализации.
Этот метод является наиболее простым и эффективным, если нам нужно позволить пользователю быстро «пролистывать» годы или вводить их с клавиатуры. Мы создаем поле с типом данных Число и настраиваем его так, чтобы оно выглядело и вело себя как счетчик года.
Рассмотрим по шагам программный способ создания и настройки такого элемента управления непосредственно в коде формы. Это особенно полезно, когда состав реквизитов формы определяется динамически.
// Пример программного создания поля года на форме
НовыйЭлемент = Элементы.Добавить("ПериодГод", Тип("ПолеФормы"));
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ПериодГод"; // Имя реквизита формы типа Число
НовыйЭлемент.КнопкаРегулирования = Истина;
НовыйЭлемент.ФорматРедактирования = "ЧГ=0"; // Отключаем группировку разделителей (чтобы не было 2 024)
НовыйЭлемент.МинимальноеЗначение = 2000;
НовыйЭлемент.МаксимальноеЗначение = 2100;
// Устанавливаем текущий год по умолчанию
ЭтаФорма.ПериодГод = Год(ТекущаяДата());
Разберем важные параметры этого кода. Свойство КнопкаРегулирования добавляет в поле небольшие стрелочки «вверх» и «вниз», которые позволяют менять значение на единицу. Параметр формата ЧГ=0 (или ЧГ=) критически важен: он гарантирует, что число 2024 не превратится в строку с пробелом «2 024», что выглядело бы некорректно для даты.
Если бизнес-логика предполагает выбор года из ограниченного диапазона (например, только за последние 5 лет), проанализируем вариант с использованием выпадающего списка. Это исключает ввод ошибочных данных пользователем.
Для реализации этого подхода выполним следующие действия:
Число (длина 4, точность 0).РежимВыбораИзСписка в значение Истина.Посмотрим на пример кода, который формирует список лет вокруг текущей даты:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекущийГод = Год(ТекущаяДата());
ЭлементГод = Элементы.ПериодГод; // Имя элемента на форме
// Очищаем список, если он был заполнен
ЭлементГод.СписокВыбора.Очистить();
// Заполняем список: 5 лет назад и 2 года вперед
Для Каждого ТекущееЗначение Из Диапазон(-5, 2) Цикл
ГодДляСписка = ТекущийГод + ТекущееЗначение;
ЭлементГод.СписокВыбора.Добавить(ГодДляСписка, Формат(ГодДляСписка, "ЧГ=0"));
КонецЦикла;
ЭтаФорма.ПериодГод = ТекущийГод;
КонецПроцедуры
Такой подход удобен тем, что пользователь выбирает значение из наглядного перечня. Если же диапазон лет очень велик, можно добавить в список специальные пункты «Ранее...» и «Далее...», при нажатии на которые список будет перестраиваться на следующее десятилетие.
Бывают ситуации, когда реквизит обязательно должен иметь тип Дата (например, если он напрямую связан с параметром системы или типовым механизмом). В этом случае мы можем настроить поле так, чтобы оно визуально работало только с годом.
Проанализируем необходимые настройки свойств в конфигураторе или программно:
ДФ=yyyy. Теперь пользователь будет видеть только четыре цифры года.Ложь. Это уберет стандартную кнопку с изображением календаря.Истина.Важно помнить, что при таком способе в значении реквизита все равно будет храниться полная дата (день и месяц). Чтобы избежать путаницы, в событии ПриИзменении рекомендуется принудительно устанавливать дату на начало года:
&НаКлиенте
Процедура ПериодГодПриИзменении(Элемент)
Объект.ПериодГод = НачалоГода(Объект.ПериодГод);
КонецПроцедуры
В современных конфигурациях на платформе 8.3 часто используется стандартный тип данных СтандартныйПериод. Он обладает мощным встроенным редактором. Мы можем ограничить доступные варианты выбора, оставив только «Год».
Рассмотрим преимущества этого метода: при нажатии на кнопку выбора откроется системное окно 1С, где выбор года реализован максимально нативно для пользователя. Это выглядит профессионально и не требует написания сложной логики по обработке переходов между десятилетиями.
Выбор конкретного метода зависит от ваших задач:
При использовании числовых полей всегда проверяйте параметр Группировка (ЧГ=0), чтобы интерфейс программы выглядел аккуратно и соответствовал ожиданиям пользователей. Мы рассмотрели основные технические приемы, которые помогут вам сделать формы в 1С более удобными и функциональными.