Имя: Пароль:
1C
1С v8
ЗУП 2.5 СКД Численность сотрудников- человек уволен в последний день периода
, ,
0 Хуан
 
15.11.16
11:18
ЗУП 2.5
отчет Численность сотрудников
Если человек уволен в последний день периода, за который формируется отчет, он не попадает ни в уволенных ни в работающих на конец месяца.

Запрос в СКД доработал, чтобы он считал уволеных последним днем как работающих в последний день.
В консоли компоновки запрос выводит все как мне надо, а вот с тем же запросом (доработанным мной), всталенном в исходный отчет, показывает все по старому.

Про типичные проблемы СКД с периодами и реквизитами измерений почитал.
Вроде не мой случай.
Возможно нужно сделать какие-то настройки у полей набора данных. В этом не разобрался.

Подскажите пожалуйста какие настройки нужно сделать.
1 Хуан
 
15.11.16
11:18
Вот мой запрос

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

ОБЪЕДИНИТЬ ВСЕ

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

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОборотноСальдоваяВедомость.Организация КАК Организация,
    ОборотноСальдоваяВедомость.Подразделение КАК Подразделение,
    ОборотноСальдоваяВедомость.Период КАК Период,
    ОборотноСальдоваяВедомость.Сотрудник КАК Сотрудник,
    ОборотноСальдоваяВедомость.ФизическоеЛицо КАК ФизическоеЛицо,
    СУММА(ОборотноСальдоваяВедомость.РаботаетНаНачалоПериода) КАК РаботаетНаНачалоПериода,
    СУММА(ОборотноСальдоваяВедомость.ПриемыНаРаботу) КАК ПриемыНаРаботу,
    СУММА(ОборотноСальдоваяВедомость.КадровыеПереводы) КАК КадровыеПереводы,
    СУММА(ОборотноСальдоваяВедомость.Увольнения) КАК Увольнения,
    СУММА(ОборотноСальдоваяВедомость.РаботаетНаКонецПериода) КАК РаботаетНаКонецПериода,
    РАЗНОСТЬДАТ(ОборотноСальдоваяВедомость.ДатаПриема, ВЫБОР
            КОГДА ОборотноСальдоваяВедомость.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
                ТОГДА ДОБАВИТЬКДАТЕ(ОборотноСальдоваяВедомость.ДатаОкончания, ДЕНЬ, -1)
            ИНАЧЕ &КонецПериода
        КОНЕЦ, МЕСЯЦ) КАК СтажРаботыНаПредприятии
{ВЫБРАТЬ
    Организация.*,
    Подразделение.*,
    Сотрудник.*,
    ФизическоеЛицо.*,
    Период,
    РаботаетНаНачалоПериода,
    ПриемыНаРаботу,
    КадровыеПереводы,
    Увольнения,
    РаботаетНаКонецПериода,
    СтажРаботыНаПредприятии}
ИЗ
    (ВЫБРАТЬ
        НЕОПРЕДЕЛЕНО КАК Организация,
        РаботникиНаДатуОкончания.Подразделение КАК Подразделение,
        Работники.Сотрудник КАК Сотрудник,
        Работники.ФизическоеЛицо КАК ФизическоеЛицо,
        РаботникиНаДатуОкончания.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния,
        РаботникиПриемНаРаботу.Период КАК ДатаПриема,
        РаботникиНаДатуОкончания.Период КАК ДатаОкончания,
        Работники.РаботаетНаНачалоПериода КАК РаботаетНаНачалоПериода,
        Работники.ПриемыНаРаботу КАК ПриемыНаРаботу,
        Работники.КадровыеПереводы КАК КадровыеПереводы,
        Работники.Увольнения КАК Увольнения,
        Работники.РаботаетНаКонецПериода КАК РаботаетНаКонецПериода,
        Работники.Период КАК Период
    ИЗ
        ВТРаботники КАК Работники
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Работники.СрезПоследних(&КонецПериода, ) КАК РаботникиНаДатуОкончания
            ПО Работники.ФизическоеЛицо = РаботникиНаДатуОкончания.ФизЛицо
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Работники.СрезПоследних(&КонецПериода, ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)) КАК РаботникиПриемНаРаботу
            ПО Работники.ФизическоеЛицо = РаботникиПриемНаРаботу.ФизЛицо
    ГДЕ
        &ФормироватьПоУправленческомуУчету
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        РаботникиОрганизацийНаДатуОкончания.Организация,
        РаботникиОрганизацийНаДатуОкончания.ПодразделениеОрганизации,
        РаботникиОрганизаций.Сотрудник,
        РаботникиОрганизаций.ФизическоеЛицо,
        РаботникиОрганизацийНаДатуОкончания.ПричинаИзмененияСостояния,
        РаботникиОрганизацийПриемНаРаботу.Период,
        РаботникиОрганизацийНаДатуОкончания.Период,
        РаботникиОрганизаций.РаботаетНаНачалоПериода,
        РаботникиОрганизаций.ПриемыНаРаботу,
        РаботникиОрганизаций.КадровыеПереводы,
        РаботникиОрганизаций.Увольнения,
        РаботникиОрганизаций.РаботаетНаКонецПериода,
        РаботникиОрганизаций.Период
    ИЗ
        ВТРаботники КАК РаботникиОрганизаций
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&КонецПериода, ) КАК РаботникиОрганизацийНаДатуОкончания
            ПО РаботникиОрганизаций.Сотрудник = РаботникиОрганизацийНаДатуОкончания.Сотрудник
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&КонецПериода, ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)) КАК РаботникиОрганизацийПриемНаРаботу
            ПО РаботникиОрганизаций.Сотрудник = РаботникиОрганизацийПриемНаРаботу.Сотрудник
    ГДЕ
        НЕ &ФормироватьПоУправленческомуУчету) КАК ОборотноСальдоваяВедомость
{ГДЕ
    ОборотноСальдоваяВедомость.Организация.*,
    ОборотноСальдоваяВедомость.Подразделение.*,
    ОборотноСальдоваяВедомость.Сотрудник.*,
    ОборотноСальдоваяВедомость.ФизическоеЛицо.*,
    (РАЗНОСТЬДАТ(ОборотноСальдоваяВедомость.ДатаПриема, ВЫБОР
                КОГДА ОборотноСальдоваяВедомость.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
                    ТОГДА ДОБАВИТЬКДАТЕ(ОборотноСальдоваяВедомость.ДатаОкончания, ДЕНЬ, -1)
                ИНАЧЕ &КонецПериода
            КОНЕЦ, МЕСЯЦ)) КАК СтажРаботыНаПредприятии}

СГРУППИРОВАТЬ ПО
    ОборотноСальдоваяВедомость.Период,
    ОборотноСальдоваяВедомость.Организация,
    ОборотноСальдоваяВедомость.Подразделение,
    ОборотноСальдоваяВедомость.Сотрудник,
    ОборотноСальдоваяВедомость.ФизическоеЛицо,
    РАЗНОСТЬДАТ(ОборотноСальдоваяВедомость.ДатаПриема, ВЫБОР
            КОГДА ОборотноСальдоваяВедомость.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
                ТОГДА ДОБАВИТЬКДАТЕ(ОборотноСальдоваяВедомость.ДатаОкончания, ДЕНЬ, -1)
            ИНАЧЕ &КонецПериода
        КОНЕЦ, МЕСЯЦ)
2 Хуан
 
15.11.16
11:19
В первый запрос было добавлено:

ОБЪЕДИНИТЬ ВСЕ
    
ВЫБРАТЬ
    РаботникиОрганизаций.Сотрудник,
    РаботникиОрганизаций.Сотрудник.Физлицо,
    0,
    0,
    0,
    0,
    1,
    НАЧАЛОПЕРИОДА(&КонецПериода, МЕСЯЦ)
ИЗ
    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
ГДЕ
    НЕ &ФормироватьПоУправленческомуУчету
    И РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
    И РаботникиОрганизаций.Период = ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, 1)
3 catena
 
15.11.16
11:42
Посмотреть запрос, который рожает СКД?
4 Хуан
 
15.11.16
11:52
(3)
В консоли СКД посмотрел
Кардинальных различий не нашел.
Все то же.
Результат выдает - тот, который мне нужен.
5 catena
 
15.11.16
12:00
(4)Не в консоли, а на выходе.
Как-то так:
МакетКомпоновки.НаборыДанных.[ИмяНабора].Запрос
6 catena
 
15.11.16
12:00
(4)А, в смысле, в консоли с результирующим запросом? Тогда сохраненные настройки в отчете.
7 Хуан
 
15.11.16
12:06
(6)
Да в консоли с результирующим запросом.
Не понял что нужно смотреть в сохраненных настройках
8 AceVi
 
15.11.16
12:09
(0) Посмотри в регистре РаботникОрганизаций какая там дата стоит. она наверняка +1 день от даты в документе.
9 Хуан
 
15.11.16
12:11
(8) Так и есть.
Я это учел в (2)
10 Хуан
 
15.11.16
12:13
Консоль компоновок данных из инструментов разработчика и консоль запросов по доработанному запросу выдают то, что мне нужно.

Это СКД что-то мудрит...
11 AceVi
 
15.11.16
12:20
(9) ИЗ
    РегистрСведений.Работники.СрезПоследних(ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, 1), )  вот что идет в первом запросе и так во всех объединениях.

ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&КонецПериода, ) КАК РаботникиОрганизацийНаДатуОкончания
            ПО РаботникиОрганизаций.Сотрудник = РаботникиОрганизацийНаДатуОкончания.Сотрудник

А вот что во втором запросе - внутрее соединение отрабатывает как фильтр - скорее всего где то тут твоя запись отсеивается.
12 catena
 
15.11.16
12:22
(7)В отчете сохраненных настроек нет?
13 Хуан
 
15.11.16
12:30
(11)
Но запрос-то выдает то, что нужно...
14 Хуан
 
15.11.16
12:32
(12)
Настройки есть, но в них настроен нужный период и детализация отчета. Так что все должно быть ОК
15 RomaH
 
naïve
15.11.16
12:32
СКД КонецПериода, автонастройки?
16 RomaH
 
naïve
15.11.16
12:32
ДОБАВИТЬКДАТЕ(&КонецПериода {АТутАвтопараметрСКД}
17 Хуан
 
15.11.16
12:36
(16) В результирующем запросе встает вместо ДОБАВИТЬКДАТЕ(&КонецПериода... &П
Но это я взял из типового отчета.
Попробую допилить таким образом
18 AceVi
 
15.11.16
12:39
(13) А точно единсвенный запрос в скд? может там несколько запросов\получения данных?
19 Хуан
 
15.11.16
12:41
(18) В наборах данных отчета только этот запрос
20 RomaH
 
naïve
15.11.16
12:47
Автонастройки?
21 RomaH
 
naïve
15.11.16
12:49
ну судя по отсутсвию {} - то да
стоят автонастройки
для виртуальных таблиц имена параметров совпадают с Начало и КонецПериода

СКД сама ставит КонецПериода в параметры вирт таблицы
а так как там не прописано ДобавитьКДате - то...
22 Хуан
 
15.11.16
12:49
(20) Нет.
С автонастройками не работает
23 RomaH
 
naïve
15.11.16
12:49
отсюда вывод - автонастройки - ЗЛО
24 RomaH
 
naïve
15.11.16
12:49
(22) чаво?
25 RomaH
 
naïve
15.11.16
12:52
хотя - ошибаюсь
26 AceVi
 
15.11.16
12:55
(19) Сделай отчет внешним что бы на него не действовали никакие сохраненные настройки и попробуй запустить внешний отчет.
27 Хуан
 
15.11.16
13:23
(26)
Попробую завтра.
Уже пора по домам...
28 Хуан
 
17.11.16
06:16
UP
По прежнему нужна помощь :-(
29 Хуан
 
17.11.16
06:17
(26) Как внешний тоже показывает не то
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший