Здравствуйте! Такая ситуация, пишу отчет...код запроса представлен ниже.
ВЫБРАТЬ РАЗЛИЧНЫЕ
ЗаработанныеПраваНаОтпуска.ДатаНачала КАК ДатаНачала,
ЗаработанныеПраваНаОтпуска.ДатаОкончания КАК ДатаОкончания,
ПоложенныеВидыЕжегодныхОтпусков.КоличествоДнейВГод КАК КоличествоДнейВГод,
ПоложенныеВидыЕжегодныхОтпусков.ВидЕжегодногоОтпуска.Ссылка КАК ВидЕжегодногоОтпуска,
ЗаработанныеПраваНаОтпуска.Сотрудник.Ссылка КАК Сотрудник,
ВЫБОР
КОГДА ФактическиеОтпуска.РабочийПериодС <= ЗаработанныеПраваНаОтпуска.ДатаНачала
И ФактическиеОтпуска.РабочийПериодПо >= ЗаработанныеПраваНаОтпуска.ДатаОкончания
ТОГДА ФактическиеОтпуска.Количество
ИНАЧЕ 0
КОНЕЦ КАК ДнейОтпускаПотрачено,
ВЫБОР
КОГДА NULL
ТОГДА NULL
ИНАЧЕ NULL
КОНЕЦ КАК Примечание,
ФактическиеОтпуска.РабочийПериодПо КАК РабочийПериодПо,
ФактическиеОтпуска.РабочийПериодС КАК РабочийПериодС
ПОМЕСТИТЬ ВТ_ВсеОтпуска
ИЗ
РегистрСведений.ПоложенныеВидыЕжегодныхОтпусков КАК ПоложенныеВидыЕжегодныхОтпусков
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗаработанныеПраваНаОтпуска КАК ЗаработанныеПраваНаОтпуска
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска
ПО ЗаработанныеПраваНаОтпуска.Сотрудник.Ссылка = ФактическиеОтпуска.Сотрудник.Ссылка
ПО (ЗаработанныеПраваНаОтпуска.ВидЕжегодногоОтпуска.Ссылка = ПоложенныеВидыЕжегодныхОтпусков.ВидЕжегодногоОтпуска.Ссылка)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
ВТ_ВсеОтпуска.Сотрудник КАК Сотрудник,
ВТ_ВсеОтпуска.ДатаОкончания КАК ДатаОкончания,
ВТ_ВсеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
ВТ_ВсеОтпуска.КоличествоДнейВГод КАК КоличествоДнейВГод,
ВТ_ВсеОтпуска.ДнейОтпускаПотрачено КАК ДнейОтпускаПотрачено,
ВТ_ВсеОтпуска.ДатаНачала КАК ДатаНачала,
ВЫБОР
КОГДА ВТ_ВсеОтпуска.ДнейОтпускаПотрачено > ВТ_ВсеОтпуска.КоличествоДнейВГод
ТОГДА ВТ_ВсеОтпуска.ДнейОтпускаПотрачено - ВТ_ВсеОтпуска.КоличествоДнейВГод
ИНАЧЕ ВТ_ВсеОтпуска.ДнейОтпускаПотрачено
КОНЕЦ КАК ОтпускаНаСледующийГод
ПОМЕСТИТЬ ВТ_ОстатвкиОтпусковНаСлГод
ИЗ
ВТ_ВсеОтпуска КАК ВТ_ВсеОтпуска
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ОстатвкиОтпусковНаСлГод.Сотрудник КАК Сотрудник,
ВТ_ОстатвкиОтпусковНаСлГод.ДатаНачала КАК ДатаНачала,
ВТ_ОстатвкиОтпусковНаСлГод.ДатаОкончания КАК ДатаОкончания,
ВТ_ОстатвкиОтпусковНаСлГод.ДнейОтпускаПотрачено КАК ДнейОтпускаПотрачено,
ВТ_ОстатвкиОтпусковНаСлГод.КоличествоДнейВГод КАК КоличествоДнейВГод,
ВТ_ОстатвкиОтпусковНаСлГод.ОтпускаНаСледующийГод КАК ОтпускаНаСледующийГод,
ВТ_ОстатвкиОтпусковНаСлГод.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска
ИЗ
ВТ_ОстатвкиОтпусковНаСлГод КАК ВТ_ОстатвкиОтпусковНаСлГод
Показать
И вот какая ситуация как видно на первом скрине:
если года у периода за который выдается отпуск не совпадают, появляется огромная каша как на скрине 2.
Если года в документе за который предоставляется отпуск одинаковые проблем особо нет, то есть мне надо чтобы минус стал нулем и отрицательные значения упали на следующий год, надеюсь доступно объяснил, помогите, сам не могу разобраться....
7.
antonio_i
8011.10.17 13:18 Сейчас в теме+0.7 $m
Как вариант - применить функцию
ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
Создать вычисляемое поле ОтпускаОсталосьВЭтомГоду
Если нужен нарастающий итог: ВычислитьВыражение("Сумма(ОсталосьОтпуска )", , "Группировка", "Первая", "Текущая")
Если нужно только из предыдущего года остаток
ОтпускаОсталось - ВычислитьВыражение(ЕстьNull(ОтпускаОсталось,0),"", "Группировка", "Предыдущая", "Предыдущая")
Чтобы отфильтровать отрицательные значения использовать
Вsбор
Когда МоёВыражение < 0
Тогда 0
Иначе
МоёВыражение
Конец
И уже это поле выводить в последней колонке отчёта
Вот ещё небольшая подсказка с видео: Разбор ВычислитьВыражение
7.
antonio_i
8011.10.17 13:18 Сейчас в теме+0.7 $m
Как вариант - применить функцию
ВычислитьВыражение(Выражение, Группировка, ТипРасчета, Начало, Конец, Сортировка, ИерархическаяСортировка, ОбработкаОдинаковыхЗначенийПорядка)
Создать вычисляемое поле ОтпускаОсталосьВЭтомГоду
Если нужен нарастающий итог: ВычислитьВыражение("Сумма(ОсталосьОтпуска )", , "Группировка", "Первая", "Текущая")
Если нужно только из предыдущего года остаток
ОтпускаОсталось - ВычислитьВыражение(ЕстьNull(ОтпускаОсталось,0),"", "Группировка", "Предыдущая", "Предыдущая")
Чтобы отфильтровать отрицательные значения использовать
Вsбор
Когда МоёВыражение < 0
Тогда 0
Иначе
МоёВыражение
Конец
И уже это поле выводить в последней колонке отчёта
Вот ещё небольшая подсказка с видео: Разбор ВычислитьВыражение