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

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

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

Выясняем причину: почему пропадает поле ввода?

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

Способ 1. Использование параметров и расширения языка запросов (рекомендуемый)

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

Выполним следующие шаги:

  1. Перейдем на закладку Параметры в схеме компоновки данных.
  2. Создадим два параметра: НачалоПериодаСоздания и КонецПериодаСоздания.
  3. В колонке Заголовок укажем именно те названия, которые нужны: «Дата создания от:» и «Дата создания до:».
  4. Установим тип данных Дата для обоих параметров.
  5. В тексте запроса на закладке Набор данных пропишем условие в секции ГДЕ, используя расширение языка СКД (фигурные скобки):

ВЫБРАТЬ
    Продажи.Ссылка,
    Продажи.ДатаСоздания
ИЗ
    Документ.Продажи КАК Продажи
ГДЕ
    Продажи.ДатаСоздания >= &НачалоПериодаСоздания
    И Продажи.ДатаСоздания <= &КонецПериодаСоздания
{ГДЕ
    (Продажи.ДатаСоздания >= &НачалоПериодаСоздания),
    (Продажи.ДатаСоздания <= &КонецПериодаСоздания)}

Использование фигурных скобок {ГДЕ ...} позволяет СКД гибко управлять условиями. Если пользователь не заполнит один из параметров, условие просто не будет включено в итоговый SQL-запрос. В пользовательских настройках (вкладка Настройки -> Параметры) не забудьте включить эти параметры в состав пользовательских настроек (иконка со «звездочкой»).

Способ 2. Редактирование заголовка на уровне Набора данных

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

Проанализируем этот алгоритм:

  1. Откроем закладку Наборы данных.
  2. Найдем в списке доступных полей наше поле ДатаСоздания.
  3. В колонке Заголовок введем нужное нам название.

Важный нюанс: если нам нужно два поля (для «От» и «До»), мы можем создать Вычисляемое поле с тем же выражением или добавить в запрос дубль этого поля с другим псевдонимом:


ВЫБРАТЬ
    Продажи.ДатаСоздания КАК ДатаСозданияНачало,
    Продажи.ДатаСоздания КАК ДатаСозданияКонец
ИЗ
    Документ.Продажи КАК Продажи

Теперь в компоновке у нас есть два независимых поля. Для одного устанавливаем заголовок «Дата создания от», для другого — «Дата создания до». Поскольку заголовки прописаны в метаданных набора данных, платформа корректно пробросит тип Дата в интерфейс отборов, и календарь не пропадет.

Способ 3. Группировка условий (Визуальный метод)

Разберем ситуацию, когда нам нужно сохранить структуру отборов, но сделать их визуально более понятными. В СКД есть возможность группировать условия отбора. Это позволяет задать общий заголовок для группы условий.

  1. В настройках отчета перейдите на закладку Отбор.
  2. Нажмите правую кнопку мыши и выберите пункт Сгруппировать условия.
  3. Выберите тип группы Группа И.
  4. Для самой группы в колонке Представление напишите «Период создания».
  5. Внутрь этой группы добавьте два отбора по полю Дата создания: один с видом сравнения «Больше или равно», другой — «Меньше или равно».

При таком подходе заголовки самих полей внутри группы останутся стандартными (и календарь сохранится), но визуально они будут объединены общим заголовком группы, что упростит восприятие для пользователя.

Способ 4. Стандартный период

Посмотрим на пример использования системного типа СтандартныйПериод. Это наиболее удобный способ для пользователя, так как он позволяет выбирать не только произвольные даты, но и быстрые интервалы (Вчера, Текущий месяц, Прошлый квартал и т.д.).

Для реализации:

  1. Создадим параметр ПериодОтчета с типом СтандартныйПериод.
  2. В запросе используем обращение к полям этого параметра:
    
    ГДЕ
        Продажи.ДатаСоздания МЕЖДУ &ПериодОтчета.ДатаНачала И &ПериодОтчета.ДатаОкончания
    

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

    Общие рекомендации

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

← На главную