Почему 1С подставляет не ту дату и как вернуть сегодняшнюю
Содержание
Чтобы 1С снова ставила текущую дату, откройте Главное меню (☰) → Сервис → Параметры и в блоке «Рабочая дата» выберите «Использовать текущую дату компьютера». После этого новые документы получают сегодняшнее число из системных часов. Настройка действует для конкретного пользователя, перезапуск программы не нужен.
Частое заблуждение — что 1С «сломалась» или «съехали часы на сервере». Чаще всего кто-то из пользователей зафиксировал рабочую дату, например, чтобы провести документы задним числом, и забыл вернуть. Ниже — все места, где 1С Предприятие берёт дату: системные часы, параметры пользователя, поле документа, код и даты запрета.
Откуда 1С Предприятие берёт текущую дату
У платформы нет собственных часов. Дату и время она получает от операционной системы. Важно только, от какой именно.
| Режим работы | Чьё время видит пользователь | Что проверить |
|---|---|---|
| Файловая база | Часы компьютера пользователя | Время и часовой пояс Windows на этом ПК |
| Клиент-сервер | Часы сервера 1С (для серверного кода) и компьютера пользователя (для клиентского) | Время на сервере 1С и на рабочем месте |
| Терминальный сервер / RDP | Часы терминального сервера | Время и часовой пояс сервера и сеанса RDP |
| Облако (1С:Фреш и аналоги) | Время сервера провайдера с учётом часового пояса базы | Часовой пояс в настройках программы |
Если часы «плывут», синхронизируйте их со службой времени. На Windows это делается из командной строки, запущенной от администратора:
w32tm /query /status
w32tm /resync
tzutil /g
Первая команда показывает источник времени и время последней синхронизации. Вторая запускает синхронизацию. Третья выводит текущий часовой пояс. На сервере Linux то же самое показывает timedatectl.
Не переводите часы сервера 1С вручную, пока в базе работают люди. Документы, записанные в этот момент, получат «прыгающее» время, а регламентные задания могут сработать повторно или пропустить запуск. Корректируйте время вне рабочих часов.
💡 Если у вас клиент-сервер и пользователи в разных часовых поясах, разница между временем их ПК и сервера — норма. Платформа умеет пересчитывать время по часовому поясу сеанса, об этом ниже в разделе про код.
Рабочая дата: как поставить или вернуть текущую дату в 1С
Рабочая дата — это дата, которую 1С подставляет в новые документы вместо системной. Её удобно фиксировать, когда нужно ввести пачку первички прошлым месяцем. Неудобно — когда о ней забыли.
Порядок действий в интерфейсе «Такси»:
- Нажмите кнопку главного меню (три полоски или стрелка в левом верхнем углу окна).
- Выберите
Сервис → Параметры. - В блоке «Рабочая дата» отметьте нужный вариант:
- «Использовать текущую дату компьютера» — 1С ставит сегодняшнее число;
- «Использовать эту дату» — 1С ставит указанную вами дату.
- Нажмите «Применить» или «ОК».
Что важно знать про эту настройку:
- 👤 Она личная. Бухгалтер, который включил фиксированную дату, видит её, а коллега рядом — нет.
- 📄 Она влияет только на новые документы. Уже записанные документы сохраняют свою дату.
- 🕒 Время в документе при фиксированной рабочей дате берётся текущее, меняется только число.
Мини-кейс. Бухгалтер 28 сентября вносит акты за август и ставит рабочую дату 31.08. Работу он не заканчивает, а 1 октября создаёт реализацию — она тоже уходит в август. Октябрьская выручка попадает в третий квартал и в декларацию по НДС не за тот период. Всплывает это обычно только при сверке с покупателем. Проверка простая: откройте Сервис → Параметры у того пользователя, чьи документы получают странную дату.
Привычка, которая спасает от путаницы: закончили ввод задним числом — сразу возвращайте «Использовать текущую дату компьютера». Иначе через неделю обнаружится десяток реализаций, датированных прошлым кварталом.
Как поставить дату в документе вручную
Если нужно поменять дату только в одном документе, рабочую дату трогать незачем. Дата правится прямо в шапке.
- Откройте документ.
- В поле даты (рядом с номером, «от …») введите число с клавиатуры в формате
ДД.ММ.ГГГГили нажмите кнопку календаря справа от поля. - При необходимости поправьте время — оно идёт в том же поле после даты.
- Нажмите «Провести и закрыть» или «Записать».
Время в документе не формальность. Документы одного дня 1С выстраивает по времени. Если оплату поставщику провести на 09:00, а поступление товаров — на 15:00 того же дня, программа увидит сначала оплату, потом поступление. В бухгалтерском учёте это превратится в аванс выданный с последующим зачётом, а не в погашение долга.
Перенос даты проведённого документа меняет его движения задним числом. Если период уже закрыт регламентными операциями, после правки перезапустите закрытие месяца за все месяцы начиная с изменённого.
Когда поле даты не даёт вводить значение (серое) или документ не записывается, дело почти всегда в дате запрета или в правах. Это разобрано в отдельном разделе ниже.
Текущая дата в коде 1С: какую функцию выбрать
Для разработчика вопрос «как поставить текущую дату» сводится к выбору функции. Их несколько, и они возвращают разное.
| Функция | Что возвращает | Где применять |
|---|---|---|
ТекущаяДатаСеанса() | Время сервера, пересчитанное в часовой пояс сеанса | Основной вариант для серверного кода |
ТекущаяДата() | Время компьютера, на котором выполняется код (на клиенте — ПК пользователя, на сервере — сервера 1С) | Устаревший вариант, в новых разработках лучше не использовать |
ТекущаяУниверсальнаяДата() | Время UTC без поправки на пояс | Журналы, обмены, сравнение событий из разных поясов |
РабочаяДата() | Рабочая дата пользователя из параметров | Когда нужно уважать выбор пользователя |
Типовой пример: заполнить дату нового документа в модуле объекта.
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
КонецПроцедуры
На клиенте ТекущаяДатаСеанса() недоступна. В типовых конфигурациях на БСП для этого есть ОбщегоНазначенияКлиент.ДатаСеанса(). Без БСП дату получают серверным вызовом:
&НаКлиенте
Процедура ПоставитьСегодня(Команда)
Объект.Дата = ДатаНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДатаНаСервере()
Возврат ТекущаяДатаСеанса();
КонецФункции
В языке запросов 1С нет функции «сейчас». Текущую дату передают параметром, а границу дня задают явно:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, ) КАК Остатки";
Запрос.УстановитьПараметр("НаДату", Новый Граница(КонецДня(ТекущаяДатаСеанса()), ВидГраницы.Включая));
Результат = Запрос.Выполнить().Выгрузить();
Имя регистра в примере условное, подставьте своё. Смысл в двух приёмах: КонецДня() включает все операции сегодняшнего дня, а Новый Граница(…, ВидГраницы.Включая) гарантирует, что документ, записанный в 23:59:59, тоже попадёт в остатки.
Дата со сдвигом: вчера, начало месяца, вывод строкой
Часто нужна не сама текущая дата, а производная от неё. Все эти функции встроены в платформу:
Сейчас = ТекущаяДатаСеанса();
Сегодня = НачалоДня(Сейчас); // 00:00:00 сегодняшнего дня
Вчера = НачалоДня(Сейчас) - 86400; // 86400 секунд = одни сутки
НачалоМесяца = НачалоМесяца(Сейчас);
ПрошлыйМесяц = ДобавитьМесяц(НачалоМесяца(Сейчас), -1);
ДатаСтрокой = Формат(Сейчас, "ДФ=dd.MM.yyyy"); // например, 07.10.2026
Дата в 1С хранится с точностью до секунды, поэтому прибавление и вычитание идёт в секундах. Для месяцев используйте только ДобавитьМесяц(): месяцы разной длины, и сдвиг на «30 × 86400» на конце месяца даст не ту дату.
Часовой пояс сеанса
Если пользователи сидят в разных регионах, а сервер один, часовой пояс сеанса задают при входе пользователя:
УстановитьЧасовойПоясСеанса("Asia/Novosibirsk");
После этого ТекущаяДатаСеанса() возвращает местное время пользователя, а текущий пояс можно прочитать функцией ЧасовойПоясСеанса(). В типовых конфигурациях часовой пояс программы задаётся в разделе администрирования, и код писать не требуется.
Если в серверном коде стоит ТекущаяДата(), а сервер работает по московскому времени при пользователях в Новосибирске, документ, созданный в 01:00 по местному, получит вчерашнее число. Это классический источник жалоб «1С ставит не ту дату» после переноса базы на сервер.
Даты запрета изменения: когда поставить нужную дату не получается
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) действует механизм «Даты запрета изменения». Он не даёт записать документ с датой, попадающей в закрытый период, и не даёт изменить уже проведённые документы этого периода.
Признаки, что сработал именно он:
- 🔒 документ не записывается, а 1С сообщает о запрете изменения данных до указанной даты;
- 🔒 дату удаётся поменять на свежую, но не на прошлую;
- 🔒 у одного пользователя всё работает, у другого — нет (дата запрета может быть задана персонально).
Что делать:
- Найдите настройку «Даты запрета изменения». В Бухгалтерии 3.0 она находится в разделе
Администрирование, в группе настроек проведения документов; в любой конфигурации её можно найти поиском по разделам по слову «запрет». - Посмотрите, какая дата задана: общая для всех или для конкретного пользователя.
- Если правка действительно согласована, временно сдвиньте дату запрета на более раннюю, внесите изменения и верните прежнюю.
Менять дату запрета может только пользователь с правами администратора. Это сделано намеренно: закрытый период — тот, по которому уже сдана отчётность. Правка в нём почти всегда означает уточнённую декларацию, поэтому сначала решение главного бухгалтера, потом действия в базе.
Автоматизация: дата в регламентных заданиях и массовая замена
Регламентные задания выполняются на сервере, без пользователя. Рабочая дата у них не действует, поэтому в их коде используйте ТекущаяДатаСеанса() и явно задавайте часовой пояс, если база обслуживает несколько регионов. Расписание задания тоже считается по времени сервера.
Несколько практик, которые избавляют от проблем с датами:
- ✅ в серверном коде — только
ТекущаяДатаСеанса(), безТекущаяДата(); - ✅ дату для запросов вычисляйте один раз в начале процедуры и передавайте дальше, а не вызывайте функцию в цикле: иначе на границе суток часть строк обработается «вчерашним», часть «сегодняшним» числом;
- ✅ для протоколов и обменов храните
ТекущаяУниверсальнаяДата(), а пользователю показывайте местное время; - ✅ проверяйте
ЗначениеЗаполнено(Дата)перед заполнением, чтобы не затереть дату, которую пользователь ввёл сам.
Если нужно сменить дату у многих документов сразу (например, ошибочно введённых не тем месяцем), в типовых конфигурациях на БСП есть обработка «Групповое изменение реквизитов». В Бухгалтерии 3.0 её ищут в Администрирование → Обслуживание, в группе корректировки данных.
Массовая замена даты проведённых документов перестраивает их движения. Делайте её на копии базы или после резервного копирования, а затем перепроведите документы и перезапустите закрытие месяца за затронутые периоды.
Почему 1С ставит неправильную дату: разбор ошибок
Ниже — симптомы, с которыми приходят чаще всего. Выберите свой, чтобы увидеть причину и решение.