Обмен данными через 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    178029    395    292    

415

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    78607    211    162    

150

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    177773    326    274    

395

SALE! 20%

Перенос данных 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    152051    884    302    

460

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    41575    119    75    

112

SALE! 10%

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

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

55778 50200 руб.

31.10.2014    242498    110    350    

315

Перенос данных 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    194647    633    540    

549

Перенос данных 1C Программист Бухгалтер 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    86060    368    255    

309
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. avbolshakov 09.09.25 11:40 Сейчас в теме
а что это за подсистема Домены данных?
ccapt; andrey_sag; +2 Ответить
3. PROSTO-1C 1904 12.09.25 10:48 Сейчас в теме
(1) подсистема Домена данных в данном случае - это самописная подсистема
2. V.Nikonov 123 09.09.25 14:42 Сейчас в теме
Не очень прозрачно описана фильтрация Запрашиваемых данных.
Кроме ограничений на количество Объектов к получению есть возможность установить другие дополнительные параметры запроса?
Возвращаются Измененные данные (т.е. зарегистрированные в неком плане обмена)?
4. PROSTO-1C 1904 12.09.25 10:49 Сейчас в теме
(2) Можно усовершенствовать обмен данными любым способом, чтобы фильтровать данные, тут уже зависит от нужд,
возвращаются измененные данные, которые записываются в регистр сведений в зависимости от даты записи в регистр
5. V.Nikonov 123 12.09.25 15:11 Сейчас в теме
(4) Т.е. надо прописать в Базе регистрацию в СпецРегистре в момент Записи?
Фактическое изменение будет анализироваться в Процедуре регистрации к Обмену...
Для отправки сообщения требуется регистрация/авторизация