Где найти самую удачную реализацию выбора месяца для форм 1С?

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

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

Использование стандартной формы выбора периода из БСП

Проанализируем наиболее стабильный и современный вариант. В составе БСП (Библиотека стандартных подсистем) существует общая форма ВыборПериода. Если ваша конфигурация построена на базе БСП (как большинство современных решений: ERP, КА, БП 3.0, ЗУП 3.1), это решение будет самым удачным.

Рассмотрим преимущества этого подхода:

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


Оповещение = Новый ОписаниеОповещения("ВыборПериодаЗавершение", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Период", ТекущийПериод);
ПараметрыФормы.Вставить("ВариантВыбора", "Месяц");

ОткрытьФорму("ОбщаяФорма.ВыборПериода", ПараметрыФормы, ЭтотОбъект, , , , Оповещение);

Реализация выбора месяца через механизмы ЗУП и БП

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

Если нам нужно реализовать нечто подобное в собственной обработке, проанализируем механику ОСВ (Оборотно-сальдовой ведомости) в Бухгалтерии предприятия. Там используется поле с типом СтандартныйПериод. Рассмотрим, как настроить его для работы именно с месяцами:

  1. Разместим на форме реквизит с типом СтандартныйПериод.
  2. В свойствах элемента формы (поле ввода) можно настроить быстрый выбор.
  3. При нажатии на кнопку выбора откроется платформенное окно, где на вкладке «Выбор стандартного периода» можно мгновенно выбрать «Этот месяц», «Предыдущий месяц» или конкретный месяц из иерархии периодов.

Легкий интерфейс через «Поле выбора» (ComboBox)

Посмотрим на ситуацию со стороны производительности. Если форма автора «тормозит», возможно, проблема в избыточной графике. Самый быстрый вариант — использование обычного Поля выбора, заполненного списком значений.

Разберем по шагам, как это реализовать:

  1. Создаем реквизит формы с типом Дата.
  2. На форме устанавливаем для него вид «Поле выбора».
  3. Программно заполняем список выбора при создании формы.

Пример кода для заполнения списка месяцев текущего года:


&НаСервере
Процедура ЗаполнитьСписокМесяцев()
    ТекущийГод = Год(ТекущаяДата());
    Для Ном = 1 По 12 Цикл
        НачалоМесяца = Дата(ТекущийГод, Ном, 1);
        Элементы.МесяцВыбора.СписокВыбора.Добавить(НачалоМесяца, Формат(НачалоМесяца, "ДФ='MMMM yyyy'"));
    КонецЦикла;
КонецПроцедуры

Важный момент: использование такого подхода исключает открытие дополнительных окон и сложные серверные вызовы при отрисовке, что решает проблему «глючности» интерфейса.

Почему самописные инструменты могут тормозить?

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

Матричная форма (Сетка месяцев)

Для максимально удобного UX (пользовательского опыта) можно создать небольшую вспомогательную форму-сетку 3х4. Разберем этот вариант подробнее:

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

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

Заключение

Подводя итог, можно сказать: если вам нужно быстрое и надежное решение — используйте стандартную форму БСП или платформенный объект СтандартныйПериод. Если же требуется специфический дизайн в один клик — реализуйте фиксированную сетку кнопок или список выбора, предварительно оптимизировав серверные вызовы.

← На главную