![]() |
![]() |
|
Получить GUID руководителя подразделения в ЗУП по GUID подразделения | ☑ | ||
---|---|---|---|---|
0
grayyr
03.07.13
✎
13:56
|
Доброго времени суток.
Введение. Занимаюсь интеграцией системы документооборота с 1С ЗУП 8.2. Необходимо импортировать несколько справочников (в том числе "Сотрудники" и "Подразделения организаций") из 1С в документооборот. Справочники успешно импортируются, с этим я разобрался. У меня проблема как штатными средствами 1С получить GUID сотрудника, являющегося руководителем подразделения имея только GUID и код подразделения. Самостоятельно выстроить цепочку действий для извлечения руководителя из регистра сведений не получилось. Конфигуация - 1С Предприятие 8.2 ЗУП 2.5. Подскажите, если не сложно. Спасибо. |
|||
1
Sammo
03.07.13
✎
13:58
|
1. Получить ссылку подразделения по гуиду.
2. Получить ссылку руководителя по ссылке подразделения. 3. Получить гуид сотрудника по ссылке из пункта 2 |
|||
2
grayyr
03.07.13
✎
14:20
|
1. Получить ссылку подразделения по гуиду.
Это видимо так: Справочники.ПодразделенияОрганизаций.ПолучитьСсылку(гуид); 2. Получить ссылку руководителя по ссылке подразделения. А это как сделать? В подразделении нету реквизита "Руководитель"... |
|||
3
ale-sarin
03.07.13
✎
14:24
|
(2) Видимо есть регистр сведений, где связаны подразделение и руководитель?
|
|||
4
Sammo
03.07.13
✎
14:41
|
(2) Обычно гуид - строка, тогда
ПолучитьСсылку(Новый УникальныйИдентификатор(гуид)) Регистр сведений наподобие ответственные лица. Не помню что там в ЗУП-е |
|||
5
grayyr
03.07.13
✎
14:41
|
Есть регистр сведений "ОтветственныеЛица", у него есть измерение "СтруктурнаяЕдиница" с типом Справочник.Подразделения. А у меня ссылка на Справочник.ПодразделенияОрганизаций. Подойдёт?
Но сотрудника-то в регистре всё равно нету... |
|||
6
kosts
03.07.13
✎
14:46
|
(5) Еще там есть ФизическоеЛицо и Должность
|
|||
7
almar
03.07.13
✎
14:48
|
(5) Регистр сведений ОтветственныеЛицаОрганизаций
|
|||
8
grayyr
03.07.13
✎
15:02
|
Точно, есть ещё один регистр сведений с ФизЛицом и Должностью.
Но мне-то нужен Сотрудник, а у ФизЛица может быть несколько сотрудников. Как выбрать? |
|||
9
Мыш
03.07.13
✎
15:05
|
(8) Выбирай последнего принятого, работающего не по совместительству.
|
|||
10
acsent
03.07.13
✎
15:10
|
ты не програмно можешь найти руководителя подразделения?
|
|||
11
grayyr
03.07.13
✎
15:19
|
(10) в карточке показывает ссылку с ФИО и должностью. При нажатии открывается табличка с такими же колонками. Видимо это и есть тот самый регистр...
|
|||
12
almar
03.07.13
✎
15:22
|
"Лыжники, догадался Штирлиц"
|
|||
13
hhhh
03.07.13
✎
15:50
|
(11) сотрудника в документообороте надо к физлицу в ЗУПЕ привязать. Чтобы не путаться.
|
|||
14
grayyr
03.07.13
✎
15:58
|
(13) Сотрудники и ФизЛица в документообороте связаны. Я другого понять не могу - в табличке которая показывает содержимое регистра даёт выбрать именно сотрудника, хотя такого реквизита в регистре нет. Как мне программно выйти на сотрудника через регистр?
|
|||
15
grayyr
04.07.13
✎
15:37
|
Кажется дошло.
По подразделению невозможно однозначно установить связь между подразделением и сотрудником, поскольку таковая связь не предусмотрена технологией :) При задании руководителя выбирается сотрудник, но в регистр записывается только физлицо. А должность выбирается из отдельного справочника и никак не связана с выбранным сотрудником. Остаётся сделать выборку работающих сотрудников заданного физлица и взять из неё первого... |
|||
16
grayyr
05.07.13
✎
09:38
|
Вот что получилось:
// Функция возвращает GUID руководителя подразделения по GUID подразделения. Функция ПолучитьРуководителяПодразделения(ПодразделениеГУИД) Экспорт РуководительГУИД = ""; РуководительГУИДУволенный = ""; ПодрСсылка = Справочники.ПодразделенияОрганизаций.ПолучитьСсылку(Новый УникальныйИдентификатор(ПодразделениеГУИД)); Отбор = Новый Структура; Отбор.Вставить("СтруктурнаяЕдиница", ПодрСсылка); Отбор.Вставить("ОтветственноеЛицо", Перечисления.ОтветственныеЛицаОрганизаций.Руководитель); СрезПоследних = РегистрыСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(ТекущаяДата(), Отбор); Если СрезПоследних.Количество() > 0 Тогда Если ЗначениеЗаполнено(СрезПоследних[0].ФизическоеЛицо) Тогда ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Сотрудники.Ссылка, Сотрудники.Код, Сотрудники.Наименование, Сотрудники.ДатаУвольнения |ИЗ | Справочник.СотрудникиОрганизаций КАК Сотрудники |ГДЕ | (Сотрудники.ФизЛицо = &ФизЛицо)"; // и Сотрудники.ДатаУвольнения = NULL Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("ФизЛицо", СрезПоследних[0].ФизическоеЛицо); Рез = Запрос.Выполнить(); Если Рез.Выбрать().Количество() > 0 Тогда Выборка = Рез.Выбрать(); Пока Выборка.Следующий() Цикл Если Not (ЗначениеЗаполнено(Выборка.ДатаУвольнения)) Тогда РуководительГУИД = Строка(Выборка.Ссылка.УникальныйИдентификатор()); Иначе РуководительГУИДУволенный = Строка(Выборка.Ссылка.УникальныйИдентификатор()); КонецЕсли; КонецЦикла; Если Not (ЗначениеЗаполнено(РуководительГУИД)) Тогда РуководительГУИД = РуководительГУИДУволенный; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Возврат РуководительГУИД; КонецФункции // ПолучитьРуководителяПодразделения(ПодразделениеГУИД) Спасибо всем кто помог. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |