Обмен данными через http-сервисы при помощи подсистемы «Домены данных»

08.09.25

Интеграция - WEB-интеграция

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

Меня зовут Максим, я программист 1С в компании Programming Store.

В статье рассмотрим вариант обмена данными через http-сервисы с помощью подсистемы «Домены данных».

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

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

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

В МБ справочник «Домены данных» выглядит так:

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

// Дата контракт домена данных физические лица.
// 
// Возвращаемое значение:
//  Структура - Дата контракт домена данных физические лица:
// * uuid - Строка - глобальный идентификатор физического лица
// * name - Строка - полное наименование
// * deleted - Булево - пометка удаления
// * lastName - Строка - фамилия
// * firstName - Строка - имя
// * patronymic - Строка - отчество
// * birthDate - Строка - дата рождения
// * gender - Строка - пол
// * domainName - Строка - имя доменной учетки AD
// * phone - Строка - Телефон
// * email - Строка - Адрес электронной почты
// * dateOfEmployment - Дата - Дата первичного трудоустройства
Функция ДатаКонтрактДоменаДанныхФизическиеЛица() Экспорт
  
  Результат = Новый Структура;
  
  Результат.Вставить("uuid", "");
  Результат.Вставить("name", "");
  Результат.Вставить("deleted", Ложь);
  Результат.Вставить("lastName", "");
  Результат.Вставить("firstName", "");
  Результат.Вставить("patronymic", "");
  Результат.Вставить("birthDate", "");
  Результат.Вставить("gender", "");
  Результат.Вставить("domainName", "");
  Результат.Вставить("phone", "");
  Результат.Вставить("email", "");
  Результат.Вставить("dateOfEmployment",  "");
  
  Возврат Результат;
  
КонецФункции

 

В «Приемниках» есть регламентное задание, которое обращается к МБ и забирает данные. У всех доменов данных одно регламентное задание, в нем параметром является наименование домена данных, по которому необходимо получить данные. Так выглядит запрос изменений в «Приемниках»:

Функция ЗапросИзмененийДоменаДанных(ДоменДанных, ДатаЗапросаИзменений, Метод, Лимит = 0, Курсор = 0) Экспорт
  
  Результат = Новый Структура;
  Результат.Вставить("Успешно", Истина);
  Результат.Вставить("Ошибки", Новый Массив);
  Результат.Вставить("КодСостояния", 0);
  Результат.Вставить("МассивИзменений", Новый Массив);
  Результат.Вставить("Курсор", 0);
  
  ИмяДомена = НРег(Строка(ДоменДанных));
  ДатаВФорматеISO = ЗаписатьДатуJSON(ДатаЗапросаИзменений, ФорматДатыJSON.ISO, ВариантЗаписиДатыJSON.УниверсальнаяДата);
  СтрокаМетода = СтрШаблон("hs/nsi/%1?domen=%2&date=%3", Метод, ИмяДомена, ДатаВФорматеISO);
  Если ЗначениеЗаполнено(Лимит) Тогда
    СтрокаМетода = СтрокаМетода + "&limit=" + Лимит;
  КонецЕсли;
  
  // TODO переиспользовать соединение, открытое ранее
  Соединение = Новый HTTPСоединение(ДоменДанных.АдресСервера, , ДоменДанных.Логин, ДоменДанных.Пароль, , 60);
  
  HTTPЗапрос = Новый HTTPЗапрос;
  HTTPЗапрос.АдресРесурса = СтрокаМетода;
  
  Попытка
    
    HTTPОтвет = Соединение.ВызватьHTTPМетод("GET", HTTPЗапрос);
    Результат.КодСостояния = HTTPОтвет.КодСостояния;
    Если Результат.КодСостояния >= 200
      И Результат.КодСостояния < 300 Тогда
      
      Ответ = лпОбщегоНазначения.ПрочитатьТелоJSON(HTTPОтвет); // Структура
      Результат.МассивИзменений = Ответ.result; // Массив из Структура
      Результат.Курсор = Ответ.cursor; // Число
      
    Иначе
      
      Результат.Успешно = Ложь;
      ТекстОшибки = "Сервер вернул код состояния " + HTTPОтвет.КодСостояния;
      Результат.Ошибки.Добавить(ТекстОшибки);
      
    КонецЕсли;
    
  Исключение
    
    Результат.Успешно = Ложь;
    ТекстОшибки = "Не удалось отправить запрос на сервер: " + ОписаниеОшибки();
    Результат.Ошибки.Добавить(ТекстОшибки);
    
  КонецПопытки;
  
  Возврат Результат;
  
КонецФункции

В данном случае мы передаем в параметре имя домена данных, по которому есть нужные нам данные, также можно указать количество данных для выборки. В результате «Приемники» по http-сервису стучаться к МБ и передают параметры для выборки. В МБ данные параметры обрабатываются и формируется конечный запрос «Домена данных», где указанный запрос выполняется и записывается в массив структур. Далее массив структур записывается в JSON и передается в Приемники, где данные обрабатываются и записываются.

Текст метода http-сервиса в МБ:

Процедура ЗаполнитьОтветНаЗапросПолученияДоменаДанных(Запрос, Ответ, ДоменДанных)
  
  Попытка
    
    Лимит = 100;
    СсылкаКурсор = "";
    МассивФильтров = Новый Массив; // Массив из Структура
    
    КонвертироватьПараметрыЗапроса(Запрос.ПараметрыЗапроса, ДоменДанных, МассивФильтров, Лимит, СсылкаКурсор);
    
  Исключение
    
    Ответ.КодСостояния = 400;
    Ответ.Причина = "Ошибка в параметрах запроса: " + ОписаниеОшибки();
    
  КонецПопытки;
  
  Если Ответ.КодСостояния = 200 Тогда
    
    Попытка
      
      СтруктураВыборки = лпОтправкаДоменовДанных.ВыборкаОбъектовДоменаДанных(ДоменДанных, МассивФильтров, Лимит, СсылкаКурсор);
      
      ДатаКонтракт = Справочники.лпДоменыДанных.ДатаКонтрактДоменаДанных(ДоменДанных);
      МассивДанных = Справочники.лпДоменыДанных.ЗаполнитьДатаКонтрактИзСтрокДерева(ДатаКонтракт, СтруктураВыборки.ДеревоОбъектов.Строки);
      
      Результат = Новый Структура;
      Результат.Вставить("result", МассивДанных);
      Результат.Вставить("uuidcursor", СтруктураВыборки.НовыйСсылкаКурсор);
      Результат = лпОбщегоНазначения.ПреобразоватьНедопустимыеТипыJSON(Результат);
      
      лпОбщегоНазначения.ЗаписатьТелоJSON(Ответ, Результат);
      
    Исключение
      
      Ответ.КодСостояния = 500;
      Ответ.Причина = "Ошибка при получении данных на сервере: " + ОписаниеОшибки();
      
    КонецПопытки;
    
  КонецЕсли;
  
КонецПроцедуры

 

В этой функции происходит обращение к запросу домена данных, далее запрос форматируется и накладываются условия, переданные из «Приемников»:

Функция ВыборкаОбъектовДоменаДанных(ДоменДанных, МассивФильтров, Лимит, СсылкаКурсор = "") Экспорт
  
  Результат = Новый Структура;
  Результат.Вставить("ДеревоОбъектов", Новый ДеревоЗначений());
  Результат.Вставить("НовыйСсылкаКурсор", "");
  
  ОписаниеДомена = лпДоменыДанныхПовтИсп.ОписаниеДомена(ДоменДанных);
  Если НЕ ЗначениеЗаполнено(ОписаниеДомена.ТекстЗапросаТекущихДанных) Тогда
    ВызватьИсключение 
      "Не указан текст запроса текущих данных для этого домена данных";
  КонецЕсли;
  ТекстЗапроса = ОписаниеДомена.ТекстЗапросаТекущихДанных;
  ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВЫБРАТЬ ПЕРВЫЕ 100", "ВЫБРАТЬ ПЕРВЫЕ " + (Лимит + 1));
  
  Запрос = Новый Запрос;
  
  МассивУсловийОтбора = Новый Массив; // Массив из Строка
  Для Каждого Фильтр Из МассивФильтров Цикл
    ИмяПараметра = СтрЗаменить(Фильтр.ИмяФильтра, ".", "");
    Запрос.УстановитьПараметр(ИмяПараметра, Фильтр.ЗначениеФильтра);
    УсловиеОтбора = СтрШаблон("%1 = &%2", Фильтр.ИмяФильтра, ИмяПараметра);
    МассивУсловийОтбора.Добавить(УсловиеОтбора);
  КонецЦикла;
  ТекстОтбора = СтрСоединить(МассивУсловийОтбора, " И ");
  ТекстОтбора = ?(ЗначениеЗаполнено(ТекстОтбора), ТекстОтбора, "ИСТИНА");
  
  ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&УсловиеОтбора", ТекстОтбора);
  Запрос.Текст = ТекстЗапроса;
  
  ДеревоОбъектов = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
  
  Если ДеревоОбъектов.Строки.Количество() > Лимит Тогда
    ПоследняяСтрока = ДеревоОбъектов.Строки[ДеревоОбъектов.Строки.Количество() - 1];
    НовыйСсылкаКурсор = ПоследняяСтрока.uuid; // Строка
    Результат.НовыйСсылкаКурсор = НовыйСсылкаКурсор;
    ДеревоОбъектов.Строки.Удалить(ПоследняяСтрока);
  КонецЕсли;
  
  Результат.ДеревоОбъектов = ДеревоОбъектов;
  
  Возврат Результат;
  
КонецФункции

 

Пример файла JSON, который передается в «Приемники»:

"result": [
    {
      "uuid": "51729b0e-4e37-11ef-8db9-000c29e62f1c",
      "name": "Лопатнев П  С    ",
      "deleted": false,
      "lastName": "Лопатнев",
      "firstName": "     ",
      "patronymic": "     ",
      "birthDate": "                :00:00",
      "gender": "Мужской",
      "domainName": "",
      "phone": "                ",
      "email": "                 ",
      "dateOfEmployment": "2024-07-30T00:00:00"
    },
    {
      "uuid": "29f59356-4f07-11ef-8db9-000c29e62f1c",
      "name": "Горохова К     А    ",
      "deleted": false,
      "lastName": "Горохова",
      "firstName": "     ",
      "patronymic": "      ",
      "birthDate": "1992-07-13T00:00:00",
      "gender": "Женский",
      "domainName": "",
      "phone": "             ",
      "email": "                  ",
      "dateOfEmployment": "2024-08-01T00:00:00"
    },

Итак, в статье был разобран эффективный механизм обмена данными между мастер-базой и базами-приемниками через подсистему «Домены данных», используя HTTP-сервисы. Гибкость настройки полей для выгрузки данных и их представления позволяет адаптировать систему под специфические требования каждой базы. Структура справочника «Домены данных» обеспечивает организованное хранение информации о физических лицах, что способствует упрощению процессов обработки и управления данными.  

Вступайте в нашу телеграмм-группу Инфостарт

Домены данных HTTP-сервис JSON

См. также

SALE! 10%

Перенос данных 1C Программист 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

55778 50200 руб.

04.08.2015    177099    391    291    

414

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    151490    878    302    

457

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    78191    211    161    

149

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    177487    324    273    

393

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    194330    633    540    

548

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    5751    4    3    

7

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    41194    116    74    

110

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам.

55778 50200 руб.

24.04.2015    202427    167    248    

292
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. avbolshakov 09.09.25 11:40 Сейчас в теме
а что это за подсистема Домены данных?
andrey_sag; +1 Ответить
2. V.Nikonov 123 09.09.25 14:42 Сейчас в теме
Не очень прозрачно описана фильтрация Запрашиваемых данных.
Кроме ограничений на количество Объектов к получению есть возможность установить другие дополнительные параметры запроса?
Возвращаются Измененные данные (т.е. зарегистрированные в неком плане обмена)?
Для отправки сообщения требуется регистрация/авторизация