Почему 1С подставляет не ту дату и как вернуть сегодняшнюю

· 9 мин

Содержание

Чтобы 1С снова ставила текущую дату, откройте Главное меню (☰) → Сервис → Параметры и в блоке «Рабочая дата» выберите «Использовать текущую дату компьютера». После этого новые документы получают сегодняшнее число из системных часов. Настройка действует для конкретного пользователя, перезапуск программы не нужен.

Частое заблуждение — что 1С «сломалась» или «съехали часы на сервере». Чаще всего кто-то из пользователей зафиксировал рабочую дату, например, чтобы провести документы задним числом, и забыл вернуть. Ниже — все места, где 1С Предприятие берёт дату: системные часы, параметры пользователя, поле документа, код и даты запрета.

Откуда 1С Предприятие берёт текущую дату

У платформы нет собственных часов. Дату и время она получает от операционной системы. Важно только, от какой именно.

Режим работыЧьё время видит пользовательЧто проверить
Файловая базаЧасы компьютера пользователяВремя и часовой пояс Windows на этом ПК
Клиент-серверЧасы сервера 1С (для серверного кода) и компьютера пользователя (для клиентского)Время на сервере 1С и на рабочем месте
Терминальный сервер / RDPЧасы терминального сервераВремя и часовой пояс сервера и сеанса RDP
Облако (1С:Фреш и аналоги)Время сервера провайдера с учётом часового пояса базыЧасовой пояс в настройках программы

Если часы «плывут», синхронизируйте их со службой времени. На Windows это делается из командной строки, запущенной от администратора:

w32tm /query /status
w32tm /resync
tzutil /g

Первая команда показывает источник времени и время последней синхронизации. Вторая запускает синхронизацию. Третья выводит текущий часовой пояс. На сервере Linux то же самое показывает timedatectl.

Не переводите часы сервера 1С вручную, пока в базе работают люди. Документы, записанные в этот момент, получат «прыгающее» время, а регламентные задания могут сработать повторно или пропустить запуск. Корректируйте время вне рабочих часов.

💡 Если у вас клиент-сервер и пользователи в разных часовых поясах, разница между временем их ПК и сервера — норма. Платформа умеет пересчитывать время по часовому поясу сеанса, об этом ниже в разделе про код.

Рабочая дата: как поставить или вернуть текущую дату в 1С

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

Порядок действий в интерфейсе «Такси»:

  1. Нажмите кнопку главного меню (три полоски или стрелка в левом верхнем углу окна).
  2. Выберите Сервис → Параметры.
  3. В блоке «Рабочая дата» отметьте нужный вариант:
    • «Использовать текущую дату компьютера» — 1С ставит сегодняшнее число;
    • «Использовать эту дату» — 1С ставит указанную вами дату.
  4. Нажмите «Применить» или «ОК».

Что важно знать про эту настройку:

  • 👤 Она личная. Бухгалтер, который включил фиксированную дату, видит её, а коллега рядом — нет.
  • 📄 Она влияет только на новые документы. Уже записанные документы сохраняют свою дату.
  • 🕒 Время в документе при фиксированной рабочей дате берётся текущее, меняется только число.

Мини-кейс. Бухгалтер 28 сентября вносит акты за август и ставит рабочую дату 31.08. Работу он не заканчивает, а 1 октября создаёт реализацию — она тоже уходит в август. Октябрьская выручка попадает в третий квартал и в декларацию по НДС не за тот период. Всплывает это обычно только при сверке с покупателем. Проверка простая: откройте Сервис → Параметры у того пользователя, чьи документы получают странную дату.

Привычка, которая спасает от путаницы: закончили ввод задним числом — сразу возвращайте «Использовать текущую дату компьютера». Иначе через неделю обнаружится десяток реализаций, датированных прошлым кварталом.

Как поставить дату в документе вручную

Если нужно поменять дату только в одном документе, рабочую дату трогать незачем. Дата правится прямо в шапке.

  1. Откройте документ.
  2. В поле даты (рядом с номером, «от …») введите число с клавиатуры в формате ДД.ММ.ГГГГ или нажмите кнопку календаря справа от поля.
  3. При необходимости поправьте время — оно идёт в том же поле после даты.
  4. Нажмите «Провести и закрыть» или «Записать».

Время в документе не формальность. Документы одного дня 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С сообщает о запрете изменения данных до указанной даты;
  • 🔒 дату удаётся поменять на свежую, но не на прошлую;
  • 🔒 у одного пользователя всё работает, у другого — нет (дата запрета может быть задана персонально).

Что делать:

  1. Найдите настройку «Даты запрета изменения». В Бухгалтерии 3.0 она находится в разделе Администрирование, в группе настроек проведения документов; в любой конфигурации её можно найти поиском по разделам по слову «запрет».
  2. Посмотрите, какая дата задана: общая для всех или для конкретного пользователя.
  3. Если правка действительно согласована, временно сдвиньте дату запрета на более раннюю, внесите изменения и верните прежнюю.

Менять дату запрета может только пользователь с правами администратора. Это сделано намеренно: закрытый период — тот, по которому уже сдана отчётность. Правка в нём почти всегда означает уточнённую декларацию, поэтому сначала решение главного бухгалтера, потом действия в базе.

Автоматизация: дата в регламентных заданиях и массовая замена

Регламентные задания выполняются на сервере, без пользователя. Рабочая дата у них не действует, поэтому в их коде используйте ТекущаяДатаСеанса() и явно задавайте часовой пояс, если база обслуживает несколько регионов. Расписание задания тоже считается по времени сервера.

Несколько практик, которые избавляют от проблем с датами:

  • ✅ в серверном коде — только ТекущаяДатаСеанса(), без ТекущаяДата();
  • ✅ дату для запросов вычисляйте один раз в начале процедуры и передавайте дальше, а не вызывайте функцию в цикле: иначе на границе суток часть строк обработается «вчерашним», часть «сегодняшним» числом;
  • ✅ для протоколов и обменов храните ТекущаяУниверсальнаяДата(), а пользователю показывайте местное время;
  • ✅ проверяйте ЗначениеЗаполнено(Дата) перед заполнением, чтобы не затереть дату, которую пользователь ввёл сам.

Если нужно сменить дату у многих документов сразу (например, ошибочно введённых не тем месяцем), в типовых конфигурациях на БСП есть обработка «Групповое изменение реквизитов». В Бухгалтерии 3.0 её ищут в Администрирование → Обслуживание, в группе корректировки данных.

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

Почему 1С ставит неправильную дату: разбор ошибок

Ниже — симптомы, с которыми приходят чаще всего. Выберите свой, чтобы увидеть причину и решение.

Диагностика: выберите симптом

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

Можно ли поставить рабочую дату сразу всем пользователям?
Штатно — нет, рабочая дата личная и задаётся каждым пользователем в своих параметрах. Если нужна общая дата для ввода прошлого периода, договоритесь с коллегами или программно установите её при входе через доработку.
Влияет ли рабочая дата на отчёты?
Как правило, нет. Период отчёта задаётся в его настройках. Рабочая дата влияет прежде всего на дату новых документов.
Почему в файловой базе у каждого пользователя своё время?
В файловом варианте нет сервера 1С, и каждый клиент берёт время своего компьютера. Синхронизируйте часы всех ПК с одним источником времени.
Можно ли поставить дату документа в будущем?
Платформа это позволяет. Но такой документ при проведении сформирует движения будущим числом, и остатки «на сегодня» его не увидят, пока дата не наступит. Для планирования лучше использовать заказы или планы.
Что такое ТекущаяУниверсальнаяДата и зачем она нужна?
Это время по UTC без поправки на часовой пояс. Её используют, когда нужно однозначно сравнивать события из разных регионов, например в журналах обменов.