Для получения ответственных лиц организации (директора, бухгалтера и пр.) можно воспользоваться стандартной функцией, которая есть в УНФ. Расположена она в общем модуле УправлениеНебольшойФирмойСервер:
// Функция возвращает информацию об ответственных лицах организации и их
// должностях.
//
// Параметры:
// Организация - Составной тип: СправочникСсылка.Организации,
// СправочникСсылка.Кассы, СправочникСсылка.МестаХранения,
// организационная единица, для которой необходимо получить
// информацию об ответственных лицах
// ДатаСреза - Дата - дата, на которую считываются данные.
//
// Возвращаемое значение:
// Структура - Структура с совокупностью данных о физических лицах
// структурной единицы.
//
Функция ОтветственныеЛицаОрганизационнойЕдиницы(ОрганизационнаяЕдиница, ДатаСреза) Экспорт
Результат = Новый Структура("ФИОРуководителя, РуководительДолжность, ФИОГлавногоБухгалтера, ФИОКассира, ФИОКладовщика, КладовщикДолжность");
Если ОрганизационнаяЕдиница <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаСреза", ДатаСреза);
Запрос.УстановитьПараметр("ОрганизационнаяЕдиница", ОрганизационнаяЕдиница);
Запрос.Текст =
"ВЫБРАТЬ
| ОтветственныеЛицаСрезПоследних.Организация КАК ОрганизационнаяЕдиница,
| ОтветственныеЛицаСрезПоследних.ТипОтветственногоЛица КАК ТипОтветственногоЛица,
| ВЫБОР
| КОГДА ФИОФизЛицСрезПоследних.ФизЛицо ЕСТЬ NULL
| ТОГДА ОтветственныеЛицаСрезПоследних.Сотрудник.Наименование
| ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) + "". "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) + "".""
| КОНЕЦ КАК ФизическоеЛицо,
| ОтветственныеЛицаСрезПоследних.Должность.Наименование КАК НазваниеДолжности
|ИЗ
| РегистрСведений.ОтветственныеЛица.СрезПоследних(&ДатаСреза, Организация = &ОрганизационнаяЕдиница) КАК ОтветственныеЛицаСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
| ПО ОтветственныеЛицаСрезПоследних.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Руководитель Тогда
Результат.ФИОРуководителя = Выборка.ФизическоеЛицо;
Результат.РуководительДолжность = Выборка.НазваниеДолжности;
ИначеЕсли Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.ГлавныйБухгалтер Тогда
Результат.ФИОГлавногоБухгалтера = Выборка.ФизическоеЛицо;
ИначеЕсли Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Кассир Тогда
Результат.ФИОКассира = Выборка.ФизическоеЛицо;
ИначеЕсли Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Кладовщик Тогда
Результат.ФИОКладовщика = Выборка.ФизическоеЛицо;
Результат.КладовщикДолжность = Выборка.НазваниеДолжности;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат
КонецФункции // ОтветственныеЛицаОрганизационнойЕдиницы()
// должностях.
//
// Параметры:
// Организация - Составной тип: СправочникСсылка.Организации,
// СправочникСсылка.Кассы, СправочникСсылка.МестаХранения,
// организационная единица, для которой необходимо получить
// информацию об ответственных лицах
// ДатаСреза - Дата - дата, на которую считываются данные.
//
// Возвращаемое значение:
// Структура - Структура с совокупностью данных о физических лицах
// структурной единицы.
//
Функция ОтветственныеЛицаОрганизационнойЕдиницы(ОрганизационнаяЕдиница, ДатаСреза) Экспорт
Результат = Новый Структура("ФИОРуководителя, РуководительДолжность, ФИОГлавногоБухгалтера, ФИОКассира, ФИОКладовщика, КладовщикДолжность");
Если ОрганизационнаяЕдиница <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаСреза", ДатаСреза);
Запрос.УстановитьПараметр("ОрганизационнаяЕдиница", ОрганизационнаяЕдиница);
Запрос.Текст =
"ВЫБРАТЬ
| ОтветственныеЛицаСрезПоследних.Организация КАК ОрганизационнаяЕдиница,
| ОтветственныеЛицаСрезПоследних.ТипОтветственногоЛица КАК ТипОтветственногоЛица,
| ВЫБОР
| КОГДА ФИОФизЛицСрезПоследних.ФизЛицо ЕСТЬ NULL
| ТОГДА ОтветственныеЛицаСрезПоследних.Сотрудник.Наименование
| ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) + "". "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) + "".""
| КОНЕЦ КАК ФизическоеЛицо,
| ОтветственныеЛицаСрезПоследних.Должность.Наименование КАК НазваниеДолжности
|ИЗ
| РегистрСведений.ОтветственныеЛица.СрезПоследних(&ДатаСреза, Организация = &ОрганизационнаяЕдиница) КАК ОтветственныеЛицаСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
| ПО ОтветственныеЛицаСрезПоследних.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Руководитель Тогда
Результат.ФИОРуководителя = Выборка.ФизическоеЛицо;
Результат.РуководительДолжность = Выборка.НазваниеДолжности;
ИначеЕсли Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.ГлавныйБухгалтер Тогда
Результат.ФИОГлавногоБухгалтера = Выборка.ФизическоеЛицо;
ИначеЕсли Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Кассир Тогда
Результат.ФИОКассира = Выборка.ФизическоеЛицо;
ИначеЕсли Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Кладовщик Тогда
Результат.ФИОКладовщика = Выборка.ФизическоеЛицо;
Результат.КладовщикДолжность = Выборка.НазваниеДолжности;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат
КонецФункции // ОтветственныеЛицаОрганизационнойЕдиницы()
А вот пример вызова этой функции:
Руководители = УправлениеНебольшойФирмойСервер.ОтветственныеЛицаОрганизационнойЕдиницы(Шапка.Организация, Шапка.ДатаДокумента);
Руководитель = Руководители.ФИОРуководителя;
СтаршийКассир = Руководители.ФИОКассира;
ДолжностьРуководителя = Руководители.РуководительДолжность;
Руководитель = Руководители.ФИОРуководителя;
СтаршийКассир = Руководители.ФИОКассира;
ДолжностьРуководителя = Руководители.РуководительДолжность;
Комментариев нет :
Отправить комментарий