Фильтрация записей для загрузки с сервера приложений
<< Click to Display Table of Contents >> Интеграция с 1С > Интеграция с 1C: Бухгалтерия предприятия 2.0 (устар.) > Правила синхронизации данных > Разработка правил синхронизации Directum RX и 1C > Примеры разработки правил Фильтрация записей для загрузки с сервера приложений |
Задача
В стандартной поставке есть правило экспорта банковских реквизитов контрагентов. Необходимо, чтобы записи контрагентов, в карточках которых не заполнены поля Банк и Номер счета, не загружались с сервера приложений для последующей синхронизации из Directum RX в «1С: Бухгалтерия 2.0». Таким образом можно снизить нагрузку на сервер приложений, так как лишние записи не будут загружаться.
Решение
Чтобы изменить механизм получения списка контрагентов с сервера приложений Directum RX:
1.В серверных функциях модуля Integration1C создайте методы на основе стандартных GetChangedEntitiesFromSyncDateRemote() и GetChangedEntitiesFromSyncDateRemoteCount(). В методах задайте новую логику получения записей контрагентов с сервера:
// Метод получает все записи контрагентов, в карточках которых заполнены поля «Банк» и «Номер счета», и возвращает количество этих записей.
[Remote(IsPure = true)]
public int GetChangedBankAccountsFromSyncDateRemoteCount(List<Guid>
entityTypeGuids,
string extEntityType,
string systemId)
{
using (var session = new Domain.Session())
{
var totalCount = 0;
foreach (var entityTypeGuid in entityTypeGuids)
{
var entities = this.GetChangedEntities(session, entityTypeGuid,
extEntityType, systemId).ToList();
totalCount += entities.Where(x => Counterparties.Is(x) &&
Counterparties.As(x).Status ==
Sungero.Parties.Counterparty.Status.Active &&
Counterparties.As(x).Bank != null &&
!string.IsNullOrEmpty(Counterparties
.As(x).Account))
.Count();
}
return totalCount;
}
}
// Метод порционно возвращает пакеты записей контрагентов, в карточках которых заполнены поля «Банк» и «Номер счета».
[Remote(IsPure = true)]
public List<Sungero.Domain.Shared.IEntity>
GetChangedBankAccountsFromSyncDateRemote(List<Guid> entityTypeGuids,
// Порция записей для загрузки с сервера int processedEntitiesCount,
int entitiesCountForProcessing,
string extEntityType,
string systemId)
{
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));
}
entities = entities.Where(x => Counterparties.Is(x) &&
Counterparties.As(x).Status ==
Sungero.Parties.Counterparty.Status.Active &&
Counterparties.As(x).Bank != null &&
!string.IsNullOrEmpty(Counterparties
.As(x).Account));
var entitiesBatch = entities
.Skip(processedEntitiesCount)
.Take(entitiesCountForProcessing)
.ToList();
return entitiesBatch;
}
}
2.Добавьте вызов созданных методов в разделяемые функции модуля Integration1C.
[Public]
public int GetChangedBankAccountsFromSyncDateCount(List<Guid> entityTypeGuids,
string extEntityType,
string systemId)
{
return Functions.Module.Remote.
GetChangedBankAccountsFromSyncDateRemoteCount(entityTypeGuids,
extEntityType, systemId);
}
[Public]
public List<Sungero.Domain.Shared.IEntity>
GetChangedBankAccountsFromSyncDate(List<Guid> entityTypeGuids,
int processedEntitiesCount,
int entitiesCountForProcessing,
string extEntityType,
string systemId)
{
return Functions.Module.Remote
.GetChangedBankAccountsFromSyncDateRemote(entityTypeGuids,
processedEntitiesCount,
entitiesCountForProcessing,
extEntityType,
systemId);
}
3.В наследнике от правила экспорта присвойте свойствам FunctionNameForGetEntitiesRX и FunctionNameForGetEntitiesCountRX названия соответствующих методов в конструкторе:
public BankAccountExportBase() : base()
{
this.FunctionNameForGetEntitiesRX = "GetChangedBankAccountsFromSyncDate";
this.FunctionNameForGetEntitiesCountRX =
"GetChangedBankAccountsFromSyncDateCount";
}
Изменение стандартного правила из комплекта поставки Создание правила для другой конфигурации 1С |
© Компания Directum, 2024 |