Problem z OS, dorobiana funkcja

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

Palbow
Posty: 36
Rejestracja: 06 lip 2010, 13:46
Rola: Administrator CDN XL
Wersja: 10

Problem z OS, dorobiana funkcja

Post 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?

Smallsoso
Posty: 131
Rejestracja: 25 wrz 2008, 13:31
Rola: Inny
Wersja: 9.5

Re: Problem z OS, dorobiana funkcja

Post 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.
Pozdrawiam,
Marcin
---------------------------------------------------------------------------------
Tako rzecze dokumentacja tabel CDN XL 7.1
TwrZasoby TwZ_DataP INTEGER Data przyjęcia towaru na magazyn Potrzebne przy podróżach w czasie.

Palbow
Posty: 36
Rejestracja: 06 lip 2010, 13:46
Rola: Administrator CDN XL
Wersja: 10

Re: Problem z OS, dorobiana funkcja

Post autor: Palbow »

Usunąłem substringa - tak analizując nie jest mi do niczego w sumie potrzebny

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Problem z OS, dorobiana funkcja

Post 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ę :)
Mateusz Świerkosz

http://elmiq.blogspot.com/

ODPOWIEDZ