Разработка и Конфигурация · 10 мин
Как убрать секунды в дате в 1С
Как убрать секунды в дате 1С: функция Формат, НАЧАЛОПЕРИОДА в запросах, округление в коде, настройка формата в макетах. Примеры кода и типичные ошибки.
В 1С тип «Дата» всегда хранит значение с точностью до секунды: день, месяц, год, часы, минуты и секунды. Убрать секунды полностью из значения нельзя — их можно либо обнулить (привести к началу минуты), либо скрыть при выводе на экран, в печатную форму или в отчёт. Выбор способа зависит от задачи: отображение решается форматной строкой, а сравнение и группировка данных — обрезкой значения в запросе или коде.
Чаще всего секунды мешают в трёх ситуациях. Первая — дата выводится пользователю вида «12.03.2026 14:35:27», а нужно «12.03.2026 14:35». Вторая — сравнение двух дат даёт ложное неравенство, потому что документы записаны с разными секундами. Третья — группировка в отчёте или запросе «распадается» на лишние строки из-за разных секунд внутри одной минуты. Ниже разобраны рабочие приёмы для каждого случая.
Почему секунды нельзя удалить из типа «Дата»
Тип «Дата» во встроенном языке 1С — это единое значение, включающее календарную дату и время с точностью до секунды. Отдельного типа «дата без секунд» или «дата-время до минут» в платформе нет. Поэтому любая переменная типа «Дата» физически содержит секунды, даже если они равны нулю.
Из этого следуют два практических подхода. Первый — оставить значение как есть и управлять только представлением: пользователь видит дату без секунд, хотя внутри они хранятся. Второй — привести само значение к началу минуты, то есть принудительно обнулить секунды. Оба подхода корректны, но решают разные задачи, и путать их — частая причина ошибок в сравнениях.
Как скрыть секунды при выводе: функция Формат
Самый простой способ показать дату без секунд — функция Формат() с форматной строкой. Параметр ДФ задаёт шаблон даты, и если в шаблоне не указать секунды, они не выведутся:
ДатаДокумента = ТекущаяДата();
СтрокаДляВывода = Формат(ДатаДокумента, "ДФ='dd.MM.yyyy HH:mm'");
// Результат: 12.03.2026 14:35
Обратите внимание на регистр шаблона: MM — это месяц, а mm — минуты. Если написать dd.MM.yyyy HH:MM, вместо минут выведется номер месяца, и дата будет выглядеть как «12.03.2026 14:03». Это одна из самых распространённых ошибок при работе с форматными строками.
Если нужна только дата без времени вовсе, используйте ДЛФ=D (краткая дата) или ДЛФ=DD (длинная, с названием месяца). Форматная строка не меняет исходное значение переменной — она только формирует строковое представление, поэтому способ безопасен для любых данных.
Формат(ДатаДокумента, "ДФ='dd.MM.yyyy HH:mm'") // 12.03.2026 14:35Форматная строка в формах, отчётах и печатных макетах
Поле формы и колонка таблицы
В управляемой форме у поля ввода, колонки таблицы и надписи есть свойство «Формат». Откройте палитру свойств элемента, найдите строку «Формат», нажмите кнопку выбора и в конструкторе задайте шаблон даты без секунд, например dd.MM.yyyy HH:mm. После этого значение будет отображаться без секунд без единой строки кода.
СКД и макеты печатных форм
В схеме компоновки данных формат задаётся на закладке «Наборы данных» — у поля есть параметр «Оформление» → «Формат». В макетах табличных документов формат устанавливается в свойствах ячейки: выделите ячейку с параметром даты, откройте свойства и укажите форматную строку. В обоих случаях секунды исчезнут из печатного представления, а данные останутся нетронутыми.
Для динамических списков (журналы документов, списки справочников) формат колонки тоже настраивается через свойства элемента формы. Если список строится произвольным запросом, дополнительно можно отформатировать поле прямо в тексте запроса, но надёжнее оставить форматирование на уровне отображения.
Как обнулить секунды в запросе: НАЧАЛОПЕРИОДА
Когда секунды мешают не визуально, а логически — при группировке или соединении таблиц — используйте функцию языка запросов НАЧАЛОПЕРИОДА(Дата, МИНУТА). Она возвращает ту же дату-время, но с секундами, равными нулю:
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, МИНУТА) КАК Минута,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, МИНУТА)
Такой запрос сгруппирует все записи, попавшие в одну минуту, в одну строку. Без НАЧАЛОПЕРИОДА записи с секундами 14:35:01 и 14:35:47 оказались бы в разных группах. Аналогично функция применяется в условии ГДЕ для сравнения дат без учёта секунд.
Для сравнения «по дню» без времени используйте НАЧАЛОПЕРИОДА(Дата, ДЕНЬ). Это надёжнее, чем сравнение через ПОДСТРОКА или приведение к строке: функции периодов работают на уровне движка СУБД и не ломают использование индексов так сильно, как строковые преобразования.
- 1Определите, где секунды мешают: группировка, соединение или условие отбора
- 2Оберните поле даты в НАЧАЛОПЕРИОДА(Поле, МИНУТА) в нужной секции запроса
- 3Выполните запрос в консоли и проверьте, что строки сгруппировались по минутам
- 4Убедитесь, что выборка не замедлилась заметно на больших таблицах
Как обрезать секунды в коде встроенного языка
Во встроенном языке нет готовой функции «начало минуты», но секунды легко обнулить арифметикой. Дата в 1С поддерживает сложение и вычитание с числом секунд, а также разность двух дат в секундах. Рабочий приём — получить число секунд с начала минуты и вычесть его:
Функция НачалоМинуты(ДатаВремя)
СекундыВМинуте = ДатаВремя - НачалоЧаса(ДатаВремя); // секунд с начала часа
ЛишниеСекунды = СекундыВМинуте % 60;
Возврат ДатаВремя - ЛишниеСекунды;
КонецФункции
Более простой вариант — округление через целое деление: НоваяДата = Цел(ДатаВремя / 60) * 60. Дата в арифметике ведёт себя как число секунд от базовой точки, поэтому деление на 60 с отбрасыванием остатка даёт начало минуты. Оба способа возвращают значение типа «Дата» с нулевыми секундами.
Если нужно обрезать до дня (убрать время целиком), используйте штатную функцию НачалоДня(ДатаВремя) — она возвращает дату с временем 00:00:00. Для обратной задачи, когда нужна граница конца периода, есть КонецМинуты() и КонецДня(): конец минуты — это 59-я секунда, что важно учитывать в отборах «по период включительно».
Когда обрезать значение, а когда только скрывать
Выбор между форматированием и обрезкой определяется тем, где используется дата. Если секунды мешают только человеку — в журнале документов, печатной форме, отчёте — ограничьтесь форматной строкой. Значение останется точным, и никакие последующие проверки не пострадают.
Обрезать значение стоит, когда секунды ломают логику: группировка в отчёте, соединение с таблицей, где время хранится до минуты, сравнение с внешними данными (например, выгрузка из кассовой системы с точностью до минуты). В этих случаях приводите обе стороны сравнения к одной точности, иначе условие никогда не выполнится.
Изменять данные в базе (перезаписывать документы с обнулёнными секундами) почти никогда не требуется. Это оправдано только при исправлении исторических ошибок интеграции, и делать такую обработку стоит на копии базы с последующей проверкой связанных данных.
Как выбрать действие
Проверка результата
После применения форматной строки откройте форму или сформируйте печатный документ и убедитесь, что время выглядит как «14:35», а не «14:35:27». Проверьте несколько записей с разными значениями, включая полночь (00:00) — на граничных значениях ошибки шаблона заметнее всего.
Для запросов с НАЧАЛОПЕРИОДА выполните запрос в консоли запросов и посмотрите на колонку с обрезанной датой: все значения должны заканчиваться на «:00». Если группировка по-прежнему даёт лишние строки, проверьте, что функция применена именно в секции СГРУППИРОВАТЬ ПО, а не только в списке выборки.
Как проверить результат
Время вида 14:35 без секунд
Секунды видны или вместо минут выводится месяц
Все значения в колонке оканчиваются на :00
Остались значения с ненулевыми секундами
Условие равенства выполняется
Даты по-прежнему считаются разными
Частые вопросы
Можно ли настроить формат даты без секунд глобально для всей базы?
Глобальной настройки формата даты в платформе нет. Отображение по умолчанию зависит от региональных настроек сеанса и ОС. Практичный путь — задавать форматную строку в конкретных формах, отчётах и макетах, где секунды нежелательны.
Почему Формат(Дата, "ДФ='dd.MM.yyyy HH:MM'") показывает странное время?
Потому что MM в позиции времени означает месяц, а не минуты. Для минут используйте строчные mm: "ДФ='dd.MM.yyyy HH:mm'". Регистр букв в форматной строке имеет значение.
Как убрать время полностью, оставив только дату?
Для вывода используйте Формат(Дата, "ДЛФ=D") или шаблон "ДФ=dd.MM.yyyy". Для обрезки значения в коде примените НачалоДня(Дата) — получите дату с временем 00:00:00, в запросе — НАЧАЛОПЕРИОДА(Дата, ДЕНЬ).
НАЧАЛОПЕРИОДА в запросе замедляет выборку. Это нормально?
Функция над полем в условии отбора мешает использовать индекс, поэтому на больших таблицах запрос может замедлиться. Альтернатива — фильтровать диапазоном: Дата >= НачалоМинуты И Дата <= КонецМинуты, где границы вычислены заранее в коде.
Обрезал секунды в данных, и обмен с другой системой сломался. Что делать?
Вероятно, дата-время использовалась как часть ключа синхронизации, и после обрезки разные записи стали совпадать. Восстановите данные из резервной копии и выполняйте обрезку только при выводе или сравнении, не изменяя хранимые значения.
Как вывести дату без секунд в СКД?
Откройте схему компоновки, на закладке «Наборы данных» найдите поле даты, в колонке «Оформление» задайте параметр «Формат» со значением dd.MM.yyyy HH:mm. Либо задайте формат на закладке «Настройки» через пользовательское оформление поля.
Что важно запомнить
Секунды в типе «Дата» удалить нельзя — их скрывают форматной строкой (Формат, свойства поля, макета) или обнуляют значение (НАЧАЛОПЕРИОДА в запросе, арифметика в коде). Для отображения достаточно формата, для сравнения и группировки приводите обе стороны к началу минуты. Хранимые данные без крайней необходимости не изменяйте.