В 1С:Предприятие дата с временем (например, 01.01.2026 14:30:00) часто мешает аналитике, отчетам или интеграциям, где требуется только календарная дата. Проблема усложняется тем, что система по умолчанию хранит дату и время вместе — даже если вам нужны только день, месяц и год. В этой статье разберем все способы «обрезать» время: от простых настроек формата до написания кода на встроенном языке.
Важно понимать: удаление времени не равно его физическому стиранию из базы. В большинстве случаев речь идет о преобразовании отображения или создании новой переменной с «чистой» датой. Исключение — программное обнуление времени до 00:00:00, но и здесь оригинальное значение может сохраниться в истории изменений. Начнем с самых доступных методов, не требующих знаний программирования.
1. Изменение формата отображения даты в отчетах и документах
Самый быстрый способ скрыть время — настроить формат ячейки в отчете или печатной форме. Этот метод не меняет сами данные, но убирает время из видимого представления. Подходит для 1С:Бухгалтерии 3.0, Управления торговлей 11 и других типовых конфигураций.
Как это сделать:
- 📊 В отчете или печатной форме выделите ячейку с датой, кликните правой кнопкой и выберите
Формат(илиСвойства). - 🔧 В поле
Форматзамените стандартное значениеДФ="dd.MM.yyyy HH:mm:ss"наДФ="d"(короткий формат) илиДФ="dd.MM.yyyy"(полный). - 💾 Сохраните изменения и обновите отчет — время исчезнет из отображения.
Если формат не применяется, проверьте, не переопределен ли он в макете отчета. Иногда настройки формата дублируются в нескольких местах: в самой ячейке, в параметрах поля и в коде модуля.
Ограничение метода: время остается в исходных данных. Если вы экспортируете отчет в Excel или PDF, формат может сброситься. Для полного удаления времени потребуются другие подходы.
2. Использование функции «НачалоДня» в запросах и коде
Встроенная функция НачалоДня() — стандартный инструмент для обнуления времени до 00:00:00. Она возвращает дату с временем, сброшенным на начало дня, что эквивалентно «удалению» часов, минут и секунд для большинства задач.
Примеры применения:
- 📝 В запросе 1С:
ВЫБРАТЬНачалоДня(Документ.Дата) КАК ДатаБезВремени
ИЗ
Документ.ЗаказКлиента КАК Документ
- 💻 В коде модуля:
ДатаБезВремени = НачалоДня(ТекущаяДата);
НачалоДня() работает во всех современных версиях платформы, включая 1С:Предприятие 8.3.20+. Главное преимущество — простота и совместимость. Однако помните: функция не удаляет время физически, а лишь возвращает новую дату с обнуленным временем. Исходное значение в базе остается неизменным.
Функция НачалоДня() — самый универсальный способ для запросов и программной обработки. Она гарантированно поддерживается во всех типовых конфигурациях и не требует прав доступа к конфигуратору.
3. Программное обнуление времени через 1С-код
Если нужно не просто скрыть, а полностью заменить время на 00:00:00 в конкретном документе или справочнике, используйте прямой код. Этот метод требует прав на изменение данных и осторожности — неправильное применение может нарушить логику работы системы.
Пример кода для обнуления времени в документе:
Процедура ОбнулитьВремяВДокументе(ДокументОбъект)
ДатаДокумента = ДокументОбъект.Дата;
ДокументОбъект.Дата = НачалоДня(ДатаДокумента);
ДокументОбъект.Записать();
КонецПроцедуры
Важные нюансы:
- ⚠️ Права доступа: код выполнится только если у пользователя есть права на изменение документа.
- 🔄 История изменений: в некоторых конфигурациях (например, 1С:ERP) такое изменение может записаться в журнал аудита.
- 📅 Зависимые объекты: если дата используется в регистрах или отчетах, обнуление времени может повлиять на расчеты (например, в Управлении производством).
4. Настройка формата даты в пользовательских настройках 1С
В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0 или 1С:Зарплата и Управление Персоналом) можно глобально изменить формат отображения даты для всех пользователей. Это не удалит время из базы, но скроет его в интерфейсе.
Инструкция:
- Откройте
Администрирование → Настройки программы → Форматы данных. - Найдите параметр
Формат датыи установите значение без времени, например,dd.MM.yyyy. - Сохраните настройки и перезапустите сеанс.
Ограничения:
- 🔒 Настройка доступна только администраторам или пользователям с полными правами.
- 📊 В некоторых отчетах (например,
Оборотно-сальдовая ведомость) формат может игнорироваться. - 🖥️ Изменения затронут всех пользователей, что не всегда удобно.
Что делать, если настройки формата заблокированы?
Если пункт Форматы данных недоступен, значит ваша роль в 1С не имеет прав на администрирование. Обратитесь к ИТ-специалисту или попробуйте изменить формат локально через Сервис → Параметры → Форматы (доступно не во всех конфигурациях).
5. Удаление времени при обмене данными (XML, JSON, Excel)
При экспорте данных в внешние системы (например, в Excel или через REST API) время в датах часто становится проблемой. Решить это можно на этапе подготовки данных к выгрузке.
Способы очистки времени перед экспортом:
| Формат выгрузки | Метод удаления времени | Пример кода |
|---|---|---|
| Excel (XDTO) | Преобразование через НачалоДня() |
ДатаДляExcel = НачалоДня(ИсходнаяДата); |
| JSON | Сериализация с кастомным форматом | ЗаписьJSON.ДобавитьДата(НачалоДня(Дата), "dd.MM.yyyy"); |
| XML (УФ) | Параметр формата в схеме | <xs:date format="dd.MM.yyyy"/> |
Критическая деталь: при обмене с 1С:EDT или 1С:Fresh некоторые поля даты могут автоматически дополняться текущим временем. В этом случае используйте обработку ПередЗаписью на стороне получателя, чтобы принудительно обнулять время.
6. Автоматическое обнуление времени через обработки и регламентные задания
Если время в датах мешает регулярно (например, в документах Поступление товаров или Реализация), автоматизируйте его удаление с помощью регламентных заданий или обработок. Это актуально для 1С:Управление торговлей 11 и 1С:ERP, где даты часто используются в аналитике.
Пример создания регламентного задания:
- Откройте
Администрирование → Регламентные задания. - Создайте новое задание с типом
Обработка объектов. - В модуле обработки добавьте код:
Для Каждого Док Из Документы.ПоступлениеТоваровУслуг ЦиклЕсли Док.Дата <> НачалоДня(Док.Дата) Тогда
Док.Дата = НачалоДня(Док.Дата);
Док.Записать();
КонецЕсли;
КонецЦикла;
- Настройте расписание (например, ежедневное выполнение в 2:00).
🔹 Создать резервную копию базы
🔹 Проверить права пользователя, от имени которого запускается задание
🔹 Ограничить обработку тестовым периодом (например, последней неделей)
🔹 Убедиться, что в конфигурации разрешено программное изменение документов-->
⚠️ Внимание: массовое изменение дат в документах может нарушить последовательность операций (например, в 1С:Бухгалтерии, где дата влияет на проводки). Перед запуском протестируйте обработку на копии базы.
7. Особенности работы с датами в разных конфигурациях 1С
Не все методы удаления времени универсальны. В некоторых конфигурациях есть ограничения или специфические настройки:
- 📚 1С:Бухгалтерия 3.0: в документах
Банковская выпискадата с временем используется для сортировки операций. Обнуление времени может нарушить порядок проводок. - 🛒 1С:Управление торговлей 11: в заказах клиентов время учитывается при расчете сроков доставки. Удаление времени может исказить аналитику логистики.
- 🏭 1С:ERP: в производственных заданиях время используется для планирования. Его обнуление требует дополнительной синхронизации с графиком работ.
В 1С:Зарплата и Управление Персоналом даты в документах Начисление зарплаты часто привязаны к табелям учета времени. Здесь удаление часов и минут может привести к ошибкам в расчетах, если время используется для определения смены или переработок.
Перед массовым изменением дат в специализированных конфигурациях (ERP, ЗУП, УТ) обязательно проверьте, не используется ли время в бизнес-логике. Например, в 1С:Розница время фиксирует момент продажи для X-отчетов.
Частые ошибки и как их избежать
При работе с датами в 1С пользователи часто сталкиваются с типичными проблемами. Вот самые распространенные из них и способы их решения:
- ❌ Ошибка: После применения
НачалоДня()дата в документе не меняется.
Решение: Проверьте, не заблокирован ли документ для редактирования или не стоит ли галочкаОперативное проведение, которая запрещает изменять дату. - ❌ Ошибка: В отчете дата отображается без времени, но при экспорте в Excel время появляется снова.
Решение: ИспользуйтеФорматЯчейкив макете экспорта или обработайте данные перед выгрузкой. - ❌ Ошибка: При массовом обнулении времени в регламентном задании возникает ошибка «Нарушение последовательности документов».
Решение: Отсортируйте документы по дате перед обработкой и изменяйте их в хронологическом порядке.
⚠️ Внимание: В конфигурациях с поддержкой версий (например, 1С:Документооборот) изменение даты документа может создать новую версию. Это увеличит объем базы и усложнит аудит изменений. Перед массовыми операциями отключите ведение версий или настройте правила их создания.
FAQ: Ответы на частые вопросы
Можно ли полностью удалить время из базы 1С, а не только скрыть его?
Нет, в стандартных конфигурациях время хранится вместе с датой на уровне СУБД (например, в Microsoft SQL Server или PostgreSQL). Вы можете только обнулить его до 00:00:00 или скрыть при отображении. Полное удаление потребует изменения структуры базы, что не поддерживается типовыми решениями.
Почему после обнуления времени в документе перестали формироваться проводки?
В некоторых конфигурациях (например, 1С:Бухгалтерия) дата и время документа используются для определения периода проводок. Если вы обнулили время в документе, который относится к закрытому периоду, система может заблокировать проведение. Решение: проверьте настройки учетной политики или перенесите документ на актуальную дату.
Как убрать время в дате при загрузке данных из Excel в 1С?
При импорте из Excel используйте обработку ПередЗаписью в правиле обмена. Пример кода:
Процедура ПередЗаписью(Объект)
Если ТипЗнч(Объект.Дата) = Тип("Дата") Тогда
Объект.Дата = НачалоДня(Объект.Дата);
КонецЕсли;
КонецПроцедуры
Это гарантирует, что время будет обнулено до сохранения данных в базе.
Влияет ли удаление времени на производительность запросов?
Да, но не всегда критично. Если в запросе используется индекс по полю даты, обнуление времени (например, через НачалоДня()) может помешать использованию индекса, так как функция преобразует значение. Для ускорения запросов создайте вычисляемое поле с обнуленным временем и индексируйте его.
Можно ли настроить 1С так, чтобы время в датах не сохранялось вообще?
В стандартных конфигурациях — нет. Дата и время хранятся вместе на уровне платформы. Альтернатива: создайте дополнительное поле типа Дата (без времени) и используйте его для аналитики, оставляя оригинальное поле с временем для внутренних процессов.