Коллеги, сегодня мы разберем одну из частых и весьма досадных проблем, с которой сталкиваются пользователи и администраторы в 1С:Предприятие 7.7 — это ошибка «Пользователь не найден». Она проявляется, как правило, при попытке входа в информационную базу под определенной учетной записью. Нам предстоит проанализировать, почему система не может идентифицировать пользователя, несмотря на его наличие в справочнике сотрудников, и найти эффективные пути решения.
Представим ситуацию: вы или ваш коллега пытаетесь запустить информационную базу 1С:Предприятие 7.7, вводя логин и пароль, а в ответ система выдает сообщение об ошибке: «Пользователь не найден». На первый взгляд, это кажется абсурдным, ведь вы уверены, что пользователь существует как в списке пользователей информационной базы, так и в соответствующем справочнике конфигурации. Это сообщение — сигнал к тому, что система не смогла корректно сопоставить текущего входящего пользователя с имеющимися данными в конфигурации. Давайте шаг за шагом выясним, почему это происходит и как устранить данную проблему.
Первым делом, когда мы сталкиваемся с ошибкой «Пользователь не найден», нам следует обратить самое пристальное внимание на глобальный модуль конфигурации. Именно там, в процедуре с названием ПриНачалеРаботыСистемы(), чаще всего кроется корень проблемы.
Что такое ПриНачалеРаботыСистемы()? Это специальная системная процедура, которая выполняется в самом начале работы любого пользователя с информационной базой, еще до того, как открывается основное окно программы. В ней обычно прописываются следующие действия:
Если в процессе выполнения этой процедуры система не может найти текущего пользователя в определенных справочниках или регистрах, или же не соблюдается какое-либо условие, она может сгенерировать ошибку «Пользователь не найден» и запретить вход, устанавливая СтатусВозврата(0). Наша задача — выяснить, как именно происходит этот поиск и какие условия не выполняются.
Для того чтобы понять, почему пользователь не находится, нам необходимо детально проанализировать логику поиска, реализованную в процедуре ПриНачалеРаботыСистемы(). Обычно поиск может осуществляться несколькими способами:
ПользователиИБ (системный список пользователей информационной базы) и пытается найти соответствующий элемент в справочнике «Сотрудники» или другом аналогичном справочнике по реквизиту, который хранит это имя.Нам важно найти в коде строки, которые отвечают за этот поиск. Мы можем воспользоваться встроенными средствами конфигуратора 1С 7.7 для поиска текста. Откройте глобальный модуль, выберите «Правка» -> «Найти» и попробуйте ввести такие фразы, как:
"не найден""пользователь не найден""идентификация""текущий пользователь""справочник.сотрудники"После того как вы обнаружите фрагмент кода, выдающий это сообщение, внимательно изучите условия и алгоритм, по которому происходит поиск. Возможно, там есть проверка на наличие элемента справочника или на соответствие какого-либо реквизита.
Пример гипотетического кода в процедуре ПриНачалеРаботыСистемы(), который может вызвать ошибку:
Процедура ПриНачалеРаботыСистемы()
Перем ИмяТекущегоПользователя;
Перем ВыбСотрудник;
ИмяТекущегоПользователя = ИмяПользователя(); // Получаем имя текущего пользователя ИБ
// Пытаемся найти сотрудника в справочнике "Сотрудники" по имени пользователя ИБ
ВыбСотрудник = Справочник.Сотрудники.НайтиПоРеквизиту("КодПользователяИБ", ИмяТекущегоПользователя, 0);
Если ВыбСотрудник.Пустой() = 1 Тогда
Сообщить("Пользователь " + ИмяТекущегоПользователя + " не найден в списке сотрудников!");
СтатусВозврата(0); // Запрещаем вход
Возврат;
КонецЕсли;
// Дальнейшая логика инициализации для найденного сотрудника
// ...
КонецПроцедуры
В этом примере мы видим, как система ищет сотрудника по реквизиту КодПользователяИБ. Если элемент не найден, выдается сообщение и вход запрещается. Нам нужно будет проверить, почему НайтиПоРеквизиту() возвращает пустой результат.
Важнейшим аспектом, который часто вызывает ошибку «Пользователь не найден», является некорректная или отсутствующая связь между двумя различными сущностями в 1С 7.7:
ПользователиИБ: Это системный список пользователей информационной базы, который вы администрируете через Конфигуратор (меню «Администрирование» -> «Пользователи»). Здесь хранятся логины и пароли для входа в 1С.Сотрудники (или аналогичный): Это обычный справочник в вашей конфигурации (например, «Сотрудники», «Физические лица» и т.п.), который предназначен для хранения информации о сотрудниках вашей организации. Этот справочник часто используется для привязки реальных сотрудников к системным пользователям 1С.Несмотря на то что Демид может быть добавлен в обоих списках, их связь должна быть корректно установлена программой. В большинстве типовых конфигураций 1С 7.7 для этой связи используется специальный реквизит в справочнике «Сотрудники».
Как правило, в справочнике «Сотрудники» (или его аналоге) создается строковый реквизит, например, КодПользователяИБ или ИмяПользователяИБ. В этот реквизит вручную или автоматически записывается точное имя пользователя из списка ПользователиИБ. Именно по этому реквизиту система ищет соответствие. Если этот реквизит заполнен неверно, не заполнен вовсе или содержит неточности, система не сможет найти пользователя, даже если он физически присутствует в справочнике.
Нам следует выполнить следующие проверки:
КодПользователяИБ). Это значение должно быть абсолютно идентично имени пользователя из списка ПользователиИБ.Вот где часто кроются ошибки, о которых нам напомнили коллеги на форуме.
Даже если вы уверены, что реквизит КодПользователяИБ заполнен, есть несколько нюансов, которые могут привести к ошибке:
ПользователиИБ – «Демид», а в реквизите КодПользователяИБ – «демид», то система может посчитать их разными. Всегда используйте точное соответствие регистра.КодПользователяИБ случайно введена латиница (или наоборот), система не найдет совпадения.Например, если пользователь ИБ – Белов (с русской «е»), а в справочнике «Сотрудники» в реквизите КодПользователяИБ указано Белoв (с латинской «o»), то для 1С это будут два разных значения.
ПользователиИБ, так и в реквизите справочника. Иногда могут присутствовать невидимые символы, например, неразрывные пробелы, которые глазу незаметны, но для системы меняют строку.Для проверки на такие ошибки, скопируйте имя пользователя из списка ПользователиИБ и вставьте его напрямую в поле КодПользователяИБ элемента справочника «Сотрудники». Это гарантирует точное совпадение. Для массового просмотра и редактирования учетных записей можно использовать утилиту для работы со списком пользователей 1С 7.7.
Хотя проблема "Пользователь не найден" в 1С 7.7 чаще всего связана с кодом в ПриНачалеРаботыСистемы() и привязкой "Сотрудник-Пользователь ИБ", существуют и другие факторы, которые могут косвенно влиять на процесс идентификации или выдавать схожие по смыслу ошибки:
1Cv7.md, 1Cv7.dd или других может привести к непредсказуемому поведению, включая проблемы с идентификацией пользователей. В таких случаях рекомендуется выполнить тестирование и исправление информационной базы с помощью утилиты ChDBFL.exe.USRDEF внутри каталога базы). Если этот каталог поврежден или не создан, могут возникнуть проблемы при входе. Решение может включать создание отсутствующего каталога или, в крайнем случае, удаление всей папки USRDEF (при этом будут сброшены все персональные настройки пользователей) с последующим пересозданием пользователей в конфигураторе.Давайте теперь соберем все полученные знания в единый, последовательный план действий для устранения ошибки «Пользователь не найден»:
Запишите точное имя пользователя, под которым происходит ошибка (например, "Демид"). Отметьте, в какой момент вылетает ошибка – сразу при попытке входа или после выполнения каких-либо начальных действий.
Запустите 1С:Предприятие 7.7 в режиме Конфигуратора. Если вход под этим пользователем невозможен, используйте пользователя с полными правами (например, "Администратор").
ПриНачалеРаботыСистемы():
В дереве метаданных найдите "Глобальный модуль" и откройте его. Используйте поиск (Ctrl+F) для обнаружения процедуры ПриНачалеРаботыСистемы().
Внутри этой процедуры внимательно проанализируйте код, который отвечает за идентификацию пользователя и, в частности, за поиск в справочниках (например, "Сотрудники"). Ищите строки, содержащие функции типа НайтиПоРеквизиту(), НайтиЭлемент() или любые сравнения с ИмяПользователя() или КодПользователя().
Особое внимание уделите участкам кода, где формируется или выдается сообщение об ошибке "Пользователь не найден", "не найден в списке сотрудников" или аналогичные.
ПользователиИБ:
В Конфигураторе перейдите в меню "Администрирование" -> "Пользователи". Найдите проблемного пользователя и точно скопируйте его имя (логин).
Откройте режим "Предприятие" (если это возможно). Перейдите к справочнику, который используется для привязки пользователей 1С к реальным сотрудникам (например, "Сотрудники", "Физические лица"). Найдите элемент, соответствующий проблемному пользователю (например, "Демид").
Найдите в карточке сотрудника реквизит, который используется для связи с пользователями ИБ (часто это "Код пользователя ИБ" или "Имя пользователя ИБ"). Вставьте в этот реквизит скопированное на шаге 4 имя пользователя из списка ПользователиИБ. Это гарантирует точное совпадение.
Особое внимание уделите:
Если после предыдущих шагов проблема не решена, и вы продолжаете получать ошибку, используйте встроенный отладчик 1С 7.7. Установите точку останова в начале процедуры ПриНачалеРаботыСистемы() и пошагово пройдите выполнение кода, отслеживая значения переменных, которые используются для поиска пользователя.
Обратите внимание на результат работы функций поиска (например, ВыбСотрудник.Пустой()) и на условия, которые приводят к выводу сообщения об ошибке.
Как дополнительная мера, убедитесь, что у пользователя операционной системы, под которым запускается 1С, есть полные права на каталог базы данных. Также выполните проверку и исправление информационной базы с помощью утилиты ChDBFL.exe (предварительно сделайте резервную копию).
Следуя этим шагам, вы сможете локализовать и устранить проблему "Пользователь не найден" в вашей базе 1С:Предприятие 7.7. Помните, что ключ к успеху — это внимательный анализ кода и точное соответствие данных в разных частях системы.