Имя: Пароль:
1C
1С v8
Запрос по фактическим отпускам в ЗУП при 2-х и более корректировках отпуска.
0 RetZet
 
17.01.20
12:24
Разбираюсь с фактическими отпусками. У сотрудника они не формируются, т.е. отсутствуют в отчете "Фактические отпуска".
Там есть такой запрос, он при инициализации отчета собирается, и выглядит так:

[CODE]
Запрос = Новый Запрос;
    
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ФактическиеОтпускаСотрудниковОтбор.Сотрудник КАК Сотрудник,
    |    ФактическиеОтпускаСотрудниковОтбор.НачалоПериода КАК НачалоПериода,
    |    ФактическиеОтпускаСотрудниковОтбор.ОкончаниеПериода КАК ОкончаниеПериода
    |ПОМЕСТИТЬ ВТОтборСУчетомОстатков
    |ИЗ
    |    ВТФактическиеОтпускаОтбор КАК ФактическиеОтпускаСотрудниковОтбор
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Сотрудник
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ФактическиеОтпуска.Сотрудник КАК Сотрудник,
    |    ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    |    ФактическиеОтпуска.ДатаНачала КАК ДатаНачала,
    |    ФактическиеОтпуска.ДатаОкончания КАК ДатаОкончания,
    |    ФактическиеОтпуска.Количество КАК Количество,
    |    ФактическиеОтпуска.Компенсация КАК Компенсация,
    |    ВЫБОР
    |        КОГДА ФактическиеОтпуска.ВидЕжегодногоОтпуска.СпособРасчетаОтпуска = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОтпуска.ВРабочихДнях)
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ КАК ВРабочихДнях,
    |    ФактическиеОтпуска.РабочийПериодС КАК РабочийПериодС,
    |    ФактическиеОтпуска.РабочийПериодПо КАК РабочийПериодПо,
    |    ФактическиеОтпуска.Основание КАК Основание,
    |    ФактическиеОтпуска.Регистратор КАК Регистратор
    |ПОМЕСТИТЬ ВТФактическиеОтпуска
    |ИЗ
    |    РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОтборСУчетомОстатков КАК ФактическиеОтпускаОтбор
    |        ПО ФактическиеОтпуска.Сотрудник = ФактическиеОтпускаОтбор.Сотрудник
    |            И ФактическиеОтпуска.ДатаОкончания >= ФактическиеОтпускаОтбор.НачалоПериода
    |            И (ФактическиеОтпуска.ДатаНачала <= ФактическиеОтпускаОтбор.ОкончаниеПериода
    |                ИЛИ ФактическиеОтпускаОтбор.ОкончаниеПериода = ДАТАВРЕМЯ(1, 1, 1))
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Сотрудник
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ФактическиеОтпуска.Сотрудник КАК Сотрудник,
    |    ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    |    ФактическиеОтпуска.ДатаНачала КАК ДатаНачала,
    |    ФактическиеОтпуска.ДатаОкончания КАК ДатаОкончания,
    |    ФактическиеОтпуска.Количество КАК Количество,
    |    ФактическиеОтпуска.Компенсация КАК Компенсация,
    |    ФактическиеОтпуска.ВРабочихДнях КАК ВРабочихДнях,
    |    ФактическиеОтпуска.РабочийПериодС КАК РабочийПериодС,
    |    ФактическиеОтпуска.РабочийПериодПо КАК РабочийПериодПо,
    |    ФактическиеОтпуска.Основание КАК Основание,
    |    ФактическиеОтпуска.Регистратор КАК Регистратор,
    |    ВЫБОР
    |        КОГДА НЕ ФактическиеОтпускаСторно.Сотрудник ЕСТЬ NULL
    |                И ФактическиеОтпуска.Количество > 0
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ КАК СторнируемаяЗапись,
    |    ВЫБОР
    |        КОГДА НЕ ФактическиеОтпускаСторно.Сотрудник ЕСТЬ NULL
    |                И ФактическиеОтпуска.Количество < 0
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ КАК СторноЗапись
    |ПОМЕСТИТЬ ВТФактическиеОтпускаСоСторноПризнаками
    |ИЗ
    |    ВТФактическиеОтпуска КАК ФактическиеОтпуска
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТФактическиеОтпуска КАК ФактическиеОтпускаСторно
    |        ПО ФактическиеОтпуска.Сотрудник = ФактическиеОтпускаСторно.Сотрудник
    |            И ФактическиеОтпуска.ВидЕжегодногоОтпуска = ФактическиеОтпускаСторно.ВидЕжегодногоОтпуска
    |            И ФактическиеОтпуска.ДатаНачала = ФактическиеОтпускаСторно.ДатаНачала
    |            И ФактическиеОтпуска.ДатаОкончания = ФактическиеОтпускаСторно.ДатаОкончания
    |            И (ФактическиеОтпуска.Количество = -ФактическиеОтпускаСторно.Количество)
    |            И ФактическиеОтпуска.Регистратор <> ФактическиеОтпускаСторно.Регистратор
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Сотрудник
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    ФактическиеОтпуска.Сотрудник КАК Сотрудник,
    |    ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска,
    |    ФактическиеОтпуска.ДатаНачала КАК ДатаНачала,
    |    ФактическиеОтпуска.ДатаОкончания КАК ДатаОкончания,
    |    ФактическиеОтпуска.Количество КАК КоличествоДней,
    |    ФактическиеОтпуска.Компенсация КАК ЭтоКомпенсация,
    |    ФактическиеОтпуска.Регистратор КАК Регистратор,
    |    ФактическиеОтпуска.ВРабочихДнях КАК ВРабочихДнях,
    |    ФактическиеОтпуска.РабочийПериодС КАК РабочийПериодС,
    |    ФактическиеОтпуска.РабочийПериодПо КАК РабочийПериодПо,
    |    ФактическиеОтпуска.Основание КАК Основание
    |ПОМЕСТИТЬ ВТФактическиеОтпускаСотрудников
    |{ВЫБРАТЬ
    |    Сотрудник.*,
    |    ВидЕжегодногоОтпуска.*,
    |    ДатаНачала,
    |    ДатаОкончания,
    |    КоличествоДней,
    |    ЭтоКомпенсация,
    |    Регистратор,
    |    ВРабочихДнях,
    |    РабочийПериодС,
    |    РабочийПериодПо,
    |    Основание}
    |ИЗ
    |    ВТФактическиеОтпускаСоСторноПризнаками КАК ФактическиеОтпуска
    |ГДЕ
    |    НЕ ФактическиеОтпуска.СторнируемаяЗапись
    |    И НЕ ФактическиеОтпуска.СторноЗапись
    |{ГДЕ
    |    ФактическиеОтпуска.Сотрудник.*,
    |    ФактическиеОтпуска.ВидЕжегодногоОтпуска.*,
    |    ФактическиеОтпуска.ДатаОкончания,
    |    ФактическиеОтпуска.Количество,
    |    ФактическиеОтпуска.Компенсация,
    |    ФактическиеОтпуска.Регистратор,
    |    ФактическиеОтпуска.РабочийПериодС,
    |    ФактическиеОтпуска.РабочийПериодПо,
    |    ФактическиеОтпуска.Основание}
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    Сотрудник";
[/CODE]

Смысл таков запроса, как я понимаю, чтобы удалить сторно записи отпусков и взять правильные.
ВТФактическиеОтпускаСоСторноПризнаками определяются сторнируемая это запись или она сама сторнирует другую
И в результатирующей таблице

[CODE]
|ГДЕ
|    НЕ ФактическиеОтпуска.СторнируемаяЗапись
|    И НЕ ФактическиеОтпуска.СторноЗапись
[/CODE]

Они отсекаются.
Все хорошо, пока на отпуск есть один документ исправление. А их у некоторых, по 2 штуки.
Получилось так, что сперва исправили, и человек отгулял, потом в следующем году дали годовую премию, и все отпуска пересчитали, т.к. это требует законодательство. Средний заработок изменяется у человека, и надо пересчитывать.
И вот при появлении 2 и более документа исправления, сторно записи по такому запросу, получаются все сторно!
И в результате отчет "Фактические отпуска" выходит пустым!

Кто с таким сталкивался? Как решали?
1 dka80
 
17.01.20
13:04
Моделируй пример и шли на линию поддержки 1С
2 RetZet
 
17.01.20
13:15
(1) Это долгий процесс...
3 dka80
 
17.01.20
14:46
Если будет очень долго, то пиши на [email protected] - отдел контроля качества
4 Масянька
 
17.01.20
14:54
(3) Они могут повлиять на разработчиков?
5 Gucci76
 
17.01.20
17:12
(3) буду знать кому жаловаться на техподдержку ))))
А то месяц мне не отвечали на письмо с ошибкой в расчете НДФЛ
6 dka80
 
20.01.20
09:43
(4) отдел контроля качества в ИТ компаниях - сильная штука. В данном случае, они могут повлиять не на разработчиков, а на скорость и адекватность ответа службы поддержки.