Отключение назойливых окон на +300 базах одновременно


В этой публикации раскрыт вопрос, как можно отключить рекламу на несколько базах сразу в автоматическом режиме.

Задача стояла заблокировать окна на нескольких базах сразу(+300), чтобы при входе они не отвлекали от работы.

  • проверка новостей и окно новостей
  • окно, что нового в конфигурации.
  • проверка обновлений
  • настройка резервного копирования
  • 1С отчетность, назойливое окно о наличии нерасшифрованных сообщений
  • 1С отчетность, окно проверки срока действия сертификатов

По возможности это нужно было сделать на 1S скрипте, через обновлятор.

При решении данной задачи было проанализированно две публикации на данную тему эта  и  эта.

Сначала думал сделать через установку настроек всем пользователям через установку основных параметров.

Поизучав исходный код скриптов и обработки получился вот такой код:

 

 Исходный код на 1S скрипте

#use "updater1c"


// ****************************************************************************

// Переменные модуля

// ****************************************************************************



Перем errors; // Признак того, что при выполнении скрипта были ошибки.

Перем updater; // Обновлятор, через который мы получаем информацию о базе,

// а также вызываем различные функции обновлятора.

Перем connector; // Коннектор для подключения к базе.

Перем v8; // Само подключение к базе через коннектор.



// ****************************************************************************

// Ваш код для выполнения обновлятором

// ****************************************************************************



Процедура Главная()


// Обязательно прочтите статью про COM-объекты

// http://helpme1c.ru/ispolzovanie-com-obektov-v-onescript


лМассивПользователей = v8.ПользователиИнформационнойБазы.ПолучитьПользователей();

ТЗНастроек=ПолучитьТЗНастроек();

Для Каждого лПользователь Из лМассивПользователей Цикл

ИмяПользователя=лПользователь.Имя;

Для Каждого СтрТЗНастроек Из ТЗНастроек Цикл

v8.ХранилищеОбщихНастроек.Сохранить(СтрТЗНастроек.КлючОбъекта, СтрТЗНастроек.КлючНастроек, СтрТЗНастроек.Настройки, , ИмяПользователя);

Сообщить(ИмяПользователя + " Сохранен");

КонецЦикла;

КонецЦикла;



КонецПроцедуры



// ****************************************************************************

// Служебные процедуры

// ****************************************************************************



Процедура ПриНачалеРаботы()


errors = Ложь;

updater = Новый Updater1C;

// Если в скрипте не планируется использовать

// подключение к базе - просто закомментируйте

// две нижние строки.

connector = Новый COMОбъект("V" + updater.PlatformRelease + ".COMConnector");

v8 = updater.BaseConnect(connector);


КонецПроцедуры



Процедура ПриОкончанииРаботы()



Если v8 <> Неопределено Тогда

Попытка

ОсвободитьОбъект(v8);

v8 = Неопределено;

Исключение

КонецПопытки;

КонецЕсли;


Если connector <> Неопределено Тогда

Попытка

ОсвободитьОбъект(connector);

connector = Неопределено;

Исключение

КонецПопытки;

КонецЕсли;


Если updater <> Неопределено Тогда

Попытка

ОсвободитьОбъект(updater);

updater = Неопределено;

Исключение

КонецПопытки;

КонецЕсли;


// Ожидание в конце выполнения программы

// магическим образом помогает избежать

// проблем с освобождением ресурсов, если

// мы использовали внешнее подключение к

// базе. Могут быть случаи, когда недостаточно

// 1 секунды.

Приостановить(10000);


Если errors Тогда

ЗавершитьРаботу(1);

КонецЕсли;


КонецПроцедуры



Функция ПолучитьТЗНастроек()

//Возможные настройки см. в макете обработки

ТЗ=Новый ТаблицаЗначений;

ТЗ.Колонки.Добавить("КлючОбъекта");

ТЗ.Колонки.Добавить("КлючНастроек");

ТЗ.Колонки.Добавить("Настройки");



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ИнформацияПриЗапуске";

Стр.КлючНастроек="Показывать";

Стр.Настройки=Ложь;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ИнформацияПриЗапуске";

Стр.КлючНастроек="ДатаБлижайшегоПоказа";

Стр.Настройки=НачалоДня(v8.ТекущаяДатаСеанса() + 14*24*60*60);;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ИнтернетПоддержкаПользователей";

Стр.КлючНастроек="ВсегдаПоказыватьПриСтартеПрограммы";

Стр.Настройки=Ложь;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ИнтернетПоддержкаПользователей";

Стр.КлючНастроек="НеНапоминатьОбАвторизацииДо";

Стр.Настройки=НачалоДня(v8.ТекущаяДатаСеанса() + 14*24*60*60);



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ИнтернетПоддержкаПользователей";

Стр.КлючНастроек="ПовторитьПопыткуПодключенияПриСтартеПрограммы";

Стр.Настройки=Ложь;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="НачалоРаботыВ30";

Стр.КлючНастроек="Показывать";

Стр.Настройки=Ложь;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="Обработка.ПредупреждениеОбИзменениях";

Стр.КлючНастроек="НачинаемРаботатьВ30";

Стр.Настройки=Ложь;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ПредупреждениеОКонфликтеКриптопровайдеров";

Стр.КлючНастроек="БольшеНеПоказывать";

Стр.Настройки=Истина;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ПредупреждениеБезопасности";

Стр.КлючНастроек="ПользовательОзнакомлен";

Стр.Настройки=Истина;



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ДокументооборотСКонтролирующимиОрганами_ДатаНапоминанияОбОбновленииКриптопровайдера";

Стр.КлючНастроек="";

Стр.Настройки=НачалоДня(v8.ТекущаяДатаСеанса() + 14*24*60*60);



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ДокументооборотСКонтролирующимиОрганами_ДатыНапоминанийПоИстекающимЛицензиям";

Стр.КлючНастроек="";

Стр.Настройки=НачалоДня(v8.ТекущаяДатаСеанса() + 14*24*60*60);



Стр=ТЗ.Добавить();

Стр.КлючОбъекта="ДокументооборотСКонтролирующимиОрганами_НапоминаниеПоИстекающимСертификатам";

Стр.КлючНастроек="";

Стр.Настройки=НачалоДня(v8.ТекущаяДатаСеанса() + 14*24*60*60);

Возврат ТЗ;

КонецФункции



// ****************************************************************************

// Инициализация и запуск скрипта

// ****************************************************************************


ПриНачалеРаботы();

Попытка

Главная();

Исключение

errors = Истина;

Сообщить("" + ОписаниеОшибки() + "");

КонецПопытки;



ПриОкончанииРаботы();

[Нажмите и перетащите, чтобы переместить]

Он работает, но полностью не решает задачу в т.ч с последними двумя окнами.

Тогда проанализировав вторую обработку, добавил туда нужные окна( окно с нерасшифрованными сообщениями и истекшими сертификатами,в конфигурации ПоказСообщенийТребующихРасшифровки, ПредупреждениеОбИстеченииСертификатов) и заблокировал клиентскую процедуру ПроверитьНаличиеОбновлений получил необходимый результат.

&Вместо("ПроверитьНаличиеОбновлений")
Процедура АнтиPopup_ПроверитьНаличиеОбновлений() Экспорт
Возврат;
КонецПроцедуры

Также вырезал все настройки, и теперь она сразу начинает работать при подключении.

Установить это расширение на какое угодно количество баз можно через обновлятор.

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

Проверено на платформе 8.3.13, БП 3.0.69.35, по идее должен работать на всех типовых конфигурациях на платформе 8.3.9 и выше.

2 Comments

  1. VmvLer

    читать код сложно, отформатировать не судьба?

    Reply
  2. user811626

    (1)Отформатировал.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *