Получение данных из Directum RX в 1С
<< Click to Display Table of Contents >> Интеграция с 1С > Интеграция с 1C: Бухгалтерия предприятия 3.0 > Разработка правил синхронизации > Общая схема работы Получение данных из Directum RX в 1С |
При создании или изменении записи в Directum RX она синхронизируется в 1С по принципу:
1.По расписанию запускается регламентное задание или пользователь вручную в 1С выбирает пункт Получить данные в Directum RX в разделе «Directum RX»:
2.Отбираются правила синхронизации, в поле Состояние которых указано значение Действующая и установлен флажок Использовать при получении.
3.Для каждого отобранного правила синхронизации вызывается обработчик событий «Правило отбора» из модуля менеджера. Обработчик вызывает прикладную функцию из Directum RX, которая возвращает список ИД синхронизируемых записей.
При этом вызывается:
•прикладная универсальная функция для синхронизируемых типов объектов, например:
/// <summary>
/// Получить ИД сущностей, измененных с момента последней синхронизации.
/// </summary>
/// <param name="entityTypeGuids">Список гуидов типов сущностей.</param>
/// <param name="extEntityType">Тип записи внешней системы.</param>
/// <param name="systemId">ИД системы 1С.</param>
/// <returns>Список ИД сущностей.</returns>
[Public(WebApiRequestType = RequestType.Get)]
public List<long> GetChangedEntitiesIdsFromSyncDate(List<Guid> entityTypeGuids, string extEntityType, string systemId)
{
if (entityTypeGuids == null || entityTypeGuids.Count == 0)
return new List<long>();
using (var session = new Domain.Session())
{
var entities = new List<Sungero.Domain.Shared.IEntity>().AsQueryable();
foreach (var entityTypeGuid in entityTypeGuids)
entities = entities.Union(this.GetChangedEntities(session, entityTypeGuid, extEntityType, systemId));
var entityIds = entities
.Select(e => e.Id)
.ToList();
return entityIds;
}
}
•функция для конкретного типа объекта, в которой реализована дополнительная обработка записей, например для получения записей справочника Организации:
/// <summary>
/// Получить ИД организаций, подходящих для синхронизации в 1С:
/// - новые и измененные с момента последней синхронизации,
/// - отфильтрованные по состоянию.
/// </summary>
/// <param name="extEntityType">Тип записи внешней системы.</param>
/// <param name="systemId">ИД системы 1С.</param>
/// <param name="strictMode">Строгий режим: true - новые организации возвращаются только с заполненным ИНН, false - заполненность ИНН у организаций не проверяется.</param>
/// <returns>Список ИД организаций.</returns>
[Public(WebApiRequestType = RequestType.Get)]
public virtual List<long> GetCompanyIdsForSync(string extEntityType, string systemId, bool strictMode)
{
var companyTypeGuid = typeof(Parties.ICompany).GetFinalType().GetTypeGuid();
using (var session = new Domain.Session())
{
var entities = this.GetChangedEntities(session, companyTypeGuid, extEntityType, systemId);
entities = entities.Where(e => Parties.Companies.Is(e) &&
Parties.Companies.As(e).Status == Sungero.Parties.Company.Status.Active);
if (strictMode)
entities = this.FilterCounterpartiesForStrictMode(entities, extEntityType, companyTypeGuid, systemId);
return entities.Select(e => e.Id).ToList();
}
}
4.Для каждой отобранной записи проверяется, синхронизировалась ли запись в 1С по признакам: значение поля rx_ID в 1С равно значению ИД записи в Directum RX или есть запись в справочнике Ссылки внешней системы в Directum RX.
Если запись синхронизировалась, то она обновляется в 1С.
Иначе выбирается способ поиска с помощью поля Поиск записей в правиле синхронизации: если установлено значение По полям поиска, то запись ищется по полям, у которых в табличной части правила установлен флажок Поле поиска.
А если указано значение Программно, то вызывается функция, которая указана в поле Правило поиска карточки правила синхронизации.
В результате, если запись не синхронизировалась или найдена одна, она создается или обновляется в Directum RX. Если найдено несколько, возникает ошибка и информация по ней записывается в журнал обмена.
Создание или обновление записи в 1С
После получения записей из Directum RX они создаются или обновляются в 1С по принципу: 1.Вызывается функция До обработки, которая указана в поле Правило до обработки карточки правила синхронизации. 2.Поля записи формируются для отправки в 1С согласно соответствию полей Directum RX реквизитам 1С. Каждому полю в столбце Реквизит 1С табличной части правила соответствует: •значение реквизита в столбце Реквизит RX, если в столбце Правило не указана функция обработки; •результат выполнения функции обработки, если она указана в столбце Правило. 3.В 1С создается или обновляется запись с типом сущности, который указан в поле Тип объекта 1С в правиле. Например, у записи справочника Организации в поле Тип объекта 1С указано значение Контрагенты (Справочник). 4.В записи 1С поле rx_ID заполняется значением ИД записи в Directum RX. 5.Создается или обновляется запись в справочнике Ссылки внешней системы. 6.Вызывается прикладная функция FinalizeSyncEntity() из Directum RX. ПРИМЕЧАНИЕ. В стандартной поставке функция не содержит код, но ее можно перекрыть и доработать. Например, реализовать дополнительную обработку после завершения синхронизации. 7.Вызывается функция После обработки, которая указана в карточке правила синхронизации в поле Правило после обработки. |
© Компания Directum, 2024 |