В случае штатной работы обработки синхронизации 1С с сервером Grotem обе базы согласованы по данным объектов, участвующих в обмене.

В случае, к примеру, восстановления базы данных 1С из резервной копии, данные могут "разъехаться". Это может привести либо к ошибкам обмена (foreign key constraint violation, в случае отсутствия записи в справочной таблице) либо, что еще хуже, к некорректным данным в системе (например неправильная цена. по которой формируется заказ).

В первом случае недостающие записи могут быть найдены автоматически, метод сервера CheckIfExists позволяет найти записи, отсутствующие в базе.

Во втором случае универсального решения нет, так как фактически требуется провести полное сравнение 2 баз, технически может быть проще создать на сервере новую базу и выполнить полную выгрузку из 1С. 

Для частных случаев решение будет зависеть от того, какие объекты нужно сравнить.

Пример, сравнение прайс-листов:

  1. Выполнить на стороне 1С запрос: 
    ВЫБРАТЬ Ref.Number, СУММА(Price) ИЗ Document.PriceList_Prices GROUP BY Ref.Number
  2. В базе данных сервера создать временную таблицу: 
    CREATE TABLE dbo.Temp(Number VARCHAR(100), Amount DECIMAL(10,2))
  3. Результат запроса п.1 превратить в скрипт вида INSERT INTO dbo.Temp(Number,Amount) VALUES(''..","...") для каждой строки и выполнить скрипт на сервере.

  4. Выполнить запрос сравнения двух таблиц:

    SELECT *
    FROM [dbo].[Temp] t1
    JOIN
    (
    SELECT h.Number, SUM(p.Price) as amount
    FROM [Document].[PriceList] h
    JOIN [Document].[PriceList_Prices] p on p.Ref = h.Id
    GROUP BY h.Number
    ) t2 on t1.n = t2.Number
    WHERE t1.p <> t2.amount

  • Нет меток
Написать комментарий...