Strona 1 z 1

Problem z OS, dorobiana funkcja

: 25 paź 2010, 13:29
autor: Palbow
Zrobiłem funkcje zwracającą ciąg znaków wrzucany do CR jako tabelka płatności - ale tylko w formie procentowej.

Oto kod funkcji poniżej:
Create FUNCTION [CDN].[TabelkaPlatnosci] (@GidTyp INT, @GidNumer int)

RETURNS Varchar(200)
AS
BEGIN

DECLARE
@Platnosci Varchar(200),
@razem decimal,
@sumplat decimal (15,6),
@sumproc decimal
set @razem=(select ZaV_Netto+ZaV_Vat from CDN.ZamVAT where ZaV_GIDTYP=@GidTyp and ZaV_GidNumer=@GidNumer);
set @sumproc=(select isnull(sum(ZaP_Procent),0)
from CDN.ZamPlat
join CDN.ZamVAT on ZaP_GIDTyp=ZaV_GIDTYP and ZaP_GIDNumer=ZaV_GidNumer
where ZaP_GIDTyp=@GidTyp AND ZaP_GIDNumer=@GidNumer and ZaP_GIDLP>0 and ZaP_Kwota=0);
set @sumplat=(select isnull(sum(Zap_Kwota),0)*100/@razem
from CDN.ZamPlat
join CDN.ZamVAT on ZaP_GIDTyp=ZaV_GIDTYP and ZaP_GIDNumer=ZaV_GidNumer
where ZaP_GIDTyp=@GidTyp AND ZaP_GIDNumer=@GidNumer and ZaP_GIDLP>0 and ZaP_Kwota<>0)

DECLARE TabelkaPL
CURSOR FOR
select LTRIM(str(case when ZaP_GIDLP<0 then 100 - @sumplat-@sumproc else (case when ZaP_Kwota<>0 then Zap_Kwota*100/@razem else ZaP_Procent end) end,15,2))+' % '
+ Rtrim(ZaP_FormaNazwa)+ case when Zap_TerminDni=0 then '' else +' - ' + Ltrim(str(ZaP_TerminDni,10,0)) +' dni' end
from CDN.ZamPlat
where ZaP_GIDTyp=@GidTyp AND ZaP_GIDNumer=@GidNumer
DECLARE @PL varchar(200), @PLY varchar(200)
SET @PLY = ''
OPEN TabelkaPL
FETCH next FROM TabelkaPL
INTO @PL
WHILE @@FETCH_STATUS = 0
BEGIN
SET @PLY = @PLY + @PL + char(13)+char(10)
FETCH next FROM TabelkaPL
INTO @PL
END
CLOSE TabelkaPL
DEALLOCATE TabelkaPL
SELECT @Platnosci=SUBSTRING(@PLY, 1, LEN(@PLY) - 1)

RETURN @Platnosci

END

Podczas próby zatwierdzania na dokumencie (definicji CR - dokument OS) mam komunikat
Error in compiling SQL Expression
Database Connector Error: '42000:[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid length parameter passed to the SUBSTRING function. [Database Vendor Code: 536]'.

Zadziwiające jest tylko to, że sam wydruk działa - tylko na moim stanowisku 'głupieje' CR.
Ma ktoś jakieś sugestie lub miał podobne problemy?

Re: Problem z OS, dorobiana funkcja

: 25 paź 2010, 14:00
autor: Smallsoso
Błąd masz wtedy, gdy zmienna @PLY ma zerową długość. Widać dla twoich dokumentów funkcja nie wchodzi w pętlę kursora i zmienna @PLY pozostaje pusta.
musiałbyś zrobić warunek sprawdzania długości przed próbą zastosowania SUBSTRING.

Re: Problem z OS, dorobiana funkcja

: 25 paź 2010, 14:42
autor: Palbow
Usunąłem substringa - tak analizując nie jest mi do niczego w sumie potrzebny

Re: Problem z OS, dorobiana funkcja

: 25 paź 2010, 15:14
autor: elmiq
Jakby ktoś był zainteresowany to umieściłem na blogu metodę sklejania tekstu z pominięciem kursora, tak żeby mniej obciążało bazę :)