суббота, 24 августа 2013 г.

Стандартная функция для получения ответственных лиц в УНФ

Для получения ответственных лиц организации (директора, бухгалтера и пр.) можно воспользоваться стандартной функцией, которая есть в УНФ. Расположена она в общем модуле УправлениеНебольшойФирмойСервер:
// Функция возвращает информацию об ответственных лицах организации и их
// должностях.
//
// Параметры:
//  Организация - Составной тип: СправочникСсылка.Организации,
//                 СправочникСсылка.Кассы, СправочникСсылка.МестаХранения,
//                 организационная единица, для которой необходимо получить
//                 информацию об ответственных лицах
//  ДатаСреза    - Дата - дата, на которую считываются данные.
//
// Возвращаемое значение:
//  Структура    - Структура с совокупностью данных о физических лицах
//                 структурной единицы.
//
Функция ОтветственныеЛицаОрганизационнойЕдиницы(ОрганизационнаяЕдиница, ДатаСреза) Экспорт

   
Результат = Новый Структура("ФИОРуководителя, РуководительДолжность, ФИОГлавногоБухгалтера, ФИОКассира, ФИОКладовщика, КладовщикДолжность");

    Если
ОрганизационнаяЕдиница <> Неопределено Тогда

       
Запрос = Новый Запрос;
       
Запрос.УстановитьПараметр("ДатаСреза", ДатаСреза);
       
Запрос.УстановитьПараметр("ОрганизационнаяЕдиница", ОрганизационнаяЕдиница);


       
Запрос.Текст =
       
"ВЫБРАТЬ
        |   ОтветственныеЛицаСрезПоследних.Организация КАК ОрганизационнаяЕдиница,
        |   ОтветственныеЛицаСрезПоследних.ТипОтветственногоЛица КАК ТипОтветственногоЛица,
        |   ВЫБОР
        |       КОГДА ФИОФизЛицСрезПоследних.ФизЛицо ЕСТЬ NULL
        |           ТОГДА ОтветственныеЛицаСрезПоследних.Сотрудник.Наименование
        |       ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Имя, 1, 1) + "". "" + ПОДСТРОКА(ФИОФизЛицСрезПоследних.Отчество, 1, 1) + "".""
        |   КОНЕЦ КАК ФизическоеЛицо,
        |   ОтветственныеЛицаСрезПоследних.Должность.Наименование КАК НазваниеДолжности
        |ИЗ
        |   РегистрСведений.ОтветственныеЛица.СрезПоследних(&ДатаСреза, Организация = &ОрганизационнаяЕдиница) КАК ОтветственныеЛицаСрезПоследних
        |       ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
        |       ПО ОтветственныеЛицаСрезПоследних.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо"
;

       
Выборка = Запрос.Выполнить().Выбрать();

        Пока
Выборка.Следующий() Цикл
            Если
Выборка.ТипОтветственногоЛица  = Перечисления.ТипыОтветственныхЛиц.Руководитель Тогда
               
Результат.ФИОРуководителя       = Выборка.ФизическоеЛицо;
               
Результат.РуководительДолжность = Выборка.НазваниеДолжности;
            ИначеЕсли
Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.ГлавныйБухгалтер Тогда
               
Результат.ФИОГлавногоБухгалтера = Выборка.ФизическоеЛицо;
            ИначеЕсли
Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Кассир Тогда
               
Результат.ФИОКассира            = Выборка.ФизическоеЛицо;
            ИначеЕсли
Выборка.ТипОтветственногоЛица = Перечисления.ТипыОтветственныхЛиц.Кладовщик Тогда
               
Результат.ФИОКладовщика         = Выборка.ФизическоеЛицо;
               
Результат.КладовщикДолжность    = Выборка.НазваниеДолжности;
            КонецЕсли;

        КонецЦикла;
    КонецЕсли;

    Возврат
Результат

КонецФункции // ОтветственныеЛицаОрганизационнойЕдиницы()

А вот пример вызова этой функции:
Руководители УправлениеНебольшойФирмойСервер.ОтветственныеЛицаОрганизационнойЕдиницы(Шапка.Организация, Шапка.ДатаДокумента);
Руководитель Руководители.ФИОРуководителя;
СтаршийКассир Руководители.ФИОКассира;
ДолжностьРуководителя = Руководители.РуководительДолжность;


Добавить комментарий

Комментариев нет :

Отправить комментарий