Служба сообщений для 1С

22.05.12

Разработка - Работа с интерфейсом

Служба сообщений для 1С.
Основано на "Чат для 1С" от Luns
На основе встроенных объектов 1С. Не нагружает базу данных запросами о новых сообщениях - уведомления рассылаются по локальной сети с использованием внешней компоненты.

Скачать файлы

Наименование Файл Версия Размер
Конфигурация 2.1.5
.cf 837,77Kb
133
.cf 837,77Kb 133 Скачать
Конфигурация 2.1.6
.cf 839,00Kb
3
.cf 839,00Kb 3 Скачать
Конфигурация 2.2.1
.cf 839,93Kb
8
.cf 839,93Kb 8 Скачать
Конфигурация 2.2.2
.cf 841,35Kb
66
.cf 841,35Kb 66 Скачать
Конфигурация 2.2.4
.cf 841,48Kb
315
.cf 841,48Kb 315 Скачать
Конфигурация 1.2.3
.cf 2,37Mb
71
.cf 2,37Mb 71 Скачать
Обновление 1.2.3
.cfu 44,00Kb
11
.cfu 44,00Kb 11 Скачать
Конфигурация 2.0.0
.cf 2,51Mb
47
.cf 2,51Mb 47 Скачать
Обновление 1.2.4
.cfu 44,12Kb
2
.cfu 44,12Kb 2 Скачать
Обновление 2.0.0
.cfu 183,01Kb
5
.cfu 183,01Kb 5 Скачать
Конфигурация 2.1.2
.cf 672,58Kb
11
.cf 672,58Kb 11 Скачать
Обновление 2.1.2
.cfu 315,18Kb
2
.cfu 315,18Kb 2 Скачать
Конфигурация 2.1.4
.cf 683,19Kb
18
.cf 683,19Kb 18 Скачать
Обновление 2.1.4
.cfu 169,13Kb
1
.cfu 169,13Kb 1 Скачать
Обновление 2.1.5
.cfu 313,87Kb
1
.cfu 313,87Kb 1 Скачать
Обновление 2.1.6
.cfu 29,12Kb
2
.cfu 29,12Kb 2 Скачать
Обновление 2.2.1
.cfu 134,77Kb
2
.cfu 134,77Kb 2 Скачать
Обновление 2.2.2
.cfu 136,79Kb
13
.cfu 136,79Kb 13 Скачать
Обновление 2.2.4
.cfu 137,00Kb
22
.cfu 137,00Kb 22 Скачать

Основано на "Чат для 1С" за авторством Лунёв С.Ю. ака luns

Позволяет обмениваться сообщениями и файлами между пользователями, подключенными к информационной базе 1С.

Сообщения, история, настройки хранятся в базе, локальные ресурсы не используются (за исключением расположения внешней компоненты SimpleLan, временных файлов)

Постоянных запросов к БД удалось избежать используя внешнюю компоненту для отправки уведомлений по сети (подробнее в этой публикации). Уведомления работают в рамках одной подсети для каждого локального интерфейса компьютера.

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

Конфигурация рабочая (нужно только создать пользователей), но приведена в качестве примера. Служба сообщений предполагает внедрение в имеющуюся конфигурацию. Порядок установки - в справке к обработке.

Пожелания и критика как всегда приветствуются.
VoZHD

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61795    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54402    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    16697    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10735    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    9611    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
96. Bassgood 1425 19.10.11 14:49 Сейчас в теме
Очень хорошая вещь! Спасибо!
98. Bassgood 1425 19.10.11 22:08 Сейчас в теме
Можно еще добавить вот что: при получении сообщения - выдавать звуковой сигнал (как в аське), и возможность его отключения.
99. vozhd 209 19.10.11 22:59 Сейчас в теме
(98) Zigfridish, добавил, будет в 2.1.6
100. Amorfus 31.10.11 15:05 Сейчас в теме
Пожелания:
1. Было бы неплохо отправлять сообщения группе пользователей
2. Добавить окошко (не модальное) с информацией о новых сообщениях, с кнопочкой открыть, для открытия этих сообщений.
3. В общем модуле дописать процедурку, которую можно было бы вешать на любой объект и по которой происходило бы отправление объекта сообщением (можно чтобы появлялось подменю с активными пользователями и сообщение сразу адресовалось).
101. vozhd 209 01.11.11 12:08 Сейчас в теме
(100) Amorfus,
1. Такая функция есть - выдели несколько пользователей с помощью Shift или Ctrl и отправь с помощью правой кнопки мыши. Если ты о группах пользователей как таковых, то древовидный список пользователей не реализован.
2. Предполагается что этот функционал заложен в панель уведомлений, однако я не нашел ей практическое применение, только обеспечил мало-мальскую работоспособность.
3. Я конечно не до конца понял, о чем речь, но полагаю человек, способный повесить на объект функцию отправки в состоянии сам разобраться как использовать имеющиеся процедуры отправки в обработке СС. Я же стремлюсь минимизировать вмешательство в конфигурацию.
102. Bassgood 1425 02.11.11 22:03 Сейчас в теме
(101)
Можно реализовать древовидный список пользователей (как было указано в 1 пункте), чтобы можно было создавать группы пользователей и добавлять в них необходимых людей (как в аське).
107. nealaran 09.12.11 16:58 Сейчас в теме
(101)
Отличная вещь,
Ошибки:
1.При попытке отправить сообщения одному или нескольким пользователям через меню по правой кнопке мыши на пользователе выдает:

{Обработка.СлужбаСообщений.МодульОбъекта(672)}: Ошибка при вызове метода контекста (ПолучитьФорму)
Форма = ПолучитьФорму("ФормаСообщения",мФорма);
по причине:
Недопустимое значение параметра (параметр номер '1')

Собственно потому, что этой формы нет (Есть "ФормаСообщения1", "ФормаСообщения2" и т.д.)
103. ukgh 07.11.11 12:30 Сейчас в теме
спасибо отличная вещь!!!!
104. koka 87 08.11.11 11:43 Сейчас в теме
Найдены ещё досадные ошибки:

1. Вы уже зашли с другого компьютера
{Обработка.СлужбаСообщений.МодульОбъекта(153)}: Ошибка при вызове метода контекста (Записать): Запись с такими ключевыми полями существует! : СлужбаСообщений_Пользователи: Иванов, 39a10aea-e8ad-4909-aeb6-61be0909febd (Регистр сведений: Служба сообщений - Пользователи)


На рисунке видно, что установлено 3 локальных сети (2 - виртуальные). Но в программе определяется только одна и три раза.

2. Не работает команда Результат = ПодключитьВнешнююКомпоненту("AddIn.SimpleLan") (строка 27 обработки СлужбаСообщений) для случая, когда пользователь не имеет административных прав. Если первый раз запуститься под пользователем - администратором, то компонента установится и пропишется в реестре корректно, но в TEMPовом каталоге этого пользователя. А у обычного пользователя прав доступа на каталог администратора нет.
Возможный выход из этой ситуации - вручную зарегистрировать (администратором) компоненту SimpleLan в системном каталоге или каталоге программы.
Прикрепленные файлы:
113. vozhd 209 09.05.12 11:33 Сейчас в теме
(104) koka, поправил в версии 2.1.6
(102) Zigfridish, максисмум, что буду делать в направлении древовидного списка - реализую отображение иерархии справочника Пользователи.
(106) goodwin13, F1 )
(107) nealaran, (109) lexa12345, поправил в 2.1.6
(108) lexa12345, (111) scream, поправил в 2.1.6
105. wing 27 15.11.11 06:18 Сейчас в теме
(0) Попробовал. Понравилось.
Возникли некоторые мысли:
  • Для портабельности конфы необходимо сперва добавить префикс ко всем ее объектам.
  • Определить версию файла нетрудно, но не средствами 1С, а средствами винды.
  • Древовидность списка лучше всего реализовывать через справочник пользователей, например, добавив в него поле "Отдел/Подразделение" или аналог, а то и вообще ссылку на элемент иерархической структуру организации... хотя, лучше это делать опцией.
115. vozhd 209 10.05.12 08:52 Сейчас в теме
(105) wing, да, префикс это правильно. Попробовал объединить с БП 2.0 - ругается на переменную Пользователи (исправил в 2.2.4)
по поводу версии файла - честно говоря лень писать еще одну компоненту
118. wing 27 15.05.12 07:00 Сейчас в теме
(115) Зачем компоненту? Кто запрещает использовать MSScriptControl.ScriptControl? - это по поводу определения версии из Version Control.
Был вариант проще: версию могла возвращать сама компонента, но это надо было предусматривать сразу...
106. goodwin13 07.12.11 22:27 Сейчас в теме
109. lexa12345 06.02.12 11:37 Сейчас в теме
Еще в догонку:
При веделении нескольких пользователей и попытке отправить им сообщение выходит следующее:
{Обработка.СлужбаСообщений.МодульОбъекта(672)}: Ошибка при вызове метода контекста (ПолучитьФорму)
Форма = ПолучитьФорму("ФормаСообщения",мФорма);
по причине:
Недопустимое значение параметра (параметр номер '1')

??? Помогите.

Сорри. Увидел предыдущие сообщения. Как пожелание было бы очень неплохо реализовать
110. klel 06.03.12 21:25 Сейчас в теме
Спасибо разработчику нужная вещь в большой фирме где много народу, не надо отдельного чата ставить когда есть уже 1с у всех зашел запустил и радуйся не надо письма писать и ждать когда другой человек войдет и воспользуется почтой а тут раз и готово =) плюсик поставлю :)
111. scream 31 04.05.12 15:31 Сейчас в теме
подскажите что я делаю не так

терминальный сервер
win 2008

компоненту зарегистрировал
regsvr32 D:\обработки\чат1с\SimpleLan.dll

в итоге она загружается только у тех у кого административные права
112. scream 31 04.05.12 15:32 Сейчас в теме
да и еще
после того как регистрирую подключается у всех

если перезагрузить сервер
все при входе в 1с доступна только у администраторов
114. vozhd 209 09.05.12 12:04 Сейчас в теме
Очень много вопросов возникает по поводу внешней компоненты, поэтому в двух словах о процедуре регистрации компоненты SimpleLan.
Написанное ниже актуально для версии 2.1.6 и дальше.

Сама компонента живет по адресу %COMMONPROGRAMFILES%\SimpleLan1C\SimpleLan.dll. У меня (Win7Pro x64) это каталог "C:\Program Files (x86)\Common Files\SimpleLan1C"
Все временные файлы создаются и выгружаются в каталог, который возвращает функция КаталогВременныхФайлов(), у меня это "C:\Users\Пользователь\AppData\Local\Temp"

Для начала СС проверяет совпадение размеров макета и компоненты (в Common Files). Если размер не совпал то сначала удаляет регистрацию компоненты в реестре. Далее выгружает компоненту из макета во временный каталог и, при необходимости (если у нас Windows с контролем учетных записей), туда же скрипты для повышения прав. Формирует CMD-файл (тоже во временном каталоге) с заданиями по удалению, копированию новой, регистрации, удалению временной компоненты. При необходимости этот CMD запускается через скрипты с административными привелегиями, иначе - просто так. В результате мы получаем зарегистрированную SimpleLan.dll в каталоге Common Files, который доступен всем пользователям.

Если не работает: удалите регистрацию SimpleLan.dll вручную (regsvr32 /u "полный_путь\SimpleLan.dll"). Компонента не менялась, так что не важно, путь к какой укажете. Потом удалите все SimpleLan.dll и перезапустите программу.

Как сделать вручную: Служба сообщений проверяет существование и размер библиотеки по адресу %COMMONPROGRAMFILES%\SimpleLan1C\SimpleLan.dll, но не проверяет ее регистрацию в реестре. Если делать вручную, помимо копирования в указанный адрес еще нужно зарегистрировать - regsvr32 "полный_путь\SimpleLan.dll".
116. son_v 3 14.05.12 16:44 Сейчас в теме
Вещь хорошая. Удобно еще отправлять системно сообщение пользователю, когда требуется его внимание и участие. Например, когда проведен документ и требуется его согласование конкретным пользователем. Провели документ Поступления от поставщика, в котором цены выше чем были ранее, и уходит сообщение о несоответствии цены конкретному менеджеру закупки. Много чего еще можно придумать. Такие сообщения экономят время.
Но это больше не к чату относится, а к системе оповещения.
117. vozhd 209 14.05.12 19:17 Сейчас в теме
(116) son_v, думаю это достаточно легко реализовать через подписки на события даже не внося изменения в штатные модули. Разве что задача слишком уж сильно зависит от бизнес-процессов предприятия и решать ее стоит в рамках доработки.
119. scream 31 15.05.12 10:27 Сейчас в теме
1. скачал последний релиз
2. терминальный сеанс для сервера 2008 r2 enterprise
3. даю пользователю права админа - все гуд
4. забираю права администратора, перезапускаю сеанс
строчка
Результат = ПодключитьВнешнююКомпоненту("AddIn.SimpleLan");

Результат выходит ЛОЖЬ

куда копать?
120. vozhd 209 16.05.12 08:27 Сейчас в теме
(119) scream, для начала не надо пользователям давать права админа,
потом проверить путь компоненты в реестре и ее фактическое местоположение. Попробовать убрать регистрацию - зарегистрировать заново как в (114) vozhd.
121. Win32Sanek 16.05.12 08:31 Сейчас в теме
122. PanKir 70 31.05.12 10:08 Сейчас в теме
(0)
{Обработка.СлужбаСообщений.МодульОбъекта(54)}: Тип не определен (AddIn.SimpleLan)
мСеть = Новый("AddIn.SimpleLan");

никак не могу понять, где взять этот SimpleLan, откуда качать?
стоит win7-64, смотрел в програмс файлах - нет там никаких таких папок и длл-ок
не дадите ссылочку откуда его скачать?..
123. vozhd 209 01.06.12 10:57 Сейчас в теме
(122) PanKir, SimpleLan.dll есть в обработке, в одноименном макете. Если почему-то не выгружается (может я не учел нестандартную установку Windows или что-то в этом роде) можно выгрузить из макета и зарегистрировать вручную.
124. HIgor 21 07.06.12 12:43 Сейчас в теме
Супер вещь:-) На win7-64 взлетела.
1. Чтоб не было ошибки (122) пользователю надо дать роль "СлужбаСообщений_Пользователь" перед запуском.
2. Возникла проблема с некоторыми пользователями тут

Если ПользовательИБ.Имя=Пользователь.Наименование Тогда
	НайденныйПользовательИБ=ПользовательИБ;
	Прервать;
КонецЕсли;

Поправил проверку

Если ПользовательИБ.УникальныйИдентификатор = Пользователь.ИдентификаторПользователяИБ Тогда


3. При заполнении списка пользователей сделал доп проверку на наличие роли "СлужбаСообщений_Пользователь" у пользователя (если роли нет чтоб в список не попадал)
125. vozhd 209 07.06.12 20:11 Сейчас в теме
(124) HIgor, по второму пункту - полностью согласен, я сравнивал по наименованию потому что не во всех конфигурациях есть ИдентификаторПользователяИБ. по третьему пункту - так вроде и у меня такая проверка есть - в последней версии как раз добавил.
126. HIgor 21 07.06.12 21:43 Сейчас в теме
У меня доходила до первого пользователя без роли - заносила его в список, потом при попытке записать в Процедуре ОбновитьСтатус уходила в исключение.

		Попытка                             
			Если Статус="Выключен"
				Тогда ОповеститьВсех("Выход");
			Иначе ОповеститьВсех("СменаСтатуса");
			КонецЕсли;                                                                  
			Набор.Записать();


(поставил в живую УПП на 60 пользователей)

В результате пользователей без роли стал рубить выше в превилигированной функции
Было:
		Если Пользователь.Предопределенный ИЛИ 
			Пользователь.ПометкаУдаления ИЛИ 
			Пользователь.ЭтоГруппа ИЛИ 
			Пользователь.Наименование="<Не указан>"	ИЛИ
			СокрЛП(Пользователь.Код)="НеАвторизован"
			Тогда Продолжить; 
		КонецЕсли;
Показать


Стало
Если Пользователь.Предопределенный ИЛИ 
	Пользователь.ПометкаУдаления ИЛИ 
	Пользователь.ЭтоГруппа ИЛИ 
	Пользователь.Наименование="<Не указан>"	ИЛИ
	СокрЛП(Пользователь.Код)="НеАвторизован" ИЛИ
	не Сообщения_привелигированные.ПроверитьРольПользователя(Пользователь,"СлужбаСообщений_Пользователь")
	Тогда Продолжить; 
КонецЕсли;
Показать


Функция ПроверитьРольПользователя
Функция ПроверитьРольПользователя(п, роль) Экспорт 
Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(п.ИдентификаторПользователяИБ).Роли.Содержит(Метаданные.Роли[роль])
КонецФункции


Но тут опять ИдентификаторПользователяИБ
127. milliondeneg 28.06.12 11:59 Сейчас в теме
А что делать если подсетей несколько? как быть? Можно в компоненте расширить кол. подсетей?
128. vozhd 209 28.06.12 16:23 Сейчас в теме
(127) milliondeneg, дело не в количестве. Я ограничил одной подсетью так как в первом варианте был протокол TCP, а он подразумевает двустороннее подключение - мне не хотелось обрабатывать исключения отказов сети. В принципе, так как сейчас работает по UDP, проверку на нахождение источника и адресата в одной подсети можно выключить и использовать маршрутизатор для перенаправления пакетов.
129. MartyNSK 1 18.06.13 19:04 Сейчас в теме
Может круто было бы в архив включить эту самую компоненту simplelan(Автору конечно отстегнуть)))?
130. MartyNSK 1 18.06.13 19:35 Сейчас в теме
Упс, вижу в комплекте, извиняюсь за невнимательность)
131. MartyNSK 1 18.06.13 22:14 Сейчас в теме
Нашел досадный косяк, все прекрасно работает, при условии, что код и наименование у пользователя одинаково, в противном случае в РС ".._Пользователи" происходит двойная запись с уидом и нулями вместо него, в виду чего пользователи в списке не отображаются, сообщения не летают. Тест на чистой вашей конфе.
132. MartyNSK 1 18.06.13 22:21 Сейчас в теме
Тут вроде поправил, заработало.
//**Модуль объекта**//

Для Каждого ПользовательИБ ИЗ ПользователиИБ Цикл
Если ПользовательИБ.Имя=СокрЛП(Пользователь.Код) Тогда//Пользователь.Наименование Тогда
НайденныйПользовательИБ=ПользовательИБ;
Прервать;
КонецЕсли;
КонецЦикла;

Ща проверю на УТ 10.3.
133. MartyNSK 1 18.06.13 22:29 Сейчас в теме
Если вызвать информацию о пользователе из списка пользователей там доступно изменение пола, однако изменения не сохраняются.
134. MartyNSK 1 18.06.13 22:52 Сейчас в теме
Проверил с УТ 10.3, может не верно объединил? Хотя там объединять то нечего, не взлетело, см. скрин, в модуль об.прилож. скопировал следующее:
//СлужбаСообщений
Перем дф_СлужбаСообщенийСервер Экспорт;
Перем дф_СлужбаСообщенийИдентификатор Экспорт;
//Конец СлужбаСообщений

//**ПриНачалеРаботыСистемы()**//
//СлужбаСообщений
Если РольДоступна("СлужбаСообщений_Пользователь") Тогда
дф_СлужбаСообщенийСервер = Обработки.СлужбаСообщений.Создать();
дф_СлужбаСообщенийСервер.ДействияПриНачалеРаботыСистемы();
КонецЕсли
//Конец СлужбаСообщений

//**ПриЗавершенииРаботыСистемы()**//
//СлужбаСообщений
Если РольДоступна("СлужбаСообщений_Пользователь") Тогда
дф_СлужбаСообщенийСервер.ДействияПриЗавершенииРаботыСистемы();
КонецЕсли
//Конец СлужбаСообщений
Опустил проверку на существование и создание пользователей, а также инициализацию параметра сеанса текущий пользователь.
Вроде все верно? Кто уже срастил с УТ, отпишитесь.
Прикрепленные файлы:
135. MartyNSK 1 25.06.13 14:14 Сейчас в теме
Вопросы закрыты, все же пересилил себя и прочитал faq в комплекте)
136. BoryaMbi 25 10.08.13 14:42 Сейчас в теме
Благодарю авторов решения.
У меня вопрос, если у пользователя не указана галка "Показывать в списке выбора", то он не будет высвечиваться в списке пользователей чата? Если мне необходимо, чтобы все пользователи высвечивались, что необходимо сделать?
Прикрепленные файлы:
138. softgarant 62 29.05.15 11:03 Сейчас в теме
Скажите проект уже никто не продвигает?
140. waitklassik 25.02.19 09:32 Сейчас в теме
141. Samur_1C 22.04.19 16:03 Сейчас в теме
у меня проблема с Тип не определен (AddIn.SimpleLan)
Оставьте свое сообщение