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?
Problem z OS, dorobiana funkcja
Moderator: mikey
Re: Problem z OS, dorobiana funkcja
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.
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.
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.
Re: Problem z OS, dorobiana funkcja
Usunąłem substringa - tak analizując nie jest mi do niczego w sumie potrzebny
Re: Problem z OS, dorobiana funkcja
Jakby ktoś był zainteresowany to umieściłem na blogu metodę sklejania tekstu z pominięciem kursora, tak żeby mniej obciążało bazę 