Добавление фиксированного количества дней к дате — одна из самых частых задач при работе с 1С:Предприятие. Бухгалтерам нужно рассчитывать сроки оплаты по договорам, кадровикам — исчислять дедлайны для отпусков, а программистам — автоматизировать отчеты с динамическими периодами. Казалось бы, что может быть проще? Но в 1С 8.3 (как и в 8.2) есть нюансы: функция ДобавитьМесяц() ведет себя неочевидно с датами в конце месяца, а ручное сложение дней через плюс (+) чревато ошибками при переходе через месяц или год.

В этой статье мы разберем 5 рабочих способов прибавить 30 дней к дате — от простейших встроенных функций до программного кода для сложных сценариев. Вы узнаете, какой метод выбрать для бухгалтерских отчетов, а какой подойдет для автоматизации бизнес-процессов. Все примеры протестированы на актуальных релизах платформы 1С:Предприятие 8.3.22 и 8.3.23, но majority логики работают и в более ранних версиях.

📊 Как часто вам приходится работать с датами в 1С?
Ежедневно
Несколько раз в неделю
Редко
Только при настройке отчетов

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

Если вам нужно быстро прибавить 30 дней к текущей дате или дате из документа, используйте встроенную функцию ДобавитьДень(). Это базовый метод, который подходит для большинства задач в 1С:Бухгалтерия, 1С:Зарплата и Управление Персоналом или 1С:Управление Торговлей.

Синтаксис функции:

ДобавитьДень(Дата, КоличествоДней)

Примеры использования:

  • 📅 К текущей дате: ДобавитьДень(ТекущаяДата(), 30) — вернет дату через 30 дней от сегодня.
  • 📄 К дате документа: ДобавитьДень(Документ.Дата, 30) — прибавит 30 дней к дате конкретного документа.
  • 📊 В запросе: ВЫБРАТЬ ДобавитьДень(Документ.Дата, 30) КАК СрокОплаты — добавит колонку с новой датой в результат запроса.

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

Минусы: не учитывает рабочие/выходные дни (если нужно прибавить 30 рабочих дней, читайте раздел 4).

💡

Если дата попадает на конец месяца (например, 31 января + 30 дней), функция ДобавитьДень() автоматически перенесет её на правильное число следующего месяца (2 или 3 марта, в зависимости от года).

2. Арифметика с датами: оператор + и его подводные камни

В можно прибавлять дни к датам через стандартный оператор сложения (+). Это удобно для быстрых расчетов, но требует осторожности: платформа интерпретирует даты как числа (количество дней от 01.01.0001), и некорректное использование может привести к ошибкам.

Примеры:

НоваяДата = ТекущаяДата() + 30;  // Прибавляет 30 дней к сегодня

СрокИсполнения = ДатаДоговора + 30; // Для даты из переменной

⚠️ Внимание: если вы используете этот метод в запросах, оберните выражение в функцию ДАТАВРЕМЯ(), иначе может выдать ошибку несоответствия типов:

ВЫБРАТЬ ДАТАВРЕМЯ(Документ.Дата + 30) КАК НовыйСрок
Метод Пример кода Работает в запросах? Учитывает выходные?
ДобавитьДень() ДобавитьДень(ТекущаяДата(), 30) Да Нет
Оператор + ТекущаяДата() + 30 Только с ДАТАВРЕМЯ() Нет
НачалоДня() + дни НачалоДня(ТекущаяДата()) + 30*86400 Нет Нет

🔹 Когда использовать: для простых расчетов в модулях объектов или регламентных заданиях. Избегайте этого метода, если дата может "вылезать" за пределы месяца (например, 31.01.2026 + 30 дней). В таких случаях лучше применять ДобавитьДень().

3. Прибавление дней в запросах 1С: синтаксис и примеры

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

Базовый синтаксис:

ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, КоличествоДней)

Примеры:

  • 📌 Простой вариант:
    ВЫБРАТЬ
    

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

    ИЗ Документ.ЗаказПокупателя КАК Документ

  • 🔍 С фильтрацией:
    ВЫБРАТЬ
    

    Номер,

    Дата,

    ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, 30) КАК Срок

    ИЗ Документ.СчетНаОплату

    ГДЕ ДОБАВИТЬКДАТЕ(Дата, ДЕНЬ, 30) < ТЕКУЩАЯДАТА()

    (выберет счета, у которых истек срок оплаты)

⚠️ Внимание: в запросах нельзя использовать оператор + напрямую с полем типа Дата. Всегда применяйте ДОБАВИТЬКДАТЕ() или ДАТАВРЕМЯ().

Что делать, если нужно прибавить дни к дате с временем?

Если поле содержит и дату, и время (например, 2026-05-15 14:30:00), используйте функцию ДОБАВИТЬКДАТЕ() с указанием интервала:

ДОБАВИТЬКДАТЕ(ДатаВремя, СЕКУНДА, 30*86400)

где 86400 — количество секунд в одном дне. Это гарантирует, что время останется неизменным, а дата сдвинется на нужное количество дней.

4. Как прибавить 30 рабочих дней (с учетом выходных)

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

  1. Календарь рабочих дней (встроенный или кастомный).
  2. Цикл или рекурсивная функция для пошагового добавления дней.

📌 Пример кода для добавления 30 рабочих дней:

Функция ДобавитьРабочиеДни(НачальнаяДата, КоличествоДней)

ТекущаяДата = НачальнаяДата;

Счетчик = 0;

Пока Счетчик < КоличествоДней Цикл

ТекущаяДата = ТекущаяДата + 1;

Если НЕ ТекущаяДата.ДеньНедели() = 6 // Суббота

И НЕ ТекущаяДата.ДеньНедели() = 7 // Воскресенье

И НЕ ЭтоПраздник(ТекущаяДата) Тогда

Счетчик = Счетчик + 1;

КонецЕсли;

КонецЦикла;

Возврат ТекущаяДата;

КонецФункции

// Функция проверки праздников (упрощенно)

Функция ЭтоПраздник(Дата)

// Здесь должен быть ваш код проверки праздничных дней

// Например, выборка из справочника "Праздники"

Возврат Ложь;

КонецФункции

🔹 Где взять календарь праздников?

  • 📅 В типовой конфигурации 1С:Зарплата и Управление Персоналом есть справочник ПроизводственныеКалендари.
  • 🌐 Для 1С:Бухгалтерия можно подключить внешнюю обработку или загрузить календарь из ИТС.
  • 🛠️ Написать свою функцию с жестко прописанными праздничными датами (не рекомендуется — придется обновлять каждый год).
💡

При добавлении рабочих дней всегда учитывайте региональные особенности: в некоторых субъектах РФ выходными могут быть дополнительные дни (например, религиозные праздники).

5. Программное добавление дней через НачалоДня() и секунды

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

📌 Пример: прибавить 30 дней к дате с временем 15.05.2026 14:30:00, сохранив время:

ДатаСВременем = '2026-05-15 14:30:00';

НоваяДата = НачалоДня(ДатаСВременем) + 30*86400 +

(ДатаСВременем - НачалоДня(ДатаСВременем));

🔢 Расшифровка:

  • НачалоДня() — обнуляет время (оставляет только дату).
  • 30*86400 — количество секунд в 30 днях (30 дней × 24 часа × 3600 секунд).
  • (ДатаСВременем - НачалоДня(ДатаСВременем)) — сохраняет оригинальное время.

⚠️ Внимание: этот метод может дать некорректный результат при переходе на зимнее/летнее время (если таковое вновь введут). В таких случаях используйте ДобавитьДень().

1. Убедитесь, что функция возвращает дату, а не число

2. Проверьте результат на граничных датах (конец месяца, 29 февраля)

3. Если работаете с временем — сохраните его отдельно

4. Для рабочих дней — протестируйте на праздничных периодах (май, январь)

-->

6. Автоматизация: обработка для массового добавления дней

Если вам нужно прибавить 30 дней к датам в массиве документов (например, перенести сроки оплаты по всем счетам), удобнее создать внешнюю обработку. Ниже пример кода для обработки табличной части документа:

Процедура ПеренестиСрокиНа30Дней(ТабличнаяЧасть)

Для Каждого Строка Из ТабличнаяЧасть Цикл

Если ЗначениеЗаполнено(Строка.Дата) Тогда

Строка.Дата = ДобавитьДень(Строка.Дата, 30);

КонецЕсли;

КонецЦикла;

КонецПроцедуры

🔹 Как использовать:

  1. Создайте новую обработку в конфигураторе (Файл → Новый → Обработка).
  2. Добавьте реквизит типа ТаблицаЗначений для хранения данных.
  3. Вставьте код выше в модуль обработки.
  4. Запустите обработку в режиме 1С:Предприятие и передайте в неё табличную часть документа.

📂 Где скачать готовые обработки?

  • 🌍 Инфостарт — крупнейшая база обработок для .
  • 📦 ИТС — официальные решения от .
  • 🛠️ GitHub — открытые репозитории с кодом (ищите по тегам 1C, 8.3).
💡

Перед массовым изменением дат сделайте резервную копию базы (Администрирование → Выгрузить информационную базу). Это спасет вас от ошибок при некорректной обработке.

FAQ: Частые вопросы по добавлению дней в 1С

🔹 Почему функция ДобавитьМесяц() не подходит для добавления 30 дней?

Функция ДобавитьМесяц() добавляет целые месяцы, а не дни. Например, ДобавитьМесяц('31.01.2026', 1) вернет 29.02.2026 (если февраль високосный) или 28.02.2026, а не 02.03.2026, как могло бы показаться. Для дней всегда используйте ДобавитьДень().

🔹 Как прибавить 30 дней к дате в отчете СКД (Система Компоновки Данных)?

В настройках отчета СКД перейдите на закладку Параметры, добавьте новый параметр типа Дата и в выражении для него используйте:

ДОБАВИТЬКДАТЕ(&ДатаНачала, ДЕНЬ, 30)

Либо создайте вычисляемое поле в схеме компоновки с аналогичным выражением.

🔹 Можно ли прибавить 30 дней к дате в мобильном приложении 1С?

Да, в мобильной платформе 1С:Предприятие доступны те же функции: ДобавитьДень() и арифметика с датами. Однако учитывайте, что:

  • Производительность на мобильных устройствах ниже — избегайте сложных циклов.
  • В некоторых версиях мобильной платформы нет поддержки ДОБАВИТЬКДАТЕ() в запросах (проверяйте в документации).
🔹 Как прибавить 30 дней к дате в 1С 7.7?

В 1С 7.7 логика аналогична, но синтаксис отличается. Используйте:

НоваяДата = ТекущаяДата() + 30;

или функцию ДобДень() из библиотеки стандартных подсистем. Обратите внимание, что в 7.7 нет отдельного типа Дата — даты хранятся как числа.

🔹 Почему при добавлении 30 дней к 31.03.2026 получается 30.04.2026, а не 01.05.2026?

Это корректное поведение . Функция ДобавитьДень() учитывает реальное количество дней в месяце. Апрель имеет 30 дней, поэтому 31.03 + 30 дней = 30.04. Если вам нужно получить 01.05, прибавьте 31 день.