пользователям программных продуктов Scala 5.1, iScala 2.1, iScala 2.2, iScala 2.3, iScala 3.0, iScala 3.1, iScala 3.2, iScala 3.3 (и так далее)

Практическое задание: Как вычислить вступительное сальдо по покупателю

Практическое задание: Как вычислить вступительное сальдо по покупателю

Откройте файл «06_create_usr_RS_DetailedCustomerTurnoverByAccountNumber.sql» с помощью Microsoft SQL Server Management Studio Express. Найдите текст:

	-- счета-фактуры - вступительное сальдо
		select
		SL03001 as CustomerCode,
		SL03002 as InvoiceNumber,
		SL03005 as InvoiceDate,
		SL03013 as InvoiceAmount,
		SL03015 as CurrencyCode,
		rtrim(SUBSTRING(SL03017,1,6)) as AccountNo
		from SL030100 (NOLOCK)
		where (SL03005 < @d1) and left(SL03017,len(rtrim(@AccMask)))=rtrim(@AccMask)
		union all
	-- платежи - вступительное сальдо
		select
		SL21001 as CustomerCode,
		SL21002 as InvoiceNumber,
		SL03005 as InvoiceDate,
		[InvoiceAmount]=-sum(SL21007),
		SL21017 as [CurrencyCode],
		rtrim(SUBSTRING(SL03017,1,6)) as AccountNo
		from SL210100 (NOLOCK)
			inner join SL030100 (NOLOCK)
			on (SL03001=SL21001) and (SL03002=SL21002)
		where SL21006 <@d1 and left(SL03017,len(rtrim(@AccMask)))=rtrim(@AccMask)
		group by SL21001, SL21002, SL03005, rtrim(SUBSTRING(SL03017,1,6)), SL21017

Объясните, почему в верхней части запроса «InvoiceAmount» равно значению поля, а в нижней – сумме значений. Вы можете скопировать эту часть запроса, вставить его в новый пустой запрос и заменить выражение «@d1 and left(SL03017,len(rtrim(@AccMask)))=rtrim(@AccMask)» на '20100101'. Модифицируйте весь запрос или отдельные его части на Ваше усмотрение, чтобы получить ответ на вопрос. Можно также посмотреть структуру таблиц SL03 и SL21 в отчёте «ScalaFields», расположенном в папке «IT» на локальном сервере отчётности.

Правильный ответ Вы можете получить, если модифицируете нижнюю часть запроса следующим образом:

select
SL21001 as CustomerCode,
SL21002 as InvoiceNumber,
SL21003 as LineNumber,
SL21004 as TransactionNumber,
SL21005 as Transaction
Date,
[InvoiceAmount]=-SL21007,
SL21017 as [CurrencyCode],
rtrim(SUBSTRING(SL03017,1,6)) as AccountNo
from SL210100 (NOLOCK)
  inner join SL030100 (NOLOCK)
    on (SL03001=SL21001) and (SL03002=SL21002)
where SL21006 <'20100101'

В полученном результате можно обнаружить строки, подобные приведённым ниже:

3000000002	ПП7654	01	400004	2009-02-10 00:00:00.000	-2360.00000000		0	62.2
3000000002	ПП7654	02	400007	2009-02-28 00:00:00.000	1180.00000000		0	62.2
3000000002	ПП7654	03	400009	2009-04-20 00:00:00.000	588.82000000		0	62.2

Первая – скорее всего авансовый платёж. Две другие – зачёт аванса в оплату счёта-фактуры. Для того чтобы определить, какого счёта-фактуры, необходимо поискать другие строки с номерами проводок № 400007 и 400009:

3000000002	200902	01	400007	2009-02-28 00:00:00.000	-1180.00000000		0	62.1
3000000002	200904	01	400009	2009-04-20 00:00:00.000	-590.00000000		0	62.1
3000000002	ПП24	02	400009	2009-04-20 00:00:00.000	1180.00000000		0	62.2
3000000002	200903	02	400009	2009-04-20 00:00:00.000	-1178.82000000		0	62.1

Очень часто подобные проводки «разнесения» для покупателей, когда им высылают акты сверки, непонятны. Поэтому многие клиенты Scala пытаются фильтровать их в своих отчётах. Здесь мы вплотную подошли к следующей теме.

Содержание: