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

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

Как к дате прибавить неделю в 1С

Как прибавить неделю к дате в 1С: функция ДобавитьКДате, оператор ДОБАВИТЬКДАТЕ в запросах, расчет через секунды. Примеры кода, ошибки и проверка результата.

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

Выбор способа зависит от контекста: пишете вы код на встроенном языке, формируете запрос к базе или настраиваете отбор в СКД. У каждого варианта есть свои ограничения, и ошибка в выборе приводит либо к неправильной дате, либо к падению запроса с непонятным сообщением об ошибке.

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

Способ 1: функция ДобавитьКДате() — универсальный вариант в коде

Функция ДобавитьКДате() — штатный механизм платформы для арифметики с датами. Она принимает три параметра: исходную дату, тип увеличения (строка) и количество единиц. Для недели тип указывается как "НЕДЕЛЯ" (регистр значения не имеет).

ИсходнаяДата = Дата(2026, 3, 15);

НоваяДата = ДобавитьКДате(ИсходнаяДата, "НЕДЕЛЯ", 1);

// Результат: 22.03.2026 0:00:00

Чтобы вычесть неделю, передайте отрицательное количество:

НеделяНазад = ДобавитьКДате(ТекущаяДата(), "НЕДЕЛЯ", -1);

Главное преимущество функции — корректная работа с любыми единицами времени: секундами, минутами, днями, месяцами, кварталами, годами. Если в будущем потребуется прибавлять не неделю, а месяц, код меняется одной строкой. Неделя при этом всегда равна ровно 7 календарным дням, високосные годы и переходы на летнее время на нее не влияют.

Обратите внимание: функция не изменяет исходную переменную, а возвращает новое значение. Частая ошибка новичков — вызвать ДобавитьКДате(Дата, "НЕДЕЛЯ", 1) без присваивания результата и удивляться, что дата не изменилась.

Способ 2: сложение даты с числом секунд

В 1С дата хранится с точностью до секунды, и платформа позволяет складывать дату с числом — число интерпретируется как количество секунд. Неделя — это 7 дней × 24 часа × 60 минут × 60 секунд = 604 800 секунд.

НоваяДата = ИсходнаяДата + 604800;

// или читаемее:

НоваяДата = ИсходнаяДата + 7 24 60 * 60;

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

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

Способ 3: оператор ДОБАВИТЬКДАТЕ в запросах

Если сдвиг даты нужен внутри запроса — например, отобрать документы, у которых срок оплаты наступает через неделю после даты документа, — арифметика с секундами в языке запросов недоступна. Используйте оператор ДОБАВИТЬКДАТЕ:

ВЫБРАТЬ

Документ.Ссылка,

ДОБАВИТЬКДАТЕ(Документ.Дата, НЕДЕЛЯ, 1) КАК ДатаОплаты

ИЗ

Документ.РеализацияТоваровУслуг КАК Документ

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

Оператор работает и в условиях отбора:

ГДЕ

Документ.Дата МЕЖДУ &НачалоПериода

И ДОБАВИТЬКДАТЕ(&НачалоПериода, НЕДЕЛЯ, 1)

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

bsl
НоваяДата = ДобавитьКДате(ИсходнаяДата, "НЕДЕЛЯ", 1); // в коде
// В запросе: ДОБАВИТЬКДАТЕ(Документ.Дата, НЕДЕЛЯ, 1)
// Арифметикой: ИсходнаяДата + 7 * 86400

Сравнение способов и выбор под задачу

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

СпособГде работаетПлюсыОграничения
ДобавитьКДате()Встроенный языкЛюбые единицы, читаемоЧуть медленнее арифметики
Дата + 604800Встроенный языкКоротко, быстроТолько фиксированные интервалы
ДОБАВИТЬКДАТЕЗапросы, СКДЕдинственный вариант в запросеКоличество — только литерал/параметр
Маршрут решения

Как выбрать способ

Нужно сдвинуть дату в коде модуляИспользуйте ДобавитьКДате — код останется гибким
Сдвиг нужен внутри запроса или отбора СКДПрименяйте оператор ДОБАВИТЬКДАТЕ
Критична скорость в большом циклеИспользуйте сложение с 604800 секундами
Период в будущем может стать месяцем или годомТолько ДобавитьКДате — арифметика с секундами сломается

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

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

В ней можно отобрать документы по условию и установить реквизиту нужное значение. Однако штатная обработка умеет присваивать фиксированное значение, а не «прибавить 7 дней к каждой дате». Для арифметического сдвига потребуется произвольный алгоритм (доступен в расширенном режиме обработки) или помощь разработчика.

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

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

РазницаВДнях = (НоваяДата - ИсходнаяДата) / 86400;

// Должно быть ровно 7

Отдельные ситуации требуют внимания. Если исходная дата содержит время (например, 15.03.2026 14:30:00), оба способа сохранят время без изменений — результат будет 22.03.2026 14:30:00. Если нужен сдвиг на начало дня, предварительно примените НачалоДня().

Пустая дата (01.01.0001) при прибавлении недели превратится в 08.01.0001 — платформа не выдаст ошибку. Если бизнес-логика предполагает, что пустая дата должна остаться пустой, добавьте проверку ЗначениеЗаполнено(ИсходнаяДата) перед расчетом.

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

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

Разница между датами
Норма

Ровно 604800 секунд (7 дней)

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

Другое значение — проверьте тип увеличения и исходные данные

Время в результирующей дате
Норма

Совпадает с исходным или обнулено намеренно

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

Время потерялось неожиданно — где-то применено НачалоДня()

Поведение с пустой датой
Норма

Пустая дата обработана отдельной веткой кода

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

08.01.0001 попадает в документы и отчеты

Типичные ошибки при работе с датами

Большинство проблем со сдвигом дат связано не с самой арифметикой, а с невнимательностью к типам и контексту. Разберите частые случаи до того, как столкнетесь с ними в рабочей базе.

Типичные ошибки
01
Прибавление числа 7 к дате вместо 604800 — результат смещается на 7 секунд, а не на 7 дней, и ошибка долго остается незамеченной
02
Кавычки вокруг НЕДЕЛЯ в запросе — запрос падает с ошибкой синтаксиса, так как в языке запросов это ключевое слово без кавычек
03
Вызов ДобавитьКДате без присваивания результата — исходная дата не меняется, функция возвращает новое значение
04
Использование ДОБАВИТЬКДАТЕ с полем таблицы как количеством — не поддерживается, нужен литерал или параметр
05
Сложение даты со строкой "7" — ошибка преобразования типов в момент выполнения

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

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

Как прибавить не неделю, а 5 рабочих дней?

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

Работает ли ДобавитьКДате на клиенте в управляемых формах?

Да, функция доступна и на тонком, и на веб-клиенте, контекст сервера не требуется. Это удобно для расчетов прямо в форме без лишних серверных вызовов.

Как прибавить неделю к дате в СКД?

В схеме компоновки данных оператор ДОБАВИТЬКДАТЕ пишется прямо в тексте запроса набора данных. В вычисляемых полях и выражениях отбора он тоже доступен, если выражение формируется на языке запросов, а не на языке выражений СКД.

Что будет, если прибавить неделю к 31 декабря?

Дата корректно перейдет на 7 января следующего года — и ДобавитьКДате, и сложение с секундами обрабатывают переход через границу года автоматически, дополнительный код не нужен.

Можно ли прибавить дробное количество недель, например 1,5?

Функция ДобавитьКДате работает с целым количеством единиц. Для полутора недель используйте сложение с секундами: Дата + 10.5 * 86400, или прибавьте 1 неделю и 3–4 дня отдельно.

Почему после прибавления недели дата выводится без времени?

Само прибавление время не удаляет. Проверьте, не применяется ли к значению функция Формат() с шаблоном только даты или НачалоДня() где-то по пути следования значения.

Итог

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

В коде прибавляйте неделю через ДобавитьКДате(Дата, "НЕДЕЛЯ", 1) или Дата + 604800, в запросах — через ДОБАВИТЬКДАТЕ(Дата, НЕДЕЛЯ, 1). Проверяйте результат разницей в 7 дней, контролируйте пустые даты и время, а перед массовым изменением дат документов делайте резервную копию.