Выбор месяца в 1С 8.3: календарь, период и функции

· 9 мин

Содержание

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

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

Где именно нужно выбрать месяц?

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

Самый частый случай — поле даты в документе (Дата, Период начисления, Дата оплаты). Справа у такого поля есть значок календаря.

  1. Нажмите значок календаря — раскроется месячная сетка с днями.
  2. Вверху календаря — стрелки ‹ и › и надпись с названием месяца и годом (например, «январь 2026»).
  3. Стрелки листают по одному месяцу назад и вперёд. Это удобно, когда нужен соседний месяц.
  4. Чтобы прыгнуть далеко, нажмите на саму надпись месяца и года. Календарь переключится в режим выбора месяца — 12 плиток на год.
  5. Нажмите ещё раз по надписи года — откроется выбор года (сетка лет). Выбрали год → месяц → день.

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

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

Как ввести месяц с клавиатуры без мыши

Мышь для даты не обязательна. Поле даты в 1С принимает цифры подряд и само расставляет разделители.

  • Встаньте в поле даты, наберите 01012026 — программа покажет 01.01.2026. Точки печатать не нужно.
  • Можно вводить коротко: часто достаточно дня и месяца, год подставится текущий.
  • После ввода нажмите Enter или Tab — значение зафиксируется.

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

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

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

Выбор месяца периодом в отчётах

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

  1. Нажмите поле Период (или кнопку выбора рядом с ним).
  2. Откроется список стандартных периодов: «Сегодня», «Эта неделя», «Этот месяц», «Этот квартал», «Этот год», «Вчера», «Прошлый месяц» и так далее.
  3. Выберите «Этот месяц» или «Прошлый месяц» — программа сама проставит первое и последнее число месяца.
  4. Нужен конкретный месяц прошлого года? Выберите «Произвольный период» и задайте даты начала и конца вручную через календарь.

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

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

Если отчёт строится по дням, а вам нужен свод за месяц, проверьте группировку в настройках отчёта (Показать настройки → Группировка). Период задаёт только диапазон, а детализацию строк — именно группировка.

Кнопки «Этот месяц» и «Прошлый месяц» в списке — это и есть «быстрые способы» выбора: один клик вместо ручного ввода двух дат.

Месяц в закрытии месяца и зарплатных документах

В типовых конфигурациях есть места, где месяц — ключевой параметр, а не просто дата.

1С:Бухгалтерия 3.0, закрытие месяца . Путь: Операции → Закрытие периода → Закрытие месяца. Вверху формы — поле месяца со стрелками влево-вправо. Стрелки листают по месяцам; название месяца и год видны сразу. Выбрали месяц — программа показывает список регламентных операций именно за него: начисление амортизации, расчёт себестоимости, закрытие счетов. Операции привязаны к выбранному месяцу, поэтому закрывать периоды нужно по порядку: сначала январь, потом февраль и так далее. Если перескочить через месяц, программа предупредит, что предыдущий период не закрыт.

1С:ЗУП 3.1, начисление зарплаты. В документах начисления (например, «Начисление зарплаты и взносов») есть поле Месяц. Оно определяет период, за который считается зарплата , и влияет на отчётность. Здесь месяц выбирают именно в этом поле, а не в поле даты документа — дата документа и месяц начисления это разные вещи.

В зарплатных документах не путайте Месяц (период начисления) с Дата (дата создания документа). Поставите не тот месяц — начисления уйдут в чужой период, и в отчётах по НДФЛ и взносам появятся расхождения.

Таблица — где искать поле месяца в разных типовых конфигурациях:

ЗадачаГде выбирается месяц
Закрытие месяца (БП 3.0)Операции → Закрытие периода → Закрытие месяца, поле со стрелками вверху
Начисление зарплаты (ЗУП 3.1)Поле Месяц в шапке документа начисления
Отчёт (ОСВ, анализ счёта)Поле Период → «Этот месяц» / «Прошлый месяц»
Произвольный документПоле Дата → календарь или ввод с клавиатуры

Как задать месяц программно: функции для разработчика

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

// Границы текущего месяца
НачалоТекущего = НачалоМесяца(ТекущаяДатаСеанса());
КонецТекущего  = КонецМесяца(ТекущаяДатаСеанса());

// Предыдущий и следующий месяц от произвольной даты
НачалоПрошлого   = НачалоМесяца(ДобавитьМесяц(Дата, -1));
НачалоСледующего = НачалоМесяца(ДобавитьМесяц(Дата, 1));

// Номер месяца (1..12) и его название
НомерМесяца   = Месяц(Дата);                    // например, 1
НазваниеМесяца = Формат(Дата, "ДФ='MMMM'");     // например, «январь»

Что здесь важно:

  • НачалоМесяца(Дата) возвращает первую секунду месяца (01.ММ.ГГГГ 00:00:00), КонецМесяца(Дата) — последнюю (00:00:00 последнего дня… точнее, 23:59:59). Пару этих функций используют как границы периода для запросов.
  • ДобавитьМесяц(Дата, ЧислоМесяцев) сдвигает дату на нужное число месяцев; отрицательное число — назад. Функция сама корректно обрабатывает концы месяцев.
  • Месяц(Дата) даёт число от 1 до 12 — пригодится для условий и выбора Выбор Из.
  • Формат(Дата, "ДФ='MMMM'") выводит название месяца в именительном падеже («январь»). Для «января» в составе даты используйте длинный формат Формат(Дата, "ДЛФ=DD").

На клиенте вместо ТекущаяДата() берите ТекущаяДатаСеанса(). Функция ТекущаяДата() доступна только на сервере и во внешнем соединении — на клиенте вызов приведёт к ошибке.

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

Период = Новый СтандартныйПериод;
Период.Вариант = СтандартныйПериодВариант.ЭтотМесяц;
ДатаНачала    = Период.ДатаНачала;     // первое число месяца
ДатаОкончания = Период.ДатаОкончания;  // последний день месяца

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

В запросе границы месяца удобно передавать параметрами, а считать их в коде перед выполнением:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    Продажи.Номенклатура,
    |    СУММА(Продажи.Сумма) КАК Сумма
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК Продажи
    |ГДЕ
    |    Продажи.Дата МЕЖДУ &НачалоМесяца И &КонецМесяца
    |СГРУППИРОВАТЬ ПО
    |    Продажи.Номенклатура";
Запрос.УстановитьПараметр("НачалоМесяца", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("КонецМесяца",  КонецМесяца(Дата));
Результат = Запрос.Выполнить();

Так вы не зависите от длины месяца: функции сами подставят 28, 30 или 31 день, а с КонецМесяца() в условие МЕЖДУ попадёт и последний день целиком.

Как не выбирать месяц заново при каждом открытии

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

  • Сохраните настройку отчёта. Задали нужный период и оформление → Ещё → Сохранить настройки → дайте имя (например, «Продажи за месяц»). При следующем запуске выберите эту настройку через Ещё → Выбрать настройки.
  • Проверьте период по умолчанию. Многие отчёты открываются с периодом «текущий месяц» автоматически. Если открывается не тот период, посмотрите, какой вариант стоит в сохранённой настройке по умолчанию.
  • Относительный период переживает смену месяца. Вариант «Этот месяц» не привязан к конкретным датам: в ноябре он покажет ноябрь, в декабре — декабрь. Поэтому для регулярного отчёта выбирайте относительный вариант, а не произвольные даты — иначе в новом месяце придётся менять руками.

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

Частые ошибки при выборе месяца

Ошибки по теме повторяются из конфигурации в конфигурацию — вот те, что стоят реального времени.

  • 🗓️ Выбрали дату вместо периода. В отчёте задали одну дату начала, забыли дату конца — отчёт собрал данные «от и до одного дня» и вышел пустым. Для месяца нужен диапазон, а не точка.
  • 🔁 Период сбрасывается при каждом открытии отчёта. Это не сбой: отчёт открывается с периодом по умолчанию. Чтобы запомнить выбор, сохраните настройку отчёта (Ещё → Сохранить настройки) и выберите её при следующем запуске.
  • ⚠️ Перепутали месяц документа и дату документа (особенно в зарплате) — начисления ушли в чужой период.
  • 🧮 В коде считали границы месяца руками ("01." + Месяц + ...), склеивая число со строкой без Формат. Из-за этого в однозначных месяцах терялся ноль (1 вместо 01), и дата получалась битой. Используйте НачалоМесяца()/КонецМесяца() — они не ошибаются с длиной месяца и форматом.
  • 📉 Выбрали «Этот месяц», а данные за прошлый. Проверьте системную дату компьютера или сервера: «этот месяц» отсчитывается от неё. Сбитые часы сервера дают неверный период.

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

Почему в поле отчёта нет варианта «Месяц», а только «Этот месяц» и «Прошлый месяц»?
Стандартный список периодов привязан к текущей дате: он предлагает готовые относительные варианты. Конкретный месяц прошлого года задают через «Произвольный период», вписав даты начала и конца вручную.
Как выбрать не весь месяц, а его часть?
Используйте «Произвольный период» в поле периода и укажите нужные даты, например с 1 по 15 число. Стандартные варианты дают только целый месяц.
Можно ли выбрать сразу несколько месяцев?
Да — задайте произвольный период от начала первого месяца до конца последнего (например, с 1 января по 31 марта — это три месяца). Для целого квартала есть готовый вариант «Этот квартал».
Как в коде получить название месяца прописью?
Формат(Дата, "ДФ='MMMM'") даёт название в именительном падеже («январь»). Для даты целиком с месяцем в родительном падеже («1 января 2026 г.») берите Формат(Дата, "ДЛФ=D").
Чем отличается `ТекущаяДата()` от `ТекущаяДатаСеанса()`?
ТекущаяДата() работает только на сервере и возвращает дату компьютера-сервера. На клиенте используют ТекущаяДатаСеанса() — она безопасна в любом контексте и учитывает смещение сеанса.