Добавил решения блока 07
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,176 @@
 | 
			
		||||
# Задание к занятию "HTTP-сервисы и SOAP-сервисы"
 | 
			
		||||
 | 
			
		||||
В качестве результата прислать полную конфигурацию, полученную из всех трех задач - одним файлом.
 | 
			
		||||
 | 
			
		||||
## Задание 1. Создание схемы данных
 | 
			
		||||
 | 
			
		||||
Улучшение взаимодействия с сервисом бронирования отелей из занятия 7.1
 | 
			
		||||
Как видно из заданий 2 и 3 домашней работы 7.1 - и в варианте JSON и в варианте XML используется одна и та же логическая структура данных:
 | 
			
		||||
 | 
			
		||||
* Фамилия и имя
 | 
			
		||||
* Дата заезда
 | 
			
		||||
* Тип номера
 | 
			
		||||
* Признак наличия душа
 | 
			
		||||
* Признаки приемов пищи (завтрак/обед/ужин), которые включены в стоимость номера
 | 
			
		||||
 | 
			
		||||
Таким образом, можно структурировать эту модель данных и сделать ее более формальной и удобной для заполнения.
 | 
			
		||||
 | 
			
		||||
### Описание задачи
 | 
			
		||||
 | 
			
		||||
Необходимо создать ПакетXDTO с пространством имен "https://netology.ru/1c/data-models/hotels/v1" и описать в нем структуру типов указаннной модели данных.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Бронирование
 | 
			
		||||
  Гость: Множество элементов типа "Гость"
 | 
			
		||||
 | 
			
		||||
Гость
 | 
			
		||||
  Имя гостя: Строка
 | 
			
		||||
  Дата заезда: Дата
 | 
			
		||||
  Комната: Комната
 | 
			
		||||
    Тип комнаты: перечисление Одиночный/Двойной
 | 
			
		||||
    С душем: Булево
 | 
			
		||||
  Питание: Питание
 | 
			
		||||
    Завтрак: Булево
 | 
			
		||||
    Обед: Булево
 | 
			
		||||
    Ужин: Булево
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Требования к результату
 | 
			
		||||
 | 
			
		||||
Выгрузка информационной базы (.dt) с конфигурацией, в пакетах XDTO которой находится пакет "БронированиеОтеля" с указанной структурой.
 | 
			
		||||
ПакетXDTO должен позволять сформировать XML требуемой структуры, с правильным именованием узлов и их типом (атрибут, текст, элемент)
 | 
			
		||||
 | 
			
		||||
### Процесс выполнения
 | 
			
		||||
 | 
			
		||||
* Создайте чистую конфигурацию
 | 
			
		||||
* Создайте ПакетXDTO и назовите его БронированиеОтеля. Задайте пространство имен "https://netology.ru/1c/data-models/hotels/v1"
 | 
			
		||||
* Добавьте (из подменю кнопки Добавить) ТипОбъекта и назовите его "Бронирование"
 | 
			
		||||
* Повторите для типов-объектов Гость, Комната и Питание
 | 
			
		||||
* В типе "Бронирование" создайте свойство "Гость" (правой кнопкой по типу, подменю Добавить/Свойство) и задайте ему тип "Гость" из этого же пространства имен. Обратите внимание, для задания значения свойства нужно сначала "включить" изменения свойства, нажав на кнопку с зеленой галочкой. Наше пространство имен будет в самом низу списка доступных для выбора типов.
 | 
			
		||||
* Далее, для свойства Гость задайте "ЛокальноеИмя" равное "guest".
 | 
			
		||||
* Также, свойству Гость задайте "МаксимальноеКоличество" равное -1 (неограничено) Это превратит свойство Гость в списковое и даст возможность указать несколько гостей в бронировании.
 | 
			
		||||
* В **типе объекта** "Гость" добавьте свойство "Имя", укажите ему тип "string (http://www.w3.org/2001/XMLSchema)", форму "Атрибут" и локальное имя "name"
 | 
			
		||||
* Добавьте гостю свойство "ДатаЗаезда" с типом "date (http://www.w3.org/2001/XMLSchema)" формой Атрибут и локальным именем "arrives"
 | 
			
		||||
* Добавьте гостю свойство "Комната" с типом "Комната (https://netology.ru/1c/data-models/hotels/v1)" и свойство "Питание" с типом "Питание (https://netology.ru/1c/data-models/hotels/v1)" Не забудьте настроить локальные имена "room" и "meals" соответственно.
 | 
			
		||||
* В **типе объекта** "Комната" создайте свойства "ТипНомера" и "СДушем". Не забудьте указать локальные имена, т.к. в требуемой схеме они отличаются от названия свойств. Тип - string и boolean соответственно
 | 
			
		||||
* В **типе объекта** "Питание" создайте три свойства с типом boolean, назовите Завтрак, Обед, Ужин, задайте локальные имена "breakfast", "dinner", "supper"
 | 
			
		||||
 | 
			
		||||
Обратите внимание, что задавать локальные имена необязательно. В приниципе, можно было создать схему с англоязычными названиями свойств и типов. В общем и целом, пакеты XDTO часто создают сразу именуя свойства и типы так, как требуется в результирующем XML, но в учебных целях мы рассмотрим ситуацию, когда имена свойств в модели не совпадают с тем, что будет записываться в поток XML. Кроме того, если бы модель имела англоязычные термины, тогда с ней было бы не так удобно работать из языка 1С, постоянно переключая раскладку.
 | 
			
		||||
 | 
			
		||||
## Задание 2 - сервис бронирования в формате SOAP
 | 
			
		||||
 | 
			
		||||
### Описание задачи
 | 
			
		||||
 | 
			
		||||
Конфигурация, принимающая заявки на бронирование по SOAP-протоколу
 | 
			
		||||
 | 
			
		||||
### Требования к результату
 | 
			
		||||
 | 
			
		||||
Выгрузка информационной базы (.dt) с конфигурацией, содержащей веб-сервис и логику сохранения поступившей заявки в базу данных.
 | 
			
		||||
 | 
			
		||||
### Процесс выполнения
 | 
			
		||||
 | 
			
		||||
* Создайте метаданные для приема заявок о бронировании:
 | 
			
		||||
  * Справочник Гости
 | 
			
		||||
  * Документ "Бронирование"
 | 
			
		||||
  * Перечисление "ТипКомнаты"
 | 
			
		||||
  * Регистр сведений "Бронирования" подчиненный регистратору "Документ.Бронирование" с измерением Гость и ресурсами "ТипКомнаты", "Душ", "Завтрак", "Обед", "Ужин", "ДатаЗаселения"
 | 
			
		||||
 | 
			
		||||
* Наполните метаданные документа "Бронирование":
 | 
			
		||||
  * Табличная часть "Гости" с реквизитами "Гость", "ТипКомнаты", "Душ", "Завтрак", "Обед", "Ужин", "ДатаЗаселения"
 | 
			
		||||
  * Напишите алгоритм проведения документа "Бронирование". При проведении документ должен формировать движения в регистре сведений "Бронирования"
 | 
			
		||||
 | 
			
		||||
* Создайте веб-сервис, принимающий заявки от внешних систем по заданному формату
 | 
			
		||||
 | 
			
		||||
  * Добавьте в ветку Веб-Сервисы корня метаданных новый веб-сервис "Бронирования", откройте окно редактора веб-сервиса.
 | 
			
		||||
  * Укажите пространство имен сервиса (на закладке "прочие") "https://netology.ru/1c/services/hotels/v1" и пакет XDTO "БронированиеОтеля" из задания 1
 | 
			
		||||
  * Имя файла публикации (на закладке "прочие") можно указать произвольно, но чтобы оно было информативным. Например, "booking.1cws"
 | 
			
		||||
  * На закладке "Операции" редактора веб-сервиса создайте новую операцию и назовите ее "Booking"
 | 
			
		||||
  * Добавьте к операции "Booking" параметр операции, назовите его "bookData" и назначьте ему тип "Бронирование" из пространства имен "https://netology.ru/1c/data-models/hotels/v1"
 | 
			
		||||
  * Далее, для самой операции Booking нажмите в свойстве "Имя процедуры" кнопку с лупой. Система создаст в модуле веб-сервиса функцию "Booking" с параметром "bookData". Теперь, когда внешняя система будет вызывать нашу систему - именно в этот метод попадет управление, когда надо будет сформировать запись о бронировании. В качестве значения параметра bookData будет передан `ОбъектXDTO` соответствующий типу "Бронирование" из нашего пространства имен.
 | 
			
		||||
  * Переименуйте параметр `bookData` в `ДанныеБронирования` для дальнейшего удобства.
 | 
			
		||||
  * Сформируйте алгоритм создания и проведения документа "Бронирование" по данным, полученным от внешней системы. В качестве шаблона используйте следующий код:
 | 
			
		||||
 | 
			
		||||
```bsl
 | 
			
		||||
	ДокументБронирование = Документы.Бронирование.СоздатьДокумент();
 | 
			
		||||
	ДокументБронирование.Дата = ТекущаяДатаСеанса();
 | 
			
		||||
	Для Каждого Гость Из ДанныеБронирования.Гость Цикл
 | 
			
		||||
		
 | 
			
		||||
		ГостьСсылка = НайтиИлиСоздатьГостя(Гость.Имя);
 | 
			
		||||
		СтрокаТЧ = ДокументБронирование.Гости.Добавить();
 | 
			
		||||
		СтрокаТЧ.Гость = ГостьСсылка;
 | 
			
		||||
		СтрокаТЧ.ДатаЗаселения = Гость.ДатаЗаезда;
 | 
			
		||||
		СтрокаТЧ.Душ = Гость.Комната.СДушем;
 | 
			
		||||
		Если Гость.Комната.ТипКомнаты = "double" Тогда
 | 
			
		||||
			СтрокаТЧ.ТипКомнаты = Перечисления.ТипыНомеров.Двойной;
 | 
			
		||||
		Иначе
 | 
			
		||||
			СтрокаТЧ.ТипКомнаты = Перечисления.ТипыНомеров.Одиночный;
 | 
			
		||||
		КонецЕсли;
 | 
			
		||||
		
 | 
			
		||||
		СтрокаТЧ.Завтрак = Гость.Питание.Завтрак;
 | 
			
		||||
		// и так далеее
 | 
			
		||||
		
 | 
			
		||||
	КонецЦикла;
 | 
			
		||||
	
 | 
			
		||||
	Результат = "ОК";
 | 
			
		||||
	Попытка
 | 
			
		||||
		ДокументБронирование.Записать(РежимЗаписиДокумента.Проведение);
 | 
			
		||||
	Исключение
 | 
			
		||||
		Результат = ОписаниеОшибки();
 | 
			
		||||
		ЗаписьЖурналаРегистрации("Бронирование", УровеньЖурналаРегистрации.Ошибка,,,
 | 
			
		||||
			Результат);
 | 
			
		||||
	КонецПопытки;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Обратите внимание, мы работаем с объектной моделью бронирования из нашего пакета XDTO, обращаясь к ним через точку и используя цикл Для Каждого.
 | 
			
		||||
 | 
			
		||||
## Задание 3 - HTTP-сервис бронирования
 | 
			
		||||
 | 
			
		||||
### Описание задачи
 | 
			
		||||
 | 
			
		||||
Создать параллельный сервис для приемки бронирований по протоколу HTTP. В качестве формата взаимодействия будет использоваться JSON (но мог бы и XML)
 | 
			
		||||
 | 
			
		||||
### Требование к результату:
 | 
			
		||||
 | 
			
		||||
Выгрузка информационной базы (.dt) с конфигурацией из заданий 1 и 2, которая должна быть дополнена HTTP-сервисом "Бронирования", выполняющим ту же логику.
 | 
			
		||||
 | 
			
		||||
### Порядок выполнения
 | 
			
		||||
 | 
			
		||||
* Создайте в ветке метаданных "http-сервисы" новый сервис и назовите его "Бронирования"
 | 
			
		||||
* Задайте информативное название свойству "Корневой URL" например hotel. Это будет префикс всех URL-адресов создаваемого сервиса
 | 
			
		||||
* На закладке "Шаблоны URL" создайте новый шаблон "Бронирования", в качестве свойства "Шаблон" укажите "bookings"
 | 
			
		||||
* Далее в редакторе, добавьте шаблону "Бронирования" новый "Метод" (кнопка добавить метод в редакторе шаблонов URL) Укажите название "Создать" и в палитре свойств задайте ему HTTP-метод POST
 | 
			
		||||
* В свойстве "Обработчик" метода "Создать" нажмите кнопку с лупой. Система создаст новый метод для обработки входящего запроса.
 | 
			
		||||
* В обработчике реализуйте логику чтения пришедшего JSON текста, которая по данным JSON формирует проведение документа Бронирование. Обратите внимание, что тут не контролируется правильность пришедшего на вход документа, как это было в SOAP (XML) сервисе.
 | 
			
		||||
* Используйте следующий шаблон кода:
 | 
			
		||||
 | 
			
		||||
```bsl
 | 
			
		||||
// предполагается, что на вход поступил JSON из задания 7-1-3
 | 
			
		||||
Попытка
 | 
			
		||||
	
 | 
			
		||||
	ТекстJSON = Запрос.ПолучитьТелоКакСтроку();
 | 
			
		||||
	ЧтениеJSON = Новый ЧтениеJSON;
 | 
			
		||||
	ЧтениеJSON.УстановитьСтроку(ТекстJSON);
 | 
			
		||||
	
 | 
			
		||||
	СтруктураДанных = ПрочитатьJSON(ЧтениеJSON, Ложь);
 | 
			
		||||
	ДокументБронирование = Документы.Бронирование.СоздатьДокумент();
 | 
			
		||||
	ДокументБронирование.Дата = ТекущаяДатаСеанса();
 | 
			
		||||
 | 
			
		||||
	Для Каждого Гость Из СтруктураДанных Цикл
 | 
			
		||||
		// тут алгоритм разбора массива гостей
 | 
			
		||||
	КонецЦикла;
 | 
			
		||||
	ДокументБронирование.Записать(РежимЗаписиДокумента.Проведение);
 | 
			
		||||
Исключение
 | 
			
		||||
	Результат = ОписаниеОшибки();
 | 
			
		||||
	ЗаписьЖурналаРегистрации("Бронирование", УровеньЖурналаРегистрации.Ошибка,,,
 | 
			
		||||
		Результат);
 | 
			
		||||
 | 
			
		||||
	Ответ = Новый HTTPСервисОтвет(400);
 | 
			
		||||
	Ответ.УстановитьТелоИзСтроки(Результат);
 | 
			
		||||
	Возврат Ответ;	
 | 
			
		||||
КонецПопытки;
 | 
			
		||||
 | 
			
		||||
// ВАЖНО - вернуть ответ с успешным кодом 200
 | 
			
		||||
Возврат Новый HTTPСервисОтвет(200);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,69 @@
 | 
			
		||||
# Задание к занятию "Распределенная информационная база"
 | 
			
		||||
 | 
			
		||||
Разработать пересылку данных между двумя узлами распределенной базы.
 | 
			
		||||
В качестве решения прислать один файл, содержащий все изменения по конфигурации.
 | 
			
		||||
 | 
			
		||||
## Задание 1. Создание конфигурации и плана обмена
 | 
			
		||||
 | 
			
		||||
### Описание задачи
 | 
			
		||||
 | 
			
		||||
Создать конфигурацию торгового предприятия и добавить в нее план обмена
 | 
			
		||||
 | 
			
		||||
### Требования к результату
 | 
			
		||||
 | 
			
		||||
Выгрузка информационной базы (.dt) с конфигурацией ТорговоеПредприятие, содержащая минимальные метаданные и план обмена.
 | 
			
		||||
 | 
			
		||||
### Процесс выполнения
 | 
			
		||||
 | 
			
		||||
* Создайте чистую конфигурацию
 | 
			
		||||
* Добавьте справочники Номенклатура и Контрагенты
 | 
			
		||||
* Добавьте документы ПриходнаяНакладная и РасходнаяНакладная
 | 
			
		||||
* В документах "накладных" добавьте в шапку реквизит Контрагент, а также табличную часть с колонками "Товар (СправочникСсылка.Номенклатура)", "Количество (Число)", "Цена (Число)", "Сумма (Число")
 | 
			
		||||
* Добавьте в конфигурацию план обмена Полный
 | 
			
		||||
* В плане обмена по кнопке "Состав" укажите все объекты метаданных и разрешите авторегистрацию
 | 
			
		||||
 | 
			
		||||
## Задание 2. Запись изменений в файл обмена
 | 
			
		||||
 | 
			
		||||
### Описание задачи
 | 
			
		||||
 | 
			
		||||
Внести изменения в информационную базу и выгрузить изменения для внешнего узла
 | 
			
		||||
 | 
			
		||||
### Требование к результату
 | 
			
		||||
 | 
			
		||||
Выгрузка информационной базы (.dt) из прошлого задания с командой, позволяющей сохранить изменения в файл обмена
 | 
			
		||||
 | 
			
		||||
### Процесс выполнения
 | 
			
		||||
 | 
			
		||||
* Создайте команду "Отправить данные" в плане обмена. В качестве типа параметра команды укажите ПланОбменаСсылка.Общий, команду разместите в панели действий формы
 | 
			
		||||
* В обработчике команды напишите алгоритм, который для выбранного узла обмена будет выгружать все изменения в файл XML.
 | 
			
		||||
	* Используйте объекты ЗаписьСообщенияОбмена, ЗаписьXML, по примеру, указанному в презентации к лекции
 | 
			
		||||
* После формирования сообщения обмена добавьте код удаления всех зарегистрированных изменений для данного узла обмена
 | 
			
		||||
	```bsl
 | 
			
		||||
	ПланыОбмена.УдалитьРегистрациюИзменений(Узел);
 | 
			
		||||
	```
 | 
			
		||||
 | 
			
		||||
* Файл с сообщением обмена должен сохраняться на машине клиента (передаваться с сервера на клиент)
 | 
			
		||||
* Запустите программу в режиме 1С:Предприятие
 | 
			
		||||
* Отредактируйте предопределенную запись в плане обмена, задайте ей код "ГЛ" и наименование "Главная база"
 | 
			
		||||
* Создайте новый элемент в плане обмена, задайте ей код "ВН" и наименование "Внешняя база"
 | 
			
		||||
* Введите в режиме 1С:Предприятие несколько записей в справочниках и сформируйте сообщение обмена.
 | 
			
		||||
 | 
			
		||||
## Задание 3. Чтение изменений из файла обмена
 | 
			
		||||
 | 
			
		||||
### Описание задачи
 | 
			
		||||
 | 
			
		||||
Получить изменения от внешнего узла и записать их в базу
 | 
			
		||||
 | 
			
		||||
### Требование к результату
 | 
			
		||||
 | 
			
		||||
Выгрузка информационной базы (.dt) из прошлого залания с командой, позволяющей загрузить изменения из файла обмена
 | 
			
		||||
 | 
			
		||||
### Процесс выполнения
 | 
			
		||||
 | 
			
		||||
* Создайте вторую команду в плане обмена, назовите ее "Получить изменения"
 | 
			
		||||
* В обработчике команды реализуйте алгоритм чтения сообщения обмена из выбранного пользователем файла
 | 
			
		||||
* Алгоритм обработчика должен позволять выбрать XML файл с клиентского компьютера
 | 
			
		||||
	* Используйте объекты ЧтениеСообщенияОбмена, ЧтениеXML по примеру, указанному в презентации к лекции
 | 
			
		||||
* Выгрузите конфигурацию в файл CF и загрузите его в новую чистую информационную базу
 | 
			
		||||
* Создайте в режиме 1С:Предприятие в этой базе обратную конфигурацию узлов - предопределенному узлу код "ВН" и наименование "Внешняя база", а второму созданному узлу код "ГЛ" и наименование "Главная база"
 | 
			
		||||
* Загрузите в базу файл, сформированный в предыдущем задании.
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
<v8msg:Message xmlns:v8msg="http://v8.1c.ru/messages">
 | 
			
		||||
	<v8msg:Header>
 | 
			
		||||
		<v8msg:ExchangePlan>Полный</v8msg:ExchangePlan>
 | 
			
		||||
		<v8msg:To>ВН</v8msg:To>
 | 
			
		||||
		<v8msg:From>ГЛ</v8msg:From>
 | 
			
		||||
		<v8msg:MessageNo>3</v8msg:MessageNo>
 | 
			
		||||
		<v8msg:ReceivedNo>0</v8msg:ReceivedNo>
 | 
			
		||||
	</v8msg:Header>
 | 
			
		||||
	<v8msg:Body>
 | 
			
		||||
		<CatalogObject.Номенклатура>
 | 
			
		||||
			<Ref>86761b11-a94e-11ec-8018-c682962e9dd1</Ref>
 | 
			
		||||
			<DeletionMark>false</DeletionMark>
 | 
			
		||||
			<Code>000000001</Code>
 | 
			
		||||
			<Description>Клавиатуры</Description>
 | 
			
		||||
		</CatalogObject.Номенклатура>
 | 
			
		||||
		<CatalogObject.Контрагенты>
 | 
			
		||||
			<Ref>86761b10-a94e-11ec-8018-c682962e9dd1</Ref>
 | 
			
		||||
			<DeletionMark>false</DeletionMark>
 | 
			
		||||
			<Code>000000001</Code>
 | 
			
		||||
			<Description>Поставщик1</Description>
 | 
			
		||||
		</CatalogObject.Контрагенты>
 | 
			
		||||
		<CatalogObject.Контрагенты>
 | 
			
		||||
			<Ref>86761b13-a94e-11ec-8018-c682962e9dd1</Ref>
 | 
			
		||||
			<DeletionMark>false</DeletionMark>
 | 
			
		||||
			<Code>000000002</Code>
 | 
			
		||||
			<Description>Покупатель1</Description>
 | 
			
		||||
		</CatalogObject.Контрагенты>
 | 
			
		||||
		<DocumentObject.ПриходнаяНакладная>
 | 
			
		||||
			<Ref>86761b12-a94e-11ec-8018-c682962e9dd1</Ref>
 | 
			
		||||
			<DeletionMark>false</DeletionMark>
 | 
			
		||||
			<Date>2022-03-21T22:39:22</Date>
 | 
			
		||||
			<Number>000000001</Number>
 | 
			
		||||
			<Posted>true</Posted>
 | 
			
		||||
			<Контрагент>86761b10-a94e-11ec-8018-c682962e9dd1</Контрагент>
 | 
			
		||||
			<Товары>
 | 
			
		||||
				<Row>
 | 
			
		||||
					<Товар>86761b11-a94e-11ec-8018-c682962e9dd1</Товар>
 | 
			
		||||
					<Количество>1</Количество>
 | 
			
		||||
					<Цена>100</Цена>
 | 
			
		||||
					<Сумма>100</Сумма>
 | 
			
		||||
				</Row>
 | 
			
		||||
			</Товары>
 | 
			
		||||
		</DocumentObject.ПриходнаяНакладная>
 | 
			
		||||
		<DocumentObject.РасходнаяНакладная>
 | 
			
		||||
			<Ref>86761b14-a94e-11ec-8018-c682962e9dd1</Ref>
 | 
			
		||||
			<DeletionMark>false</DeletionMark>
 | 
			
		||||
			<Date>2022-03-21T22:39:45</Date>
 | 
			
		||||
			<Number>000000001</Number>
 | 
			
		||||
			<Posted>true</Posted>
 | 
			
		||||
			<Контрагент>86761b13-a94e-11ec-8018-c682962e9dd1</Контрагент>
 | 
			
		||||
			<Товары>
 | 
			
		||||
				<Row>
 | 
			
		||||
					<Товар>86761b11-a94e-11ec-8018-c682962e9dd1</Товар>
 | 
			
		||||
					<Количество>1</Количество>
 | 
			
		||||
					<Цена>100</Цена>
 | 
			
		||||
					<Сумма>100</Сумма>
 | 
			
		||||
				</Row>
 | 
			
		||||
			</Товары>
 | 
			
		||||
		</DocumentObject.РасходнаяНакладная>
 | 
			
		||||
	</v8msg:Body>
 | 
			
		||||
</v8msg:Message>
 | 
			
		||||
		Reference in New Issue
	
	Block a user