Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 авг 2022, 23:38

отчет по отпускам 1С

Автор makkut, 16 янв 2018, 09:31

0 Пользователей и 1 гость просматривают эту тему.

makkut

добрый день!
поступила задачка вывести количество фактическое отгульных дней отпуска (итоговое по каждому сотруднику) работающих за период. Стандартный отчет "отчет по отпускам" не настраивается как надо. Он считает по расчетным документам и у сотрудников имеющих корректировочные документы отпуска задваивает строки и в итоге даёт не верный результат. Я решил создать свой на основе кадровых документов:

ВЫБРАТЬ
    СотрудникиОрганизаций.Наименование КАК Наименование,

    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния,

    ВЫБОР
        КОГДА СостояниеРаботниковОрганизацийСрезПоследних.Состояние ЕСТЬ NULL
                ИЛИ СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения <= &ДатаКонца
            ТОГДА ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Работает)
        ИНАЧЕ СостояниеРаботниковОрганизацийСрезПоследних.Состояние
    КОНЕЦ КАК Состояние,
    СостояниеРаботниковОрганизацийСрезПоследних.СостояниеЗавершения,
    СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения,
    РаботникиОрганизацийСрезПоследних.Сотрудник
ПОМЕСТИТЬ РаботникиОрганизацийСрезПоследних
ИЗ
    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
        ПО СотрудникиОрганизаций.Физлицо = ФизическиеЛица.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаКонца, ) КАК РаботникиОрганизацийСрезПоследних
        ПО СотрудникиОрганизаций.Ссылка = РаботникиОрганизацийСрезПоследних.Сотрудник
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&ДатаКонца, ) КАК СостояниеРаботниковОрганизацийСрезПоследних
        ПО СотрудникиОрганизаций.Ссылка = СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник
ГДЕ
    СотрудникиОрганизаций.Организация = &организация
    И РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> &увольнение
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    СостояниеРаботниковОрганизаций.Период,
    СостояниеРаботниковОрганизаций.ПериодЗавершения,

    СостояниеРаботниковОрганизаций.Сотрудник КАК Сотрудник,

    СостояниеРаботниковОрганизаций.Состояние КАК СостояниеСотрудника,
    СУММА(РАЗНОСТЬДАТ(СостояниеРаботниковОрганизаций.Период, СостояниеРаботниковОрганизаций.ПериодЗавершения, ДЕНЬ)) КАК ИтогоДней,
    РаботникиОрганизацийСрезПоследних.Сотрудник.ТекущееПодразделениеОрганизации КАК ПодразделениеОрганизации
//#ВЫБРАТЬ#


ИЗ
    РаботникиОрганизацийСрезПоследних КАК РаботникиОрганизацийСрезПоследних
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций
        ПО РаботникиОрганизацийСрезПоследних.Сотрудник = СостояниеРаботниковОрганизаций.Сотрудник
//#СОЕДИНЕНИЯ#


ГДЕ
    СостояниеРаботниковОрганизаций.Период МЕЖДУ &ДатаНачала И &ДатаКонца

СГРУППИРОВАТЬ ПО

    СостояниеРаботниковОрганизаций.Сотрудник,
    СостояниеРаботниковОрганизаций.Период,
    СостояниеРаботниковОрганизаций.ПериодЗавершения,
    СостояниеРаботниковОрганизаций.Состояние,
    РаботникиОрганизацийСрезПоследних.Сотрудник.ТекущееПодразделениеОрганизации
//#СГРУППИРОВАТЬ#


ИТОГИ
    СУММА(ИтогоДней)
//#ИТОГИ#


ПО
    ПодразделениеОрганизации,
    Сотрудник
//#ИТОГИ_ПО#


Всё вроде бы ничего, но мой отчет не учитывает праздничные дни производственного календаря (т.к считаются чисто разность дат начала и  окончания периода в регистре состояния).
Подскажите как бы мне учитывать праздничные даты производственного календаря ?

ВЫБРАТЬ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ ВТДатыПраздников
ИЗ

    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь

ГДЕ

    РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
    И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонца

Norfolk


pavl_vs

makkut, столько слов и столько кода, а где же конфигурация?

ЦитироватьСтандартный отчет "отчет по отпускам" не настраивается как надо. Он считает по расчетным документам и у сотрудников имеющих корректировочные документы отпуска задваивает строки и в итоге даёт не верный результат.
Предположу, что просто не сумели настроить.

ЦитироватьЯ решил создать свой на основе кадровых документов:
И что, в чем проблема?

Norfolk

Цитата: pavl_vs от 16 янв 2018, 13:22
makkut, столько слов и столько кода, а где же конфигурация?

ЦитироватьСтандартный отчет "отчет по отпускам" не настраивается как надо. Он считает по расчетным документам и у сотрудников имеющих корректировочные документы отпуска задваивает строки и в итоге даёт не верный результат.
Предположу, что просто не сумели настроить.

ЦитироватьЯ решил создать свой на основе кадровых документов:
И что, в чем проблема?
я задался таким же вопросом, проглядев код. Но вопрос скрыт внутри :) сразу тоже не заметил.
ПО
    ПодразделениеОрганизации,
    Сотрудник
//#ИТОГИ_ПО#


Всё вроде бы ничего, но мой отчет не учитывает праздничные дни производственного календаря (т.к считаются чисто разность дат начала и  окончания периода в регистре состояния).
Подскажите как бы мне учитывать праздничные даты производственного календаря ?

ВЫБРАТЬ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
ПОМЕСТИТЬ ВТДатыПраздников
ИЗ

    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь

ГДЕ

    РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
    И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНачала И &ДатаКонца

pavl_vs

Norfolk, Вы правы.
Автору топика пожелал бы оформлять программные тексты в виде кода, как это сделано у Вас, тогда бы и не было лишних вопросов и недоумений.
Добавлено: 16 янв 2018, 16:54


Norfolk, вместо последнего фрагмента лучше использовать сразу суммирование в запросе:
ЦитироватьВЫБРАТЬ
   СУММА(ВЫБОР
         КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
            ТОГДА 1
         ИНАЧЕ 0
      КОНЕЦ) КАК ЧислоРабочихДней,
   СУММА(ВЫБОР
         КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
            ТОГДА 1
         ИНАЧЕ 0
      КОНЕЦ) КАК ЧислоПраздничныхДней
ПОМЕСТИТЬ ВТДанныеПроизводственногоКалендаря
ИЗ
   РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон

Здесь ЧислоРабочихДней для общности.
Добавлено: 16 янв 2018, 16:58


makkut, поторопился, а должен был обратился к Вам:
ВЫБРАТЬ
СУММА(ВЫБОР
КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК ЧислоРабочихДней,
СУММА(ВЫБОР
КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК ЧислоПраздничныхДней
ПОМЕСТИТЬ ВТДанныеПроизводственногоКалендаря
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск