gifts2017

Убираем рекламу из 1С

Опубликовал Владимир Ху (Bobak) в раздел Программирование - Практика программирования

Как избавиться от рекламы в программах 1С.
Статья о том как избавиться от рекламы в программах 1С.

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

В общем, пришлось заняться самому.

Собственно сама статья.

Я сразу отказался от вариантов с изменением модулей конфигураций и отчетов. Потому как долго это и автоматизируется трудно.

Реклама в 1С размещается в двух местах.
1.Регламентированной отчетности (в 1С 7.7).
2.В конфигурации.
Пожно поставить галочку "Не показывать больше", но рекламный блок ведет счетчик своего открытия. Если установить флажок "не показывать ...", то через месяц реклама опять вылезет.

1.Рекалама в регламентированной отчетности.
При открытии любого регламентированного отчета вызывается процедура "ПоказатьИнформацию":
//****************************************************************************** 
// ПоказатьРекламу()
//
// Процедура открывает внешний отчет и выводит на экран содержащуюся в нем рекламу.
//
Процедура ПоказатьРекламу()

// Список параметров, передаваемых внешнему отчету.
СписокПараметров = СоздатьОбъект("СписокЗначений");

// Путь и имя файла формы, вызывающей внешний отчет.
СписокПараметров.ДобавитьЗначение(КаталогОтчета + ИдентификаторОтчета + ".ert", "Фрм");

// Показываем информацию.
Если ФС.СуществуетФайл(КаталогОтчета + "Reklama.ert") = 1 Тогда

// Открываем внешний отчет, в котором находится нужная информация для вывода на экран.
ОткрытьФорму("Отчет#2", СписокПараметров , КаталогОтчета + "Reklama.ert");

КонецЕсли;

КонецПроцедуры // ПоказатьРекламу()
//******************************************************************************
// ПоказатьИнформацию()
//
// Процедура открывает внешний отчет и выводит на экран содержащуюся в нем информацию.
//
Процедура ПоказатьИнформацию()

// Список параметров, передаваемых внешнему отчету.
СписокПараметров = СоздатьОбъект("СписокЗначений");

// Путь и имя файла формы, вызывающей внешний отчет.
СписокПараметров.ДобавитьЗначение(КаталогОтчета + ИдентификаторОтчета + ".ert", "Фрм");
// Используется для вывода секции "ВсеРегионы": 1 - выводить. 0 - не выводить.
СписокПараметров.ДобавитьЗначение(1, "ВыводитьСекциюВсеРегионы");

// Показываем информацию.
Если ФС.СуществуетФайл(КаталогОтчета + "\Info.ert") = 1 Тогда

Если
ВосстановитьЗначение("Открытие") <> 1 Тогда

СохранитьЗначение("Открытие", 1);

// Открываем внешний отчет, в котором находится нужная информация для вывода на экран.
ОткрытьФорму("Отчет#1", СписокПараметров , КаталогОтчета + "\Info.ert");

ПоказатьРекламу();

СтатусВозврата(0);

КонецЕсли;

Иначе

СохранитьЗначение("Открытие", 1);

КонецЕсли;

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

Открываются два внешних отчета:
Info.ert и Reklama.ert.
И они открываются вне зависимости от того, ставили вы галочку "не показывать" или нет. Контроль "галочки" и счетчиков показа происходит в самих обработках Info.ert и Reklama.ert. Что естественно приводит к замедлению открытия отчетов.
К счастью убрать рекламу довольно просто, достаточно удалить файлы Info.ert и Reklama.ert.
Что бы не делать это вручную, пишем небольшой скрипт на AutoIt, который перебирает все конфигурации (по списку из реестра) из всех каталогов отчетности удаляет файлы Info.ert и Reklama.ert.
Func DelRek()

$ProgressDel = 0
For $NumDB = 1 To $NumDBAll;Перебираем конфигурации
$DirBase = $ListDB[$NumDB][1]

;Найдем все директории с рег. отчетностью
$MaskSearchDir = $DirBase & "ExtForms\Rp??q?.grp"
$SearchDir = FileFindFirstFile($MaskSearchDir)
If
$SearchDir = -1 Then
ContinueLoop
EndIf
While
1
$Dir = FileFindNextFile($SearchDir)
If
@error Then ExitLoop
$DirName = FileGetLongName($Dir)
;Найдем файлы с рекламой
;Файл "Инфо"
$MaskSearchFile = $DirBase & "ExtForms\" & $DirName & "\info.ert"
$SearchFile = FileFindFirstFile($MaskSearchFile)
If
$SearchFile <> -1 Then
$File = FileFindNextFile($SearchFile)
If
Not @error Then
$FileName = FileGetLongName($File)
$FilePath = $DirBase & "ExtForms\" & $DirName &'\'& $FileName
FileDelete($FilePath)
EndIf
EndIf
; Закрываем поиск
FileClose($SearchFile)

;Файл "Реклама"
$MaskSearchFile = $DirBase & "ExtForms\" & $DirName & "\reklama.ert"
$SearchFile = FileFindFirstFile($MaskSearchFile)
If
$SearchFile <> -1 Then
$File = FileFindNextFile($SearchFile)
If
Not @error Then
$FileName = FileGetLongName($File)
$FilePath = $DirBase & "ExtForms\" & $DirName &'\'& $FileName
FileDelete($FilePath)
EndIf
EndIf
; Закрываем поиск
FileClose($SearchFile)
WEnd
; Закрываем поиск
FileClose($SearchDir)
;сделаем паузу, что бы не перегружать систему
Sleep(500)
Next
Return 1
EndFunc ;==>DelRek

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

2.Реклама в конфигурации.
Реклама храниться в обработке "ИнформационныйБлок".
В глобальном модуле(Бухгалтерия 7.7) видми интересный код:
	Если ПереходНа1СБухгалтерию8 = 0 Тогда
//******************************************************************************
ОткрытьИнформационныйБлок = ВосстановитьЗначение("НеобходимостьОткрытияИнформационныйБлок");
ОткрытьИнформационныйБлок = ?(ПустоеЗначение(ОткрытьИнформационныйБлок)=1,2, ОткрытьИнформационныйБлок);
ДатаОткрытияИнформационныйБлок = ВосстановитьЗначение("ДатаОткрытияИнформационныйБлок");
ДатаОткрытияИнформационныйБлок = ?(ПустоеЗначение(ДатаОткрытияИнформационныйБлок)=1,'01.01.1980',

Дата(ДатаОткрытияИнформационныйБлок));
ДеньМесяца = ДатаЧисло(РабочаяДата());

Если ОткрытьИнформационныйБлок =2 Тогда
ОткрытьФорму("Обработка.ИнформационныйБлок");
ИначеЕсли ((ДеньМесяца=1) или (ДеньМесяца=15)) и (РабочаяДата() <> ДатаОткрытияИнформационныйБлок) Тогда
ОткрытьФорму("Обработка.ИнформационныйБлок");
СохранитьЗначение("ДатаОткрытияИнформационныйБлок",Строка(РабочаяДата()));
ИначеЕсли ((ДеньМесяца<15) и (ДатаОткрытияИнформационныйБлок <> НачМесяца(РабочаяДата())))
или ((ДеньМесяца>=15) и (ДатаОткрытияИнформационныйБлок <>

Дата(ДатаГод(РабочаяДата()),ДатаМесяц(РабочаяДата()),15))) Тогда
ОткрытьФорму("Обработка.ИнформационныйБлок");


СохранитьЗначение("ДатаОткрытияИнформационныйБлок",Строка(Дата(ДатаГод(РабочаяДата()),ДатаМесяц(РабочаяДата()),?(ДатаЧисло(Ра

бочаяДата())<15,1,15))));
КонецЕсли;
//******************************************************************************

СписокПараметров = СоздатьОбъект("СписокЗначений");
СписокПараметров.Установить("Режим", "Открыть");
ОткрытьФорму("Обработка.ИППДополнительнаяИнформация", СписокПараметров);
Иначе
ОткрытьФорму("Обработка.ПомощникПереходаНа1CБухгалтерию8");
КонецЕсли;

Т.е. если мы перешли на 8-ку то рекламы больше не будет. Заплати за 8-ку и реклама больше не будет тебе досаждать. Правда будет досаждать ИТС. Ну впрочем я отклонился от темы.
Вариант с изменением кода не рассматриваем.
Смотрим, можно ли заставить программу думать, что мы уже перешли на 8-ку.
Вот такой код:
	//Проверка, перед обновлением производился переход на 1С:Бухгалтерию 8 или нет
ПереходНа1СБухгалтерию8 = 0;
Если (ПустоеЗначение(ВосстановитьЗначение("НомерРелизаДоОбновления")) = 0) и (глНомерРелиза() <>

ВосстановитьЗначение("НомерРелизаДоОбновления")) Тогда
Если
глНомерРелиза() <> ВосстановитьЗначение("НомерРелизаДоОбновления") Тогда
ПереходНа1СБухгалтерию8 = 1;
КонецЕсли;
КонецЕсли;

Мда. Если кто обяснит мне зачем два раза
глНомерРелиза() <> ВосстановитьЗначение("НомерРелизаДоОбновления")

буду благодарен. То ли это ляп, то ли я чего то непонимаю.
Из кода видно, что если мы даже сохраним в "НомерРелизаДоОбновления" номер текущего релиза, то при следующем обновлении нам придется это делать заново. К тому же я не знаю простых способов(не из 1С) добавить значение в CFG-файл. И совем портит жизнь

то, что у каждого пользователя может быть свой файл настроек.
Что же, решил пойти своим путем. Еще один скрипт на AutoIt.
Используем команду ControlMove и ControlHide.
ControlMove - передвигает окно с рекламой куда подальше(также уменьшает размер в 0), что бы при открытии программы глаза не мозолила.
ControlHide - делает окно с рекламой невидимой, что бы при разворачивании окна на весь экран реклама опять не вылезла.
Func DelIB() 
For
$i = 1 To $ListMaskWin[0][0]
$MaskWin = $ListMaskWin[$i][1]
;сначала уменьшим размеры, что бы при открытии глаза не мозолила
ControlMove($MaskWin, "", "Информационный блок", 3000, 3000, 0, 0)
;теперь сделаем невидимым
ControlHide($MaskWin, "", "Информационный блок")
Next
EndFunc ;==>DelIB

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

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

PS
Программка убирающая рекламу находиться здесь http://infostart.ru/projects/1118/. Там же и исходники.

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Трактор Трактор (Трактор) 28.07.07 12:40
Ужас до чего народ доходит из-за нежелания ковырнуть модуль!
2. Андрей Скляров (coder1cv8) 06.08.07 13:32
(1) +1 AutoIt - интересная штука, но здесь излишняя...
3. Страпот (Bobak) 06.08.07 13:46
(1) Читаем "Вступление". Потом считаем сколько раз в месяц надо будет "ковырнуть модуль!". Содрагаемся :).

(2) Я уже много лет занимаюсь только 1С. Поэтому когда возникла необходимость в KillerR, то взял то что было под рукой и в чем можно быстро разобраться. Не сомневаюсь, что это далеко не самый оптимальный выбор.
4. Страпот (Bobak) 23.08.07 16:43
Переписал статью.

ЗЫ
Пожелания к Support-у:
1. Очень неудобно редактировать статью. Почему такие маленькие окошки? И предосмотр бы не помешал.
2. Почему есть "Обновленные программы" и не "Обновленные статьи"?
5. Евгений Чуркаев (MACTEP) 23.08.07 17:09
Нет ещё :-).. ты хотел мунис исправить на пулис??? :-)
6. Евгений Чуркаев (MACTEP) 23.08.07 17:11
ПОМОГИТЕ НАЙТИ !!! плиз. у кого-то видел автоматическое обновление редакций
7. Страпот (Bobak) 24.08.07 07:46
8. Виктор Желтко (ViksVik) 17.11.13 15:31
Интересно. Вся "кухня" по теме!