Производственный календарь и графики работы в 1С 8.3: создание с нуля

· 10 мин

Содержание

Календарь в 1С 8.3 создают в два слоя: сначала производственный календарь (какие дни рабочие, праздничные, предпраздничные), потом на его основе график работы (сколько часов и в какие дни работает сотрудник или подразделение). Оба справочника есть в типовых конфигурациях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, ERP. Создать календарь в 1С можно вручную, программно или загрузкой из Excel.

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

Зачем в 1С календарь и что от него зависит

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

Что на нём держится:

  • 📅 норма рабочего времени — дни и часы месяца для оклада, табеля и отчётов;
  • 💰 расчёт зарплаты — оплата праздничных дней, сверхурочных, начисления по дням и часам;
  • 🏖️ отпуска — праздники внутри отпуска не учитываются в календарных днях отпуска;
  • ⏱️ сроки — «оплатить в течение 5 рабочих дней» в договорах и задачах;
  • ⚙️ программные расчёты — функции БСП, которые считают дату через N рабочих дней.

График работы сотрудника опирается на производственный календарь. Если в календаре 31 декабря отмечено как рабочий день, а по постановлению правительства его сделали выходным, ошибка уйдёт во все графики, построенные «с учётом праздников».

Какие бывают календари в 1С и какой нужен вам

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

ОбъектЧто хранитГде используетсяКто создаёт
Производственный календарьТип каждого дня года: рабочий, суббота, воскресенье, праздник, предпраздничныйНорма времени, сроки, основа графиковПоставляется с конфигурацией, обновляется
Региональный календарьТот же набор + местные праздникиФилиалы в республиках с собственными праздникамиПользователь на базе общего
График работы (в ЗУП — «Графики работы сотрудников»)Часы по дням: пятидневка, сменный, суммированный учётТабель, расчёт зарплаты, кадровые документыПользователь
Индивидуальный графикОтклонения конкретного сотрудника на периодЗУП, табель конкретного работникаПользователь документом
Элементы формы «Поле календаря» и «Планировщик»Выбор даты, сетка событийСобственные формы, доработкиПрограммист

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

Способ 1. Создание календаря через стандартные справочники

Как открыть производственный календарь

Самый надёжный путь, который работает в любой типовой конфигурации:

  1. Откройте главное меню (кнопка с тремя полосками слева вверху) → Сервис → Параметры.
  2. Включите флажок «Отображать команду “Все функции”» и нажмите «Применить».
  3. В главном меню выберите Все функции → Справочники → Производственные календари.

В ЗУП 3.1 справочник дополнительно выведен в раздел Настройка, в Бухгалтерии 3.0 — в группу настроек зарплаты и кадров раздела Справочники. Если пункт не виден, пользуйтесь «Все функции» — он есть всегда.

Как заполнить или проверить год

  1. Откройте элемент «Российская Федерация» (он поставляется с программой).
  2. Выберите нужный год переключателем над сеткой месяцев.
  3. Проверьте цветовую разметку: праздники и выходные выделены, рядом — сводка рабочих дней и часов по месяцам.
  4. Чтобы изменить день, щёлкните по нему правой кнопкой мыши или выделите и воспользуйтесь командой изменения дня на панели формы. Выберите тип дня.
  5. Для перенесённого выходного используйте команду переноса: укажите, на какую дату переносится день. Тогда в карточке видно, откуда взялся выходной.
  6. Нажмите «Записать и закрыть».

Сверяйте итог года с официальным постановлением о переносе выходных. Простая проверка: при пятидневке 40 часов количество рабочих дней и норма часов за год в форме должны совпасть с опубликованными цифрами.

Как сделать региональный календарь

В Татарстане, Башкортостане, Якутии и ряде других регионов есть свои праздники. Для филиала там:

  1. В справочнике «Производственные календари» создайте новый элемент, например «Татарстан».
  2. Укажите в нём базовым календарём «Российская Федерация» — тогда федеральные праздники подтянутся автоматически.
  3. Отметьте региональные праздничные дни на нужный год.
  4. Используйте этот календарь в графиках работы сотрудников филиала.

Как создать график работы

График строится поверх производственного календаря. В ЗУП 3.1 это справочник «Графики работы сотрудников» (раздел Настройка), в других конфигурациях на БСП — справочник графиков работы, его тоже легко найти через «Все функции».

  1. Нажмите «Создать». Дайте понятное имя: «Пятидневка 40 ч», «Сменный 2/2 по 12 ч».
  2. Выберите способ заполнения:
    • по неделям — для пятидневки и шестидневки, часы задаются по дням недели;
    • по циклам произвольной длины — для сменных графиков (2/2, сутки через трое).
  3. Для недельного графика укажите производственный календарь и включите учёт праздников: предпраздничные дни сократятся на час, праздники станут нерабочими.
  4. Для сменного графика задайте длину цикла и дату его начала — от неё программа раскладывает смены по году.
  5. Заполните год и проверьте итог по месяцам.

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

Проверка календаря перед новым годом
Выполнено: 0 / 5

Способ 2. Программное создание календаря на языке 1С

Вариант на БСП: используем готовые функции

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

Календарь = КалендарныеГрафики.ОсновнойПроизводственныйКалендарь();
ДатаОплаты = КалендарныеГрафики.ДатаПоКалендарю(Календарь, НачалоДня(ТекущаяДатаСеанса()), 5);

Если ДатаОплаты = Неопределено Тогда
    Сообщить("Календарь не заполнен на нужный период");
Иначе
    Сообщить("Срок оплаты: " + Формат(ДатаОплаты, "ДЛФ=D"));
КонецЕсли;

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

Вариант для собственной конфигурации

В небольшой самописной базе без БСП календарь собирают из двух объектов:

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

Код заполняет год по дням недели. Праздники потом правят вручную или загрузкой.

Процедура ЗаполнитьГод(НомерГода) Экспорт

    НачалоПериода = Дата(НомерГода, 1, 1);
    КонецПериода = Дата(НомерГода, 12, 31);

    Набор = РегистрыСведений.ДанныеКалендаря.СоздатьНаборЗаписей();
    ТекущийДень = НачалоПериода;

    Пока ТекущийДень <= КонецПериода Цикл
        Запись = Набор.Добавить();
        Запись.Дата = ТекущийДень;
        Если ДеньНедели(ТекущийДень) >= 6 Тогда
            Запись.ВидДня = Перечисления.ВидыДней.Выходной;
        Иначе
            Запись.ВидДня = Перечисления.ВидыДней.Рабочий;
        КонецЕсли;
        ТекущийДень = ТекущийДень + 86400;
    КонецЦикла;

    Набор.Записать(Ложь);

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

ДеньНедели() возвращает 1 для понедельника и 7 для воскресенья, поэтому условие >= 6 отбирает субботу и воскресенье. 86400 — секунды в сутках, шаг цикла на один день.

Запускайте процедуру на копии базы, прежде чем на рабочей. Параметр Записать(Ложь) добавляет записи, а не заменяет набор. Если год уже заполнен, запись упадёт с ошибкой о дублях по измерению Дата. Для перезаполнения года сначала удалите его записи или ставьте отбор по периоду.

Календарь на форме

Если задача — показать календарь пользователю, а не считать дни:

  • 🗓️ Поле календаря — реквизит формы типа Дата, выведенный элементом с видом «Поле календаря». Удобно для выбора дня и выделения нескольких дат.
  • 📊 Планировщик — реквизит типа Планировщик. Даёт сетку с событиями по дням и часам: запись к врачу, бронь переговорной, смены. Элементы добавляют через Планировщик.Элементы.Добавить(Начало, Конец).

Способ 3. Загрузка дней календаря из Excel

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

Подготовьте файл

Колонка AКолонка B
Дата (формат даты Excel)Вид дня: «Рабочий», «Выходной», «Праздник», «Предпраздничный»

Без объединённых ячеек, первая строка — заголовки, одна дата на строку.

Загрузите кодом во внешней обработке

&НаСервере
Процедура ЗагрузитьИзExcel(ИмяФайла)

    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ИмяФайла);

    Набор = РегистрыСведений.ДанныеКалендаря.СоздатьНаборЗаписей();

    Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
        ТекстДаты = СокрЛП(ТабДок.Область(НомерСтроки, 1).Текст);
        ТекстВида = СокрЛП(ТабДок.Область(НомерСтроки, 2).Текст);
        Если ПустаяСтрока(ТекстДаты) Тогда
            Продолжить;
        КонецЕсли;

        ДатаДня = СтроковыеФункцииКлиентСервер.СтрокаВДату(ТекстДаты);
        Запись = Набор.Добавить();
        Запись.Дата = ДатаДня;
        Запись.ВидДня = Перечисления.ВидыДней[ТекстВида];
    КонецЦикла;

    Набор.Записать(Ложь);

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

Файл должен лежать на сервере или быть передан туда через временное хранилище — серверная процедура не видит диск пользователя в клиент-серверном режиме. СтроковыеФункцииКлиентСервер.СтрокаВДату есть в БСП; в базе без неё разберите строку «ДД.ММ.ГГГГ» через Сред() и Дата(Год, Месяц, День). Значения колонки B должны совпадать с именами значений перечисления, иначе обращение ВидыДней[ТекстВида] вызовет ошибку.

Без программирования

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

Индивидуальные графики работы сотрудников в ЗУП

Не всем сотрудникам подходит общий график. Совместитель, работник с неполным днём, человек на гибком графике — для них в ЗУП 3.1 есть три пути.

СитуацияЧто использоватьКак работает
Постоянно другой режим (неполный день 4 ч)Отдельный элемент графика + кадровый переводГрафик назначается в кадровом документе и действует до следующего изменения
Меняется график у группы людей с датыДокумент «Изменение графика работы списком»Один документ на всех, с датой начала
Отклонение на конкретный месяц (сменщик, договорённость)Документ «Индивидуальный график»Вводит часы по дням на период, перекрывает основной график

Порядок для индивидуального графика:

  1. Создайте документ «Индивидуальный график» (раздел Зарплата или через поиск по документам).
  2. Укажите месяц и организацию, добавьте сотрудников.
  3. Заполните часы по дням. Для удобства можно сначала заполнить по основному графику, а потом поправить отдельные дни.
  4. Проведите документ. Табель за этот месяц возьмёт часы из индивидуального графика.

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

Как обновить календарь: праздники и переносы выходных

Постановление о переносе выходных выходит обычно осенью, на следующий год. Дальше есть два пути.

Автоматически

Данные производственного календаря поставляются вместе с релизами типовых конфигураций и через обновление классификаторов в разделе Администрирование → Интернет-поддержка и сервисы. После установки свежего релиза откройте календарь и проверьте следующий год.

Вручную

Если обновление ещё не вышло, а план графиков нужен уже сейчас:

  1. Откройте производственный календарь на нужный год.
  2. Отметьте праздники по статье 112 ТК РФ: 1–6 и 8 января (новогодние каникулы), 7 января, 23 февраля, 8 марта, 1 мая, 9 мая, 12 июня, 4 ноября.
  3. Отметьте предпраздничные дни — по статье 95 ТК РФ они короче на час.
  4. Перенесите выходные по постановлению командой переноса дня.
  5. Запишите и перезаполните графики работы на этот год.

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

Типичные ошибки с календарями и как их избежать

Диагностика: выберите симптом

Частые вопросы о календарях в 1С

Можно ли удалить поставляемый календарь «Российская Федерация»?
Нет смысла: на нём построены графики и расчёты. Для особых случаев создайте отдельный календарь, а поставляемый оставьте.
Нужен ли производственный календарь, если в базе нет зарплаты?
Да, если используете сроки в рабочих днях: оплата по договорам, задачи, напоминания. Без него эти сроки считаются неверно.
Как сделать календарь на несколько лет вперёд?
Заполните каждый год отдельно. Будущие годы без постановления о переносах будут предварительными — после выхода постановления их нужно поправить.
Чем график работы отличается от производственного календаря?
Календарь говорит, какой день по закону рабочий. График говорит, сколько часов в этот день работает конкретный сотрудник. Один календарь может лежать в основе десятка графиков.
Где взять календарь для шестидневки?
Отдельный производственный календарь не нужен. Создайте график по неделям с шестью рабочими днями на основе общего календаря — норма для шестидневки рассчитается от него.

Источники

  • Трудовой кодекс РФ, статья 112 «Нерабочие праздничные дни»
  • Трудовой кодекс РФ, статья 95 «Продолжительность работы накануне нерабочих праздничных и выходных дней»