Освобождение лицензий. Регламентное задание

14.05.18

База данных - Инструменты администратора БД

(Разработано для 1С:Документооборот). Доработка решает проблему недостатка лицензий при сравнительно бОльшем количестве активных пользователей. Реализуется путем наблюдения "Протокола работы пользователей" и при отсутствии активности пользователя - отключение его сеанса на сервере. У нас данная доработка включена как рег. задание в 1С:Документооборот. Убиваются все сеансы с неактивностью за последние 30 минут, запускать рег. задание можно соответственно каждые 35 минут.

Суть доработки сводится к тому, что постоянно анализируется ПротоколРаботыПользователей на наличие записей с привязкой к пользователю за последние N-минут.

выбрать * из регистрсведений.протоколработыпользователей где пользователь=&юзер и дата > &датаубийства

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

ПолучитьСеансыИнформационнойБазы()

А дальше из списка на закрытие активного сеанса выкидываются полноправные пользователи, пользователи с сеансом в Конфигураторе и пользователи, поименованные в специальной Роли, у меня для примера она называется "ПользователиНеотключаемыеПоНеактивностиСеанса". Другими словами, если вам надо сделать пользователя, который постоянно может сидеть в приложении и не бояться, что система закроет его сеанс, просто добавьте его в эту роль, это может быть полезно для делопроизводителей, топ-менеджеров.

Дальше происходит отключение сеанса пользователя, находящегося в списке на отключение, делается это с помощью функционала администрирования кластера 1С.

АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,ПараметрыАдминистрированияИБ, Фильтр);

Для этого вам понадобится две учетных записи: администратор кластера, администратор БД

ПараметрыАдминистрирования = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера(); ПараметрыАдминистрирования.АдресАгентаСервера = "имя_сервера";
ПараметрыАдминистрирования.ПортАгентаСервера = 7540; //по умолчанию в 1С используется 1540
ПараметрыАдминистрирования.ПортКластера = 7541; //по умолчанию в 1С используется 1541
ПараметрыАдминистрирования.ИмяАдминистратораКластера = "имя_администратора_кластера";
ПараметрыАдминистрирования.ПарольАдминистратораКластера = "пароль_администратора_кластера";
ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(); ПараметрыАдминистрированияИБ.ИмяВКластере = "имя_базы";
ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = "имя_администратора_базы"; ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = "пароль_администратора_базы";

У всей этой доработки есть один несущественный минус - т.к. не все события пишутся в ПротоколРаботыПользователей, то существует ненулевая вероятность, что пользователя "выкинет" даже если он вёл активность в приложении, но процент этих событий мал. 

Текст процедуры выкладываю как есть, необходимо только через Конфигуратор добавить регламентное задание и сопоставить его с этой процедурой.

 
Процедура УбитьСеансыВНочи() Экспорт
    
    Таб = Новый ТаблицаЗначений;    
    Таб.Колонки.Добавить("Пользователь");
    Таб.Колонки.Добавить("ПользовательСсылка");
    Таб.Колонки.Добавить("Номер");
    //Таб.Колонки.Добавить("Поле");
    СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы();
    НомераСеансов = Новый Массив;
    стСписокКРасстрелу = "";
    Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл
        если не Пользователи.ЭтоПолноправныйПользователь(СеансИБ.Пользователь, Истина) и СеансИБ.ИмяПриложения = "1CV8C" тогда
            ЗадачиЗапрос = Новый Запрос; //Не отключаются пользователи с полными правами, конфигураторы и фоновые задания
            ЗадачиЗапрос.Текст = "выбрать * из регистрсведений.протоколработыпользователей где пользователь=&юзер и дата > &датаубийства";
            Пользователь = Справочники.Пользователи.НайтиПоНаименованию(СеансИБ.Пользователь.ПолноеИмя,Истина);
            
            стРоли = РегистрыСведений.ИсполнителиЗадач.РолиИсполнителя(Пользователь);
            стРольПерманентногоПользователя = Справочники.РолиИсполнителей.НайтиПоНаименованию("ПользователиНеотключаемыеПоНеактивностиСеанса",Истина); //тут прописывается имя роли, входящие в нее пользователи не отключаются
            стПерманентныйПользователь = Ложь;
            Для Каждого ЭлементМассива из стРоли Цикл
                если ЭлементМассива.Владелец.Наименование = стРольПерманентногоПользователя.Наименование тогда
                    стПерманентныйПользователь = Истина;
                    Прервать;
                конецесли;
            КонецЦикла;        
            
            Если Не стПерманентныйПользователь Тогда 
            
                ЗадачиЗапрос.УстановитьПараметр("юзер", Пользователь);
                ЗадачиЗапрос.УстановитьПараметр("датаубийства", ТекущаяДата() - 1800);
                Результат = ЗадачиЗапрос.Выполнить();
                Если Результат.Пустой() Тогда
                    Сеанс = Таб.Добавить();
                    Сеанс.Пользователь             = СеансИБ.Пользователь.Имя;
                    стСписокКРасстрелу            = стСписокКРасстрелу + СеансИБ.Пользователь.Имя + " ";
                    Сеанс.Номер                 = СеансИБ.НомерСеанса;
                    НомераСеансов.Добавить(СеансИБ.НомерСеанса);
                    //Сеанс.ПользовательСсылка      = НайтиСсылкуПоИдентификаторуПользователя(СеансИБ.Пользователь.УникальныйИдентификатор);
                конецесли;
            
            КонецЕсли;
        
        конецесли;
    КонецЦикла;
    
    если НомераСеансов.Количество()>0 тогда
        
        ПараметрыАдминистрирования = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияКластера();
        ПараметрыАдминистрирования.АдресАгентаСервера = "имя_сервера";
        ПараметрыАдминистрирования.ПортАгентаСервера = 7540; //по умолчанию в 1С используется 1540
        ПараметрыАдминистрирования.ПортКластера = 7541; //по умолчанию в 1С используется 1541
        ПараметрыАдминистрирования.ИмяАдминистратораКластера = "имя_администратора_кластера";
        ПараметрыАдминистрирования.ПарольАдминистратораКластера = "пароль_администратора_кластера";
        ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера();
        ПараметрыАдминистрированияИБ.ИмяВКластере = "имя_базы";
        ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = "имя_администратора_базы";
        ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = "пароль_администратора_базы";
        
        СтруктураСеанса = Новый Структура;
        СтруктураСеанса.Вставить("Свойство", "Номер");
        СтруктураСеанса.Вставить("ВидСравнения", ВидСравнения.ВСписке);
        СтруктураСеанса.Вставить("Значение", НомераСеансов);
        Фильтр = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураСеанса);
        
        АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,ПараметрыАдминистрированияИБ, Фильтр);
        
        ЗаписьЖурналаРегистрации("УдалениеПользователейВНочи", УровеньЖурналаРегистрации.Информация, , , "Список пользователей к отключению: " 
        + стСписокКРасстрелу);
        
    конецесли;
    
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

Регламентное задание Лицензии Освобождение сеансов

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    74403    377    170    

322

Разработка Инструменты администратора БД Администрирование веб-серверов Администрирование Программист 1C:ERP Платные (руб)

Это специализированное решение для глубокого анализа и мониторинга серверов и баз данных 1С. Продукт позволяет выявлять причины замедлений, блокировок и ошибок, объединяя данные технологического журнала, СУБД и оборудования в единой интерактивной системе.

90000 руб.

13.05.2026    1185    2    0    

4

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

17000 руб.

10.11.2023    26286    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2495    6    0    

21

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтер Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14640 руб.

29.04.2020    51138    140    162    

95

Файловый обмен (TXT, XML, DBF), FTP Поиск данных Инструменты администратора БД Корректировка данных Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная обработка позволит Вам легко и просто, а главное - быстро, выполнить сравнение данных между ЛЮБЫМИ базами (и РИБ, по правилам конвертаций) по контрольным суммам выбранных объектов баз 1С, работающих на платформах 8.3 и выше. Удобный и понятный интерфейс в виде "мастера". Высокая скорость сравнения достигается за счет специального алгоритма расчета контрольной суммы объекта/записи и сравнения по данным суммам объектов 2х баз через файл. Имеется возможность выбора реквизитов, по которым система будет сравнивать объекты. Сравнение количества записей в движениях документов, возможность сравнивать данные по правилам конвертации и не только! Выбор объектов конфигурации для КАЖДОГО узла в отдельности с индивидуальным отбором для каждого объекта конфигурации, работа с FTP, сохранение или загрузка настроек, сохранение или загрузка результата сравнения, регистрация на обмен объекта и его движений. (Обновление от 12.11.2024, версия 2.2-2.5)

24400 руб.

27.10.2017    46857    32    15    

50
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 15.05.18 05:49
Сообщение было скрыто модератором.
...
2. sergathome 4 15.05.18 15:06 Сейчас в теме
Эх ребяты, где ж вы были года 3 назад, когда нас угораздило вляпаться в релиз платформы, который не освобождал лицензии...
16. пользователь 17.05.18 05:52
Сообщение было скрыто модератором.
...
3. spezc 804 15.05.18 15:16 Сейчас в теме
А штатное время засыпания и время завершения спящего? Чем хуже.
5. aabogachev 178 15.05.18 16:00 Сейчас в теме
(3) ну хотя бы тем, что виджеты постоянно обновляются и сеанс никогда не станет спящим. кроме виджетов куча всяких штук которые проверяют уведомления и т.п. поэтому приложение будучи свёрнутым все равно остается живым днями, ночами, неделями, месяцами, годами. как угодно. нас это не устраивает. нам хочется чтобы пользователи поработали и закрыли приложение. если надо свернули, но были готовы к тому, что оно прекратит работу само. на этом мы экономим большие деньги.

настройки в базе по освобождению зависших/спящих сеансов сделаны, но таковыми сеансы становятся только тогда, когда приложение завершило свою работу "некорректно"
user1371486; spezc; +2 Ответить
4. o4karek 15.05.18 15:26 Сейчас в теме
А каким образом формируется анализируемый регистр сведений?
ЗЫ: С ДО не знаком
6. aabogachev 178 15.05.18 16:11 Сейчас в теме
(4) есть общий модуль "ПротоколированиеРаботыПользователей". Там куча функций и процедур, которые пишут в этот РС в зависимости от тех или иных событий и действий пользователя в системе (кстати, чтобы это происходило должна быть включена настройка "Настройка и Администрирование" - "Настройка прав доступа" - "Протоколировать работу пользователей")

Например когда пользователь открывает приложение происходит это

ПротоколированиеРаботыПользователей.ЗаписатьВходВСистему();

и т.п.

вот (скриншот) список событий которые РС протоколирует
Прикрепленные файлы:
7. o4karek 15.05.18 16:20 Сейчас в теме
(6) Понял. Т.е. это не совсем честная активность? Это так активность, которую отслеживает подсистема ДО?
Т.е. если я решу доработать ДО и воткну туда что-то, что этим общим модулем не пользуется, предложенное регламентное задание может этот сеанс выстричь даже во время работы. Я правильно понял?
9. aabogachev 178 15.05.18 16:44 Сейчас в теме
(7) если вы доработаете и будете отслеживать "свои" действия, которые запихнете в этот РС - то конечно оно отработает запрос, найдет их и не выкинет пользователя. выборка то будет не пустой. только вид действия надо будет добавить в Перечисление, скриншот которого я положил выше. все просто.
11. o4karek 15.05.18 17:13 Сейчас в теме
(9) Ну тогда (ИМХО) стоит откорректировать заголовок и/или начало статьи. Я подумал, что сделано некоторое универсальное регламентное задание, которое для примера вклеено в ДО.
А у вас сделано специализированный вариант для конкретной конфы. Он не становится от этого плохим, просто стоит сразу об этом сказать :)
8. herfis 522 15.05.18 16:22 Сейчас в теме
Идея проста и понятна. Весь дьявол - в критериях определения активности.
Если пользователь, скажем, в течение получаса заполняет новый документ - это как зафиксируется в протоколе?
10. aabogachev 178 15.05.18 16:46 Сейчас в теме
(8) никак. как только мы столкнемся с подобного рода проблемами - мы передвинем планку, то есть рег задание будет стартовать не раз в 30 минут, а раз в час и т.п.
но и в приведенном вами примере, на сколько я помню, если открыть файл "на редактирование" а потом закрыть приложение, потом снова открыть, оно "поймет" что файл захвачен на редактирование и попробует поискать в темповой папке ваш файл, который вы "так долго редактировали". так что пример не совсем удачный, но я понял что вы имеете в виду, пока для нас это не проблема.
12. herfis 522 15.05.18 17:25 Сейчас в теме
(10) Мне показалось, что вы позиционировали решение как универсальное.
Если речь об учетной системе предприятия, то подобные сценарии не являются чем-то невероятным.
"Честную" активность, к сожалению, можно будет определять только если соответствующую возможность добавят в платформу.
Как промежуточный вариант, в принципе, можно реализовать такое: выдавать пользователю предупреждение о завершении сеанса с большим таймаутом при длительном отсутствии активности по протоколу а при отмене предупреждения пользователем - записывать это событие в протокол.
ЗЫ. Правда, при такой схеме нет особой необходимости в регламентном задании :) Зависшие сеансы и так станут спящими и перестанут "есть" лицензию. Остаются только сеансы с какими-нить висящими модальными окошками. Но ими, в принципе, можно пренебречь, так как они вряд ли сделают погоду.
13. aabogachev 178 15.05.18 17:45 Сейчас в теме
(12) вы правы, если делать "универсально", то так и следует поступить, но это можно оставить для тех, кто захочет оптимизировать данное решение, у меня "это" работает уже полгода, как в том анекдоте про сисадмина - "работает и работает, не надо ничего трогать".
20. androgin 23.05.18 03:39 Сейчас в теме
(13) а чем журнал регистрации не устраивает?
14. kolya_tlt 92 16.05.18 14:41 Сейчас в теме
как и все разработчики 1С:ДО решение наполнено запросами в цикле, очень жаль ...
зы у вас реально Елен Николаевн так много в компании?
15. aabogachev 178 16.05.18 15:13 Сейчас в теме
(14) я к сожалению не разработчик, я просто временно решаю проблемы. так сказать создаю костыли. и мне за это платят.
Елен Николавн да, много.
17. teller 17.05.18 09:46 Сейчас в теме
(15)
так сказать создаю костыли. и мне за это платят
- тут все такие, никто блокчейны не изобретает
18. kolya_tlt 92 17.05.18 14:13 Сейчас в теме
(15) вообще сложно человека перед конфигуратором назвать разработчиком, но мы все эти делаем, а в резюме пишим - программист :)
19. androgin 19.05.18 00:19 Сейчас в теме
Вот это запускается у каждого пользователя само каждые 20 мин (подписка или через обработчик ожидания - сами решите, как вам угодно!):

// на клиенте
Процедура ЗавершитьНеактивныйСеансКлиент() Экспорт
	СеансНеАктивен = ПростойСеансаПоЖурналуРегистрации();
	Если СеансНеАктивен Тогда
	    ЗавершитьРаботуСистемы();        	
	КонецЕсли;
КонецПроцедуры

// на сервере
Функция ПростойСеансаПоЖурналуРегистрации() Экспорт
	
	СеансНеАктивен = Ложь;
	
	// только последние 20 минут
	ДатаНачала = ТекущаяДата()-1200;
	ДатаОкончания = ТекущаяДата();
	
	МассивСобытий = Новый Массив;
	МассивСобытий.Добавить("_$Data$_.New");
	МассивСобытий.Добавить("_$Data$_.Update");
	МассивСобытий.Добавить("_$Data$_.Delete");
	МассивСобытий.Добавить("_$Data$_.Post");
	МассивСобытий.Добавить("_$Data$_.Unpost");
	
	ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователи.ИдентификаторПользователяИБ());
	Фильтр = Новый Structure("ДатаНачала, ДатаОкончания, Пользователь, Событие", ДатаНачала, ДатаОкончания, ПользовательИБ, МассивСобытий);
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Дата");
	ТЗ.Колонки.Добавить("Пользователь");
	ТЗ.Колонки.Добавить("ИмяПользователя");
	ТЗ.Колонки.Добавить("Компьютер");
	ТЗ.Колонки.Добавить("Событие");
	ТЗ.Колонки.Добавить("ПредставлениеДанных");
	
	ВыгрузитьЖурналРегистрации(ТЗ, Фильтр,"Дата, ИмяПользователя, Компьютер, Событие, ПредставлениеСобытия , ПредставлениеДанных");
	
	Если ТЗ.Количество() = 0 Тогда
		СеансНеАктивен = Истина;         	
	КонецЕсли;
	
	Возврат СеансНеАктивен;
	
КонецФункции
Показать

Меня устраивает )))
Xershi; e-katerina; mikolamail; ildary; +4 Ответить
21. mikolamail 28.05.18 22:34 Сейчас в теме
(19)
подписка

Не понятно как можно Подписку использовать. Ведь она срабатывает на определенные события. А раз есть событие, значит сеанс еще активен...
22. androgin 29.05.18 00:41 Сейчас в теме
(21) это я так выразился, давая понять, что "пихайте куда хотите" )))
23. ildary 21 29.05.18 07:28 Сейчас в теме
(19) спасибо за интересную реализацию. Жалко что в БСП такого нет.
aabogachev; +1 Ответить
24. Svet_Serg 28.01.19 14:27 Сейчас в теме
Для этого вам понадобится две учетных записи: администратор кластера,

У нас нет администратора кластера. Совсем. Что можно вписать вместо учётки админа кластера?
25. Svet_Serg 11.03.20 16:31 Сейчас в теме
Не прошло и года, настроила на нашем ДО. Всё работает!

Дальше происходит отключение сеанса пользователя, находящегося в списке на отключение, делается это с помощью функционала администрирования кластера 1С.


А как бы им ещё сообщение выдавать особенное, типа "Вы отключены от ИБ, т.к. сидели и жевали сопли"?
26. Svet_Serg 12.03.20 10:24 Сейчас в теме
У всей этой доработки есть один несущественный минус - т.к. не все события пишутся в ПротоколРаботыПользователей, то существует ненулевая вероятность, что пользователя "выкинет" даже если он вёл активность в приложении, но процент этих событий мал.


(0) Второй день тестируем. Выкидывает всех активных пользователей, даже если они заполняют реквизиты в документах, согласовывают документы и т.п.. (((
user1371486; +1 Ответить
27. user1465768 22.09.20 14:38 Сейчас в теме
(26)Добрвй день, что вы вписывали вместо учетки администратора кластера ?
и какой в итоге код получился для ДО?
28. Svet_Serg 22.09.20 15:34 Сейчас в теме
(27) Имя и пароль пользователя с правами "Администратор".
29. user1465768 22.09.20 15:39 Сейчас в теме
(28)Не сталкивались с вот такой ошибкой?

-2147221005(0x800401F3): Invalid class string
{ОбщийМодуль.АдминистрированиеКластераCOMКлиентСервер.Модуль(1036)}: Возврат Новый COMОбъект(ОбщегоНазначенияКлиентСервер.ИмяCOMСоединителя());
{ОбщийМодуль.АдминистрированиеКластераCOMКлиентСервер.Модуль(371)}: COMСоединитель = COMСоединитель();
{ОбщийМодуль.АдминистрированиеКластераКлиентСервер.Модуль(476)}: МенеджерАдминистрирования.УдалитьСеансыИнформационнойБазы(
{ОбщийМодуль.ЗавершениеСеансовПользователей.Модуль(65)}: АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования,ПараметрыАдминистрированияИБ, Фильтр);

по причине:
-2147221005(0x800401F3): Invalid class string
31. Svet_Serg 23.09.20 10:06 Сейчас в теме
(29) Была такая ошибка, но она ушла, когда прописали правильные порты и решили вопрос с тем, кто же у нас админ кластера)
Прикрепленные файлы:
32. user1465768 23.09.20 16:24 Сейчас в теме
(31)решили как нибудь проблему с выкидыванием активных пользователей?
33. Svet_Serg 24.09.20 15:50 Сейчас в теме
(32) не, забили, не используем эту обработку. У вас тоже выкидывает?
30. user1465768 22.09.20 15:41 Сейчас в теме
(28)Она проявляется пири запуске фонового задания
34. user1465768 25.09.20 12:57 Сейчас в теме
(33) да , такая же ситуация, придется искать какое то другое решение
Для отправки сообщения требуется регистрация/авторизация