μία ερώτηση έχω. Η 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,'');
}
> }- Απόκρυψη κειμένου σε παράθεση -
>
> - Εμφάνιση κειμένου σε παράθεση -
Αν βάλεις τον open source PDF Creator, το παραπάνω παίζει.
σε Excel / Word - δοκίμασα πολλούς συνδιασμούς αλλα μου εφερνε μόνο
html αρχείο.
προς Κ.Βάππα: Κώστα μια λίστα με τον ακριβή ορισμό του printerName
please!
> > - Εμφάνιση κειμένου σε παράθεση -- Απόκρυψη κειμένου σε παράθεση -
Καλημέρα σας,
Θα ήθελα μια μικρή βοήθεια. Στο παρακάτω κομμάτι κώδικα εμφανίζει μήνυμα λάθους σχετικά με 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)); } }
|
Το ίδιο αποτέλεσμα. Σου στέλνω όλο το 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)); |
|
}
} |
Το ίδιο αποτέλεσμα. Σου στέλνω όλο το script μήπως βρίσκεται αλλού το λάθος και δεν το βλέπω. Σ'ευχαριστώ
Ξεπέρασα τα αρχικά προβλήματα αλλά τώρα έχω άλλο -->Access violation at address 4034D0D8 in module 'dbrtl70.bpl', κατά την εκτέλεση. Καμμιά ιδέα? Ο κώδικας δεν άλλαξε πέρα από τις προσθήκες των include προτάσεων
|
Ξεπέρασα τα αρχικά προβλήματα αλλά τώρα έχω άλλο -->Access violation at address 4034D0D8 in module 'dbrtl70.bpl', κατά την εκτέλεση. Καμμιά ιδέα? Ο κώδικας δεν άλλαξε πέρα από τις προσθήκες των include προτάσεων
Δεν παίζει ούτε με αυτό που μου είπες ούτε και με το
x=CallPublished('ModuleIntf.DataSetNext',Ds_3);
--- Στις Δευτ., 06/09/10, ο/η Κωνσταντίνος Μουχελής <m...@softone.gr> έγραψε:
|
Τα ίδια και με την αλλαγή σε mtrlines |
|
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 13:46 |
Υπάρχει λάθος στην παρακάτω σύνταξη? Εμφανίζει λάθος για λήξη χρονικού ορίου:
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)); }
}
} |
Έχω κάνει ήδη τον δεύτερο τρόπο αλλά πάλι δεν ολοκληρώθηκε. Λάθος στο:
x=ExecSql('Data','update mprdlines set busunits='+VarToStr(:1) +'where findoc='+VarToStr(sPrdDoc.findoc),VarArray(vField1,1));
-->incorrect syntax near keyword where.
Τί κάνω λάθος? |
|
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 14:38 |
| Όχι φίλε μου δεν είναι αυτό --- Στις Δευτ., 06/09/10, ο/η Yiannis Tsakiridis <also...@gmail.com> έγραψε:
|
|
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 15:10 |
Στις 2 αυτές λύσεις εμφανίζει λάθος -->variant or safe array index out of bound
|
|
Ημερομηνία: Δευτέρα, 6 Σεπτέμβριος 2010, 15:35 |
Καλημέρα σας,
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)); } } |
|
}
|
|
| Δεν αποκρίνεται καν η διαδικασία. Παγώνει. Πιθανόν να τρέχει και κάποτε να ολοκληρωθεί! --- Στις Τρίτ., 07/09/10, ο/η Κωνσταντίνος Μουχελής <m...@softone.gr> έγραψε:
|
|
Ημερομηνία: Τρίτη, 7 Σεπτέμβριος 2010, 9:40 |
Εντάξει δουλεύει αλλά λόγω του όγκου των παραστατικών χρειάζεται αρκετό χρόνο. Σας ευχαριστώ για τη βοήθεια |
Εντάξει δουλεύει αλλά λόγω του όγκου των παραστατικών χρειάζεται αρκετό χρόνο. Σας ευχαριστώ για τη βοήθεια
Που βρίσκεται το λάθος -->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); Θα με τρελάνει Ευχαριστώ
|
|
Ημερομηνία: Τρίτη, 7 Σεπτέμβριος 2010, 11:34 |