Имя: Пароль:
1C
1С v8
Выбор протокола синхронизации
, ,
0 PaulSeiziger
 
09.07.19
16:15
Привет!
Подскажите, самое оптимальное решение для моей ситуации:
Имеем несколько 1С, с которыми должна взаимодействовать наша программа (на Java).
Программа должна добавлять, изменять и удалять контрагентов в этих базах, а также уметь выводить списки этих контрагентов и выставлять счета (с возможностью отправки на печать и сохранения в PDF).

Какой протокол взаимодействия для этого лучше использовать?
В данный момент использую odata. Мне не нравится то, что приходится выгружать всё, что есть в каждой из баз, чтобы узнать, были ли изменения. Также в данный момент я не понимаю, как мне проверять удаление элемента на стороне 1С (есть DeletionMark, но я банально могу не успеть отследить его изменение, если будет вызвана процедура очиски помеченных на удаление элементов).

Я думаю заменить odata http-сервисом. Удачное ли это решение? Какие подводные камни могут быть? Или вообще синхронизироваться как-то иначе?
1 Лефмихалыч
 
09.07.19
16:17
http-сервис на стороне 1С поднять

страданий с удалением не понял. Расскажи подробности.
2 PaulSeiziger
 
09.07.19
16:41
(1) Я думаю, что поле DeletionMark в Odata - это, по сути, пометка на удаление. Сканирование обновлений я выполняю раз в 15 минут, при этом запрашивая все сущности (возможно, есть способ составить условие, чтобы этого не делать?). Если в моей базе уже присутсвует эта сущность, то я заменяю ее данными из 1С. Что, если в этом 15-минутном интервале произойдет пометка на удаление и вызов процедуры очистки помеченных на удление элементов? Я в таком случае просто не получу никакой информации об этой сущности и, соответсвенно, не применю изменений к своей базе.
3 Dotoshin
 
09.07.19
17:03
(2) Если суть задачи в синхронизации данных между 1С и вашей программой, то есть смысл использовать планы обмена. В плане обмена регистрируются все произошедшие изменения. Вам нужно каким то образом получать эту информацию из плана обмена и синхронизировать данные в своей программе. Далее в плане обмена нужно удалить синхронизированные элементы.
Это можно сделать разными способами. Все зависит от конкретной ситуации.
4 Вафель
 
09.07.19
17:03
может стоит рассмотреть 2х сторонний обмен?
когда 1с сама инициализирует обмен с вашей прогой?
5 Dotoshin
 
09.07.19
17:07
(4) Тут вопрос в том как его программа будет давать ответ.
6 Вафель
 
09.07.19
17:10
(5) как нужно будет так и будет давать.
сами же пишут
7 Garykom
 
гуру
09.07.19
17:13
(0) Имхо лучшее решение в вашей ситуации это нанять хорошего программиста 1С.

Потому что задачу которую вы пытаетесь решить через одно место, легко и просто решается о стороны 1С.
8 Лефмихалыч
 
09.07.19
17:22
(2) а на какой пень ты к себе складируешь эти данные? Чтобы половчей потом позатрахиваться с удалениями вот этими или под этим есть какое-то еще логическое обоснование?
9 PaulSeiziger
 
09.07.19
17:31
(8) Потому что не все сущности, создаваемые через эту программу, должны синхронизироваться с 1С. Некоторые должны быть доступны только для локального использования.
10 PaulSeiziger
 
09.07.19
17:36
(3) Спасибо, постараюсь поискать в этом направлении. Посоветуете какой-нибудь ресурс?
11 LLeonidov
 
09.07.19
17:36
(2) какое же похвальное стремление.
Все что нужно сделать это на стороне 1с использовать план обмена и после успешной записи объектов в "программе" сбрасывать признак изменения этих объектов в 1с.
Если объект окончательно удалят из базы. То со стороны 1с в таблице изменений все равно есть УИД этих удаленных объектов. Лично мне для целей обмена нравятся http сервисы, но это не важно.
12 Dotoshin
 
09.07.19
17:37
(9) Тогда тем более не понятно.
13 LLeonidov
 
09.07.19
17:37
(10) первая же ссылка в поисковике :) отличная статья. http://catalog.mista.ru/public/899200/
14 LLeonidov
 
09.07.19
17:37
+(13) http://catalog.mista.ru/public/899200/ извиняюсь не та ссылка
15 Dotoshin
 
09.07.19
17:42
(10) вот для примера https://programmist1s.ru/planyi-obmena-1s/
В общем гугли план обмена 1с. Статей полно
16 Garykom
 
гуру
09.07.19
17:43
(14) Кроме планов обмена, можно просто подписку в 1С на нужные объекты.

Боюсь от планов обмена у программера на Java будет завихрение кое чего.
17 Dotoshin
 
09.07.19
17:46
(16) Можно позвать на помощь программиста 1С,чтобы не было завихрений. Базы 1С кто-то обслуживает же....
18 bolero
 
09.07.19
17:57
(2) Плюсую за план обмена.

У меня стоит задача некоторого обмена информацией между совершенно разнородными базами (это никоим разом не синхронизация), пришел к выводу, что проще всего завести узлы обмена.

Жаба пусть приходит, забирает XML с сообщением, оттуда дергает только то, что ей нужно, а в ответ пустую XML "сообщение принято".

На мой взгляд, завихрений будет значительно меньше, чем с подписками.
19 Garykom
 
гуру
09.07.19
18:05
(18) думаешь так просто на java создать пустую xml по формату 1С?
20 Лефмихалыч
 
09.07.19
18:42
21 bolero
 
10.07.19
10:16
(19) иногда люди пытаются решить задачу академическим методом вместо прагматического. У тебя в голове уже наверняка завертелись всякие Factory, Builder, XSI, namespaces, а достаточно текстового шаблона, куда только номера сообщений подставлять.

Разбор XML на жаве - не сложнее, чем на любом другом языке кроме 1С и лиспов всяких, для жавы XML - родненький формат.