Как посчитать разницу между двумя датами? Код уникален и сработает везде.
Код 1C v 8.3 Функция ПолучитьКоличествоДней()
Счетчик = 1;
НачалоПериода = Объект.НачалоПериода;
Пока НачалоПериода < Объект.КонецПериода Цикл
Счетчик = Счетчик + 1;
НачалоПериода = НачалоПериода + 86400;
КонецЦикла;
Возврат Счетчик
КонецФункции
Категория:
Работа с Датами (Временем) Получение количества календарных дней по производственному календарю Код 1C v 8.х Функция КоличествоДнейПоКалендарнымДням(ДатаНачала, ДатаОкончания, ВключатьПраздники = Ложь)
Если НЕ ВключатьПраздники Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СУММА(РегламентированныйПроизводственныйКалендарь.КалендарныеДни) КАК КоличествоДней
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаНачала
| И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаОкончания");
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
КоличествоДней = Выборка.КоличествоДней;
Иначе
ОбщегоНазначенияЗК.СообщитьОбОшибке("Проверьте заполнение производственного календаря!");
КоличествоДней = Неопределено;
КонецЕсли;
Иначе
КоличествоДней = (НачалоДня(ДатаОкончания) - НачалоДня(ДатаНачала)) / 86400 + 1;
КонецЕсли;
Возврат КоличествоДней;
КонецФункции
Категория:
1С Зарплата и Управление Персоналом 2.5 Получить количество рабочих дней сотрудника В данной статье описаны функции которые вы можете использовать в ЗУП для получения количества рабочих дней по графику работы сотрудника или по производственному календарю
Код 1C v 8.х // Функции получения количества рабочих дней по графику работы сотрудника ил по производственному календарю
Функция КоличествоРабочихДнейПоГрафикуРаботы(ДатаН, ДатаК, ГрафикРаботы)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы,
| ГрафикиРаботыПоВидамВремени.ВидУчетаВремени,
| СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение) КАК ОсновноеЗначение,
| СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение) КАК ДополнительноеЗначение,
| СУММА(ГрафикиРаботыПоВидамВремени.ОсновноеЗначениеНорма) КАК ОсновноеЗначениеНорма,
| СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначениеНорма) КАК ДополнительноеЗначениеНорма
|ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
|ГДЕ
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы = &ГрафикРаботы
| И ГрафикиРаботыПоВидамВремени.Дата МЕЖДУ &ДатаН И &ДатаК
| И ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = &ВидУчетаВремени
|
|СГРУППИРОВАТЬ ПО
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы,
| ГрафикиРаботыПоВидамВремени.ВидУчетаВремени";
Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы);
Запрос.УстановитьПараметр("ДатаК", ДатаК);
Запрос.УстановитьПараметр("ДатаН", ДатаН);
Запрос.УстановитьПараметр("ВидУчетаВремени", Перечисления.ВидыУчетаВремени.ПоДням);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ОсновноеЗначение = Выборка.ОсновноеЗначение;
Иначе
ОбщегоНазначенияЗК.СообщитьОбОшибке("Проверьте заполнение графика!");
ОсновноеЗначение = 0;
КонецЕсли;
Возврат ОсновноеЗначение;
КонецФункции
Функция КоличествоРабочихДнейПоПроизвКаленд(ДатаН, ДатаК)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(РегламентированныйПроизводственныйКалендарь.КалендарныеДни) КАК КоличествоДней,
| СУММА(РегламентированныйПроизводственныйКалендарь.Пятидневка) КАК Пятидневка,
| СУММА(РегламентированныйПроизводственныйКалендарь.Шестидневка) КАК Шестидневка
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &ДатаН
| И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &ДатаК";
Запрос.УстановитьПараметр("ДатаК", ДатаК);
Запрос.УстановитьПараметр("ДатаН", ДатаН);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ОсновноеЗначение = Выборка.Пятидневка;
Иначе
ОбщегоНазначенияЗК.СообщитьОбОшибке("Проверьте заполнение графика!");
ОсновноеЗначение = 0;
КонецЕсли;
Возврат ОсновноеЗначение;
КонецФункции
Категория:
1С Зарплата и Управление Персоналом 2.5 Как узнать количество дней в месяце? Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДЕНЬ(КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ)) КАК ЧислоДней";
Запрос.УстановитьПараметр("Дата", Дата);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
Код 1C v 8.х КоличествоДней = Сред(КонецМесяца(ТекущаяДата()), 1, 2);
Категория:
Работа с Датами (Временем) Как вычислить количество дней между датами Код 1C v 8.х Запрос=Новый Запрос("ВЫБРАТЬ
| РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,МЕСЯЦ) КАК Месяцев,
| РАЗНОСТЬДАТ(&НачалоПериода,&КонецПериода,ДЕНЬ) КАК Дней");
// или
КоличествоДней = (ДатаКонец - ДатаНачала) / 60 / 60 / 24;
Код 1C v 7.x КоличествоДней = ДатаКонец-ДатаНачала
Категория:
Работа с Датами (Временем)