Разработка и Конфигурация · 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)
Учтите ограничение: третьим параметром нельзя передать выражение или поле таблицы — только литерал или параметр запроса. Если количество недель хранится в данных, потребуется другой подход (например, вычисление на уровне кода после выборки).
НоваяДата = ДобавитьКДате(ИсходнаяДата, "НЕДЕЛЯ", 1); // в коде
// В запросе: ДОБАВИТЬКДАТЕ(Документ.Дата, НЕДЕЛЯ, 1)
// Арифметикой: ИсходнаяДата + 7 * 86400Сравнение способов и выбор под задачу
Все три способа дают идентичный результат для недели, но применимы в разных контекстах. Выбирайте по месту использования и планам на сопровождение кода.
| Способ | Где работает | Плюсы | Ограничения |
|---|---|---|---|
| ДобавитьКДате() | Встроенный язык | Любые единицы, читаемо | Чуть медленнее арифметики |
| Дата + 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 попадает в документы и отчеты
Типичные ошибки при работе с датами
Большинство проблем со сдвигом дат связано не с самой арифметикой, а с невнимательностью к типам и контексту. Разберите частые случаи до того, как столкнетесь с ними в рабочей базе.
Еще одна тонкость: при работе через COM-соединение или внешние компоненты дата может передаваться как строка в формате, отличном от ожидаемого. Всегда явно преобразуйте входящие значения через Дата() с проверкой результата.
Частые вопросы
Как прибавить не неделю, а 5 рабочих дней?
Штатной функции для рабочих дней в платформе нет. В типовых конфигурациях используются календарные графики (регистр «Календарные графики» и функции общего модуля работы с календарями), где можно получить дату с учетом выходных и праздников. В самописной конфигурации придется реализовать собственный график.
Работает ли ДобавитьКДате на клиенте в управляемых формах?
Да, функция доступна и на тонком, и на веб-клиенте, контекст сервера не требуется. Это удобно для расчетов прямо в форме без лишних серверных вызовов.
Как прибавить неделю к дате в СКД?
В схеме компоновки данных оператор ДОБАВИТЬКДАТЕ пишется прямо в тексте запроса набора данных. В вычисляемых полях и выражениях отбора он тоже доступен, если выражение формируется на языке запросов, а не на языке выражений СКД.
Что будет, если прибавить неделю к 31 декабря?
Дата корректно перейдет на 7 января следующего года — и ДобавитьКДате, и сложение с секундами обрабатывают переход через границу года автоматически, дополнительный код не нужен.
Можно ли прибавить дробное количество недель, например 1,5?
Функция ДобавитьКДате работает с целым количеством единиц. Для полутора недель используйте сложение с секундами: Дата + 10.5 * 86400, или прибавьте 1 неделю и 3–4 дня отдельно.
Почему после прибавления недели дата выводится без времени?
Само прибавление время не удаляет. Проверьте, не применяется ли к значению функция Формат() с шаблоном только даты или НачалоДня() где-то по пути следования значения.
Что важно запомнить
В коде прибавляйте неделю через ДобавитьКДате(Дата, "НЕДЕЛЯ", 1) или Дата + 604800, в запросах — через ДОБАВИТЬКДАТЕ(Дата, НЕДЕЛЯ, 1). Проверяйте результат разницей в 7 дней, контролируйте пустые даты и время, а перед массовым изменением дат документов делайте резервную копию.