Детекторы бизнес событий 1с документооборот примеры

Бизнес-события

Как сделать, чтобы по документу при наступлении определенного условия автоматически стартовал процесс.

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

Для классификации таких событий есть специальный справочник «Виды бизнес событий» (сами же события система записывает в регистр сведений «Произошедшие бизнес-события»). Также важными частями механизма бизнес-событий являются детекторы бизнес-событий и обработчики бизнес-событий, но о них ниже.

Рассмотрим пример – нужно автоматически отправлять в обработку все зарегистрированные служебные записки, файлы которых сотрудники подписали электронной подписью. Тогда условием будет – документ зарегистрирован, файл документа подписан электронной подписью, и по данному документу нет комплексного процесса «Обработка записки».

Создадим вид для бизнес-события, которое будет формироваться при наступлении данного условия.


Теперь нужно добавить «Детектор бизнес-события». Детектор бизнес-события — это как раз та часть механизма, которая отслеживает выполнение условия и создает соответствующее событие в системе.

Добавим новый детектор в справочнике «Детекторы бизнес-событий». В его карточке укажем вид бизнес-события, который создали ранее. В поле «Выражение на встроенном языке» необходимо написать код, который проверяет, есть ли хотя бы один объект, для которого условие истинно. Если есть, то переменной «Результат» нужно присвоить значение Истина. В этом случае система создаст бизнес-событие с указанным видом.

ВАЖНО: Если не установлен флаг «Детектор включен», код детектора исполняться не будет!

В нашем случае нужен запрос, который проверяет, что есть документы с выполненным условием (к документу приложен файл, подписанный электронной подписью и по этому документу нет процессов обработки). Если такие документы есть — значит наше событие произошло. Таким образом событие будет сгенерировано, когда в системе есть один или несколько документов, для которых все условия выполнились, и по ним нужно стартовать процесс.

Код детектора:

 Результат = Ложь;

ВидыДокументов = Новый Массив;

ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию(«Служебная записка», Истина));

Запрос = Новый Запрос;

Запрос.Текст =

                «ВЫБРАТЬ ПЕРВЫЕ 1

                |               ИСТИНА

                |ИЗ

                |               Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

                |                               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы

                |                               ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла

|                               ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы

                |                               ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет

                |ГДЕ

                |               КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL

                |               И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)

                |               И НЕ ВнутренниеДокументы.ПометкаУдаления

                |               И Файлы.ПодписанЭП = ИСТИНА

                |               И НЕ Файлы.ПометкаУдаления»;

Запрос.УстановитьПараметр(«ВидыДокументов», ВидыДокументов);

РезультатЗапроса = Запрос.Выполнить();           

Если Не РезультатЗапроса.Пустой() Тогда

                Результат = Истина;

КонецЕсли;

Выполнение детекторов и формирование событий выполняет регламентное задание «Обработка детекторов бизнес-событий». Это задание исполняется один раз в минуту и выполняет все детекторы событий с флагом Включен.

Далее необходимо выполнить обработку сформированных бизнес-событий. В нашем случае это запуск процессов по документам. Для обработки бизнес-события в программе используется справочник «Дополнительные обработчики-бизнес событий».

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

Код обработчика:

 ВидыДокументов = Новый Массив;

ВидыДокументов.Добавить(Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию(«Служебная записка», Истина));

Запрос = Новый Запрос;

Запрос.Текст =

                «ВЫБРАТЬ

                |               ВнутренниеДокументы.Ссылка

                |ИЗ

                |               Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы

                |                               ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы

                |                               ПО ВнутренниеДокументы.Ссылка = Файлы.ВладелецФайла

                |                               ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.КомплексныйПроцесс.Предметы КАК КомплексныйПроцессПредметы

                |                               ПО ВнутренниеДокументы.Ссылка = КомплексныйПроцессПредметы.Предмет

                |ГДЕ

                |               КомплексныйПроцессПредметы.Предмет ЕСТЬ NULL

                |               И ВнутренниеДокументы.ВидДокумента В(&ВидыДокументов)

                |               И НЕ ВнутренниеДокументы.ПометкаУдаления

                |               И Файлы.ПодписанЭП = ИСТИНА

                |               И НЕ Файлы.ПометкаУдаления»;

Запрос.УстановитьПараметр(«ВидыДокументов», ВидыДокументов);

РезультатЗапроса = Запрос.Выполнить();           

Если Не РезультатЗапроса.Пустой() Тогда

Выборка = РезультатЗапроса.Выбрать();

                ШаблонПроцесса = Справочники.ШаблоныКомплексныхБизнесПроцессов.НайтиПоНаименованию(«Обработка записок», Истина);

    Пока Выборка.Следующий() Цикл

                               Документ = Выборка.Ссылка;

                               БизнесПроцессОбъект = БизнесПроцессы.КомплексныйПроцесс.СоздатьБизнесПроцесс();

                               БизнесПроцессОбъект.ЗаполнитьПоШаблонуИПредмету(ШаблонПроцесса, Документ, Документ.Подготовил);

                               БизнесПроцессОбъект.Записать();

                               Если ПолучитьФункциональнуюОпцию(«ИспользоватьФоновыйСтартПроцессов») Тогда

                РегистрыСведений.ПроцессыДляЗапуска.ДобавитьПроцессДляФоновогоСтарта(БизнесПроцессОбъект.Ссылка);

                               Иначе

                                               БизнесПроцессОбъект.Старт();

                               КонецЕсли;

                КонецЦикла;

КонецЕсли;

Обработчик бизнес-события и бизнес-событие необходимо связать между собой при помощи команды Подписки
в панели навигации обработчика. В открывшемся списке нужно нажать Создать и указать ссылку на созданный ранее вид бизнес-события.

После этого необходимо проверить работу детектора и обработчика, если код написан без ошибок — новые события будут появляться и обрабатываться встроенным механизмом.

Отлаживать же механизм можно частями — проконтролировать появление новых событий можно, открыв регистр сведений «Произошедшие бизнес события» (все события механизм запишет сюда), срабатывание обработчика можно увидеть тут-же по появлению флага «Обработано», а саму правильность кода обработчика — по появлению запланированного результата (в нашем примерe — создан процесс по документу).

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

Для этих задач может хорошо подойти механизм бизнес-событий.
Бизнес-событие – это отражение факта, что произошло некоторое важное для организации событие, которое подтверждено изменением данных в информационной базе. И к таким событиям можно привязать обработчики на встроенном языке 1С.

Использование бизнес-событий в 1С:Документооборот в клиент-серверном варианте на живых примерах подробно рассмотрена в видеокурсе.

Приведем пример бизнес-событий: входящему документу присвоен регистрационный номер. С точки зрения организации это означает, что документ полностью зарегистрирован и готов для дальнейшей работы.
В конфигурации уже предусмотрены готовые бизнес-события, они формируются автоматически и используются для разных механизмов (например, по видам событий «Создание задачи» и «Выполнение задачи» могут быть настроены автоматические уведомления).
Для готовых видов бизнес-событий можно создать свои обработчики этих стандартных событий, чтобы расширить функционал системы.
А также можно создать свои собственные бизнес-события и привязать к ним обработчики событий.
Бизнес-события состоят из нескольких частей:

  • детекторы событий (типовые и пользовательские), 
  • реестр произошедших событий, 
  • обработчики событий (типовые и пользовательские).

Детекторы используются для того, чтобы обнаруживать события. Как только детектор «сработал», записывается новое бизнес-событие. Затем новое бизнес-событие в соответствии с подписками на него будет обработано специальными обработчиками.Обработка одного события происходит в границах одной транзакции. После успешной обработки событие получает статус Задание выполнено. Если событие обработано с ошибками, программа предпримет попытку обработать его несколько раз, а затем удалит, если исправить эту ошибку окажется невозможным. 

Если хоть один обработчик событий завершит свою операцию с ошибкой, то обработка всех событий и все действия других обработчиков будут отменены. Во всех случаях информация о результатах обработки будет записана в журнал регистрации.
По необработанным событиям будет произведена попытка выполнения обработчиков 3 раза. Необработанные бизнес-события будут храниться в регистре сведений «Произошедшие бизнес-события», чтобы администратор мог разобраться с причинами ошибок и устранить их. Обработанные бизнес-события будут храниться определенное кол-во дней (указывается в настройках программы), а потом будут удалены.
Чтобы включить механизм бизнес-событий нужно в настройках программы активировать настройку «Использовать бизнес-события».
Далее можно использовать типовые бизнес-события такие, как:

  1. Возобновление процесса
  2. Добавление в категорию
  3. Завершение процесса
  4. Задача выполнена
  5. Захват файла для редактирования
  6. Изменение брони
  7. Изменение внутреннего документа
  8. Изменение входящего документа
  9. Изменение значения показателя процесса
  10. Изменение исходящего документа
  11. Изменение мероприятия
  12. Изменение отсутствия
  13. Изменение проекта
  14. Изменение проектной задачи
  15. Изменение состава комплекта
  16. Изменение файла
  17. Назначение ответственным за документ
  18. Освобождение файла
  19. Остановка процесса
  20. Отмена выполнения задачи
  21. Перенаправление задачи
  22. Перерегистрация внутреннего документа
  23. Перерегистрация входящего документа
  24. Перерегистрация исходящего документа
  25. Подошел срок задачи
  26. Получение входящего письма
  27. Прерывание процесса
  28. Просрочена задача
  29. Регистрация внутреннего документа
  30. Регистрация входящего документа
  31. Регистрация исходящего документа
  32. Создание брони
  33. Создание внутреннего документа
  34. Создание входящего документа
  35. Создание задачи
  36. Создание исходящего документа
  37. Создание контрагента
  38. Создание мероприятия
  39. Создание отсутствия
  40. Создание проекта
  41. Создание проектной задачи
  42. Создание сообщения
  43. Создание файла
  44. Старт процесса

Кроме типовых бизнес-событий в системе можно добавлять свои события. Для этого необходимо сделать следующее:

  1. В справочнике «Виды бизнес-событий» добавить новое бизнес-событие.
  2. Создать детектор для этого события. У детектора установить флаг «Детектор включен».
  3. Создать дополнительный обработчик. Установить у обработчика флаг «Обработчик включен». Настроить у обработчика подписку на событие.

Рассмотрим самый простой вариант привязки типового обработчика к типовому событию.

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

На закладке «Автоматический запуск» указываем событие «Создание внутреннего документа».

Создадим новый документ. Открываем регистр сведений «Произошедшие бизнес-события». Видим, что наше событие пока не обработано.

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

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

Открываем в разделе «Настройка и администрирование» справочник «Дополнительные обработчики».

Создаем новый обработчик бизнес-события. Заполняем его наименование, описание и код обработки события. Устанавливаем флаг «Обработчик включен».

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

Теперь при создании нового внутреннего документа у нас будет не только запускаться комплексный процесс по шаблону, но и производиться его дополнительная обработка.

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

Использование бизнес-событий в 1С:Документооборот в клиент-серверном варианте на живых примерах подробно рассмотрена в видеокурсе.

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

Бизнес-события – это отображение факта, что произошло некое важное для организации событие, которое подтверждено изменением данных в информационной базе. К ним можно привязать специальные обработчики, которые помогут реализовывать те или иные механизмы.

В типовой версии уже предустановлены готовые бизнес-события, они формируются автоматом и применяются для разнообразных механизмов (ук примеру, по видам событий «Создание задачи» и «Выполнение задачи» могут быть заданы автоматические уведомления).

Для готовых видов бизнес-событий можно писать свои обработчики для расширения функционала системы. Также в системе можно задать собственные бизнес-события и привязывать к ним обработчики событий. Все это практически безгранично расширяет возможности системы.

Бизнес-события состоят из нескольких частей:

  • детекторы событий (типовые и пользовательские);
  • реестр произошедших событий;
  • обработчики событий (типовые и пользовательские).
Рис.1 Бизнес события
Рис.1 Бизнес события

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

Рис.2 Настройки программы
Рис.2 Настройки программы

Перейдем по гиперссылке «Общие настройки».

Рис.3 Общие настройки
Рис.3 Общие настройки

В настройках должна быть установлена галочка «Бизнес-события».

Рис.4 Бизнес-события в общих настройках
Рис.4 Бизнес-события в общих настройках

Программой «1С:Документооборот» в разделе «Настройка и администрирование-Бизнес-события» предусмотрен справочник «Виды бизнес-событий».

Рис.5 Виды бизнес-событий
Рис.5 Виды бизнес-событий

В справочнике уже заложены предопределенные бизнес-события, которые фиксируются системой автоматически.

Рис.6 Предопределенные бизнес-события
Рис.6 Предопределенные бизнес-события

Перечень типовых бизнес-событий в системе:

  1. Возобновление процесса
  2. Добавление в категорию
  3. Завершение процесса
  4. Задача выполнена
  5. Захват файла для редактирования
  6. Изменение брони
  7. Изменение внутреннего документа
  8. Изменение входящего документа
  9. Изменение значения показателя процесса
  10. Изменение исходящего документа
  11. Изменение мероприятия
  12. Изменение отсутствия
  13. Изменение проекта
  14. Изменение проектной задачи
  15. Изменение состава комплекта
  16. Изменение файла
  17. Назначение ответственным за документ
  18. Освобождение файла
  19. Остановка процесса
  20. Отмена выполнения задачи
  21. Перенаправление задачи
  22. Перерегистрация внутреннего документа
  23. Перерегистрация входящего документа
  24. Перерегистрация исходящего документа
  25. Подошел срок задачи
  26. Получение входящего письма
  27. Прерывание процесса
  28. Просрочена задача
  29. Регистрация внутреннего документа
  30. Регистрация входящего документа
  31. Регистрация исходящего документа
  32. Создание брони
  33. Создание внутреннего документа
  34. Создание входящего документа
  35. Создание задачи
  36. Создание исходящего документа
  37. Создание контрагента
  38. Создание мероприятия
  39. Создание отсутствия
  40. Создание проекта
  41. Создание проектной задачи
  42. Создание сообщения
  43. Создание файла
  44. Старт процесса

Как только какое-либо событие произошло, происходит запись этого события в регистр сведений «Произошедшие бизнес-события» (доступен в меню «Все функции»).

Рис.7 Произошедшие бизнес-события
Рис.7 Произошедшие бизнес-события

В этом регистре отображается вид события, источник записи, автор и отметка об обработке записи.

Рис.8 Параметры бизнес-событий
Рис.8 Параметры бизнес-событий

Так, например, при создании нового внутреннего документа «Договор аренды» в регистре появляется запись «Создание внутреннего документа», при формировании файла договора в регистре появляется запись «Создание файла» и т.д.

Пользователь может создавать свои бизнес-события и привязать к ним обработчики событий – типовые или пользовательские. Справочник «Дополнительные обработчики» доступен в разделе «Настройка и администрирование-Бизнес-события».

Рис.9 Дополнительные обработчики
Рис.9 Дополнительные обработчики

С помощью кнопки «Создать» пользователь может задать дополнительный обработчик бизнес-событий.

Рис.10 Создание дополнительного обработчика бизнес-событий
Рис.10 Создание дополнительного обработчика бизнес-событий

В карточке указывается наименование обработчика, код обработки события и устанавливается галочка «Обработчик включен».

Рис.11 Обработчик включен
Рис.11 Обработчик включен
Рис.12 Код отмены обработки событий
Рис.12 Код отмены обработки событий

В меню «Подписки» пользователь указывает подписку для данного обработчика (кнопка «Создать»).

Рис.13 Меню Подписки
Рис.13 Меню Подписки
Рис.14 Создание Подписки
Рис.14 Создание Подписки

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

Рис.15 Виды бизнес событий
Рис.15 Виды бизнес событий

Бизнес-событие может запускаться при создании документа (внутреннего, входящего, исходящего, его регистрации, получении входящего и т.п.).

Рис.16 Связь вида бизнес-события с обработчиком
Рис.16 Связь вида бизнес-события с обработчиком

Связь вида бизнес-события с обработчиком указывается в данной форме.

Кроме типовых бизнес-событий в системе можно добавлять свои события. Для этого необходимо сделать следующее:

  1. В справочнике «Виды бизнес-событий» добавить новое бизнес-событие;
  2. Перейти к созданию детектора бизнес-событий*. У детектора установить флаг «Детектор включен».
  3. Создать дополнительный обработчик. Установить у обработчика флаг «Обработчик включен». Настроить у обработчика подписку на событие.

*Детектор бизнес события – это механизм, который отслеживает выполнение заданного условия и создает определенное событие в информационной базе.

Детектор отслеживает события. Как только условие детектора выполнено, система фиксирует новое бизнес-событие. Затем новое бизнес-событие в соответствии с подписками на него будет обработано связанным обработчиком.

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

Чтобы правильно настроить и использовать все богатые возможности 1С:Документооборот, обращайтесь к профессионалам, мы сделаем вашу работу с документами легкой и эффективной.

   Strelolga

20.04.16 — 13:17

Добрый день!

Занимаюсь внедрением документооборота. Реализован старт БП по получению электронного письма. У БП есть до. реквизит — почта отправителя. БП состоит из одной задачи «Ознакомление», в которой пользователь заводит нового контрагента. Теперь возникает закономерное желание при выполнении задачи оповещать заказчика (отправителя электронного письма) о результате ознакомления. Стандартными средствами не получается реализовать: если сосздать вторую задачу «Ознакомление с результатами», тогда нужно будет указывать исполнителя..А У нас такого пользователя может в БД и не быть. Хочу см помощью детектора событий отследить момент, когда выполняется задача «Ознакомление» и формировать исх электронное сообщение. Возникает проблема, как написать детектор событий?

  

Партнерская программа EFSOL Oblako

   Лефмихалыч

1 — 20.04.16 — 13:21

>как написать детектор событий

Раздел Нормативно-справочная информация…детекторы бизнес событий…новый и в текстовое поле пиши код.

Но, думаю, на самом деле вопрос у тебя не в этом

   lubitelxml

2 — 20.04.16 — 13:22

ну при завершении БП ознакомления ты можешь выполнять произвольный код, что мешает там написать формирование эл. письма? п.с.: у нас на самописке именно так.

   Strelolga

3 — 20.04.16 — 13:23

Конечно не в этом. Меня интересует, как отобрать задачу «Ознакомление» у нужного мне БП, которая только что выполнилась. И как не обрабатывать одни и те же, задачи

   Strelolga

4 — 20.04.16 — 13:24

(2) расскажи подробнее, как выполнять произвольный код?

   Strelolga

5 — 20.04.16 — 13:25

(2)т.е. сделать в конфигураторе подписку на событие «БППри записи».. и если статус = завершен, тогда формировать письмо?

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

   lubitelxml

6 — 20.04.16 — 13:25

(4) в карте маршрута есть точка завершения, у нее можно указать событие

   lubitelxml

7 — 20.04.16 — 13:26

с детекторами из бсп не работал

   Strelolga

8 — 20.04.16 — 13:27

(6) подробнее можно?

   lubitelxml

9 — 20.04.16 — 13:31

(8) правой по бизнес процессу — открыть карту маршрута, там в самом низу голубенький блок, у него в свойствах есть событие, будет отрабатывать при закрытии БП. Вот мой код из этой процедуры

    ДатаЗавершения = ТекущаяДатаСеанса();

    Если ТипЗнч(ОбъектСогласования) = Тип(«ДокументСсылка.УстановкаЦенНоменклатуры»)  Тогда

        //

        РассылкаУведомлений.ВыполнитьРассылку(ЭтотОбъект.Ссылка, Справочники.ВидыУведомлений.НайтиПоКоду(«000000033»));    

    ИначеЕсли ТипЗнч(ОбъектСогласования) = Тип(«СправочникСсылка.Конкурсы»)  Тогда    

        //

        РассылкаУведомлений.ВыполнитьРассылку(ЭтотОбъект.Ссылка, Справочники.ВидыУведомлений.НайтиПоКоду(«000000035»));    

    КонецЕсли;

   Лефмихалыч

10 — 20.04.16 — 13:32

(9) только это к сабжу не имеет отношения

   lubitelxml

11 — 20.04.16 — 13:33

(10) я в (7) написал что решение без детекторов

   Strelolga

12 — 20.04.16 — 13:36

(9) нет события. все посмотрела на 3 раза. а так идея хорошая

   Strelolga

13 — 20.04.16 — 13:37

Документооборот 8 КОРП, редакция 2.0 (2.0.9.6)

   Strelolga

14 — 20.04.16 — 13:38

что является объектом согласования?

   Лефмихалыч

15 — 20.04.16 — 13:41

Надо создать вид события. С этим видом события связать детектор. В детекторе написать код, который будет возвращать истину, когда есть в даже необработанные завершенные ознакомления нужного вида. Далее создать польовательский обработчик бизнес-события, который связать с этим событием и в коде обработчика написать код, который будет отправлять в нужном количестве письма.

   Лефмихалыч

16 — 20.04.16 — 13:41

это — если кратко.

   Strelolga

17 — 20.04.16 — 13:42

(15) Эти общие фразы я и так понимаю.

Я не понимаю что написать в код детектора. Как отследить событие, задача завершена.

   Strelolga

18 — 20.04.16 — 13:46

АА. нужно наверное так.. Выбирать все выполненные задачи например за предыдущий час по нужному мне БП. Если хоть одна задача найдена, результат = истина; ТОгда запустится обработка и должна сработать подписка. В которой я опять же буду выбирать все задачи, которые ввыполнены за предыдущий час и которые еще не были обработаны (вот как это отследить???) и отправлять по ним письма. я на верном пути?

   Лефмихалыч

19 — 20.04.16 — 13:53

(17) ну, задавай тогда конкретные вопросы

(18) тебе как-то надо мочь отличать именно твои процессы или задачи программно. Например это по шаблону процесса делать. Или сама придумай способ. Кроме того, тебе надо и в коде детектора, и в коде обработчика отличать процессы/задачи, по которым уже все отправлено, от таких же, по которым не отправлено. Иначе заспамишь дублями.

  

lubitelxml

20 — 20.04.16 — 14:00

(18) почитайте про БП — много статей написано, там все разжевано

Понравилась статья? Поделить с друзьями:
  • Детская библиотека на артековской улице часы работы
  • Дикси на покровской улице в некрасовке время работы
  • Детская библиотека на индустриальном 15 часы работы
  • Димитрова 3 к 2 паспортный стол часы работы телефон
  • До какого часа можно делать шумные работы в субботу