Скрипты SQL для проверки данных
Проверка позиции на сайте
В параметрах запроса указать (заменить):
{Логин} - логин пользователя на сайте
{Артикул} - очищенный артикул для поиска
{Бренд} - бренд
SET NOCOUNT ON;
-- параметры
DECLARE @webUserLogin NVARCHAR(100) = N'{Логин}';
DECLARE @vendocrPurifiedCode NVARCHAR(200) = N'{Артикул}';
DECLARE @vendorName NVARCHAR(100) = N'{Бренд}';
-- проверка товара
DECLARE @productId UNIQUEIDENTIFIER;
DECLARE @restUnitId UNIQUEIDENTIFIER;
SELECT
@productId = [product].[ArtID]
, @restUnitId = [restUnit].[RestUnitOfIssueID]
FROM
[dbo].[Articles] [product]
LEFT JOIN [dbo].[RestUnitsOfIssue] [restUnit]
ON [restUnit].[RestUnitOfIssueID] = [product].[RestUnitOfIssueID]
WHERE
[product].[SearchArticle] = @vendocrPurifiedCode
AND [product].[BrandName] = @vendorName;
IF @productId IS NULL
BEGIN
IF NOT EXISTS
(
SELECT
1
FROM
[dbo].[SiteVirtualStorePriceLists] [priceList]
WHERE
[priceList].[ProductSearchArticle] = @vendocrPurifiedCode
AND [priceList].[ProductBrandAlias] = @vendorName
)
BEGIN
PRINT 'Товар не найден в списке номенклатуры и в прайс-листе';
RETURN;
END;
END;
-- проверка единицы измерений
IF @productId IS NOT NULL
AND @restUnitId IS NULL
BEGIN
PRINT 'Для товара не указана единица измерения';
END;
-- проверка кросса "сам на себя"
IF NOT EXISTS
(
SELECT
1
FROM
[dbo].[ArticlesCrosses] AS [cross]
WHERE
[cross].[CrossSearchArticle] = @vendocrPurifiedCode
AND [cross].[CrossBrandName] = @vendorName
AND [cross].[CrossType] = 1
)
BEGIN
PRINT 'Не найден кросс "сам на себя"';
RETURN;
END;
-- проверка белых списков
IF EXISTS
(
SELECT
1
FROM
zw.[WhitelistedProducts]
)
BEGIN
IF NOT EXISTS
(
SELECT
1
FROM
[zw].[WhitelistedProducts] [whiteList]
WHERE
[whiteList].[ProductSearchArticle] = @vendocrPurifiedCode
AND [whiteList].[ProductBrandName] = @vendorName
)
BEGIN
PRINT 'Белые списки включены. ТОвар не включен в белый список';
RETURN;
END;
END;
-- проверка черных списков
IF EXISTS
(
SELECT
1
FROM
[zw].[BlacklistedProducts] [blackList]
WHERE
[blackList].[ProductSearchArticle] = @vendocrPurifiedCode
AND [blackList].[ProductBrandName] = @vendorName
)
BEGIN
PRINT 'Товар находится в черном списке';
RETURN;
END;
-- поиск и проверка пользователя
DECLARE @webUserId UNIQUEIDENTIFIER;
DECLARE @webUserRestGroupId UNIQUEIDENTIFIER;
SELECT
@webUserId = [webUser].[UserID]
, @webUserRestGroupId = [webUser].[RestGroupId]
FROM
[dbo].[SiteUsers] [webUser]
WHERE
[webUser].[UserLogin] = @webUserLogin;
IF @webUserId IS NULL
BEGIN
PRINT 'Не найден веб-пользователь';
RETURN;
END;
-- поиск и проверка роли
DECLARE @roleId UNIQUEIDENTIFIER;
SELECT
@roleId = [webUserWebRole].[RoleID]
FROM
[dbo].[UsersRoles] [webUserWebRole]
WHERE
[webUserWebRole].[UserID] = @webUserId;
IF @roleId IS NULL
BEGIN
PRINT 'Не найдена роль веб-пользователя';
RETURN;
END;
DECLARE @webRoleRestGroupId UNIQUEIDENTIFIER;
SELECT
@webRoleRestGroupId = [webRole].[SiteUserStoresAvailabilityGroupsID]
FROM
[dbo].[SiteRoles] [webRole]
WHERE
[webRole].[RoleID] = @roleId;
-- поиск и проверка договоров
DECLARE @customerId UNIQUEIDENTIFIER;
DECLARE @customerContractId UNIQUEIDENTIFIER;
DECLARE @customerContractPriceTypeId UNIQUEIDENTIFIER;
DECLARE @customerContractBasePriceTypeId UNIQUEIDENTIFIER;
DECLARE @restGroupId UNIQUEIDENTIFIER;
DECLARE @pksd NVARCHAR(300);
DECLARE [customerTreatiesCursor] CURSOR FOR
SELECT
[customer].[ContractorID] AS [customerId]
, [customerContract].[ContractorsTreatiesID] AS [customerContractId]
, [customerContract].[ArticlesPriceTypesID] AS [customerContractPriceTypeId]
, [priceType].[BasePriceType] AS [customerContracBasetPriceTypeId]
, ISNULL([customer].[Name], '') + ' (' + ISNULL([customer].[Code], '') + '), ' + ISNULL([customerContract].[Name], '') + ' (' + ISNULL([customerContract].[Code], '') + '), ' + [priceType].[Name]
+ ' (' + CAST([customerContract].[ArticlesPriceTypesID] AS NVARCHAR(100)) + ')' + CHAR(10) AS [Name]
, COALESCE([customerContract].[SiteRestGroupId], [customer].[SiteRestGroupId], @webUserRestGroupId, @webRoleRestGroupId) AS [RestGroupId]
FROM
[dbo].[SiteUsersContractors] [webUserCustomer]
INNER JOIN [dbo].[Contractors] [customer]
ON [customer].[ContractorID] = [webUserCustomer].[ContractorID]
INNER JOIN [dbo].[ContractorsTreaties] [customerContract]
ON [customerContract].[ContractorID] = [customer].[ContractorID]
INNER JOIN [dbo].[ArticlesPriceTypes] [priceType]
ON [priceType].[ArticlesPriceTypesID] = [customerContract].[ArticlesPriceTypesID]
WHERE
[webUserCustomer].[UserID] = @webUserId;
OPEN [customerTreatiesCursor];
FETCH NEXT FROM [customerTreatiesCursor]
INTO
@customerId
, @customerContractId
, @customerContractPriceTypeId
, @customerContractBasePriceTypeId
, @pksd
, @restGroupId;
IF @@FETCH_STATUS <> 0
BEGIN
PRINT 'Не найдены догвооры контрагента';
RETURN;
END;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @pksd;
DECLARE @stockAvailability TABLE
(
RepositoryId UNIQUEIDENTIFIER
, SupplierId UNIQUEIDENTIFIER
, Quantity DECIMAL(15, 3)
);
IF @restGroupId IS NULL
BEGIN
INSERT INTO
@stockAvailability
(
[RepositoryId]
, [SupplierId]
, [Quantity]
)
SELECT
[stockAvailability].[RepositoryId]
, [stockAvailability].[SupplierId]
, [stockAvailability].[Quantity]
FROM
[dbo].[SiteRests2] [stockAvailability]
WHERE
[stockAvailability].[ProductSearchArticle] = @vendocrPurifiedCode
AND [stockAvailability].[ProductBrand] = @vendorName;
END;
ELSE
BEGIN
INSERT INTO
@stockAvailability
(
[RepositoryId]
, [SupplierId]
, [Quantity]
)
SELECT
[stockAvailability].[RepositoryId]
, [stockAvailability].[SupplierId]
, [stockAvailability].[Quantity]
FROM
[dbo].[SiteRestGroupRests2] [stockAvailability]
WHERE
[stockAvailability].[ProductSearchArticle] = @vendocrPurifiedCode
AND [stockAvailability].[ProductBrand] = @vendorName
AND [stockAvailability].[RestGroupId] = @restGroupId;
END;
DECLARE @quantity NVARCHAR(MAX) = N'Остатки:' + CHAR(10) + CHAR(13);
SELECT
@quantity = @quantity + COALESCE([stock].[Name], [order].[Number], [supplier].[Name]) + N': ' + CAST([stockAcailability].[Quantity] AS NVARCHAR(10)) + CHAR(10)
FROM
@stockAvailability [stockAcailability]
LEFT JOIN [dbo].[Stores] [stock]
ON [stockAcailability].[RepositoryId] = [stock].[StoreID]
LEFT JOIN [dbo].[OrderToSupplier] [order]
ON [stockAcailability].[RepositoryId] = [order].[OrderToSupplierID]
LEFT JOIN [dbo].[Contractors] [supplier]
ON [stockAcailability].[SupplierId] = [supplier].[ContractorID]
WHERE
[stockAcailability].[Quantity] <> 0;
PRINT @quantity;
DECLARE @price DECIMAL(15, 2);
IF @productId IS NOT NULL
BEGIN
SELECT TOP 1
@price = [price].[Price]
FROM
[dbo].[LC_ArticlesPrices] [price]
WHERE
(
[price].[ArticlesPriceTypesID] = @customerContractPriceTypeId
OR [price].[ArticlesPriceTypesID] = @customerContractBasePriceTypeId
)
AND [price].[ArtID] = @productId
AND [price].[ArticleDescriptionID] IS NULL
AND [price].[Period] <= GETDATE()
ORDER BY
CASE
WHEN [price].[ArticlesPriceTypesID] = @customerContractPriceTypeId THEN
1
ELSE
0
END DESC
, [price].[Period] DESC;
IF @price IS NULL
BEGIN
PRINT 'Цена компании в срезе цен не указана' + CHAR(10);
SELECT TOP 1
@price = [price].[Price]
FROM
[dbo].[ArticlesPrices] [price]
WHERE
(
[price].[ArticlesPriceTypesID] = @customerContractPriceTypeId
OR [price].[ArticlesPriceTypesID] = @customerContractBasePriceTypeId
)
AND [price].[ArtID] = @productId
AND [price].[ArticleDescriptionID] IS NULL
AND [price].[Period] <= GETDATE()
ORDER BY
CASE
WHEN [price].[ArticlesPriceTypesID] = @customerContractPriceTypeId THEN
1
ELSE
0
END DESC
, [price].[Period] DESC;
IF @price IS NULL
BEGIN
PRINT 'Цена компании не указана' + CHAR(10);
END;
ELSE
BEGIN
PRINT 'Цена компании: ' + CAST(@price AS NVARCHAR(10)) + CHAR(10);
END;
END;
ELSE
BEGIN
PRINT 'Цена компании в срезе цен: ' + CAST(@price AS NVARCHAR(10)) + CHAR(10);
END;
END;
DECLARE @priceListPrices NVARCHAR(MAX) = N'Цены поставщиков:' + CHAR(10) + CHAR(13);
SELECT
@priceListPrices
= @priceListPrices + COALESCE([priceList].[StoreName], [order].[Number], [supplier].[Name], 'Прайс-лист') + N': ' + CAST([supplierPrice].[Price] AS NVARCHAR(10)) + CHAR(10)
FROM
[dbo].[LC_ContractorsArticlesPrices] [supplierPrice]
LEFT JOIN [dbo].[OrderToSupplier] [order]
ON [supplierPrice].[ArticlesPriceTypesID] = [order].[OrderToSupplierID]
LEFT JOIN [dbo].[SiteVirtualStorePriceLists] [priceList]
ON [supplierPrice].[ProductSearchArticle] = [priceList].[ProductSearchArticle]
AND [supplierPrice].[ProductBrand] = [priceList].[ProductBrandAlias]
AND [supplierPrice].[ArticlesPriceTypesID] = [priceList].[StoreUid]
AND [supplierPrice].[Price] = [priceList].[Price]
LEFT JOIN [dbo].[Contractors] [supplier]
ON [priceList].[SupplierId] = [supplier].[ContractorID]
WHERE
(
@productId IS NOT NULL
AND [supplierPrice].[ArtID] = @productId
OR @productId IS NULL
AND [supplierPrice].[ProductSearchArticle] = @vendocrPurifiedCode
AND [supplierPrice].[ProductBrand] = @vendorName
AND [supplierPrice].[ArtID] IS NULL
);
PRINT @priceListPrices;
FETCH NEXT FROM [customerTreatiesCursor]
INTO
@customerId
, @customerContractId
, @customerContractPriceTypeId
, @customerContractBasePriceTypeId
, @pksd
, @restGroupId;
END;
CLOSE [customerTreatiesCursor];
DEALLOCATE [customerTreatiesCursor];
Проверка собственных остатков
В параметрах запроса указать (заменить):
{Артикул} - очищенный артикул для поиска
{Бренд} - бренд
SET NOCOUNT ON;
DECLARE @VendorCode NVARCHAR(200) = N'{Артикул}';
DECLARE @VendorName NVARCHAR(100) = N'{Бренд}';
DECLARE @ProductId UNIQUEIDENTIFIER = NULL;
DECLARE @ProductDescriptionId UNIQUEIDENTIFIER = NULL;
IF @ProductId IS NULL
BEGIN
SELECT
@ProductId = [product].[ArtID]
FROM
[dbo].[Articles] [product]
WHERE
[product].[SearchArticle] = @VendorCode
AND [product].[BrandName] = @VendorName;
IF @@ROWCOUNT > 1
BEGIN
PRINT 'Найдено более одного товара с указанными артикулом и брендом. Пожалуйста, укажите идентификатор товара. Выбранный идентификатор товара: ' + CAST(@ProductId AS NVARCHAR(50));
END;
END;
IF @ProductId IS NULL
BEGIN
PRINT 'Не найден товар с указанным артикулом и брендом.';
RETURN;
END;
DECLARE @productMovement TABLE
(
[MovementType] NVARCHAR(50)
, [StockId] UNIQUEIDENTIFIER
, [StockName] NVARCHAR(250)
, [StockType] NVARCHAR(20)
, [RegistratorId] UNIQUEIDENTIFIER
, [Quantity] DECIMAL(15, 3)
, [Date] DATETIME2(7)
);
WITH [productStockMovement]
AS (SELECT
[productOnStcok].[MovementType]
, [productOnStcok].[RegistratorId]
, [productOnStcok].[StockId]
, SUM([productOnStcok].[Quantity]) AS [Quantity]
, MAX([productOnStcok].[Period]) AS [Date]
FROM
(
SELECT
'Остатки' AS [MovementType]
, [productOnStcok].[Registrator] AS [RegistratorId]
, [productOnStcok].[StoreID] AS [StockId]
, [productOnStcok].[Quantity]
, [productOnStcok].[Period]
FROM
[dbo].[ArticlesInStores] [productOnStcok]
WHERE
@ProductId = [productOnStcok].[ArtID]
AND
(
@ProductDescriptionId IS NULL
AND [productOnStcok].[ArticleDescriptionID] IS NULL
OR @ProductDescriptionId = [productOnStcok].[ArticleDescriptionID]
)
UNION ALL
SELECT
'Перемещение' AS [MovementType]
, [productTransfer].[Registrator] AS [RegistratorId]
, [productTransfer].[StoreID] AS [StockId]
, -[productTransfer].[Quantity]
, [productTransfer].[Period]
FROM
[dbo].[ToTransferArticlesFromStores] [productTransfer]
WHERE
@ProductId = [productTransfer].[ArtID]
AND
(
@ProductDescriptionId IS NULL
AND [productTransfer].[ArticleDescriptionID] IS NULL
OR @ProductDescriptionId = [productTransfer].[ArticleDescriptionID]
)
UNION ALL
SELECT
'Резерв' AS [MovementType]
, [productReserve].[Registrator] AS [RegistratorId]
, [productReserve].[StoreID] AS [StockId]
, -[productReserve].[Quantity]
, [productReserve].[Period]
FROM
[dbo].[ReservedArticlesInStores] [productReserve]
WHERE
@ProductId = [productReserve].[ArtID]
AND
(
@ProductDescriptionId IS NULL
AND [productReserve].[ArticleDescriptionID] IS NULL
OR @ProductDescriptionId = [productReserve].[ArticleDescriptionID]
)
UNION ALL
SELECT
'Остатки' AS [MovementType]
, [productRetailStock].[Registrator] AS [RegistratorId]
, [productRetailStock].[StoreID] AS [StockId]
, [productRetailStock].[Quantity]
, [productRetailStock].[Period]
FROM
[dbo].[ArticlesInRetails] [productRetailStock]
WHERE
@ProductId = [productRetailStock].[ArtID]
AND
(
@ProductDescriptionId IS NULL
AND [productRetailStock].[ArticleDescriptionID] IS NULL
OR @ProductDescriptionId = [productRetailStock].[ArticleDescriptionID]
)
) [productOnStcok]
GROUP BY
[productOnStcok].[MovementType]
, [productOnStcok].[StockId]
, [productOnStcok].[RegistratorId])
INSERT INTO
@productMovement
(
[StockId]
, [StockName]
, [StockType]
, [Date]
, [MovementType]
, [RegistratorId]
, [Quantity]
)
SELECT
[stock].[StoreID]
, [stock].[Name]
, [stock].[StoreType]
, [productStockMovement].[Date]
, [productStockMovement].[MovementType]
, [productStockMovement].[RegistratorId]
, [productStockMovement].[Quantity]
FROM
[productStockMovement]
LEFT JOIN [dbo].[Stores] [stock]
ON [productStockMovement].[StockId] = [stock].[StoreID];
DECLARE @StockId UNIQUEIDENTIFIER;
DECLARE [StockCursor] CURSOR FOR
SELECT
[t].[StockId]
FROM
@productMovement [t]
GROUP BY
[t].[StockId];
OPEN [StockCursor];
FETCH NEXT FROM [StockCursor]
INTO
@StockId;
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT
[t].[StockName] AS [Склад]
, [t].[StockType] AS [ТипСклада]
, [t].[MovementType] AS [ТипДвижения]
, [t].[Date] AS [ДатаДвижения]
, [t].[RegistratorId] AS [Регистратор]
, [t].[Quantity] AS [Количество]
, SUM([t].[Quantity]) OVER (ORDER BY
[t].[StockName]
, [t].[Date]
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS [Итог]
FROM
@productMovement [t]
WHERE
@StockId = [t].[StockId]
ORDER BY
[t].[Date];
SELECT
[t].[StockName] AS [Склад]
, [t].[StockType] AS [ТипСклада]
, [t].[MovementType] AS [ТипДвижения]
, SUM([t].[Quantity]) AS [Количество]
FROM
@productMovement [t]
WHERE
@StockId = [t].[StockId]
GROUP BY
[t].[StockName]
, [t].[StockType]
, [t].[MovementType];
SELECT
[productTotal].[StockName] AS [Склад]
, [productTotal].[StockType] AS [ТипСклада]
, [productTotal].[Quantity] AS [ВычесленноеКоличество]
, [productStockTotalTrigger].[Quantity] AS [КоличествоВСрезе]
, CASE
WHEN [productTotal].[Quantity] <> [productStockTotalTrigger].[Quantity] THEN
'Да'
ELSE
'Нет'
END AS [Ошибка]
FROM
(
SELECT
[t].[StockId]
, [t].[StockName]
, [t].[StockType]
, SUM([t].[Quantity]) AS [Quantity]
FROM
@productMovement [t]
WHERE
@StockId = [t].[StockId]
GROUP BY
[t].[StockId]
, [t].[StockName]
, [t].[StockType]
) [productTotal]
LEFT JOIN [dbo].[SiteRests2] [productStockTotalTrigger]
ON [productTotal].[StockId] = [productStockTotalTrigger].[RepositoryId]
AND @ProductId = [productStockTotalTrigger].[ProductId]
AND
(
@ProductDescriptionId IS NULL
AND [productStockTotalTrigger].[ProductDescriptionId] IS NULL
OR @ProductDescriptionId = [productStockTotalTrigger].[ProductDescriptionId]
);
FETCH NEXT FROM [StockCursor]
INTO
@StockId;
END;
CLOSE [StockCursor];
DEALLOCATE [StockCursor];
SELECT
[productTotalTrigger].[QuantityFromStore] AS [КоличествоВСрезеБезГруппДоступности]
, [productTotalTrigger].[IsFromStore] AS [ЕстьВНаличииВСрезеБезГруппДоступности]
, CASE
WHEN [productTotalTrigger].[IsFromStore] = 0
AND [productTotalTrigger].[QuantityFromStore] > 0
OR [productTotalTrigger].[IsFromStore] = 1
AND [productTotalTrigger].[QuantityFromStore] = 0 THEN
'Да'
ELSE
'Нет'
END AS [Ошибка]
FROM
[dbo].[SiteRestsSummary2] [productTotalTrigger]
WHERE
@ProductId = [productTotalTrigger].[ProductId]
AND
(
@ProductDescriptionId IS NULL
AND [productTotalTrigger].[ProductDescriptionId] IS NULL
OR @ProductDescriptionId = [productTotalTrigger].[ProductDescriptionId]
);
SELECT
[productTotalTrigger].[RestGroupId] [ГруппаДоступности]
, [productTotalTrigger].[QuantityFromStore] AS [КоличествоВСрезеCГруппамиДоступности]
, [productTotalTrigger].[IsFromStore] AS [ЕстьВНаличииВСрезеСГруппамиДоступности]
, CASE
WHEN [productTotalTrigger].[IsFromStore] = 0
AND [productTotalTrigger].[QuantityFromStore] > 0
OR [productTotalTrigger].[IsFromStore] = 1
AND [productTotalTrigger].[QuantityFromStore] = 0 THEN
'Да'
ELSE
'Нет'
END AS [Ошибка]
FROM
[dbo].[SiteRestGroupRestsSummary2] [productTotalTrigger]
WHERE
@ProductId = [productTotalTrigger].[ProductId]
AND
(
@ProductDescriptionId IS NULL
AND [productTotalTrigger].[ProductDescriptionId] IS NULL
OR @ProductDescriptionId = [productTotalTrigger].[ProductDescriptionId]
);
-- раскомментировать и запустить для перерасчета остатков
--EXEC [dbo].[RecalculateFromRetailRests];
--GO
--EXEC [dbo].[RecalculateFromStoreRests];
--GO
--EXEC [dbo].[RecalculateRestGroupSummary];
Проверка корректности пересчета среза цен
Если используется механизм подтяжки цен предложений поставщиков до собственных цен
SELECT
[rs].[Id]
, [rs].[ProductSearchArticle]
, [rs].[ProductBrand]
, [rs].[ProductId]
, [rs].[ProductDescriptionId]
, [rs].[Quantity]
, [rs].[SortOrder]
, [rs].[QuantityFromStore]
, [rs].[QuantityInTransit]
, [rs].[QuantityFromPrice]
, [rs].[IsFromStore]
, [rs].[IsInTransit]
, [rs].[IsFromPrice]
, [rs].[MinQuantity]
, [rs].[MaxQuantity]
FROM
[dbo].[SiteRestsSummary2] [rs]
WHERE
[rs].[QuantityFromStore] > 0
AND [rs].[IsFromStore] = 0
OR [rs].[QuantityFromStore] = 0
AND [rs].[IsFromStore] = 1
OR [rs].[QuantityFromPrice] > 0
AND [rs].[IsFromPrice] = 0
OR [rs].[QuantityFromPrice] = 0
AND [rs].[IsFromPrice] = 1
OR [rs].[QuantityInTransit] > 0
AND [rs].[IsInTransit] = 0
OR [rs].[QuantityInTransit] = 0
AND [rs].[IsInTransit] = 1;
SELECT
*
FROM
[dbo].[SiteRestGroupRestsSummary2] [rs]
WHERE
[rs].[QuantityFromStore] > 0
AND [rs].[IsFromStore] = 0
OR [rs].[QuantityFromStore] = 0
AND [rs].[IsFromStore] = 1
OR [rs].[QuantityFromPrice] > 0
AND [rs].[IsFromPrice] = 0
OR [rs].[QuantityFromPrice] = 0
AND [rs].[IsFromPrice] = 1
OR [rs].[QuantityInTransit] > 0
AND [rs].[IsInTransit] = 0
OR [rs].[QuantityInTransit] = 0
AND [rs].[IsInTransit] = 1;
При наличии ошибок в срезе необходимо выполнить пересчет остатков
EXEC [dbo].[RecalculateRestGroupSummary];
GO
Очистка остатков и отключение триггеров (перед полным обменом)
Позволяет очистить остатки и отключить триггеры (для ускорения полного обмена)
-- Выполнить на базе перед полным обменом ВСЕМИ остатками
-- очистка срезов и отключение индексов
TRUNCATE TABLE [dbo].[SiteRestGroupRests2];
ALTER INDEX ALL ON [SiteRestGroupRests2] DISABLE;
GO
TRUNCATE TABLE [dbo].[SiteRestGroupRestsSummary2];
ALTER INDEX ALL ON [SiteRestGroupRestsSummary2] DISABLE;
GO
TRUNCATE TABLE [dbo].[SiteRests2];
ALTER INDEX ALL ON [SiteRests2] DISABLE;
GO
TRUNCATE TABLE [dbo].[SiteRestsSummary2];
ALTER INDEX ALL ON [SiteRestsSummary2] DISABLE;
GO
-- очистка ВС
TRUNCATE TABLE [dbo].[SiteVirtualStorePriceLists]; -- закомментируйте эту строку, если не требуется полный обмен ВС
DISABLE TRIGGER ALL ON [SiteVirtualStorePriceLists]; -- закомментируйте эту строку, если не требуется полный обмен ВС
GO
-- очитска собственных остатков и отключение триггеров
TRUNCATE TABLE [dbo].[OrderingBuyers];
DISABLE TRIGGER ALL ON [OrderingBuyers];
GO
TRUNCATE TABLE [dbo].[OrdersToSuppliers];
DISABLE TRIGGER ALL ON [OrdersToSuppliers];
GO
TRUNCATE TABLE [dbo].[ArticlesInRetails];
DISABLE TRIGGER ALL ON [ArticlesInRetails];
GO
TRUNCATE TABLE [dbo].[ArticlesInStores];
DISABLE TRIGGER ALL ON [ArticlesInStores];
GO
TRUNCATE TABLE [dbo].[ToTransferArticlesFromStores];
DISABLE TRIGGER ALL ON [ToTransferArticlesFromStores];
GO
TRUNCATE TABLE [dbo].[ReservedArticlesInStores];
DISABLE TRIGGER ALL ON [ReservedArticlesInStores];
Включение триггеров и пересчет остатков (после полного обмена)
После полного обмена, если перед этим выключали триггеры
-- Выполнить на базе после полного обмена ВСЕМИ остатками
-- перерерасчет срезов
ALTER INDEX [PK_SiteRestGroupRests2] ON [SiteRestGroupRests2] REBUILD;
GO
ALTER INDEX [PK_SiteRestGroupRestsSummary2]
ON [SiteRestGroupRestsSummary2]
REBUILD;
GO
ALTER INDEX [PK_SiteRests2] ON [dbo].[SiteRests2] REBUILD;
GO
ALTER INDEX [PK_SiteRestsSummary2] ON [dbo].[SiteRestsSummary2] REBUILD;
GO
EXEC [dbo].[RecalculateFromPriceRests];
GO
EXEC [dbo].[RecalculateFromPricePrices];
GO
EXEC [dbo].[RecalculateFromRetailRests];
GO
EXEC [dbo].[RecalculateFromStoreRests];
GO
EXEC [dbo].[RecalculateInTransitRests];
GO
EXEC [dbo].[RecalculateInTransitPrices];
GO
EXEC [dbo].[RecalculateRestGroupSummary];
GO
-- включение триггеров
ENABLE TRIGGER ALL ON [OrderingBuyers];
GO
ENABLE TRIGGER ALL ON [OrdersToSuppliers];
GO
ENABLE TRIGGER ALL ON [ArticlesInRetails];
GO
ENABLE TRIGGER ALL ON [ArticlesInStores];
GO
ENABLE TRIGGER ALL ON [ToTransferArticlesFromStores];
GO
ENABLE TRIGGER ALL ON [ReservedArticlesInStores];
GO
ENABLE TRIGGER ALL ON [SiteVirtualStorePriceLists];
GO
-- включение индексов
ALTER INDEX ALL ON [SiteRestGroupRests2] REBUILD;
GO
ALTER INDEX ALL ON [SiteRestGroupRestsSummary2] REBUILD;
GO
ALTER INDEX ALL ON [SiteRests2] REBUILD;
GO
ALTER INDEX ALL ON [SiteRestsSummary2] REBUILD;
GO
ALTER INDEX ALL ON [SiteVirtualStorePriceLists] REBUILD;
GO
Last updated