Moduli stampabili 8.3. Aggiunta di un modulo di stampa esterno al database. Dove vengono archiviati i moduli stampati?

Questo articolo ti spiegherà in dettaglio come un principiante con poca conoscenza di 1C 8 può creare un modulo stampato. Ad esempio, prendiamo una delle configurazioni 1C 8 più comuni: Contabilità 2.0. Creazione di un modulo stampato 1C fasi di scrittura:

  • Creazione di un file di modulo di stampa esterno;
  • Creazione del layout del modulo stampato;
  • Scrittura del codice del programma per visualizzare sullo schermo i dati del modulo stampato;
  • Creazione di parametri per la registrazione automatica di un modulo stampato;
  • Collegamento di un modulo di stampa esterno alla base Imprese 1C.

Creazione di un modulo stampato 1C. Formulazione del problema

Siamo richiesti nella configurazione Contabilità 2.0 creare un modulo stampato per un documento Ricezione di beni e servizi. Nell'intestazione del modulo stampato, visualizzare i seguenti dati:

  • Organizzazione;
  • Controparte;
  • Contratto di controparte;
  • Data della ricevuta.

Visualizza i dati nella sezione tabella come tabella Merce documento. La tabella dovrebbe includere le seguenti colonne:

  • Nomenclatura;
  • Quantità;
  • Prezzo;
  • Somma;
  • E anche il prezzo dell'articolo alla data corrente (per tipo di prezzo dal documento).

File di elaborazione esterno

Passiamo alla risoluzione del problema. Innanzitutto, apriamo 1C 8 in modalità Configuratore. È in questa modalità che vengono eseguiti tutti gli sviluppi sulla piattaforma 1C 8. Ora dobbiamo creare un file di elaborazione esterno. Per fare ciò, fare clic sul menu File -> Nuovo... o dall'icona di un nuovo file.

Nella finestra che si apre, seleziona l'elemento Elaborazione esterna.

Il prossimo in campo NomeÈ necessario inserire il nome dell'elaborazione esterna. Nel nostro caso lo chiameremo semplicemente “PrintForm”; il campo sinonimo verrà compilato automaticamente. Si prega di notare che sul campo Nome, elaborazione esterna, il nome deve essere scritto senza spazi o segni di punteggiatura.

Aggiungiamo attributi di elaborazione esterni Collega all'oggetto e seleziona digita per lui Ricezione di beni e servizi. A tale scopo, nell'albero dei metadati dell'elaborazione esterna 1C, selezionare l'elemento Requisiti e premere il pulsante Aggiungere(pulsante con più verde). La finestra delle proprietà dell'attributo si aprirà sul lato destro dello schermo, nel campo Nome scriviamo - Riferimento all'oggetto. IN campo Tipo premere il pulsante con tre punti.

Espandiamo il ramo nell'albero dei tipi DocumentLink e trova lì l'elemento Entrata di merci e servizi, seleziona la casella accanto e fai clic OK.

Salviamo il file di elaborazione esterno sul disco rigido; per fare ciò, utilizziamo il menu File -> Salva, pittogramma Salva(disco floppy blu) o una scorciatoia da tastiera CTRL+S. Chiamiamo il file salvato "PrintForm".

Creazione di un layout di modulo stampato

Iniziamo a creare un layout del modulo di stampa 1C. Il layout funge da modello per l'output del modulo stampato, quindi se vuoi che il tuo modulo stampato abbia un bell'aspetto, dovresti prestargli attenzione.

Aggiungiamo un nuovo layout nell'albero dei metadati dell'elaborazione esterna; non cambieremo nulla nella finestra di progettazione del layout e faremo clic sul pulsante Pronto.

Nel nuovo layout che si apre, creeremo diverse aree necessarie alla visualizzazione del modulo stampato. Tutte le aree di layout di cui abbiamo bisogno saranno orizzontali, quindi per creare una nuova area, seleziona il numero richiesto di linee di layout e vai al menu Tabella -> Nomi -> Assegna nome oppure usa la scorciatoia da tastiera Ctrl+Maiusc+N, quindi inserisci il nome della regione nella casella. Quando crei un'area di layout, non aver paura di commettere errori con il numero di righe; puoi sempre aggiungerle o rimuoverle. Per eliminare una linea di layout 1C, selezionare la linea desiderata e selezionare la voce nel menu contestuale Eliminare. Per aggiungere una nuova riga al layout, selezionare una riga qualsiasi del layout e selezionare la voce nel menu contestuale Espandere.

Aggiunta di un'intestazione di layout

Prima di tutto creiamo un'area Un berretto, verranno visualizzati i dati per l'intestazione del modulo stampato. Per quest'area avremo bisogno di sette linee di layout. Selezioniamoli e, come ho scritto sopra, premiamo la combinazione di tasti Ctrl+Maiusc+N, nel campo Nome scrivi "Cappello" e premi il pulsante OK.

Riempiamo l'area del layout con i dati di cui abbiamo bisogno. Di solito, nessun modulo stampato è completo senza un titolo, quindi creiamone uno anche nell'intestazione del nostro layout. Poiché nel titolo, oltre al nome del modulo stampato, visualizzeremo anche il numero del documento da cui è stato stampato, imposteremo come parametro nel layout il testo del titolo. Un parametro di layout è una cella di layout appositamente designata in cui è possibile emettere vari dati utilizzando il linguaggio 1C 8 integrato. Il titolo dovrebbe essere visualizzato su tutta la larghezza del modulo stampato, quindi decidiamo quante celle di layout saranno sufficienti per stampare su un orientamento orizzontale standard del foglio.

Di solito bastano tredici o quattordici celle di layout, selezionale nella prima riga dell'area Un berretto e combinare in una cella ( Menu contestuale -> Unisci). Successivamente, fai doppio clic sulla cella grande risultante e scrivi il nome del parametro, nel nostro caso "TitleText". Affinché il testo inserito diventi un parametro a tutti gli effetti, fare clic con il tasto destro sulla cella e selezionare l'elemento nel menu contestuale Proprietà. Sul segnalibro Disposizione troviamo il campo Riempimento e selezionare il valore Parametro. I parametri nel layout 1C sono indicati tra parentesi “<>».

L'intestazione del modulo stampato dovrebbe risaltare rispetto al resto del testo, quindi seleziona nuovamente la cella e utilizza le icone sul pannello di formattazione del layout per impostare l'allineamento del testo Centrato e dimensione del carattere 14.

Dopo il testo del titolo lo visualizzeremo nell'area Un berretto informazioni sull'organizzazione, controparte, accordo con la controparte e data di ricevimento della merce. Poiché anche tutti questi dati vengono presi dal documento, lo formalizzeremo anche con dei parametri. Inoltre, prima di ciascun parametro è necessario scrivere un testo esplicativo in modo che l'utente possa facilmente capire dove si trova l'organizzazione, dove si trova la controparte, ecc. Tutte queste azioni sono simili alla creazione di un titolo, quindi non mi soffermerò su di esse in dettaglio, mi limiterò a fornire un'immagine di ciò che dovrebbe accadere alla fine.

La figura mostra come i parametri di layout differiscono dal testo normale.

Aggiunta di un'intestazione della tabella di layout

L'ultima cosa che dobbiamo creare in quest'area di layout è l'intestazione della tabella, nella quale verranno visualizzati i dati della parte tabellare Merce. Le colonne richieste per la tabella sono state descritte nella sezione "Dichiarazione del problema". Creeremo anche un'intestazione di tabella utilizzando una combinazione di celle e scrivendo testo (nomi di colonne). Seleziona i bordi dell'intestazione della tabella utilizzando lo strumento Telaio, che si trova nel pannello di formattazione del layout.

Aggiunta di una tabella a un layout

Creiamo un'altra area nel layout: Dati. Al suo interno verrà visualizzata la tabella dati della parte tabellare Merce. Per quest'area abbiamo bisogno solo di una riga di layout. Per visualizzare tutte le righe della parte tabellare in un modulo stampato, riempiremo e visualizzeremo quest'area il numero di volte richiesto. Colonne nella zona Dati dovrebbe coincidere con le colonne dell'intestazione della tabella, quindi compilarla non sarà difficile. L'unica differenza è nella zona Dati abbiamo bisogno di parametri, non solo di testo. Tieni inoltre presente che per impostazione predefinita i parametri numerici sono formattati a destra mentre i parametri di testo sono formattati a sinistra. Per selezionare le colonne, è necessario utilizzare anche lo strumento Telaio.

Aggiunta di un piè di pagina a un layout

L'ultima area di layout di cui abbiamo bisogno è Seminterrato. Verranno visualizzati i totali per quantità e importo. La creazione è simile alla creazione di un'area Dati, ma inoltre i risultati dovrebbero essere evidenziati in grassetto.

Il risultato finale dovrebbe essere un layout simile a questo:

Creazione di un modulo stampato 1C. Programmazione

Iniziamo a programmare: questa è la fase più importante nella creazione di un modulo stampato. Prima di tutto, andiamo al modulo oggetto modulo di stampa esterno, qui è dove programmeremo. Per fare ciò, nella finestra principale dell'elaborazione esterna, fare clic su Azioni -> Apri modulo oggetto.

È necessario creare una funzione di esportazione nel modulo oggetto modulo di stampa esterno Foca().

Funzione Print() Esporta EndFunction

Tieni presente che questa funzionalità è richiesta per i moduli di stampa esterni nelle configurazioni che utilizzano l'applicazione normale. Tutto il successivo codice di programma necessario per visualizzare il modulo stampato verrà scritto all'interno di questa funzione.

Inizializzazione delle variabili di base

Creiamo una variabile TabDoc, che conterrà un documento di foglio di calcolo: questo è esattamente il modulo stampato in cui visualizzeremo le aree riempite del layout.

TabDoc = nuovo TabularDocument;

Ad una variabile Disposizione Otterremo il layout del modulo stampato che abbiamo creato. Per fare ciò utilizziamo la funzione integrata OttieniLayout(<ИмяМакета>).

Disposizione = GetLayout("Layout");

Convertiremo tutte le aree del layout in variabili. Per fare questo utilizziamo il metodo layout OttieniArea(<ИмяОбласти>) .

HeaderArea = Layout.GetArea("Intestazione"); AreaData = Layout.GetArea("Dati"); AreaFooter = Layout.GetArea("Piè di pagina");

Emissione dell'intestazione di un modulo stampato in un documento di foglio di calcolo

Tutte le variabili necessarie vengono inizializzate. Iniziamo a riempire e visualizzare le aree di layout in un documento di foglio di calcolo. Innanzitutto inseriamo il titolo del modulo stampabile, per questo dobbiamo passare il parametro Testo del titolo, che abbiamo creato nel layout, il testo di cui abbiamo bisogno. Per inserire i valori dei parametri per l'area di layout, esiste una raccolta speciale chiamata - Opzioni. Da cui attraverso “.” puoi ottenere qualsiasi parametro. Nel testo dell'intestazione trasferiremo il testo: “Modulo stampato”, nonché il numero del documento.

Header Area.Parameters.TitleText = "Stampa modulo"+LinkToObject.Number;

Compileremo i restanti parametri dell'intestazione in modo simile; otterremo tutti i valori necessari per essi dai dettagli Riferimento all'oggetto, che contiene un collegamento al documento da stampare.

HeaderArea.Parameters.Organization = LinkToObject.Organization; HeaderArea.Parameters.Account = LinkToObject.Account; HeaderArea.Parameters.ReceiptDate = ObjectLink.Date; Area intestazione.Parameters.Accordo della controparte = LinkToObject.Accordo della controparte;

Tutti i parametri dell'intestazione sono compilati, lo visualizzeremo nel documento foglio di calcolo che abbiamo creato, per questo utilizziamo il metodo Produzione(<Область>) .

TabDoc.Output(HeaderArea);

Scrivere una richiesta di handicap stampata

Iniziamo a riempire e disegnare l'area Dati. La creazione di un modulo stampato 1C implica anche la scrittura di una query; ne abbiamo bisogno per ottenere dati tabellari Merce e prezzi Nomenclature per la data corrente utilizzeremo Richiesta. Il linguaggio di query 1C 8 è simile a SQL, o meglio copia praticamente le capacità del suo operatore SELECT, ma l'intera query è scritta in russo. Pertanto, se hai almeno vagamente familiarità con SQL, capirai facilmente il linguaggio di query 1C 8.

In questa forma stampata la richiesta sarà abbastanza semplice e molti diranno che se ne potrebbe fare a meno, ma la conoscenza del linguaggio di query e la capacità di utilizzarlo con competenza è una delle competenze principali di un programmatore 1C. Le query consentono di ottenere campioni di dati complessi utilizzando meno risorse e il testo della query è molto più semplice da comprendere rispetto al codice di programma scritto senza utilizzare una query (o con un utilizzo minimo della stessa). Inoltre, 1C 8 dispone di un ottimo designer di query che consente di assemblare in modo interattivo una query dalle tabelle necessarie.

Creiamo una variabile che conterrà la richiesta.

Richiesta = Nuova richiesta;

Comporremo il testo della richiesta utilizzando il costruttore della richiesta. Per cominciare scriviamo:

Richiesta.Testo = "";

Posiziona il cursore del mouse tra le virgolette e premi il pulsante destro del mouse. Nel menu contestuale che si apre, seleziona la voce Richiedi costruttore, ci aiuterà molto nella creazione di un modulo di stampa 1C. Successivamente si aprirà la finestra di progettazione della query, che contiene molte schede, ma per la nostra query ne serviranno solo quattro: “Tabelle e campi”, “Relazioni”, “Condizioni”, “Join/Alias”.

Per la nostra query avremo bisogno di due tabelle: table part Merce documento Ricezione di beni e servizi e un'istantanea delle ultime informazioni sulla data attuale del registro Prezzi degli articoli.

Sul lato sinistro della finestra del designer troviamo la colonna Banca dati. Contiene un albero di tutti gli oggetti di metadati, troviamo quelli che ci servono. Per fare ciò, apriamo il thread Documentazione e trova il documento Ricezione di beni e servizi, apriamolo e troviamo la parte tabulare Merce, trascinalo nella colonna di Progettazione query Tabelle. Puoi trascinare in tre modi: trascinando effettivamente, facendo doppio clic sulla tabella o selezionandola e facendo clic sul pulsante ">". Apriamo il thread Registri di informazione e trova un tavolo lì PrezziNomenclatura.ShortcutPiù recente, trascinalo anche nella colonna Tabelle. Queste due tabelle sono sufficienti per la nostra query.

Selezioniamo i campi di cui abbiamo bisogno dalle tabelle risultanti. Per fare questo, nella colonna Tabelle apriamo il tavolo e trova i campi: Nomenclatura, Importo, Prezzo, Quantità e trascinali nella terza colonna del costruttore - Campi. Espandiamo la tabella , troviamo il campo Prezzo e trascinalo anche su Campi.

La struttura delle tabelle e dei campi della nostra richiesta è pronta, passiamo ora alle condizioni. Abbiamo bisogno dei dati tabellari Merce non sono stati prelevati da tutti gli scontrini, ma solo da quello che stampiamo. Per fare ciò, imporremo una condizione sul tavolo Ricezione di merciServiziMerci. Andiamo alla scheda "Condizioni" del designer di query. In una colonna Campi si trovano le tabelle che abbiamo selezionato in precedenza, per la condizione avremo bisogno di un campo Collegamento dal tavolo Ricezione di beni e servizi Beni, Trasciniamolo nella finestra Condizioni.

Nelle query 1C è possibile utilizzare i parametri; sono necessari per trasferire i dati alla richiesta. Ad esempio, se vogliamo limitare la selezione dei documenti a un documento specifico, possiamo utilizzare un parametro per passare un collegamento a questo documento alla richiesta e utilizzare questo parametro nella condizione. Questo è esattamente ciò che faremo nella nostra richiesta.

Dopo la finestra Condizioni abbiamo aggiunto un campo Collegamento, lo stesso progettista della query creerà un parametro con lo stesso nome e lo posizionerà dopo il segno "=". Se lo si desidera, questo parametro può essere rinominato. Nel testo della richiesta i parametri sono contrassegnati con il segno “&”, ma in questo caso ciò non è necessario, poiché si presuppone che la seconda parte della condizione contenga un parametro, basta ricordarlo. Di seguito verrà discusso come passare un valore a un parametro di richiesta 1C.

Poiché nella richiesta non utilizziamo una tabella completa dei prezzi dei prodotti, ma una virtuale (una fetta di quest'ultima in questo caso), dobbiamo impostare le condizioni per la formazione di questa tabella virtuale, nel nostro caso si tratta di data limite e condizione per il tipo di prezzi (i prezzi che hanno un tipo di prezzo rigorosamente definito è quello specificato nel documento di ricevuta che stampiamo).

Per compilare i parametri del tavolo virtuale, vai alla scheda Tabelle e campi costruttore di query, nella colonna Tabelle seleziona la tabella PrezziNomenclaturaTaglioUltimo e premere il pulsante Opzioni della tabella virtuale, situato in alto. Nella finestra che si apre, nel campo Periodoè necessario impostare un parametro a cui far passare la data in cui verrà effettuato il taglio del prezzo. Nel nostro caso questa sarà la data corrente (cioè oggi), quindi chiameremo il parametro “&CurrentDate”. Nel campo delle condizioni scriveremo le condizioni per il tipo di prezzo, lo passeremo anche nel parametro, che chiameremo “&TypePrice”. La condizione risultante sarà simile a questa (dove TipoPrezzo- misurazione del registro Prezzi degli articoli):

TipoPrezzo = &TipoPrezzo

I parametri della tabella virtuale sono compilati, fare clic sul pulsante OK.

Ora che abbiamo limitato la selezione solo al documento che ci serve, creiamo connessioni tra le tabelle delle query. Se ciò non viene fatto, i prezzi della tabella PricesNomenclatureSliceLast non verranno associati all'articolo della ricevuta. Andiamo alla scheda Connessioni progettista di query. Creiamo una connessione attraverso il campo Nomenclatura tra i nostri due tavoli. Per fare ciò, premere il pulsante Aggiungere, nel campo Tabella 1 seleziona una tabella Ricezione di merciServiziMerci, e nel campo Tabella 2 - PrezziNomenclaturaFettaUltimo. Nelle condizioni di comunicazione selezionare i campi Nomenclatura da entrambi i tavoli.

Va inoltre notato che nella selezione della query dobbiamo ottenere tutte le righe dalla parte tab Merce e i prezzi solo se disponibili alla data corrente per il tipo di prezzo documento. Quindi, i dati tabellari Merce sono obbligatori, ma i dati sulla ripartizione dei prezzi non sono disponibili. Pertanto, nei rapporti tra queste tabelle, è necessario utilizzare il cosiddetto LEFT JOIN, e la tabella di sinistra (o richiesta) sarà Ricezione di merciServiziMerci e il diritto (o facoltativo) PriceNomenclatureSliceLast. Affinché il join sinistro delle tabelle di query funzioni come descritto sopra, è necessario selezionare la casella Tutto dopo il campo Tabella 1.


La richiesta è quasi pronta, non resta che lavorare un po' sul campo alias. Andiamo al segnalibro Unioni/Alias e impostare un alias per il campo PrezziNomenclatura Slice Ultime.Prezzo. Il soprannome sarà - PrezzoAsToday, è necessario affinché i nomi dei campi di selezione della query e i nomi dei parametri nel layout del modulo stampato corrispondano.

Il lavoro nel Designer query è ora completo, fare clic su OK. Dopo la chiusura della finestra di progettazione, vedrai che la riga con il testo della richiesta è compilata e assomiglia a questa:

Request.Text = "SELECT | Ricezione di beniServiziProdotti.Nomenclatura, | Ricezione di beniServiziProdotti.Importo, | Ricezione di beniServiziProdotti.Prezzo, | Ricezione di beniServiziProdotti.Quantità, | PrezziNomenclatura Sezione di ultimo.Prezzo AS PrezzoOggi | DA | Documento. Ricevuta di BeniServizi.Merci AS Ricevuta ProdottiServiziProdotti |. CONNESSIONE SINISTRA RegisterInformation.PricesNomenclature.SliceLast (| &CurrentDate, PriceType = &PriceType) AS PrezziNomenclatureSliceUltimo ON Ricezione di merciServiziProdotti.Nomenclature |

Esecuzione della richiesta

Passiamo i parametri necessari alla richiesta; per questo utilizzeremo il metodo request ImpostaParametro(<ИмяПараметра>,<Значение>). Per ottenere la data corrente, utilizzare la funzione integrata La data attuale(), restituisce la data e l'ora del computer.

Eseguiamo una query per ottenere un campione con i dati di cui abbiamo bisogno. Per fare ciò, utilizzare prima il metodo request Correre() e poi il metodo Scegliere().

Seleziona = Query.Esegui().Select();

Compilazione della tabella del modulo stampato

Di conseguenza, nella variabile Campione conterrà una selezione di risultati della query, puoi esplorarlo utilizzando il metodo Prossimo(), e per eseguire il tutto è necessario un loop Ciao. Il disegno sarà il seguente:

While Select.Next() Ciclo EndLoop;

È in questo ciclo che riempiremo e visualizzeremo l'area di layout Dati. Ma prima inizializziamo due variabili di tipo numerico. In essi raccoglieremo i totali per quantità e importo che dobbiamo esporre in zona Seminterrato.

Somma totale = 0; Quantità totale = 0;

All'interno del loop riempiremo l'area Dati dati dall'elemento di selezione corrente in variabili Importo totale E Quantità totale aggiungi valori di somma e quantità e, infine, visualizza l'area in un foglio di calcolo utilizzando il metodo a noi già familiare Produzione(). Poiché i nomi dei campi della nostra richiesta coincidono completamente con i nomi dei parametri dell'area Dati, quindi per compilare utilizzeremo la procedura integrata FillPropertyValues(<Приемник>, <Источник>), che copia i valori delle proprietà<Источника>alle proprietà<Приемника>.

While Selection.Next() Ciclo FillPropertyValues(AreaData.Parameters,Selection); Somma totale = Somma totale + Somma campione; Quantità totale = Quantità totale + Quantità campione; TabDoc.Output(AreaData); FineCiclo;

Output del piè di pagina di un modulo stampato in un documento di foglio di calcolo

Resta da riempire e visualizzare l'ultima area del layout - Seminterrato. Abbiamo già predisposto i dati per la compilazione, la compilazione e il prelievo vengono effettuati secondo lo stesso schema.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = Somma totale; TabDoc.Output(AreaFooter);

Il documento in foglio di calcolo è completamente compilato; non resta che visualizzarlo sullo schermo in modo che l'utente possa visualizzare il modulo stampato e stamparlo se necessario. Ma nelle tipiche configurazioni 1C 8, le procedure di moduli speciali sono responsabili dell'output di moduli stampati esterni. Pertanto è sufficiente tornare dalla funzione Foca() documento di foglio di calcolo completato.

Restituisci TabDoc;

A questo punto la fase di programmazione è conclusa e la realizzazione del modulo di stampa 1c è quasi completata. Testo completo della funzione Foca() Non lo riporto qui, puoi guardarlo nel file del modulo stampabile, che puoi scaricare in fondo all'articolo.

Creazione di un modulo stampato 1C. Opzioni di registrazione automatica

Quando si collega un modulo di stampa esterno al database, il sistema non determina automaticamente a quale documento o libro di consultazione è destinato il modulo di stampa, è necessario selezionarlo manualmente; E se un'altra persona ha scritto il modulo stampato e tu hai solo il compito di collegarlo, la scelta potrebbe diventare ambigua. Per evitare tali problemi, in tutti i moduli stampati esterni è necessario creare un layout con parametri di autoregistrazione. Se viene creato e formattato correttamente, il sistema determina automaticamente a quale documento o libro di consultazione è destinato il modulo stampato.

Viene fatto come segue:

  • Nell'elaborazione esterna creiamo un nuovo layout. Lo chiamiamo “Settings_Auto-Registration” (è importante non commettere errori!).
  • Nella prima cella del layout scriviamo Documentazione.(O Directory.) e il nome del documento a cui collegare il modulo stampato.

Collegamento di un modulo di stampa esterno alla base

  • Avvia 1C 8 in modalità Azienda;
  • Vai al menù Servizio -> Rapporti ed elaborazioni aggiuntive -> Moduli stampati esterni aggiuntivi;
  • Fare clic sul pulsante Aggiungere;
  • Nella finestra che si apre, clicca sull'icona Sostituisci il file di elaborazione esterno;
  • Se hai creato parametri di registrazione automatica, accettiamo di utilizzarli;
  • Se non hai creato parametri di registrazione automatica, nella parte tabellare Accessorio per lastra di stampa aggiungere il documento o il libro di consultazione richiesto;
  • premi il bottone OK.

Successivamente, nel menu sarà disponibile il modulo di stampa esterno Foca documento Ricezione di beni e servizi. La creazione del modulo stampato 1C può ora considerarsi completata.

2016-12-01T12:56:42+00:00

Una meravigliosa opportunità è apparsa in 1C: Accounting 8.3 (edizione 3.0). Ora un utente in modalità 1C:Enterprise può modificare facilmente i layout dei moduli stampati.

Quando potrebbe essere utile? Bene, ad esempio, c'è un modulo stampato, ad esempio "fattura di domanda", in cui apporti alcune modifiche ogni volta dopo averlo stampato. Cambia il carattere, ristampa i campi, rimuovi cose inutili.

Allora perché farlo ogni volta?! Se possiamo apportare queste modifiche al layout del modulo stampato una volta, il programma produrrà sempre il modulo stampato di cui abbiamo bisogno.

Di seguito, passo dopo passo, ti mostrerò come modificare il layout del modulo stampato “Richiesta-fattura”. Aggiungeremo un nuovo campo lì: "Responsabile".

1. Crea un modulo stampabile (fai clic sul pulsante “Stampa”) e fai clic sul pulsante “Altro” -> “Cambia layout” nel modulo che si apre (a destra):

2. Si aprirà il layout stampabile. Apporta le modifiche necessarie, ma fai attenzione che non funzioni in questo modo. Dirò subito che i caratteri e le dimensioni dei campi possono essere modificati assolutamente, ma l'eliminazione dei campi esistenti (specialmente quelli in<угловых скобках>) non ne vale la pena. Se vuoi nascondere un campo in<угловых скобках>, rendilo semplicemente invisibile (colore o dimensione), ma dovrebbe rimanere nel modulo, poiché è richiesto dal codice del programma 1C.

3. Aggiungeremo il campo "Responsabile" e fare clic sul pulsante "Registra e chiudi".

4. Il modulo di stampa è stato rimodellato in una nuova forma come volevamo.

Se, dopo aver modificato il modulo di stampa, smette di funzionare, allora tu.

Cordiali saluti, Vladimir Milkin(insegnante e sviluppatore).

Questo articolo descrive come connettere un modulo stampato esterno a un database 1C utilizzando l'esempio della configurazione "Trade Management 10.3"

La configurazione “Gestione Trade 10.3” è una configurazione su moduli cosiddetti “REGOLARI”, e non su moduli “GESTITI” come “Gestione Trade 11.2”; per i moduli “GESTITI” si consiglia la lettura.

Le nostre istruzioni “mostrano” come collegare un modulo stampato esterno in 1C con configurazione su moduli “REGULAR”, ovvero:

  • "Contabilità 2.0"
  • "Gestione commerciale 10.3"
  • "Gestione degli stipendi e del personale 2,5"
  • "Automazione completa 1.1"
  • "Gestione aziendale manifatturiera 1.3"
  • "Vendita al dettaglio 1.0"
  • e altre configurazioni simili.

Per connettere un modulo di stampa esterno in 1C dovremo eseguire 11 passaggi.

1 - Menù "Servizio". 2 — Selezionare “Moduli ed elaborazioni di stampa esterna”. 3 — Avanti — “Moduli stampati esterni” (vedi figura sotto ↓)

Per convincervi che questa istruzione è adatta anche ad altre configurazioni sui moduli “REGOLARE”, riportiamo la stessa iniziale 1-2-3 passo, ma non in "Gestione commerciale 10.3", ma in "Contabilità 2.0" lì tutto è uguale ad eccezione delle parole leggermente modificate nei sottoparagrafi, vale a dire...

1 — Menu “Servizio” (lo stesso di “UT 10.3” e altri).
2 - Qui “Report ed elaborazioni aggiuntive”, e non “Stampati ed elaborazioni esterne” come in “UT 10.3”,
ma il significato è sempre lo stesso e si trova nel menu “Servizio”.
3 - E poi - “Moduli di stampa esterni aggiuntivi”, ovvero parola in più “Addizionale” rispetto a “UT 10.3” (vedi figura sotto ↓)

Successivamente, continueremo a utilizzare l'esempio di "Gestione commerciale 10.3" senza confronti inutili.
4 — Fare clic sul pulsante “+”, ad es. "Aggiungere". 5 — Un pulsante in cui viene disegnata la cartella (quando si passa il mouse, apparirà un suggerimento: "Sostituisci file di elaborazione esterno").

Nelle nuove versioni di 1C (a partire da agosto 2016), il programma dispone di un meccanismo di avviso integrato sul pericolo derivante dall'utilizzo di elaborazioni esterne sconosciute che potrebbero contenere “virus” nelle versioni precedenti del programma l'avviso non verrà visualizzato! Se ciò si verifica, sarà necessario collegare l'elaborazione esterna: 6 - fare clic sul pulsante "Continua". (vedi figura sotto ↓)

7 — Selezionare la directory in cui si trova il file del modulo di stampa esterno di cui abbiamo bisogno. 8 — Seleziona il nostro file. 9 — Fare clic su “Apri” (vedi figura sotto ↓)

10 — Un modulo stampato esterno può avere parametri di registrazione automatica, come nel nostro caso, qui ha senso fare clic su "Sì" - utilizzando quindi questi parametri durante la registrazione, ad es. selezionare automaticamente quegli oggetti (documenti o magari, ad esempio, directory) in cui sarà possibile utilizzare un modulo stampato esterno collegato (vedi figura sotto ↓)

Questo è tutto, abbiamo compilato la tabella “Affiliazione del modulo stampato”, grazie ai parametri di autoregistrazione, vediamo il nome del modulo stampato esterno collegato, forse avrai compilato il campo “Commento”, ecc. Puoi aggiungere i tuoi oggetti alla tabella "Proprietà modulo di stampa", ad esempio, per la nostra elaborazione "Modulo di contratto stampabile universale", che supporta la stampa di molti documenti e libri di consultazione, ma i parametri di registrazione automatica sono impostati solo per quelli principali: 10* — Fare clic sul pulsante verde "Aggiungi" e selezionare quali oggetti posizionare anche per l'elaborazione. Ora tutto ciò che resta è - 11 - cliccare sul pulsante “OK” e (vedi figura sotto ↓)

Ora vale la pena controllare: abbiamo fatto tutto bene?
Per fare ciò, selezioniamo un oggetto per controllare, ad esempio, il documento “Vendite di beni e servizi”, che è indicato nella tabella “Affiliazione del modulo stampato”, ciò significa che il modulo stampato collegato può essere utilizzato in questo documento! Controlliamo... (vedi figura sotto ↓)

Per verificare se è possibile stampare, aprire qualsiasi documento del modulo: "Vendite di beni e servizi". 13 — Fare clic sul pulsante "Stampa".
Vediamo che è apparsa una finestra per la selezione dei moduli stampati, tra questi c'è - 14 — modulo di stampa esterno da noi collegato (vedi figura sotto ↓)

Come è noto - senza un pezzo di carta tu... nessuna azienda seria può farne a meno. E quando diciamo che 1C ha una sorta di documenti elettronici, sorge immediatamente la domanda su come stamparli in formato cartaceo.

Il processo di stampa di un documento elettronico 1C è chiamato stampa del modulo 1C.

Ogni documento può avere diversi moduli stampati 1C. Ad esempio, il documento Vendita di beni e servizi (ovvero vendita) viene stampato nei moduli stampati 1C: TORG-12, Fattura, Nota di vettura, Certificato dei servizi resi e così via.

L'essenza del modulo stampato 1C è un modello (come un documento Excel) in cui sono specificate le variabili. Durante il processo di stampa, il testo del documento elettronico viene sostituito alle variabili. Il modello viene solitamente archiviato nella configurazione.

Il problema con la modifica di un modulo stampato 1C standard è che solitamente non è consigliabile modificare la configurazione standard, altrimenti sarà più difficile l'aggiornamento. Pertanto, sono comparsi vari metodi per utilizzare moduli di stampa 1C esterni e hanno iniziato a reinventare la ruota.

Un modulo di stampa 1C esterno è un modello di stampa archiviato in qualche modo separatamente dalla configurazione stessa.

Tuttavia, questa è tutta teoria. Come creare il tuo modulo stampato? O meglio ancora, come apportare modifiche ad uno esistente?

Come viene stampato un documento 1C

Per stampare qualsiasi documento 1C (che può essere stampato), è necessario fare clic sul pulsante Stampa nel documento. 1C offrirà di selezionare un modulo stampato 1C per questo documento dall'elenco.

A sinistra del pulsante Stampa di solito c'è un pulsante di accesso rapido all'ultimo modulo di stampa 1C selezionato.

Il risultato della stampa è simile al seguente. Per stamparlo su una stampante, è necessario posizionare il cursore nel modulo di stampa 1C, premere Ctrl+P o il pulsante stampante sulla pulsantiera o nel menu File/Stampa.

Le impostazioni di stampa (margini, orientamento del foglio, ecc.) si trovano nel menu File/Imposta pagina. È inoltre possibile configurare le impostazioni utente per stampare direttamente sulla stampante.

Da dove viene questo modulo di stampa?

Dove si trova il modulo stampato 1C?

Andiamo al configuratore. Trova il documento richiesto nella finestra di configurazione. Espandiamo il ramo Layout. Sono loro che si trasformano nel modulo di stampa 1C una volta stampati.

Tuttavia, questo non sarà sufficiente: ci è stato offerto di scegliere molte più opzioni durante la stampa. Il fatto è che molti layout dei moduli stampati 1C sono nascosti altrove.

Torniamo all'inizio della finestra di configurazione 1C. Apriamo il ramo Generale e poi il ramo Layout generali. Qui è dove si trovano la maggior parte dei layout. Ciò è particolarmente vero per i moduli stampati regolamentati dallo stato 1C - TORG 12, fattura, ecc.

A proposito, non è difficile notare che vedrai diversi layout di TORG12 o Invoice. Perché? È facile da spiegare. Le leggi e i requisiti cambiano periodicamente. Ma non possiamo semplicemente modificare lo stesso layout, e se dobbiamo stampare il documento da una data precedente a quella della modifica. Vengono quindi realizzati diversi layout e, a seconda della data del documento, viene utilizzato quello corretto.

Ma non è tutto! Sono previsti anche layout esterni. Dove sono conservati?

Torniamo alla modalità 1C Enterprise. Attraverso il menu utente con diritti di amministratore Operazioni/Directory, selezionare la directory Elaborazione esterna.

Le righe di questa directory, che hanno il modulo Modulo di stampa, aggiungono opzioni di stampa per il documento specificato nella tabella Proprietà del modulo di stampa (nella foto si tratta di Vendite di beni e servizi).

Affinché ciò funzioni, è necessario effettuare un'elaborazione esterna che abbia una procedura Print() nel suo modulo oggetto etichettato Export, che organizza il processo di stampa.
Ma stiamo andando troppo avanti. Diamo prima un'occhiata a come è organizzato il layout del modulo di stampa 1C.

Layout del modulo stampato 1C

Il layout del modulo di stampa 1C è simile al seguente.

Come puoi vedere, è diviso in blocchi. I blocchi possono essere orizzontali (nome a sinistra) o verticali (nome in alto).

Il layout stesso, così com'è, non viene stampato. Vengono stampati i singoli blocchi. Il programmatore nella procedura di elaborazione della stampa specifica l'ordine dei blocchi e il numero di ripetizioni di ciascun blocco. Il risultato è un modulo stampato.

Per assegnare un'area selezionare più righe (o più colonne) e selezionare dal menu Tabella/Nomi/Assegna un nome. Per rimuovere c'è anche il comando Rimuovi nome.

Il nome è necessario affinché l'area sia accessibile dal codice programma. Il nome può essere assegnato non solo a righe o colonne, ma anche semplicemente a più celle. Per fare ciò, seleziona le celle e seleziona lo stesso menu.

Tuttavia, per impostazione predefinita, i nomi delle celle personalizzate non vengono visualizzati. Per vederli, seleziona la voce di menu Tabella/Nomi/Visualizza celle con nome.

Quindi, oggi abbiamo appreso che un modulo stampato 1C viene formato utilizzando un layout. Il layout è costituito da blocchi, astutamente chiamati aree.

Blocchi tipici (comunemente usati) per lastre da stampa:

  • Intestazione: viene visualizzato il titolo del documento
  • Riga – viene visualizzata una riga della tabella, questo blocco viene ripetuto tante volte quante sono le righe da stampare
  • Piè di pagina: viene visualizzata la fine del documento.

Adesso dobbiamo occuparci del

Buon pomeriggio.

Oggi voglio raccontarti come creare moduli stampati esterni per la configurazione “Gestione Stipendi e Personale 3.0”. Come sai, ZUP 3.0 utilizza una libreria di sottosistemi standard, il che significa che la struttura di elaborazione appare completamente diversa. Quando ho dovuto realizzare per la prima volta un modulo stampato per il BSP nei moduli gestiti (allora era UT 11), la prima cosa che ho fatto è stata andare sul disco ITS per trovare lì una documentazione dettagliata su quali procedure di esportazione, quali parametri dovrebbero essere elaborato e come funziona il tutto. Qui mi ha deluso un po', perché... lì viene detto tutto su come dovrebbero apparire le procedure nel modulo del documento, e nel modulo stampato esterno i parametri della procedura di "stampa" vengono riorganizzati, quindi ho dovuto cercare informazioni in altre fonti e armeggiare con il sottosistema dall'interno .

Bene, cominciamo. Ciò che otteniamo alla fine può essere utilizzato come modello.

Primo passo- ovvio. Creiamo una nuova elaborazione. Assegniamogli un nome arbitrario: "Stampa Esempio".

Passo due. Creiamo un layout. Dato che abbiamo un esempio di prova, creerò il layout più semplice, senza un singolo parametro.

Passo tre- Il più interessante. Aprire il modulo oggetto e iniziare a programmare. Secondo il BSP, quando si registra un'elaborazione esterna, essa (l'elaborazione) deve indicare cosa può fare, a quali oggetti è allegato e come si chiama. Quando viene chiesto quale elaborazione può eseguire, dovrebbe restituire un elenco di comandi: questa è una tabella di valori. Nel nostro caso, l'elaborazione può produrre un modulo stampato, quindi ci sarà un solo comando. Per generare una tabella di valori definiremo un paio di procedure che saranno sempre le stesse in tutti i moduli stampati esterni:

//procedura che prepara la struttura della tabella dei comandi

Funzione OttieniComandoTabella()

// Crea una tabella comandi vuota e colonne al suo interno
Comandi = Nuova TabellaValori;

// Come apparirà all'utente la descrizione del modulo stampato
Commands.Columns.Add("Visualizza", NewTypeDescription("Riga"));

// Il nome del nostro layout, in modo da poter distinguere il comando chiamato durante l'elaborazione della stampa
Commands.Columns.Add("Identificatore", New TypeDescription("String"));

// Imposta il modo in cui deve essere chiamato il comando di elaborazione
// Opzioni possibili:
// - OpeningForm - in questo caso, la colonna identificatore dovrebbe indicare il nome del modulo che il sistema aprirà
// - CallClientMethod - chiama la procedura di esportazione del client dal modulo del modulo di elaborazione
// - Chiama ServerMethod - chiama una procedura di esportazione del server dal modulo dell'oggetto di elaborazione
Commands.Columns.Add("Utilizzo", New TypeDescription("Riga"));

// Il parametro successivo specifica se deve essere mostrata una notifica all'inizio e alla fine di un processo di elaborazione. Non ha senso quando si apre il modulo
Commands.Columns.Add("ShowAlert", NewTypeDescription("Boolean"));

// Per un modulo stampato, deve contenere la stringa PrintMXL
Commands.Columns.Add("Modificatore", New TypeDescription("Riga"));

Squadra di ritorno;

EndFunction

//Crea una nuova riga nella tabella dei comandi

Funzione AddCommand(CommandTable, View, Identifier, Usage, ShowAlert = False, Modifier = "")
NuovoComando = TabellaComandi.Add();
Nuova squadra. Visualizza = Visualizza;
Nuova squadra. Identificatore= Identificatore;
Nuova squadra. Utilizzo = Utilizzo;
Nuova squadra. MostraAlert= MostraAlert;
Nuova squadra. Modificatore= Modificatore;
EndFunction

Funzione InformationOnExternalProcessing() Esporta
Parametri di registrazione = Nuova struttura;
ArrayDestinations = Nuovo array;
Array di assegnazioni.Add("Document.Hiring");
Parametri di registrazione.Insert("Visualizza", "PrintForm"); //forse - Riempimento di un oggetto, Report aggiuntivo, Creazione di oggetti correlati...
Parametri di registrazione.Insert("Destinazione", Array di destinazione);
Parametri di registrazione.Insert("Nome", "Hello World"); //nome con il quale verrà registrato il trattamento nella directory dei trattamenti esterni
Parametri di registrazione.Insert("Versione", "1.0");
Parametri di registrazione.Insert("SafeMode", TRUE);
Parametri di registrazione.Insert("Informazioni", "SAMPLE");//questo è come apparirà all'utente la descrizione del modulo stampabile
TabellaComandi = Ottieni TabellaComandi();
AddCommand(CommandTable, "Hello World", "Layout", "CallServerMethod", True, "MXL Print");
Parametri di registrazione.Insert("Comandi", CommandTable);
ReturnRegistrationParameters;
EndFunction

In realtà, dovrai armeggiarlo ogni volta che crei un nuovo modulo di stampa esterno. Dal pezzo di codice è chiaro che lo collegheremo al documento “Assunzione”, di conseguenza scriverai il tuo. Il nostro modulo stampato si chiamerà "Hello World", ancora una volta lo cambieremo con il nostro. Qui sarebbe conveniente scrivere nel template un cartellone pubblicitario evidente in modo che attiri l'attenzione, per non dimenticare di correggerlo in seguito, secondo me “Hello world” torna utile; La versione è per te, scrivi quello che vuoi, verrà visualizzato sotto forma di elemento nella directory dell'elaborazione esterna. La parola "SAMPLE" è visibile anche solo sotto forma di elenco di moduli stampati. Successivamente aggiungiamo un comando, qui il secondo parametro è il nome del pulsante, questo è ciò che l'utente vedrà nel documento alla voce di menu “stampa”.

Questo insieme di tre procedure è sufficiente affinché l'elaborazione venga aggiunta alla directory dell'elaborazione esterna; tutto questo codice confuso è codice di servizio e non ha nulla a che fare con l'algoritmo di stampa; In effetti, gli autori del BSP ci hanno costretto a programmare in modo così difficile che se prima iniziavi immediatamente a scrivere la funzione "Stampa", ora quando scrivi l'elaborazione da zero, e non secondo un campione, perderai tempo il servizio. Prima i parametri di registrazione erano facoltativi e venivano indicati nel layout di elaborazione, ora tutto sembra molto più serio. La prima impressione quando l'ho visto è stata fantastica, tante possibilità, tutto è unificato... ma in pratica creo sempre un solo comando in un'unica elaborazione e lo collego a un documento. Quelli. infatti mi servono due righe per la registrazione: nome dell'oggetto, nome del pulsante. E qui è tutto così... beh, vabbè, non sta a me giudicare.

Passo quattro- non meno interessante.

Funzione STAMPA?

Ma no, ora non è una funzione, ma una procedura.

Come posso ripristinare il layout?

Invialo alla funzione del modulo del sottosistema di stampa globale.

Va bene

Ecco il testo di questa procedura:

Procedura Stampa (matrice di oggetti, raccolta di PrintForms, PrintObjects, parametri di output) Esporta
Se PrintManagement.NeedPrintLayout(CollectionPrintForms, "Layout") Allora
Gestione stampa.Output TabularDocumentIntoCollection(CollectionofPrintForms,
"Disposizione", "Disposizione",
GenerateTabDocumentSample(Array di oggetti, Oggetti di stampa));
finisci se;
FineProcedura

Ora per un chiarimento. La prima riga della procedura contiene una condizione leggermente poco chiara. Il fatto è che quando chiamiamo la procedura di stampa, il sistema ci passa una tabella di valori, che indica cosa dobbiamo stampare. In sostanza la funzione ManagePrint.NeedPrintLayout(...) verifica la presenza nella tabella dei valori di una riga in cui nella colonna "Nome" è presente una riga con il nome del layout. In pratica, nella maggior parte dei casi la cosa è inutile, perché... la nostra elaborazione potrà generare un solo modulo stampato. Quelli. Questa condizione può essere omessa e non influirà sulle prestazioni.

Successivamente, Gestione stampa. Output TabularDocumentIntoCollection(...) - questo è ciò che aggiunge il layout tabulare dove è necessario, in modo che possa quindi essere visualizzato sullo schermo. Se devi mostrare il documento del tuo foglio di calcolo nella tua finestra (non in una standard), non chiamare questa procedura, ma scrivi semplicemente il tuo codice qui.

Aggiungo inoltre che la procedura di Stampa viene eseguita sul client e, se necessario, è possibile aprire qui un modulo gratuito per chiedere all'utente informazioni aggiuntive necessarie per la stampa.

Successivamente, GenerateTabDocumentSample(...) è una funzione che dobbiamo scrivere nel modulo di elaborazione e che restituisce un documento tabellare. In 100 casi su 100 sarà basato su server, perché... dobbiamo ottenere il valore dei dettagli dagli oggetti elencati nel parametro "Object Array".

Passo cinque- creazione di un layout.

Evviva, finalmente arriveremo all'algoritmo di layout, al recupero dei dati, ecc.

Ma nel nostro campione agiremo in modo prosaico e non commenterò nemmeno qui)))

Funzione GeneraTabDocumentSample(Matrice di oggetti, Oggetti di stampa)
tabDoc = Nuovo TabularDocument;
layout = GetLayout("Layout");

AreaHeader = Layout.GetArea("Intestazione");
tabDoc.Output(areaHeader);

Restituisci TabDoc;
EndFunction

Questo è tutto, grazie per l'attenzione

Caricamento...Caricamento...