Дубли при синхронизации

Итак, ситуация с синхронизацией 1С и Террасофт.
Есть настроенная синхронизация, очень простая. Из проектов Террасофт заполняется справочник в 1С.
Записи в справочнике создаются, всякие цифры, даты, строковые поля - нормально заполняются.
Ненормально заполняются поля с ссылками на другие таблицы.
Так например при наличии абсолютно одинаковых ФИО в разделе Контакты и справочнике Физические лица, все же создается в 1С дубль. С каким-то невменяемым кодом из цифр и букв (но это даже не ID записи в Террасофт). Если поставить галочку при синхронизации "не создавать записи в справочнике", то тогда в синхонизируемых полях будет просто пусто.
Что делать, чтобы исправить?

Нравится

8 комментариев

Виктория, абсолютно одинаковые ФИО могут быть у 2-х и более совершенно разных людей. Поэтому все записи "маппятся" по UID1C(ID записи в 1с) и Object1C (сущность в 1с).
Рекомендую Вам создать отдельную настройку по всем "ссылочным" полям интегрируемого Вами справочника и в настройках снять галочку "добавлять новые записи", но заполнить поле "Экспорт по правилу".

Т.е. если в справочнике "Проекты" в 1с есть два ссылочных поля ФизЛицо (ссылка на справочник ФизЛица) и ЮрЛицо (ссылка на справочник "ЮрЛица"), то у вас должны быть две доп. настройки экспорта: из контактов в физ лица, и из контрагентов в юр лица. Эти настройки должны быть указаны в поле "экспорт по правилу" в исходной настройке по экспорту проектов.

Добрый день.
Начала со ссылочного поля Физлица. Сделала отдельную настройку Контакты, она на картинках.
В Проектах указала для соответствующего поля экспорт в 1С по правилу , и запретила добавление.
Результат стал немного лучше, а именно: в справочник Физлица все также добавляются дубли, но хотя бы с нормальными кодами , в порядке увеличения.

Виктория, при экспорте система смотрит на поле UID1C - если это поле пустое - система создаст новую запись в 1с, после чего заполнит это поле ID-шником созданной в 1с записи. У Вас сейчас во всех контактах это поле пустое - поэтому в 1с первый раз будет создаваться новая запись, а затем всегда будет обновляться. Поэтому нужно сначала импортнуть всех контактов с 1с в ТС. Затем слить дубли (если таковы будут) но обязательно оставить поле UID1C и Object1C заполненным. А затем можно уже пользвоаться этими контактами для эксопрта будучи уверенным что новые записи в справочнике "Контакты" будут созданы только в том члучае, если контакта действительно нет в 1с (он был создан в тс после первичного импорта контактов).

Я так же попробовала в настройке Контакты оставить только одно поле для синхронизации - Наименование, убрав все, что связано с кодами.
Но и так в 1С создаются дубли.

P.S. не видела Вашего комментария. Буду пробовать

А можно ли как-то из 1С получить список фио физлиц и его ID , а потом заполнить поля UID1C в ТС (допустим через запросы sql или импортом)?

Я создала запрос в 1С, который выводит ФИО и его идентификатор.

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ ФизическиеЛица.Ссылка,ФизическиеЛица.Представление,ФизическиеЛица.Наименование ИЗ Справочник.ФизическиеЛица КАК ФизическиеЛица";
Результат=Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
уи=Выборка.Ссылка.УникальныйИдентификатор();
Сообщить(Выборка.Наименование + " код " + уи);
КонецЦикла;

А потом в SQL заполняю
Update tbl_Contact
set UID1C='{ec123797-e580-11e3-9b31-003048626081}' where Name = 'фио'

И заполненные таким образом идентификаторы позволяют нормально синхронизироваться и не создавать дубли!
Но это все же громоздко теперь так заполнять ((

Виктория, ну так а что делать... Каким то же образом нужно "смапить" те контакты, которые уже есть в ТС (создавались в ТС) и те, которые уже есть в 1С (создавались в 1с).
Обычно мы делаем так: вручную мапим указанным вами способом те контакты, которые являются пользователями системы. Остальные контакты либо удаляем, и потом загружаем с 1с, либо загружаем из 1с, а потом сливаем дубли штатными средствами, либо напрямую UPDATE/DELETE запросами на уровне СУБД.
Опять таки, для новых контактов (которых нет в 1с) дублей не будет и всё будет работать хорошо.

Хотя, в принципе, при желании, вы можете составить список тех контактов, которые есть в ТС и которые есть в 1с по условию ТС.ФИО = 1с. ФИО. Затем обработкой для этих контактов отобразить их UID1C, выгрузить в текстовый документ, затем загрузить в темповую таблицу в базу ТС (с двумя колонками- ФИО и UID1C) и массово выполнить UPDATE в базе Террасофт:

update tbl_Contact set UID1C = a.UID1C
from #Temp as a
where a.Name = tbl_Contact.Name
Показать все комментарии