К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как убрать микросекунды в 1С

Как убрать микросекунды из даты в 1С: функции НачалоДня, НачалоМинуты, НачалоСекунды, обрезание в запросах, обработка существующих данных и типичные ошибки.

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

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

Важно понимать: тип «Дата» в 1С хранит значение с точностью до секунды в большинстве типовых случаев, однако при загрузке из внешних источников (например, Unix timestamp с миллисекундами или строки вида «2026-05-01T12:30:45.123») дробная часть может возникать на этапе преобразования. Ниже разобраны конкретные приёмы для каждой ситуации.

Откуда в 1С берутся микросекунды

Штатный тип «Дата» в платформе 1С хранит значения с точностью до секунды. Однако на практике дробная часть появляется в нескольких типичных ситуациях: при загрузке данных из внешних систем через обмены, при парсинге строковых представлений дат с миллисекундами, при конвертации Unix-времени и при работе универсальных отчётов, где дата формируется программно.

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

Функции платформы для обрезания дробной части

Самый прямой способ — встроенные функции работы с датами. Функция НачалоСекунды(Дата) возвращает дату с обнулённой дробной частью секунды. Если нужно отбросить и секунды тоже, используют НачалоМинуты(), а для полного обнуления времени — НачалоДня().

Пример в коде: ДатаБезДоли = НачалоСекунды(ЗагруженнаяДата); — после этого значение можно безопасно записывать в реквизит, сравнивать и использовать в отборах. Если функция НачалоСекунды недоступна в вашей версии платформы, аналогичный результат даёт выражение через НачалоДня с добавлением целого числа секунд.

1c
ДатаБезМкс = НачалоСекунды(ИсходнаяДата);
// Альтернатива без НачалоСекунды:
ДатаБезМкс = НачалоДня(ИсходнаяДата) + (ИсходнаяДата - НачалоДня(ИсходнаяДата));

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

Удаление микросекунд в запросах

Когда микросекунды мешают в запросе — например, группировка по дате разваливается на отдельные строки из-за разной дробной части, — используйте функцию языка запросов НАЧАЛОПЕРИОДА. Конструкция НАЧАЛОПЕРИОДА(Документ.Дата, СЕКУНДА) приводит все значения к началу секунды, и группировка начинает работать корректно.

Тот же приём применяют в параметрах виртуальных таблиц и в условиях соединения. Если соединение идёт по полю даты, а в одной из таблиц значения содержат доли секунды, оберните оба поля в НАЧАЛОПЕРИОДА с периодом СЕКУНДА — иначе соединение не найдёт совпадений.

1c-query
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(Продажи.Период, СЕКУНДА) КАК Период,
	СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
	РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
	НАЧАЛОПЕРИОДА(Продажи.Период, СЕКУНДА)

Очистка уже записанных данных

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

Перед массовой обработкой обязательно сделайте резервную копию базы или хотя бы выгрузку затрагиваемых данных. Для документов учитывайте: перезапись может вызвать перепроведение и изменение движений, поэтому безопаснее записывать в режиме РежимЗаписиДокумента.Запись, если меняется только реквизит даты.

Порядок действий
  1. 1
    Сделайте резервную копию базы или выгрузку затрагиваемых данных
  2. 2
    Напишите обработку: запрос объектов, обрезание даты через НачалоСекунды, запись
  3. 3
    Протестируйте на нескольких объектах и проверьте движения и отчёты
  4. 4
    Запустите обработку на полном объёме в нерабочее время
  5. 5
    Проверьте результат контрольным запросом с группировкой по дате

Микросекунды при выводе и выгрузке

Иногда данные в базе чистые, а лишние знаки появляются только при отображении. В этом случае править данные не нужно — достаточно задать формат. Используйте функцию Формат(Дата, "ДЛФ=DT") или явную форматную строку вида Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'"), чтобы вывести значение без дробной части.

При выгрузке в Excel или CSV форматную строку задавайте явно, иначе при сериализации значение может уйти в файл в полном виде. Для печатных форм и СКД формат задаётся в свойствах поля через «Оформление» — параметр «Формат».

Типичные ошибки и как их избежать

Частая ошибка — сравнение дат оператором «равно» без учёта дробной части. Два визуально одинаковых значения 12:30:45 могут отличаться в микросекундах, и условие не сработает. Лечится приведением обеих сторон к началу секунды или сравнением через диапазон.

Вторая ошибка — использование строкового преобразования для «обрезания»: Строка(Дата), затем Лев() и обратное преобразование. Это медленно, зависит от региональных настроек и ломается при смене формата. Всегда используйте функции работы с датами — они надёжнее и быстрее.

Типичные ошибки
01
Сравнение дат на точное равенство без обрезания дробной части — условие молча не срабатывает
02
Обрезание через строковые функции вместо НачалоСекунды — медленно и зависит от региональных настроек
03
Перезапись документов в режиме проведения вместо простой записи — лишние движения и нагрузка
04
Правка только представления форматом, когда значение используется в отборах и соединениях

Проверка результата

После любой обработки проверьте результат контрольным запросом: сгруппируйте данные по НАЧАЛОПЕРИОДА(Дата, СЕКУНДА) и сравните количество строк с группировкой по «сырой» дате. Если количество совпадает — дробных частей в данных не осталось.

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

Контрольные точки

Как проверить результат

Группировка запроса по дате
Норма

Одинаковое число строк при группировке по сырой дате и по НАЧАЛОПЕРИОДА(..., СЕКУНДА)

Тревожный признак

Строки дробятся на отдельные значения с одинаковым временем до секунды

Движения документов после обработки
Норма

Наборы записей не изменились, отчёты сходятся

Тревожный признак

Суммы или проводки отличаются от контрольных

Выгрузка в Excel/CSV
Норма

Даты без лишних знаков после секунд

Тревожный признак

В файле видны миллисекунды

Итог

Что важно запомнить

Микросекунды убираются функциями НачалоСекунды/НачалоМинуты/НачалоДня в коде и НАЧАЛОПЕРИОДА(..., СЕКУНДА) в запросах. Для хранящихся данных нужна обработка с перезаписью после резервной копии. Форматирование скрывает проблему только визуально.

Частые вопросы

Почему НачалоСекунды не работает в моей версии 1С?

Функция появилась не во всех ранних версиях платформы. Если она недоступна, используйте выражение: НачалоДня(Дата) + Цел(Дата - НачалоДня(Дата)) — оно даёт тот же результат на любой версии.

Можно ли убрать микросекунды без программирования?

Только если проблема в отображении: задайте формат поля в настройках отчёта или печатной формы. Данные в базе без обработки или изменения кода обмена не исправить.

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

На само проведение — нет, но они влияют на сравнения моментов времени, границы последовательностей и отборы по периоду, что косвенно может менять результаты отчётов и обработок закрытия периода.

Как не допустить микросекунды при обмене с внешней системой?

Обрезайте значение сразу в точке входа: после парсинга строки или конвертации Unix-времени примените НачалоСекунды до записи объекта. Так данные в базе останутся чистыми, и последующая чистка не понадобится.

Что делать, если микросекунды в измерении регистра сведений?

Потребуется обработка: прочитать записи, скорректировать значение измерения и перезаписать набор. Учтите, что при изменении измерения старая запись должна быть удалена, иначе появятся дубли.