Не понимаю, почему мой код выдаёт ошибку

Рейтинг: -1Ответов: 2Опубликовано: 15.05.2023

Не понимаю, почему мой код выдаёт ошибку, я студент, так что ошибка может быть очень тупой, но я уже не знаю что делать

Кучу времени уже потратил на различные форумы и видео по 1С, но так и не понял, как решить мою проблему с кодом. Вот сам код.

и ошибка введите сюда описание изображения

Код в текстовом формате.

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

Ответы

▲ 0

Для работы с пользователями используйте ПользователиИнформационнойБазы вместо ПользовательИнформационнойБазы

Описание в документации:

ПользователиИнформационнойБазы (InfoBaseUsers)
Использование:
Только чтение.
Описание:
Тип: МенеджерПользователейИнформационнойБазы.
Используется для управления списком пользователей информационной базы.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).

А вот результатом работы поиска будет объект ПользовательИнформационнойБазы

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

▲ 0

У вас синтаксические ошибки.

  1. нет ключевого слов Процедура и КонецПроцедуры;

  2. элементы справочника создаются при помощи метода СоздатьЭлемент() Должно быть вот так примерно:

    Процедура ЛюбоеИмяПроцедуры() Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Пользователь.Логин КАК Логин, | Пользователь.УникальныйИдентификатор КАК УникальныйИдентификатор |ИЗ | Справочник.Пользователь КАК Пользователь |ГДЕ | Пользователь.Логин = &Логин"; Запрос.УстановитьПараметр("Логин", Объект.Логин); Результат = Запрос.Выполнить().Выбрать();

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