Как настроить параметр СКД для простого ввода даты без лишних вариантов выбора?

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

При работе с отчетами в системе 1С:Предприятие, особенно при использовании Системы Компоновки Данных (СКД), пользователи часто сталкиваются с ситуацией, когда параметр отчета, заданный как "Дата", в пользовательском интерфейсе отображает множество дополнительных вариантов выбора, таких как "Начало дня", "Начало месяца", "Начало года" и так далее. Это может быть неудобно, если требуется просто ввести конкретную дату без дополнительных фильтров по периодам. Пользователь в сообщении 0 четко формулирует эту проблему: "Можно конечно выбрать "Произвольная дата" и потом поставить дату вручную. А можно сделать, чтобы было просто поле ввода даты, без всей этой предварительной лирики?".

Давайте подробно разберем, почему возникают такие варианты выбора и как мы можем настроить параметры СКД, чтобы получить простое поле ввода даты.

Причины появления расширенных вариантов выбора даты

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

  1. Параметр с типом "Дата" и его "Состав даты": По умолчанию, при создании параметра типа "Дата", система может подразумевать более широкий контекст использования даты, включая время. Это не всегда напрямую приводит к появлению "Начало дня", но влияет на общую логику обработки даты.

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

  3. Влияние Библиотеки Стандартных Подсистем (БСП): В типовых конфигурациях 1С, активно использующих БСП, формы отчетов могут иметь свои механизмы обработки параметров. БСП может значительно влиять на отображение параметров, в том числе скрывать заголовки или определять логику работы с датами, что иногда приводит к появлению расширенных вариантов выбора даты, даже если сам параметр СКД настроен как простая "Дата". Пользователь в сообщении 6 предполагает: "Если БСП, то возможно это она так делает", и это очень часто оказывается верным.

Решение 1: Корректная настройка параметра СКД для простой даты

Прежде всего, давайте убедимся, что наш параметр СКД настроен максимально просто, без лишних усложнений. Этот метод является самым первым шагом и часто помогает в большинстве случаев, если нет глубокого вмешательства со стороны БСП.

  1. Откройте схему компоновки данных: Перейдите в конфигуратор и откройте отчет, затем его схему компоновки данных.

  2. Перейдите на вкладку "Параметры": На этой вкладке мы увидим список всех параметров отчета.

  3. Выберите или создайте параметр типа "Дата": Убедитесь, что тип вашего параметра установлен именно как "Дата". Если он установлен как СтандартныйПериод, то вы автоматически получите все эти варианты. В этом случае, вам нужно будет заменить его на параметр типа "Дата" и, возможно, переработать запросы, если они использовали начало/конец периода.

  4. Настройте "Состав даты": Это очень важный шаг. Рядом с полем "Тип" (где указано "Дата") обычно находится кнопка с многоточием (...). Нажмите на нее. Откроется окно настройки типа данных. Здесь нам нужно установить "Состав даты" как "Дата". По умолчанию или при других настройках там может стоять "Дата и время" или другие варианты. Выбор "Дата" позволит вводить только дату, исключая время, и это может значительно упростить интерфейс выбора.

  5. Проверьте в настройках отчета: После этих изменений сохраните схему компоновки данных и запустите отчет в режиме "Предприятие". В настройках отчета, в поле ввода вашего параметра даты, проверьте, исчезли ли нежелательные варианты.

Как упоминает пользователь в сообщении 2, даже если параметр в компоновщике установлен как "Дата", а в быстрых настройках стоит "Произвольная дата", список вариантов может всё равно появляться. Это часто указывает на влияние БСП или на то, что поле ввода все еще интерпретируется как поле для выбора периода, несмотря на тип параметра.

Решение 2: Кастомизация формы отчета (для сложных случаев и БСП)

Если простая настройка параметра СКД не принесла желаемого результата, особенно если ваша конфигурация активно использует Библиотеку Стандартных Подсистем (БСП), то единственным способом получить полный контроль над внешним видом и функциональностью поля ввода даты является создание собственной формы отчета. В сообщении 6 было предложено: "А если 'нарисовать' свою форму отчета?". Это действительно мощный, хотя и более трудоемкий, путь решения.

Разберем по шагам, как мы можем подойти к кастомизации формы отчета:

  1. Создание собственной формы отчета: В конфигураторе для вашего отчета создайте новую форму. Назовите ее, например, "ФормаОтчета".

    Для создания формы:

    1. В дереве объектов конфигурации найдите ваш отчет.
    2. Раскройте его ветку, найдите узел "Формы".
    3. Правой кнопкой мыши по "Формы" -> "Добавить" -> "Форма Отчета".
    4. Задайте ей имя (например, "ФормаОтчета") и установите ее как основную форму отчета.
  2. Размещение поля ввода даты на форме: На новой форме нам нужно разместить стандартное поле ввода с типом значения "Дата".

    1. Перетащите из палитры элементов на форму элемент "Поле ввода".
    2. В свойствах этого поля установите для свойства "Тип значения" тип "Дата".
    3. Для поля ввода мы можем присвоить имя, например, "ПолеДатаОтчета".
  3. Связывание поля формы с параметром СКД: Теперь самое главное – это передать значение из нашего поля ввода на форме в параметр СКД. Это делается программно. Нам потребуется обработчик события, который будет выполняться перед формированием отчета или при нажатии кнопки "Сформировать".

    В БСП часто используется обработчик события ПередЗагрузкойПользовательскихНастроекНаСервере или аналогичные механизмы для работы с параметрами. Мы можем использовать обработчик события для кнопки "Сформировать" на нашей форме или переопределить стандартные методы.

    Пример кода для установки параметра СКД из поля на форме:

    
    &НаСервере
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
        // Отменяем стандартную обработку, так как мы управляем параметрами вручную
        СтандартнаяОбработка = Ложь;
    
        // Получаем настройки компоновщика макета
        Настройки = КомпоновщикМакета.Настройки;
    
        // Находим наш параметр по имени
        ПараметрСКД = Настройки.ПараметрыДанных.Элементы.Найти("ДатаОтчета"); // "ДатаОтчета" - это имя вашего параметра в СКД
    
        Если ПараметрСКД <> Неопределено Тогда
            // Устанавливаем значение параметра из поля нашей формы
            ПараметрСКД.Значение = ПолеДатаОтчета; // "ПолеДатаОтчета" - это имя поля ввода на нашей форме
            ПараметрСКД.Использование = Истина; // Обязательно устанавливаем Использование в Истина
        КонецЕсли;
    
        // Вызываем формирование отчета
        КомпоновщикМакета.Сформировать(ДокументРезультат, ДанныеРасшифровки);
    
    КонецПроцедуры
    

    Обратите внимание, что объект КомпоновщикМакета и его настройки могут быть доступны по-разному в зависимости от того, как реализована форма отчета (например, через объект отчета ОтчетОбъект).

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

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

    Или, если вы используете стандартную форму отчета, но добавляете реквизиты, то можно использовать событие ПриИзмененииНастроекКомпоновщикаНаСервере или ПриКомпоновкеРезультата.

  4. Учет особенностей БСП: Как и упоминал пользователь в сообщении 7 ("форма, сгенерированная по умолчанию, не работает корректно, в БСП вылетает ошибка по незаполненности чего-то там"), работа с собственными формами отчетов в конфигурациях с БСП требует более глубокого понимания. БСП ожидает определенную структуру и логику обработки параметров. Если вы создаете свою форму, вам, возможно, придется реализовать и другие обработчики событий, которые БСП использует для инициализации и проверки параметров. Например, ПередЗагрузкойПользовательскихНастроекНаСервере может использоваться для программной установки значений параметров или изменения их свойств перед отображением, а также для обеспечения валидации, которую ожидает БСП.

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

Заключение

Проблема избыточных вариантов выбора даты в параметрах СКД является распространенной. В большинстве случаев она решается путем тщательной настройки типа параметра "Дата" и его "Состава даты", а также убеждением, что не используется тип СтандартныйПериод.

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

← На главную