Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как в SQLProfiler различить действия пользователей ?

Вижу в SQLProfiler плохой запрос, но как понять от какого действия какого пользователя он идет ?
Колонки ClientProcessID и SPID помочь не могут.
В консоли 1С в свойствах сеансов и соединений тоже нельзя связать с колонками SQLProfiler. Так ?
Куда посмотреть еще ?
Ответ:
Насколько помню, там можно только по времени отфильтровать, когда нужно конкретный функционал протестировать и по времени найти...
Вопрос: Журнал регистрации - не писать пользователя

Можно ли отключить запись в журнал регистрации действий одного пользователя?
Ответ: () "прописать где-нибудь если пользователь, например, Админ то в журнал регистрации не писать" // Пропиши это в письме к Нуралиеву
Вопрос: Генерация записи по имеющимся пользователям в БД

Всем привет.
Цель такая: Я организовал добавление пользователей в режиме предприятия, теперь как сделать так, что бы, если у нас есть пользователь созданный через конфигуратор (т.е. ручками) то создалась бы запись в
1C
1
Справочники.Пользователи
.
Думаю, что нужно писать код в форме списка процедура
1C
1
ПриОткрытии
.
Сам алгоритм представляю себе так: Если у нас пользователи информационной базы имеются в бд и если в справочнике пользов. нет записи, со схожим наименованием тогда создать запись. За исключением польз с именем Администратор, эта запись не должна там быть.
Вот собственно код:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
&НаСервере
Процедура ПриОткрытииНаСервере()//Добовляем пользователя "Администратор", при открытии пользователей.
    РольАдминистратор = Метаданные.Роли.Администратор;
    РольПользователь = Метаданные.Роли.Пользователь;
    АдминВБазе = ПользователиИнформационнойБазы.НайтиПоИмени("Администратор");
    Если АдминВБазе = Неопределено Тогда
        НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
        НовыйПользователь.Имя = "Администратор";
        НовыйПользователь.ПолноеИмя = "Администратор"; 
        НовыйПользователь.Пароль = "1234";
        НовыйПользователь.ПоказыватьВСпискеВыбора = Ложь;
        НовыйПользователь.Роли.Добавить(РольАдминистратор);
        НовыйПользователь.Записать();
    КонецЕсли;
    
    Выборка = Справочники.Пользователи.Выбрать();//Говоря коротка, если существует запись определенного пользователя в справочнике пользователи, но он по каким-либо причинам не содержится в таблице пользователей, след. код это исправляет. 
    Пока Выборка.Следующий() Цикл
        Если ПользователиИнформационнойБазы.НайтиПоИмени(Выборка.Наименование) = Неопределено Тогда // Если такого пользователя нет в базе
        НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
        НовыйПользователь.Имя = Выборка.Наименование;
        НовыйПользователь.ПолноеИмя = Выборка.Наименование; 
        НовыйПользователь.ПоказыватьВСпискеВыбора = Истина;
        НовыйПользователь.Роли.Добавить(РольПользователь);
        НовыйПользователь.Записать();
        КонецЕсли;  
    КонецЦикла;
    
КонецПроцедуры
 
//////////////////////////////////////////////////////////////////////////////////////////
&НаСервере
Процедура ПриОткрытииНаСервереДобавлЗапись();
    
    //спр=СоздатьОбъект("Справочник.Пользователи");
    //Если Спр.НайтиПоКоду(ИмяПользователя())=0 Тогда
    //  Спр.Новый();
    //  Спр.Код=ИмяПользователя();
    //  Спр.Записать();
    //КонецЕсли;
    //Спр.Блокировать(1);
    
    Имя = Метаданные.Имя;
    Выборка =  Справочники.Пользователи.Выбрать();
    ЮзерыИнформБазы = ПользователиИнформационнойБазы.ПолучитьПользователей();
    НоходимИмя = ЮзерыИнформБазы.Найти(Метаданные.Имя);
    Для Каждого  ФиндИмя Из 
    Если ЮзерыИнформБазы <> Неопределено и ЮзерыИнформБазы.Найти(Метаданные.Имя)= Выборка.Наименование Тогда
        
    КонецЕсли;  
        
КонецПроцедуры
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
&НаКлиенте 
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
    ПриОткрытииНаСервереДобавлЗапись();
        Если ... Сообщить("Добавлена новая запись"); 
КонецПроцедуры
Ответ:
1C
1
2
3
4
5
6
7
8
9
10
    СписокПользователей =ПользователиИнформационнойБазы.ПолучитьПользователей();
    Для Каждого Пользователь  из СписокПольЗователей цикл
        ТекПользователь =  Справочники.Пользователи.НайтиПоНаименованию(Пользователь.Имя);
        Сообщить(Пользователь);
        Если ТекПользователь.Пустая() Тогда
            Создать =  Справочники.Пользователи.СоздатьЭлемент();
            Создать.Наименование = Пользователь;
            Создать.Записать();
       КонецЕсли;
    КонецЦикла;
Вопрос: Работа со списком пользователей ИБ, связь со справочником Пользователи, вывод на форму

Хочу сделать форму администратора для работы со списком пользователей ИБ для своей самопальной конфигурации.
Загвоздка в том, что разбор типовых какого-то хорошего ответа не дает. Понятно одно, справочник Пользователи и сам список пользователей ИБ - это две разные вещи, но они как-то связаны (сопоставлены) и на форму выводятся отдельно в динамический список или что-то подобное, но запросом список пользователей ИБ, судя по всему, никак не получить.

Итак вопрос, как сопоставить справочник Пользователи и список пользователей ИБ и вывести на форму?
Ответ:
Сообщение от Void-87
Есть одна идея, при создании записи в справочнике Пользователи, генерировать аналогичную запись в Пользователях ИБ...
...и сразу в запись справочника Пользователи записывать ид сгенеренного пользователя ИБ
Сообщение от Void-87
Но такой подход даст сбой, если будет сначала админ через конфигуратор создаст пользователя ИБ
вариант1: забить на админа (не заморачиваться справочником вовсе), пусть в конфигуратор руки не сует, а заводит в пользовательском режиме (как в последних типовых).
вариант2: при запуске 1с, в случае отсутствия вошедшего пользователя ИБ в справочнике - создавать
Вопрос: Под каким пользователем выполнится команда на сервере?

Здравствуйте!
Есть Клиент-Серверный вариант поставки Конфигурации. Необходимо выполнить команду на сервере под определенным пользователем.
СМД = Новый COMОбъект("WScript.Shell");
СМД.Run(Команда);

Сами регламентные задания выполняются под тем пользователем под которым запущен сервер 1с, а вот с командами я не могу разобраться.
Под каким пользователем будет выполнена "Команда" на сервере? Как узнать под каким пользователем она выполняется?
Сделал небольшой код который из wmi получает пользователя и домен,но полученные данные какие-то странные - Пользователя такого вообще нет(полученное имя - имя компьютера).
oLocator = Новый COMОбъект("WbemScripting.SWbemLocator");
		oService = oLocator.ConnectServer(".", "root\CIMV2");
		//listOfprocessDate = oService.ExecQuery("select DNSHostName,Domain from Win32_ComputerSystem");
		listOfprocessDate = oService.ExecQuery("select * from Win32_ComputerSystem");
		
		Для Каждого Эл Из listOfprocessDate Цикл
			
			ИмяПользователя = ПолучитьЗначениеРеквизитаОбъекта(Эл,"DNSHostName");
			Домен = ПолучитьЗначениеРеквизитаОбъекта(Эл,"Domain");
			
		КонецЦикла;

Подскажите как получить имя пользователя под которым выполняются команды на стороне сервера.
Ответ:
jeep81
Здравствуйте!
Есть Клиент-Серверный вариант поставки Конфигурации. Необходимо выполнить команду на сервере под определенным пользователем.
СМД = Новый COMОбъект("WScript.Shell");
СМД.Run(Команда);

Сами регламентные задания выполняются под тем пользователем под которым запущен сервер 1с, а вот с командами я не могу разобраться.
Под каким пользователем будет выполнена "Команда" на сервере? Как узнать под каким пользователем она выполняется?
Сделал небольшой код который из wmi получает пользователя и домен,но полученные данные какие-то странные - Пользователя такого вообще нет(полученное имя - имя компьютера).
oLocator = Новый COMОбъект("WbemScripting.SWbemLocator");
		oService = oLocator.ConnectServer(".", "root\CIMV2");
		//listOfprocessDate = oService.ExecQuery("select DNSHostName,Domain from Win32_ComputerSystem");
		listOfprocessDate = oService.ExecQuery("select * from Win32_ComputerSystem");
		
		Для Каждого Эл Из listOfprocessDate Цикл
			
			ИмяПользователя = ПолучитьЗначениеРеквизитаОбъекта(Эл,"DNSHostName");
			Домен = ПолучитьЗначениеРеквизитаОбъекта(Эл,"Domain");
			
		КонецЦикла;

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

под кем служба сервера запущена под те и выполнится (можно поменять в службах винды)
Вопрос: Определение переменной по текущему пользователю

Добрый день, ситуация такова:
"Подружил" Астериск с 1С с возможностью совершения звонка из 1С.
Звонок осуществляется таким образом: пр нажатии "звонить", сначала звонит телефон исходящего номера (внутренний номер телефона), после поднятия трубки совершается звонок к набранному номеру.


Звонки будут осуществлять порядка 30-40 человек. В справочнике сотрудников существует отдельный реквизит куда вводиться внутренний номер телефона.

Существует команда Текущий пользователь, но она показывает только название пользователя.

Подскажите, как заставить 1С определять внутренний номер телефона, по текущему пользователю.

Заранее спасибо.
Ответ:
Получилось сделать вот так:

Пользователь = ПараметрыСеанса.ТекущийПользователь;
сообщить("Внутренний номер " + пользователь.ВнутреннийНомер);
Протокол = "SIP/"; // еще может быть IAX2
Откуда = Протокол+пользователь.ВнутреннийНомер;

где ВнутреннийНомер - это реквизит справочника "Пользователи", в котором хранится номер сотрудника
Вопрос: Ошибка выполнения запроса "У пользователя недостаточно прав на исполнение операции над базой данных.

Начну чуть издалека.
В конфе УТ 10.3.9.4 была необходимость ограничить пользователям просмотр некоторых элементов справочника номенклатуры. Для этого всем "скрытым" элементам был присвоен особый Вид Номенклатуры: "ВидСлужебныхТоваров" и "ВидСлужебныхУслуг", далее пользователям была присвоенна Роль "АдминистраторККМ", в Справочнике номенклатуры для этой роли на праве "Чтение" было добавленно ограничение доступа к данным:
Код:
ГДЕ ВидНоменклатуры <> &ВидСлужебныхТоваров
И ВидНоменклатуры <> &ВидСлужебныхУслуг
Вот как это выглядит на картинке:


Всё бы ничего, но вот возникла проблема:
Когда пользователь с Ролью АдминистраторККМ пытается распечатать документ "Возврат товара поставщику", то в ответ выскакивает ошибка:

Вот подробное описание ошибки:


Вся проблема кроется в ограничении роли, а именно на праве чтения (как я делал выше), по крайней мере когда я убираю ограничения, всё печатается, но тогда лишние элементы в справочнике номенклатуры видны.
Как быть, что б Возврат печатался, и в справочнике номенклатуры было видно, только то, что нужно.

P.S.:Интересно, что ЧекиККМ печатаются без проблем, при этом ограничение на чтение номенклатуры присутствует.
Ответ:
При формирование Кассовой книги тоже "У пользователя недостаточно прав на исполнение операции над базой данных" хотя раньше все работало. В Журнале регистрации: Отказано в доступе: Справочник сотрудники. Не работает по своему подразделению хотя в настройках есть это ограничение. Пожалуйста помогите уже два дня борюсь. Подскажите где можно дать доступ к нужным справочникам? У пользователя выбрана роль Бухгалтер, а в конфигурации нет такой роли.

Вопрос: отчет СКД по пользователю

Подскажите пожалуйста!

1С 8.2
Конфигурация самописная

есть регистр сведений, в нем поля: Пользователь, Город, Компания, Коментарий
поле Пользователь - это тот пользователь, кто эти данные заносил.

как можно сделать так, чтобы каждый пользователь, открывая отчет видео только те записи, которые он сам заносил, а директор открывая отчет, видел все записи, всех пользователей.

забыл сказать, отчет на СКД написан.

ну и на всякий случай второй вопрос:
отчет формируется в виде таблицы, строки и колонки, колонки идет по датам группировка, можно ли после этих колонок добавить другие колонки в конце, или если нельзя, то можно ли это сделать программно, может у кого примерчик есть, а?

Спасибо всем большое!
Ответ:
Ну а где то еще может быть так что данные одного пользователя пондобяться другому? если да. то можно в отчете отбор по пользователю выводить на форму по умолчанию подставлять текущего пользователя и для обыных пользователей доступность делать ложь, что бы не могли поменять.
Если нет то можно через РЛС.
Вопрос: Дополнительные права пользователей, размышления на тему...

ПланВидовХарактеристик.ПраваПользователей -> новое предопределенное значение "Разрешить" - булево.

Как я это вижу.
Новое значение добавлено в план -> новое право отобразилось для каждого пользователя -> новое право записалось(!) в регистре "Значения доп.прав пользователя" со значением по дефолту (неопределено, ложь, ПустаяСсылка, др?). Дальше, изменяешь право тем, для кого добавлено и все гуд.

Как это работает.
Новое значение добавлено в план -> новое право отобразилось для каждого пользователя -> нового права НЕТ(!) в регистре "Значения доп.прав пользователя" (здесь можно расслабиться, я понимаю, что все логично, но! так неудобно).
Дальше, выставляешь право тем, для кого добавлено и у них(!) все гуд.
А у остальных пользователей ошибка преобразования, т.к. записи в регистре для них, оказывается, нет.
Решение: зайти в "Редактирование права" пользователя и перезаписать набор. Но! Пользователей 500шт..

Вопрос:
1) Все ок? Это так и должно работать?
2) Чего делать? Писать обработку? Или, возможно, все уже написано до нас?
Ответ: Все настолько плохо?
При записи нового пользователя, для него не создается набор доп прав в регистре. Это же не логично. Это практически каждый раз ошибка при обращении к доп правам, потому что при создании пользователей, о каком-то левом регистре с правами не просто не думаешь, некоторые даже не знают о его существовании.. Также, при написании кода, не держишь в голове для, например, булевого значения обработку третьего варианта - значение отсутствует как факт.
Вопрос: Доступ пользователя к внешним отчетам

Добрый день! Помогите, пожалуйста, разобраться! Есть два пользователя Иванов и Петров, которые имеют одинаковые права, которые задаются через справочник "Пользователи" + имеют одинаковые настройки дополнительных прав + имеют две одинаковые роли (Пользователь + Роль1). И что мы имеем, пользователь Иванов может сформировать внешний отчет, а Пользователь Петров - нет.
При этом, если пользователю Петрову подключить Роль 2, то он тоже может формировать этот отчет, но мне не нужно давать ему эту Роль2, где "собака зарыта"?
Вот ошибка, которую выдает отчет:
{Отчет.УниверсальныйОтчет.МодульОбъекта(86)}: Ошибка при вызове метода контекста (Вывести)
ПостроительОтчета.Вывести(ТабличныйДокумент);
по причине:
Ошибка выполнения запроса
по причине:
The user doesn't have appropriate rights to execute a database operation.
Ответ:
Я и не знала о них, да реально была в этом проблема! Спасибо большое!!!!!!