Имя: Пароль:
1C
1С v8
1c 8.3 ЗУП получить список актуальных сотрудников в запрос
,
0 adamst
 
19.11.18
10:53
Добрый день подскажите пожалуйста как правильно получить список сотрудников функцией
КадровыйУчет.КадровыеДанныеСотрудников(Истина,МассивСотрудников,"Организация,Должность",,); нужно получить действующих сотрудников через менеджер временных таблиц (наверное)...

вроде рабочий код, но такой кривой получился, я думаю есть нормальное решение, прошу подсказать.

мой вариант весь текст внешней обработки:


&НаСервере
Функция СформироватьСписокНаСервере()
    //формируем список сотрудников всех
    МассивСотрудников = Новый Массив;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Сотрудники.Ссылка КАК Сотрудник
        |ИЗ
        |    Справочник.Сотрудники КАК Сотрудники";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ном=0;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
     МассивСотрудников.Добавить(ВыборкаДетальныеЗаписи.Сотрудник);
    КонецЦикла;
    
    //ключевой момент, используем функцию формирования списка сведений сотрудников
    ТЗСведения = КадровыйУчет.КадровыеДанныеСотрудников(Истина,МассивСотрудников,"Организация,Должность",,);
     //ном=1;
     //Для Каждого Стр Из ТЗСведения Цикл
     //    ном=ном+1;
     //    Сообщить("№"+ном+" / "+Стр.Организация + " / " + Стр.Должность + " / "+Стр.Сотрудник );
     //КонецЦикла;    
    
    //формируем табличный документ и передаем данные в запрос для последующей его обработки
    ТабДок = Новый ТабличныйДокумент;
    Макет = Объект.РеквизитМакет; //на форме есть реквизит с типом данных неопределенный, с именем "РеквизитМакет" в него записываем ссылку на печатный макет обработки
    
    Запрос = Новый Запрос;
    //приходится поместить ТЗ сначала во временную таблицу, а потом только  с ней работать!!!
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ВнешняяТЗ.Сотрудник КАК Сотрудник,
        |    ВнешняяТЗ.Должность КАК Должность,
        |    ВнешняяТЗ.Организация.Наименование КАК ОрганизацияНаименование
        |ПОМЕСТИТЬ втзСотрудники  
        |ИЗ
        |    &ВнешняяТЗ КАК ВнешняяТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    втзСотрудники.Сотрудник КАК Сотрудник,
        |    втзСотрудники.Должность КАК Должность,
        |    втзСотрудники.ОрганизацияНаименование КАК Организация
        |ИЗ
        |    втзСотрудники КАК втзСотрудники";
    
    Запрос.УстановитьПараметр("ВнешняяТЗ",ТЗСведения); //передаю ТЗ в запрос и формирую временную таблицу с которой дальше и работаю
    РезультатЗапроса = Запрос.Выполнить();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    
    ТабДок.Очистить();
    ТабДок.Вывести(ОбластьЗаголовок);
    ТабДок.Вывести(ОбластьШапкаТаблицы);
    ТабДок.НачатьАвтогруппировкуСтрок();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
        ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень());
    КонецЦикла;
    
    ТабДок.ЗакончитьАвтогруппировкуСтрок();
    ТабДок.Вывести(ОбластьПодвалТаблицы);
    ТабДок.Вывести(ОбластьПодвал);
    Возврат ТабДок;
    
КонецФункции
&НаКлиенте
Процедура СформироватьСписок(Команда)
    ТабДок = СформироватьСписокНаСервере();
    ТабДок.Показать();
КонецПроцедуры
1 adamst
 
19.11.18
10:57
нужно еще пожалуй уточнить, что использую модуль КадровыйУчет и функцию КадровыеДанныеСотрудников т.к. разработчики постоянно чтото меняют в регистрах и я натыкался на утверждение, что нужно использовать именно эти функции т.к. иначе придется постоянно переписывать внешние обработки после каждого релиза если обращаться в запросе напрямую к данным регистрам.
2 Один С
 
19.11.18
10:59
Это чо теперь только так в 3.1 живых сотрудников получить?
А просто тупо выбрать сотрудников где дата увольнения = пусто не прокатит?
Ну или через РС.кадроваяИстория как в 2.5 не?
3 adamst
 
19.11.18
10:59
и еще одно уточнение: получить функцией модуля "КадровыйУчет" и эти данные потом использовать в запросе!
4 adamst
 
19.11.18
11:02
(2) я так понял что нет, к регистрам вообще не вариант,

а дата увольнения пусто, чтото не подумал, сейчас попробую...
5 adamst
 
19.11.18
11:12
(2) нету такого реквизита "дата увольнения" в справочнике сотурдники, а в регистры лезть нельзя по описанной причине выше... (меняются часто разработчиками)
6 supersonic
 
19.11.18
11:16
(5) ДатаЗавершенияРаботы
7 иубиповец
 
19.11.18
11:17
(2) Можно, но при следующем обновлении разработчикам 1С может возжа попасть и они переделают регистры, а программном интерфейсе они когда то обещали совместимыми со старыми конфигами делать.
И действующих сотрудников можно получить функцией кадровыйучет.СотрудникиОрганизации как не странно:)
а потом уже кадровыеданные получать
8 иубиповец
 
19.11.18
11:18
(5) Есть вАрхиве - если пользуются, можно и на этот реквизит опереться.
9 supersonic
 
19.11.18
11:28
Можно. После вдумчивого чтения форума и инфостарта и изучения конфы, я делал так (по памяти):

Запрос = Новый Запрос;
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст =
    
    "ВЫБРАТЬ
    |    Сотрудники.Ссылка КАК Ссылка,
    |       &Период КАК Период
    |ПОМЕСТИТЬ ВТ_Сотрудники
    |ИЗ
    |    Справочник.Сотрудники КАК Сотрудники"    

    
    Запрос.УстановитьПараметр("Период", НаДату ); //на дату которую нужно.
    
    КоллекцияПолей = "Сотрудник, ДатаУвольнения, Подразделение"; //попробуйте или ДатаУвольнения или ДатаЗавершенияРаботы - точно не помню.
    ОписательТаблицыОтборов = КадровыйУчет.ОписаниеВременнойТаблицыОтборовСотрудников("ВТ_Сотрудники", "Сотрудник","Период");
    ЗапросКадровыеДанные = КадровыйУчет.ЗапросВТКадровыеДанныеСотрудников(Истина, ОписательТаблицыОтборов, КоллекцияПолей);
    ЗарплатаКадрыОбщиеНаборыДанных.ОбъединитьЗапросы(Запрос, ЗапросКадровыеДанные);
    Запрос.Выполнить();

Запрос = Новый запрос;
Запрос.МенеджерВТ = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Сотрудник,
| Сотрудники.Период
| ИЗ ВТ_Сотрудники КАК Сотрудники
|ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК |КадровыеДанныеСотрудников
|ПО Сотрудники.Сотрудник = |КадровыеДанныеСотрудников.Сотрудник
|И Сотрудники.Период = КадровыеДанныеСотрудников.Сотрудник
10 Один С
 
19.11.18
11:34
Вы меня пугаете. Неужели в 3.1 все так через жопу?
Есть же РС.ТекущиеКадровыеДанныеСотрудников.
Запрос из 6 строк показывает всех живых.
Что я делаю не так?
Зачем вот это вот всё?
11 adamst
 
19.11.18
11:35
(8) нет это все не то, это не по феншую...

(7) это да, просто потом как с этим списком работать в запросе? я этот момент хотел прояснить
12 Amra
 
19.11.18
11:36
(10) Перечитай (1), там по делу написано
13 Amra
 
19.11.18
11:36
И да, от ТекущиеКАдровыеДанные сотрудников уже отказываются в последних релизах
14 adamst
 
19.11.18
11:37
(10) не надо столько вопросов, покажи как?
вот мой запрос примерный:

ВЫБРАТЬ РАЗРЕШЕННЫЕ
    СостоянияСотрудников.Период КАК Период,
    СостоянияСотрудников.ДействуетДо КАК ДействуетДо,
    СостоянияСотрудников.Сотрудник КАК Сотрудник,
    СостоянияСотрудников.Состояние КАК Состояние,
    ВЫБОР
        КОГДА СостоянияСотрудников.Период > &НачалоПериода
            ТОГДА СостоянияСотрудников.Период
        ИНАЧЕ &НачалоПериода
    КОНЕЦ КАК НачалоПодсчета,
    ВЫБОР
        КОГДА СостоянияСотрудников.ДействуетДо < &ОкончаниеПериода
                И СостоянияСотрудников.ДействуетДо <> ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА СостоянияСотрудников.ДействуетДо
        ИНАЧЕ &ОкончаниеПериода
    КОНЕЦ КАК ОкончаниеПодсчета,
    СостоянияСотрудников.ОкончаниеПредположительно КАК ОкончаниеПредположительно,
    СостоянияСотрудников.Сотрудник.ФизическоеЛицо.ДатаРождения КАК СотрудникФизическоеЛицоДатаРождения,
    ГОД(&ЗаданнаяДата) - ГОД(СостоянияСотрудников.Сотрудник.ФизическоеЛицо.ДатаРождения) - ВЫБОР
        КОГДА МЕСЯЦ(&ЗаданнаяДата) < МЕСЯЦ(СостоянияСотрудников.Сотрудник.ФизическоеЛицо.ДатаРождения)
            ТОГДА 1
        ИНАЧЕ ВЫБОР
                КОГДА МЕСЯЦ(&ЗаданнаяДата) = МЕСЯЦ(СостоянияСотрудников.Сотрудник.ФизическоеЛицо.ДатаРождения)
                        И ДЕНЬ(&ЗаданнаяДата) < ДЕНЬ(СостоянияСотрудников.Сотрудник.ФизическоеЛицо.ДатаРождения)
                    ТОГДА 1
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК ВозрастВГодах,
    ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК ТекущаяДолжность,
    ТекущиеКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник1
ИЗ
    РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
        ПО СостоянияСотрудников.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник
ГДЕ
    СостоянияСотрудников.Период < &ОкончаниеПериода
    И (СостоянияСотрудников.ДействуетДо >= &НачалоПериода
            ИЛИ СостоянияСотрудников.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))
    И СостоянияСотрудников.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияСотрудника.Увольнение)
15 Amra
 
19.11.18
11:38
(14) Не используй ТекущиеКадровые. Совсем не используй
16 adamst
 
19.11.18
11:39
(10) проблемы получить список действующих сотрудников в принципе нету, в модулях есть функции разработчиков, вопрос то больше в том что получив эту Таблицу Значений как правильно с ней работать в запросе, желательно понять как правильно ее передать в СхемуКомпоновкиДанных чтобы потом удобным способом выводить и обрабатывать результат!
17 иубиповец
 
19.11.18
11:42
(10) Ну если получить тз проблемы нет, то в чем проблема. запросом к ней же можно обратиться и работать как с врем таблицей
18 adamst
 
19.11.18
11:42
(14) я это уже понял, так просто показал, что этот вопрос в действительности прорабатывал, с запросами, но понимаю что нужно действовать так как говорят разработчики, т.е. использовать функции модуля КадровыйУчет, но вопрос все тот же потом как результат работы этой функции передать в СКД?
19 adamst
 
19.11.18
11:45
(17) у меня не получилось, посмотри в сообщении код (1) там через жопу все получается,
1. Получаю ТЗ функцией КадровыйУчет.КадровыеДанныеСотрудников()
2. Передаю через параметр в запрос
3. В запросе формирую временную таблицу
4. и уже потом работаю с ней другим запросом...
может описал не очень хорошо, но код глянешь там не много поймешь.

Я подвожу может кто обработкой, примером, поделится как в СКД передать список действующих сотрудников (т.е. результат работы функции КадровыеДанныеСотрудников передать в СКД) , а то вопросов уж больно много!
20 adamst
 
19.11.18
13:59
вообщем если комуто нужен будет получить список сотрудников в системе компановке данных, для гибкой настройки пользователем в дальнейшем, рекомендую видео: https://www.youtube.com/watch?v=vYbbh1axSzg только что наткнулся. Там не про зуп, но идея ясна из первых 15 минут видео.

1. создал обработку внешнюю
2. создал компоновку данных и добавил источник данных "объект"
3. описал структуру получаемых данных (поля Сотрудник, Организация и тп) ее можно подсмотреть в отладчике то что возвращает функция КадровыйУчет.КадровыеДанныеСотрудников()
4. и в модуле объект (по кнопке действия, внешней обработки "открыть модуль объекта") добавил код
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
    
    //формируем список сотрудников всех
    МассивСотрудников = Новый Массив;
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Сотрудники.Ссылка КАК Сотрудник
        |ИЗ
        |    Справочник.Сотрудники КАК Сотрудники";
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    ном=0;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
МассивСотрудников.Добавить(ВыборкаДетальныеЗаписи.Сотрудник);
    КонецЦикла;
    //ключевой момент, используем функцию формирования списка сведений сотрудников
    втзСотрудники = КадровыйУчет.КадровыеДанныеСотрудников(Истина,МассивСотрудников,"Организация,Должность",,);

    ВнешниеНаборы = Новый Структура("втзСотрудники",втзСотрудники);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
    ПроцессорВывода =  Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры


надеюсь данная цепочка рассуждений поможет, если кто наткнется на такую же задачу.
21 mmmarat
 
19.11.18
14:12
(0)
ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолучения.Организация    = Организация;
//ПараметрыПолучения.Подразделение    = Подразделение;
ПараметрыПолучения.НачалоПериода    = ДатаНачала;
ПараметрыПолучения.ОкончаниеПериода    = ДатаОкончания;
//ПараметрыПолучения.СписокФизическихЛиц    = ФизическиеЛица;
//ПараметрыПолучения.КадровыеДанные    =  "ГрафикРаботы";    
КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц,Истина,ПараметрыПолучения, "ВТСотрудникиОрганизации");

Это просто получить ВТ с сотрудниками организации, Но если Вам нужно использовать далее СКД в ЗУП 3 есть функционал, заменяющий представления на запросы в СКД. Смотрите примеры в любом кадровом отчете.
22 adamst
 
19.11.18
14:38
(21) спасибо, полезно, еще бы конкретнее какой отчет бы рассмотреть из стандартной конфигурации.

может есть методические указания по программировании в ЗУП, обучающие видео по этой тематике?
23 mmmarat
 
19.11.18
14:59
0) Отчет КадроваяИсторияСотрудников
В модуле ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(

Методические материалы не искал. Нужно статью на инфостарте оформить :)
24 adamst
 
19.11.18
15:02
(23) вот это правильно, статью в студию!

стати поглядел, в модуле КдаровыйУчет нету такой функции
ПараметрыПолученияОрганизацийПоСпискуФизическихЛиц но есть ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц
25 KnightAlone
 
19.11.18
17:23
(15) плюсую, переписывал тут недавно код. Человек слабо знаком с ЗУПом видимо, брал данные оттуда. я его могу понять - РС ТекущиеКАдровыеДанныеСотрудников есть, данные в нем есть, все логично, завязался на регистр. но вот тех кто ЗУП 3.1 пишет понять сложнее, в этот регистр сейчас пишутся только поля дата приема, физ. лицо, сотрудник, головная организация, остальные поля тупо не заполняются (должность и подразделение, например)

поэтому (10) да, в ЗУП 3.1 все через нее самую, как раньше нельзя
26 KnightAlone
 
19.11.18
17:27
(10) судя по данным в регистре, примерно в январе-феврале был релиз, после которого перестали заполнятся Организация, подразделение, датаувольнения, текущая должность, текущий вид занятости. Скорее всего в том обновлении, в котором вид занятости вынесли в отдельный РС. а так в целом шикарный регистр чо, пользуйтесь наздоровье :)
27 KnightAlone
 
19.11.18
17:28
наврал, дату увольнения пока еще пишут
28 timurhv
 
19.11.18
17:41
(0) Я так получаю, стянуто с формы списка сотрудников:

Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Сотрудники.Ссылка КАК Сотрудник,
    |    Сотрудники.Код КАК ТабельныйНомер,
    |    Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
    |    Представление(Сотрудники.ФизическоеЛицо) КАК ФизическоеЛицоПредставление,
    |    Сотрудники.ГоловнаяОрганизация КАК Организация,
    |    ДанныеДляПодбора.Подразделение КАК Подразделение,
    |    Представление(ДанныеДляПодбора.Подразделение) КАК ПодразделениеПредставление,
    |    Представление(ДанныеДляПодбора.Подразделение.Родитель) КАК ВышестоящееПодразделение,
    |    ДанныеДляПодбора.Должность КАК Должность,
    |    СостоянияСотрудников.Состояние КАК Состояние
    |ИЗ
    |    РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбора
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
    |            ПО (ДанныеДляПодбора.Сотрудник = Сотрудники.Ссылка)
    |                И (ДанныеДляПодбора.Наименование = Сотрудники.Наименование)
    |                И (ДанныеДляПодбора.ИдентификаторЗаписи В
    |                    (ВЫБРАТЬ ПЕРВЫЕ 1
    |                        ДанныеДляПодбораСотрудниковОтбор.ИдентификаторЗаписи
    |                    ИЗ
    |                        РегистрСведений.ДанныеДляПодбораСотрудников КАК ДанныеДляПодбораСотрудниковОтбор
    |                    ГДЕ
    |                        ДанныеДляПодбораСотрудниковОтбор.Сотрудник = ДанныеДляПодбора.Сотрудник
    |                        И ДанныеДляПодбораСотрудниковОтбор.Наименование = ДанныеДляПодбора.Наименование
    |                        И ДанныеДляПодбораСотрудниковОтбор.Начало <= &ДатаОкончания
    |                        И (ДанныеДляПодбораСотрудниковОтбор.Окончание = ДАТАВРЕМЯ(1, 1, 1)
    |                            ИЛИ ДанныеДляПодбораСотрудниковОтбор.Окончание >= &ПустаяДата)
    |                    УПОРЯДОЧИТЬ ПО
    |                        ДанныеДляПодбораСотрудниковОтбор.ПоДоговоруГПХ,
    |                        ДанныеДляПодбораСотрудниковОтбор.Начало УБЫВ,
    |                        ДанныеДляПодбораСотрудниковОтбор.Организация,
    |                        ДанныеДляПодбораСотрудниковОтбор.Филиал,
    |                        ДанныеДляПодбораСотрудниковОтбор.Подразделение))
    |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
    |            ПО (ДанныеДляПодбора.Сотрудник = СостоянияСотрудников.Сотрудник)
    |                И (СостоянияСотрудников.Период <= &ДатаОкончания)
    |                И (СостоянияСотрудников.ДействуетДо >= &ДатаНачалаСведений
    |                    ИЛИ СостоянияСотрудников.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))
    |ГДЕ
    |    ДанныеДляПодбора.ЭтоГоловнойСотрудник
    |    И НЕ СостоянияСотрудников.Состояние ЕСТЬ NULL
    |    И СостоянияСотрудников.Состояние <> Значение(Перечисление.СостоянияСотрудника.Увольнение)
    |    И ДанныеДляПодбора.Организация = &Организация
    |    И &УсловиеОтборПодразделение
    |    
    |УПОРЯДОЧИТЬ ПО
    |    ДанныеДляПодбора.Наименование";
    
    Запрос.УстановитьПараметр("ДатаНачалаСведений", НачалоДня(Объект.ДатаСведений));
    Запрос.УстановитьПараметр("ДатаОкончания",      КонецДня(Объект.ДатаСведений));
    Запрос.УстановитьПараметр("ПустаяДата",         Дата('00010101'));
    Запрос.УстановитьПараметр("Организация",        Объект.Организация);
    
    Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
        Запрос.УстановитьПараметр("Подразеделение", Объект.Подразделение);
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтборПодразделение", "ДанныеДляПодбора.Подразделение = &Подразделение");
    Иначе
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеОтборПодразделение", "Истина");
    КонецЕсли;
    
    Результат = Запрос.Выполнить().Выгрузить();
29 Alexandr_U1982
 
19.11.18
19:04
(28) Садись. Двойка.
30 Borteg
 
19.11.18
21:01
(0) кадровыйучет.СотрудникиОрганизации(
31 Borteg
 
19.11.18
21:01
все остальное ппц просто
32 DrZombi
 
гуру
20.11.18
10:55
(0) Работающие сотрудники:


    ТекстЗапроса =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ИтоговыеСотрудники.Ссылка КАК Сотрудник,
    |    &ДатаОтчета КАК Период
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    |    Справочник.Сотрудники КАК ИтоговыеСотрудники
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    |    ТаблицаОтборов.Период КАК Период,
    |    ТаблицаОтборов.Сотрудник КАК Сотрудник,
    |    СправочникСотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
    |    ВЫРАЗИТЬ(ТаблицаОтборов.Сотрудник КАК Справочник.Сотрудники).ГоловнойСотрудник КАК ГоловнойСотрудникТаблицыРазличных,
    |    СправочникСотрудники.Код КАК ТабельныйНомер,
    |    СправочникСотрудники.ГоловнаяОрганизация КАК ГоловнаяОрганизация
    |ПОМЕСТИТЬ ВТОтборовРазличныхСотрудников
    |ИЗ
    |    ВТСотрудники КАК ТаблицаОтборов
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК СправочникСотрудники
    |        ПО ТаблицаОтборов.Сотрудник = СправочникСотрудники.Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ИзмеренияДаты.Сотрудник КАК Сотрудник,
    |    ИзмеренияДаты.Период КАК Период,
    |    СостоянияСотрудников.Период КАК ПериодЗаписи,
    |    СостоянияСотрудников.Состояние КАК Состояние,
    |    СостоянияСотрудников.ВидВремени КАК ВидВремени,
    |    СостоянияСотрудников.ДействуетДо КАК ДействуетДо,
    |    СостоянияСотрудников.ОкончаниеПредположительно КАК ОкончаниеПредположительно
    |ПОМЕСТИТЬ ВТСведенияОСостоянииСотрудников
    |ИЗ
    |    ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияСотрудников КАК СостоянияСотрудников
    |        ПО ИзмеренияДаты.Сотрудник = СостоянияСотрудников.Сотрудник
    |            И (СостоянияСотрудников.Период <= ИзмеренияДаты.Период)
    |            И (СостоянияСотрудников.ДействуетДо >= ИзмеренияДаты.Период
    |                ИЛИ СостоянияСотрудников.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ИзмеренияДаты.Период КАК Период,
    |    РегистрСведений.ДействуетДо КАК ПериодВозвратногоСобытия,
    |    ВЫБОР
    |        КОГДА РегистрСведений.ПериодЗаписи = РегистрСведений.ДатаНачала
    |            ТОГДА ЛОЖЬ
    |        ИНАЧЕ ИСТИНА
    |    КОНЕЦ КАК ЭтоВозвратноеСобытие,
    |    РегистрСведений.РегистраторСобытия КАК Регистратор,
    |    ИзмеренияДаты.Сотрудник КАК Сотрудник,
    |    РегистрСведений.ДатаОкончания КАК ДатаОкончания,
    |    РегистрСведений.ДатаНачала КАК ДатаНачала,
    |    РегистрСведений.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
    |    РегистрСведений.ФизическоеЛицо КАК ФизическоеЛицо,
    |    РегистрСведений.ПериодЗаписи КАК ПериодЗаписи,
    |    РегистрСведений.Год КАК Год,
    |    РегистрСведений.ПериодПредыдущейЗаписи КАК ПериодПредыдущейЗаписи,
    |    РегистрСведений.ВидЗанятости КАК ВидЗанятости,
    |    РегистрСведений.РегистраторЗаписи КАК РегистраторЗаписи,
    |    РегистрСведений.РегистраторСобытия КАК РегистраторСобытия,
    |    РегистрСведений.ПустойИнтервал КАК ПустойИнтервал
    |ПОМЕСТИТЬ ВТСведенияОВидахЗанятостиСотрудников
    |{ВЫБРАТЬ
    |    Период,
    |    ПериодВозвратногоСобытия,
    |    Регистратор,
    |    Сотрудник,
    |    ДатаОкончания,
    |    ДатаНачала,
    |    ГоловнаяОрганизация,
    |    ФизическоеЛицо,
    |    ПериодЗаписи,
    |    Год,
    |    ПериодПредыдущейЗаписи,
    |    ВидЗанятости,
    |    РегистраторЗаписи,
    |    РегистраторСобытия,
    |    ПустойИнтервал}
    |ИЗ
    |    ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты
    |        {ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудниковИнтервальный КАК РегистрСведений
    |        ПО (РегистрСведений.ДатаНачала <= КОНЕЦПЕРИОДА(ВЫБОР
    |                    КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
    |                        ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
    |                    ИНАЧЕ ИзмеренияДаты.Период
    |                КОНЕЦ, ДЕНЬ))
    |            И (РегистрСведений.ДатаОкончания >= КОНЕЦПЕРИОДА(ВЫБОР
    |                    КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
    |                        ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
    |                    ИНАЧЕ ИзмеренияДаты.Период
    |                КОНЕЦ, ДЕНЬ))
    |            И (РегистрСведений.Сотрудник = ИзмеренияДаты.Сотрудник)}
    |ГДЕ
    |    ИСТИНА
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ИзмеренияДаты.Период КАК Период,
    |    РегистрСведений.ДействуетДо КАК ПериодВозвратногоСобытия,
    |    ВЫБОР
    |        КОГДА РегистрСведений.ПериодЗаписи = РегистрСведений.ДатаНачала
    |            ТОГДА ЛОЖЬ
    |        ИНАЧЕ ИСТИНА
    |    КОНЕЦ КАК ЭтоВозвратноеСобытие,
    |    РегистрСведений.РегистраторСобытия КАК Регистратор,
    |    ИзмеренияДаты.Сотрудник КАК Сотрудник,
    |    РегистрСведений.ДатаОкончания КАК ДатаОкончания,
    |    РегистрСведений.ДатаНачала КАК ДатаНачала,
    |    РегистрСведений.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
    |    ИзмеренияДаты.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо,
    |    РегистрСведений.ПериодЗаписи КАК ПериодЗаписи,
    |    РегистрСведений.Год КАК Год,
    |    РегистрСведений.ПериодПредыдущейЗаписи КАК ПериодПредыдущейЗаписи,
    |    РегистрСведений.ВидСобытия КАК ВидСобытия,
    |    РегистрСведений.Организация КАК Организация,
    |    РегистрСведений.Должность КАК Должность,
    |    РегистрСведений.ГоловнойСотрудник КАК ГоловнойСотрудник,
    |    РегистрСведений.ЭтоГоловнойСотрудник КАК ЭтоГоловнойСотрудник,
    |    РегистрСведений.Подразделение КАК Подразделение,
    |    РегистрСведений.ДолжностьПоШтатномуРасписанию КАК ДолжностьПоШтатномуРасписанию,
    |    РегистрСведений.КоличествоСтавок КАК КоличествоСтавок,
    |    РегистрСведений.ВидДоговора КАК ВидДоговора,
    |    РегистрСведений.РегистраторЗаписи КАК РегистраторЗаписи,
    |    РегистрСведений.РегистраторСобытия КАК РегистраторСобытия,
    |    РегистрСведений.ПустойИнтервал КАК ПустойИнтервал
    |ПОМЕСТИТЬ ВТСведенияКадровойИсторииСотрудников
    |{ВЫБРАТЬ
    |    Период,
    |    ПериодВозвратногоСобытия,
    |    Регистратор,
    |    Сотрудник,
    |    ДатаОкончания,
    |    ДатаНачала,
    |    ГоловнаяОрганизация,
    |    ФизическоеЛицо,
    |    ПериодЗаписи,
    |    Год,
    |    ПериодПредыдущейЗаписи,
    |    ВидСобытия,
    |    Организация,
    |    Должность,
    |    ГоловнойСотрудник,
    |    ЭтоГоловнойСотрудник,
    |    Подразделение,
    |    ДолжностьПоШтатномуРасписанию,
    |    КоличествоСтавок,
    |    ВидДоговора,
    |    РегистраторЗаписи,
    |    РегистраторСобытия,
    |    ПустойИнтервал}
    |ИЗ
    |    ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты
    |        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК РегистрСведений
    |        ПО (РегистрСведений.ДатаНачала <= КОНЕЦПЕРИОДА(ВЫБОР
    |                    КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
    |                        ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
    |                    ИНАЧЕ ИзмеренияДаты.Период
    |                КОНЕЦ, ДЕНЬ))
    |            И (РегистрСведений.ДатаОкончания >= КОНЕЦПЕРИОДА(ВЫБОР
    |                    КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1)
    |                        ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59)
    |                    ИНАЧЕ ИзмеренияДаты.Период
    |                КОНЕЦ, ДЕНЬ))
    |            И (РегистрСведений.Сотрудник = ИзмеренияДаты.Сотрудник)
    |            И (РегистрСведений.ФизическоеЛицо = ИзмеренияДаты.Сотрудник.ФизическоеЛицо)}
    |ГДЕ
    |    ИСТИНА
    |{ГДЕ
    |    РегистрСведений.Сотрудник.*,
    |    РегистрСведений.ФизическоеЛицо.*}
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    ТаблицаОтборов.Период КАК Период,
    |    ТаблицаОтборов.Сотрудник КАК Сотрудник,
    |    ТаблицаОтборов.ФизическоеЛицо КАК ФизическоеЛицо,
    |    КадроваяИсторияСотрудников.Организация КАК Организация,
    |    КадроваяИсторияСотрудников.Подразделение КАК Подразделение,
    |    КадроваяИсторияСотрудников.Должность КАК Должность,
    |    СведенияОВидахЗанятостиСотрудников.ВидЗанятости КАК ВидЗанятости,
    |    ТаблицаОтборов.ТабельныйНомер КАК ТабельныйНомер,
    |    ТаблицаОтборов.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
    |    ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаПриема,
    |    ЕСТЬNULL(ТекущиеКадровыеДанныеГоловныхСотрудников.ДатаУвольнения, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаУвольнения,
    |    СведенияОСостоянииСотрудников.Состояние КАК Состояние,
    |    СведенияОСостоянииСотрудников.ДействуетДо КАК ДействуетДо,
    |    КадроваяИсторияСотрудников.КоличествоСтавок КАК КоличествоСтавок,
    |    КадроваяИсторияСотрудников.ДатаНачала КАК ДатаНачала,
    |    КадроваяИсторияСотрудников.ДатаОкончания КАК ДатаОкончания,
    |    КадроваяИсторияСотрудников.ВидСобытия КАК ВидСобытия
    |ПОМЕСТИТЬ ПредставленияКадровыеДанныеСотрудников
    |ИЗ
    |    ВТОтборовРазличныхСотрудников КАК ТаблицаОтборов
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
    |        ПО ТаблицаОтборов.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник
    |        {ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеГоловныхСотрудников
    |        ПО ТаблицаОтборов.ГоловнойСотрудникТаблицыРазличных = ТекущиеКадровыеДанныеГоловныхСотрудников.Сотрудник}
    |        {ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияКадровойИсторииСотрудников КАК КадроваяИсторияСотрудников
    |        ПО ТаблицаОтборов.Сотрудник = КадроваяИсторияСотрудников.Сотрудник
    |            И ТаблицаОтборов.Период = КадроваяИсторияСотрудников.Период}
    |        {ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияОВидахЗанятостиСотрудников КАК СведенияОВидахЗанятостиСотрудников
    |        ПО ТаблицаОтборов.Сотрудник = СведенияОВидахЗанятостиСотрудников.Сотрудник
    |            И ТаблицаОтборов.Период = СведенияОВидахЗанятостиСотрудников.Период}
    |        {ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияОСостоянииСотрудников КАК СведенияОСостоянииСотрудников
    |        ПО ТаблицаОтборов.Сотрудник = СведенияОСостоянииСотрудников.Сотрудник
    |            И ТаблицаОтборов.Период = СведенияОСостоянииСотрудников.Период}
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ВТСведенияКадровойИсторииСотрудников
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ВТСведенияОВидахЗанятостиСотрудников
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ВТОтборовРазличныхСотрудников
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |УНИЧТОЖИТЬ ВТСведенияОСостоянииСотрудников
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ПредставленияКадровыеДанныеСотрудников.Период КАК Период,
    |    ПредставленияКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
    |    ПредставленияКадровыеДанныеСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
    |    ПредставленияКадровыеДанныеСотрудников.Организация КАК Организация,
    |    ПредставленияКадровыеДанныеСотрудников.Подразделение КАК Подразделение,
    |    ПредставленияКадровыеДанныеСотрудников.Должность КАК Должность,
    |    ПредставленияКадровыеДанныеСотрудников.ВидЗанятости КАК ВидЗанятости,
    |    ПредставленияКадровыеДанныеСотрудников.ТабельныйНомер КАК ТабельныйНомер,
    |    ПредставленияКадровыеДанныеСотрудников.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
    |    ПредставленияКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
    |    ПредставленияКадровыеДанныеСотрудников.ДатаУвольнения КАК ДатаУвольнения,
    |    ПредставленияКадровыеДанныеСотрудников.Состояние КАК Состояние,
    |    ПредставленияКадровыеДанныеСотрудников.ДействуетДо КАК ДействуетДо,
    |    ПредставленияКадровыеДанныеСотрудников.Сотрудник.Наименование КАК Сотрудник_Наименование,
    |    ПредставленияКадровыеДанныеСотрудников.ФизическоеЛицо.Код КАК ФизическоеЛицо_Код,
    |    ПредставленияКадровыеДанныеСотрудников.ФизическоеЛицо.Наименование КАК ФизическоеЛицо_Наименование,
    |    ПредставленияКадровыеДанныеСотрудников.ФизическоеЛицо.ДатаРождения КАК ФизическоеЛицо_ДатаРождения,
    |    ПредставленияКадровыеДанныеСотрудников.Организация.ИНН КАК Организация_ИНН,
    |    ПредставленияКадровыеДанныеСотрудников.Организация.Наименование КАК Организация_Наименование,
    |    ПредставленияКадровыеДанныеСотрудников.Подразделение.Код КАК Подразделение_Код,
    |    ПредставленияКадровыеДанныеСотрудников.Подразделение.Наименование КАК Подразделение_Наименование,
    |    ПредставленияКадровыеДанныеСотрудников.Должность.Наименование КАК Должность_Наименование,
    |    ПредставленияКадровыеДанныеСотрудников.ГоловнаяОрганизация.Наименование КАК ГоловнаяОрганизация_Наименование,
    |    ПредставленияКадровыеДанныеСотрудников.КоличествоСтавок КАК Должность_КоличествоСтавок,
    |    ПредставленияКадровыеДанныеСотрудников.ДатаНачала КАК Должность_ДатаНачала,
    |    ПредставленияКадровыеДанныеСотрудников.ДатаОкончания КАК Должность_ДатаОкончания,
    |    ПредставленияКадровыеДанныеСотрудников.ВидСобытия КАК Должность_ВидСобытия
    |ИЗ
    |    ПредставленияКадровыеДанныеСотрудников КАК ПредставленияКадровыеДанныеСотрудников
    |ГДЕ
    |    ЕСТЬNULL(ПредставленияКадровыеДанныеСотрудников.Сотрудник, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)
    |    И ((ПредставленияКадровыеДанныеСотрудников.ДатаУвольнения >= &ДатаОтчета
    |            ИЛИ ЕстьNull(ПредставленияКадровыеДанныеСотрудников.ДатаУвольнения, ДатаВремя(1,1,1)) = ДАТАВРЕМЯ(1,1,1))
    |    И (ПредставленияКадровыеДанныеСотрудников.ДатаПриема <= &ДатаОтчета
    |                И ЕстьNull(ПредставленияКадровыеДанныеСотрудников.ДатаПриема, ДатаВремя(1,1,1)) <> ДАТАВРЕМЯ(1,1,1)
    |            ИЛИ ЕСТЬNULL(ПредставленияКадровыеДанныеСотрудников.ВидЗанятости, ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка)
    |                И ЕстьNull(ПредставленияКадровыеДанныеСотрудников.ДатаПриема,ДатаВремя(1,1,1)) = ДАТАВРЕМЯ(1,1,1))) ";
33 dft2014
 
20.11.18
11:46
(0) Ниже - пример функции для получения актуальных работающих сотрудников за период. Возвращается таблица значений:


Функция ПроверитьНаличиеПодработки(Сотрудник, ДатаНазначения)
    
    СтруктураДанных = Новый Структура();
    
    СтруктураДанных.Вставить("ДатаНачала",);
    СтруктураДанных.Вставить("ДатаОкончания",);
    СтруктураДанных.Вставить("РазмерОклада",);
    
    ПараметрыПолучения = ПолучитьПараметры();
    ПараметрыПолучения.Организация = ЭтотОбъект.Организация;
    
    //Если ЗначениеЗаполнено(Подразделение) Тогда
    //    ПараметрыПолучения.Подразделение = Подразделение;    
    //КонецЕсли;
    
    //Если ВключаяУволенныхНаНачалоПериода Тогда
    //    ПараметрыПолучения.ВключаяУволенныхНаНачалоПериода = Истина;
    //КонецЕсли;
    
    ПараметрыПолучения.НачалоПериода = НачалоМесяца(ДатаНазначения);
    ПараметрыПолучения.ОкончаниеПериода = КонецМесяца(ДатаНазначения);
    ПараметрыПолучения.ПодработкиРаботниковПоТрудовымДоговорам = Истина;
    ПараметрыПолучения.РаботникиПоДоговорамГПХ = Ложь;
    
    // ОТБОР ПО ВИДУ ЗАНЯТОСТИ РАБОТАЕТ ТОЛЬКО НАЧИНАЯ С РЕДАКЦИИ 3.1.7
    //ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
    //            ПараметрыПолучения.Отборы, "ВидЗанятости", "=", Перечисления.ВидыЗанятости.Подработка);
                
    ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(
                ПараметрыПолучения.Отборы, "ФизическоеЛицо", "=", Сотрудник.ФизическоеЛицо);

    ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,Подразделение,Должность,ДолжностьПоШтатномуРасписанию,КоличествоСтавок,ВидЗанятости,ДатаПриема,ДатаУвольнения,ГрафикРаботы";
    
    ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
    
    Возврат ТаблицаСотрудников;
    
КонецФункции


&НаСервере
Функция ПолучитьПараметры()
    Возврат КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();    
КонецФункции
34 Akela has missed
 
20.11.18
12:03
(32) Почему первая ВТ без разрешенных, и неужели там запрос по справочнику может выдать дубли?
35 dnab
 
20.11.18
12:57
(32) из отладчика после замены представлений чтоли стянул?
36 Serg_1960
 
20.11.18
13:14
+ эпитафия: и в один прекрасный момент, после очередного обновления, честно стянутое из отладчика перестанет работать из-за изменения структуры регистров КадроваяИсторияСотрудников и КадроваяИсторияСотрудниковИнтервальный.
37 Serg_1960
 
20.11.18
13:21