Разработка и Конфигурация · 8 мин
Как убрать микросекунды в 1С
Как убрать микросекунды из даты в 1С: функции НачалоДня, НачалоМинуты, НачалоСекунды, обрезание в запросах, обработка существующих данных и типичные ошибки.
Микросекунды в датах 1С чаще всего появляются при обмене данными с внешними системами, загрузке из файлов, работе веб-сервисов или при вызове функции ТекущаяДатаСеанса в некоторых сценариях. Из-за них ломаются сравнения дат, группировки в запросах, поиск документов по периоду и выгрузки в Excel, где миллисекундная часть отображается лишними знаками.
Убрать долю секунды можно несколькими способами: встроенными функциями языка 1С, средствами языка запросов, обработкой уже записанных данных или форматированием при выводе. Выбор зависит от того, где именно мешают микросекунды — в реквизите документа, в результате запроса или только в представлении на экране.
Важно понимать: тип «Дата» в 1С хранит значение с точностью до секунды в большинстве типовых случаев, однако при загрузке из внешних источников (например, Unix timestamp с миллисекундами или строки вида «2026-05-01T12:30:45.123») дробная часть может возникать на этапе преобразования. Ниже разобраны конкретные приёмы для каждой ситуации.
Откуда в 1С берутся микросекунды
Штатный тип «Дата» в платформе 1С хранит значения с точностью до секунды. Однако на практике дробная часть появляется в нескольких типичных ситуациях: при загрузке данных из внешних систем через обмены, при парсинге строковых представлений дат с миллисекундами, при конвертации Unix-времени и при работе универсальных отчётов, где дата формируется программно.
Ещё один источник — округление при арифметике с датами. Если к дате прибавляется дробное число секунд или значение вычисляется через разницу дат, результат может содержать долю секунды. Визуально это проявляется как «лишние» знаки после запятой в выгрузках и печатных формах.
Функции платформы для обрезания дробной части
Самый прямой способ — встроенные функции работы с датами. Функция НачалоСекунды(Дата) возвращает дату с обнулённой дробной частью секунды. Если нужно отбросить и секунды тоже, используют НачалоМинуты(), а для полного обнуления времени — НачалоДня().
Пример в коде: ДатаБезДоли = НачалоСекунды(ЗагруженнаяДата); — после этого значение можно безопасно записывать в реквизит, сравнивать и использовать в отборах. Если функция НачалоСекунды недоступна в вашей версии платформы, аналогичный результат даёт выражение через НачалоДня с добавлением целого числа секунд.
ДатаБезМкс = НачалоСекунды(ИсходнаяДата);
// Альтернатива без НачалоСекунды:
ДатаБезМкс = НачалоДня(ИсходнаяДата) + (ИсходнаяДата - НачалоДня(ИсходнаяДата));Для старых версий платформы, где НачалоСекунды отсутствует, работает приём: вычислить разницу между датой и началом дня в секундах, отбросить дробную часть через Цел() и прибавить результат обратно. Это гарантированно удаляет долю секунды независимо от её происхождения.
Удаление микросекунд в запросах
Когда микросекунды мешают в запросе — например, группировка по дате разваливается на отдельные строки из-за разной дробной части, — используйте функцию языка запросов НАЧАЛОПЕРИОДА. Конструкция НАЧАЛОПЕРИОДА(Документ.Дата, СЕКУНДА) приводит все значения к началу секунды, и группировка начинает работать корректно.
Тот же приём применяют в параметрах виртуальных таблиц и в условиях соединения. Если соединение идёт по полю даты, а в одной из таблиц значения содержат доли секунды, оберните оба поля в НАЧАЛОПЕРИОДА с периодом СЕКУНДА — иначе соединение не найдёт совпадений.
ВЫБРАТЬ
НАЧАЛОПЕРИОДА(Продажи.Период, СЕКУНДА) КАК Период,
СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(Продажи.Период, СЕКУНДА)Очистка уже записанных данных
Если микросекунды уже попали в реквизиты документов или регистров, исправить их можно только перезаписью. Пишется простая обработка: запросом выбираются объекты с нужным периодом, у каждого значение даты прогоняется через НачалоСекунды, объект записывается обратно. Для регистров сведений с независимым режимом аналогично корректируются записи набором.
Перед массовой обработкой обязательно сделайте резервную копию базы или хотя бы выгрузку затрагиваемых данных. Для документов учитывайте: перезапись может вызвать перепроведение и изменение движений, поэтому безопаснее записывать в режиме РежимЗаписиДокумента.Запись, если меняется только реквизит даты.
- 1Сделайте резервную копию базы или выгрузку затрагиваемых данных
- 2Напишите обработку: запрос объектов, обрезание даты через НачалоСекунды, запись
- 3Протестируйте на нескольких объектах и проверьте движения и отчёты
- 4Запустите обработку на полном объёме в нерабочее время
- 5Проверьте результат контрольным запросом с группировкой по дате
Микросекунды при выводе и выгрузке
Иногда данные в базе чистые, а лишние знаки появляются только при отображении. В этом случае править данные не нужно — достаточно задать формат. Используйте функцию Формат(Дата, "ДЛФ=DT") или явную форматную строку вида Формат(Дата, "ДФ='dd.MM.yyyy HH:mm:ss'"), чтобы вывести значение без дробной части.
При выгрузке в Excel или CSV форматную строку задавайте явно, иначе при сериализации значение может уйти в файл в полном виде. Для печатных форм и СКД формат задаётся в свойствах поля через «Оформление» — параметр «Формат».
Типичные ошибки и как их избежать
Частая ошибка — сравнение дат оператором «равно» без учёта дробной части. Два визуально одинаковых значения 12:30:45 могут отличаться в микросекундах, и условие не сработает. Лечится приведением обеих сторон к началу секунды или сравнением через диапазон.
Вторая ошибка — использование строкового преобразования для «обрезания»: Строка(Дата), затем Лев() и обратное преобразование. Это медленно, зависит от региональных настроек и ломается при смене формата. Всегда используйте функции работы с датами — они надёжнее и быстрее.
Проверка результата
После любой обработки проверьте результат контрольным запросом: сгруппируйте данные по НАЧАЛОПЕРИОДА(Дата, СЕКУНДА) и сравните количество строк с группировкой по «сырой» дате. Если количество совпадает — дробных частей в данных не осталось.
Дополнительно откройте несколько документов и убедитесь, что движения не изменились, а отчёты за период сходятся с контрольными значениями, снятыми до обработки.
Как проверить результат
Одинаковое число строк при группировке по сырой дате и по НАЧАЛОПЕРИОДА(..., СЕКУНДА)
Строки дробятся на отдельные значения с одинаковым временем до секунды
Наборы записей не изменились, отчёты сходятся
Суммы или проводки отличаются от контрольных
Даты без лишних знаков после секунд
В файле видны миллисекунды
Что важно запомнить
Микросекунды убираются функциями НачалоСекунды/НачалоМинуты/НачалоДня в коде и НАЧАЛОПЕРИОДА(..., СЕКУНДА) в запросах. Для хранящихся данных нужна обработка с перезаписью после резервной копии. Форматирование скрывает проблему только визуально.
Частые вопросы
Почему НачалоСекунды не работает в моей версии 1С?
Функция появилась не во всех ранних версиях платформы. Если она недоступна, используйте выражение: НачалоДня(Дата) + Цел(Дата - НачалоДня(Дата)) — оно даёт тот же результат на любой версии.
Можно ли убрать микросекунды без программирования?
Только если проблема в отображении: задайте формат поля в настройках отчёта или печатной формы. Данные в базе без обработки или изменения кода обмена не исправить.
Влияют ли микросекунды на проведение документов?
На само проведение — нет, но они влияют на сравнения моментов времени, границы последовательностей и отборы по периоду, что косвенно может менять результаты отчётов и обработок закрытия периода.
Как не допустить микросекунды при обмене с внешней системой?
Обрезайте значение сразу в точке входа: после парсинга строки или конвертации Unix-времени примените НачалоСекунды до записи объекта. Так данные в базе останутся чистыми, и последующая чистка не понадобится.
Что делать, если микросекунды в измерении регистра сведений?
Потребуется обработка: прочитать записи, скорректировать значение измерения и перезаписать набор. Учтите, что при изменении измерения старая запись должна быть удалена, иначе появятся дубли.