[API] Drukowanie
Moderator: mikey
-
- Posty: 8
- Rejestracja: 07 maja 2017, 20:54
- Rola: Administrator CDN XL
- Wersja: 2016
[API] Drukowanie
Cześć,
czy da się dla wskazanego dokumentu przy pomocy API lub jakkolwiek z command line wzbudzić drukowanie na konkretną drukarkę lub do pdf?
Potrzebę mam prostą: drukowanie faktury do pdf. Nic więcej.
Z góry dziękuję
czy da się dla wskazanego dokumentu przy pomocy API lub jakkolwiek z command line wzbudzić drukowanie na konkretną drukarkę lub do pdf?
Potrzebę mam prostą: drukowanie faktury do pdf. Nic więcej.
Z góry dziękuję
-
- Posty: 145
- Rejestracja: 24 lut 2013, 12:41
- Rola: Administrator CDN XL
- Lokalizacja: Skarżysko-Kamienna
Re: [API] Drukowanie
Najprościej wykorzystać API:
................
var xlWydruk = new XLWydrukInfo_20163
{
Wersja = WersjaApi,
Zrodlo = source,
Wydruk = wydruk,
Format = format,
FiltrSQL = filtrSql,
NazwaDrukarki = printer,
Urzadzenie = urzadzenie,
};
try
{
printReturn = cdn_api.cdn_api.XLWykonajPodanyWydruk(xlWydruk);
}
............................
................
var xlWydruk = new XLWydrukInfo_20163
{
Wersja = WersjaApi,
Zrodlo = source,
Wydruk = wydruk,
Format = format,
FiltrSQL = filtrSql,
NazwaDrukarki = printer,
Urzadzenie = urzadzenie,
};
try
{
printReturn = cdn_api.cdn_api.XLWykonajPodanyWydruk(xlWydruk);
}
............................
-
- Posty: 8
- Rejestracja: 07 maja 2017, 20:54
- Rola: Administrator CDN XL
- Wersja: 2016
Re: [API] Drukowanie
Dzięki Roman
Przepraszam - nie wspomniałem, że chodzi o Comarch ERP Optima.
Chyba naweł dodałem wątek nie w tym dziale Wybaczcie.
W każdym razie dziś powstało coś takiego:
Moje pytania:
1. W jaki sposób wskazac szablon / wydruk źrodłowy jednoznacznie po ID?
Chodzi o to, że primary key jest composite czyli jest złożony z dwóch kolumn: Wdr_ID oraz Wdr_Standardowy
W tabeli CDN.Wydruki mam dwa szablony o ID=40: jeden to faktura a drugi to lista obecności.
API pobiera nie ten który chciałbym czyli liste obecności.
W jaki sposób podać ID poprawnie?
Jest też parametr WydrukID ale jak go podam to wtedy w SQL nastepuje dopasowanie do kolumn [Wdr_RpWID] i [Wdr_RpFID] ale te kolumny zazwyczaj mają różne wartości, więc niewiele to pomaga.
2. Gdy używam ID wydrukuk (Wdr_ID=605) czyli "Faktura VAT - Wzór standard", to otrzymuję komunikat MessageId = WydrukBrakZaznaczen.
Wiadomo dlaczego? Czy w kodzie jest jakiś błąd?
3. Gdy użyję fakturę VAT bez VAT (ID=1932), to mam pustą fakturę bez danych.
Wiadomo dlaczego? Czy w kodzie jest jakiś błąd?
4. Jeśli użyję Faktura wzór standard z ID = 372 to wyskakuje mi błąd w Message Box:
A może to wszystko powinno inaczej wyglądać?
Z góry dzięki za pomoc.
Przepraszam - nie wspomniałem, że chodzi o Comarch ERP Optima.
Chyba naweł dodałem wątek nie w tym dziale Wybaczcie.
W każdym razie dziś powstało coś takiego:
Kod: Zaznacz cały
AdoSession Sesja = login.CreateSession();
Type type = Type.GetTypeFromProgID("CDN.WydrFormat", true);
dynamic Format = Activator.CreateInstance(type);
SetProperty(Format, "GenRapReportType", 4);
SetProperty(Format, "GenRapNewReportInitObjects", "FakturaSpr");
dynamic ZmiennaDyn = Activator.CreateInstance(Type.GetTypeFromProgID("CDNLib.Dictionary"));
SetProperty(Format, "ZrodloID", 0);
SetProperty(Format, "ID", 40); // ID Wydruku!
// 1932 działa, ale to nie jest lista obecnosci a nie faktura!
SetProperty(Format, "FiltrSQL", "TrN_TRNID = 378215");
SetProperty(Format, "Urzadzenie", 4);
SetProperty(Format, "FormatPlikuDocelowego", 2); //PDF
SetProperty(Format, "PlikDocelowy", "d:\\test.pdf");
SetProperty(Format, "Drukarka", "Microsoft Print to PDF");
InvokeMethod(Format, "Wykonaj", new object[] { ZmiennaDyn });
1. W jaki sposób wskazac szablon / wydruk źrodłowy jednoznacznie po ID?
Chodzi o to, że primary key jest composite czyli jest złożony z dwóch kolumn: Wdr_ID oraz Wdr_Standardowy
W tabeli CDN.Wydruki mam dwa szablony o ID=40: jeden to faktura a drugi to lista obecności.
API pobiera nie ten który chciałbym czyli liste obecności.
W jaki sposób podać ID poprawnie?
Jest też parametr WydrukID ale jak go podam to wtedy w SQL nastepuje dopasowanie do kolumn [Wdr_RpWID] i [Wdr_RpFID] ale te kolumny zazwyczaj mają różne wartości, więc niewiele to pomaga.
2. Gdy używam ID wydrukuk (Wdr_ID=605) czyli "Faktura VAT - Wzór standard", to otrzymuję komunikat MessageId = WydrukBrakZaznaczen.
Wiadomo dlaczego? Czy w kodzie jest jakiś błąd?
3. Gdy użyję fakturę VAT bez VAT (ID=1932), to mam pustą fakturę bez danych.
Wiadomo dlaczego? Czy w kodzie jest jakiś błąd?
4. Jeśli użyję Faktura wzór standard z ID = 372 to wyskakuje mi błąd w Message Box:
Kod: Zaznacz cały
---------------------------
OCEAN GenRap
---------------------------
W aplikacji OCEAN GenRap wystąpił nieoczekiwany błąd:
"UFN data may not be null"
---------------------------
OK
---------------------------
Z góry dzięki za pomoc.
Re: [API] Drukowanie
Cześć,
i udało się rozwiązać jakoś ten problem, coś pomożesz?
i udało się rozwiązać jakoś ten problem, coś pomożesz?
-
- Posty: 8
- Rejestracja: 07 maja 2017, 20:54
- Rola: Administrator CDN XL
- Wersja: 2016
Re: [API] Drukowanie
Cześć
Niestety nie udało się.
Nadal jestem zainteresowany rozwiązaniem.
Niestety nie udało się.
Nadal jestem zainteresowany rozwiązaniem.
Re: [API] Drukowanie
Pole ZrodloID przyjmuje wie wartośco 0 i 1.
Gdzie:
0 - oznacza wydruk standardowy (ten, który z programem jest dostarczany)
1 - oznacza wydruk użytkownika (ten, który sam sobie dodasz)
Pole ID odnosi się do tej wartości: No i aby wydruk ci się wydrukował musisz przekazać jeszcze filtr.
Poniżej przykład funkcji wydruku w JS:
Gdzie:
0 - oznacza wydruk standardowy (ten, który z programem jest dostarczany)
1 - oznacza wydruk użytkownika (ten, który sam sobie dodasz)
Pole ID odnosi się do tej wartości: No i aby wydruk ci się wydrukował musisz przekazać jeszcze filtr.
Poniżej przykład funkcji wydruku w JS:
Kod: Zaznacz cały
function WykonajWydrukFS(Filtr , Drukarka_ , Path )
\{
var ZmienneDyn = new ActiveXObject("CDNLib.Dictionary")
var Format = new ActiveXObject("CDN.WydrFormat")
var ZmiennaDyn = new ActiveXObject("CDN.ZmiennaDyn")
//Jeśli wydruk ma drukować się do "maila" lub do "kopii elektronicznej"
//konieczne jest przekazanie obiektu do pola OptimaObjectTypeInfo
var rDok = ss.CreateObject("CDN.DokumentyHaMag").Item( "" + Filtr )
Format.OptimaObjectTypeInfo = rDok
Format.ZrodloID = 0
Format.ID = 372
Format.FiltrTPS = Filtr
Format.FiltrSQL = Format.FiltrTPS
Format.Sortowanie = ""
Format.Urzadzenie = ??CDN_Urzadzenie
Format.GenRapContextAttribute = "TrNEdycjaFA"
if ( ??CDN_Urzadzenie == 3 ) Format.Drukarka = Drukarka_
var sciezka = Path
while ( sciezka.search( /\\/ ) != -1 || sciezka.search( /\// )!=-1 )
sciezka = sciezka.replace( /\\/ ,"_").replace(/\//,"_")
sciezka = sciezka.replace("_**","_FA_")
Format.PlikDocelowy = sciezka
Format.Wykonaj(ZmienneDyn)
return ""
\}
Pozdrawiam
Wojtek Cyrklewicz
Wojtek Cyrklewicz
-
- Posty: 8
- Rejestracja: 07 maja 2017, 20:54
- Rola: Administrator CDN XL
- Wersja: 2016
Re: [API] Drukowanie
Dzięki Wojtek
Możesz mi jeszcze wkleić jak wywołujesz funkcję i jak wygląda filtr?
Właśnie spróbowałem ustawić "ZrodloID = 1" i nie rzuciło żadnym wyjątkiem, ale też nie zapisało pliku eksportu nigdzie.
Szukam przyczyny.
Kod:
Możesz mi jeszcze wkleić jak wywołujesz funkcję i jak wygląda filtr?
Właśnie spróbowałem ustawić "ZrodloID = 1" i nie rzuciło żadnym wyjątkiem, ale też nie zapisało pliku eksportu nigdzie.
Szukam przyczyny.
Kod:
Kod: Zaznacz cały
var documentsInfo = (DokumentHaMag)dbSession.CreateObject(
"CDN.DokumentyHaMag", "[TrN_NumerPelny]='" + receiptNumber + "' ");
var fileName = $"{receiptNumber.NormalizeFilename()}.pdf";
var filePath = Path.Combine(_outputFilesPath, fileName);
var format = new WydrFormat
{
GenRapReportType = 4,
GenRapNewReportInitObjects = "FakturaSpr",
OptimaObjectTypeInfo = documentsInfo,
ZrodloID = 1,
ID = _printTemplateIdentifier,
FiltrSQL = "TrN_NumerPelny = '" + receiptNumber + "'",
Urzadzenie = (int)UrzadzenieWydrukuTyp.PlikEksp,
FormatPlikuDocelowego = (int)UrzadzenieWydrukuFormatEksportu.PortableDocFormat,
PlikDocelowy = filePath
};
var zmienne = new CDNLib.Dictionary();
format.Wykonaj(zmienne);
-
- Posty: 8
- Rejestracja: 07 maja 2017, 20:54
- Rola: Administrator CDN XL
- Wersja: 2016
Re: [API] Drukowanie
Sprawdziłem co mogłem w kwestii samych wydruków.
Wydruki Crystal reports działają.
Wydruki Genrap nie.
Różnica jest taka, że pod spodem uruchamiana jest aplikacja GenRapClient.exe jako osobny proces.
Jej uruchomienie nie kończy się zapisanym plikiem PDF.
Czy ktoś może drukował dokumenty przy użyciu api oraz szablonów Genrap zamiast Crystal?
Wydruki Crystal reports działają.
Wydruki Genrap nie.
Różnica jest taka, że pod spodem uruchamiana jest aplikacja GenRapClient.exe jako osobny proces.
Jej uruchomienie nie kończy się zapisanym plikiem PDF.
Czy ktoś może drukował dokumenty przy użyciu api oraz szablonów Genrap zamiast Crystal?
Re: [API] Drukowanie
Ja drukuję z ERP Optima za pomocą COM wydruki GenRap.
Poniżej kod funkcji, która drukuje mi z listy faktur seryjnie dokumenty zaznaczone, wywoływany wydruk jest GenRap.
Poniżej kod funkcji, która drukuje mi z listy faktur seryjnie dokumenty zaznaczone, wywoływany wydruk jest GenRap.
Kod: Zaznacz cały
[SQL]
--@PAR ?@Hs200_NQ|Filtr:''@? PAR@
--@PAR ?@Hn1|CDN_Urzadzenie|CDN_Urzadzenie:2@? PAR@
--@PAR ?@Hs200|Printer|Printer:''@? PAR@
--@PAR ?@Hs255|CDN_PlikDocelowyBezRozszerzenia|CDN_PlikDocelowyBezRozszerzenia:''@? PAR@
--@PAR ?@Hs255|CDN_PlikDocelowyRozszerzenie|CDN_PlikDocelowyRozszerzenie:''@? PAR@
--@PAR ?@X|CDN_DaneJednostkiSamorzadowejNaWydruku|&CDN_DaneJednostkiSamorzadowejNaWydruku:0@? @H() PAR@
SELECT RpZ2_GIDNumer,Printer= ??_QPrinter , Trn_NumerPelny, TrN_Rodzaj, TrN_PCID, TrN_PCJSID
FROM CDN.RptZaznaczenia2
join CDN.TraNag on TrN_TrNId = RpZ2_GIDNumer
WHERE (TrN_FVMarza=0 or TrN_FVMarza is Null) and TrN_Rodzaj in (
--Faktura sprzedaży 302
302000 ,
--Faktura sprzedaży z wygenerowanym WZ 302
302004 ,
--Faktura sprzedaży z paragonu 302
302006 ,
--Faktura sprzedaży Z RO 302
302008 ,
--Faktura sprzedaży Z Pro-Formy 302
302009 ,
--Faktura sprzedaży z wydania kaucji 302
302090 ,
--Faktura sprzedaży pierwotna 302
302100,
--Faktury sprzedaży korekty
302001, 302002, 302003, 302005, 302007, 302081, 302082, 302083, 302091, 302092, 302101, 302102, 302103) and
?@Hs200_NQ|Filtr:''@?
order by TrN_NumerString,TrN_NumerNr
[XSL]
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:usr="urn:the-xml-files:xslt" >
<xsl:output omit-xml-declaration="yes" method="html"/>
<msxsl:script language="JScript" implements-prefix="usr">
<![CDATA[
function WykonajWydrukFS(Filtr,Drukarka_,NrDokumentu,Rodzaj,PCID,PCJSID)
\{
var result=""
var bt = new ActiveXObject ("CDNBase.BaseTools")
var ot = new ActiveXObject ("CDN.OptimaTools")
var ss = ot.Session.Login.CreateSession() //bt.Login.CreateSession()
try \{
var ZmienneDyn = new ActiveXObject ("CDNLib.Dictionary")
var ZmiennaDyn = new ActiveXObject ("CDN.ZmiennaDyn")
var ZmiennaDynA = new ActiveXObject ("CDN.ZmiennaDyn")
var ZmiennaDynB = new ActiveXObject ("CDN.ZmiennaDyn")
var ZmiennaDynC = new ActiveXObject ("CDN.ZmiennaDyn")
var Format = new ActiveXObject ("CDN.WydrFormat")
Format.ZrodloID = 1
if ( Rodzaj=="302000" || Rodzaj=="302004" || Rodzaj=="302006" || Rodzaj=="302008" || Rodzaj=="302009" || Rodzaj=="302090" || Rodzaj=="302100")
\{
Format.ID = 28
\}
if ( Rodzaj=="302001" || Rodzaj=="302005" || Rodzaj=="302081" || Rodzaj=="302091" || Rodzaj=="302101")
\{ Format.WydrukID = 746
Format.ID = 1
\}
if ( Rodzaj=="302002" || Rodzaj=="302007" || Rodzaj=="302082" || Rodzaj=="302092" || Rodzaj=="302102")
\{ Format.WydrukID = 813
Format.ID = 3
\}
if ( Rodzaj=="302003" || Rodzaj=="302083" || Rodzaj=="302103")
\{ Format.WydrukID = 816
Format.ID = 1
\}
Format.FiltrTPS = "trn_trnID=" + Filtr
Format.FiltrSQL = Format.FiltrTPS
Format.Nazwa + "_" + Filtr +".pdf"
Format.Sortowanie = ""
Format.Urzadzenie = ??CDN_Urzadzenie
Format.IloscKopii = 1
Format.DodajZapytanieAktualizacjiDanychRecordsetu("SELECT * FROM cdn.TraNag WHERE TrN_TrNID = " + Filtr);
ZmiennaDyn.Nazwa = "Identyfikator"
ZmiennaDyn.Wartosc = Filtr
ZmienneDyn.Add(ZmiennaDyn.Nazwa,ZmiennaDyn)
ZmiennaDynA.Nazwa = "TRN_PCID"
ZmiennaDynA.Wartosc = PCID
ZmienneDyn.Add(ZmiennaDynA.Nazwa,ZmiennaDynA)
ZmiennaDynB.Nazwa = "TRN_PCJSID"
ZmiennaDynB.Wartosc = PCJSID
ZmienneDyn.Add(ZmiennaDynB.Nazwa,ZmiennaDynB)
ZmiennaDynC.Nazwa = "CDN_DaneJednostkiSamorzadowejNaWydruku"
ZmiennaDynC.Wartosc = ??CDN_DaneJednostkiSamorzadowejNaWydruku
ZmienneDyn.Add(ZmiennaDynC.Nazwa,ZmiennaDynC)
// if ( ??CDN_Urzadzenie != 3 )
\{
var rDok = ss.CreateObject("CDN.DokumentyHaMag").Item( "" + Filtr )
if ( rDok.Waluta.CzySystemowa == 0 ) throw "Drukowane mogą być tylko wydruki w walucie systemowej. Waluta dokumentu to: " + rDok.Waluta.Symbol
Format.OptimaObjectTypeInfo = rDok
\}
if ( ??CDN_Urzadzenie == 3 ) Format.Drukarka = Drukarka_
//Format.PlikDocelowy = ??CDN_PlikDocelowyBezRozszerzenia + Filtr + "." + ??CDN_PlikDocelowyRozszerzenie;
var NrDok = NrDokumentu
Format.WatekID=Filtr
while ( NrDok.search( /\\/ ) != -1 || NrDok.search( /\// )!=-1 )
NrDok = NrDok.replace( /\\/ ,"_").replace(/\//,"_")
var ZmiennaDyn1 = new ActiveXObject ("CDN.ZmiennaDyn")
ZmiennaDyn1.Nazwa = "EMAIL_ATTACHFILEPREFIX"
ZmiennaDyn1.Wartosc = NrDok
ZmienneDyn.Add(ZmiennaDyn1.Nazwa,ZmiennaDyn1)
Format.Wykonaj(ZmienneDyn)
\} catch(e) \{ result ="- "+e+ " -" + e.description \}
if (result =="") result = "Wysłano do wydruku dokument : " + NrDokumentu
else result = "Nastąpił błąd przy wydruku dokumentu : "+ NrDokumentu + " : "+ result
return result+"\r\n"
\}
]]>
</msxsl:script>
<xsl:output omit-xml-declaration="yes"/>
<xsl:preserve-space elements="*"/>
<xsl:template match="/">
<xsl:for-each select="ROOT">
Raport wydruku zaznaczonych dokumentów.
<xsl:apply-templates select="RECORDSET1"/>
</xsl:for-each>
Koniec drukowania
</xsl:template>
<xsl:template match="RECORDSET1">
<xsl:apply-templates select="RECORD" mode="r1"/>
</xsl:template>
<xsl:template match="RECORD" mode="r1">
<xsl:value-of select="usr:WykonajWydrukFS(string(@RpZ2_GIDNumer),string(@Printer), string(@Trn_NumerPelny), string(@TrN_Rodzaj), string(@TrN_PCID), string(@TrN_PCJSID))"/>
</xsl:template>
</xsl:stylesheet>
[RUN]
Pozdrawiam
Wojtek Cyrklewicz
Wojtek Cyrklewicz
Re: [API] Drukowanie
Czy komuś udało się dotrzeć do tego jak ustawić nazwę pliku PDF, do którego Optima ma generować wydruk?