diff --git a/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/homework-7-1.dt b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/homework-7-1.dt new file mode 100644 index 0000000..d443ae6 Binary files /dev/null and b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/homework-7-1.dt differ diff --git a/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/РучноеФормированиеXML.epf b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/РучноеФормированиеXML.epf new file mode 100644 index 0000000..bc9582f Binary files /dev/null and b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/РучноеФормированиеXML.epf differ diff --git a/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/СтандартнаяСериализацияОбъектовИБ_JSON.epf b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/СтандартнаяСериализацияОбъектовИБ_JSON.epf new file mode 100644 index 0000000..d8397aa Binary files /dev/null and b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/СтандартнаяСериализацияОбъектовИБ_JSON.epf differ diff --git a/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/СтандартнаяСериализацияОбъектовИБ_XML.epf b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/СтандартнаяСериализацияОбъектовИБ_XML.epf new file mode 100644 index 0000000..74c64af Binary files /dev/null and b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/СтандартнаяСериализацияОбъектовИБ_XML.epf differ diff --git a/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/ФормированиеJSON.epf b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/ФормированиеJSON.epf new file mode 100644 index 0000000..6280a4e Binary files /dev/null and b/07. Интеграция и обмен данными/01. XML и JSON/homework-7-1/ФормированиеJSON.epf differ diff --git a/07. Интеграция и обмен данными/02. HTTP-сервисы и SOAP-сервисы/homework-7-2.dt b/07. Интеграция и обмен данными/02. HTTP-сервисы и SOAP-сервисы/homework-7-2.dt new file mode 100644 index 0000000..1383c0e Binary files /dev/null and b/07. Интеграция и обмен данными/02. HTTP-сервисы и SOAP-сервисы/homework-7-2.dt differ diff --git a/07. Интеграция и обмен данными/02. HTTP-сервисы и SOAP-сервисы/homework-7-2.md b/07. Интеграция и обмен данными/02. HTTP-сервисы и SOAP-сервисы/homework-7-2.md new file mode 100644 index 0000000..2544527 --- /dev/null +++ b/07. Интеграция и обмен данными/02. HTTP-сервисы и SOAP-сервисы/homework-7-2.md @@ -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); +``` + diff --git a/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3.md b/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3.md new file mode 100644 index 0000000..c8bc248 --- /dev/null +++ b/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3.md @@ -0,0 +1,69 @@ +# Задание к занятию "Распределенная информационная база" + +Разработать пересылку данных между двумя узлами распределенной базы. +В качестве решения прислать один файл, содержащий все изменения по конфигурации. + +## Задание 1. Создание конфигурации и плана обмена + +### Описание задачи + +Создать конфигурацию торгового предприятия и добавить в нее план обмена + +### Требования к результату + +Выгрузка информационной базы (.dt) с конфигурацией ТорговоеПредприятие, содержащая минимальные метаданные и план обмена. + +### Процесс выполнения + +* Создайте чистую конфигурацию +* Добавьте справочники Номенклатура и Контрагенты +* Добавьте документы ПриходнаяНакладная и РасходнаяНакладная +* В документах "накладных" добавьте в шапку реквизит Контрагент, а также табличную часть с колонками "Товар (СправочникСсылка.Номенклатура)", "Количество (Число)", "Цена (Число)", "Сумма (Число") +* Добавьте в конфигурацию план обмена Полный +* В плане обмена по кнопке "Состав" укажите все объекты метаданных и разрешите авторегистрацию + +## Задание 2. Запись изменений в файл обмена + +### Описание задачи + +Внести изменения в информационную базу и выгрузить изменения для внешнего узла + +### Требование к результату + +Выгрузка информационной базы (.dt) из прошлого задания с командой, позволяющей сохранить изменения в файл обмена + +### Процесс выполнения + +* Создайте команду "Отправить данные" в плане обмена. В качестве типа параметра команды укажите ПланОбменаСсылка.Общий, команду разместите в панели действий формы +* В обработчике команды напишите алгоритм, который для выбранного узла обмена будет выгружать все изменения в файл XML. + * Используйте объекты ЗаписьСообщенияОбмена, ЗаписьXML, по примеру, указанному в презентации к лекции +* После формирования сообщения обмена добавьте код удаления всех зарегистрированных изменений для данного узла обмена + ```bsl + ПланыОбмена.УдалитьРегистрациюИзменений(Узел); + ``` + +* Файл с сообщением обмена должен сохраняться на машине клиента (передаваться с сервера на клиент) +* Запустите программу в режиме 1С:Предприятие +* Отредактируйте предопределенную запись в плане обмена, задайте ей код "ГЛ" и наименование "Главная база" +* Создайте новый элемент в плане обмена, задайте ей код "ВН" и наименование "Внешняя база" +* Введите в режиме 1С:Предприятие несколько записей в справочниках и сформируйте сообщение обмена. + +## Задание 3. Чтение изменений из файла обмена + +### Описание задачи + +Получить изменения от внешнего узла и записать их в базу + +### Требование к результату + +Выгрузка информационной базы (.dt) из прошлого залания с командой, позволяющей загрузить изменения из файла обмена + +### Процесс выполнения + +* Создайте вторую команду в плане обмена, назовите ее "Получить изменения" +* В обработчике команды реализуйте алгоритм чтения сообщения обмена из выбранного пользователем файла +* Алгоритм обработчика должен позволять выбрать XML файл с клиентского компьютера + * Используйте объекты ЧтениеСообщенияОбмена, ЧтениеXML по примеру, указанному в презентации к лекции +* Выгрузите конфигурацию в файл CF и загрузите его в новую чистую информационную базу +* Создайте в режиме 1С:Предприятие в этой базе обратную конфигурацию узлов - предопределенному узлу код "ВН" и наименование "Внешняя база", а второму созданному узлу код "ГЛ" и наименование "Главная база" +* Загрузите в базу файл, сформированный в предыдущем задании. diff --git a/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3/homework-7-3.dt b/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3/homework-7-3.dt new file mode 100644 index 0000000..854653f Binary files /dev/null and b/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3/homework-7-3.dt differ diff --git a/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3/homework-7-3.xml b/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3/homework-7-3.xml new file mode 100644 index 0000000..73f4fe7 --- /dev/null +++ b/07. Интеграция и обмен данными/03. Распределенная информационная база/homework-7-3/homework-7-3.xml @@ -0,0 +1,61 @@ + + + Полный + ВН + ГЛ + 3 + 0 + + + + 86761b11-a94e-11ec-8018-c682962e9dd1 + false + 000000001 + Клавиатуры + + + 86761b10-a94e-11ec-8018-c682962e9dd1 + false + 000000001 + Поставщик1 + + + 86761b13-a94e-11ec-8018-c682962e9dd1 + false + 000000002 + Покупатель1 + + + 86761b12-a94e-11ec-8018-c682962e9dd1 + false + 2022-03-21T22:39:22 + 000000001 + true + <Контрагент>86761b10-a94e-11ec-8018-c682962e9dd1 + <Товары> + + <Товар>86761b11-a94e-11ec-8018-c682962e9dd1 + <Количество>1 + <Цена>100 + <Сумма>100 + + + + + 86761b14-a94e-11ec-8018-c682962e9dd1 + false + 2022-03-21T22:39:45 + 000000001 + true + <Контрагент>86761b13-a94e-11ec-8018-c682962e9dd1 + <Товары> + + <Товар>86761b11-a94e-11ec-8018-c682962e9dd1 + <Количество>1 + <Цена>100 + <Сумма>100 + + + + + \ No newline at end of file