Имя: Пароль:
1C
1С v8
Получить статус из регистра сведений и вернуть в справочник
0 Evetady
 
06.04.20
10:12
&НаСервере
Функция ПолучитьСтатус(Сотрудник)
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КадровыеПеремещенияСрезПоследних.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния
        |ИЗ
        |    РегистрСведений.КадровыеПеремещения.СрезПоследних КАК КадровыеПеремещенияСрезПоследних
        |ГДЕ
        |    КадровыеПеремещенияСрезПоследних.Сотрудник = &Сотрудник";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Статус = "";
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Статус = ВыборкаДетальныеЗаписи.ПричинаИзмененияСостояния;
    КонецЦикла;
    Возврат Статус
КонецФункции

&НаКлиенте
Процедура ПриОткрытии()
    Объект.Статус = ПолучитьСтатус(Сотрудник);
КонецПроцедуры

Подскажите как правильно организовать запрос и получение данных, совсем не давно с этим столкнулся.

Не бейте, совсем новичок XD
1 RomaH
 
naïve
06.04.20
10:25
Сотрудник- в параметры виртуальной таблицы
дату среза не надо? записей будущим периодом нет?
Функция ПолучитьСтатус(Знач Сотрудник)  - сотрудник не меняется ведь?

контекст зачем в функции?
2 Evetady
 
06.04.20
10:36
Контекс где то подглядел,  но не вышло.
Если я использую срезПоследних, для чего дата среза?
3 RomaH
 
naïve
06.04.20
11:12
(2) потому-что данные полученные на 1 января и на 31 декабря - у тебя будут одинаковыми
4 Ненавижу 1С
 
гуру
06.04.20
11:23
вот так вот раз и поменять документ просто при открытии его формы?
5 Evetady
 
06.04.20
11:24
Понял.
Ну создать ещё виртуальную табл?
Сотрудник не изменяется в регистре.
Как правильно вызвать этот запрос при открытии
6 RomaH
 
naïve
06.04.20
11:27
(5) виртуальная <> временная
7 Evetady
 
06.04.20
11:30
3 документа, принятие, увольнение и перевод на другую должность, а это к справочнику сотрудников, где добавил статус одноимённый с документом
8 Начинающий_13
 
06.04.20
11:36
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Дата"              , КонецДня(Дата));
    Запрос.УстановитьПараметр("ФизическоеЛицо"    , Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Данные.ФизическоеЛицо КАК ФизическоеЛицо,
    |    Данные.ТрудовойДоговор КАК ТрудовойДоговор,
    |    Данные.Подразделение КАК Подразделение,
    |    Данные.Отдел КАК Отдел,
    |    Данные.Должность КАК Должность,
    |    Данные.ВидЗанятости КАК ВидЗанятости,
    |    Данные.ГрафикРаботы КАК ГрафикРаботы
    |ИЗ
    |    РегистрСведений.РаботникиОрганизации.СрезПоследних(&Дата, ФизическоеЛицо = &ФизическоеЛицо) КАК Данные";
    
    ТаблицаКадровыеДанныеФизическогоЛица = Запрос.Выполнить().Выгрузить();
    Если ТаблицаКадровыеДанныеФизическогоЛица.Количество() > 0 Тогда
        
        Информация = ТаблицаКадровыеДанныеФизическогоЛица[0];
        
        СтруктураВозврата.ТрудовойДоговор      = Информация.ТрудовойДоговор;
        СтруктураВозврата.Подразделение        = Информация.Подразделение;
        СтруктураВозврата.Отдел                = Информация.Отдел;
        СтруктураВозврата.Должность            = Информация.Должность;
        СтруктураВозврата.ВидЗанятости         = Информация.ВидЗанятости;
        СтруктураВозврата.ГрафикРаботы         = Информация.ГрафикРаботы;
        
    КонецЕсли;
    
    Возврат СтруктураВозврата;
9 Evetady
 
06.04.20
18:58
Окей, а как грамотно вызвать эту функцию в процедуре?