Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите люди добрые!!!!!! / 5 сообщений из 5, страница 1 из 1
16.10.2002, 17:53:21
    #32058897
Vedma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите люди добрые!!!!!!
Народ, помогите в решании такой проблемки. Я не могу написать сохраненку для подбивки по копейкам.
Типовая бухгалтерская задачка.
Т.е есть таблица, в которой, предположим 2 поля: Money, Komisiya
Money - содержит цифру (округленную до 2 знака), а в Komisiya должна содержаться цифра (округленную до 2 знака)- Х% (т.е какой-то процент от Money), т.е 0,001*Х
проблема в том, что если брать % из общей суммы
round(Money*Х*0.01,2),
то он не сходится с суммой того же % по каждой записи -
sum(Komisiya*X*0.01)
Необходимо раскидать по полю Komisiya по 0,01, что бы было полное схождение.
...
Рейтинг: 0 / 0
16.10.2002, 18:09:42
    #32058910
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите люди добрые!!!!!!
Самый простой способ - округлить все кроме одного, а последнее считать как общая сумма минус сумма оставшихся округлённых.
А вообще эта проблемма гораздо сложнее, чем кажется на первый взгляд. Так что сочувствую.
...
Рейтинг: 0 / 0
16.10.2002, 18:15:21
    #32058918
Vedma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите люди добрые!!!!!!
Оно то так-то...
было бы все классно, если бы эта разница была в 1 коп., а она (зараза), как правило, совсем другая :(((
А бухгалтерия штука тонкая...
Я то и алгоритм придумала, но в сохраненку впихнуть не получается :(((
...
Рейтинг: 0 / 0
16.10.2002, 18:24:38
    #32058921
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите люди добрые!!!!!!
Вот процедура добавления/вычитания заданной суммы из накладной. Ответ в последнем апдейте. Подбивка суммы делается по самой денежной строке. Вы можете усложнить, сделав кол-во апдейтов равным <общее расхождение> / 0.01. Для накладной вроде катит, т.к. по отдельности строки мало кого интересуют.
Хотя с другой стороны может возникнуть вопрос, а почему у вас комиссия по строке неправильно считается!?
Типовая бухгалтерская задачка - пусть её бухгалтер и решает!
Код: plaintext
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.
32.
33.
34.
35.
36.
ALTER PROCEDURE add_cost_to_nakladnaya
	@id int,
	@cost money
AS
	DECLARE @old_total money, @f float, @d money

SET NOCOUNT ON
BEGIN TRANSACTION

	SELECT @old_total = SUM(pdi.subtotal)
	FROM primary_doc_items pdi
	WHERE pdi.primary_doc = @id
	IF @@ERROR <>  0  GOTO error

	SET @f =  1  + (CONVERT(float,@cost) / CONVERT(float,@old_total))

	UPDATE primary_doc_items SET
		price = CONVERT(money,ROUND(CONVERT(float,price) * @f, 2 ))
	WHERE primary_doc_items.primary_doc = @id
	IF @@ERROR <>  0  GOTO error

	SELECT @d = SUM(pdi.subtotal) - @old_total - @cost
	FROM primary_doc_items pdi
	WHERE pdi.primary_doc = @id

	UPDATE primary_doc_items SET
		price = price - ROUND(@d / quantity, 2 )
	WHERE primary_doc = @id
		AND EXISTS(SELECT TOP  1   1  FROM primary_doc_items pdi WHERE pdi.id = primary_doc_items.id ORDER BY pdi.quantity, pdi.price DESC)
	IF @@ERROR <>  0  GOTO error

COMMIT TRANSACTION
GOTO release
error:
ROLLBACK TRANSACTION
release:
GO
...
Рейтинг: 0 / 0
17.10.2002, 11:58:22
    #32059119
Feos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите люди добрые!!!!!!
Мне кажется заработает такой код.
Проще не бывает!

create table #T(ID int, sum1 decimal(10,4), tot_sum decimal(10,4))

insert #T(id, sum1) values(1, 10.21)
insert #T(id, sum1) values(2,20.46 )
insert #T(id, sum1) values(3, 15.23)
insert #T(id, sum1) values(4, 16.49)
insert #T(id, sum1) values(5, 10.21)
insert #T(id, sum1) values(6,20.46 )
insert #T(id, sum1) values(7, 15.23)
insert #T(id, sum1) values(8, 16.49)

update #T set tot_sum = sum1*0.01

select *
from #t

declare @d decimal(10,4)

set @d = 0

update #T set @d=tot_sum + @d-round(@d,2),
tot_sum=round(@d,2)

select *
from #t

drop table #T


Удачи!!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите люди добрые!!!!!! / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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