Pristup ne radi učitavanje za 1 s. Izvorni kod funkcije za stvaranje datoteke baze podataka

Karakteristike:

  1. Datoteka baze podataka može se kreirati odvojeno od podataka.
  2. Tablica u datoteci baze podataka može se kreirati odvojeno od podataka.
  3. Tipovi podataka pretvaraju se kako bi bili kompatibilni sa pristupom.
  4. Vrijednosti jednake praznom nizu datuma pretvaraju se u nulu.
  5. Neprimitivni i nenizni tipovi podataka (referenca) skraćeni su na 255 znakova.
  6. Tipovi podataka niza prilagođavaju se duljini niza radi uštede prostora.
  7. Znak s jednim navodnikom 'zapisat će se u bazu podataka pomoću funkcije char () upita.
  8. Automatsko dodavanje primarnog indeksa (broj redova).

Ograničenja:

  1. Radi samo s tablicom vrijednosti kao izvor podataka.
  2. Mehanizam radi samo u režimu debelog klijenta. To je zbog korištenja ADO biblioteke i tablice vrijednosti istovremeno.
  3. Rad je moguć samo na Windows sistemima.

Sam mehanizam sastoji se od tri bloka:

  1. Funkcija kreiranja datoteke baze podataka.
  2. Funkcija kreiranja tablice baze podataka.
  3. Funkcija upisivanja podataka u tablicu baze podataka.

Šematski, mehanizam izgleda ovako:

Izvorni kod funkcije za stvaranje datoteke baze podataka:

// funkcija kreira nova datoteka DB s mogućnošću prepisivanja starog // Parametar // Parametar 2: boolean - zastavica prepisivanja ako datoteka baze podataka već postoji // vraća 0 nakon uspješnog završetka, a ne 0 ako funkcija zakaže Funkcija CreateFileAxes (Ime datoteke vrijednosti, vrijednost OverwriteFile \u003d True) // Provjeri je li naziv datoteke valjan Ako je EmptyString (Ime datoteke), onda Return - 2; U suprotnom // analiziramo lokaciju datoteke na disku Ako je OverwriteFile onda Datoteka \u003d Nova datoteka (Ime datoteke); If File. Postoji () Tada je datoteka \u003d Nedefinirano; DeleteFiles (Ime datoteke); EndIf; EndIf; EndIf; Stanje(" Stvorena je pristupna datoteka:"+ Ime datoteke); // kreiramo ljusku baze podataka Pokušaj ADOX \u003d Novi COMObject ("ADOX ... Katalog"); Izvještaj o izuzeću (" "+ Simboli. Podstanica + OpisErrors ()); EndTry; // Povezivanje s novostvorenom bazom podataka ConnectionString \u003d "Provider" "" + FileName + "" ""; // povezivanje pokušaja ADOH. Kreiraj (ConnectionString); Iznimka Izvještaj (" Generiranje datoteke podataka nije uspjelo. Prilikom kreiranja ADOX objekta. Katalog dogodila se greška!"+ Simboli. PS + OpisErrors ()); Povratak - 1; Kraj pokušaja; ADOC. ActiveConnection. Zatvori (); ADOC \u003d Nedefinirano; Povratak 0; EndFunction

Funkcija prima 2 parametra:

  1. Ime buduće datoteke baze podataka je niz. Ovo je puna staza do datoteke, ako je ne proslijedite, postupak će izaći.
  2. Datoteka za prepisivanje je logička. Ovo je logička zastava koja koristi mehanizam za prepisivanje datoteka.

Prvo se provjerava puno ime datoteke. Nadalje, razrađen je mehanizam prepisivanja datoteke. Ako je potrebno, postojeća datoteka se briše. Nakon čega postupak prelazi na stvaranje prazna datoteka DB. To se radi pomoću objekta ADOX.Catalog. Da biste analizirali zamršenost rada ADOX.Catalog, preporučujem potragu za relevantnim informacijama na Microsoftovoj web lokaciji.

Drugi "zupčanik" mehanizma za istovar u pristupu implementira stvaranje tablice u datoteci baze podataka. Za kreiranje tablica koristi se isti ADOX.Catalog objekt.

Izvorni kod procedure za stvaranje nove tablice u bazi podataka:

// Parametar 1: niz - puno ime datoteka baze podataka // Parametar 2: Tabela vrijednosti - Tabela s podacima za preuzimanje // Parametar 3: struktura - opis tablice koja se kreira (možete je formirati pomoću funkcije: CompositeStructureDescriptionFields) // Vraća 0 nakon uspješnog završetka, a ne 0 ako funkcija zakaže Funkcija EnterDataTable (Value FileName, ValueDataTable, ValueDescriptionTable) ConnectionString \u003d "Provider \u003d Microsoft. Jet. OLEDB. 4. 0; Izvor podataka \u003d"" "+ Ime datoteke +" "" ; Jet OLEDB: Tip motora \u003d 5;"; Connector \u003d Novi COMObject (" ADODB ... Veza"); Connector. ConnectionString \u003d ConnectionString; // Connector Pokušaj povezivanja. Open (); Izvještaj o izuzeću (" Otvaranje DB datoteke nije uspjelo!"); Izvještaj (Opis pogreške ()); Povratak - 1; Završni pokušaj; Status (" Tabelu popunjavam podacima:"+ Opis tablice. Naziv tablice); // DB naredbeni objekt Com \u003d Novi COMObject ("ADODB ... Komanda"); Com. ActiveConnection \u003d Konektor; // konstanta 1 znači "upit", postoje i prikazi i pohranjene procedure Com. CommandType \u003d 1; LineCount \u003d 1; Za svaki red TZ iz ciklusa tablice podataka ProcessUser Interrupt (); // petlja kroz stupce podataka FieldList \u003d Format (Brojač linija, "CH = " ) + " , "+ Simboli. PS; LineCounter \u003d LineCounter + 1; ColumnCount \u003d 0; Za svaki stupacTZ iz tablice podataka. Ciklus stupaca TekValue \u003d StringTZ [ColumnTZ. Name]; Opis polja \u003d Opis tablice. Opis polja. Get (ColumnCounter); // raščlanimo tip podataka Ako polje Opis. Type \u003d " 3 "Zatim // cijeli broj TekValue \u003d? (TekValue \u003d , 0, TekValue); FieldList \u003d FieldList + Format (TekValue," CHN \u003d null; ChG \u003d" ) + " , 5 "Tada je // broj razlomak // pretvara nulu u 0 jer je daljnja funkcija Format () ne pretvara ispravno TekValue \u003d? (TekValue \u003d , 0, TekValue); FieldList \u003d FieldList + Format (TekValue, "RHD \u003d. ; CHN \u003d null; ChG \u003d" ) + " , "+ Simboli. PS; Opis polja ElseIf. Tip \u003d" 7 "Zatim // datum TekValue \u003d? (TekValue \u003d ," 00010101 " , TekValue); Ako je TekValue \u003d " 00010101 " Tada je ModValue \u003d " null"; Inače ModValue \u003d" "" + Format (TekValue, "DLF \u003d DT") +" ""; EndIf; FieldList \u003d FieldList + ModValue + " , "+ Simboli. PS; Opis polja ElseIf. Tip \u003d" 11 "Zatim // boolean TekValue \u003d? (TekValue \u003d , False, TekValue); FieldList \u003d FieldList + Format (TekValue," BL \u003d false; BI \u003d tačno" ) + " , "+ Simboli. PS; Opis polja ElseIf. Tip \u003d" 202 "Zatim // niz TekValue \u003d? (TekValue \u003d ," ", TekValue); ValueString \u003d Leo (TekValue, 255); Ako je EmptyString (ValueString), onda FieldList \u003d FieldList +" ,"+ Simboli. PS; Inače ModValue \u003d StrReplace (ValueString," "", "" + chr () + " "); ListFields \u003d ListFields +" "" + Kratica (Leo (ModValue, 255)) + "" , "+ Znakovi. PS EndIf; ElseIf FieldDescription. Type \u003d" 203 "Zatim // niz Ako je EmptyString (ValueString) Tada FieldList \u003d FieldList +" ,"+ Simboli. PS; Inače ModValue \u003d StrReplace (TekValue," "", "" + chr ("+ CharacterCode (" "") + " ) + " "); ListFields \u003d ListFields +" "" + ModValue + "" , "+ Simboli. PS EndIf; EndIf; ColumnCounter \u003d ColumnCount + 1; EndCycle; // obrezati zadnju zarez FieldList \u003d Leo (FieldList, StrLength (FieldList) - 2); QueryText \u003d "INSERT INTO" + TableDescription. TableName + "VRIJEDNOSTI ( "+ FieldList +" ) "; Naredba. CommandText \u003d Tekst zahtjeva; Pokušaj. Naredba. Izvrši (); Izvještaj o izuzeću (" Pogreška pri upisivanju podataka!"+ Simboli. PS +" Tekst zahtjeva: "+ Tekst zahtjeva + Simboli. PS + Opis greške ()); Povratak - 2; EndTry; EndCycle; // zatvaranje veze Com. ActiveConnection. Zatvori (); Kvrga \u003d neodređeno; Konektor \u003d Nedefinirano; Povratak 0; EndFunction

Funkcija prima 3 parametra:

  1. StructureDescriptionTables - struktura koja sadrži opis same tablice i njenih polja. Formirano pomoćnom funkcijom, koju ću dati u nastavku.
  2. FileName - naziv niza datoteke baze podataka.
  3. DeleteExistingTable je potvrdni okvir koji određuje ponašanje funkcije u odnosu na postojeće istoimene tablice.

Nakon primanja kontrole, funkcija otvara datoteku baze podataka. Ako je veza uspješna, kreira se objekt "ADOX.Catalog" (katalog tablice), koji prije svega provjerava postojanje tablice u skladu s parametrom funkcije # 3. Sljedeća akcija stvara novi sto... U tablicu se dodaje ključno polje (indeks). Dalje, na osnovu parametra funkcije # 2, kreiraju se polja tablice odgovarajućih tipova. Po završetku novostvorena tablica se katalogizira i veza se zatvara.

Naravno, ručno prikupljanje parametra funkcije # 2 prilično je dugotrajno, radi lakšeg korištenja napisao sam funkciju koja na temelju tablice vrijednosti s podacima oblikuje strukturu opisa tablice.

Izvorni kod funkcije koja sačinjava strukturu opisa polja:

// pomoćna funkcija za porcioniranje strukture opisa polja // Parametar 1: Tabela vrijednosti - Tabela s podacima za istovar // Parametar 2: string - puno ime tablice (ne smije sadržavati nedozvoljene znakove: ",.) // Vraća strukturu opisa tablice Funkcija ComposeFieldDescriptionStructure (ValDataTable, ValueTableName) DescriptionStructure \u003d Nova struktura ("TableName , Opis Polja"); DescriptionStructure. TableName \u003d TableName; DescriptionStructure. FieldsDescription \u003d Novi niz; // prolazimo kroz stupce tablice vrijednosti Za svaki stupac TZ iz tablice podataka. Struktura petlje stupacaFieldProperty \u003d Nova struktura ("Ime , Vrsta, dužina, sinonim"); ColumnValueType \u003d ColumnTZ .ValueType; StringLength \u003d ColumnValueType .StringQualifiers. Length; // provjera tipova sadržanih u koloni // bilo koji složeni tip bit će niz Ako je ValueType vrsta Stupac. Tipovi (). Broji ()\u003e 2 Zatim FieldPropertyStructure. Ime \u003d Kolona TK. Ime; StructureFieldProperty. Type \u003d " 202 "; // adVarWChar, tip FieldPropertyStructure. Dužina \u003d 255; FieldPropertyStructure. Sinonim \u003d TK stupac. Zaglavlje; InačeIf ColumnValueType. ContainsType (Type (" Linija")) Zatim FieldPropertyStructure. Name \u003d TK stupac. Ime; IfStringLength \u003d 0 Tada FieldPropertyStructure. Type \u003d" 203 " ; // adLongVarWChar ("memo"), upišite 203 [Unicode tekstualni tok (DT_NTEXT)]202 "; // adVarWChar, upišite 202 [255 znakova Unicode niz (DT_WSTR)] //StructureFieldProperty.Length \u003d? (StringLength 0 Tada // greška u uređivaču članaka prilikom lijepljenja koda, ne može ga popraviti, pogledajte obradu StructurePropertyField. Type \u003d " 5 "; // adDouble, upišite 5 Inače, FieldPropertyStructure. Type \u003d " 3 "; // adInteger, upišite 3 EndIf; ElseIfColumnValueType. ContainsType (Type ("Boolean")) ThenStructureFieldProperty. Ime \u003d Kolona TK. Ime; StructureFieldProperty. Type \u003d " 11 "; // adBoolean, tip 11 StructurePropertyField. Dužina \u003d Nedefinirano; StructureFieldProperty. Sinonim \u003d Kolona TK. Naslov; ElseIfColumnValueType. ContainsType (Type ("Date")) Zatim FieldPropertyStructure. Ime \u003d Kolona TK. Ime; StructurePropertyField. Type \u003d " 7 "; // adDate, upišite 7 StructureFieldProperty. Dužina \u003d Nedefinirano; StructurePropertyField. Sinonim \u003d Stupac TK. Naslov; Inače, FieldPropertyStructure. Ime \u003d Kolona TK. Ime; StructureFieldProperty. Type \u003d " 202 "; // adVarWChar, upišite 202 [255 znakova Unicode niz (DT_WSTR)] StructureFieldProperty. Dužina \u003d 255; StructurePropertyField. Sinonim \u003d Stupac TK. Naslov; EndIf; Opis strukture. Opis polja. Dodaj (FieldPropertyStructure); Kraj ciklusa; Opis strukture povrata; EndFunction

Funkcija prima 2 parametra:

  1. DataTable je tablica vrijednosti s podacima. Iz ovog parametra funkcija oblikuje opis tipova podataka budućih polja. Preporučujem kreiranje ove tablice vrijednosti putem upita, jer će se u ovom slučaju otkucati sva TK polja.
  2. TableName - naziv niza buduća tablica pristup.

U početku se kreira struktura s opisom same baze podataka, nakon čega se dodaje niz koji će sadržavati druge strukture s opisom polja. Tijekom petlje kroz stupce tablice vrijednosti popunjava se niz opisa polja. Struktura opisa polja sadrži 4 glavna svojstva:

  1. Ime - niz imena budućeg polja. Ne smije sadržavati razmake ili nekompatibilne znakove. Ako s upitom formirate tablicu vrijednosti, tada ne bi trebalo biti problema, ali u slučaju samostalnog popunjavanja tablice vrijednosti odgovornost je u potpunosti na vama.
  2. Tip je string, to je Microsoftova konstanta. U našem slučaju koriste se samo: cijeli broj, razloženi broj, niz (različitih dužina), logička vrijednost i datum.
  3. Dužina je broj za tipove nizova.
  4. Sinonim - niz, tekstualni opis polja.

Nakon završetka formiranja strukture, ona se vraća.

Napokon, možete prijeći na funkciju koja zapisuje podatke u tablicu baze podataka. U ovoj funkciji, moglo bi se reći, koncentrirana je srž funkcionalnosti cijelog mehanizma. Na ovaj način, ovu funkciju je najteže, ali to vas ne bi trebalo uplašiti. Programer je programer jer razvija analitički način razmišljanja.

Izvorni kod funkcije koja unosi podatke u tablicu:

// funkcija ubacuje podatke u tablicu // Parametar 1 : string - puno ime datoteke baze podataka // Parametar 2 : Tablica vrijednosti - Tabela s podacima za istovar // Parametar 3 : struktura - opis tablice koja se kreira (možete je stvoriti pomoću funkcije: CompositeStructureDescriptionFields) // Povratak 0 u slučaju uspješnog završetka posla i ne 0 ako funkcija zakaže Funkcija Tabela unosa podataka (Značenje Ime dokumenta , Značenje Tabela podataka , Značenje Tabele opisa ) StringConnection = " Provider = Microsoft . Jet . OLEDB . 4 . 0 ; Izvor podataka = " " " + Ime dokumenta + " " " ; Jet OLEDB: Tip motora = 5 ; " ; // objekt odgovoran za komunikaciju s bazom podataka Konektor = Novo COM objekt (" ADODB . Veza" ) ; Konektor . ConnectionString = StringConnection ; // povezivanje Pokušaj Konektor . Otvori () ; Izuzetak Prijaviti (" Ne uspio otvoriti datoteku baze podataka!" ) ; Prijaviti (OpisPogreške () ) ; Povratak - 1 ; Kraj pokušaja; stanje (" Tabelu popunjavam podacima:" + Tabele opisa . NameTable ) ; // DB naredbeni objekt Gruda = Novo COM objekt (" ADODB . Komanda" ) ; Gruda . ActiveConnection = Konektor ; // konstanta 1 znači "upit", postoje i prikazi i pohranjene procedure Gruda . CommandType = 1 ; CounterStrings = 1 ; Za Svaka linija TK Of Tabela podataka Ciklus Rukovanje korisničkim prekidima () ; // petlja kroz stupce podataka ListFields = Format (CounterStrings , " ChG = " ) + " , " + Simboli . PS ; CounterStrings = CounterStrings + 1 ; Brojač stupaca = 0 ; // petlja za formiranje liste polja Za Svaka kolona Of Tabela podataka . Zvučnici Ciklus TekValue = String TK [ Stupac TZ . Ime ] ; Opis Polja = Tabele opisa . Opis Polja . Uzmi (Brojač stupaca ) ; // raščlanimo tip podataka Ako Opis Polja . Tip = " 3 " Onda // cijeli broj ListFields = ListFields + Format (TekValue , " CHN = null; ChG = " ) + " , " + Simboli . PS ; Inače, ako Opis Polja . Tip = " 5 " Onda // razlomak broja ListFields = ListFields + Format (TekValue , " CRD = . ; CHN = null; ChG = " ) + " , " + Simboli . PS ; Inače, ako Opis Polja . Tip = " 7 " Onda // datum Ako TekValue = "00010101 " Onda Mod Value = " null" ; U suprotnom Mod Value = " " " + Format (TekValue , " DLF = DT" ) + " " " ; Kraj ako; ListFields = ListFields + Mod Value + " , " + Simboli . PS ; Inače, ako Opis Polja . Tip = " 11 " Onda // boolean ListFields = ListFields + Format (TekValue , " BL = lažno; BI = tačno" ) + " , " + Simboli . PS ; Inače, ako Opis Polja . Tip = " 202 " Onda // linija ValueString = lav (TekValue , 255 ) ; Ako Prazan red (ValueString ) Onda ListFields = ListFields + " null, " + Simboli . PS ; U suprotnom // Pojedinačni navodnik je poseban znak u sql-u // transformiramo ovaj znak kroz kod Mod Value = PageReplace (ValueString , " " " , " " + chr (" + Kod simbola (" " " ) + " ) + " " ) ; ListFields = ListFields + " " " + SokrLP (lav (Mod Value , 255 ) ) + " ", " + Simboli . PS Kraj ako; Inače, ako Opis Polja . Tip = " 203 " Onda // linija Ako Prazan red (ValueString ) Onda ListFields = ListFields + " null, " + Simboli . PS ; U suprotnom Mod Value = PageReplace (TekValue , " " " , " " + chr (" + Kod simbola (" " " ) + " ) + " " ) ; ListFields = ListFields + " " " + Mod Value + " ", " + Simboli . PS Kraj ako; Kraj ako; Brojač stupaca = Brojač stupaca + 1 ; Kraj ciklusa; // Za svaki stupac TZ iz tablice podataka. Petlja stupaca // obrezati zadnju zarez ListFields = lav (ListFields , Str Length (ListFields ) - 2 ) ; // konačno formiranje testa zahtjeva Tekst zahtjeva = " INSERT INTO" + Tabele opisa . Naziv tabele + " VRIJEDNOSTI (" + ListFields + " ) " ; Gruda . CommandText = Tekst zahtjeva ; // upisivanje podataka u bazu podataka (izvršavanje upita) Pokušaj Gruda . Izvršiti() ; Izuzetak Prijaviti (" Pogreška pri upisivanju podataka!" + Simboli . PS + " Tekst zahtjeva:" + Tekst zahtjeva + Simboli . PS + OpisErrors () ) ; Povratak - 2 ; Kraj pokušaja; Kraj ciklusa; // Za svaki niz TZ iz petlje podataka // zatvaranje veze Gruda . ActiveConnection . Zatvori () ; Gruda = Nedefinisano; Konektor = Nedefinisano; Povratak 0 ; EndFunction

Funkcija prima 3 parametra:

  1. FileName - string je ime datoteke baze podataka.
  2. DataTable - tablica vrijednosti koja sadrži podatke.
  3. DescriptionTables je struktura koja opisuje polja tablice i ime.

Za rad s bazom podataka kreira se već poznata veza. Nakon povezivanja kreiramo objekt koji je odgovoran za izvršavanje sql uputa. Dalje, organiziramo petlju kroz retke tablice vrijednosti (parametar funkcije # 2) i ugniježđenu petlju kroz stupce tablice. Broj redova koristit će se za indeksiranje redaka. Brojač stupaca koristit će se za traženje opisa polja u strukturi opisa tablice (parametar 3). Prolazeći kroz stupce sljedećeg reda, analiziramo njihove tipove (prema opisu tablice) i izvodimo odgovarajuće transformacije. Kao rezultat, imamo gotovu sql naredbu za upisivanje reda u bazu podataka. Primjenjujemo primljeni sql izraz pomoću objekta ADODB.Command. Na kraju postupka zatvorite veze i očistite memoriju.

Nažalost, na ovoj web lokaciji nisam mogao priložiti obradu za debelog klijenta koji može prenijeti bilo koji direktorij u pristupnu bazu podataka. Ali možete ga preuzeti na Yandex disku: http://yadi.sk/d/UzK_PAsJ3vjTS ... Ova obrada uključuje sve detalje univerzalnog mehanizma za istovar. Naravno, ova obrada nije ograničena na ovaj mehanizam. Može se sigurno kopirati i u zasebni modul i u vaše vlastite tretmane. Ne isključujem pogrešne situacije koje mogu dovesti do pada pada, ali ovo nije komercijalni projekt. Možete slobodno mijenjati ovaj mehanizam kako bi odgovarao vašim potrebama. Ispod su 2 dodatka koji opisuju adox konstante. Nadam se da će vam ovaj mehanizam biti koristan. Želim vam svaki uspjeh na vašem profesionalnom polju!

Spisak dodatnih svojstava polja pristupne tablice u Dodatku 1:

AutoIncrement

Određuje tip polja Brojač koji se automatski uvećava kada se doda zapis.

Zadano

Zadana vrijednost polja.

Opis

Opis polja.

Fiksna dužina

Određuje da li je polje fiksne dužine ili promenljivo.

Povećanje

Vrijednost za koju će se povećati polje tipa "brojač".

Nullable

Određuje može li polje sadržavati nikakvu vrijednost, drugim riječima, treba li to polje biti potrebno.

Sjeme

Vrijednost od koje započinje brojanje u prvom zapisu za polje tipa "brojač".

Jet OLEDB: Dozvoli nultu dužinu

Određuje mogu li tekstualna polja sadržavati nizove nulte dužine. Zanemareno za polja bez znakova.

Jet OLEDB: AutoGenerate

Određuje da li se nova vrijednost GUID automatski generira za polja tipa adGUID.

Jet OLEDB: Pravilo za provjeru valjanosti stupaca

Izraz koji određuje ispravnost vrijednosti zapisane u polju mora biti napisan u SQL WHERE formatu, ali bez ključna riječ GDJE.

Jet OLEDB: Tekst za provjeru stupca

Tekst koji će se prikazati ako vrijednost unesena u polje ne odgovara pravilu definiranom za ovo polje (pravilo).

Jet OLEDB: Stisnute UNICODE žice

Određuje hoće li Microsoft Jet komprimirati UNICODE nizove kada se zapiše na disk. Zanemaruje se ako baza podataka nije u microsoft format Jet verzija 4.0.

Jet OLEDB: Hiperveza

Navodi da su podaci u polju hiperveza. Zanemarena za polja koja nisu adLongVarWChar.

Jet OLEDB: IISAM nije poslednja kolona

Za Instalable-ISAM-ove, ovo svojstvo obavještava I-ISAM da postoji više stupaca koji će se dodati u tablicu nakon ovog. Ako koristite ITableDefinition :: AddColumn ili ITableDefintion :: CreateTable, potrebno je da postavite ovo svojstvo za svaku.

Jet OLEDB: Jedan BLOB po stranici

Određuje da li podatke treba pohraniti na zasebne stranice (True) ili može koristiti stranice dijeljene baze podataka za uštedu prostora na disku. Radi samo s poljima tipa adLongVarBinary.

Dodatak 2 lista tipova vrijednosti koji se koriste u ADOX-u

adDouble, tip 5 - razlomak broja

adDate, tip 7 - datum / vrijeme

adCurrency, tip 6 - cijeli broj

adInteger, tip 3 - nepotpisani cijeli broj

adBoolean, tip 11 - logički

adVarWChar, tip 202 - unicode niz od 255 znakova

adLongVarWChar ("memo"), tip 203 - unicode niz neograničen niz

Nedavno sam trebao istovariti sve podatke iz jedne jednostavne Accessove baze podataka u samonapisanu konfiguraciju (1C: Enterprise. Nije bilo mnogo podataka za prijenos i, u principu, bilo je moguće taj fascinantni postupak preuzeti korisniku, ali odlučio sam pomoći već zaposlenim zaposlenima.

Pomoć se sastojala u potpunoj automatizaciji ovog procesa. Morao sam napisati jednostavnu obradu koja je sve napravila u nekoliko sekundi. Prije ovog zadatka nisam morao raditi s gomilom 1C + Accessa, pa sam prije nego što sam uhvatio tipkovnicu i počeo lupati kôd, odlučio pročitati priručnike.

Od samog početka znao sam da će sve interakcije biti korištenje odgovarajućih pružatelja usluga, ali ipak sam odlučio istražiti primjere.

Dugo sam razmišljao u kojem ću ključu napisati ovu bilješku. Kao rezultat toga, odlučio sam se na najjednostavniju opciju - dati kod svog rješenja. Možda nije baš optimalno, ali za većinu zadataka je i više nego dovoljno.

Pa, krenimo gledati sve po redu. Kreiramo novu obradu i na nju bacimo jednu komponentu - "TableField". Rastegnuo sam ovu komponentu po cijelom obliku. Kao rezultat, moj obrazac je dobio oblik kao na slici 1.


Slika 1. Oblik obrade

Na ovome možemo pretpostaviti da je dizajn obrasca spreman. Nećemo ručno stvarati stupce, već ćemo ovu proceduru izvoditi dinamički. Srećom nije teško. Stvorite OnClick rukovatelj događajima za dugme Pokreni i u njega napišite sljedeći kôd:

// Obrišite polje tablice TableField1.Clear (); TabularField1.Columns.Clear (); // Pripremamo niz veze s MS Accessom // Put do baze podataka naznačen je na samom kraju ConnectionString \u003d "Provider \u003d Microsoft.Jet.OLEDB.4.0; Izvor podataka \u003d" + "C: \\ mydb.mdb"; ConnectionWithBase \u003d Novi COMObject ("ADODB.Connection"); // ConnectConnectionWithBase.Open (ConnectionString); // Nabavite skup zapisa iz tablice demo_table RecordsCollection \u003d Novi COMObject ("ADODB.Recordset"); CollectionRecords.Open ("select * from demo_table", ConnectionWithBase, 1); // čitanje strukture polja tablice // U tablici vrijednosti stvorite sve stupce koji se nalaze u tablici Access ". Za count \u003d 0 po Records Collection.Fields.Count - 1 Loop TableField1.Columns. Dodaj (" Column "+ nr, Line (Collection Collection) .Fields.Item (sč) .Name)); End of Loop; // Pomaknite marker na prvi zapis zbirke zapisa.MoveFirst (); // pročitajte podatke iz tablice // i dodajte ih u zbirku TK NOT RECORD. EOF Loop NewRow \u003d TableField1. Dodaj (); Za count \u003d 0 po RecordsCollection.Fields.Count - 1 petlja NewRow ["Stupac" + nt] \u003d RecordsCollection.fields (TabularField1.Columns [nr] .Header) .Value; Kraj petlje; RecordsCollection.MoveNext (); EndCycle; // Prikazivanje podataka iz TK u elementima TabularFieldForm.TableField1.Value \u003d TabularField1; FormFields.TableField1.Create Columns ();

Kôd nije prevelik, ali dovoljno koristan. Nisam se vezao za određenu strukturu. Kod izvrsno funkcionira na širokom izboru tablica. Nemam više šta da dodam, pa se opraštam

Ukratko - ništa. U svemu povezanom s interakcijom s državnim agencijama (bilo da se radi o porezu, računovodstvu, svim vrstama plaćanja akciza itd.), 1C ne može se ničim zamijeniti, a pokušaji da se to učini u najmanju ruku su nekonstruktivni.

Ali nemojte prestati čitati ovaj članak, to još nije glavna ideja. Glavna je ne upasti u logičku zamku i ne smatrati 1C potpuno neophodnim u bilo kojem dijelu automatizacije svih procesa u poduzeću. Ovdje se ima oko čega raspravljati i ponuditi. Želim vam reći o jednom uspješnom iskustvu u automatizaciji različitih aspekata poslovnih aktivnosti računarske kompanije i, naravno, o integraciji ovog rješenja sa 1C. Rad je izrastao iz potrebe za povezivanjem samorazvijenog sistema s programom 1C, ali ovaj pristup (podjela na 2 softverska bloka) može se razviti do punopravne filozofije izgradnje informacijskog sistema uopće.

U početku je zadatak bio sljedeći. Zapisan je korporativni sistem automatizacije Microsoft Access... Tokom dugih godina svog razvoja apsorbirao je gotovo sve svakodnevne zadatke - održavanje banke, obračun, sastavljanje knjigovodstvenih dokumenata za otpremu, održavanje skladišta, knjiženje komponenata za serijski brojevi, izrada tehnološke mape za proizvodnju itd. Nedavno su dodane mogućnosti sistema: stvaranje bankarskih plaćanja direktno na osnovu dolaznih računa, automatsko generiranje cjenici u različitim formatima za objavljivanje na web resursima, ažuriranje web stranice kompanije i priprema ugovora na osnovu postojećih obrazaca (tzv. automatizacija ureda). Plus prisustvo velike količine analitike i održavanje cjelokupnog upravljačkog računovodstva. Sve je to sistem učinilo apsolutno nezamjenjivim - prijenos sve ove funkcionalnosti na 1C oduzeo bi puno vremena i novca.

S druge strane, program 1C-Enterprise služio je samo potrebama računovodstvenog odjela za održavanje BU i NU i podnošenje izvještaja. Dakle, 1C je "odvojen" od svakodnevnog funkcionisanja kompanije, a izvršeni dokumenti su naknadno uneseni u bazu podataka.

Zašto je takva šema dobra? Postoji nekoliko prednosti:
- neprimanje menadžera i drugih (bez) odgovornih osoba u „svetinju nad svetinjama“ - računovodstvenu bazu, koju bi trebali formirati samo zaposleni koji imaju razumijevanja za tu temu; tačno održavanje referentnih knjiga,
- vađenje iz 1C svega što s tim nema nikakve veze: od upravljačkih zadataka koji ne zahtijevaju refleksiju u računovodstvu, do bilo kojih drugih točaka koje su specifične za kompaniju i kojima autsajderi ne bi trebali pristupiti,
- ušteda na licencama: poslovi 1C koštaju puno novca,
- važna stvar: kada implementirate svu gore opisanu dodatnu funkcionalnost izravno "unutar" 1C, postoji stalna potreba za njenim usavršavanjem kada se objave ažuriranja proizvoda. To, naravno, garantira gotovo stalno zapošljavanje 1C programera, ali ovo je mjesto na kojem možete značajno uštedjeti novac.

Pa, smjeli minus je, naravno, potreba za ponovnom provjerom svih dokumenata i popunjavanjem direktorija.

Zapravo, ovo je bio glavni zadatak - pobjeći od dvostrukog rada.

Prvo se trebate pozabaviti svim vrstama referentnih knjiga - prije svega, ovo je referentna knjiga izvođača i nomenklature. Problem sinhronizacije direktorija, koji se tako često javlja u programima ove vrste, dovoljno je razrađen i shvaćen u implementaciji. Međutim, u ovom slučaju donesena je voljna odluka da se ne koriste 2 direktorija s međusobnom sinhronizacijom, već da se ima jedna originalna verzija - ona koja je uključena u MS Access i jednostavno je replicirate u 1C ( povratne informacije je samo oznaka u MS Accessu da je ovaj položaj već ispražnjen).
Ovaj pristup znatno pojednostavljuje zadatak. Za čisto računovodstvene potrebe potrebno je vrlo malo pozicija u takvim direktorijima - a postavljene su i u vanjskom programu kako ne bi kršile formulirani princip. Tako možete ukloniti još jedan čest problem - neizmjerna inflacija referentne knjige korištene nomenklature. Ispod je grupa proizvoda "Monitori"

Učitavanje takvog užasa u direktorij 1C (a novi modeli monitora pojavljuju se gotovo svake sedmice) može se konfigurirati na takav način da svi dođu u isti položaj, budući da su nijanse boje okvira oko zaslona i broja piksela potpuno beznačajne za računovodstvo! A veličina dijagonale, da budem iskrena, čak i više ako se razlikuje za pola centimetra.

Nadalje, u vanjskom programu moguće je s mnogo manje gubitaka razraditi spajanje dupliciranih pozicija u direktorijima, posebno u direktoriju drugih ugovornih strana, jer u 1C treba puno truda.

Tako se u 1C prenose samo „pročišćeni“, očišćeni i dati u odgovarajućem obliku podaci. Istovar se može izvoditi s određenom učestalošću - dijeljenje vam omogućava otklanjanje grešaka u radu računovodstvene službe i izbjegavanje nepotrebnih poslova, ako se tokom dana (ili dužeg razdoblja) nešto otkaže, promijeni, ponovi - sve se to događa u radnoj bazi podataka MS Accessa i samo „uspostavljeno "Stanje stvari ide u 1C. Osim toga, ova vrsta prijenosa može se sinkronizirati s operacijama izrade sigurnosnih kopija i uvijek biti siguran u ispravnost trenutnog stanja baze 1C.

Očito je da se dokumenti primaju bez automatskog knjiženja (iako se to može konfigurirati). Inače, baza podataka MS Access sama provjerava dostupnost potrebne robe u skladištu - za otpis za otpremu (dilema - kako bi bila sigurna da se račun može izdati do trenutnog datuma, da su svi predmeti potrebni za otpis u skladištu - odnosno kupljeni ili proizvedeni - trebate ... predati dokument u 1C. Čini se da ne vrijedi vjerovati menadžerima - inače bi iza menadžera uvijek trebao biti računovodstveni radnik)

Sada o implementaciji. 1C programi podržavaju sučelje za razmjenu podataka putem ADO mehanizma. Na strani 1C, redovna softversko sučelje za stvaranje elemenata direktorija i dokumenata, tako da rad ovog mehanizma ne ovisi o internim detaljima implementacije 1C, koji se mogu mijenjati od verzije do verzije i od ažuriranja do ažuriranja. S druge strane, glavni slogan razvoja bio je „iskoristiti mogućnosti 1C, tamo gdje je to moguće“. Stoga su u konačnoj implementaciji snopa iz MS Access-a učitani samo ime i TIN druge ugovorne strane - podaci su „izvučeni“ iz Jedinstvenog državnog registra pravnih i individualnih poduzetnika pomoću mehanizma ugrađenog u 1C (isto vrijedi i za bankovni detalji - ažurira ih BIK).

U eksternoj bazi podataka MS Access kreirani su upiti (Query) koji pripremaju sve potrebne podatke za učitavanje u 1C - uzmite ih i stavite u dokumente i polja.

Shema istovara sastoji se od dvije faze. Prvo se učitavaju nove pozicije ugovornih strana i priručnici o nomenklaturi. GUID-ovi koje dodjeljuje 1C vraćaju se u MS Access tako da prilikom istovara svih dokumenata u drugoj fazi postavite ispravne reference na referentne knjige. Izgleda ovako

Vjerujemo da je takva ideologija izgradnje informacioni sistemi može se uzeti kao osnova ne samo u onim firmama u kojima postoje stari sistemi koji nisu 1C, već i prilikom organiziranja rada novih pravna lica, jer imamo puno iskustva sa MS Accessom. Prednosti ovog pristupa su gore navedene.

Ovaj će se članak fokusirati na postavljanje korisničkih prava pristupa objektima u 1C sistemu.

U 1C 8, zasebni objekt metapodataka koristi se za upravljanje korisničkim pristupom, koji se naziva Uloge.

Bilješka! Ovaj je članak napisan da pomogne programerima. Postavljanje prava u korisničkom načinu na primjeru 1C računovodstva razmatrano je u.

Uloga definira skup prava koja korisnik ima. Mehanizam uloga vrlo je sličan mehanizmima Windows prava Aktivni direktorij... Za svaki od objekata (referentne knjige, dokumenti) programer postavlja svoj vlastiti skup prava - čitanje / pisanje / dodavanje / promjena / ...

Skup dostupnih prava - prikupljanje svih dozvola u korisničkim ulogama.

Ako otvorimo objekt metapodataka Uloga, možemo vidjeti sljedeću sliku:

Objekt ima dvije kartice - Predlošci prava i Ograničenja. Prava - glavna kartica, Predlošci - kartica za postavljanje prava na razini zapisa u 1C ( RLS). Ovo je vrlo važna tema, pokušat ću je opisati u budućim člancima.

Razmotrit ćemo samo jezičak Prava.

  • Predmeti - spisak na koji će se postaviti prava.
  • Prava - spisak prava koja se mogu postaviti.
  • Ograničavanje pristupa podacima - polja uloga za prilagođavanje

Obratite pažnju na kvačice na dnu:

  • Postavite prava za nove objekte - ako je zastava postavljena za ulogu, dozvole će se automatski postaviti na nove objekte metapodataka. Preporučujem instaliranje ako često zaboravite postaviti prava na nove objekte.
  • Postavite prava za rekvizite i tabelarni dijelovi default- zastava, kada su postavljeni, atributi i tablični dijelovi naslijedit će prava vlasnika (priručnik, dokument itd.)
  • Nezavisna prava podređenih objekata - ako je zastava postavljena, tada će sistem prilikom utvrđivanja prava na objekt konfiguracije uzeti u obzir prava na nadređeni objekt

Postavljanje prava za cijelu konfiguraciju

Ako otvorimo ulogu i kliknemo na korijen konfiguracije, vidjet ćemo sljedeće postavke:

Više o svakom od prava na cijelu konfiguraciju:

Besplatno nabavite 267 video vodiča za 1C:

  • Administracija - administracija baza podataka (potrebno je pravo "Administracija podataka")
  • Administracija podataka - pravo na administrativne radnje sa podacima
  • Ažuriranje konfiguracije baze podataka - pravo na
  • Ekskluzivni način rada - upotreba ekskluzivnog moda
  • Aktivni korisnici - pregledati listu aktivnih korisnika
  • - dnevnik registracije
  • - pravo na lansiranje tanak klijent
  • - pravo na pokretanje web klijenta
  • Debeli klijent - pravo na izvršavanje uloge debelog klijenta
  • Vanjska veza - pravo na uspostavljanje eksterne veze
  • Automatizacija - pravo na upotrebu automatizacije
  • Režim svih funkcija - u režimu upravljane aplikacije
  • Spremanje korisničkih podataka - dozvola ili zabrana spremanja korisničkih podataka (postavke, favoriti, historija). Posebno relevantno za 1C upravljane obrasce.
  • Interaktivno otkriće eksterni tretmani - otvaranje eksternih tretmana
  • Interaktivno otvaranje vanjskih izvještaja - otvaranje eksternih izvještaja
  • Izlaz - ispis, pisanje i kopiranje u međuspremnik

Postavljanje prava 1C 8.2 na druge objekte metapodataka

Za ostale glavne objekte (direktorije, konstante, dokumenti, registri ...), skup prava za ulogu je sasvim standardan:

  • Čitanje - čitanje (softver)
  • Dodavanje - dodatak (softver)
  • Promjena - promjena (softver)
  • Brisanje - brisanje (softver)
  • Pogled - gledanje
  • Interaktivni dodatak - interaktivni dodatak
  • Uređivanje - montaža
  • Brisanje mrežne zastave - interaktivni znak za brisanje
  • De-zastava na mreži - uklanjanje oznake za brisanje
  • Interaktivno brisanje označenog- uklanjanje označenih predmeta
  • Unos po redu - pomoću režima linijskog unosa
  • Deinstalacija na mreži - direktno brisanje (shift + del)

Prava samo za dokumenti:

  • Interaktivno ponašanje - držanje
  • Otkazivanje - poništavanje dokumenata
  • Interaktivni ne-operativni - držanje (standardne naredbe obrazaca) dokumenta u neoperativnom načinu
  • Interaktivno otkazivanje - interaktivno otkazivanje
  • Interaktivna modifikacija sprovedene - uređivanje postavljenog dokumenta. Ako uloga nema pravo, tada korisnik ne može izbrisati objavljeni dokument, označiti brisanje, ponovo objaviti ili učiniti da se ne objavi. Obrazac takvog dokumenta otvara se u načinu prikaza

P.S. Ako i dalje niste uspjeli razumjeti uloge korisnika, možete naručiti.
Video sa primjerom postavljanja prava u 1C Accounting 3.0:

Podijeli ovo