helpf.pro
Регистрация

v8: Количество дней отпуска за период (по календарным дням)

AlexAP
07.09.2012 14:26Прочитано: 3104
Необходимо вывести количество дней отпуска за период (по календарным дням). То есть в отчет должен попасть отпуск сотрудника в выбранном периоде. Как вместо -РАЗНОСТЬДАТ( ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания, ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала, ДЕНЬ) + 1 КАК КоличествоДней, которая не учитывает выходные и праздничные дни вывести количество дней отпуска с учетом производственного календаря.
Если использовать ЛЕВОЕ СОЕДИНЕНИЕ регистра сведений РегламентированныйПроизводственныйКалендарь, то как задать период отбора.

ВЫБРАТЬ
ОтпускаОрганизацийРаботникиОрганизации.Сотрудник,
ВЫБОР
КОГДА ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала <= &НачалоПериода
ТОГДА &НачалоПериода
ИНАЧЕ ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала
КОНЕЦ КАК ДатаНачала,
ВЫБОР
КОГДА ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания >= &КонецПериода
ТОГДА &КонецПериода
ИНАЧЕ ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания
КОНЕЦ КАК ДатаОкончания,
ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия КАК ВидОтпуска,
-РАЗНОСТЬДАТ(ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания, ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала, ДЕНЬ) + 1 КАК КоличествоДней,
РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК Подразделение,
РаботникиОрганизацийСрезПоследних.Должность КАК Должность
ИЗ
Документ.ОтпускаОрганизаций.РаботникиОрганизации КАК ОтпускаОрганизацийРаботникиОрганизации
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, ) КАК РаботникиОрганизацийСрезПоследних
ПО ОтпускаОрганизацийРаботникиОрганизации.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник
ГДЕ
ОтпускаОрганизацийРаботникиОрганизации.Ссылка.Проведен = &Проведен
И ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала МЕЖДУ &НачалоПериода И &КонецПериода
Yandex
Возможно, вас также заинтересует
Реклама на портале
beldik
13.09.2012 18:25Ответ № 1
Код 1C v 8.х
 
Я бы сделал так:
ВЫБРАТЬ
ОтпускаОрганизацийРаботникиОрганизации.Сотрудник,
ВЫБОР
КОГДА ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала <= &НачалоПериода
ТОГДА &НачалоПериода
ИНАЧЕ ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала
КОНЕЦ КАК ДатаНачала,
ВЫБОР
КОГДА ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания >= &КонецПериода
ТОГДА &КонецПериода
ИНАЧЕ ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания
КОНЕЦ КАК ДатаОкончания,
ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия КАК ВидОтпуска,
-РАЗНОСТЬДАТ(ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания, ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала, ДЕНЬ) + 1 КАК КоличествоДней,
РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК Подразделение,
РаботникиОрганизацийСрезПоследних.Должность КАК Должность
ПОМЕСТИТЬ В ВТ_Отпуска
ИЗ
Документ.ОтпускаОрганизаций.РаботникиОрганизации КАК ОтпускаОрганизацийРаботникиОрганизации
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&НачалоПериода, ) КАК РаботникиОрганизацийСрезПоследних
ПО ОтпускаОрганизацийРаботникиОрганизации.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник
ГДЕ
ОтпускаОрганизацийРаботникиОрганизации.Ссылка.Проведен = &Проведен
И ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала МЕЖДУ &НачалоПериода И &КонецПериода
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
МИНИМУМ(ВТ_Отпуска.ДатаНачала) КАК ДатаНачала,
МАКСИМУМ(ВТ_Отпуска.ДатаОкончания) КАК ДатаОкончания
ПОМЕСТИТЬ ВТПериоды
ИЗ
ВТ_Отпуска КАК ВТ_Отпуска

;

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

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.