8.х ЗУП Фактический отпуск

Тема в разделе ""1С:Зарплата и управление персоналом ЗУП"", создана пользователем Stradivarius, 8 фев 2012.

  1. TopicStarter Overlay
    Stradivarius
    Offline

    Stradivarius Опытный в 1С

    Регистрация:
    9 янв 2010
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток.

    Коллеги, возникла следующая проблема. В форме "остатки отпусков" есть процедура формирования справки по отпуску. При формировании отчета по некоторым сотрудникам не выводится информация по отпускам, которые сотрудник уже отгулял и есть все оформленные документы в базе. Вопрос, что может быть не так сделано в программе? Почему программа не видит фактически отгуленные отпуска по части сотрудников? Где копать?

    Конфигурация 2.5.45.3
  2. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Там есть фишка: если рабочий период, за который дается отпуск, не закончился до момента выхода сотрудника в отпуск, то программа его просто не видит. Она вообще криво работает, если отпуск дается за будущие периоды. Исправлять ситуацию, похоже, не собираются. Ошибка идет (говорю по УПП, но названия должны быть сходные и в ЗУПе) в общем модуле ПроцедурыУправленияПерионалом, процедура ПодготовитьТаблицуАктуальныхОстатковОрганизаций. Вызывается оная процедура из общего модуля ФормированиеПечатныхФормЗК, процедура ПечатьСправкиПоРегламентированнымОтпускамСотрудника.
  3. TopicStarter Overlay
    Stradivarius
    Offline

    Stradivarius Опытный в 1С

    Регистрация:
    9 янв 2010
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Значит бесполезно искать на сайте информацию как исправить эту ошибку в списке ошибке? Если не трудно, можно поделиться кодом, что нужно поправить в этом модуле?
  4. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    У меня сейчас эта процедура вот так выглядит (см. ниже)

    Исправила в выборке из док-регистратора = отпуск ДатаОкончанияРабочегоГода на ДатаНачалаРабочегоГода.

    Попробуйте просто дату заменить. Но, честно сказать, на 100% не помню будет ли этого достаточно, потому что я по фактическим отпускам правила несколько разных вещей - у наших свои нестандартные требования были.



    Код:
    Процедура ПодготовитьТаблицуАктуальныхОстатковОрганизаций(Запрос, ИспользоватьОстатки, Регистратор)
    
    Если ИспользоватьОстатки Тогда
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиОтпусковОстатки.Ссылка,
    | ОстаткиПериод.Сотрудник,
    | ОстаткиПериод.НомерСтроки,
    | ОстаткиПериод.ДатаОстатков,
    | ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска,
    | ОстаткиОтпусковОстатки.Количество,
    | ОстаткиОтпусковОстатки.ДатаНачалаРабочегоГода,
    | ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода
    |ПОМЕСТИТЬ ВТАктуальныеОстатки
    |ИЗ
    | (ВЫБРАТЬ
    | ОстаткиОтпусковОстатки.Сотрудник КАК Сотрудник,
    | ОстаткиОтпусковОстатки.НомерСтроки КАК НомерСтроки,
    | ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    | МАКСИМУМ(ОстаткиОтпусковОстатки.ДатаОстатков) КАК ДатаОстатков
    | ИЗ
    | (ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ОстаткиОтпусковОстатки.Ссылка КАК Ссылка,
    | ОстаткиОтпусковОстатки.Ссылка.Сотрудник КАК Сотрудник,
    | ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    | ТаблицаПериодов.НомерСтроки КАК НомерСтроки,
    | ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности КАК ДатаОстатков
    | ИЗ
    | Справочник.ОстаткиОтпусковОрганизаций.Остатки КАК ОстаткиОтпусковОстатки
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодов КАК ТаблицаПериодов";
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.УвольнениеИзОрганизаций") тогда
    Запрос.Текст = Запрос.Текст +
    "
    | ПО ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода <= ТаблицаПериодов.ДатаОкончания";
    Иначе
    Запрос.Текст = Запрос.Текст +
    "
    | ПО ОстаткиОтпусковОстатки.ДатаНачалаРабочегоГода <= ТаблицаПериодов.ДатаОкончания";
    КонецЕсли;
    Запрос.Текст = Запрос.Текст +
    "
    | И ОстаткиОтпусковОстатки.Ссылка.Сотрудник = ТаблицаПериодов.Сотрудник
    | И ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска = ТаблицаПериодов.ВидЕжегодногоОтпуска) КАК ОстаткиОтпусковОстатки
    | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ОстаткиОтпусковОстатки.Ссылка КАК Ссылка,
    | ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    | ТаблицаПериодов.НомерСтроки КАК НомерСтроки
    | ИЗ
    | Справочник.ОстаткиОтпусковОрганизаций.Остатки КАК ОстаткиОтпусковОстатки
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТаблицаПериодов КАК ТаблицаПериодов";
    Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.УвольнениеИзОрганизаций") тогда
    Запрос.Текст = Запрос.Текст +
    "
    | ПО ОстаткиОтпусковОстатки.ДатаОкончанияРабочегоГода > ТаблицаПериодов.ДатаОкончания";
    Иначе
    Запрос.Текст = Запрос.Текст +
    "
    | ПО ОстаткиОтпусковОстатки.ДатаНачалаРабочегоГода > ТаблицаПериодов.ДатаОкончания";
    КонецЕсли;
    Запрос.Текст = Запрос.Текст +
    "
    | И ОстаткиОтпусковОстатки.Ссылка.Сотрудник = ТаблицаПериодов.Сотрудник
    | И ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска = ТаблицаПериодов.ВидЕжегодногоОтпуска) КАК ОстаткиНеВключать
    | ПО ОстаткиОтпусковОстатки.НомерСтроки = ОстаткиНеВключать.НомерСтроки
    | И ОстаткиОтпусковОстатки.Ссылка = ОстаткиНеВключать.Ссылка
    | И ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска = ОстаткиНеВключать.ВидЕжегодногоОтпуска
    | ГДЕ
    | ОстаткиНеВключать.Ссылка ЕСТЬ NULL
    |
    | СГРУППИРОВАТЬ ПО
    | ОстаткиОтпусковОстатки.Сотрудник,
    | ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска,
    | ОстаткиОтпусковОстатки.НомерСтроки) КАК ОстаткиПериод
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусковОрганизаций.Остатки КАК ОстаткиОтпусковОстатки
    | ПО ОстаткиПериод.ДатаОстатков = ОстаткиОтпусковОстатки.Ссылка.ДатаАктуальности
    | И ОстаткиПериод.Сотрудник = ОстаткиОтпусковОстатки.Ссылка.Сотрудник
    | И ОстаткиПериод.ВидЕжегодногоОтпуска = ОстаткиОтпусковОстатки.ВидЕжегодногоОтпуска
    |
    |ИНДЕКСИРОВАТЬ ПО
    | ОстаткиПериод.Сотрудник,
    | ОстаткиПериод.НомерСтроки";
    Запрос.Выполнить();
    
    Иначе
    ТаблицаОстатков = Новый ТаблицаЗначений;
    ТаблицаОстатков.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ОстаткиОтпусковОрганизаций"));
    ТаблицаОстатков.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.СотрудникиОрганизаций"));
    ТаблицаОстатков.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"));
    ТаблицаОстатков.Колонки.Добавить("ДатаОстатков", Новый ОписаниеТипов("Дата"));
    ТаблицаОстатков.Колонки.Добавить("ВидЕжегодногоОтпуска", Новый ОписаниеТипов("СправочникСсылка.ВидыЕжегодныхОтпусков"));
    ТаблицаОстатков.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
    ТаблицаОстатков.Колонки.Добавить("ДатаНачалаРабочегоГода", Новый ОписаниеТипов("Дата"));
    ТаблицаОстатков.Колонки.Добавить("ДатаОкончанияРабочегоГода", Новый ОписаниеТипов("Дата"));
    
    Запрос.УстановитьПараметр("Таблица", ТаблицаОстатков);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиОтпусков.*
    |ПОМЕСТИТЬ ВТАктуальныеОстатки
    |ИЗ
    | &Таблица КАК ОстаткиОтпусков
    |
    |ИНДЕКСИРОВАТЬ ПО
    | Сотрудник,
    | НомерСтроки";
    Запрос.Выполнить();
    
    КонецЕсли;
    
    КонецПроцедуры
  5. svet
    Offline

    svet Профессионал в 1С Команда форума

    Регистрация:
    9 ноя 2007
    Сообщения:
    1.971
    Симпатии:
    59
    Баллы:
    54
    Только проверьте потом как в Отпусках организаций и при увольнении рабочие периоды подбираться будут, чтобы не нарваться на неприятности с другими сотрудниками.

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