Версия для печати темы (https://pro1c.org.ua/index.php?s=d39ca94f33a0d4077bc75a29e8b14110&showtopic=63116)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ вывести текущего сотрудника и должность на макет в отчете

Автор: kukulkan 25.11.20, 16:35

Привет! (
Подскажите, как написать процедуру, чтобы вывести на макет в отчете текущего сотрудника и его должность?
Спасибо! 32542460.gif

Автор: Vofka 25.11.20, 17:50

Что именно не получается?

Автор: kukulkan 25.11.20, 18:29

мне кажется я перемудрила так что решила все показать. а так не выводит текущего пользователя

Процедура ПриВыводеПодвала(ПараметрыОтчета, Результат) Экспорт
    
    Если НЕ ПараметрыОтчета.ВыводитьПодписи Тогда
        Возврат;
    КонецЕсли;
    
    Макет = ПолучитьМакет("МакетПодвала");
    ОбластьИнтервал = Макет.ПолучитьОбласть("ПодписиИнтервал");
    ОбластьРуководители = Макет.ПолучитьОбласть("ПодписиРуководители");
    ОбластьМОЛ = Макет.ПолучитьОбласть("ПодписиМОЛ");
    
    Результат.Вывести(ОбластьИнтервал);
    
    Если ПараметрыОтчета.ВыводитьПодписиРуководителей Тогда
        
        Если ПараметрыОтчета.СписокСтруктурныхЕдиниц.Количество() > 0 Тогда
            ИскомаяОрганизация = ПараметрыОтчета.СписокСтруктурныхЕдиниц[0].Значение;
        Иначе
            ИскомаяОрганизация = Справочники.Организации.ПустаяСсылка();
        КонецЕсли;
        
        Если НЕ ЗначениеЗаполнено(ИскомаяОрганизация) Тогда
            ИскомаяОрганизация = ПользователиБКВызовСервераПовтИсп.ПолучитьЗначениеПоУмолчанию(Пользователи.ТекущийПользователь(),"ОсновнаяОрганизация");
            
        КонецЕсли;
        
        Если ЗначениеЗаполнено(ИскомаяОрганизация) Тогда
            ОтветЛица = ОбщегоНазначенияБКВызовСервера.ОтветственныеЛицаОрганизаций(ИскомаяОрганизация, КонецДня(ПараметрыОтчета.КонецПериода));
            Если НЕ ЗначениеЗаполнено(ОтветЛица.РуководительДолжность) Тогда
                ОтветЛица.РуководительДолжность     = НСтр("ru = 'Руководитель'");
            КонецЕсли;
            Если НЕ ЗначениеЗаполнено(ОтветЛица.ГлавныйБухгалтерДолжность) Тогда
                ОтветЛица.ГлавныйБухгалтерДолжность = НСтр("ru = 'Главный бухгалтер'");
            КонецЕсли;
            
            
            ОбластьРуководители.Параметры.Заполнить(ОтветЛица);
        Иначе
            ОтветЛица = Новый Структура("РуководительДолжность, ГлавныйБухгалтерДолжность",
                                         НСтр("ru = 'Руководитель'"), НСтр("ru = 'Главный бухгалтер'"));
        КонецЕсли;
        ОбластьРуководители.Параметры.Заполнить(ОтветЛица);
        
        Результат.Вывести(ОбластьРуководители);
        
    КонецЕсли;
    
    // попытаемся определить ответственного по складу, если отбор установлен
    ОтборПоСкладу = Неопределено;
    ИскомыйСклад  = Неопределено;
    Для Каждого ЭлементОтбора Из ПараметрыОтчета.НастройкиКомпоновкиДанных.Отбор.Элементы Цикл
        Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") И ВРег(ЭлементОтбора.ЛевоеЗначение) = "СКЛАД" Тогда
            ОтборПоСкладу = ЭлементОтбора;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если ОтборПоСкладу <> Неопределено И ОтборПоСкладу.Использование Тогда
        
        Склады = ОтборПоСкладу.ПравоеЗначение;
        
        // в отборе может присутствовать список складов
        Если ТипЗнч(Склады) = Тип("СписокЗначений") Тогда
            Если Склады.Количество() > 0 Тогда
                ИскомыйСклад = Склады[0].Значение;
            КонецЕсли;
        ИначеЕсли ТипЗнч(Склады) = Тип("СправочникСсылка.Склады") Тогда
            ИскомыйСклад = Склады;
        КонецЕсли;
    КонецЕсли;
    
    // если ничего не нашли, то берем из настроек пользователя
    Если Не ЗначениеЗаполнено(ИскомыйСклад) Тогда
        ИскомыйСклад = ПользователиБКВызовСервераПовтИсп.ПолучитьЗначениеПоУмолчанию(Пользователи.ТекущийПользователь(), "ОсновнойСклад");                    
    КонецЕсли;
                          
    ОтветЛицо = ПрочитатьОтветственноеЛицо(ИскомыйСклад);
    Если Не ОтветЛицо = Неопределено Тогда
        ОбластьМОЛ.Параметры.ОтветственноеЛицо = ОбщегоНазначенияБК.ФамилияИнициалыФизЛица(ОтветЛицо);
    КонецЕсли;
    ПодписиМол = Макет.ПолучитьОбласть("ПодписиМол");
    ПодписиМОЛ.Параметры.ТекущийПользователь =
    //Пользователи.ТекущийПользователь();
    ПользователиИнформационнойбазы.ТекущийПользователь();
    Результат.Вывести(ОбластьМОЛ);
        
    
    
КонецПроцедуры
  Функция ПолучитьТекущегоПользователя () Экспорт
    п = ПользователиИнформационнойБазы.ТекущийПользователь();
    польз =  Справочники.Пользователи.НайтиПоНаименованию(п.Имя);
    Если польз = Справочники.Пользователи.ПустаяСсылка() Тогда
        Возврат -1;
    Иначе
        Возврат Справочники.Пользователи.НайтиПоНаименованию(п.Имя);
    КонецЕсли;
КонецФункции



 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 9
 

Автор: Vofka 25.11.20, 18:46

Тут должно выводиться?

ПодписиМОЛ.Параметры.ТекущийПользователь = ПользователиИнформационнойбазы.ТекущийПользователь();

Автор: kukulkan 25.11.20, 18:50

Vofka @ Сегодня, 19:46 * ,
да sad.gif

Автор: Yevhenii_S 26.11.20, 10:47

kukulkan @ Вчера, 19:29 * ,
по моему, Вы параметр заполняете в одной области, а выводите другую...

ПодписиМол = Макет.ПолучитьОбласть("ПодписиМол");
ПодписиМОЛ.Параметры.ТекущийПользователь =
//Пользователи.ТекущийПользователь();
ПользователиИнформационнойбазы.ТекущийПользователь();
Результат.Вывести(ОбластьМОЛ);

при этом все предыдущие параметры вы заполняете в "ОбластьМОЛ", в конце её же и выводите

...Далее

ПользователиИнформационнойбазы.ТекущийПользователь(); - Описание пользователя, аутентифицированного в текущем сеансе. Это не элемент справочника "пользователи"

Получаем ссылку на пользователя со справочника "пользователи"
текПользователь = Справочники.Пользователи.НайтиПоНаименованию( ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя);

Сотрудники с должностями наверняка "лежат" в справочнике "СотрудникиОрганизаций"
далее с помощью реквизита "ФизЛицо" полученого эллемента справочника получаем эллемент справочника "СотрудникиОрганизаций"

спрСотрудник = Справочники.СотрудникиОрганизаций.НайтиПоРеквизиту("ФизЛицо",текПользователь.ФизЛицо,,); / как то так

ну и выводим в параметры полученого сотрудника + должность

ПодписиМОЛ.Параметры.ТекущийПользователь = Строка(спрСотрудник.Наименование )+" || должность:"+ Строка(спрСотрудник.Должность); // естественно форматируете вывод как Вам нужно

Автор: kukulkan 26.11.20, 13:06

Yevhenii_S @ Сегодня, 11:47 * ,
Спасибо!

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua