Технологии интеграции «1С:Предприятия 8.3», 2-е стереотипное издание
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Технологии интеграции «1С:Предприятия 8.3», 2-е стереотипное издание

Е. Ю. Хрусталёва

Технологии интеграции "1С:Предприятия 8.3",
2-е стереотипное издание

Е. Ю. Хрусталёва

Технологии интеграции "1С:Предприятия 8.3",
2-е стереотипное издание

Электронная книга в формате ePub; ISBN 978-5-9677-3309-3.

Версия издания от 26.04.2023.

Электронный аналог печатного издания  "Технологии интеграции "1С:Предприятия 8.3". Издание 2, стереотипное" (ISBN 978-5-9677-3303-1, М.: ООО "1С-Паблишинг", 2023;артикул печатной книги по прайс-листу фирмы "1С": 4601546147462); по вопросам приобретения печатных изданий издательства "1С-Паблишинг" обращайтесь к партнеру "1С", обслуживающему вашу организацию, или к другим партнерам фирмы "1С".


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

По сравнению с предыдущим изданием (Технологии интеграции «1С:Предприятия 8.2») книга дополнена описанием Интернет-технологий, которые появились в платформе 8.3 или не были описаны раньше:
- JSON
- HTTP-сервисы (REST)
- HTTP-запросы
- Автоматический REST-интерфейс (OData)
- Web-сервисы
- FTP-соединение
- Электронная почта

Для создания демонстрационных примеров использована версия 8.3.22.1709 платформы «1С:Предприятие 8». Учебную версию платформы «1С:Предприятие 8.3» можно бесплатно скачать по адресу https://online.1c.ru/catalog/free/learning.php#platform. Информационные базы с примерами, описанными в книге, опубликованы на портале 1С:ИТС. Вы можете скачать их по адресу https://its.1c.ru/bmk/integr83.

Данное 2-е издание является стереотипным, не отличается по содержанию от книги с аналогичным названием, выпущенной в 2020 году издательством «1С-Паблишинг» (ISBN 978-5-9677-2962-1, артикул «1С» 4601546143242).

Книга выпущена под редакцией Максима Радченко.

© ООО «1С-Паблишинг», 2023
© Оформление. ООО «1С-Паблишинг», 2023

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


Фирма "1С"
123056, Москва, а/я 64, Селезневская ул., 21.
Тел.: (495) 737-92-57, факс: (495) 681-44-07.
1c@1c.ru, http://www.1c.ru/
Издательство ООО "1С-Паблишинг"
127473, Москва, ул. Достоевского, 21/1, строение 1.
Тел.: (495) 681-02-21, факс: (495) 681-44-07.
publishing@1c.ru, http://books.1c.ru/

Глава 1. Интернет-технологии

JSON

В настоящее время в веб-приложениях широко используется формат обмена данными JSON. JSON (JavaScript Object Notation) – это текстовый формат обмена данными, с которым могут работать все браузеры. Этот формат похож на XML, но по сравнению с XML он является более лаконичным и требует меньше места.

Общая информация

Есть несколько причин для широкого использования этого формата на уровне платформы. Во-первых, JSON – это современный формат, с помощью которого прикладные решения «1С:Предприятия» могут осуществлять интеграцию со сторонними приложениями. Во-вторых, JSON активно используется в HTTP-интерфейсах, а платформа «1С:Предприятие 8» как раз предоставляет два способа реализации таких интерфейсов – это REST-интерфейс, который автоматически формируется для всего прикладного решения, и HTTP-сервисы, которые можно создавать самостоятельно.

Существует несколько основных сценариев использования JSON:

  • Интеграция с внешними системами через их HTTP-интерфейсы: Google Calendar, Salesforce.com, REST-интерфейс «1С:Предприятия», SharePoint и т. д.
  • Организация собственного HTTP-интерфейса прикладного решения.
  • Обмен файлами JSON с внешними системами. Формирование конфигурационных, настроечных файлов. Использование их в процедурах обмена данными, например с интернет-магазинами.
  • Использование файлов JSON для обмена данными между разными приложениями «1С:Предприятия».

JSON – это текстовый формат, поэтому данные в формате JSON могут содержать:

  • Объект – неупорядоченное множество пар <имя свойства>:<значение>, заключенный в фигурные скобки ({}). Пары <имя свойства>:<значение> разделяются запятыми (,).
  • Массив – множество значений. Массив заключается в квадратные скобки ([]). Значения разделяются запятыми (,).
  • Значение – может быть строкой, числом, объектом, массивом или литералом true, false, null.
    • Строка – набор символов, заключенный в двойные кавычки ("").
    • Число – сериализуется с разделителем точка (.). Точность числа не ограничена.

Таким образом, с помощью вышеперечисленных элементов допускается описание объектов любой сложности для представления в формате JSON.

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

Подробнее

Подробнее познакомиться с примерами сериализации/десериализации данных в формате JSON можно в демонстрационной конфигурации «Примеры работы», которая прилагается к книге.

Потоковая работа

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

Запись и чтение

Для того чтобы выполнить потоковую запись JSON-документа, необходимы записываемые данные и объект ЗаписьJSON.

Допустим, нам нужно записать в JSON-документ некоторый объект, обладающий свойствами Код, Наименование, Телефоны (массив строк), ОбъемПродаж, Поставщик.

Один JSON-файл содержит одно значение. Это то самое значение, о котором говорилось выше: объект, массив, строка, число или один из литералов. Поэтому записываем в JSON наш объект следующим образом (листинг 1.1).

Листинг 1.1. Пример потоковой записи JSON-документа

&amp;НаСервереБезКонтекста

Процедура ПотоковаяЗаписьНаСервере()

&nbsp;

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("c:\temp\streamWrite.json", , , Новый ПараметрыЗаписиJSON(, Символы.Таб));

&nbsp;

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало нашего объекта.

Запись.ЗаписатьНачалоОбъекта();

&nbsp;

// Заполнить свойство Код типа Строка.

Запись.ЗаписатьИмяСвойства("Код");

Запись.ЗаписатьЗначение("000000017");

&nbsp;

// Заполнить свойство Наименование типа Строка.

Запись.ЗаписатьИмяСвойства("Наименование");

Запись.ЗаписатьЗначение("ОАО Топаз");

&nbsp;

// Заполнить свойство Телефоны типа Массив.

// Поэтому после имени свойства записываем массив, состоящий из значений – строк.

Запись.ЗаписатьИмяСвойства("Телефоны");

Запись.ЗаписатьНачалоМассива();

Запись.ЗаписатьЗначение("8-999-777-55-33");

Запись.ЗаписатьЗначение("+71112223344");

Запись.ЗаписатьКонецМассива();

&nbsp;

// Заполнить свойство ОбъемПродаж типа Число.

Запись.ЗаписатьИмяСвойства("ОбъемПродаж");

Запись.ЗаписатьЗначение(5000000);

&nbsp;

// Заполнить свойство Поставщик типа Булево.

Запись.ЗаписатьИмяСвойства("Поставщик");

Запись.ЗаписатьЗначение(Ложь);

&nbsp;

// Записать конец нашего объекта.

Запись.ЗаписатьКонецОбъекта();

&nbsp;

// Завершить работу с файлом.

Запись.Закрыть();

&nbsp;

КонецПроцедуры

Содержимое процедуры понятно из комментариев в тексте листинга. Поэтому не будем еще раз на этом останавливаться. Про параметры записи JSON, переданные четвертым параметром в метод ОткрытьФайл(), будет рассказано ниже, в разделе «Параметры записи JSON».

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.2).

Листинг 1.2. Содержимое JSON-документа

{

"Код": "000000017",

"Наименование": "ОАО Топаз",

"Телефоны": [

"8-999-777-55-33",

"+71112223344"

],

"ОбъемПродаж": 5000000,

"Поставщик": false

}

Теперь представим, что мы хотим записать не какой-то абстрактный объект, а объект, обладающий собственным именем – Контрагент1. Возможно, вместе с ним мы захотим записать и другой аналогичный объект с именем Контрагент2. Как поместить это в один JSON-файл?

Поскольку, как мы говорили, JSON-файл может содержать только одно значение, мы запишем в него корневой объект с единственным свойством. Имя этого свойства – это имя нашего объекта, а значение этого свойства – это совокупность свойств, которыми обладает наш объект (листинг 1.3).

Листинг 1.3. Пример потоковой записи JSON-документа

&amp;НаСервереБезКонтекста

Процедура ПотоковаяЗаписьНаСервере()

&nbsp;

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("c:\temp\streamWrite_2.json", , , Новый ПараметрыЗаписиJSON(, Символы.Таб));

&nbsp;

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало корневого объекта.

Запись.ЗаписатьНачалоОбъекта();

&nbsp;

// Записать имя свойства корневого объекта.

Запись.ЗаписатьИмяСвойства("Контрагент1");

&nbsp;

// Записать начало нашего объекта.

Запись.ЗаписатьНачалоОбъекта();

&nbsp;

// Заполнить свойство Код типа Строка.

Запись.ЗаписатьИмяСвойства("Код");

Запись.ЗаписатьЗначение("000000017");

&nbsp;

// Заполнить свойство Наименование типа Строка.

Запись.ЗаписатьИмяСвойства("Наименование");

Запись.ЗаписатьЗначение("ОАО Топаз");

&nbsp;

// Заполнить свойство Телефоны типа Массив.

// Поэтому после имени свойтва записываем массив, состоящий из значений – строк.

Запись.ЗаписатьИмяСвойства("Телефоны");

Запись.ЗаписатьНачалоМассива();

Запись.ЗаписатьЗначение("8-999-777-55-33");

Запись.ЗаписатьЗначение("+71112223344");

Запись.ЗаписатьКонецМассива();

&nbsp;

// Заполнить свойство ОбъемПродаж типа Число.

Запись.ЗаписатьИмяСвойства("ОбъемПродаж");

Запись.ЗаписатьЗначение(5000000);

&nbsp;

// Заполнить свойство Поставщик типа Булево.

Запись.ЗаписатьИмяСвойства("Поставщик");

Запись.ЗаписатьЗначение(Ложь);

&nbsp;

// Записать конец нашего объекта.

Запись.ЗаписатьКонецОбъекта();

&nbsp;

// Записать конец корневого объекта.

Запись.ЗаписатьКонецОбъекта();

&nbsp;

// Завершить работу с файлом.

Запись.Закрыть();

&nbsp;

КонецПроцедуры

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.4).

Листинг 1.4. Содержимое JSON-документа

{

"Контрагент1": {

"Код": "000000017",

"Наименование": "ОАО Топаз",

"Телефоны": [

"8-999-777-55-33",

"+71112223344"

],

"ОбъемПродаж": 5000000,

"Поставщик": false

}

}

Если требуется записать в этот же файл второй объект Контрагент2, то нам нужно просто добавить к корневому объекту еще одно свойство (Контрагент2) и его значение (листинг 1.5).

Листинг 1.5. Пример потоковой записи JSON-документа

&amp;НаСервереБезКонтекста

Процедура ПотоковаяЗаписьНаСервере()

&nbsp;

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("c:\temp\streamWrite_3.json", , , Новый ПараметрыЗаписиJSON(, Символы.Таб));

&nbsp;

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало корневого объекта.

Запись.ЗаписатьНачалоОбъекта();

&nbsp;

// Записать имя первого свойства корневого объекта.

Запись.ЗаписатьИмяСвойства("Контрагент1");

&nbsp;

// Записать начало первого объекта.

Запись.ЗаписатьНачалоОбъекта();

&nbsp;

&nbsp;

// Записать конец первого объекта.

Запись.ЗаписатьКонецОбъекта();

&nbsp;

// Записать имя второго свойства корневого объекта.

Запись.ЗаписатьИмяСвойства("Контрагент2");

&nbsp;

// Записать начало второго объекта.

Запись.ЗаписатьНачалоОбъекта();

&nbsp;

&nbsp;

// Записать конец второго объекта.

Запись.ЗаписатьКонецОбъекта();

&nbsp;

// Записать конец корневого объекта.

Запись.ЗаписатьКонецОбъекта();

&nbsp;

// Завершить работу с файлом.

Запись.Закрыть();

&nbsp;

КонецПроцедуры

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.6).

Листинг 1.6. Содержимое JSON-документа

{

"Контрагент1": {

"Код": "000000017",

"Наименование": "ОАО Топаз",

"Телефоны": [

"8-999-777-55-33",

"+71112223344"

],

"ОбъемПродаж": 5000000,

"Поставщик": false

},

"Контрагент2": {

"Код": "000000018",

"Наименование": "ОАО Алмаз",

"Телефоны": [

"8-111-222-33-44",

"+78886664422"

],

"ОбъемПродаж": 6000000,

"Поставщик": true

}

}

Потоковое чтение JSON-документа выполняется с помощью объекта ЧтениеJSON. Документ открывается для чтения и поэлементно считывается в цикле. При этом разработчик определяет, что считано, и соответствующим образом обрабатывает считываемые данные.

Простейший вариант чтения JSON-документа может быть выполнен с помощью следующей процедуры (листинг 1.7).

Листинг 1.7. Пример потокового чтения JSON-документа

&amp;НаСервереБезКонтекста

Процедура ПотоковоеЧтениеНаСервере()

&nbsp;

Сообщение = Новый СообщениеПользователю;

&nbsp;

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

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл("c:\temp\streamWrite_2.json");

&nbsp;

// Выполнить чтение поэлементно в цикле.

Пока Чтение.Прочитать() Цикл

&nbsp;

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда

Сообщение.Текст = "Имя = " + Чтение.ТекущееЗначение;

Сообщение.Сообщить();

КонецЕсли;

&nbsp;

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Булево Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Число Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Комментарий Тогда

Сообщение.Текст = "Значение = " + Чтение.ТекущееЗначение;

Сообщение.Сообщить();

КонецЕсли;

КонецЦикла;

&nbsp;

// Завершить работу с файлом.

Чтение.Закрыть();

&nbsp;

КонецПроцедуры

Результат чтения JSON-документа, содержимое которого показано в листинге 1.4, будет выглядеть следующим образом (рис. 1.1).

Рис. 1.1. Потоковое чтение JSON-документа

Работа со строкой JSON

Данные в формате JSON можно получать не только в виде файла, но и в виде строки. Например, при работе с HTTP-сервисами очень часто нужно работать с телом HTTP-запроса, которое представляет собой строку JSON. В таких случаях можно писать данные не в файл, а в строку. И потом подставлять эту строку в качестве тела HTTP-запроса. И, наоборот, брать строку, которая является телом HTTP-запроса, и читать из нее данные с помощью объекта ЧтениеJSON.

Для этого нужно использовать метод УстановитьСтроку() объектов ЗаписьJSON/ЧтениеJSON. После вызова этого метода для получения строки со сформированными данными JSON достаточно просто завершить запись документа методом Закрыть() объекта ЗаписьJSON (листинг 1.8).

Листинг 1.8. Запись и чтение содержимого JSON в/из строки

&amp;НаСервереБезКонтекста

Процедура РаботаСоСтрокойНаСервере()

&nbsp;

Сообщение = Новый СообщениеПользователю;

&nbsp;

// Создать объект записи и записать строковое значение в строку JSON.

Запись = Новый ЗаписьJSON;

Запись.УстановитьСтроку();

Запись.ЗаписатьЗначение("строковое значение");

СтрокаJSON = Запись.Закрыть();

&nbsp;

// Показать результат.

Сообщение.Текст = СтрокаJSON;

Сообщение.Сообщить();

&nbsp;

// Создать объект чтения и прочитать JSON из строки.

Чтение = Новый ЧтениеJSON;

Чтение.УстановитьСтроку(СтрокаJSON);

Пока Чтение.Прочитать() Цикл

&nbsp;

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда

Сообщение.Текст = "Имя = " + Чтение.ТекущееЗначение;

Сообщение.Сообщить();

КонецЕсли;

&nbsp;

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Булево Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Число Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Комментарий Тогда

Сообщение.Текст = "Значение = " + Чтение.ТекущееЗначение;

Сообщение.Сообщить();

КонецЕсли;

КонецЦикла;

&nbsp;

// Завершить чтение.

Чтение.Закрыть();

&nbsp;

КонецПроцедуры

Проверка структуры записываемого JSON-документа

Следует иметь в виду, что при потоковой записи разработчик самостоятельно формирует структуру JSON-документа. При записи данных объект ЗаписьJSON автоматически проверяет правильность записываемой структуры. За это отвечает свойство ПроверятьСтруктуру. По умолчанию оно истинно, поэтому если при записи нарушена целостность структуры JSON, то будет сгенерировано исключение и запись выполнена не будет. Но для увеличения скорости работы эту проверку можно отключить (листинг 1.9).

Листинг 1.9. Отключение проверки структуры записываемого JSON-документа

ЗаписьJSON.ПроверятьСтруктуру = Ложь;

Параметры записи JSON

При записи можно управлять некоторыми параметрами формируемого текста, например: использованием двойных кавычек, переносом строк, символами отступа и экранированием символов. Набор параметров записи задается в объекте ПараметрыЗаписиJSON и затем используется при открытии для записи JSON-документа.