В случае штатной работы обработки синхронизации 1С с сервером Grotem обе базы согласованы по данным объектов, участвующих в обмене.
В случае, к примеру, восстановления базы данных 1С из резервной копии, данные могут "разъехаться". Это может привести либо к ошибкам обмена (foreign key constraint violation, в случае отсутствия записи в справочной таблице) либо, что еще хуже, к некорректным данным в системе (например неправильная цена. по которой формируется заказ).
В первом случае недостающие записи могут быть найдены автоматически, метод сервера CheckIfExists позволяет найти записи, отсутствующие в базе.
Во втором случае универсального решения нет, так как фактически требуется провести полное сравнение 2 баз, технически может быть проще создать на сервере новую базу и выполнить полную выгрузку из 1С.
Для частных случаев решение будет зависеть от того, какие объекты нужно сравнить.
Пример, сравнение прайс-листов:
- Выполнить на стороне 1С запрос:
ВЫБРАТЬ Ref.Number, СУММА(Price) ИЗ Document.PriceList_Prices GROUP BY Ref.Number - В базе данных сервера создать временную таблицу:
CREATE TABLE dbo.Temp(Number VARCHAR(100), Amount DECIMAL(10,2)) Результат запроса п.1 превратить в скрипт вида INSERT INTO dbo.Temp(Number,Amount) VALUES(''..","...") для каждой строки и выполнить скрипт на сервере.
- Выполнить запрос сравнения двух таблиц:
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
Добавить комментарий