Объект Календарь в системе 1С:Предприятие предназначен для вычисления временных интервалов на основании произвольных временных графиков. Этот объект может использоваться, например, для учета графика работы предприятия, графика работы внешних организаций, графика учета рабочего времени тех или иных работников предприятия и пр.
Календарь представляет собой объект, который устанавливает для каждой календарной даты некоторое числовое значение, которое может интерпретироваться при работе программы тем или иным образом. Например, в календаре, представляющем собой график работы организации или предприятия, каждому рабочему дню может соответствовать единица, а каждому выходному — ноль. В календаре учета рабочего времени сотрудников предприятия, каждой дате календаря может соответствовать число — продолжительность рабочего дня в часах и т. д.
В глобальном контексте программы 1С:Предприятие есть атрибут "Календари". Этот объект в качестве своих атрибутов имеет значения объектов конкретных видов календарей, заданных в конфигурации. Кроме того, этот объект имеет метод ПолучитьАтрибут, который позволяет получить доступ к объекту календаря конкретного вида по его имени. Т.е. допустимы следующие синтаксические конструкции:
Календари.Служащие.Дней(ТекДата, ТекДата + 5);
Календари.ПолучитьАтрибут("Служащие").Дней(ТекДата, ТекДата + 5);
Праздники в системе 1С:Предприятие представляет собой объект похожий на календарь, но он заполняется выборочно (не все даты подряд) и в нем могут вводиться и удаляться строки для определенных дат. Данный объект используются как набор исключений при заполнении календарей (см. метод календаря УчитыватьПраздники).
Контекст работы с календарями
Доступ к атрибутам и методам календарей осуществляется, например, через объект, созданный системной функцией СоздатьОбъект с ключевым словом
"
Календарь".
Англоязычный синоним ключевого слова "Календарь" — "
Calendar".
Пример:
// Рассчитать продолжительность месяца в часах по календарю "Служащие"
Календ = СоздатьОбъект("Календарь.Служащие");
Час = Календ.Часов('01.01.96', '31.01.96');
// Рассчитать продолжительность текущего расчетного
// периода журнала расчетов Зарплата по календарю Служащие
Календ = СоздатьОбъект("Календарь.Служащие");
ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата");
Час = Календ.Часов(ЖР.НачалоТекущегоПериода(), ЖР.КонецТекущегоПериода());
Кроме того, объекты типа «календарь» являются сохраняемыми, т. е. реквизиты справочников, документов, журналов расчета могут иметь тип «календарь» и хранить ссылки на объекты этого типа.
Пример:
Процедура ПровестиРасчет()
// ВнСовместитель — реквизит журнала расчетов
// Категории — периодический реквизит справочника ВнутренниеСовместители
// Календарь — реквизит справочника Категории
Календ = ВнСовместитель.Категория.Получить(ДатаОкончания).Календарь;
// размер оклада
Оклад = ВнСовместитель.Оклад.Получить(ДатаОкончания) *
ВнСовместитель.Ставка.Получить(ДатаОкончания);
Дней = Календ.Дней(ДатаНачала, ДатаОкончания);
ВсегоДней = Календ.Дней(НачалоПериодаПоДате(ДатаНачала),
КонецПериодаПоДате(ДатаНачала));
Если ВсегоДней > 0 Тогда
Если Документ.Вид() = "НачалоМесяца" Тогда
Результат = Окр(Оклад * Дней / ВсегоДней);
Иначе
Результат = -Окр(Оклад*Дней/ВсегоДней);
КонецЕсли;
Иначе
Результат = 0;
Сообщить("Неправильно указан календарь (" + Объект.Наименование + ")");
Сообщить("Возможно, не задана категория работника");
КонецЕсли;
КонецПроцедуры