Имя: Пароль:
1C
 
Как в 1С:КА2 программно сформировать список работающих сотрудников на определенную дату
0 nomanacc
 
27.08.18
15:49
Много пишут про скрытую на партнерском форуме 1с статью с документацией по общему модулю КадровыйУчет, не настало ли время её достать?

Первая попытка приблизиться к "беcтабличной" технике получения работающих сотрудников выглядела так

ДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Ложь, СотрудникСсылка, "Подразделение,Должность", НачалоДня(ТекущаяДатаСеанса()) - 1);

и дала таблицу значений с колонками:

Сотрудник    ДатаОкончания    ДатаНачала    ГоловнаяОрганизация    ФизическоеЛицо    ПериодЗаписи    Год    ПериодПредыдущейЗаписи    ВидСобытия    Организация    Должность    ГоловнойСотрудник    ЭтоГоловнойСотрудник    Подразделение    ДолжностьПоШтатномуРасписанию    КоличествоСтавок    ВидДоговора    РегистраторЗаписи    РегистраторСобытия    ПустойИнтервал

Дальше можно использовать отбор
ВидСобытия    <> Перечисления.ВидыКадровыхСобытий.Увольнение
но хочется избежать "угадайки" в боевых базах, где по-человечески описан рекомендованный Нуралиевым АПИ доступа к кадровым данным?


--

_[0]    СтрокаТаблицыЗначений    СтрокаТаблицыЗначений
ВидДоговора    Трудовой договор    ПеречислениеСсылка.ВидыДоговоровССотрудниками
ВидСобытия    Увольнение    ПеречислениеСсылка.ВидыКадровыхСобытий
Год    01.01.2017 00:00:00    Дата
ГоловнаяОрганизация    ООО    СправочникСсылка.Организации
ГоловнойСотрудник    Иван Иванович Иванов (ув.)    СправочникСсылка.Сотрудники
ДатаНачала    18.08.2017 00:00:05    Дата
ДатаОкончания    31.12.3999 23:59:59    Дата
Должность    Слесарь-ремонтник    СправочникСсылка.Должности
ДолжностьПоШтатномуРасписанию    Слесарь-ремонтник, 4 разряд /Производственный участок/    СправочникСсылка.ШтатноеРасписание
КоличествоСтавок    1    Число
Организация    ООО    СправочникСсылка.Организации
Период    26.08.2018 23:59:59    Дата
ПериодВозвратногоСобытия    01.01.0001 00:00:00    Дата
ПериодЗаписи    18.08.2017 00:00:05    Дата
ПериодПредыдущейЗаписи    18.05.2017 00:00:20    Дата
Подразделение    Производственный участок    СправочникСсылка.ПодразделенияОрганизаций
ПустойИнтервал    Ложь    Булево
Регистратор    Увольнение 7700-000008 от 17.08.2017    ДокументСсылка.Увольнение
РегистраторЗаписи    Увольнение 7700-000008 от 17.08.2017    ДокументСсылка.Увольнение
РегистраторСобытия    Увольнение 7700-000008 от 17.08.2017    ДокументСсылка.Увольнение
Сотрудник    Иван Иванович Иванов (ув.)    СправочникСсылка.Сотрудники
ФизическоеЛицо    Бигалиев Ильдар Мансурович    СправочникСсылка.ФизическиеЛица
ЭтоВозвратноеСобытие    Ложь    Булево
ЭтоГоловнойСотрудник    Истина    Булево
--
1 nomanacc
 
05.09.18
12:40
Просто оставлю текущий вариант заполнения тут, может, кто укажет более оптимальный способ, чем последовательный вызов

КадровыйУчет.СоздатьВТСотрудникиОрганизации()
КадровыйУчет.КадровыеДанныеСотрудников()

В частности, хотелось бы штатный отбор по подразделению освоить


&НаСервере
Процедура мДанныеСотрудников_инит()
    мДата    =    объект.Дата;//дата(2018,08,20);
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
    ПараметрыПолученияСотрудников.НачалоПериода = мДата;
    ПараметрыПолученияСотрудников.ОкончаниеПериода = мДата;
    
    КадровыйУчет.СоздатьВТСотрудникиОрганизации(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияСотрудников, "ВТСотрудникиОрганизации");
    
    Запрос.Текст =
    "ВЫБРАТЬ Сотрудник//,Должность
    |ИЗ
    |    ВТСотрудникиОрганизации КАК СотрудникиОрганизации"; //|    где Подразделение=&Подразделение и ВидСобытия<>&ВидСобытия
    
    _=Запрос.Выполнить().Выгрузить();
    
    ДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Ложь, _.ВыгрузитьКолонку("Сотрудник"), "Должность", НачалоДня(мдата)); //Подразделение        
    
    мДанныеСотрудников.Очистить();
    ВидСобытия = Перечисления.ВидыКадровыхСобытий.Увольнение;
    для каждого вы из ДанныеСотрудников Цикл//Пока вы.следующий() Цикл
        если вы.Подразделение = Объект.Подразделение
            и вы.ВидСобытия <> ВидСобытия Тогда
            _=мДанныеСотрудников.Добавить();
            _.Сотрудник=вы.сотрудник;
            _.Должность=вы.должность;
        конецЕсли;
    КонецЦикла;
    
КонецПроцедуры