Подскажите, как написать обмен между самописками?

1. program345 141 27.02.26 07:23 Сейчас в теме
Доброго дня!
Есть две самописные конфигурации, между ними нужно организовать обмен. Поставили ТЗ обмен писать через файлы на ФТП. Использую формат Json.
1. Переношу простейшие типы (строка, число, булево, дата) с этим проблем нет.
2. ссылки (спрСсылка) передаются как УИД, ищу в базе приемнике,

СправочникСсылка = Справочники.ФизическиеЛица.ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураСообщения.ГУИД));
	Если ОбщегоНазначения.СсылкаСуществует(СправочникСсылка) Тогда
		СправочникОбъект = СправочникСсылка.ПолучитьОбъект();
	Иначе
		СправочникОбъект = Справочники.ФизическиеЛица.СоздатьЭлемент();
		СправочникОбъект.УстановитьСсылкуНового(СправочникСсылка);
	КонецЕсли;

Показать


3. Перечисления - тут вопрос...Как лучше передавать и разбирать их? Можно конечно передавать их в строковом виде и потом делать
	
Если СтруктураСообщения.Пол = "Мужской" Тогда
		СправочникОбъект.Пол = Перечисления.ПолФизическогоЛица.Мужской;
	Иначе
		СправочникОбъект.Пол = Перечисления.ПолФизическогоЛица.Женский;
	КонецЕсли;

Но правильно ли это?

4. Как передавать реквизиты с составным типом данных (ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения)?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. SlavaKron 27.02.26 09:32 Сейчас в теме
(1) Я за обмен на http-сервисах. Тем более для самописок.
Arxxximed; +1 Ответить
12. nomad_irk 83 27.02.26 11:37 Сейчас в теме
(9) Всю остальную "инфраструктуру" придется все равно пилить с нуля. Сильно проще будет внедрить в обе конфигурации БСП и доработать по месту.
13. SlavaKron 01.03.26 10:47 Сейчас в теме
(12) О какой инфраструктуре речь? Справочник "Пользователи", что там еще? Если самописки существуют, то, полагаю, вся "инфраструктура" уже есть. Здесь на ИС почему-то сильно переоценивают БСП.

БСП необходима в задачах, корень которых обусловен наличием самой же БСП, а в остальном достаточно методов платформы.
14. nomad_irk 83 02.03.26 07:56 Сейчас в теме
(13) Для обмена нужны очередь входящих/исходящих сообщений, хранилище правил
11. Sashares 33 27.02.26 10:21 Сейчас в теме
(1) Один из вариантов - не пилить велосипед, а встроить БСП с подсистемой Обмен данными.
Далее сделать правила обмена в Конвертации.
А, уже посоветовали))
Tatyana_012345; VyacheslavShilov; +2 Ответить
15. Boneman 302 02.03.26 21:49 Сейчас в теме
(1) так просто КД2 использовать и все. Стандартной обработкой универсальный обмен в формате xml.
Выгрузить в файл - загрузить из файла.
В КД2 правила писать проще простого.
А обработку по универсальному обмену, можно красиво завернуть в свою оболочку, лишнее скрыть от пользователей - оставив минимум кнопок. Если порыть тут на инфостарте, статьи и примеры точно были, как это сделать.
18. vppunctum 5 03.03.26 19:52 Сейчас в теме
(1)
Но правильно ли это?


Правильно! Во многих конфигурациях так и сделано.
22. jmw 61 04.03.26 12:37 Сейчас в теме
(1) Тип и вид значения тоже можно передавать через json, чтобы было проще искать.
К примеру:

метТип = "Справочник";
метВид = "Контрагенты";
УИД = "4e531634-c69d-11f0-a1a1-d8bbc16eb42c";

Если метТип = "Справочник" Тогда
	
	УИД = Новый УникальныйИдентификатор(УИД);
	ссылка = Справочники[метВид].ПолучитьСсылку(УИД);
	Если ссылка.ПолучитьОбъект() = Неопределено Тогда
		// создать новый
	Иначе
		// найдена ссылка
	КонецЕсли;
	
ИначеЕсли метТип = "Документ" Тогда
	// ...
КонецЕсли;
Показать

Обмены подобного вида писались между нетленками в клюшках (на 1С v7.x)

В типовых есть РегистрСведений.СоответствияОбъектовИнформационныхБаз
Что мешает использовать что-то подобное в самописных обменах?
Один раз задал соответствие по УИД и все связки справочник—перечисления закрылись.

Но, поддержу высказывания выше, чтобы было универсально, нужно копать в сторону КД
2. Avatarzorro 71 27.02.26 07:44 Сейчас в теме
можешь поверить мне на слово. Лучше тебе внедрить бсп в свои самописки и сделать нормальный обмен через кд и бсп.

Тем более что на стетхеме ты прорастешь все конвертации писать с нуля. А там уже все есть из коробки. Тем более в кд3 оладка простая.

И в бсп есть из коробки обмен по фтп
Sashares; ImHunter; nomad_irk; +3 Ответить
3. program345 141 27.02.26 08:16 Сейчас в теме
(2)
Благодарю за ответ!
"Тем более что на стетхеме ты прорастешь" - не понял, что значит эта фраза.
7. Avatarzorro 71 27.02.26 09:07 Сейчас в теме
(3) json. json statham. Это прикол такой
4. Pavben 27.02.26 08:33 Сейчас в теме
У меня обмен сделан через xml. В одной базе выгружаю таблицу значений, в другой загружаю.
В качестве уникального поля везде использую сгенерированный ИД (без разницы какой, хоть числа по порядку) и регистр сведений, где связаны объекты по ИД в обоих базах. При создании любого нужного объекта для обмена ему присваивается ИД и при обмене, если такого нет в другой базе, то он создаётся и соответствие ИД пишется в регистр сведений.
6. program345 141 27.02.26 09:00 Сейчас в теме
(4) я так понимаю генерируете ИД только для ссылочных типов данных и перечислений?

а как поступаете в случае если передаем справочник из Источника, у которого есть ссылочные реквизиты которых может не быть в Приемнике?
8. Pavben 27.02.26 09:30 Сейчас в теме
(6) Да, ИД только для ссылок.
Передаются только те реквизиты, которые есть в обоих базах. Если реквизитов нет, то можно как-то их копить и потом, например, положить текстовый файл с сообщением на фтп, или сообщать каким-то другим методом. Смысл передавать то, чего нет в другом месте?)
program345; +1 Ответить
10. пользователь 27.02.26 09:56
Сообщение было скрыто модератором.
...
5. Spurk 42 27.02.26 08:35 Сейчас в теме
На отправку
XMLСтрока(Значение) - Значение это реквизит перечисления в объекте.

На получение.
Перечисления.СтавкиНДС[ЗначениеПеречисленияКотороеПришлоПриОбмене]
SlavaKron; +1 Ответить
16. coollerinc 188 03.03.26 01:58 Сейчас в теме
По моему КД 2 это очень медленный механизм с полным чтением объекта для выгрузки. Да и процедуры все выполняются для каждого объекта. Писать правила обмена конечно легко/удобно/понятно, но мне кажется было актуально, когда еще управляемых форм не было. Http + json самое простое и быстрое.

Или там в КД уже что то сильно поменялось?
19. Boneman 302 04.03.26 00:10 Сейчас в теме
(16) http и json это способ передачи данных между системами, а не способ конвертации.
Вручную писать конвертации, это изобретение велосипеда.
А КД это универсальный механизм.
20. coollerinc 188 04.03.26 11:47 Сейчас в теме
(19) Вы сравнивали скорость работы, на сколько можно оптимизировать выгрузку данных написав ее вручную по сравнению с КД?

"А КД это универсальный механизм", это единственный плюс. Работая с 1с хочешь не хочешь, но в КД придется вляпаться)
21. Boneman 302 04.03.26 12:31 Сейчас в теме
(20) я и сам разрабатывал и поддерживал много самопальных обменов, в т.ч. с передачей через http сервисы...и до какого то момента считал также, что нафиг нужна эта КД, я и руками сделаю намного оптимальнее и быстрее.
Но когда дело доходит до организации серьезных обменов, навороченных баз, с сотнями самых разных объектов, да если еще и регулярно требуется изменения, в т.ч. и разными людьми...этот "единственный" плюс, перевешивает все преимущества оптимизированных, эксклюзивных вариантов. Я уж молчу про трудозатраты на создание и отладку и изменения. КД в разы облегчает эту задачу.
23. coollerinc 188 04.03.26 13:12 Сейчас в теме
(21) вот как раз для серьезных оперативных обменов и нужно самому писать. Особенно когда идет серьезный объем изменяемых данных.
17. gybson 6 03.03.26 09:30 Сейчас в теме
При эксплуатации обмена важна прозрачность и доверие, а для этого весь процесс должен быть под контролем. Какие данные выгрузились, как, как загрузились, какие возникли ошибки. В процессе возникают правки : здесь выгружаем не все, здесь не все загружаем, ищем по коду, при загрузке выполняем код и т.д. и т.п. Дальше больше - выгрузите с реализацией СФ и наоборот. Типовой обмен решает большинство задач.
24. A_Dav 06.03.26 10:47 Сейчас в теме
3. Для перечислений можно использовать передачу строкой предопределенного имени с последующим поиском на Приемнике. На приемнике обязательно проверяйте есть ли такое перечисление у вида, иначе словите ошибку.

Отправка:
ИмяПеречисления = ЗначениеПеречисления.Метаданные().Имя;
ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(ЗначениеПеречисления);
ПредопределенноеИмя = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя;


Получение:
ЗначенияПеречисления = Метаданные.Перечисления[ВидПеречисления].ЗначенияПеречисления;
		
Если Не ЗначенияПеречисления.Найти(ИмяПеречислимого) = Неопределено Тогда
	ПолученныеДанные[ИмяРеквизита] = Перечисления[ВидПеречисления][ИмяПеречислимого];
КонецЕсли;


Для ПВХ используйте тот же механизм как и для справочников, а тип можно также передавать и распознавать строкой, только помните, что ТипЗначения ПВХ это описание типов (в примере только 1 тип передается, по логике вашей задачи лучше перебирать все):

Отправка:
ТипЗначенияСтрока= ОбщегоНазначения.СтроковоеПредставлениеТипа(ДанныеИБ.ТипЗначения.Типы()[0])


Получение:
СписокТипов = Новый Массив;  
СписокТипов.Добавить(Тип(ТипЗначенияСтрока));
НовыйПВХ.ТипЗначения = Новый ОписаниеТипов(СписокТипов);


И т.к. вы пишете самостоятельно обмен, то наверное полезно подключить часть механизма КД, а именно для ссылочных типов передавать не только УИД, а КлючевыеПараметры (Ссылка, код, наименование), по ним в последствии можно организовывать поиск на приемнике. Также учитывайте проблему присвоения УИДа источника, он может быть занят и тогда не сработает назначение. В КД3 для этого используются ПубличныеИдентификаторыСинхронизируеммыхОбъектов, не лишено смысла завести подобное и в вашем обмене.

Но в целом по опыту все самописные обмены приводили к откату на КД2 или КД3 в виду большей надежности и универсальности.
Для отправки сообщения требуется регистрация/авторизация

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот