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

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

Как изменить год в дате в 1С

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

Задача изменить год в дате в 1С возникает в нескольких типовых ситуациях: бухгалтер ошибся при вводе документа и поставил прошлый или будущий год, разработчику нужно программно сдвинуть дату на целый год, а администратору — массово исправить даты в пакете документов после некорректной загрузки. Способ решения зависит от того, где находится дата: в открытом документе, в проведённом документе закрытого периода или её нужно изменить программно.

Важно понимать, что дата в 1С — это не просто текст «дд.мм.гггг», а значение типа «Дата», включающее день, месяц, год и время с точностью до секунды. Поэтому простая текстовая замена символов в строке не всегда корректна: встроенные механизмы работы с датами учитывают високосные годы, длины месяцев и границы периодов.

Ниже разобраны все практические варианты: ручная правка в форме документа, изменение через код на встроенном языке, групповая обработка, а также ограничения, связанные с закрытыми периодами и датами запрета изменения данных.

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

Самый частый случай — пользователь ввёл документ с неверным годом, например, в начале января по привычке указал прошлый год. В типовых конфигурациях (1С:Бухгалтерия, 1С:Управление торговлей, 1С:ERP) дата документа находится в шапке формы, обычно рядом с номером.

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

После изменения даты документ нужно перепровести. Учтите: если документ входит в последовательность (например, партионный учёт или расчёты), изменение даты «в прошлое» может потребовать восстановления последовательностей — программа обычно предупреждает об этом при проведении.

Ручная правка года в документе
  1. 1
    Откройте документ и проверьте, не закрыт ли период
  2. 2
    Щёлкните в поле даты в шапке документа
  3. 3
    Выделите год и введите нужное значение или выберите дату через календарь
  4. 4
    Запишите и перепроведите документ
  5. 5
    Проверьте номер документа — при смене года нумерация может начаться заново

Почему дата может не сохраняться: запрет изменения данных

Если поле даты недоступно для редактирования или при записи появляется сообщение о запрете изменения, значит, в базе установлена дата запрета изменения данных. Это штатный механизм защиты закрытых периодов: после сдачи отчётности администратор блокирует правку документов прошлых кварталов и лет.

Проверить настройку можно в разделе «Администрирование» → «Поддержка и обслуживание» → «Даты запрета изменения данных» (в разных конфигурациях путь может отличаться). Запрет может быть установлен общий для всех пользователей или индивидуально по ролям и организациям.

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

Как изменить год в дате программно

Во встроенном языке 1С нет функции «ДобавитьГод», поэтому для сдвига даты на год используют функцию ДобавитьМесяц(Дата, 12). Она возвращает новое значение даты, смещённое на указанное число месяцев, и корректно обрабатывает переход через границу года и високосность.

Например, для даты 29.02.2026 функция ДобавитьМесяц(Дата, 12) вернёт 28.02.2026, поскольку 29 февраля в невисокосном году не существует. Если бы вы просто складывали секунды (365 дней), получили бы 01.03.2026 — и это была бы ошибка.

bsl
ИсходнаяДата = Дата(2026, 2, 29);
НоваяДата = ДобавитьМесяц(ИсходнаяДата, 12);   // 28.02.2026
ПрошлыйГод = ДобавитьМесяц(ИсходнаяДата, -12);  // 28.02.2023

// Тот же год, другая дата — сборка из частей:
ДатаБезГода = Дата(1, Месяц(ИсходнаяДата), День(ИсходнаяДата));
НоваяДата2 = ДобавитьМесяц(ДатаБезГода, 12 * (2026 - 1));

Если нужно не сдвинуть дату, а именно подставить конкретный год, сохранив месяц и день, соберите дату из частей функциями Год(), Месяц(), День() и конструктором Дата(год, месяц, день). Помните про особый случай 29 февраля: перед сборкой проверяйте, существует ли такой день в целевом году.

Массовое изменение года в датах документов

Когда даты с неверным годом оказались в десятках или сотнях документов — например, после загрузки из Excel или обмена с другой базой, — ручная правка непрактична. В типовых конфигурациях на платформе 8.3 есть стандартная обработка «Групповое изменение реквизитов» (раздел «Администрирование» → «Обслуживание» → «Корректировка данных»).

Порядок работы: выберите вид документов, задайте отбор (например, по организации и диапазону дат с ошибочным годом), затем в списке реквизитов найдите «Дата» и задайте новое значение. Проблема в том, что обработка подставляет фиксированное значение, а не сдвигает год у каждой даты индивидуально. Поэтому она подходит, только если все документы должны получить одну и ту же дату или если сдвиг выполняется за несколько проходов по дням.

Для сдвига года с сохранением месяца и дня у каждого документа потребуется небольшая собственная обработка или выполнение кода через консоль кода: перебрать документы запросом, для каждого вычислить ДобавитьМесяц(Док.Дата, 12), записать объект в режиме обмена данными или с проведением — в зависимости от того, нужно ли движение по регистрам.

Способы изменить год в дате

Ручная правка в форме

Подходит для единичных документов. Ограничение: не работает при дате запрета изменения и требует перепроведения.

ДобавитьМесяц(Дата, 12) в коде

Подходит разработчику для любых сценариев, корректно обрабатывает 29 февраля. Требует доступа к конфигуратору или консоли кода.

Групповое изменение реквизитов

Подходит для массовой установки одинаковой даты. Не умеет сдвигать год индивидуально у каждого документа.

Собственная обработка с запросом

Подходит для массового сдвига года с сохранением дня и месяца. Требует тестирования на копии базы.

Особые случаи: рабочая дата, Отчёты и дата в номере

Рабочая дата сеанса

Иногда пользователи путают дату документа с рабочей датой сеанса. Если все новые документы создаются с неверным годом, проверьте настройку «Сервис» → «Параметры» → рабочая дата, либо системную дату на компьютере или сервере 1С. Когда на сервере сбито системное время, год будет неверным во всех создаваемых документах у всех пользователей — исправлять нужно дату операционной системы, а не документы.

Дата в отчётах и динамических списках

В отчётах на СКД период задаётся параметрами «НачалоПериода» и «КонецПериода». Чтобы изменить год, откройте настройки отчёта и задайте новый период — либо выберите стандартный вариант («Этот год», «Прошлый год»), либо произвольные даты. Параметр, заданный в пользовательских настройках, имеет приоритет над настройками по умолчанию, поэтому если отчёт «не видит» новый год, проверьте сохранённые пользовательские варианты.

Нумерация документов при смене года

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

Как проверить результат и типичные ошибки

После изменения года убедитесь, что документ стоит на правильной позиции в журнале: отсортируйте список по дате и найдите документ. Затем откройте движения документа (кнопка «Дт/Кт» или «Показать проводки») и сверьте период записей регистров — он должен совпадать с новой датой документа.

Если правка выполнялась программно, проверьте выборочно несколько документов с «опасными» датами: 29 февраля, 31 декабря, 1 января. Именно на границах периодов проявляются ошибки сдвига и нумерации.

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

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

Дата в шапке документа
Норма

Отображается нужный год, документ проведён

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

Дата старая или документ остался непроведённым

Проводки и движения
Норма

Период записей регистров совпадает с новой датой

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

Записи остались на старой дате — документ не перепроведён

Номер документа
Норма

Номер соответствует ряду нумерации нового года

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

Номер дублируется или выпадает из последовательности

Позиция в журнале
Норма

Документ находится среди документов нового года

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

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

Типичные ошибки
01
Сдвиг даты сложением секунд (365 * 86400) вместо ДобавитьМесяц — на високосных годах получается смещение на день
02
Правка даты без перепроведения — движения по регистрам остаются на старую дату, отчёты показывают расхождения
03
Игнорирование даты запрета изменения — попытка обойти защиту вместо согласования с ответственным за учёт
04
Массовая замена без резервной копии — при ошибке в условии отбора даты портятся у сотен документов без возможности быстрого отката
05
Забытая перенумерация — после смены года появляются дубли номеров и проблемы при проверках

Ответы на частые вопросы

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

Да, при записи документа с новой датой программа сама перепроведёт его, если нажать «Провести» или «ОК». Но движения по регистрам обновятся только после проведения — если просто закрыть форму без проведения, дата в шапке и даты записей регистров разойдутся.

Почему ДобавитьМесяц(Дата, 12), а не сложение дней?

Год содержит 365 или 366 дней, поэтому сложение фиксированного числа секунд даёт смещение на сутки в високосные периоды. ДобавитьМесяц работает с календарной логикой: тот же день того же месяца через год, с корректной обработкой 29 февраля.

Что будет с датой 29 февраля при переносе на невисокосный год?

Функция ДобавитьМесяц вернёт 28 февраля — последний день месяца целевого года. Если для учёта критичен именно конец февраля, это приемлемо; если нужен конкретный день, добавьте в код явную проверку целевого года на високосность.

Как массово изменить год, если нет прав на конфигуратор?

Используйте штатную обработку «Групповое изменение реквизитов» с отбором по датам, если всем документам нужна одна дата. Для индивидуального сдвига года без прав разработчика задачу придётся передать администратору или специалисту с доступом к консоли кода.

Новые документы создаются с неверным годом у всех пользователей. В чём причина?

Почти наверняка сбита системная дата на сервере 1С или сервере баз данных. Проверьте время операционной системы сервера и синхронизацию с источником точного времени. Исправлять документы вручную в этом случае бессмысленно, пока не устранена причина.

Изменится ли номер документа автоматически при смене года?

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

Итог

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

Единичную дату правьте вручную в форме документа с последующим перепроведением. В коде год сдвигается функцией ДобавитьМесяц(Дата, 12), которая корректно обрабатывает високосные годы. Массовые правки выполняйте только после резервной копии и с проверкой даты запрета изменения данных. После смены года контролируйте проводки и нумерацию документов.