powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите упростить и ускорить данный запрос
10 сообщений из 10, страница 1 из 1
Помогите упростить и ускорить данный запрос
    #39650777
Jumabaev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данная хранимая процедура для вычисления валовой прибыли за период.
Берутся данные из таблицы "Продажи" и берем последнюю цену покупки в таблице "Покупки"
Помогите пожалуйста упростить и ускорить данный код??

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
USE [ESEP]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('dbo.esep_ReportSalesMorjaByDate', 'P' ) IS NOT NULL 
   DROP PROCEDURE dbo.esep_ReportSalesMorjaByDate;
GO

CREATE PROCEDURE [dbo].[esep_ReportSalesMorjaByDate]
	@DateStart		datetime,
	@DateEnd		datetime

AS
BEGIN
	SET NOCOUNT ON;

	SELECT	ps.DocumentNum, MAX(ps.DateTime) as 'DateTime', SUM(ps.Quantity * ps.Price) as 'SaleSum',
			SUM(ps.Quantity *  (SELECT TOP 1 pc.Price
								FROM tbl_ProductsComing pc
								WHERE pc.ProductsID = ps.ProductsID and pc.DateTime <= ps.DateTime
								ORDER BY pc.DateTime DESC)) as 'ComeSum',
			c.Name as 'CustomerName', u.Name as 'UserName'
	FROM	tbl_ProductsSelling ps	INNER JOIN tbl_Customers c ON c.ID = ps.CustomersID
									INNER JOIN tbl_Users u ON u.ID = ps.UsersID
	WHERE	ps.DateTime >= @DateStart and ps.DateTime <= @DateEnd
	GROUP BY ps.DocumentNum, c.Name, u.Name

END
GO
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39650821
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что, с/с товара в строках документа ты не хранишь....
Партионного учета вроде нет
ФИФО?
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39650824
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE PROCEDURE [dbo].[esep_ReportSalesMorjaByDate]
	@DateStart		datetime,
	@DateEnd		datetime

AS
BEGIN
	SET NOCOUNT ON;

with ps as ( select * from tbl_ProductsSelling where ps.DateTime >= @DateStart and ps.DateTime <= @DateEnd )
   , pc as ( select * from tbl_ProductsComing )
   , x as (	SELECT ps.DocumentNum, MAX(ps.DateTime) as 'DateTime', SUM(ps.Quantity * ps.Price) as 'SaleSum',
			       SUM(ps.Quantity * pc.Price) as 'ComeSum'
                 , ps.CustomersID, ps.UsersID
 	          from ps	
              cross apply ( SELECT TOP 1 Price FROM  pc WHERE pc.ProductsID = ps.ProductsID and pc.DateTime <= ps.DateTime ORDER BY pc.DateTime DESC ) as pc
              GROUP BY ps.DocumentNum, ps.CustomersID, ps.UsersID
          )
    select *
         , c.Name as 'CustomerName', u.Name as 'UserName'
       from x left outer JOIN tbl_Customers c ON c.ID = ps.CustomersID
			  left outer JOIN tbl_Users u ON u.ID = ps.UsersID

END
GO
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39650845
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222CREATE PROCEDURE [dbo].[esep_ReportSalesMorjaByDate]
@DateStart datetime,
@DateEnd datetime

AS
BEGIN
SET NOCOUNT ON;

with ps as ( select * from tbl_ProductsSelling where ps.DateTime >= between @DateStart and ps.DateTime <= @DateEnd )
, pc as ( select * from tbl_ProductsComing )
, x as ( SELECT ps.DocumentNum, MAX(ps.DateTime) as 'DateTime', SUM(ps.Quantity * ps.Price) as 'SaleSum',
SUM(ps.Quantity * pc.Price) as 'ComeSum'
, ps.CustomersID, ps.UsersID
from ps
cross apply ( SELECT TOP 1 Price FROM pc WHERE pc.ProductsID = ps.ProductsID and pc.DateTime <= ps.DateTime ORDER BY pc.DateTime DESC ) as pc
GROUP BY ps.DocumentNum, ps.CustomersID, ps.UsersID
)
select *
, c.Name as 'CustomerName', u.Name as 'UserName'
from x left outer JOIN tbl_Customers c ON c.ID = ps.CustomersID
left outer JOIN tbl_Users u ON u.ID = ps.UsersID

END
GO



Для меньшего количества букав коде.


Немного философии - что двигало создателя процедуры назвать ее " ..ReportSalesMorjaByDate ",
ведь по логике вещей надо было либо ReportSalesMarginByDate либо OtchetMarjaPoProdajamPoDate
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39651376
Jumabaev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Всем!

Morja - Margin просто не знал тогда.
А вообще оказалось, правильно "Валовая прибыль"
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39651408
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jumabaev1Данная хранимая процедура для вычисления валовой прибыли за период.
Берутся данные из таблицы "Продажи" и берем последнюю цену покупки в таблице "Покупки"
Помогите пожалуйста упростить и ускорить данный код??

Помогу. Совершенно бесплатным советом. Идете к главному бухгалтеру и выясняете, что закупки идут с НДС, а продажи у Вас розничные например без НДС, что для маржи нужно себестоимость и розничную сумму считать одинаково без НДС или одинаково с НДС, к примеру.

Понимаете? Есть у Вас tbl_ProductsSelling.Price, а есть tbl_ProductsComing.Price, а Вы хотя бы разок сравнили, что за ценники там? Ну и как говорится - что будет, если из чеков нужно протянуть размер скидки (DiscountSum), посчитать сумму продаж без учета скидки или наоборот с учетом скидки и показать реальную прибыль. Потому что Price из tbl_ProductsComing может быть закупочная 10 рублей, Price из tbl_ProductsSelling может быть 100 рублей, реально при каждом факте продаж идет скидка 5% по ДК и скидка 85% по распродаже, прибыль по нулям, а смысл продажи товара не в том, чтобы на нем заработать, а чтобы его по себестоимости вручить клиенту, купить лояльность клиента и к товару с приличной накруткой продать комплектующих (в салонах сотовой связи к примеру к сотовому за маленькую цену навязывают за приличные деньги всяких чехольчиков и внешних аккумуляторов, которые в Китае берутся за копейки)...
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39651409
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jumabaev1Данная хранимая процедура для вычисления валовой прибыли за период.

Перефразирую - перед тем, как подтягивать скорость выполнения, Вы хотя бы раз проводили подробную сверку с конечными пользователями этих отчетов, что они хотят увидеть в графе "валовая прибыль" и что Вы им там показываете?
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39656125
Jumabaev1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tbl_ProductsComing.Price - это закупочная цена. По сколько поставили товар по столько и оприходовали.
tbl_ProductsSelling.Price - это цена по которой продали в кассе (если была скидка пишем цену со скидкой).
Вычитаем Покупку от Продажи получаем маржу. От маржи вычитаем операционные расход т.е. расходы которые могут составлять себестоимость товара и остаток считаю валовым доходом.
Поправьте пожалуйста если ошибаюсь.
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39656137
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учет партионный?
База бухучета или оперативная? Если бухучет, то какая система налогообложения?
Операционные расходы раскидываешь пропорционально чему?
...
Рейтинг: 0 / 0
Помогите упростить и ускорить данный запрос
    #39656298
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jumabaev1Поправьте пожалуйста если ошибаюсь.
Еще раз - Вы не поняли. Цена с НДС или без НДС? Вы главбуху показывали это обсуждение?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите упростить и ускорить данный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]