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

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

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

Автор: kanibal23 05.06.18, 15:03

нужно по нажатию кнопки обновить список

код

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();              
    Для каждого Соединение Из МассивСоединений Цикл
    РегистрСведений  = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
    //РегистрСведений.Отбор.Пользователь.Установить(Соединение.Пользователь.Имя);

        
        НоваяЗапись  = НаборЗаписей.Добавить();
        НоваяЗапись.Пользователь = Соединение.Пользователь.Имя;
        Сообщить("Имя: "+Соединение.Пользователь.Имя);
    КонецЦикла;
    
     РегистрСведений.Записать();


Сообщения это так для теста - но оно работает аа вот записи нету

Может туповатый вопрос но уже голова пухнит

 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 5
 

Автор: logist 05.06.18, 15:47

СоздатьНабор вынесите за цикл

ну и РегистрСведений.Добавить()

Автор: Bernet 05.06.18, 15:47

kanibal23 @ Сегодня, 16:03 * ,
что за переменная

Цитата
НаборЗаписей
? по логике должна быть "РегистрСведений" и объявляйте её за циклом - иначе получите в конце запись из одного пользователя

Автор: kanibal23 06.06.18, 6:56

Типа этого

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
    РегистрСведений  = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
    НоваяЗапись  = РегистрСведений.Добавить();
    Для каждого Соединение Из МассивСоединений Цикл
       РегистрСведений.Отбор.Пользователь.Установить(Соединение.Пользователь.Имя);  
       НоваяЗапись.Пользователь = РегистрСведений.Отбор.Пользователь;
       Сообщить("Имя: "+Соединение.Пользователь.Имя);
    КонецЦикла;
    
     РегистрСведений.Записать();

но вот только записывает одного пустого пользователя

Bernet @ Вчера, 16:47 * ,
тут реально тупнул просто столько раз переписывал что и не заметил

Автор: sava1 06.06.18, 7:41

НоваяЗапись = ....Добавить()
в цикл

Автор: kanibal23 06.06.18, 8:27

sava1 @ Сегодня, 8:41 * ,
пробовал пустое значение

Автор: Bernet 06.06.18, 8:35

kanibal23 @ Сегодня, 9:27 * ,

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
НаборЗаписей  = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
Для каждого Соединение Из МассивСоединений Цикл
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Пользователь = Соединение.Пользователь.Имя;
      Сообщить("Имя: "+Соединение.Пользователь.Имя);
КонецЦикла;    
НаборЗаписей.Записать();

Автор: kanibal23 06.06.18, 11:23

Bernet @ Сегодня, 9:35 * ,
побывал и так
так выпадает ошибка
Запись с такими ключевыми полями существует! : АктивныеПользователиЧата: (Регистр сведений: Активные пользователи чата; Номер строки: 2)

Автор: Bernet 06.06.18, 11:26

kanibal23 @ Сегодня, 12:23 * ,
Либо чистить регистр перед каждой записью, либо делать его периодическим, либо как вариант попробуйте

НаборЗаписей.Записать(Истина);

должно заменить существующие строки по идее

Автор: kanibal23 06.06.18, 11:30

&НаСервереБезКонтекста
Процедура ОбновитьПользователей()
    НаборЗаписей = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();    
    НаборЗаписей.Записать();

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
РегистрСведений= РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
УстановитьПривилегированныйРежим(Истина);
РегистрСведений .Прочитать();
Для каждого Соединение Из МассивСоединений Цикл
    НоваяЗапись = РегистрСведений.Добавить();
    НоваяЗапись.Пользователь = Соединение.Пользователь.Имя;
    Сообщить("Имя: "+Соединение.Пользователь.Имя);     
КонецЦикла;    
РегистрСведений.Записать();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
    ОбновитьПользователей();
КонецПроцедуры


вощим вот полностью последний код


Bernet @ Сегодня, 12:26 * ,
в самом начале очищается

Автор: sava1 06.06.18, 12:41

Цитата(kanibal23 @ 06.06.18, 12:23) *
ак выпадает ошибка
Запись с такими ключевыми полями существует! : АктивныеПользователиЧата: (Регистр сведений: Активные пользователи чата; Номер строки: 2)


это говорит лишь о том, что Вы не установили отбор по измерению.

Автор: kanibal23 06.06.18, 13:12

От ошибки избавился

&НаСервереБезКонтекста
Процедура ОбновитьПользователей()
    НаборЗаписей = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();

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


Но все ровно записывает пустое значение

Цитата(sava1 @ 06.06.18, 13:41) *
это говорит лишь о том, что Вы не установили отбор по измерению.



ААА более о простом подумать не как
Если убрала ошибку
оно не понимала как Администратор находится в системе два раза


Автор: sava1 06.06.18, 14:28

попробуйте через менеджер записать по одной записи

Цитата(kanibal23 @ 06.06.18, 14:12) *
оно не понимала как Администратор находится в системе два раза


Для "оно" пофиг скоко и чего находится в системе - для "оно" важно, как Вы с "им" работаете.

Автор: kanibal23 06.06.18, 15:24

Цитата(sava1 @ 06.06.18, 15:28) *
Для "оно" пофиг скоко и чего находится в системе - для "оно" важно, как Вы с "им" работаете.

далеко не пофиг даже вручную добавить вторую такую же запись не возможно

Правда если записывать так

МенеджерЗаписиАктивныеПользователи = РегистрыСведений.АктивныеПользователиЧата.СоздатьМенеджерЗаписи();
    УстановитьПривилегированныйРежим(Истина);
    МенеджерЗаписиАктивныеПользователи.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    Попытка
        МенеджерЗаписиАктивныеПользователи.Записать();
    Исключение
    КонецПопытки;
    УстановитьПривилегированныйРежим(Ложь);


И удалять так

МенеджерЗаписи = РегистрыСведений.АктивныеПользователиЧата.СоздатьМенеджерЗаписи();
        УстановитьПривилегированныйРежим(Истина);
    МенеджерЗаписи.Пользователь = ПараметрыСеанса.ТекущийПользователь;
    МенеджерЗаписи.Прочитать();
    МенеджерЗаписи.Удалить();
    УстановитьПривилегированныйРежим(Ложь);


все работает
Но это стоит при старте и закрытий формы
Но бывает если я всех кикаю из базы пользователи остаются в чате активными вот и хачю сделать модуль обновления списка

Автор: kanibal23 07.06.18, 14:17

НаборЗаписей = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();

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


Кабы работает но первые несколько минут
Потом появляются Фоновые задания и тогда записывает пустого пользователя как их отсеч

Победил вдруг кому пригладится
&НаСервереБезКонтекста
Процедура ОбновитьПользователей()
    НаборЗаписей = РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
РегистрСведений= РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
УстановитьПривилегированныйРежим(Истина);
РегистрСведений .Прочитать();
Для каждого Соединение Из МассивСоединений Цикл    
    Сообщить("Имя: "+Соединение.Пользователь.Имя+"/ приложение "+Соединение.ИмяПриложения);
    Если НЕ ПредставлениеПриложения(Соединение.ИмяПриложения)= "Конфигуратор" И НЕ Соединение.ИмяПриложения = "BackgroundJob"  Тогда  
    НоваяЗапись = РегистрСведений.Добавить();
    НоваяЗапись.Пользователь = Справочники.Пользователи.НайтиПоНаименованию(Соединение.Пользователь.Имя, Истина);
КонецЕсли;

КонецЦикла;
РегистрСведений.Записать(Истина);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

Автор: andr_andrey 08.06.18, 11:30

kanibal23 @ Вчера, 15:17 * ,

Цитата(kanibal23 @ 07.06.18, 15:17) *
    НаборЗаписей.Прочитать();
    НаборЗаписей.Очистить();
    НаборЗаписей.Записать();

Зачем, если можно просто
// !!! РегистрСведений .Прочитать();
Для каждого Соединение Из МассивСоединений Цикл    
    Сообщить("Имя: "+Соединение.Пользователь.Имя+"/ приложение "+ПредставлениеПриложения(Соединение.ИмяПриложения));
    Если НЕ ПредставлениеПриложения(Соединение.ИмяПриложения)= "Конфигуратор"  Тогда        
    НоваяЗапись = РегистрСведений.Добавить();
    НоваяЗапись.Пользователь = Справочники.Пользователи.НайтиПоНаименованию(Соединение.Пользователь.Имя, Истина);
    КонецЕсли;
КонецЦикла;
РегистрСведений.Записать(Истина);

который просто заменит все записи регистра сведений?

Автор: kanibal23 11.06.18, 7:07

andr_andrey @ 08.06.18, 12:30 * ,

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
РегистрСведений= РегистрыСведений.АктивныеПользователиЧата.СоздатьНаборЗаписей();
УстановитьПривилегированныйРежим(Истина);
РегистрСведений .Прочитать();
Для каждого Соединение Из МассивСоединений Цикл    
    //Сообщить("Имя: "+Соединение.Пользователь.Имя+"/ приложение "+Соединение.ИмяПриложения);
    Если ЛЕВ(Соединение.ИмяПриложения,4)="1CV8"  Тогда   //НЕ ПредставлениеПриложения(Соединение.ИмяПриложения)= "Конфигуратор" И НЕ Соединение.ИмяПриложения = "BackgroundJob"
    НоваяЗапись = РегистрСведений.Добавить();
    НоваяЗапись.Пользователь = Справочники.Пользователи.НайтиПоНаименованию(Соединение.Пользователь.Имя, Истина);
КонецЕсли;

КонецЦикла;
РегистрСведений.Записать(Истина);
УстановитьПривилегированныйРежим(Ложь);


тогда во так уж


ААА верхняя часть нужна чтобы стереть записи и не было конфликта одинаковых имён

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