Hallo
nachfolgend das versprochene beispiel...
langs ists her, aber damit werden immer noch täglich daten ausgetauscht.
schön wenns noch jemand von nutzen ist...
noch tipp:
in dta muß alles in 128 byte blöcken geschrieben werden.
wenn man also eine datei scheibchenweise einliest, kann man so relativ schnell verschiebungen erkennen.
hier das große programm und der datensatzaufbau
Struktur der Tabelle/DBF: DTTEST.DBF
Anzahl der Datens„tze : 24
Letzte Žnderung : 08/01/103 um 16:54
Feld Feldname Typ Breite Dez Anfang Ende
1 LEN Zeichen 4 1 4
2 SATZART Zeichen 1 5 5
3 ZEILE Zeichen 123 6 128
** Gesamt **
Struktur der Tabelle/DBF: DTA_A.DBF Alias: DTA
Anzahl der Datens„tze : 1
Letzte Žnderung : 08/01/103 um 16:12
Feld Feldname Typ Breite Dez Anfang Ende
1 AKTIV Logisch 1 1 1
2 DTA_ADATUM Datum 8 2 9
3 FELD1 Numerisch 4 10 13
4 FELD10 Zeichen 50 14 63
5 FELD11 Numerisch 8 64 71
6 FELD2 Zeichen 1 72 72
7 FELD3 Zeichen 2 73 74
8 FELD4 Numerisch 8 75 82
9 FELD5 Numerisch 8 83 90
10 FELD6 Zeichen 27 91 117
11 FELD7 Numerisch 6 118 123
12 FELD8 Zeichen 4 124 127
13 FELD9 Numerisch 10 128 137
14 STAPELREF Numerisch 4 138 141
15 UBW Logisch 1 142 142
** Gesamt ** 143
FoxDoc hat keine dazugeh”rigen Indexdateien gefunden
FoxDoc hat keine dazugeh”rigen Mehrfachindizes gefunden
FoxDoc hat keine dazugeh”rigen Berichtsvorlagen gefunden
Benutzt von DTAREAD.PRG
-------------------------------------------------------------------------------
Struktur der Tabelle/DBF: DTA_C.DBF Alias: DTC
Anzahl der Datens„tze : 11
Letzte Žnderung : 08/01/103 um 16:07
Feld Feldname Typ Breite Dez Anfang Ende
1 AKTIV Logisch 1 1 1
2 CFELD12 Numerisch 11 2 12
3 CFELD1 Numerisch 4 13 16
4 CFELD10 Numerisch 8 17 24
5 CFELD11 Numerisch 10 25 34
6 CFELD5 Numerisch 10 35 44
7 CFELD13 Zeichen 3 45 47
8 CFELD14A Zeichen 27 48 74
9 CFELD15 Zeichen 27 75 101
10 CFELD16 Zeichen 27 102 128
11 CFELD18 Numerisch 2 129 130
12 CFELD2 Zeichen 1 131 131
13 CFELD20 Zeichen 27 132 158
14 CFELD22 Zeichen 27 159 185
15 CFELD25 Zeichen 27 186 212
16 CFELD27 Zeichen 27 213 239
17 CFELD29 Zeichen 27 240 266
18 CFELD3 Numerisch 8 267 274
19 CFELD31 Zeichen 27 275 301
20 CFELD34 Zeichen 27 302 328
21 CFELD36 Zeichen 27 329 355
22 CFELD38 Zeichen 27 356 382
23 CFELD4 Numerisch 8 383 390
24 CFELD40 Zeichen 27 391 417
25 CFELD43 Zeichen 27 418 444
26 CFELD45 Zeichen 27 445 471
27 CFELD47 Zeichen 27 472 498
28 CFELD49 Zeichen 27 499 525
29 CFELD52 Zeichen 27 526 552
30 CFELD54 Zeichen 27 553 579
31 CFELD56 Zeichen 27 580 606
32 CFELD58 Zeichen 27 607 633
33 CFELD59 Zeichen 27 634 660
34 CFELD60 Zeichen 27 661 687
35 CFELD61 Zeichen 27 688 714
36 CFELD62 Zeichen 27 715 741
37 CFELD6_1 Numerisch 1 742 742
38 CFELD6_2 Numerisch 11 743 753
39 CFELD6_3 Numerisch 1 754 754
40 CFELD7A Numerisch 2 755 756
41 CFELD7B Numerisch 3 757 759
42 CFELD8 Zeichen 1 760 760
43 CFELD9 Numerisch 11 761 771
44 DTA_ADATUM Datum 8 772 779
45 STAPELREF Numerisch 4 780 783
46 UBW Logisch 1 784 784
47 CFELD17A Zeichen 1 785 785
** Gesamt ** 786
Zu dieser Tabelle/DBF geh”ren wahrscheinlich Indexdatei(en)/-schl�ssel:
: D:\FOXPR26\DOS\KBWRK\DBF\DTKUND.IDX (CFELD5)
Zu dieser Tabelle/DBF geh”ren wahrscheinlich Mehrfachindexdatei(en):
: D:\FOXPR26\DOS\KBWRK\DBF\DTA_C.CDX
Zu dieser Tabelle/DBF geh”ren wahrscheinlich Berichtsvorlage(n):
: EDTAGS.FRX
: DTAGS.FRX
: EDTABSE.FRX
: DTABSE.FRX
Benutzt von DTAREAD.PRG
: KBREORG.PRG
-------------------------------------------------------------------------------
Struktur der Tabelle/DBF: DTA_E.DBF Alias: DTE
Anzahl der Datens„tze : 1
Letzte Žnderung : 08/01/103 um 16:07
Feld Feldname Typ Breite Dez Anfang Ende
1 AKTIV Logisch 1 1 1
2 DTA_ADATUM Datum 8 2 9
3 EFELD1 Numerisch 4 10 13
4 EFELD10 Numerisch 8 14 21
5 EFELD2 Zeichen 1 22 22
6 EFELD3 Zeichen 5 23 27
7 EFELD4 Numerisch 7 28 34
8 EFELD5 Numerisch 13 35 47
9 EFELD6 Numerisch 17 48 64
10 EFELD7 Numerisch 17 65 81
11 EFELD8 Numerisch 13 82 94
12 EFELD9 Zeichen 43 95 137
13 STAPREF Numerisch 5 138 142
14 UBW Logisch 1 143 143
** Gesamt ** 144
129
CLOSE ALL
WAIT WINDOW NOWAIT "Anzeige der der DTA-Diskette"
dta_file = GETFILE('', 'DTA-Datei waehlen',;
'',0)
IF NOT EMPTY(dta_file)
USE ..\dbf\dttest IN 0
ZAP
f_zeile=""
f_handle=FOPEN(dta_file)
DO WHILE .NOT. FEOF(f_handle)
f_zeile=FREAD(f_handle,128)
APPEND BLANK
REPLACE LEN WITH LEFT(f_zeile,4)
REPLACE satzart WITH SUBSTR(f_zeile,5,1)
REPLACE zeile WITH SUBSTR(f_zeile,6)
ENDDO
GO TOP
BROWSE
CLOSE DATABASES
CLEAR
DO hauptmsk.spr WITH "Hauptmen"
ENDIF && not empty(dta_file)
und hier die eigentliche dta schreibroutine ..
Text
PARAMETERS xmodus
* 29.06.94 / Folge-Stapel mit abarbeiten *************
EXTERNAL PROCEDURE janein
EXTERNAL PROCEDURE nxtwrkday
EXTERNAL PROCEDURE prt2spool
SET DATE GERMAN
SET CENTURY OFF
IF .NOT. USED("system")
SELECT 0
USE ..\dbf\system
GATHER MEMVAR
ENDIF
IF .NOT. USED("stapel")
SELECT 0
USE ..\dbf\stapel
ENDIF
IF .NOT. USED("beleg")
SELECT 0
USE ..\dbf\beleg
ENDIF
jndmgegenw=0
jneugegenw=0
jnanzscheck=0
f_handle=0
f_datei=""
f_datum=DATE()
f_zeit=TIME()
f_vvgnr=0
dta_satza=""
dat_satzc1=""
dta_satzc2=""
dta_satze=""
dt_datum=DTOC(system.l_datum)
asatzlen="0128"
asatzart="A"
asatzkz="LB"
asatz4=STR(system.rubinblzeu,8,0)
asatz5=STR(system.eigenblz,8,0)
asatz6=PADR(system.dtaa6,27,CHR(32))
asatz7=LEFT(dt_datum,2)+SUBSTR(dt_datum,4,2)+RIGHT(dt_datum,2)
asatz8=SPACE(4)
asatz9=system.dtaa9
asatz10=PADL(ALLTRIM(STR(stapel.nummer,10,0)),10,"0")
* "0000000000"
asatz11a1="BVS"
asatz11a2=SPACE(12)
asatz11b=SPACE(8)
asatz11c1=system.dtaalkpneu
asatz11c2=SPACE(8)
asatz11c3=SPACE(12)
asatz12="1"
csatzlen="0187"
csatzart="C"
csatzblz1=STR(system.eigenblz,8,0)
* "52020000"
cbskennz="3"
cfeld7=system.dtagk7
cfeld8=SPACE(1)
cfeld8=SPACE(1)
cfeld10=STR(system.eigenblz,8,0)
* "52020000"
cfeld12="00000000000"
cfeld13="000"
cfeld14a=system.dtac14alk
cfeld14b=SPACE(8)
cfeld15=PADR("SCHECK-NR. ",27,CHR(32))
cfeld16=SPACE(27)
cfeld17="1 "
cfeld18="00"
crest=SPACE(69)
esatzlen="0128"
esatzart="E"
eleer1=SPACE(5)
eanz=0
esume=0
esumd=0
esumkto=0
esumblz=0
efeld8=system.dtaec8
efeld9=system.dtaec9
stapel_satz=0
IF .NOT. m.glspooldrk
_PCOPIES=IIF(system.anz_dtalst>0,system.anz_dtalst,1)
SET PRINT ON
??? CHR(27)
??? "&l"
??? CHR(48+_PCOPIES)
??? "X"
ENDIF
SET PRINT OFF
ACTIVATE WINDOW bild
DO hauptmsk.spr WITH "Erstellung DTS-Lastschriften-Datei EUR"
IF xmodus .OR. janein("DTS-Diskette fuer beleglose EUR-Schecks erzeugen / weitermachen ?",.F.)
SELECT stapel
GO TOP
LOCATE FOR ((stapel.euro) .AND. stapel.bse_anz>0 .AND. (.NOT. stapel.dtaeausg))
IF FOUND()
f_vvgnr=stapel.nummer
f_handle=genfile()
IF f_handle>-1
WAIT WINDOW NOWAIT "Bitte warten "+f_datei+" wird erstellt"
DO machsatza
SELECT stapel
DO WHILE .NOT. EOF()
IF ((stapel.euro) .AND. stapel.bse_anz>0 .AND. (.NOT. stapel.dtaeausg))
WAIT WINDOW NOWAIT "Bitte warten S„tze aus Stapel "+STR(stapel.nummer)+" werden geschrieben"
SELECT beleg
LOCATE FOR beleg.stapref=stapel.nummer
IF FOUND()
DO WHILE .NOT. EOF()
IF beleg.stapref=stapel.nummer
IF ( (.NOT. beleg.kettsatz) .AND. (.NOT. beleg.bse) .AND. (.NOT. beleg.ubw))
DO machsatzc
REPLACE beleg.dta WITH .T.
ENDIF
ENDIF
IF EOF()
EXIT
ELSE
SKIP
ENDIF
ENDDO
SELECT stapel
stapel_satz=RECNO()
REPLACE stapel.dta_vvgnr WITH f_vvgnr
REPLACE stapel.dtaeausg WITH .T.
REPLACE stapel.dta_aanz WITH eanz
REPLACE stapel.dtaeadatei WITH f_datei
REPLACE stapel.dtaeauhrz WITH f_zeit
REPLACE stapel.dtaeadatum WITH f_datum
IF stapel.euro
REPLACE stapel.dta_asum WITH (esume*0.01)
ELSE
REPLACE stapel.dta_asum WITH (esumd*0.01)
ENDIF && stapel.euro
REPLACE stapel.dta_ablzsu WITH esumblz
REPLACE stapel.dta_aksum WITH esumkto
ENDIF
ENDIF
SELECT stapel
IF EOF()
EXIT
ELSE
SKIP
ENDIF
ENDDO
DO machsatze
DO machprot
DO machlogfile
ENDIF
ELSE
IF .NOT. xmodus
WAIT WINDOW "Keine Daten fr DTS-LB-EUR-Datei vorhanden" TIMEOUT 10
ENDIF
ENDIF
ENDIF
IF USED("system")
SELECT SYSTEM
USE
ENDIF
IF USED("stapel")
SELECT stapel
USE
ENDIF
IF USED("beleg")
SELECT beleg
USE
ENDIF
IF .NOT. xmodus
DO hauptmsk.spr WITH "Hauptmen"
KEYBOARD "{F10}"
ENDIF
RETURN
*!*****************************************************************************
*!
*! Prozedur: MACHSATZA
*!
*! Aufgerufen von: EDTSWRIT.PRG
*! : EDTSGKWR.PRG
*!
*!*****************************************************************************
PROCEDURE machsatza
! LABEL A:bse-gse
dta_satza=""
dta_satza=asatzlen+;
asatzart+;
asatzkz+;
asatz4+;
asatz5+;
asatz6+;
asatz7+;
asatz8+;
asatz9+;
asatz10+;
asatz11a1+;
asatz11a2+;
asatz11b+;
asatz11c1+;
asatz11c2+;
asatz11c3+;
asatz12
=FWRITE(f_handle,dta_satza,128)
RETURN
*!*****************************************************************************
*!
*! Prozedur: MACHSATZC
*!
*! Aufgerufen von: EDTSWRIT.PRG
*! : EDTSGKWR.PRG
*!
*!*****************************************************************************
PROCEDURE machsatzc
m.jndmgegenw=0
m.jneugegenw=beleg.dmbetr
dta_satzc2=""
dta_satzc1=csatzlen+;
csatzart+;
csatzblz1+STR(beleg.bblz,8,0)+;
PADL(ALLTRIM(STR(beleg.aufkto,10,0)),10,"0")+;
cbskennz+;
PADL(DTOS(DATE()),8,"0")+;
PADL(ALLTRIM(RIGHT(STR(beleg.belnr,11,0),3)),3,"0")+;
"0"+;
beleg.ts+;
beleg.tserg+;
cfeld8+;
PADL(ALLTRIM(STR(m.jndmgegenw,11,0)),11,"0")+;
cfeld10+;
PADL(ALLTRIM(STR(beleg.bankkto,10,0)),10,"0")+;
PADL(ALLTRIM(STR(beleg.dmbetr,11,0)),11,"0")+;
cfeld13+;
cfeld14a+;
cfeld14b
=FWRITE(f_handle,dta_satzc1,128)
cfeld15="SCHECK-NR. "+PADL(ALLTRIM(STR(beleg.mehrzwf,13,0)),13,"0")
dta_satzc2=PADR(cfeld15,27,CHR(32))+;
cfeld16+;
cfeld17+;
cfeld18+;
crest
=FWRITE(f_handle,dta_satzc2,128)
eanz=eanz+1
esume=esume+beleg.dmbetr
*
esumkto=esumkto+beleg.aufkto
esumblz=esumblz+beleg.bblz
RETURN
*!*****************************************************************************
*!
*! Prozedur: MACHSATZE
*!
*! Aufgerufen von: EDTSWRIT.PRG
*! : EDTSGKWR.PRG
*!
*!*****************************************************************************
PROCEDURE machsatze
esumd=0
dta_satze=""
dta_satze=esatzlen+;
esatzart+;
eleer1+;
PADL(ALLTRIM(STR(eanz,7,0)),7,"0")+;
PADL(ALLTRIM(STR(esumd,13,0)),13,"0")+;
PADL(ALLTRIM(STR(esumkto,17,0)),17,"0")+;
PADL(ALLTRIM(STR(esumblz,17,0)),17,"0")+;
PADL(ALLTRIM(STR(esume,13,0)),13,"0")+;
efeld9
=FWRITE(f_handle,dta_satze,128)
=FCLOSE(f_handle)
RETURN
*!*****************************************************************************
*!
*! Prozedur: MACHPROT
*!
*! Aufgerufen von: EDTSWRIT.PRG
*! : EDTSGKWR.PRG
*!
*! Ruft auf: PRT2SPOOL() (Funktion in WIHAMAIN.PRG)
*!
*!Berichtsvorlagen: EDTALST.FRX
*! : EDTAGSLS.FRX
*!
*!*****************************************************************************
PROCEDURE machprot
SELECT stapel
GO stapel_satz
IF .NOT. m.glspooldrk
IF (.NOT. PRINTSTATUS() .OR. SYS(13)="OFFLINE")
WAIT WINDOW "Der Drucker ist nicht bereit "
ENDIF
WAIT CLEAR
WAIT WINDOW NOWAIT ".....Drucke Begleitzettel"
REPORT FORM ..\rep\edtalst NOCONSOLE NEXT 1 TO PRINT
WAIT CLEAR
WAIT WINDOW NOWAIT "Druck des Begleitzettels beendet ..bel. Taste"
ELSE
REPORT FORM ..\rep\edtalst NOCONSOLE NEXT 1 TO FILE ..\spool\edtalst.spl
=prt2spool("edtalst.spl")
ENDIF
RETURN
*!*****************************************************************************
*!
*! Funktion: GENFILE()
*!
*! Aufgerufen von: EDTSWRIT.PRG
*! : EDTSGKWR.PRG
*!
*! Ruft auf: JANEIN() (Funktion in ?)
*!
*! Andere Dateien: F_DATEI
*!
*!*****************************************************************************
FUNCTION genfile
=janein("Bitte DTS-Lastschriften-Diskette EUR einlegen / fertig ?",.F.)
SELECT SYSTEM
REPLACE system.ldtaadat WITH DATE()
REPLACE system.ldtaauhr WITH TIME()
f_zeit=TIME()
f_datum=DATE()
f_datei=ALLTRIM(system.dtselkfile)
RETURN FCREATE(f_datei,0)
*!*****************************************************************************
*!
*! Prozedur: MACHLOGFILE
*!
*! Aufgerufen von: EDTSWRIT.PRG
*! : EDTSGKWR.PRG
*!
*! Andere Dateien: DTSELKLO.TMP
*! : DTSEGKLO.TMP
*!
*!*****************************************************************************
PROCEDURE machlogfile
* schreibt Logfile
* damit bei Tagesabschluá erkannt wird ob DTA-Diskette erzeugt wurde
PRIVATE pnhandle
pnhandle=FCREATE("..\dbf\DTSeLKLO.tmp",0)
IF pnhandle>-1
=FPUTS(pnhandle,"DTADATEI erstellt am "+DTOS(DATE()))
=FCLOSE(pnhandle)
ENDIF pnhandle>-1
RETURN
*: EOF: EDTSWRIT.PRG
Text
Text