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

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

Как увеличить дату в 1С: практическое руководство

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

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

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

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

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

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

Если документ уже проведён, при изменении даты система перепроведёт его автоматически. Учтите, что дата документа определяет его позицию в последовательности проведения: перенос документа вперёд может сделать актуальным восстановление последовательности для более поздних документов, особенно в конфигурациях с партионным учётом.

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

Как снять запрет изменения даты (дата запрета редактирования)

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

В типовых конфигурациях настройка находится в разделе «Администрирование» → «Поддержка и обслуживание» → «Регламентные операции» → «Даты запрета изменения данных» (в некоторых версиях путь отличается: «Администрирование» → «Настройки пользователей и прав»). Откройте настройку, установите более раннюю дату запрета или уберите её временно, сохраните изменения.

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

Порядок действий при закрытом периоде
  1. 1
    Откройте Администрирование → Даты запрета изменения данных
  2. 2
    Сдвиньте дату запрета раньше нужного документа или отключите запрет
  3. 3
    Измените дату документа и перепроведите его
  4. 4
    Проверьте корректность проводок и остатков
  5. 5
    Верните дату запрета на исходное значение

Как увеличить дату в коде встроенного языка

Во встроенном языке 1С дата хранится с точностью до секунды, и арифметика работает через сложение секунд. Чтобы увеличить дату на один день, прибавьте 86400 (60 × 60 × 24):

bsl
НоваяДата = ДатаДокумента + 86400; // плюс один день
НоваяДата = ДатаДокумента + 7 * 86400; // плюс неделя
НоваяДата = ДатаДокумента + 3600; // плюс один час

Для прибавления месяцев и лет сложение секунд не подходит: количество дней в месяцах разное. Используйте функцию ДобавитьМесяц(Дата, ЧислоМесяцев) — она корректно обрабатывает переходы через год и разную длину месяцев. Например, ДобавитьМесяц(ДатаДокумента, 1) вернёт ту же дату через месяц.

Дополнительно полезны функции НачалоДня(Дата), КонецДня(Дата), НачалоМесяца(Дата) и КонецМесяца(Дата) — они позволяют «увеличить» дату до границы периода, что часто нужно при формировании отчётов за интервал.

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

В языке запросов 1С сложение секунд недоступно — вместо этого используется функция ДОБАВИТЬКДАТЕ(Дата, Тип, Количество). Второй параметр задаёт единицу измерения: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД.

bsl
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(Документы.Дата, ДЕНЬ, 3) КАК ДатаОтгрузки,
	ДОБАВИТЬКДАТЕ(Документы.Дата, МЕСЯЦ, 1) КАК ДатаПлатежа
ИЗ
	Документ.РеализацияТоваровУслуг КАК Документы

Функция работает и с отрицательными значениями — так можно получить дату «за N дней до». Для вычисления разницы между датами в запросе применяется парная функция РАЗНОСТЬДАТ(Дата1, Дата2, Тип).

Типичная ошибка — попытаться написать Дата + 1 в запросе. Запрос с таким выражением не выполнится: конструктор выдаст ошибку несовместимости типов.

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

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

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

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

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

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

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

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

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

Движения документа
Норма

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

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

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

Остатки по отчёту
Норма

Остатки совпадают с ожидаемыми после переноса

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

Появились отрицательные остатки или расхождения

Дата запрета
Норма

После правок запрет возвращён на исходное значение

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

Период остался открытым

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

Как прибавить к дате ровно один рабочий день?

Штатной функции учёта производственного календаря в арифметике дат нет. Нужно программно проверить день недели (функция ДеньНедели) и, если результат попадает на выходные, сдвинуть дату до понедельника. Для учёта праздников используют сведения из регистра производственного календаря.

Почему поле «Дата» в документе недоступно для редактирования?

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

Как увеличить дату на один месяц, если исходная дата — 31 января?

Функция ДобавитьМесяц в этом случае вернёт последний день февраля (28 или 29 число), поскольку 31 февраля не существует. Это корректное поведение, но учитывайте его в алгоритмах расчёта сроков платежей.

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

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

Как в запросе получить конец дня для даты документа?

Используйте функцию КОНЕЦПЕРИОДА(Дата, ДЕНЬ) — она возвращает 23:59:59 указанной даты. Аналогично работают НАЧАЛОПЕРИОДА и другие типы периода: МЕСЯЦ, КВАРТАЛ, ГОД.

Итог

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

Вручную дату меняют в поле «Дата» с последующим перепроведением; при закрытом периоде сначала сдвигают дату запрета. В коде дни прибавляют секундами (86400 на день), месяцы — функцией ДобавитьМесяц, в запросах — ДОБАВИТЬКДАТЕ. После любых изменений проверяйте движения документов и остатки.