Как добавить пользовательское поле с типом дата в СКД 1С без изменения конфигурации?

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

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

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

Метод 1. Создание пользовательского поля-выражения типа Дата в режиме Предприятие

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

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

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

Для создания конкретного значения даты в языке выражений СКД используется функция ДАТАВРЕМЯ. Рассмотрим варианты написания выражений для различных сценариев:

Если вам необходимо задать конкретную статическую дату (например, 1 января 2020 года), запишите следующее выражение:


ДАТАВРЕМЯ(2020, 1, 1, 0, 0, 0)

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


ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

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


Выбор 
    Когда [Дата начала] > ДАТАВРЕМЯ(2020, 1, 1) 
        Тогда [Дата начала] 
    Иначе ДАТАВРЕМЯ(1, 1, 1) 
Конец

Важное ограничение метода: Пользовательское поле-выражение является расчетным (вычисляемым). Это значит, что оно формируется на основе формулы и данных информационной базы. Конечный пользователь не сможет напрямую вводить произвольную дату в это поле на форме отчета, как в обычный параметр. Чтобы изменить дату, ему придется каждый раз заходить в настройки варианта отчета и вручную переписывать параметры внутри функции ДАТАВРЕМЯ. Если требуется регулярный интерактивный ввод даты пользователем, лучше использовать Метод 2.

Метод 2. Решение задачи через стандартные Отборы (без создания полей)

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

Давайте настроим гибкий отбор по дате с выводом поля ввода прямо на форму отчета:

  1. Нажмите кнопку Настройки... на панели отчета (или перейдите в Изменить вариант...).
  2. Перейдите на вкладку Отбор.
  3. Добавьте в список поле, по которому нужно выполнить фильтрацию (например, Дата начала или Период).
  4. В колонке Вид сравнения выберите подходящее условие, например, Больше или равно (для нижней границы) или Меньше или равно (для верхней границы).
  5. Для того чтобы поле ввода даты появилось в шапке отчета и было доступно для быстрого изменения без захода в настройки, нажмите правой кнопкой мыши по созданному элементу отбора и выберите пункт Свойства элемента пользовательских настроек.
  6. В появившемся окне обязательно установите флаг Включать в пользовательские настройки. В поле Режим отображения выберите значение Быстрый доступ.
  7. Нажмите ОК и завершите редактирование варианта отчета.

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

Метод 3. Обход проблем с заблокированными параметрами периодов

Если в вашем отчете параметры Начало периода и Конец периода скрыты разработчиком или настроены так, что позволяют выбирать только год целиком, мы можем решить эту проблему двумя путями в пользовательском режиме:

Вариант А. Проверка доступности параметров в настройках варианта

Часто разработчики отключают видимость параметров на быстрой панели формы, но оставляют их доступными внутри схемы. Чтобы проверить это, зайдите в ЕщеПрочееИзменить вариант... и откройте вкладку Параметры. Если параметры отображаются в этой таблице (даже если у них сняты флажки использования), вы можете вручную установить точные даты начала и окончания периода (например, 01.02.2019 и 31.12.2019) непосредственно здесь.

Вариант Б. Полный отказ от использования жестких параметров

Если формат параметров жестко зафиксирован в конфигураторе (например, формат редактирования настроен строго на выбор года) и вы не можете ввести точную дату, выполните следующие действия:

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

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

← На главную