Как разместить поле ввода с календарем на командной панели обычной формы в 1С?

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

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

Однако существуют практические способы обойти это ограничение. Рассмотрим подробно, как решить задачу размещения календаря на командной панели с помощью визуального наложения, а также проанализируем альтернативные, более отказоустойчивые варианты реализации.

Способ 1. Визуальное наложение (перетаскивание элемента в редакторе)

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

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

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

Способ 2. Кнопка с динамическим текстом (Альтернативный и надежный вариант)

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

Проанализируем пример реализации данного подхода:

  1. Добавим на командную панель новую кнопку (например, с именем ДействиеВыборПериода).
  2. В обработчике нажатия этой кнопки программно вызовем диалог выбора периода или интерактивный календарь.
  3. После выбора даты запишем выбранное значение прямо в текст (заголовок) кнопки.

Пример программного кода для реализации этого алгоритма:


Процедура КоманднаяПанельПериод(Кнопка)
    НастройкаПериода = Новый НастройкаПериода;
    // Устанавливаем текущие значения, если они были выбраны ранее
    НастройкаПериода.ВариантНачала = ВариантГраницыИнтервала.КонкретнаяДата;
    НастройкаПериода.ДатаНачала = НачалоДня(ТекущаяДата());
    
    Если НастройкаПериода.Редактировать() Тогда
        // Меняем текст кнопки, отображая выбранный период пользователю
        Кнопка.Текст = "Период: " + Формат(НастройкаПериода.ДатаНачала, "ДФ=dd.MM.yyyy");
        // Здесь выполняем код фильтрации динамического списка по выбранной дате
        // ...
    КонецЕсли;
КонецПроцедуры

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

Способ 3. Размещение над командной панелью

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

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

← На главную