PRINTFORM

1,528 views
Skip to first unread message

kostas

unread,
Aug 31, 2010, 7:10:40 AM8/31/10
to Softone Developers Network
Καλησπέρα σας,

μία ερώτηση έχω. Η PRINTFORM καλεί μόνο εσωτερική ή εξωτερική φόρμα;
Στην περίπτωση φόρμας τύπου ετικέτας πως μπορώ να τη στείλω σε
εκτυπωτή;

Ευχαριστώ

Νίκος Μάλιακκας

unread,
Aug 31, 2010, 8:06:00 AM8/31/10
to Softone Developers Network
Χθες εφτιαξα κάτι καλό σε ένα super market με την PRINTFORM:

Σε ένα Dialog Object που έχει σαν input πεδίο το πεδίο
CCCBALISAZ.BARCODE (o CCCBALISAZ ειναι virtual πινακας με πεδία που
αφορούν το είδος και φαίνονται στο καρτελάκι)

μολις περάσεις barcode / κωδικό είδους και τον βρεί , εκτυπώνει στον
εκτυπωτή το καρτελάκι !

η PRINTFORM δουλεύει μόνο για τις εσωτερικές εκτυπώσεις.

Για να κάνεις μια εκτυπωση από ετικέτα εσωτερική κάνεις το εξής:

Ανοίγεις την φόρμα σχεδιασης της ετικέτας -> δεξί -> Save to File ->
το αποθηκεύεις με μορφή ptf.

Ανοίγεις το αρχείο στο σημειωματάριο και αλλάζεις στην δεύτερη γραμμή
το 1 σε 0

[PRINTDATA]
R1=25,90,0,1,0,0,ITEM,,,0

να γίνει
R1=25,90,0,0,0,0,ITEM,,,0

σε μια νέα φόρμα κάνεις δεξί -> Import from file και το φέρνεις. έτσι
παίζει και από τις ετικέτες και από εσωτερικά στο είδος.


το παρακάτω είναι το script για το ένα καρτελάκι, στην τελευταία
έκδοση πριν βγεί καρτελάκι αλλάζω ένα πεδίο στον MTRL και του στέλνω
το barcode που μόλις σκάναρα, έτσι ώστε το καρτελάκι να εκτυπωθεί με
το barcode που έχω σκανάρει και όχι με το πρώτο που θα βρεί στα
εναλλακτικά.

Ο Κώστας Βάππας μου έδωσε και την καταπληκτική ιδέα : αντί να
φτιάχνεις φορμες για καρτελάκια για κάθε κύκλωμα, φτιάχνεις ένα στην
αποθήκη
και ενα javascript στο κάθε κύκλωμα. - Οι φόρμες για τον zebra/ sato
είναι πολύ δύκολο να τις συντηρείς σε κάθε κύκλωμα ξεχωριστα...


προσοχή στην τιμή κι λού - τιμή μεζ ούρας, θα επέλ θουν έλ εγχοι στα
κατ αστή ματα λια νικ_ής (αλλά δεν το ακούσατε από εμενα...)

function ON_CCCBALISAZ_BARCODE()
{

if (CCCBALISAZ.PRINTERNAME=="") FindBalisazPrinter();
if (CCCBALISAZ.BARCODE=="") return;
//CCCBALISAZ.CODE=CCCBALISAZ.BARCODE;
FindMtrl(CCCBALISAZ.BARCODE);
CCCBALISAZ.BARCODE="";
X.FOCUSFIELD('CCCBALISAZ.BARCODE');

}


function FindMtrl(barcode)
{
var sqlstr="SELECT TOP 1 MTRL.MTRL, MTRL.CODE, MTRL.NAME,
MTRL.VOLUME, CCCMTRUNIT.CODE AS MM \
, MTRL.PRICER01 , MTRL.PRICER02, CCCMTRUNIT.FACTOR \
FROM MTRL \
LEFT JOIN CCCMTRUNIT ON
MTRL.CCCMTRUNIT=CCCMTRUNIT.CCCMTRUNIT \
LEFT JOIN MTRSUBSTITUTE B ON B.MTRL=MTRL.MTRL \
WHERE MTRL.CODE ='" + barcode + "' \
OR B.CODE='" + barcode + "'";
var mtrl;
mtrl=X.GETSQLDATASET(sqlstr,'');

var price;
if (mtrl.MTRL>0)
{
CCCBALISAZ.MTRL=mtrl.MTRL;
CCCBALISAZ.CODE=mtrl.CODE;
CCCBALISAZ.NAME=mtrl.NAME;

if (X.SYS.BRANCH==2) price=mtrl.PRICER02;
else price=mtrl.PRICER01;
CCCBALISAZ.PRICE=price;
CCCBALISAZ.KILOPRICE=CalculateKiloPrice(price, mtrl.VOLUME,
mtrl.FACTOR);
CCCBALISAZ.MM=mtrl.MM;
CCCBALISAZ.SCANEDBARCODE=barcode;

var Item=new Array();

Item=X.CREATEOBJ('ITEM');
Item.DBLOCATE(mtrl.MTRL);
Item.PRINTFORM(9999,CCCBALISAZ.PRINTERNAME, '');
Item.FREE;
}
}

function CalculateKiloPrice(price, volume, factor)
{
if (volume==0) return 0;
else return price*factor/volume;
}


function FindBalisazPrinter()
{
var sqlstr;
sqlstr="SELECT TOP 1 SOPRINTER FROM SERIES WHERE SOSOURCE=1151 AND
BRANCH=" + X.SYS.BRANCH + " \
AND ((NAME LIKE '%BALISAZ%') OR (NAME LIKE '%ΚΑΡΤΕΛΑΚΙΑ
%'))";
CCCBALISAZ.PRINTERNAME=X.SQL(sqlstr,'');
}


kostas

unread,
Aug 31, 2010, 9:38:16 AM8/31/10
to Softone Developers Network
Πολύ καλή δουλειά.! Μου έλυσες ενα προβλημα που είχα. Με την PRINTFORM
έχω και κάτι άλλο... όμως. Δοκίμασα να στείλω εκτυπωση σε excel αλλά
από οτι παρατήρησα οτιδηποτε στέλνω σε μη φυσικό εκτυπωτη δεν πάει με
την PRINTFORM.

> }- Απόκρυψη κειμένου σε παράθεση -
>
> - Εμφάνιση κειμένου σε παράθεση -

Νίκος Μάλιακκας

unread,
Sep 1, 2010, 4:26:15 AM9/1/10
to Softone Developers Network
Item.PRINTFORM(9999,'PDF file', 'e:\\users\\maliakkas\\print_PDF
file.pdf');

Αν βάλεις τον open source PDF Creator, το παραπάνω παίζει.

σε Excel / Word - δοκίμασα πολλούς συνδιασμούς αλλα μου εφερνε μόνο
html αρχείο.

προς Κ.Βάππα: Κώστα μια λίστα με τον ακριβή ορισμό του printerName
please!

> > - Εμφάνιση κειμένου σε παράθεση -- Απόκρυψη κειμένου σε παράθεση -

Giannis Giorgoulakis

unread,
Sep 1, 2010, 7:24:45 AM9/1/10
to so...@googlegroups.com

Νίκο γεια χαρά τα ονόματα που δέχεται το printerName είναι όλα τα ονόματα των φυσικών εκτυπωτών όπως εμφανίζονται στο Soft1 καθώς επίσης και τα ακόλουθα :


Ascii928
Ascii
928
Ascii437
437
Excel
PDF file
HTML
Word
Cash Machine
MetaFile




2010/9/1 Νίκος Μάλιακκας <mali...@gmail.com>
--
Softone Developers Network group.
To post to this group, send email to so...@googlegroups.com

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 3:20:42 AM9/6/10
to so...@googlegroups.com
Καλημέρα σας,
 
Θα ήθελα μια μικρή βοήθεια. Στο παρακάτω κομμάτι κώδικα εμφανίζει μήνυμα λάθους σχετικά με undeclared identifier  DataSetFirst and DataSetEof and GetFieldValue (προς το παρόν). Έχει ιδέα κανείς? 
 
Ευχαριστώ
var
   Ds_3,x,vField1;
{
 fetch sMprdLines
                    {
                    Ds_3=CallPublished('ModuleIntf.GetSQLDataSet',VarArray(0,'SELECT cccbu
                                     FROM mtrbrnlimits inner join mtrl on 
                                                 mtrbrnlimits.mtrl=mtrl.mtrl inner join whouse on
                                                 mtrbrnlimits.whouse=whouse.whouse
                                     WHERE mtrl.MTRL='+VarToStr(:sMprdLines.MTRL)+'
                                         and MTRBRNLIMITS.WHOUSE='+VarToStr(:sMprdLines.WHOUSE),null,3));
                   x=DataSetFirst(Ds_3);
                   while(DataSetEof(Ds_3)=0)             
                    {
                           vField1=GetFieldValue(Ds_3,'cccbu')
                           x=ExecSql('Data','insert into mprdlines(BusUnits)'+'values(:1)',VarArray(vField1,1));
                    }
 
}
 

 

Κωνσταντίνος Μουχελής

unread,
Sep 6, 2010, 3:30:56 AM9/6/10
to so...@googlegroups.com
Δοκιμάστε VarToStr(sMprdLines.WHOUSE)
χωρίς δηλαδή ":"

2010/9/6 ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ <vangelis...@yahoo.gr>

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 3:43:45 AM9/6/10
to so...@googlegroups.com
Το ίδιο αποτέλεσμα. Σου στέλνω όλο το script μήπως βρίσκεται αλλού το λάθος και δεν το βλέπω. Σ'ευχαριστώ
 
form {
      [TABLES]
      ImpTable=;;;;Master;3;0
      [ImpTable]
      vDateL=11;25;1;1;0;Από;;;:X.SYS.LOGINDATE;
      vDateH=11;25;1;1;0;Έως;;;:X.SYS.LOGINDATE;
      vImpMess=16;64000;0;1;1;Μηνύματα μεταφοράς...;;;;
      //vBusUnitOk=2;15;1;1;0;Data Processing;$Y;;0;1
     
      [PANELS]
      PANEL10=0;Στοιχεία Εισαγωγής;0;50     
      PANEL11=4;Μηνύματα μεταφοράς;0;100,N,L3
      [PANEL10]
      ImpTable.vDateL
      ImpTable.vDateH
      [PANEL11]
      ImpTable.vImpMess
      [STRINGS]
      }

Connect Xplorer Data {
                      connect();
                     
                 sPrdDoc = SELECT findoc                                                                          
                                 FROM   FINDOC
                                 WHERE SOSOURCE=7151
                                       and TRNDATE >= :$ImpTable.vDateL
                                       and TRNDATE <= :$ImpTable.vDateH;
                 sMprdLines = SELECT mtrl
                                     FROM mtrlines inner join mtrl on 
                                                 mtrlines.mtrl=mtrl.mtrl
                                     WHERE findoc= :$sPrdDoc.Findoc;

}//END OF CONNECT XPLORER DATA
var
   Ds_3,x,vField1;
{
     fetch sMprdLines
                    {
                    Ds_3=CallPublished('ModuleIntf.GetSQLDataSet',VarArray(0,'SELECT cccbu
                                     FROM mtrbrnlimits inner join mtrl on 
                                                 mtrbrnlimits.mtrl=mtrl.mtrl inner join whouse on
                                                 mtrbrnlimits.whouse=whouse.whouse
                                     WHERE mtrl.MTRL='+VarToStr(sMprdLines.MTRL)+'
                                         and MTRBRNLIMITS.WHOUSE='+VarToStr(sMprdLines.WHOUSE),null,3));
}

Κωνσταντίνος Μουχελής

unread,
Sep 6, 2010, 4:29:39 AM9/6/10
to so...@googlegroups.com
Για να μπορέσετε να χρησιμοποιήσεις τις CallPublished functions απευθείας όπως στο παράδειγμά 
σας τις DataSetFirst,DataSetEof κλπ,θα πρέπει να δηλώσετε τα παρακάτω:
include 'ModuleIntf';
include 'PILib';
include 'SysRequest';

Τις δηλώσεις αυτές τις κάνετε στο script για παράδειγμα κάτω από το form.

Αλλιώς θα πρέπει να χρησιμοποιήσετε το τρόπο κλήσης με την CallPublished.
Σχετικά παραδείγματα υπάρχουν σε αρχεία του group.

2010/9/6 ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ <vangelis...@yahoo.gr>
Το ίδιο αποτέλεσμα. Σου στέλνω όλο το script μήπως βρίσκεται αλλού το λάθος και δεν το βλέπω. Σ'ευχαριστώ

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 4:46:30 AM9/6/10
to so...@googlegroups.com
Ξεπέρασα τα αρχικά προβλήματα αλλά τώρα έχω άλλο -->Access violation at address 4034D0D8 in module 'dbrtl70.bpl', κατά την εκτέλεση. Καμμιά ιδέα? Ο κώδικας δεν άλλαξε πέρα από τις προσθήκες των include προτάσεων
 

Κωνσταντίνος Μουχελής

unread,
Sep 6, 2010, 5:54:05 AM9/6/10
to so...@googlegroups.com
Δοκίμασε το παρακάτω.

                   x=DataSetFirst(Ds_3);
                   while(DataSetEof(Ds_3)=0)
                    {
                           vField1=GetFieldValue(Ds_3,'cccbu')
                           x=ExecSql('Data','insert into mprdlines(BusUnits)'+'values(:1)',VarArray(vField1,1));
                           x=DataSetNext(Ds_3);
                    }


2010/9/6 ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ <vangelis...@yahoo.gr>
Ξεπέρασα τα αρχικά προβλήματα αλλά τώρα έχω άλλο -->Access violation at address 4034D0D8 in module 'dbrtl70.bpl', κατά την εκτέλεση. Καμμιά ιδέα? Ο κώδικας δεν άλλαξε πέρα από τις προσθήκες των include προτάσεων
 

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 6:12:01 AM9/6/10
to so...@googlegroups.com
Δεν παίζει ούτε με αυτό που μου είπες ούτε και με το
x=CallPublished('ModuleIntf.DataSetNext',Ds_3); 



--- Στις Δευτ., 06/09/10, ο/η Κωνσταντίνος Μουχελής <m...@softone.gr> έγραψε:

Από: Κωνσταντίνος Μουχελής <m...@softone.gr>
Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 12:54

Κωνσταντίνος Μουχελής

unread,
Sep 6, 2010, 6:46:41 AM9/6/10
to so...@googlegroups.com
Το λάθος βρίσκεται σε αυτό το insert.
Ο φυσικός πίνακας στη βάση είναι MTRLINES.
Σε αυτόν πρέπει να γίνει το insert με mtrtype=0.

x=ExecSql('Data','insert into mprdlines(BusUnits)'+'values(:1)',VarArray(vField1,1));

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 6:56:09 AM9/6/10
to so...@googlegroups.com
Τα ίδια και με την αλλαγή σε mtrlines

--- Στις Δευτ., 06/09/10, ο/η Κωνσταντίνος Μουχελής <m...@softone.gr> έγραψε:

Από: Κωνσταντίνος Μουχελής <m...@softone.gr>
Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 13:46

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 7:34:03 AM9/6/10
to so...@googlegroups.com
Υπάρχει λάθος στην παρακάτω σύνταξη? Εμφανίζει λάθος για λήξη χρονικού ορίου:
 
fetch sPrdDoc

           {
     fetch sMprdLines
                    {
                    Ds_3=CallPublished('ModuleIntf.GetSQLDataSet',VarArray(0,'SELECT cccbu
                                     FROM mtrbrnlimits inner join mtrl on 
                                                 mtrbrnlimits.mtrl=mtrl.mtrl inner join whouse on
                                                 mtrbrnlimits.whouse=whouse.whouse
                                     WHERE mtrl.MTRL='+VarToStr(sMprdLines.MTRL)+'
                                         and MTRBRNLIMITS.WHOUSE='+VarToStr(sMprdLines.WHOUSE),null,3));
              
                           vField1=GetFieldValue(Ds_3,'cccbu');
                           x=ExecSql('Data','insert into mtrlines(BusUnits)'+'values(:1)',VarArray(vField1,1));
                    
          
}
}
}

Κωνσταντίνος Μουχελής

unread,
Sep 6, 2010, 7:38:34 AM9/6/10
to so...@googlegroups.com
Αν θέλετε να κάνετε insert στις γραμμές πρώτων υλών (Mtrlines mtrtype=0)
δηλαδή στο δεύτερο Dataset (sMprdLines)
Υπάρχουν δύο τρόποι:
α)Χρησιμοποιείτε ένα Dataset (sMprdLines) αλλάζοντας αντίστοιχα το query
  SELECT FINDOC.findoc, mtrl.MTRL
  FROM   FINDOC, mtrlines, mtrl
  WHERE FINDOC.SOSOURCE=7151
         and FINDOC.TRNDATE >= :ImpTable.vDateL
         and FINDOC.TRNDATE <= :ImpTable.vDateH
         and FINDOC.FINDOC=MTRLINES.FINDOC 
         and MTRLINES.MTRL  = MTRL.MTRL; 
β)κάνετε fetch στο πρώτο dataset( sPrdDoc)
   και μετά fetch στο δεύτερο dataset( sMprdLines)
       fetch sPrdDoc
       {
             fetch sMprdLines
             {
                    Ds_3=CallPublished('ModuleIntf.GetSQLDataSet',VarArray(0,'SELECT 99 as cccbu '+
                                     ' FROM mtrbrnlimits inner join mtrl on              '+
                                     '            mtrbrnlimits.mtrl=mtrl.mtrl inner join whouse on '+
                                     '            mtrbrnlimits.whouse=whouse.whouse '+
                                     ' WHERE mtrl.MTRL='+VarToStr(sMprdLines.MTRL)+
                                     '    and                        MTRBRNLIMITS.WHOUSE='+VarToStr(sMprdLines.WHOUSE),null,3));
                   x=DataSetFirst(Ds_3);
                   while(DataSetEof(Ds_3)=0)
                   {
                           vField1=GetFieldValue(Ds_3,'cccbu');
                           x=ExecSql('Data','insert into mprdlines(BusUnits)'+'values(:1)',VarArray(vField1,1));
                           x=DataSetNext(Ds_3);
                   }
              }
       }


Σε κάθε περίπτωση πρέπει να διορθώσετε το insert statement

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 7:54:15 AM9/6/10
to so...@googlegroups.com
Έχω κάνει ήδη τον δεύτερο τρόπο αλλά πάλι δεν ολοκληρώθηκε. Λάθος στο:
x=ExecSql('Data','update mprdlines set busunits='+VarToStr(:1) +'where findoc='+VarToStr(sPrdDoc.findoc),VarArray(vField1,1));
-->incorrect syntax near keyword where.
Τί κάνω λάθος?




--- Στις Δευτ., 06/09/10, ο/η Κωνσταντίνος Μουχελής <m...@softone.gr> έγραψε:

Από: Κωνσταντίνος Μουχελής <m...@softone.gr>
Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 14:38

Yiannis Tsakiridis

unread,
Sep 6, 2010, 8:10:08 AM9/6/10
to so...@googlegroups.com
Έχω κάνει ήδη τον δεύτερο τρόπο αλλά πάλι δεν ολοκληρώθηκε. Λάθος στο:
x=ExecSql('Data','update mprdlines set busunits='+VarToStr(:1) +'where findoc='+VarToStr(sPrdDoc.findoc),VarArray(vField1,1));
-->incorrect syntax near keyword where.
Τί κάνω λάθος?

Θέλει κενό πριν το where

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 8:18:03 AM9/6/10
to so...@googlegroups.com
Όχι φίλε μου δεν είναι αυτό



--- Στις Δευτ., 06/09/10, ο/η Yiannis Tsakiridis <also...@gmail.com> έγραψε:

Από: Yiannis Tsakiridis <also...@gmail.com>

Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 15:10

Γιάννης Σπυριδάκης

unread,
Sep 6, 2010, 8:35:41 AM9/6/10
to so...@googlegroups.com
Αντικατέστησε τη γραμμή
x=ExecSql('Data','update mprdlines set busunits='+VarToStr(:1) +'where findoc='+VarToStr(sPrdDoc.findoc),VarArray(vField1,1));

με τη γραμμή
x=ExecSql('Data','update mprdlines set busunits=:1 where findoc='+VarToStr(sPrdDoc.findoc), vField1);
ή με τη γραμμή
x=ExecSql('Data','update mprdlines set busunits='+VarToStr(vField1) +' where findoc='+VarToStr(sPrdDoc.findoc), Null);

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 6, 2010, 8:47:28 AM9/6/10
to so...@googlegroups.com
Στις 2 αυτές λύσεις εμφανίζει λάθος -->variant or safe array index out of bound
Δεν παίζεται!

--- Στις Δευτ., 06/09/10, ο/η Γιάννης Σπυριδάκης <s...@softone.gr> έγραψε:

Από: Γιάννης Σπυριδάκης <s...@softone.gr>

Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 15:35

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 7, 2010, 2:37:01 AM9/7/10
to so...@googlegroups.com
Καλημέρα σας,
 
Sorry για το πρήξιμο, αλλά δεν καταλαβαίνω που υπάρχει το λάθος στο παρακάτω. Στον SQL Monitor εμφανίζει μόνο update mtrlines set busunits=, χωρίς δηλαδή να πάρει τιμή. Ποια είναι η σωστή σύνταξη? Μπορεί κάποιος να βοηθήσει?
 
 
vField1=GetFieldValue(Ds_3,'cccbu');
x=ExecSql('Data','update mtrlines set busunits='+VarToStr(:1),VarArray(vField1,1));

Ευχαριστώ
 
Ο κώδικας είναι :
 
include 'ModuleIntf';
include 'PILib';
include 'SysRequest';
Connect Xplorer Data {
                      connect();
                     
                 sPrdDoc = SELECT findoc                                                                          
                                 FROM   FINDOC
                                 WHERE SOSOURCE=7151
                                       and TRNDATE >= :$ImpTable.vDateL
                                       and TRNDATE <= :$ImpTable.vDateH;
                 sMprdLines = SELECT mtrlines.mtrl,mtrlines.whouse

                                     FROM mtrlines inner join mtrl on 
                                                 mtrlines.mtrl=mtrl.mtrl
                                     WHERE findoc= :$sPrdDoc.Findoc;

}//END OF CONNECT XPLORER DATA
var
   Ds_3,x,vField1;
{
fetch sPrdDoc
           {
     fetch sMprdLines
                    {
                    Ds_3=CallPublished('ModuleIntf.GetSQLDataSet',VarArray(0,'SELECT cccbu
                                     FROM mtrbrnlimits inner join mtrl on 
                                                 mtrbrnlimits.mtrl=mtrl.mtrl inner join whouse on
                                                 mtrbrnlimits.whouse=whouse.whouse
                                     WHERE mtrl.MTRL='+VarToStr(sMprdLines.MTRL)+'and MTRBRNLIMITS.WHOUSE='+VarToStr(sMprdLines.WHOUSE),null,3));
              
                          vField1=GetFieldValue(Ds_3,'cccbu');
                          x=ExecSql('Data','update mtrlines set busunits='+VarToStr(:1),VarArray(vField1,1));
                    
                   }
 
           }
}

--- Στις Δευτ., 06/09/10, ο/η Γιάννης Σπυριδάκης <s...@softone.gr> έγραψε:

Από: Γιάννης Σπυριδάκης <s...@softone.gr>
Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 15:35

Κωνσταντίνος Μουχελής

unread,
Sep 7, 2010, 2:40:07 AM9/7/10
to so...@googlegroups.com
Δοκίμασε αυτό

vField1=GetFieldValue(Ds_3,'cccbu');
x=ExecSql('Data','update mtrlines set busunits=:1',VarArray(vField1,1));

2010/9/7 ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ <vangelis...@yahoo.gr>

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 7, 2010, 3:04:07 AM9/7/10
to so...@googlegroups.com
Δεν αποκρίνεται καν η διαδικασία. Παγώνει. Πιθανόν να τρέχει και κάποτε να ολοκληρωθεί!


--- Στις Τρίτ., 07/09/10, ο/η Κωνσταντίνος Μουχελής <m...@softone.gr> έγραψε:

Από: Κωνσταντίνος Μουχελής <m...@softone.gr>

Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Τρίτη, 7 Σεπτέμβριος 2010, 9:40

Κωνσταντίνος Βάππας

unread,
Sep 7, 2010, 3:12:20 AM9/7/10
to so...@googlegroups.com
Καλημέρα,

ή θα γράψετε το ExecSql με concatenate δηλαδή
x=ExecSql('Data','update mtrlines set busunits='+VarToStr(vField1),null);

ή περνώντας τις μεταβλητές ως παραμέτρους δηλαδή
x=ExecSql('Data','update mtrlines set busunits=:1', vField1);

Στην πρώτη περίπτωση θα πρέπει να φροντίζετe εσείς πως θα φύγει η τιμή, δηλαδή αν είναι ακέραιος όπως εδώ χρειάζεται VarToStr, αλλά αν είναι String απαιτείται η QuotedStr ώστε να φύγει μέσα σε "αυτάκια". Επίσης στην πρώτη περίπτωση στο monitor θα δείτε ακριβώς την τιμή σαν να γράφατε την τιμή στον SQL, ενώ στη δεύτερη θα δείτε :1.

Το VarArray χρειάζεται στη δεύτερη περίπτωση μόνο αν οι παράμετροι είναι περισσότερες από μία, π.χ.
x=ExecSql('Data','update mtrlines set busunits=:1 where findoc=:2', VarArray(vField1,vField2,2));

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 7, 2010, 3:58:36 AM9/7/10
to so...@googlegroups.com
Εντάξει δουλεύει αλλά λόγω του όγκου των παραστατικών χρειάζεται αρκετό χρόνο. Σας ευχαριστώ για τη βοήθεια

Κωνσταντίνος Βάππας

unread,
Sep 7, 2010, 4:34:06 AM9/7/10
to so...@googlegroups.com
Καλημέρα και πάλι,

θα μπορούσατε να δοκιμάσετε κατευθείαν το παρακάτω

x=ExecSQL('Data', 'UPDATE MTRLINES ' +
                  'SET BUSUNITS=(SELECT B.CCCBU '
                                'FROM MTRBRNLIMITS B ' +
                                'WHERE B.MTRL=MTRLINES.MTRL ' +
                                'AND B.BRANCH=(SELECT FF.BRANCH FROM FINDOC FF WHERE FF.FINDOC=MTRLINES.FINDOC) ' +
                                'AND B.WHOUSE=MTRLINES.WHOUSE) ' +
                  'WHERE EXISTS(SELECT 1 ' +
                               'FROM FINDOC F ' +
                               'WHERE F.COMPANY=' + VarToStr(:X.SYS.COMPANY) + ' ' +
                               'AND F.SOSOURCE=7151 ' +
                               'AND F.TRNDATE>=' + FormatSQLText('Data',':1',:ImpTable.vDateL) + ' ' +
                               'AND F.TRNDATE<' + FormatSQLText('Data',':1',:ImpTable.vDateH+1) + ' ' +
                               'AND F.FINDOC=MTRLINES.FINDOC', null);


ώστε να μη χρειάζονται dataset και fetch στο SoftOne.
Η εφαρμογή να στείλει μόνο ένα query και όλη η δουλειά να γίνει από τη βάση, λογικά θα έχετε μεγάλη βελτίωση στο χρόνο.



Στις 7 Σεπτεμβρίου 2010 10:58 π.μ., ο χρήστης ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ <vangelis...@yahoo.gr> έγραψε:
Εντάξει δουλεύει αλλά λόγω του όγκου των παραστατικών χρειάζεται αρκετό χρόνο. Σας ευχαριστώ για τη βοήθεια

ΠΙΣΤΟΛΑΣ Ν. ΕΥΑΓΓΕΛΟΣ

unread,
Sep 7, 2010, 5:20:58 AM9/7/10
to so...@googlegroups.com
Που βρίσκεται το λάθος -->missing operator or semicolon, στο παρακάτω που μου έστειλες?
 
x=ExecSQL('Data', 'UPDATE MTRLINES ' +
                  'SET BUSUNITS=(SELECT B.CCCBU '
                                'FROM MTRBRNLIMITS B ' +
                                'WHERE B.MTRL=MTRLINES.MTRL ' +
                                'AND B.BRANCH=(SELECT FF.BRANCH FROM FINDOC FF WHERE FF.FINDOC=MTRLINES.FINDOC) ' +
                                'AND B.WHOUSE=MTRLINES.WHOUSE) ' +
                  'WHERE EXISTS(SELECT 1 ' +
                               'FROM FINDOC F ' +
                               'WHERE F.COMPANY=' + VarToStr(:X.SYS.COMPANY) + ' ' +
                               'AND F.SOSOURCE=7151 ' +
                               'AND F.TRNDATE>=' + FormatSQLText('Data',':1',:ImpTable.vDateL) + ' ' +
                               'AND F.TRNDATE<=' + FormatSQLText('Data',':1',:ImpTable.vDateH) + ' ' +
                               'AND F.FINDOC=MTRLINES.FINDOC)' ,null);
 
Θα με τρελάνει
Ευχαριστώ

--- Στις Τρίτ., 07/09/10, ο/η Κωνσταντίνος Βάππας <vappaskon...@gmail.com> έγραψε:

Από: Κωνσταντίνος Βάππας <vappaskon...@gmail.com>

Θέμα: Re: Import Script
Προς: so...@googlegroups.com
Ημερομηνία: Τρίτη, 7 Σεπτέμβριος 2010, 11:34

Κωνσταντίνος Βάππας

unread,
Sep 7, 2010, 10:31:50 AM9/7/10
to so...@googlegroups.com
Στο τέλος της 2ης γραμμής μετά το SELECT B.CCCBU ' θέλει ένα +.

Andreas Kakosouris

unread,
May 16, 2017, 6:07:52 AM5/16/17
to Softone Developers Network
Για εκτύπωση σε word ή excel δίνουμε μέσω εκτύπωσης 928.
Στο όνομα αρχείου δεν δίνουμε κατάληξη, θα βέλει .DOC ή .XLS μόνο του ανάλογα με την φόρμα.

                object[] myArray;
                myArray = new object[4];
                object SysRequest = XSupport.GetStockObj("SysRequest", true);
                myArray[0] = XModule.Handle;                      //To Object που δουλεύουμε.
                myArray[1] = 900001;                                   //Ο Κωδικός της φόρμας εκτύπωσης
                myArray[2] = @"928";                                  //Το Όνομα του εκτυπωτικού μέσου
                myArray[3] = "C:\\test\\test";                        // Το αρχείο που θα αποθηκευτεί θα είναι test.DOC ή test.XLS
                XSupport.CallPublished(SysRequest, "PrintForm", myArray);

Andreas Kakosouris

unread,
May 18, 2017, 8:48:24 AM5/18/17
to Softone Developers Network
Επίσης για να εκτυπώσουμε σε pdf αρχείο, PRINTFORM εξωτερική που έχει φτιαχτεί με office, πρέπει το office να έχει δυνατόητα save as pdf. Αυτό μπορούμε να το δούμε αν ανοίξουμε ένα Word και πατήσουμε save as. Θα πρέπει να μας δίνει την επιλογή pdf. Αν όχι υπάρχει addon που δίνει αυτή τη δυνατότητα εδώ https://www.microsoft.com/el-GR/download/details.aspx?id=7.
(Η συγκεκριμένη παρατήρηση έγινε σε υπολογιστή με office 2007)
Reply all
Reply to author
Forward
0 new messages