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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программы, внешние компоненты, прочее _ Notifier: 1С сообщения в трее

Автор: Vofka 20.06.13, 16:44

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

Подключается компонента стандартным способом:

Если Компонента = Неопределено Тогда
    Если Не ПодключитьВнешнююКомпоненту("AddIn.Notifier") Тогда // исправлено с Pro1c.Notifier
        Предупреждение("Не удалось загрузить компоненту");
        Отказ = Истина;
    КонецЕсли;
    
    Попытка
        Компонента = Новый("AddIn.Notifier");
    Исключение
        Отказ = Истина;
    КонецПопытки;
КонецЕсли;


Использовать её очень просто, компонента имеет всего 3 метода:

  1. Компонента.Create(ПутьКИконке);

    Метод ничего не возвращает. Создает в трее значок с иконкой, путь к которой передается в параметре метода. Иконка должна быть в формате .ico. Вызывать метод надо полюбому, после создания объекта компоненты.

  2. Компонента.Show(Заголовок, Сообщение, Значок);

    Метод ничего не возвращает. Суть первых двух параметров должна быть понятна по наименованию.
    Третий параметр может принимать значения от 0 до 3. 0 - нет значка, 1 - значок сведений, 2 - значок предупреждения, 3 - значок ошибки;

  3. Компонента.Remove();

    Ничего не возвращает, ничего не принимает. Уберает значок из трея. Можно вызвать метод, если значок мешает. Если метод не вызвать - то значок пропадет из трея после закрытия 1С.


Собственно все. Где применить можно?
- в тех же типовых с торговым функционалом есть такая вещь, как напоминания о задачах. Все ничего, но вот, если 1С свернута - тогда "до свидания". Но вооружившись Notifier-ом - это теперь не проблема и пользователь всеравно увидит сообщение;
- есть у вас механизм согласования каких-то документов, например, заявок на расходование денежных средств. Для того, чтобы пользователи оперативно реагировали на новые поступившие заявки - покажите им уведомление;
- в 1С происходит работа с почтой? Замечательно! Подайте пользователю маячок о том, что пришла новая корреспонденция;



Ещё есть такой момент: если пользователь не за компьютером, а сообщение ему было отправлено - то оно не исчезнет, а как верный пёс будет ждать, пока пользователь проявит активность на компьютере и только после этого начнет исчезать.

В общем, применение можно найти очень во многом. Не ограничивайте фантазию smile.gif .

В приложении в архиве находятся:
- сама компонента
- бат-файл, который поможет зарегистрировать компоненту в системе. Единственное что - это надо в него зайти и прописать в 6 строчке путь к компоненте. Можно обойтись и без батника, а зарегать с помощью regasm-а

Компонента работает в тонком и толстом клиенте. Работоспособность проверялась на Windows 7 с присутствующим .Net Framework 4. По идее будет работать на .Net Framework начиная с 3.5. Касаемо оси, я думаю, что и на XP пойдет.

Если, вдруг, появятся какие-то вопросы - спрашивайте.

Скачать 32542460.gif :  Notifier.zip ( 5,14 килобайт ) : 54


ПС. Я лично не проверял, но, по идее, компонента должна работать не только из-под 1С 8.1, 8.2, а и из-под 1С 7.7. Если кто-то проверит и отпишет - будет хорошо smile.gif .

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

26.06.13

Сделал версию 1.1. Добавлено:
- в метод Show() добавлен 4-й параметр типа строка. Для чего он - читайте ниже.
- теперь в методе Show() последние 2 параметра не обязательные. По умолчанию они буду, соответственно, 0 и пустая строка
- самое интересное и, собственно, почему вышла версия 1.1. В методе Show(), как было сказано выше, добавлен 4-й параметр типа строка и метод может выглядеть так:
Компонента.Show(Заголовок, Сообщение, Значок, Данные);

Если пользователь счелкнет по всплывающему сообщению, то в 1С это действие можно будет обработать в методе
ВнешнееСобытие(Источник, Событие, Данные)

В Источник попадет строка Notifier, событие Click, а Данные - это наш 4-й параметр метода Show(). Зачем все это? Я приследовал такую цель: например, в данные можно сериализовать (ЗначениеВСТрокуВнутр()) что угодно, например, какой-то документ, далее передать его компоненте и в обработчике клика можно будет получить этот документ (как ЗначениеИзСтрокиВнутр()) и сделать с ним в 1С все, что угодно, например, открыть его, открыть журнал и спозиционироваться на нем и т.п.
Примечание: ВнешнееСобытие возникнет только, если в данные было передано что-то (не пустая строка).

В общем, пользуйтесь smile.gif .

Скачать версию 1.1: http://pro1c.org.ua/index.php?s=&showtopic=13022&view=findpost&p=71025

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

05.07.2013

Сделал версию 1.2.

В новой версии добавле новый метод
Компонента.Activate1C(ЗаголовокСистемы);

В параметре передается строка, которая содержит заголовок текущей системы 1С. Получить эту информацию можно функцией встроенного языка ПолучитьЗаголовокСистемы(). Т.е. Вызов данного метода всегда имеет смысл делать только так:
Компонента.Activate1C(ПолучитьЗаголовокСистемы());

При вызове метода будет показано окно 1С с разворотом на весь экран.

Так же добавлено 2 новых события, которые можно обработать в обработке внешнего события: FileNotFound и 1CNotFound. Их назначение покажу на примере:

Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Источник = "Notifier" Тогда
        Если Событие = "1CNotFound" Тогда
            Сообщить("Не найдена запущеная 1С-ка "+Данные);
        ИначеЕсли Событие = "FileNotFound" Тогда
            Сообщить(Данные);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры


Прикладываю новую версию и демонстрационную обработку, написанную под УТ 2.3, которая мониторит задачи и уведомляет пользователя о таковых.

Скачать Notifier 1.2:  Notifier_1.2.zip ( 5,87 килобайт ) : 232

Скачать демонстрационную обработку:  Pro1CNotifierDemonstration.zip ( 4,91 килобайт ) : 191


Отдельно ещё выкладываю bat-файл для регистрации компоненты:  RegAddIn.zip ( 310 байт ) : 146

Для регистрации нужно либо положить компоненту в корень диска C, либо поменять путь в батнике. Запускать батник нужно от имени администратор.

Автор: Vofka 26.06.13, 9:39

Сделал версию 1.1. Добавлено:
- в метод Show() добавлен 4-й параметр типа строка. Для чего он - читайте ниже.
- теперь в методе Show() последние 2 параметра не обязательные. По умолчанию они буду, соответственно, 0 и пустая строка
- самое интересное и, собственно, почему вышла версия 1.1. В методе Show(), как было сказано выше, добавлен 4-й параметр типа строка и метод может выглядеть так:

Компонента.Show(Заголовок, Сообщение, Значок, Данные);

Если пользователь счелкнет по всплывающему сообщению, то в 1С это действие можно будет обработать в методе
ВнешнееСобытие(Источник, Событие, Данные)

В Источник попадет строка Notifier, событие Click, а Данные - это наш 4-й параметр метода Show(). Зачем все это? Я приследовал такую цель: например, в данные можно сериализовать (ЗначениеВСТрокуВнутр()) что угодно, например, какой-то документ, далее передать его компоненте и в обработчике клика можно будет получить этот документ (как ЗначениеИзСтрокиВнутр()) и сделать с ним в 1С все, что угодно, например, открыть его, открыть журнал и спозиционироваться на нем и т.п.
Примечание: ВнешнееСобытие возникнет только, если в данные было передано что-то (не пустая строка).

В общем, пользуйтесь smile.gif .

Скачать версию 1.1:  Notifier_v1.1.zip ( 4,98 килобайт ) : 90

Автор: Acid 26.06.13, 10:20

после клика на напоминалке значек из трэя исчезнет?

Автор: Vofka 26.06.13, 10:24

Цитата(Acid @ 26.06.13, 11:20) *
после клика на напоминалке значек из трэя исчезнет?

Сам по себе нет. Если надо, чтобы исчез - метод Remove() вам в помощь smile.gif .

Автор: Zink 26.06.13, 11:48

А пароль к архиву(ам) сколько стоит ?

Автор: Vofka 26.06.13, 11:51

Zink, не дорого. Надо всего лишь ознакомиться с правилами форума wink.gif .

Автор: Zink 26.06.13, 12:09

Спасибо, давно не был подзабыл !

Автор: Acid 27.06.13, 8:12

Цитата(Zink @ 26.06.13, 12:48) *
А пароль к архиву(ам) сколько стоит ?

Я за пару бутылок пива продам! rulez.gif

Автор: Vofka 05.07.13, 9:23

Сделана версия компоненты 1.2. Первый пост обновлен.

Автор: irbis_triffle 02.08.13, 0:10

Всем доброй ночи.
Простите, может я туплю, но у меня dll не регистрируется посредством regsvr32, т.к. "...Точка входа не найдена..." - во всем описании я не нашел ни слова об архитектуре - библиотека скомпилирована под 32-разрядную систему? (у меня х64)
Заранее благодарен за ответ.

Автор: Vofka 02.08.13, 7:57

irbis_triffle, должно работать и на х86 и на х64. Но я проверял работоспособность именно на Windows 7 х64. Регистрируете с админскими правами?

Автор: irbis_triffle 02.08.13, 12:14

Цитата(Vofka @ 02.08.13, 8:57) *
irbis_triffle, должно работать и на х86 и на х64. Но я проверял работоспособность именно на Windows 7 х64. Регистрируете с админскими правами?

Да, все от администратора.
Результат на Win2k8R2-x64:

Результат WinXp-x32:


upset.gif upset.gif upset.gif

Автор: Vofka 02.08.13, 13:23

irbis_triffle, .Net Framework 4 стоит?

Добавлю ещё: попробуйте зарегистрировать компоненту с корня какого-то диска.

Добавлю ещё ещё: тю, ёлы палы, для кого я файл RegAddIn.bat приложил?

Автор: irbis_triffle 02.08.13, 14:43

Цитата(Vofka @ 02.08.13, 14:23) *
irbis_triffle, .Net Framework 4 стоит?

Добавлю ещё: попробуйте зарегистрировать компоненту с корня какого-то диска.

Добавлю ещё ещё: тю, ёлы палы, для кого я файл RegAddIn.bat приложил?


Net4 стоит.
С корня тоже не работает.
Ой... я думал он только для первой версии (в архиве со второй его нет). Вот что оно ответило, кажется все в порядке? Но 1с при запуске тестовой обработки говорит "Не удалось зарегистрировать компоненту" (((

Автор: Vofka 14.08.13, 15:51

Долго не отвечал не потому, что просто включил игнор, а потому что не было когда разбираться. Вот дошли руки. Если 1С пишет "Не удалось зарегистрировать компоненту" попробуйте вместо строки

Если Не ПодключитьВнешнююКомпоненту("Pro1C.Notifier") Тогда


написать

Если Не ПодключитьВнешнююКомпоненту("AddIn.Notifier") Тогда

Автор: irbis_triffle 21.08.13, 12:41

Цитата(Vofka @ 14.08.13, 16:51) *
Долго не отвечал не потому, что просто включил игнор, а потому что не было когда разбираться. Вот дошли руки. Если 1С пишет "Не удалось зарегистрировать компоненту" попробуйте вместо строки

Если Не ПодключитьВнешнююКомпоненту("Pro1C.Notifier") Тогда


написать

Если Не ПодключитьВнешнююКомпоненту("AddIn.Notifier") Тогда


Большое спасибо! Теперь заработало - буду разбираться с тонкостями!!!
PS прекрасная идея!

Автор: Vofka 21.08.13, 13:06

Спасибо! smile.gif

Автор: Fantasisto 14.11.13, 11:35

Цитата(Vofka @ 20.06.13, 16:44) *
В новой версии добавле новый метод
Компонента.Activate1C(ЗаголовокСистемы);

В параметре передается строка, которая содержит заголовок текущей системы 1С. Получить эту информацию можно функцией встроенного языка ПолучитьЗаголовокСистемы(). Т.е. Вызов данного метода всегда имеет смысл делать только так:
Компонента.Activate1C(ПолучитьЗаголовокСистемы());

При вызове метода будет показано окно 1С с разворотом на весь экран.


У меня платформа 8.3.3.721, база УНФ (управляемое приложение).
Там нет функции ПолучитьЗаголовокСистемы(), но есть функция ПолучитьЗаголовокКлиентскогоПриложения().
Она возвращает заголовок приложения, НО функция Activate1C() не открывает окно 1С и выдаётся сообщение, что 1С-ка не открыта.

Какое именно туда значение нужно передать, чтобы окно 1С открылось?

Спасибо.

З.Ы. Шикарная dll-ка!

Автор: Vofka 14.11.13, 13:35

Fantasisto, если вы подготовите демо базу и демо обработку где это все можно посмотреть, я на следующей неделе постараюсь разобраться.

Автор: Fantasisto 14.11.13, 14:41

Цитата(Vofka @ 14.11.13, 13:35) *
Fantasisto, если вы подготовите демо базу и демо обработку где это все можно посмотреть, я на следующей неделе постараюсь разобраться.

Я добился того, чтобы окно Активировалось.
НО если оно было свёрнуто, оно не разворачивается, хотя и становится активным.
Как сделать так, чтобы оно ещё и развернулось?
Пытаюсь работать с WshShell, но найти ничего там не могу...

Если же форму не сворачивать, то при активации она выходит на передний план.

Автор: Vofka 14.11.13, 15:06

Должно разворачиваться вообще-то. На досуге проверю ещё.

Автор: mut 18.11.13, 16:51

Для 7.7 просто жизненно необходимая вещь, спасибо! В 8.2 уже привык вставлять ПоказатьОповещениеПользователя()

Автор: Vofka 18.11.13, 16:57

Пожалуйста smile.gif

Автор: Стрелок 23.02.14, 1:03

Доброго времени суток. Простите - не могу зарегистрировать. ваш батник отсутствует по ссылкам. Не могли бы вы текст батника написать сюда

Автор: Vofka 23.02.14, 12:18

Добавил батник отдельно (в конце первого поста).

Автор: Стрелок 24.02.14, 13:12

Доброго дня. Почему то не работает конструкция

Компонента.Activate1C(ЗаголовокСистемы());

окошко 1С не разворачивается

7.7 релиз 27

Автор: Vofka 24.02.14, 13:16

Стрелок, а очень надо, чтобы разворачивалось? smile.gif Потому что насколько я помню (сейчас под рукой нету, проверить не могу) в 7.7 действительно разворачиваться не будет.

Автор: Стрелок 24.02.14, 13:27

ну как бы желательно. хотя и не смертельно wink.gif

Автор: Vofka 24.02.14, 13:56

Если не забуду, в обозримом будущем посмотрю.

Автор: Vofka 13.03.14, 13:23

Стрелок, а что у вас возвращает метод ЗаголовокСистемы() ?

И можно скрин окна 1С?

Автор: Evgeny256 19.11.14, 10:30

Похоже на Windows XP и Server 2003 не заработает, т.к. требует длл-ку DWMAPI.DLL sad.gif sad.gif

Автор: Vofka 19.11.14, 10:48

Я лично на ХР проверял, у меня работало.
NET Framework 4 точно стоит?

Автор: Shakronya 30.01.15, 9:47

Цитата(irbis_triffle @ 02.08.13, 15:43) *
Net4 стоит.
С корня тоже не работает.
Ой... я думал он только для первой версии (в архиве со второй его нет). Вот что оно ответило, кажется все в порядке? Но 1с при запуске тестовой обработки говорит "Не удалось зарегистрировать компоненту" (((


Разрешилось как-нибудь? у меня та же проблема. .NET Framework 4 установлен, винда 7я, 32 разрядная, запуская хоть через батник, хоть через regsvr32 - 1с не видит компоненту, и regsvr32 так же пишет, что точки входа нет ((

Автор: Vofka 30.01.15, 9:54

Shakronya, а теперь сначала. Что вы делаете, какие ошибки система пишет или что происходит вообще? У человека, которого вы процитировали, вроде как все решилось, о чем написано в этой же теме.

Автор: Shakronya 30.01.15, 10:05

Ваш батник пишет : give your assembly a strong name. Я , конечно, мало что смыслю в создании библиотек, но вот, что выдал мне гугл:

To create and sign an assembly with a strong name by using the Assembly Linker
At the Visual Studio Command Prompt, type the following command:

al /out:<assemblyName> <moduleName> /keyfile:<keyfileName>

where:

assemblyName
The name of the strongly signed assembly (a .dll or .exe file) that Assembly Linker will emit.

moduleName
The name of a .NET Framework code module (a .netmodule file) that includes one or more types. You can create a .netmodule file by compiling your code with the /target:module switch in C# or Visual Basic.

keyfileName
The name of the container or file that contains the key pair. Assembly Linker interprets a relative path in relationship to the current directory.

The following example signs the assembly MyAssembly.dll with a strong name by using the key file sgKey.snk.

al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk



Цитата(Vofka @ 30.01.15, 10:54) *
Shakronya, а теперь сначала. Что вы делаете, какие ошибки система пишет или что происходит вообще? У человека, которого вы процитировали, вроде как все решилось, о чем написано в этой же теме.

Ууупс! Увидела! Спасибо!

Автор: Vofka 30.01.15, 10:10

Shakronya, от имени Администратора запускаете?

Автор: Shakronya 30.01.15, 12:39

Цитата(Vofka @ 30.01.15, 11:10) *
Shakronya, от имени Администратора запускаете?


Суперски! Спасибо Вам большое за прекрасную dll! Работаем на УПП =) 32000000.gif

Единственное, не разворачивает 1Ску метод Activate1C(ПолучитьЗаголовокСистемы()). При том, что заголовок системы формируется примерно такой: "Управление производственным предприятием "ООО Рога и копыта" / Эллочка Людоедова / Управление производственным предприятием, редакция 1.3 /"

Автор: Vofka 02.02.15, 9:15

Цитата(Shakronya @ 30.01.15, 12:39) *
Единственное, не разворачивает 1Ску метод Activate1C(ПолучитьЗаголовокСистемы()). При том, что заголовок системы формируется примерно такой: "Управление производственным предприятием "ООО Рога и копыта" / Эллочка Людоедова / Управление производственным предприятием, редакция 1.3 /"

Прямо сейчас не готов что-то ответить/посоветовать по этому вопросу. Я уже и забыл что там к чему.

Автор: Shakronya 02.02.15, 11:38

Цитата(Vofka @ 02.02.15, 10:15) *
Прямо сейчас не готов что-то ответить/посоветовать по этому вопросу. Я уже и забыл что там к чему.

Даешь исходники библиотеки в массы! 32542460.gif

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