Публикация

Нумерация счета на стороне MS SQL

Здравствуйте!

Сегодня, в продолжение темы http://community.terrasoft.ua/forum/topic/3285, хочу все собранную информацию сохранить в одном удобочитаемом формате. Особое "Спасибо" Осауленко Александру!

И так, мы собрались перенести нумерацию счетов на сторону базы данных, но при этом использовать системные настройки. Беру последнюю сборку TS CRM 3.3.0

1. Открываем ds_InvoiceScript и комментируем 1 строчку :

function ds_InvoiceOnDatasetBeforePost(Dataset, DoPost) {
InvoiceScript.IsAppend  = (Dataset.State == dstInsert);
// SetItemSystemNumber('Invoice', Dataset,  'InvoiceNumber');
...

2. Открываем ds_wnd_InvoiceEditScript и опять комментируем 1 строчку :

function dlDataOnDatasetBeforePost(Dataset, DoPost) {
        //SetItemSystemNumber('Invoice', Dataset, 'InvoiceNumber');
...

3. В MS SQL создаем триггер:

CREATE TRIGGER tr_tbl_Invoice_IIN
ON [tbl_Invoice]
AFTER INSERT AS

BEGIN
IF (SYSTEM_USER = 'TS_REPLICATION') RETURN

DECLARE @ID uniqueidentifier, @Number nvarchar(250)
SET NOCOUNT ON;

DECLARE c_Invoices CURSOR
FOR SELECT [ID], [InvoiceNumber]
FROM inserted

OPEN c_Invoices
WHILE 1 = 1
BEGIN FETCH c_Invoices
INTO @ID, @Number

IF @@fetch_status = -1 BREAK
IF @@fetch_status = -2 CONTINUE

IF (@Number IS NULL)
begin
 UPDATE [tbl_SystemSetting]
 SET @Number = (SELECT REPLACE([StringValue], '%1', [IntegerValue] + 1)
 FROM [tbl_SystemSetting] WHERE [Code] = 'InvoiceMask'), [IntegerValue] = [IntegerValue] + 1
 WHERE [Code] = 'InvoiceNumber'

 UPDATE [tbl_Invoice]
 SET [InvoiceNumber] = @Number
 WHERE [ID] = @ID
 end

END
CLOSE c_Invoices
DEALLOCATE c_Invoices
END
GO

PS: вопрос к разработчикам: а зачем дважды присваивать номер (п. 1 и 2)?

Нравится

Поделиться

9 комментариев

Помоему в dlDataOnDatasetBeforePost лишнее присвоение

"Underscore a.k.a. _" написал:Помоему в dlDataOnDatasetBeforePost лишнее присвоение

Вот я и спрашиваю зачем его там прописали :)

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Там, наверное проверка стоит в SetItemSystemNumber на заполненность поля, поэтому работает нормально и никто эту строчку не замечал.
Вообще как в анекдоте получается. "А если и второй билетик потеряю, то у меня проездной есть" :)

"Underscore a.k.a. _" написал:"А если и второй билетик потеряю, то у меня проездной есть" :)

+100 :)

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Да. В wnd_InvoiceEditScript обработчик OnBeforePost лишний. В 331 такого нет, а вот в 330 осталось. Теперь и там нет

"Агеев Алексей Юрьевич" написал:В 331 такого нет, а вот в 330 осталось. Теперь и там нет

Если мне не изменяет память, то я его видел и в 3.2.0, и в 3.2.1

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Есть у меня подозрения что он и в 3.0 был :)

Поправил и там. Но те сборки давно уже не пересобираются

Посмотрел в 3.1.0 и в 3.1.1 - там все гуд :)

--
www.it-sfera.com.ua
Terrasoft Solution Partner

Показать все комментарии