Apico Soft / АПИКО Софт



Спонсором блога ScalaHelp.RU является компания АПИКО Софт.

Мы предоставляем:
- Качественный ERP консалтинг.
- Внедрение и сопровождение системы.
- Российские формы первичных документов, бухгалтерская и налоговая отчетность.

- Разработка корпоративной отчетности.

Наш телефон 8 (495) 961 98 48
Сайт http://www.apicosoft.ru/

Позвоните нам, мы сделаем все, чтобы помочь Вам.

среда, августа 29, 2007

Учетная строка

Учетная строка включает в себя счет и до девяти учетных измерений. Длина любой из частей не может превышать 12 символов.

Я уже затрагивал эту тему в предыдущем посте, но решил вернуться, ведь разбирать учетную строку на части в запросах приходится часто и довольно быстро надоедает вспоминать ее раскладку.

Можно облегчить себе задачу, если создать в базе набор функций, каждая из которых будет возвращать нужное учетное измерение. В результате вместо substring(GL06001, 13, 6) можно будет писать dbo.Dim1(GL06001). В добавок отчеты, сделанные с использованием таких функций можно будет без проблем переносить на другие инсталляции Scala, где разбивка учетной строки отличается, потребуется только подправить функции.

Можно пойти еще дальше и читать разбивку учетной строки из настроек и сделать функции универсальными. Не советую этого делать, т.к. использоваться они могут довольно часто, а зачем нам лишние запросы? Поправить же функции при необходимости дело пары минут.

Сами функции получаются простыми (создать лучше во всех компанейских базах данных, чтобы при вызове не нужно было указывать имя БД).

Для примера возьмем следующую разбивку учетной строки: Счет - 12, УИ1 - 4, УИ2 - 6, УИ3 - 6, УИ4 - 4, УИ5 - 3, УИ6 - 6, УИ7 - 3, УИ8 - 2, УИ9 - 4. Создаем функции:


CREATE FUNCTION dbo.Account(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(left(@AccountString, 12))
END
GO

CREATE FUNCTION dbo.Dim1(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 13, 4))
END
GO

CREATE FUNCTION dbo.Dim2(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 17, 6))
END
GO

CREATE FUNCTION dbo.Dim3(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 23, 6))
END
GO

CREATE FUNCTION dbo.Dim4(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 29, 4))
END
GO

CREATE FUNCTION dbo.Dim5(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 33, 3))
END
GO

CREATE FUNCTION dbo.Dim6(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 36, 6))
END
GO

CREATE FUNCTION dbo.Dim7(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 42, 3))
END
GO

CREATE FUNCTION dbo.Dim8(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 45, 2))
END
GO

CREATE FUNCTION dbo.Dim9(@AccountString nvarchar(50))
RETURNS nvarchar(12)
AS
BEGIN
RETURN rtrim(substring(@AccountString, 47, 4))
END
GO

-- Проверяем, получилось ли:

select top 100 GL06001 AccStr,
dbo.Account(GL06001) Acc,
dbo.Dim1(GL06001) Dim1,
dbo.Dim2(GL06001) Dim2,
dbo.Dim3(GL06001) Dim3,
dbo.Dim4(GL06001) Dim4,
dbo.Dim5(GL06001) Dim5,
dbo.Dim6(GL06001) Dim6,
dbo.Dim7(GL06001) Dim7,
dbo.Dim8(GL06001) Dim8,
dbo.Dim9(GL06001) Dim9
from GL06CCYY

Комментариев нет:

Отправить комментарий