Evaluare: 5/5
În articolul anterior, am creat un șablon de formular pentru o aplicație gestionată. El ne-a dat o simplă expresie "Lumea bună" într-un document tabelar. Pe baza acestei mostre, puteți crea formulare tipărite care să formeze documente tabulare. Cu toate acestea, după cum știu, au o serie de limitări și inconveniente. Voi lista pe cele cunoscute:
1. Nu puteți specifica un font diferit într-o singură celulă. Ie pentru a identifica un singur cuvânt într-un paragraf al textului, trebuie să fim torturați prin împărțirea și ajustarea paragrafului în celule separate ale mesei.
2. Celulele mari transportate prost. Dacă celula
nu se potrivește în întregime cu pagina curentă, va începe pe următoarea pagină, în jumătate nu va fi tăiată.
3. Nu întotdeauna (în special în platforma 8.3 în forme controlate) rulează True Type font rule. Regula de „ceea ce văd, apoi tastând“ 1C funcționează prost, de multe ori pe ecran toate plasate în celulă, tăiat la hârtie, și vice-versa, ecranul iese din frontieră, pe hârtie totul este în regulă.
4. Editați foaia de calcul rezultantă cu 1C înseamnă o sarcină incomodă. Trebuie să salvați alt format.
5. Consecința paragrafului "4" - salvarea în Excel nu se întâmplă întotdeauna una la alta. Cu toate acestea, mxl și xls sunt formate diferite.
Apoi, ideea vine în minte și dacă nu afișați un tabel pe ecran, ci un document Microsof Word deja completat cu datele necesare!
Acest sistem se potrivește perfect atunci când formăm tot felul de texte de contracte (muncă, pentru cumpărare.)
Ei bine, vom începe?
Pasul unu - uitați-vă la articolul precedent și luați o mostră de acolo.
Pasul al doilea - pregătiți documentul șablonului.
Aici vă pot oferi o tehnologie care funcționează prin variabilele documentului DocVariable. Pentru a începe, vom deschide MS Word, vom scrie textul contractului nostru în ea. În exemplul meu, acesta va fi un contract de muncă compus dintr-un paragraf.
După redactarea acordului în sine, vom fi determinați de faptul că vom fi completați în sine. Ie Identificați partea variabilă a documentului. Propun să imprimați contractul din directorul angajaților. Ca numar de contract vom imprima calendarul, ca data - data primirii. De asemenea, vom deduce numele complet al angajatului acceptat, numele scurt al organizației și cel complet. Voi selecta roșul din imagine că vom deveni variabile.
Vom plasa variabilele. Eliminăm numărul contractului și adăugăm o variabilă la locul său. Pentru acest meniu, introduceți / exprimați blocuri / câmpuri
În fereastra care se deschide, selectați tipul câmpului DocVariavle și alocați-i un nume latin semnificativ pentru tabelNum. Faceți clic pe OK.
Pe ecran, cel mai probabil nu veți vedea nimic, dar nu vă grăbiți să repetați operația. Doar aveți un mod care nu afișează codurile de câmp. Pentru a vedea codul de câmp, apăsați Alt + F9.
Deci, înlocuim tot textul roșu cu variabilele de document.
Pasul trei - creați un aspect.
Acum salvați fișierul pe disc și reveniți la 1C. În procesul de prelucrare, modelul nostru breadboard cu cuvintele "Hello world". Adăugați un aspect nou cu tipul "date binare" și încărcați documentul nostru MS Word în el. Nu uitați să închideți documentul în Word, iar apoi 1C și Word jură pentru a partaja fișierul.
Pasul patru este programabil.
Urcăm în modulul de procesare. Există o nuanță pe care să o cunoașteți. Comanda de imprimare este executată pe client și primim datele de pe server. Pe server, nu avem aplicația MS Word, cu care vom crea documentul, în consecință vom forma documentul pe client. De asemenea, nu afișăm un document de tabel. Gândindu-ne la aceste nuanțe, ne aruncăm în luptă.
Mai întâi, ștergem procedura de imprimare din modulul de procesare și procedura de formare a aspectului. După aceasta, deschideți procedura pentru informația pentru procesarea externă () și editați rândul cu adăugarea comenzii după cum urmează:
DobavitKomandu (TablitsaKomand, "Hello World", "Aspect", "VyzovKlientskogoMetoda" Adevărul "");
De asemenea, noi conducem formularul de imprimare extern:
Și dezactivați modul de siguranță, deoarece componentele externe în modul sigur nu sunt disponibile:
Acum închideți modulul de procesare și adăugați formularul principal la prelucrare. Să mergem la modulul de formular.
Mai întâi, creați o funcție care returnează structura parametrilor necesari. Totul depinde de complexitatea planificării pe care o planificați și de locul în care veți completa parametrii. Cel mai probabil va fi textul cererii și returnarea rezultatelor acesteia. Iată codul pe care l-am primit:
De asemenea, trebuie să obținem un obiect OLE MS Word. Puneți-l în șablonul nostru și completați variabilele din acesta. Șablonul pe care îl putem obține numai în contextul serverului, așa că scriem o funcție de server scurt:
Pe server
Funcția GetMacquerServer ()
Întoarceți Formularele Obligatorii ("Obiect"). Obțineți modelul ("Layout");
Terminați funcția
Acum, scriem o procedură de tipărire.
Procedură Imprimare (Cod comandă, Array de obiecte) Export
Pentru fiecare angajat din buclă de obiecte
Date = Obțineți date (angajat);
În cazul în care datele <> Undefined Atunci
Word = Obiect nou COM ("Word.Application");
Layout = GetMacquerServer ();
Calea temporară = Fișierele de timp de catalog ();
numeTimeFile = temporarBody + "gph.doc";
Layout.Write (numele TimeFile);
TekDok = Word.Documents.ADD (numele TimedFile);
Variabile TechDoc ("tabelNum") Valoare = Date.Table;
Variabile TechDoc ("orgNameS") Valoare = Data.OrgKrtako;
Variabile TechDoc ("DocDate") Valoare = Data.Date;
Variabile TechDoc ("fio") Valoare = Date.
Variabile TechDoc ("orgNameLong") Valoare = Date.Org Long;
TekDok.Fields.Update ();
Word.ActiveWindow.View.ShowFieldCodes = False;
Word.Visible = Adevăr;
Sfârșit Dacă;
Sfârșitul ciclului;
Sfârșitul procedurii
1. Noi primim datele
2. Dacă se obțin datele, executăm algoritmul de formare
3. Creați un obiect COM MS Word
4. Obțineți aspectul
5. obțineți directorul fișierelor temporare
6. Salvați aspectul nostru sub un nume arbitrar
7. Creați un document MS Word specificând aspectul nostru ca parametru Șablon.
8-12. Umplem variabilele documentului cu date
13. Actualizarea câmpurilor pentru documente
14. Ascundeți codurile de câmp (analogic Alt + F9)
15. Arătăm (probabil superfluu, deoarece comanda add a făcut-o deja vizibilă implicit)
Acordați tratamentul și vă rog, și am încercat să închei bine contractul de furnizare, nu funcționează. Am lansat de procesare, și ea chiar și pe un cod nu trece de depanare!
Alo În această metodă, nu se utilizează "inserturi", există o altă metodă în care clipboard-ul este utilizat în perechi cu căutarea și înlocuirea aparițiilor. Este descrisă într-un alt articol. Acolo puteți să vă gândiți la ceva cu schimbarea fontului, de exemplu, selectați caracterele de la N la M și formatați-le.
Aici specificăm doar o valoare de text pentru variabilele de document, fără format, iar formatul este determinat de formatul font al variabilei în sine.
Dacă lucrați cu un model de obiect, creați o structură:
date = structură nouă ("Ru1, Ky2, Ru3)
Pentru fiecare pagină Din ciclul Cont
Dacă pKi.Type = type1 ȘI pKK.Vid = type1 Apoi
date KK1 = pagina.
Altfel Dacă.
Sfârșitul ciclului;
Citez Anton Filonenko:
Dacă lucrați cu un model de obiect, creați o structură:
date = structură nouă ("Ru1, Ky2, Ru3)
Pentru fiecare pagină Din ciclul Cont
Dacă pKi.Type = type1 ȘI pKK.Vid = type1 Apoi
date.KI1 = pageKi.Financing;
Altfel Dacă.
Sfârșitul ciclului;
Mulțumesc, Anton.
Eu, în general, bine făcut, dar din cauza a ceea ce nu a scris „dannye.KI1 =“, ci pur și simplu „KI1 =“ obține o eroare.
Acum, totul funcționează excelent!
Vă mulțumesc foarte mult!
Anton, salut.
A apărut o altă problemă:
Toate datele sunt desenate corect, dar când procesarea este pornită în modul client-server, apare o eroare:
": Eroare la apelarea metodei context (Adăugare)
TekDok = Word.Documents.ADD (numele TimedFile);
pentru motivul:
A apărut o excepție (Microsoft Word): Eroare în Word. "
Cu ce poate fi conectat și cum să se ocupe de ea?
Rebootul nu a ajutat, Word se deschide și îi dă să funcționeze în mod normal.
În versiunea de bază a fișierului, funcționează.
Mulțumesc
În cazul în care numai baza de date server cercetează trebuie să vă gândiți la modul în care contextul serverului diferă de client.
Primul lucru la care ar trebui să acordați atenție, unde este localizată această linie de cod? În articol, am scris că aceasta este o procedură de client (NaCliente), deci nu ar trebui să existe o diferență de fișier sau de fișiere.
În al doilea rând, aș înțelege care este calea către variabila "TemporaryFile", dacă există și dacă utilizatorul are drepturi la acest director. Adăugați un rând de cod în raport (numele fișierului) înainte de această linie.
În al treilea rând, aș fi asigurat că fișierul din layout este un document de cuvânt, iar formatul corespunde extensiei (doc și docx sunt formate diferite)
Citez Anton Filonenko:
În cazul în care numai baza de date server cercetează trebuie să vă gândiți la modul în care contextul serverului diferă de client.
Primul lucru la care ar trebui să acordați atenție, unde este localizată această linie de cod? În articol, am scris că aceasta este o procedură de client (NaCliente), deci nu ar trebui să existe o diferență de fișier sau de fișiere.