@Soceine

Как автоматически проставлять автора в 1с?

Помогите пожалуйста разобраться.
Есть документ "Запись Клиента", "Поставление Товаров И Услуг" и "Реализация товаров".
У всех есть поле автор (ответственный). В него нужно записать текущего пользователя (автоматически).
Пользователь должен заполняться при создании документа. Пользователь должен заполняться, при открытии ранее созданного документа, если в документе не был заполнен автор. Для документов, с заполненным пользователем значение не должно изменяться автоматически.
Создал Параметры сеанса "ТекущийПользователь"
В модуль объекта "Запись Клиента" написал следующий код :
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	Если НЕ ЗначениеЗаполнено(Автор) Тогда
		Автор = ПараметрыСеанса.ТекущийПользователь;
		КонецЕсли;
	КонецПроцедуры

Вот так уже выглядит модуль сеанса, который я нашел на просторах интернета, но так и не разобрался с ним
Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
      
	Если ИменаПараметровСеанса = Неопределено Тогда
      //////////////////////////////////////////
Иначе
    
    УстановленныеПараметры = Новый Массив;
    Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
        УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры);
    КонецЦикла;

КонецЕсли;

КонецПроцедуры

Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)

Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда

    Возврат;

КонецЕсли;

Если ИмяПараметра = "ТекущийПользователь" Тогда 

    ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();

    Если ПользовательИБ = Неопределено Тогда

        возврат;

    КонецЕсли;

    ТекущийПользователь = Справочники.Пользователи.НайтиПоКоду(ПользовательИБ.УникальныйИдентификатор); 

    Если ТекущийПользователь.Пустая() Тогда 

        ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); 

        ПользовательОбъект.Код = ПользовательИБ.УникальныйИдентификатор;

        ПользовательОбъект.Наименование = ПользовательИБ.Имя;

        ПользовательОбъект.Записать();

        ТекущийПользователь = ПользовательОбъект.Ссылка;

    КонецЕсли;

    ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

КонецЕсли;

УстановленныеПараметры.Добавить(ИмяПараметра);

КонецПроцедуры

Буду благодарен всем, кто сможет уделить время на простое пояснение новичку.
  • Вопрос задан
  • 793 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Dementor
программист, архитектор, аналитик
Пользователь должен заполняться при создании документа. Пользователь должен заполняться, при открытии ранее созданного документа, если в документе не был заполнен автор.

Ты решил использовать событие записи документа - это противоречит постановке задачи. Там требуют устанавливать автора (если он отсутствует) при открытии документа (при создании формы).

Создал Параметры сеанса "ТекущийПользователь"

Т.е. у тебя какая-то своя конфа, которую пишешь с нуля? Ну тогда не сильно заморачивайся - в модуле установки параметров сеанса оставь код по запросу параметра пользователя (сюда 1С стучится, когда кто-то явно запрашивает параметр сеанса - если кода установки нет, то будет ошибка обращения к неинициированному параметру), где оставь как в твоем примере получение текущего пользователя ИБ и поиск по идентификатору в справочнике пользователей.

У тебя же справочник Пользователей самостоятельно заполняется по данным пользователей ИБ? Если нет, то задача не имеет решения, так как сначала нужно связать пользователей ИБ и элементы справочника для указания авторства документов. Для сдачи задачи можешь временно сделать поиск по наименованию и вручную проконтролируй, чтобы имена справочника Пользователи соответствовали логинам системы.
Ответ написан
fosihas
@fosihas
Автоматизации учета на 1С.
Так из любопытства, по каким материал учишься...

Что мне известны, во всех описано работа с пользователями. т.ч. приведены примеры работы.
Ответ написан
@Slava77777
Только увидел, сам учусь. Ну вот по идее, я бы сделал так в модуле формы документа, там есть 2 стандартные процедуры:
ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПриПовторномОткрытии()

Добавил бы в них строку:
Объект.Автор = ИмяПользователя();

абыл написать, поле Автор должно иметь строковый Тип, ну и символов чтобы хватало и проблем нет
не в ту ветку написал, извиняюсь за дубль сообщения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы