Перейти к контенту
Перейти в раздел примеры кода 1С 8.3:
Пример 1:
Функция ПолучитьДолжностьСотрудникаВариант1(ТекСотрудник)Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность
|
|ИЗ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
|
|ГДЕ ТекущиеКадровыеДанныеСотрудников.Сотрудник = &ТекСотрудник»;Запрос.Параметры.Вставить(«ТекСотрудник», ТекСотрудник);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() ТогдаВыб_Должность = Результат.Выбрать();
Выб_Должность.Следующий();
Возврат Выб_Должность.ТекущаяДолжность;
Иначе
Возврат Неопределено
КонецЕсли;
КонецФункции
Пример 2:
&НаСервереБезКонтекста
Функция ПолучитьДолжностьСотрудникаВариант2(ТекСотрудник, ТекОрганизация, ТекПодразделение)ВозвратТекДолжности=«»;
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность
|ИЗ
| РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
|ГДЕ
| ТекущиеКадровыеДанныеСотрудников.Сотрудник = &Сотрудник
| И ТекущиеКадровыеДанныеСотрудников.ТекущаяОрганизация = &ТекущаяОрганизация
| И ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение = &ТекущееПодразделение»;Запрос.УстановитьПараметр(«Сотрудник», ТекСотрудник);
Запрос.УстановитьПараметр(«ТекущаяОрганизация», ТекОрганизация);
Запрос.УстановитьПараметр(«ТекущееПодразделение», ТекПодразделение);РезультатЗапроса = Запрос.Выполнить();ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока
ВыборкаДетальныеЗаписи.Следующий() Цикл
ВозвратТекДолжности=ВыборкаДетальныеЗаписи.ТекущаяДолжность;
КонецЦикла;
Возврат
ВозвратТекДолжности;
КонецФункции
Пример 3:
&НаСервереБезКонтекста
Функция ДолжностьСотрудника(Сотрудник) // Через типовую функциюСотрудники = Новый Массив;
Сотрудники.Добавить(Сотрудник);Сведения = КадровыйУчет.КадровыеДанныеСотрудников(Истина,Сотрудники,«Организация,Должность»);
Если Сведения.Количество()>0 Тогда
ТекДолжность = Сведения[0].Должность;
Иначе
ТекДолжность = ПредопределенноеЗначение(«Справочник.Должности.ПустаяСсылка»);
КонецЕсли;
Возврат
ТекДолжность;
КонецФункции
Copyright©, «Программист 1С в г.Минске», 02.08.2020
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
11.10.16 — 06:30
Есть запрос:
Запрос.Текст= «ВЫБРАТЬ
| КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Ссылка,
| КадроваяИсторияСотрудниковСрезПоследних.Должность.Наименование КАК Должность
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Дата, Сотрудник В (&МассивСотрудников)) КАК КадроваяИсторияСотрудниковСрезПоследних»;
Пытаюсь при помощи этого запроса найти должности, однако его результат всегда пустой. Не могу понять почему…
1 — 11.10.16 — 06:45
а что у нас в &Дата и в &МассивСотрудников?
2 — 11.10.16 — 06:47
(1) Дата — это дата проведения документа (т.е. дата на которую нужно получить актуальное значение). А МассивСотрудников содержит элементы справочника «Сотрудники».
3 — 11.10.16 — 06:48
*СправочникСсылка.Сотрудники
4 — 11.10.16 — 06:52
(3) проверьте, может у этого регистра еще измерения есть, кроме измерения Сотрудники.
5 — 11.10.16 — 06:53
(4) головная организация и физ.лицо
6 — 11.10.16 — 06:55
(0) Отладчиком посмотрите, что у вас в &Дата и &МассивСотрудников
7 — 11.10.16 — 06:59
(6) Посмотрел. Там дата и массив с сотрудниками.
8 — 11.10.16 — 07:01
(7) А почему массив, а не СписокЗначений?
9 — 11.10.16 — 07:03
(8) а зачем здесь список? Разве массив не подойдёт?
10 — 11.10.16 — 07:08
(9) Проверьте по конкретному сотруднику, без массива. Если все ок, значит проблема в массиве, либо в дате.
11 — 11.10.16 — 07:11
не уверен, но может быть
КадроваяИсторияСотрудниковОрганизаций еще есть регистр?
12 — 11.10.16 — 07:13
(11) В БП 3.0 нет.
13 — 11.10.16 — 07:15
(11) нет.
14 — 11.10.16 — 07:16
Проверил с сотрудником и без даты, всё равно не работает.
15 — 11.10.16 — 07:34
(14) А регистр точно не пуст?
16 — 11.10.16 — 07:36
(15) Ну, у сотрудников же есть должности…они ведь не могут встать без отражения в регистр…
17 — 11.10.16 — 07:41
(16) При не особо прямых руках может быть все что угодно)
18 — 11.10.16 — 07:42
(17) Через все функции, при открытии регистра выдаёт пустую форму. Получается, что регистр пуст? Но где тогда должности-то? Где линки?
19 — 11.10.16 — 07:51
Вангую, что должности в ЗУПе.
20 — 11.10.16 — 07:52
(19) ох…ну тогда наверняка должен быть обмен, который складывает должности в….
21 — 11.10.16 — 07:53
(18) Это значит, что у регистра нет форм списка, ни УФ ни неУФ.
22 — 11.10.16 — 07:55
(20) Найди в интернете либо консольку запросов, либо вот эту обработку: Изменение записей регистров сведений и накопления 8.2-8.3 (УФ) и посмотри что у тебя в регистре есть.
23 — 11.10.16 — 07:56
(20) Накуя?
24 — 11.10.16 — 07:57
(20) Или просто выведи запрос не из РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних, а из РегистрСведений.КадроваяИсторияСотрудников
25 — 11.10.16 — 07:59
Посмотри как в документе Акт сверки сделано
26 — 11.10.16 — 08:08
// Если это не ответственное лицо, тогда получим его кадровые данные
ДанныеПредставителяОрганизации = ОбщегоНазначенияБПВызовСервера.ДанныеФизЛица(Шапка.Организация, Шапка.ПредставительОрганизации, Шапка.ДатаАктаСверки);
где Шапка.ПредставительОрганизации — это физлицо
Ну и далее
ДолжностьПредставителяОрганизации = ДанныеПредставителяОрганизации.Должность;
27 — 11.10.16 — 08:34
(21) >> Это значит, что у регистра нет форм списка, ни УФ ни неУФ
Бред ляпнул.
Если форма списка регистра пустая, значит регистр пуст.
Скорее всего, кадровый учет в БП не ведется.
Если кадровый учет ведется в ЗиУП, но не появляется в БП, то тут возможны варианты — либо обмен настроен таким образом, что проводки переносятся из ЗиУП в БП сводно (без детализации по сотрудникам), либо какие-то еще особенности или косяки обмена имеют место быть.
(22) >> Найди в интернете либо консольку запросов…
Нафуя? Ты явно не выспался.
Если уж приспичило посмотреть что в регистре
В любой актуальной типовой конфе на УФ (в том числе в БП 3.0) есть универсальный отчет по метаданным. Только это нафиг не нужно.
А вообще чудес не бывает. Если запрос при правильных параметрах возвращает пустое значение, значит данных нет.
28 — 11.10.16 — 08:54
(0) Посмотри как в авансовом отчете сделано.
29 — 11.10.16 — 12:14
В общем сотрудников действительно ведут в ЗУП. Думал раз обмен настроен, то и региср должен писаться. Тепер полкчается нужно перенатсроиь обмен, что б он был с деталиацией по сотрудникам?
30 — 11.10.16 — 14:24
(29) нет можно просто вручную указать должность в бп. Тебе же не надо по всем сотрудникам
31 — 11.10.16 — 14:31
(30) ясно. Спасибо всем за помощь.
Sasha_1CK
32 — 11.10.16 — 14:36
(29) Необходимо убедиться, что в БП ведется упрощенный кадровый учет — тогда можно заводить в справочнике «Сотрудники» новых сотрудников и привязывать их к Физлицам. заполняя соответственно должности и подразделения. Если упрощенный кадровый учет отключен — то сотрудников нужно заводить по полной программе через приказ о приеме, даже если учет ЗП во внешней программе. При ведении учета во внешней программе (да и в самой БП) — объектом учета ЗП выступают физлица, собственно именно справочник Физлица используется в качестве аналитики в плане счетов и в качестве реквизита в документах.
Сотрудники сделаны несколько сбоку — что приводит к разнообразным чудесам.
Регистр кадровые сведения заполняется ЕМНИП при записи элемента справочника «Сотрудники», если включен упрощенный кадровый учет.
faust21 1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
||||
1 |
||||
1C 8.x Получить должность сотрудника в печатную форму08.02.2023, 17:58. Показов 1931. Ответов 32 Метки нет (Все метки)
Добрый день.
Подскажите пжлст решение.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
08.02.2023, 17:58 |
32 |
Dethmontt Модератор 3721 / 2916 / 574 Регистрация: 10.03.2011 Сообщений: 11,485 Записей в блоге: 1 |
||||
08.02.2023, 18:13 |
2 |
|||
Как то так:
Добавлено через 1 минуту то это лишнее
КадровыйУчет.СотрудникиФизическихЛиц(МассивФизЛиц) Добавлено через 2 минуты Не по теме: З.Ы. ну и в целом код будет зависеть от используемой вами версии БСП ((
1 |
faust21 1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
||||
08.02.2023, 18:29 [ТС] |
3 |
|||
К сожалению не получилось((
Насчет версии БСП я часто слышал, и сейчас загуглил как смотреть. Моя версия 3.1.7.294
0 |
1872 / 1278 / 459 Регистрация: 16.01.2015 Сообщений: 5,586 |
|
08.02.2023, 20:32 |
4 |
faust21, Какая конфигурация?
0 |
1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
|
08.02.2023, 20:34 [ТС] |
5 |
polax, БП корп самая актуальная
0 |
1872 / 1278 / 459 Регистрация: 16.01.2015 Сообщений: 5,586 |
|
08.02.2023, 21:29 |
6 |
faust21, Не имею корп версию, но надеюсь, что РегистрСведений.ТекущиеКадровыеДанныеСотрудников в ней такой же как и в БП проф Вот оттуда и бери должность запросом
0 |
1184 / 724 / 210 Регистрация: 22.04.2013 Сообщений: 5,326 Записей в блоге: 1 |
|
08.02.2023, 21:53 |
7 |
сначала попробуй … = «самая лучшая должность»;
0 |
1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
|
08.02.2023, 21:57 [ТС] |
8 |
Yulunga, с выводом нет проблем, я застрял на том что пока не умею обращаться к чему-то кроме реквизитов
0 |
1184 / 724 / 210 Регистрация: 22.04.2013 Сообщений: 5,326 Записей в блоге: 1 |
|
09.02.2023, 06:57 |
9 |
faust21, ну раз не получается как десмонт посоветовал, то через запрос
0 |
faust21 1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
||||||||||||
09.02.2023, 11:30 [ТС] |
10 |
|||||||||||
Нашел в интернете решение. Пока не разобрался как работает, острая нехватка в понимании синтаксиса
Подскажите как должен выглядеть вывод информации
Добавлено через 25 минут
Но результат пустой
0 |
1872 / 1278 / 459 Регистрация: 16.01.2015 Сообщений: 5,586 |
|
09.02.2023, 12:26 |
11 |
faust21, Какой тип значения у СсылкаНаДокумент.ОтпускПроизвел? Скорей всего это справочник ФизЛица или Пользователи, а не сотрудник
0 |
1184 / 724 / 210 Регистрация: 22.04.2013 Сообщений: 5,326 Записей в блоге: 1 |
|
09.02.2023, 12:28 |
12 |
в консоли запросов сначала свой запрос выполни. посмотри — выдаёт что или нет
0 |
faust21 1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
||||
09.02.2023, 12:39 [ТС] |
13 |
|||
polax, Тип СправочникСсылка.ФизическиеЛица
Результат все равно пустой. Или оно иначе работает? Yulunga, Что такое консоль запросов?
0 |
1872 / 1278 / 459 Регистрация: 16.01.2015 Сообщений: 5,586 |
|
09.02.2023, 13:14 |
14 |
Тип СправочникСсылка.ФизическиеЛица М-да. В запросе отбор по Сотруднику ГДЕ ТекущиеКадровыеДанныеСотрудников.Сотрудник = &Сотрудник (СправочникСсылка.Сотрудники), а в качестве параметра передаешь физ лицо.
0 |
faust21 1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
||||||||
09.02.2023, 13:26 [ТС] |
15 |
|||||||
polax,
Результат все равно пустой
0 |
1872 / 1278 / 459 Регистрация: 16.01.2015 Сообщений: 5,586 |
|
09.02.2023, 13:31 |
16 |
Открой справочник сотрудники и посмотри, заполнен ли у этого сотрудника физ лицо
0 |
1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
|
09.02.2023, 13:36 [ТС] |
17 |
polax, В справочнике сотрудники и в справочнике физ лиц есть это лицо.
0 |
1872 / 1278 / 459 Регистрация: 16.01.2015 Сообщений: 5,586 |
|
09.02.2023, 13:44 |
18 |
Нет. В БП не так работает. Физ лицо точно есть (в ут или унф слегка не так). Через функции для тех специалиста, открой этот регистр. Посмотри есть ли запись для этого сотрудника. Или проверь, есть ли Прием на работу этого пользователя с указанием должности
0 |
Dethmontt Модератор 3721 / 2916 / 574 Регистрация: 10.03.2011 Сообщений: 11,485 Записей в блоге: 1 |
||||
10.02.2023, 02:03 |
19 |
|||
Решениеfaust21, в твоей конфигурации должно быть вот так
1 |
faust21 1 / 1 / 0 Регистрация: 21.01.2020 Сообщений: 180 |
||||
10.02.2023, 12:02 [ТС] |
20 |
|||
Dethmontt, Спасибо, вы очень помогли, это работает Добавлено через 48 минут
Метод объекта не обнаружен (Свойство) А с адресом поможете? Явно я неправильно указываю контрагента. Как вообще узнавать какие данные используются?
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
10.02.2023, 12:02 |
Помогаю со студенческими работами здесь Вывести название всех отделов, фамилию сотрудника, который руководит этим отделом, и должность этого руководителя ищем сотрудника на должность «программист-консультант 1С» Запрос: получить id сотрудника, полное имя (имя и фамилия) сотрудника и название страны, в которой он(а) работает Выбрать печатную форму ТаблицаЗначений в печатную форму Настроить печатную форму Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 20 |
Contents
- 1 Введение
- 2 Получение информации для одного сотрудника или физического лица
- 3 Получение информации для списка сотрудников с использованием временных таблиц
- 4 Получение кадровой информации для списка сотрудников на разные даты
Введение
В данной статье мы рассмотрим получение кадровых данных сотрудников и физических лиц с помощью библиотеки стандартных подсистем в конфигурации 1C Зарплата и управление персоналом (ЗУП), редакция 3.1
Очень часто необходимо получать актуальные кадровые данные как для одного сотрудника, так и для списка сотрудников. Конечно же мы можем просто написать свой запрос и получить эти данные, но очень часто, после изменения структуры регистров, запрос перестает работать. Кроме того, для получения некоторых данных необходимо писать большие запросы в несколько сотен строк, особенно если необходимо получить данные для списка сотрудников. Поэтому лучше воспользоваться тем функционалом, который для нас создали разработчики библиотеки стандартных подсистем.
В данной статье рассматриваются только способы получения кадровой информации для сотрудников и физических лиц. Описанным способом можно получить следующую кадровую информацию: кадровые данные сотрудников (дата приема, текущее подразделение, должность, работает сотрудник, находится в отпуске или же на больничном), кадровые данные физических лиц (ФИО, информация о стаже, образовании и т.д.) и данные о начислениях.
Все примеры проверены на конфигурации ЗУП 3.1.10.135, версия 1C БСП 3.0.3.59.
Получение информации для одного сотрудника или физического лица
Рассмотрим получение текущей фамилии для сотрудника Боровой Дмитрий Валентинович. Для наглядности добавим ему в историю изменения ФИО фамилию Бонд и изменим отчество.
Для получения кадровой информации используется общий модуль КадровыйУчет. Для получения кадровых данных физических лиц используется функция КадровыеДанныеФизическихЛиц. Более подробно о принимаемых параметрах вы можете в описании к функции. Для нас важен параметр СписокФизическихЛиц, куда мы передаем ссылку на физическое лицо или массив ссылок на физические лица, параметр КадровыеДанные, в котором указываются те кадровые данные, которые мы хотим получить и параметр ДатаПолученияДанных – дата, на которую мы получаем данные.
Видов кадровых данных, которые мы можем получить, очень много, поэтому мы рассмотрим только несколько из них.
Чтобы узнать какие кадровые данные можно получить с помощью данной функции вы можете обратиться к описанию функции КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеФизическихЛиц.
ДатаПолученияДанных = Дата(2019, 12, 1); ПоляОтбораПериодическихДанных = Неопределено; КадровыеДанные = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, ФизическоеЛицо, "Фамилия", ДатаПолученияДанных, ПоляОтбораПериодическихДанных); Для Каждого ТекСтрока из КадровыеДанные Цикл Сообщить("" + ТекСтрока.ФизическоеЛицо + ", Фамилия: " + ТекСтрока.фамилия);
КонецЦикла;
Если мы выполним этот код, то получим следующую строку:
Боровой Дмитрий Валентинович, Фамилия: Бонд
Т.е. функция нам вернет фамилию актуальную в период с 30.11.2019 по 01.01.2020. Если же указать дату получения данных не из этого периода, то функция вернет другую фамилию.
Кроме того, у данной функции есть еще один параметр, с помощью которого мы можем накладывать дополнительные отборы – ПоляОтбораПериодическихДанных. В данном параметре указывается коллекция отборов. Для примера мы можем наложить отбор на отчество:
ДатаПолученияДанных = Дата(2019, 12, 1); ЗначенияОтборов = Новый Массив; УсловиеОтбора = Новый Структура(); УсловиеОтбора.Вставить("ЛевоеЗначение", "Отчество"); УсловиеОтбора.Вставить("ВидСравнения", " подобно "); УсловиеОтбора.Вставить("ПравоеЗначение", """Вади%"""); ЗначенияОтборов.Добавить(УсловиеОтбора); ПоляОтбораПериодическихДанных = Новый Структура("ФИОФизическихЛиц", ЗначенияОтборов); КадровыеДанные = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, ФизическоеЛицо, "Фамилия", ДатаПолученияДанных, ПоляОтбораПериодическихДанных); Для Каждого ТекСтрока из КадровыеДанные Цикл Сообщить("" + ТекСтрока.ФизическоеЛицо + ", Фамилия: " + ТекСтрока.фамилия); КонецЦикла;
В результате получим строку:
Боровой Дмитрий Валентинович, Фамилия: Быков
Т.е. мы получили другую фамилию, используя одну и ту же дату.
Для получения кадровых данных сотрудников используется функция КадровыеДанныеСотрудников из того же модуля. И, по аналогии, чтобы узнать список возможных кадровых данных можно посмотреть описание функции КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеСотрудников.
Для получения кадровой информации по списку сотрудников или списку физлиц можно использовать эти же функции. Только вместо ссылки на физическое лицо в параметр СписокФизическихЛиц передается массив физических лиц, а в параметр СписокСотрудников – массив сотрудников.
Получение информации для списка сотрудников с использованием временных таблиц
Иногда гораздо удобнее не получать данные в промежуточных переменных, а формировать временные таблицы и использовать эти временные таблицы в одном запросе. Для этого мы можем использовать функции СоздатьНаДатуВТКадровыеДанныеСотрудников и СоздатьНаДатуВТКадровыеДанныеФизическихЛиц из общего модуля КадровыйУчет. Данные функции отличаются тем, что не возвращают таблицу кадровых данных, а формируют временную таблицу в менеджере временных таблиц.
Для демонстрации можно использовать данный код.
ДатаПолученияДанных = Дата(2019, 12, 1); МенеджерВТ = Новый МенеджерВременныхТаблиц; КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников(МенеджерВТ, Истина, СписокСотрудников, "Подразделение, Должность, ФОТ", ДатаПолученияДанных); КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеФизическихЛиц(МенеджерВТ, Истина, МассивФизлиц, "Фамилия", ДатаПолученияДанных); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | Сотрудники.Ссылка КАК Ссылка, | Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | ВТКадровыеДанныеФизическихЛиц.Фамилия КАК Фамилия, | ВТКадровыеДанныеСотрудников.Подразделение КАК Подразделение, | ВТКадровыеДанныеСотрудников.ФОТ КАК ФОТ, | ВТКадровыеДанныеСотрудников.Должность КАК Должность |ИЗ | Справочник.Сотрудники КАК Сотрудники | ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеФизическихЛиц КАК ВТКадровыеДанныеФизическихЛиц | ПО Сотрудники.ФизическоеЛицо = ВТКадровыеДанныеФизическихЛиц.ФизическоеЛицо | ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК ВТКадровыеДанныеСотрудников | ПО Сотрудники.Ссылка = ВТКадровыеДанныеСотрудников.Сотрудник |ГДЕ | Сотрудники.Ссылка В(&СписокСотрудников)"; Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников); КадровыеДанные = Запрос.Выполнить().Выгрузить();
После выполнения данного кода мы получим таблицу кадровых данных следующего вида:
В данном примере мы сначала подготовили кадровые данные сотрудника и кадровые данные физического лица во временных таблицах, и затем использовали их в одном запросе.
Получение кадровой информации для списка сотрудников на разные даты
Кроме получения кадровых данных на конкретную дату очень часто бывает нужно получить кадровые данные на разные даты. Это бывает нужно, например, в случае печати нескольких документов с разными датами. Когда для каждого документа на разные даты нужно получать отдельную кадровую информацию. Так как в цикле запросы выполнять не хорошо, то нужно сформировать один запрос сразу для всех документов. Для этого можно использовать функции ЗапросВТКадровыеДанныеФизическихЛиц и ЗапросВТКадровыеДанныеСотрудников все из того же общего модуля КадровыйУчет.
Для примера используем все того же сотрудника Борового Дмитрия Валентиновича и его таблицу изменения ФИО.
Чтобы продемонстрировать как работают данные функции подготовим таблицу физических лиц, которая содержит список физических лиц и дат. В нашем примере физическое лицо будет одно, но мы добавим несколько дат:
МенеджерВТ = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Текст = "ВЫБРАТЬ | &ФизическоеЛицо КАК ФизическоеЛицо, | ДАТАВРЕМЯ(2018, 1, 1) КАК Период |ПОМЕСТИТЬ ВТФизическиеЛица | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | &ФизическоеЛицо, | ДАТАВРЕМЯ(2019, 12, 2) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | &ФизическоеЛицо, | ДАТАВРЕМЯ(2020, 1, 2)"; Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо); Запрос.Выполнить();
Во временной таблице будет три строки с разными датами.
Далее формируем описание нашей временной таблицы с физическими лицами:
ОписательВременнойТаблицыФизЛиц = КадровыйУчет.ОписаниеВременнойТаблицыОтборовФизическихЛиц("ВТФизическиеЛица");
Если колонка, содержащая ссылки на физические лица, будет называться не ФизическоеЛицо, необходимо указать это в функции ОписаниеВременнойТаблицыОтборовФизическихЛиц в параметре ИмяПоляФизическоеЛицо. Это же касается и колонки, содержащей даты, по умолчанию она должна называться Период.
Далее получим запрос и выполним его, чтобы сформировать временную таблицу, содержащую кадровые данные:
ПоляОтбораПериодическихДанных = Неопределено; Запрос = КадровыйУчет.ЗапросВТКадровыеДанныеФизическихЛиц(Истина, ОписательВременнойТаблицыФизЛиц, "Фамилия, Имя, Отчество", ПоляОтбораПериодическихДанных); Запрос.МенеджерВременныхТаблиц = МенеджерВТ; Запрос.Выполнить();
Ну и в конце мы можем использовать эту временную таблицу. В данном примере мы просто выведем ее в таблицу значений.
Запрос.Текст = "ВЫБРАТЬ | ВТКадровыеДанныеФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо, | ВТКадровыеДанныеФизическихЛиц.Период КАК Период, | ВТКадровыеДанныеФизическихЛиц.Фамилия КАК Фамилия, | ВТКадровыеДанныеФизическихЛиц.Имя КАК Имя, | ВТКадровыеДанныеФизическихЛиц.Отчество КАК Отчество |ИЗ | ВТКадровыеДанныеФизическихЛиц КАК ВТКадровыеДанныеФизическихЛиц"; КадровыеДанные = Запрос.Выполнить().Выгрузить();
В результате мы получим следующую таблицу:
Как мы видим, запрос вернул нам актуальную информацию для всех дат указанных в исходной таблице ВТФизическиеЛица.
Нужно получить должность текущего пользователя
Автор VitaCat, 23 янв 2017, 10:18
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте. Никак не могу получить должность текущего пользователя (нужно для автоматического заполнения в отчете).
ФизЛицоТекПользователя = ПараметрыСеанса.ТекущийПользователь.ФизическоеЛицо;
Запрос = Новый Запрос(
«ВЫБРАТЬ
| ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Должность, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка)) КАК Должность,
| ЕСТЬNULL(Сотрудники.Ссылка, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)) КАК Сотрудник,
| ЕСТЬNULL(ФизическиеЛица.Ссылка, ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК ФизическоеЛицо
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеСотрудников.СрезПоследних КАК ДанныеСотрудниковСрезПоследних
| ПО Сотрудники.Ссылка = ДанныеСотрудниковСрезПоследних.Сотрудник
| ПО ФизическиеЛица.Представление = Сотрудники.Представление
|ГДЕ
| ФизическиеЛица.Ссылка = &ФИО»);
Запрос.УстановитьПараметр(«ФИО», ФизЛицоТекПользователя);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ДолжностьОтветственного = ВыборкаДетальныеЗаписи.Должность;
Должность в цикле получал?
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Должность = ВыборкаДетальныеЗаписи.Должность;
КонецЦикла
Цитата: depb от 23 янв 2017, 10:33Должность в цикле получал?
Что с циклом, что без. В выражении ВыборкаДетальныеЗаписи ошибки чтения значений.
Добавлено: 23 янв 2017, 11:21
Вопрос снят. Напортачил в связях между таблицами. Теперь должность выводится.
ФизЛицо = ПараметрыСеанса.ТекущийПользователь.ФизическоеЛицо;
Запрос = Новый Запрос(
«ВЫБРАТЬ
| ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Должность, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка)) КАК Должность,
| ЕСТЬNULL(Сотрудники.Ссылка, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка)) КАК Сотрудник
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеСотрудников.СрезПоследних КАК ДанныеСотрудниковСрезПоследних
| ПО Сотрудники.Ссылка = ДанныеСотрудниковСрезПоследних.Сотрудник
| ПО ФизическиеЛица.Наименование = Сотрудники.Наименование
|ГДЕ
| ФизическиеЛица.Ссылка = &ФИО
|
|СГРУППИРОВАТЬ ПО
| ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Должность, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка)),
| ЕСТЬNULL(Сотрудники.Ссылка, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка))»);
Запрос.УстановитьПараметр(«ФИО», ФизЛицо);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Должность = ВыборкаДетальныеЗаписи.Должность;
КонецЦикла;
Теги:
- Форум 1С
-
►
Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4 -
►
Конфигурирование, программирование в 1С Предприятие 8 -
►
Нужно получить должность текущего пользователя
Похожие темы (5)