8.х Расчет остатка дней отпуска

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем apx_egor, 20 янв 2016.

  1. TopicStarter Overlay
    apx_egor
    Offline

    apx_egor

    Регистрация:
    15 сен 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток. Уважаемые форумчане нужна помощь. Есть отчет который показывается данные по отпускам. Встал вопрос: Создать колонку с количеством не использованных дней отпуска. Поясню, допустим в год сотрудник может взять отпуск 24 дня, он отгулял сначала 12 дней, в колонке остаток должен быть 12, затем взял еще отпуск на 1 день, в колонке уже должно остаться 11 дней. Так вот, как реализовать данный расчет? Прощу помощи или нужную ссылочку какую, где такое обсуждалось? Спасибо всем откликнувшимся

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      94,7 КБ
      Просмотров:
      4
  2. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    Конфигурация какая? самописная?
  3. TopicStarter Overlay
    apx_egor
    Offline

    apx_egor

    Регистрация:
    15 сен 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Конфигурация в основе УПП, но уже много перепилена.
  4. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    ну так там есть расчет дней отпуска. в чем проблема взять то же документ расчет при увольнении из орагнизации и оттуда содрать. там же когда дату высталяешь он тебе счтает сколько дней отпуска у тебя компенсировать надо
  5. TopicStarter Overlay
    apx_egor
    Offline

    apx_egor

    Регистрация:
    15 сен 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Там же все заточено под дату увольнения, и считает все от этой даты в общем модуле. Создавать общий модуль на основе этого?
  6. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    всмысле, вам какая разница какая дата будет туда передаваться дата увольнения или дата из отчета на котрую надо получить остаток отпуска
  7. TopicStarter Overlay
    apx_egor
    Offline

    apx_egor

    Регистрация:
    15 сен 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Что-то не выходит(( как вы сказали передаю дату по которой нужно получить, пусто. Что делаю не так?

    Код:
    Процедура КнопкаСформироватьНажатие(Кнопка)
       
        Если ЗначениеЗаполнено(Сотрудник) тогда
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                           |    ОтпускаОрганизацийРаботникиОрганизации.Ссылка КАК Ссылка,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ФизЛицо КАК Сотрудник,
                           |    ОтпускаОрганизацийРаботникиОрганизации.Сотрудник.ДатаПриемаНаРаботу КАК Принят,
                           |    ОтпускаОрганизацийРаботникиОрганизации.Сотрудник.ДатаУвольнения КАК Уволен,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала КАК ДатаНачалаОтпуска,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания КАК ДатаОкончанияОтпуска,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДнейОтпуска КАК КоличествоДнейОтпуска,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия КАК ВидОтпуска,
                           |    ОтзывИзОтпускаРаботниковОрганизацииНачисления.ОплаченоДнейЧасов КАК ОтзывКоличествоДней,
                           |    ОтзывИзОтпускаРаботниковОрганизацииНачисления.ДатаНачала КАК ДатаОтзываНачало,
                           |    ОтзывИзОтпускаРаботниковОрганизацииНачисления.ДатаОкончания КАК ДатаОтзываКонец,
                           |    ОтпускаОрганизацийРаботникиОрганизации.РабочийГодС,
                           |    ОтпускаОрганизацийРаботникиОрганизации.РабочийГодПо
                           |ИЗ
                           |    Документ.ОтпускаОрганизаций.РаботникиОрганизации КАК ОтпускаОрганизацийРаботникиОрганизации
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтзывИзОтпускаРаботниковОрганизации.Начисления КАК ОтзывИзОтпускаРаботниковОрганизацииНачисления
                           |        ПО ОтпускаОрганизацийРаботникиОрганизации.Сотрудник = ОтзывИзОтпускаРаботниковОрганизацииНачисления.Ссылка.Сотрудник
                           |            И ОтпускаОрганизацийРаботникиОрганизации.ФизЛицо = ОтзывИзОтпускаРаботниковОрганизацииНачисления.Ссылка.Физлицо
                           |ГДЕ
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала >= &ДатаНачала
                           |    И ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания <= &ДатаОкончания
                           |    И НЕ ОтпускаОрганизацийРаботникиОрганизации.Ссылка.ПометкаУдаления
                           |    И ОтпускаОрганизацийРаботникиОрганизации.ФизЛицо = &ФизЛицо
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |    Ссылка";
                          
            Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
            Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);
            Запрос.УстановитьПараметр("ФизЛицо", Сотрудник);
        Иначе
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                           |    ОтпускаОрганизацийРаботникиОрганизации.Ссылка КАК Ссылка,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ФизЛицо КАК Сотрудник,
                           |    ОтпускаОрганизацийРаботникиОрганизации.Сотрудник.ДатаПриемаНаРаботу КАК Принят,
                           |    ОтпускаОрганизацийРаботникиОрганизации.Сотрудник.ДатаУвольнения КАК Уволен,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала КАК ДатаНачалаОтпуска,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания КАК ДатаОкончанияОтпуска,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДнейОтпуска КАК КоличествоДнейОтпуска,
                           |    ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия КАК ВидОтпуска,
                           |    ОтзывИзОтпускаРаботниковОрганизацииНачисления.ОплаченоДнейЧасов КАК ОтзывКоличествоДней,
                           |    ОтзывИзОтпускаРаботниковОрганизацииНачисления.ДатаНачала КАК ДатаОтзываНачало,
                           |    ОтзывИзОтпускаРаботниковОрганизацииНачисления.ДатаОкончания КАК ДатаОтзываКонец,
                           |    ОтпускаОрганизацийРаботникиОрганизации.РабочийГодС,
                           |    ОтпускаОрганизацийРаботникиОрганизации.РабочийГодПо
                           |ИЗ
                           |    Документ.ОтпускаОрганизаций.РаботникиОрганизации КАК ОтпускаОрганизацийРаботникиОрганизации
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтзывИзОтпускаРаботниковОрганизации.Начисления КАК ОтзывИзОтпускаРаботниковОрганизацииНачисления
                           |        ПО ОтпускаОрганизацийРаботникиОрганизации.Сотрудник = ОтзывИзОтпускаРаботниковОрганизацииНачисления.Ссылка.Сотрудник
                           |            И ОтпускаОрганизацийРаботникиОрганизации.ФизЛицо = ОтзывИзОтпускаРаботниковОрганизацииНачисления.Ссылка.Физлицо
                           |ГДЕ
                           |    ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала >= &ДатаНачала
                           |    И ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания <= &ДатаОкончания
                           |    И НЕ ОтпускаОрганизацийРаботникиОрганизации.Ссылка.ПометкаУдаления
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |    Ссылка";
                          
            Запрос.УстановитьПараметр("ДатаНачала", НачПериода);
            Запрос.УстановитьПараметр("ДатаОкончания", КонПериода);
        КонецЕсли;
    
        //Рез=Запрос.Выполнить().Выгрузить();
        //     ЭлементыФормы.ТЗ.СоздатьКолонки();
        //     ЭлементыФормы.ТЗ.Значение = Рез;
       
        Результат = Запрос.Выполнить().Выбрать();    
       
        ////ТЗ = Результат.Выгрузить();
       
        ТЗ.Очистить();
       
        Пока Результат.Следующий() Цикл
           
            НоваяСтрока = ТЗ.Добавить();     
            НоваяСтрока.Ссылка = Результат.Ссылка;
            НоваяСтрока.Сотрудник = Результат.Сотрудник;
            НоваяСтрока.Принят = Результат.Принят;
            НоваяСтрока.Уволен = Результат.Уволен;
            НоваяСтрока.ДатаНачалаОтпуска = Результат.ДатаНачалаОтпуска;
            НоваяСтрока.ДатаОкончанияОтпуска = Результат.ДатаОкончанияОтпуска;
            НоваяСтрока.КоличествоДнейОтпуска = Результат.КоличествоДнейОтпуска;
            НоваяСтрока.ВидОтпуска = Результат.ВидОтпуска;
            НоваяСтрока.ОтзывКоличествоДней = Результат.ОтзывКоличествоДней;
            НоваяСтрока.ДатаОтзываНачало = Результат.ДатаОтзываНачало;
            НоваяСтрока.ДатаОтзываКонец = Результат.ДатаОтзываКонец;
           
        КонецЦикла;
            
        
       
       
       
            
        //строка остаток отпуска
       
        ТаблицаПериодов = Новый ТаблицаЗначений;
        ТаблицаПериодов.Колонки.Добавить("НомерСтроки",                Новый ОписаниеТипов("Число"));
        ТаблицаПериодов.Колонки.Добавить("Сотрудник",                Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица"));
        ТаблицаПериодов.Колонки.Добавить("ВидЕжегодногоОтпуска",    Новый ОписаниеТипов("СправочникСсылка.ВидыЕжегодныхОтпусков"));
        ТаблицаПериодов.Колонки.Добавить("ДатаНачала",                Новый ОписаниеТипов("Дата"));
        ТаблицаПериодов.Колонки.Добавить("ДатаОкончания",            Новый ОписаниеТипов("Дата"));
       
        //ДлинаСуток = 86400;
       
        Строка = ТаблицаПериодов.Добавить();
        Строка.НомерСтроки            = 1;
        Строка.Сотрудник            = Результат.Сотрудник;
        Строка.ВидЕжегодногоОтпуска    = Результат.ВидОтпуска;
        Строка.ДатаНачала            = Результат.РабочийГодС; //+ ДлинаСуток;
        Строка.ДатаОкончания        = Результат.РабочийГодПо; //+ ДлинаСуток;
       
        ВыборкаПоОтпускам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаПериодов, Результат.Ссылка);
       
        Если ВыборкаПоОтпускам.Следующий() Тогда
           
           
            НоваяСтрока.КоличествоОстатокОтпуска = ВыборкаПоОтпускам.Количество * ?(ВыборкаПоОтпускам.Количество >= 0, 1, -1);
           
        КонецЕсли;   
            
            
       
         КонецПроцедуры
    --- Объединение сообщений, 21 янв 2016 ---
    Код:
    ВыборкаПоОтпускам = ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаПериодов, Результат.Ссылка);
    И кстати в этой строке в коде который взял из расчета увольнения стояла просто Ссылка, нее ругался, так не ругается, это правильно?
  8. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    У Вас какой релиз УПП - видно какой то старый.
    Я так сейчас не подскажу надо код весь смотреть.
    Просто в последних релизах там
    Результат = ОстаткиОтпусков.ОстатокОтпускаСотрудникаНаДату(Сотрудник, ДатаУвольнения, Истина, ПорядокРасчетаОтпуска);

    А с Вам надо разбираться просто
    ПроцедурыУправленияПерсоналом.ПодготовитьДанныеПоРегламентированнымОтпускам(ТаблицаПериодов, Результат.Ссылка);

    тут вот этот параметр у ваас что за ссылка? просто в стандарте это ссылка на документ Увольнение из организации
  9. TopicStarter Overlay
    apx_egor
    Offline

    apx_egor

    Регистрация:
    15 сен 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    А можно передавать ссылку на мой документ ОтпускаОрганизаций? или Модуль ПроцедурыУправленияПерсоналом не примет его?
  10. Draco
    Online

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.639
    Симпатии:
    948
    Баллы:
    204
    ну может и принимает, но там нет нужных ему реквизитов. вы отладчиком пройдитесь и посмотрите где именно он получает остати то и возьмите
  11. TopicStarter Overlay
    apx_egor
    Offline

    apx_egor

    Регистрация:
    15 сен 2015
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Спасибо буду ковырять.

Поделиться этой страницей