15.07.2023
Rumah / Menguasai PC / Dapat dicetak eksternal dengan parameter. Keluaran formulir yang dapat dicetak dengan permintaan data ke formulir "Cetak dokumen" dari subsistem "Cetak" BSP. Menambahkan Footer ke Tata Letak

Dapat dicetak eksternal dengan parameter. Keluaran formulir yang dapat dicetak dengan permintaan data ke formulir "Cetak dokumen" dari subsistem "Cetak" BSP. Menambahkan Footer ke Tata Letak

Pertimbangkan untuk menulis yang dapat dicetak sederhana 1s 8.1 - 8.2 pada contoh konfigurasi Akuntansi Perusahaan 2.0. Misalkan Anda ingin menulis dokumen eksternal yang dapat dicetak: tampilkan data utama dokumen, serta dari bagian tabular Barang-barang: nomenklatur, harga, kuantitas dan jumlah.

Anda dapat mengunduh contoh yang dihasilkan dengan .

Di konfigurator Perusahaan 1C 8 membuat pemrosesan eksternal ( File->Baru->Pemrosesan Eksternal), tetapkan nama, buat atribut yang diperlukan untuk formulir pencetakan eksternal ReferenceToObject dengan tipe Acuan Dokumen Realisasi Barang Jasa.

Buat tata letak yang dapat dicetak

Menambahkan yang baru tata letak, biarkan jenis tata letak dokumen spreadsheet. Kami membuat tiga area pada tata letak: Tajuk, Data Dan Ruang bawah tanah. Anda dapat melakukannya dengan memilih jumlah baris yang diinginkan dan mengklik menu Tabel->Nama->Tetapkan Nama (Ctrl+Shift+N).

Setelah itu, kami mulai menempatkan teks dan parameter di area tersebut. Mari kita taruh di header nama yang dapat dicetak, nomor dokumen Dan organisasi, serta gambar batas tajuk tabel dan tulis nama kolomnya. Saat membuat parameter di properti sel, pada tab Tata Letak, setel properti isian ke dalam makna Parameter.

Di daerah Data buat parameter untuk mengeluarkan baris dari bagian tabular ( Nomenklatur, harga dll.), tetapi di daerah tersebut Ruang bawah tanah untuk total dengan kuantitas dan jumlah.

Pemrograman

Mari kita pergi ke modul objek yang dapat dicetak Actions->Buka modul objek.

Mari kita membuat wajib formulir tercetak fungsi ekspor Segel().

Fungsi Cetak () Ekspor Fungsi Akhir

Mari kita membuat variabel dalam fungsi dokumen spreadsheet, di mana formulir cetak akan ditampilkan, kami dapatkan tata letak Dan bidang tata letak.

TabDoc = Dokumen Spreadsheet baru; Tata Letak = GetLayout("Tata Letak" ); Area Header = Layout.GetArea("Header" ); ScopeData = Layout.GetScope("Data" ); AreaFooter = Layout.GetArea("Basement" );

Isi parameternya topi dan bawa ke dokumen spreadsheet .

Header Area.Parameters.HeaderText = +ObjectReference.Number; HeaderScope.Parameters.Organization = LinkToObject.Organization; TabDoc.Output(HeaderArea);

Untuk mendapatkan baris tabel Barang-barang menggunakan kueri.

Permintaan = permintaan baru; Query.SetParameter("Referensi", ObjectReference); Query.Text = "PILIH | Realisasi Barang, Jasa, Barang. Nomenklatur, | Realisasi Barang, Jasa, Barang Jumlah, | Realisasi Barang, Jasa, Barang, Harga, | Penjualan Barang, Jasa, Barang Kuantitas| DARI | Dokumen.Penjualan Barang.Jasa.Barang SEBAGAI Realisasi Barang.Jasa.Barang|DIMANA | ImplementasiProdukLayananProduk.Referensi = &Referensi";

Kami meneruskan alat peraga ke parameter permintaan ReferenceToObject untuk menentukan dalam kondisi DI MANA bahwa kami hanya memerlukan data dari dokumen tempat kami menampilkan formulir cetak. Untuk mendapatkan pilihan kueri, pertama-tama kita jalankan dan kemudian pilih baris.

Pilihan = Query.Execute().Select();

Selanjutnya, di loop, isi parameter area Data untuk setiap baris pemilihan dokumen dan menampilkannya dokumen spreadsheet. Juga di loop kami menghitung nilai total jumlah Dan jumlah. Kami tidak akan mengisi setiap parameter secara terpisah, tetapi kami akan menggunakan prosedur IsiNilaiProperti((<Приемник>, <Источник>) dari konteks global, itu menyalin nilai properti <Источника> ke properti <Приемника> . Pencocokan dilakukan dengan nama properti. Anda dapat membaca lebih lanjut tentang ini di asisten sintaksis 1C Enterprise 8.

TotalJumlah = 0 ; JumlahJumlah = 0 ; While Selection.Next() Loop FillPropertyValues(DataArea.Parameters, Selection); JumlahJumlah = JumlahJumlah + Sampel.Jumlah; TotalQuantity = TotalQuantity + Sample.Quantity; TabDoc.Output(DataArea); Siklus Akhir ;

Isi dan tampilkan area Ruang bawah tanah.

AreaBasement.Parameters.TotalQuantity = TotalQuantity; RegionBasement.Parameters.TotalAmount = JumlahTotal; TabDoc.Output(RegionFooter);

Kami mengembalikan dokumen spreadsheet yang diisi dari fungsi Segel().

kembalikan TabDoc;

Jika Anda menggunakan salah satu konfigurasi tipikal, maka setelah mengembalikan dokumen spreadsheet 1C secara otomatis akan menampilkan formulir yang dicetak. Anda juga dapat menggunakan metode spreadsheet untuk output. Menunjukkan().

5. Menghubungkan printable ke dokumen

DI DALAM konfigurasi tipikal 1C 8 ada direktori untuk mendaftarkan formulir pencetakan eksternal Pemrosesan Eksternal. Untuk terhubung, buka menu dalam mode perusahaan Layanan-> Laporan tambahan dan pemrosesan->Bentuk pencetakan eksternal tambahan.

Menambahkan elemen baru direktori, muat formulir cetak dari disk dan pilih jenis dokumen.

Sekarang dalam dokumen Penjualan barang dan jasa cetakan baru akan muncul.

Cetak formulir pendaftaran otomatis

Untuk menghindari keharusan memilih jenis dokumen secara manual saat menghubungkan yang dapat dicetak, Anda dapat mengonfigurasi pendaftaran otomatis. Untuk melakukan ini, kami menambahkan tata letak baru dan menyebutnya Parameter_Pendaftaran Otomatis(hanya begitu) dan di sel pertama kita menulis Dokumentasi.<Наименование документа> (atau Buku referensi.<Наименование справочника> ).

Nah, saat menghubungkan formulir cetak, kita akan diminta untuk menggunakannya opsi pendaftaran otomatis.

Setiap orang telah melihat lebih dari sekali bagaimana dalam konfigurasi tipikal yang dibangun berdasarkan BSP (Perpustakaan Subsistem Standar), formulir cetak yang dibuat berdasarkan dokumen Spreadsheet dikeluarkan ke formulir khusus "Mencetak Dokumen". Formulir ini adalah bagian dari subsistem "Cetak" dari BSP. Saat mengembangkan printables Anda, terkadang Anda perlu meminta pengguna untuk data tambahan yang diperlukan untuk pencetakan. Di sini muncul pertanyaan, bagaimana dalam hal ini menampilkan formulir cetak dalam formulir "Cetak Dokumen". Pada artikel ini, saya akan mempertimbangkan bagaimana mengimplementasikan keluaran dari formulir yang dapat dicetak ke formulir yang disebutkan dari subsistem "Cetak", jika kami ingin meminta data tambahan dari pengguna sebelum mengeluarkan formulir yang dapat dicetak. Dua kasus akan dipertimbangkan di sini: saat cetakan diimplementasikan menggunakan subsistem "Laporan dan pemrosesan tambahan" dan saat cetakan ditambahkan ke konfigurasi dalam mode konfigurator, mis. perubahan dilakukan pada konfigurasi default.

Formulir "PrintDocuments" menyediakan beberapa fungsi tambahan saat bekerja dengan formulir cetak, seperti:

  • tombol untuk mencetak ke printer, langsung di formulir;
  • indikasi jumlah eksemplar, formulir tercetak;
  • mengedit formulir cetak yang dihasilkan;
  • kemampuan untuk menyimpan formulir yang dicetak di berbagai format data (Excel, Word, PDF, dll.);
  • mengirim formulir cetak melalui email;
  • pekerjaan yang nyaman dengan satu set dokumen.

Formulir ini sekarang digunakan oleh 1C di semua konfigurasi standar untuk menampilkan formulir cetak dokumen dan elemen direktori. Dan tentu saja, saat mengembangkan formulir pencetakan kami, agar tidak melampaui praktik yang diterima, kami juga harus menampilkan formulir pencetakan kami menggunakan alat yang disediakan.

Saat menggunakan metode standar untuk menambahkan formulir pencetakan, subsistem "Cetak" akan melakukan segalanya untuk kami dan menampilkan formulir pencetakan sebagaimana mestinya. Misalnya:

  1. Saat menambahkan perintah cetak ke dokumen menggunakan subsistem "Cetak", kita perlu menjelaskan perintah cetak dalam prosedur AddPrintCommands yang menunjukkan pengelola cetak tempat prosedur Cetak diterapkan;
  2. Saat membuat Pemrosesan tambahan, kita perlu, dalam modul objek pemrosesan dalam fungsi DetailOnExternalProcessing, untuk mendeskripsikan perintah dengan tipe penggunaan Memanggil metode server dan segera mengimplementasikan prosedur Cetak, yang dengan cara tertentu mengimplementasikan panggilan ke formulir formulir pencetakan.

Dalam kasus seperti itu, seperti yang sudah saya katakan, subsistem pencetakan akan menampilkan formulir cetak yang kami buat sendiri, sesuai kebutuhan. Metode tersebut menyiratkan pembentukan langsung dari bentuk pencetakan, yaitu. melewati objek untuk dicetak ke prosedur cetak, membentuk dokumen spreadsheet dan menampilkannya di layar.

Namun bagaimana jika, sebelum memulai pembuatan dokumen spreadsheet, Anda perlu meminta beberapa data dari pengguna? Itu. kita perlu menunjukkan formulir. Dalam hal ini, urutan standar pembentukan formulir pencetakan dilanggar dan kami perlu memikirkan cara mentransfer formulir pencetakan kami ke formulir "Mencetak Dokumen".

Dalam hal ini, dua situasi dimungkinkan:

  1. Saat cetakan dibuat dengan perubahan konfigurasi;
  2. Ketika printable dibuat tanpa mengubah konfigurasi, mis. Subsistem "Laporan dan pemrosesan tambahan" digunakan.

Kami membuat yang dapat dicetak dengan menambahkannya melalui konfigurator.

Varian pertama. Melalui penciptaan pengolahan dengan tim.

Opsi ini menyediakan untuk menambahkan pemrosesan langsung ke Objek Metadata:

Pertimbangkan opsi ketika kita perlu mengimplementasikan bentuk pencetakan objek tertentu, misalnya, elemen direktori. Untuk melakukan ini, kita perlu bekerja di empat area pemrosesan:

  1. Buat perintah yang akan memanggil bentuk printable kita;
  2. Buat formulir itu sendiri;
  3. Buat tata letak yang dapat dicetak;
  4. Lakukan perubahan pada modul pengelola pemrosesan.

Kami membuat tim

Tentukan di properti perintah:

  • Kelompokkan di mana kita ingin perintah ditampilkan dalam formulir;
  • Jenis parameternya hanyalah buku referensi atau dokumen yang bentuk cetaknya sedang kita buat;
  • Mode penggunaan parameter - Banyak. Untuk dapat menampilkan formulir yang dicetak, sekaligus untuk beberapa elemen yang dipilih dalam daftar.

Dalam modul perintah, kami membuka formulir pemrosesan dengan meneruskannya ke elemen direktori yang dipilih yang diperlukan untuk membuat formulir pencetakan. Mari kita tidak berfilsafat secara licik di sini dan sedikit mengoreksi kode tipikal yang diganti oleh platform ke dalam prosedur pemrosesan perintah:

&Pada Penanganan Perintah Prosedur Klien(Parameter Perintah, Parameter Eksekusi Perintah) //Masukkan konten penangan. FormParameters = New Structure("PrintData", CommandParameter); OpenForm("Processing.PrintForm.Form", FormParameters,CommandExecutionParameters.Source,CommandExecutionParameters.Uniqueness,CommandExecutionParameters.Window, CommandExecutionParameters.NavigationLink); Prosedur Akhir

Parameter prosedur, Parameter Perintah, hanya berisi elemen yang telah kita pilih untuk dicetak.

Buat formulir

Mari tambahkan formulir ke pemrosesan, buat atribut formulir dari jenis Daftar Nilai dan detail input yang diperlukan untuk kami opsi tambahan untuk formulir cetak:

DataToPrint - ketik ValueList;

Jumlah Baris - ketik Nomor.

Contoh saya akan murni demonstratif, jadi mari kita tentukan secara kondisional apa tujuan saya untuk menampilkan representasi elemen yang dipilih dalam garis cetak dan jumlah garis yang kita pilih sebagai parameter tambahan pada formulir.

Buka modul formulir dan tulis kode berikut:

&OnServerCreateProcedureOnServer(Kegagalan, Pemrosesan Standar)PrintData.LoadValues(Parameters.PrintData); Akhir Prosedur &Pada Prosedur Klien Print(Command) ControlPrintClient.ExecutePrintCommand("Processing.PrintForm", //Print Manager "PrintForm", //Identifier GetObjectsToPrint(), //Print Objects ThisObject, //Pemilik form dari mana pencetakan disebut GetPrintParameters()); //Print parameter - parameter arbitrer untuk diteruskan ke manajer cetak Kembalikan Array; Fungsi EndFunction &AtServer GetPrintSettings() PrintSettings = Struktur Baru; PrintParameters.Insert("Header Formulir", "Formulir Cetak"); //Salah satu parameter untuk formulir "Cetak dokumen". // Menentukan judul formulir keluaran yang dapat dicetak. //Di sini kami menambahkan parameter kami yang ingin kami transfer tambahan ke manajer cetak. PrintParameters.Insert("Jumlah Baris", Jumlah Baris); Kembalikan ParameterCetak; Fungsi Akhir

Kami mendefinisikan prosedur OnCreateAtServer dan di dalamnya kami membaca dari parameter yang kami berikan dari perintah saat membuka formulir, daftar objek yang kami perlukan untuk menghasilkan cetakan.

Kami membuat perintah Cetak dalam formulir dan menulis penangannya, di mana kami memanggil fungsinya modul umum ManagePrintClient.RunPrintCommand, kami menetapkan parameter yang diperlukan dari fungsi ini, yaitu:

  • Manajer cetak - nama objek dalam modul manajer, yang mendefinisikan fungsi Cetak yang membentuk cetakan kami;
  • Pengidentifikasi - pengidentifikasi yang dapat dicetak untuk dicetak. Dengan pengidentifikasi ini, kami akan memilih dalam fungsi Cetak modul manajer mana formulir yang dapat dicetak perlu dicetak;
  • Objek cetak secara langsung adalah objek yang membentuk formulir pencetakan;
  • Pemilik formulir;
  • Parameter cetak - di sini kami membentuk dan meneruskan struktur dengan parameter cetak, di sana kami meneruskan parameter tambahan yang kami minta dari pengguna dalam formulir pemrosesan.

Sebenarnya, dengan memanggil fungsi ExecutePrintCommand dari formulir pemrosesan, kami memecahkan masalah menampilkan formulir yang dapat dicetak dalam formulir "PrintDocuments". Selanjutnya, subsistem "Cetak" akan melakukan tindakan standar dan membawa eksekusi ke prosedur Cetak, yang harus kita tentukan di pengelola modul pemrosesan kita.

Membuat tata letak yang dapat dicetak

Membuat perubahan pada modul manajer pemrosesan

Mulai saat ini, kami melakukan tindakan standar untuk pengembangan formulir pencetakan menggunakan subsistem "Cetak" dari BSP.

Tambahkan kode berikut ke modul manager:

Prosedur Cetak(ObjectsArray,PrintParameters,PrintFormCollection,PrintObjects,OutputParameters) ket(ObjectsArray,PrintParameters), "Processing.PrintForm.PF_MXL_PrintForm",); Berakhir jika; EndProcedure &AtServer Function PrintLayout(ObjectArray,PrintSettings) SpreadsheetDocument = New SpreadsheetDocument; //Membuat dokumen spreadsheet //////////////////////////////////////////// / ///////////////////////////////////////////////// // //////////////// // BAGIAN MODUL YANG DITENTUKAN ULANG // // Di sini kita membentuk Tata Letak yang dapat dicetak = GetLayout("PF_MXL_PrintForm"); Untuk setiap Objek Dari Objek Array Loop AreaHeader = Layout.GetArea("Header"); AreaObject = Tata Letak.Dapatkan Area("Objek"); SpreadsheetDocument.Output(RegionHeader); AreaObject.Parameters["Objek"] = Objek; SpreadsheetDocument.Output(RegionObject); Untuk Hitung = 1 ByPrintSettings["Jumlah Baris"] Loop AreaString = Layout.GetArea("String"); RegionString.Parameters["String"] = Hitung; SpreadsheetDocument.Output(AreaString); Akhiri Siklus; SpreadsheetDocument.OutputHorizontalPageSeparator(); Akhiri Siklus; // BAGIAN MODUL YANG DITENTUKAN ULANG /////////////////////////////////////////// ///////////////////////////////////////////////// /// ///////////////// Kembalikan Dokumen Spreadsheet; // Kembalikan dokumen spreadsheet EndFunction

Opsi kedua. Melalui penerapan perintah cetak.

Opsi ini sangat mirip dengan yang pertama dalam hal pencetakan. Perbedaannya terletak pada cara membuat perintah yang akan ditampilkan ke antarmuka dan memulai pencetakan kita.

Dalam hal ini, saat menentukan perintah cetak, kami juga menggunakan subsistem "Cetak" dari BSP. Alih-alih mendefinisikan perintah untuk membuka pemrosesan dalam pemrosesan itu sendiri, kita perlu pergi ke modul manajer, objek yang ingin kita tambahkan yang dapat dicetak, dan mengatur deskripsi perintah cetak dalam prosedur AddPrintCommands(Perintah Cetak):

Prosedur AddPrintCommands(PrintCommands) ExportPrintCommand = PrintCommands.Add(); PrintCommand.Identifier = "PrintForm"; PrintCommand.View = НStr("ru = "Formulir cetak""); PrintCommand.Handler = "CommonModulePrintForm.ProcessingPrintFormCommand"; PrintCommand.Order = 100; Prosedur Akhir

Di sini kami menambahkan ke semua bentuk direktori (saya ingatkan Anda bahwa kami bekerja dengan direktori rekanan), perintah cetak yang disebut "Cetak formulir yang dapat dicetak". Dan inilah poin utama yang harus diperhitungkan. Anda dapat menambahkan dua jenis perintah ke formulir:

1. Memanggil prosedur Print dari modul manager;

2. Memanggil metode klien.

Inilah tepatnya panggilan ke metode klien yang kita butuhkan. Metode klien akan memungkinkan kami untuk memanggil formulir pemrosesan di mana kami akan meminta data yang kami butuhkan kepada pengguna sebelum mencetak.

Untuk mengimplementasikan panggilan seperti itu, saat menentukan perintah, setel Handler untuknya (lihat kode di atas). Sebuah string yang berisi jalur ke fungsi klien diteruskan ke Penangan Perintah, mis. jalur ke fungsi Ekspor Modul Bersama pada klien. Ini adalah fungsi yang akan dipanggil saat mengklik perintah cetak yang kita tambahkan ke formulir.

Seperti yang Anda pahami, agar ini berfungsi, Anda perlu membuat CommonModule ini dan menentukan fungsi Ekspor. Oleh karena itu, kami menulis kode berikut di modul umum kami:

Function HandlingPrintCommandPrintForm(PrintParameters) Ekspor //Masukkan konten handler. FormParameters = New Structure("PrintData",PrintParameters.PrintObjects); OpenForm("Processing.PrintForm.Form", FormParameters); Fungsi Akhir

Di sini kami melakukan hal yang sama seperti pada implementasi pertama, kami membuka formulir yang dapat dicetak, hanya sekarang PrintData kami akan dimuat dalam parameter yang diteruskan ke fungsi PrintParameters, atau lebih tepatnya di bidang PrintObjects.

Setelah kami membuka formulir pemrosesan, semua tindakan serupa dengan opsi pertama.

Implementasi opsi ini dapat ditemukan dalam konfigurasi biasa, dalam mekanisme yang terkait dengan persetujuan pencetakan untuk pemrosesan data pribadi.

Kami membuat pemrosesan tambahan.

Tetapi bagaimana jika ini bukan konfigurasi kami dan didukung? Dan secara umum, kami tidak ingin masuk ke konfigurasi dan mengeditnya?

Dalam hal ini, kita perlu menggunakan subsistem "Laporan dan pemrosesan tambahan" dari BSP.

Dengan solusi ini, kita perlu menulis kode hanya di dua tempat, dan semuanya sedang diproses tambahan di masa mendatang:

1. Memproses modul objek;

2. Memproses modul formulir.

Di modul objek, tulis kode berikut:

////////////////////////////////////////////////// / ///////////////////////////// // PROGRAM INTERFACE #API area // Mengembalikan informasi tentang pemrosesan eksternal . FunctionExternalProcessingDetails() ExportRegistrationParameters = AdditionalReportsAndProcessing.ExternalProcessingDetails("2.2.2.1"); RegistrationParameters.View = AdditionalReportsAndProcessingClientServer.ProcessingViewPrintForm(); RegistrationParameters.Version = "1.0"; NewCommand = RegistrationParameters.Commands.Add(); NewCommand.View = НStr("ru = "Formulir pencetakan eksternal dengan permintaan awal untuk data""); NewCommand.Identifier = "ExternalPrintForm"; NewCommand.Usage = AdditionalReportsAndProcessesClientServer.CommandTypeOpenForm(); NewCommand.ShowAlert = true; NewCommand.Modifier = "PrintMXL"; Kembali Parameter Pendaftaran; Prosedur EndFunction Cetak(PrintData,PrintFormCollection,PrintObjects,OutputParameters) Ekspor IfPrintControl.NeedPrintLayout(PrintFormCollection, "ExternalPrintForm") ThenPrintControl.OutputSpreadsheetDocumentToCollection(PrintFormCollection, "ExternalPrintForm", nstr("ru = "Exam Sheet" ""), PrintLayout(PrintData ) ); Berakhir jika; EndProcedure &AtServer Function PrintLayout(PrintData)PrintParameters = PrintData.Value; //Dapatkan setelan cetak dari elemen pertama ValuesListObjectArray = PrintData.Copy(); //Salin daftar nilai ArrayObjects.Delete(0); //Hapus baris yang disalin elemen yang mengandungPrintSettings SpreadsheetDocument = New SpreadsheetDocument; //Membuat dokumen spreadsheet //////////////////////////////////////////// / ///////////////////////////////////////////////// // //////////////// // BAGIAN MODUL YANG DITENTUKAN ULANG // // Di sini kita membentuk formulir cetak Layout = GetLayout("Layout"); Untuk setiap Objek Dari Objek Array Loop AreaHeader = Layout.GetArea("Header"); AreaObject = Tata Letak.Dapatkan Area("Objek"); SpreadsheetDocument.Output(RegionHeader); AreaObject.Parameters["Objek"] = Objek; SpreadsheetDocument.Output(RegionObject); Untuk Hitung = 1 ByPrintSettings["Jumlah Baris"] Loop AreaString = Layout.GetArea("String"); RegionString.Parameters["String"] = Hitung; SpreadsheetDocument.Output(AreaString); Akhiri Siklus; SpreadsheetDocument.OutputHorizontalPageSeparator(); Akhiri Siklus; // BAGIAN MODUL YANG DITENTUKAN ULANG /////////////////////////////////////////// ///////////////////////////////////////////////// /// ///////////////// Kembalikan Dokumen Spreadsheet; //Kembalikan dokumen spreadsheet EndFunction #EndArea

Ada dua fungsi dan satu prosedur.

Fungsi standar untuk Pemrosesan tambahan adalah ExternalProcessingInfo(), tanpanya sistem tidak akan mengerti bahwa ini adalah pemrosesan tambahan. Di sini poin pentingnya adalah indikasi bahwa perintah yang diimplementasikan dalam pemrosesan ini memiliki tipe Pembukaan formulir. Itu. kami akan membuka formulir yang kami butuhkan. Berikutnya adalah definisi dari prosedur Print dan fungsi yang secara langsung menghasilkan dokumen spreadsheet kita.

Di sini Anda perlu memperhatikan fakta bahwa perintah cetak dalam hal ini hanya boleh berisi 4 parameter, dan bukan 5 seperti dengan definisi biasa dari perintah cetak di modul manajer. Dalam hal ini, tidak ada opsi untuk melewati Opsi Cetak. Oleh karena itu, kami harus menunjukkan kecerdikan untuk lulus, selain objek itu sendiri, yang membentuk formulir tercetak, tetapi juga parameter yang kami minta dari pengguna dalam formulir.

Jadi kami telah menentukan pemrosesan tambahan, perintah yang akan membuka formulir pemrosesan. Oleh karena itu, langkah selanjutnya adalah membuat formulir pemrosesan.

Dalam formulir ini, kita perlu membuat tiga atribut untuk menyimpan nilai yang akan kita perlukan di masa mendatang. Sebut saja detail ini sebagai berikut:

CommandID - ketik String

Objek Tujuan - ketik ValueList

Di modul formulir ini, tulis kode berikut:

&Prosedur AtServer WhenCreatingAtServer(Failure, StandardProcessing) //Saat membuat di server, ingat parameter standar yang diteruskan oleh subsistem AdditionalReportsAndProcessing AdditionalProcessingReference = Parameters.AdditionalProcessingReference; CommandId = Parameter.CommandId; DestinationObjects.LoadValues(Parameters.DestinationObjects); EndProcedure &AtClient Procedure Print(Command) // Dapatkan kunci keunikan dari form yang dibuka. UniqueKey = String(Pengidentifikasi Unik Baru); // Tentukan dan isi parameter standar untuk bentuk umum PrintDocumentsOpenParameters = New Structure("DataSource, SourceParameters"); OpenParameters.DataSource = Referensi Pemrosesan Tambahan; OpenParameters.SourceParameters = New Structure("CommandIdentifier, Destination Objects"); OpenParameters.SourceParameters.CommandId = CommandId; //Objek untuk dicetak dan parameter yang dimasukkan dalam formulir pemrosesan //akan diteruskan melalui parameter SourceParameters.DestinationObjectsOpeningParameters.SourceParameters.DestinationObjects = GetDestinationObjectsAndPrintParameters(); OpenForm("CommonForm.PrintingDocuments",OpenParameters,FormOwner,UniqueKey); Fungsi EndProcedure &AtServer GetDestinationObjectsAndPrintParameters()PrintData = DestinationObjects.Copy(); ////////////////////////////////////////////////// / ///////////////////////////////////////////////// // /////////// //REDETERMINATED BAGIAN MODUL // //Di sini kita membuat strukturPrintParameters dan mengisinya dengan parameter //yang harus diteruskan ke print functionPrintParameters = New Structure; PrintParameters.Insert("Jumlah Baris", Jumlah Baris); PrintData.Insert(0, PrintSettings); // BAGIAN MODUL YANG DITENTUKAN ULANG /////////////////////////////////////////// ///////////////////////////////////////////////// /// ///////////////// ReturnPrintData; Fungsi Akhir

Dalam prosedur OnCreateOnServer, kami mengisi tiga detail yang kami buat untuk menyimpan parameter yang diteruskan ke formulir pemrosesan.

Selanjutnya, kita mendefinisikan handler untuk tombol print pada form. Dalam penangan ini, kita perlu membuka sendiri formulir "Cetak Dokumen", untuk ini kita perlu menyiapkan Opsi Pembukaan dari struktur tertentu. Dalam struktur ini, setidaknya dua bidang harus ditentukan:

SourceParameters, yang meliputi CommandId dan DestinationObjects:

Pengenal Perintah - juga disimpan saat membuat di server, ini adalah pengenal perintah yang disebut bentuk pemrosesan kami. Oleh karena itu, pengidentifikasi, kami akan menentukan apa yang perlu kami cetak dalam prosedur Cetak di modul objek.

Objek Tujuan - di bidang inilah kita perlu melewati array objek yang membentuk formulir cetak, serta parameter yang diminta dari pengguna dalam formulir.

Bagaimana saya mendefinisikan objek tujuan dapat dilihat di fungsi GetDestinationObjectsAndPrintParameters. Di sini saya menyalin tujuan kami dari form prop, di tempat elemen array di indeks 0, saya menempelkan opsi cetak kami.

Di masa mendatang, array yang ditentukan dengan cara ini akan diteruskan dari formulir "Cetak Dokumen", sebagai parameter pertama dari prosedur Cetak modul objek, yang telah kita definisikan sebelumnya.

Jika kita kembali ke definisi modul objek pemrosesan dan melihat fungsi PrintLayout, dalam tiga baris pertama dari fungsi tersebut Anda dapat melihat bagaimana saya mengekstrak parameter dan objek kami dari data yang diteruskan ke prosedur Print dan kemudian bekerja dengannya.

Manipulasi seperti itu dengan parameter DestinationObjects disebabkan oleh kekhususan pemanggilan prosedur Print dari modul objek. Anda dapat melacak bagaimana parameter diteruskan dan pemanggilan fungsi dilakukan dengan membuka modul formulir PrintDocuments.

Hasil.

Sebagai hasil dari manipulasi tersebut, kami mendapatkan tiga perintah pada formulir yang ingin kami tampilkan formulir cetak:

Penomoran perintah sesuai dengan urutan opsi implementasi.

Semua perintah ini akan melakukan hal yang sama:

Tampilkan formulir permintaan parameter tambahan

Tampilkan hasil cetak yang dihasilkan dalam formulir "Cetak Dokumen".. Apa yang kami inginkan:

P.S. Sebagai templat, untuk mengimplementasikan cetakan saya dengan permintaan untuk parameter tambahan, saya membongkar kedua pemrosesan yang berpartisipasi dalam ketiga metode pembentukan cetakan.

Artikel ini akan menjelaskan secara rinci bagaimana seorang pemula yang tidak mengetahui 1C 8 dengan baik untuk membuat cetakan. Misalnya, mari kita ambil salah satu konfigurasi 1C 8 yang paling umum - Akuntansi 2.0. Membuat tahapan penulisan 1C yang dapat dicetak:

  • Membuat file eksternal yang dapat dicetak;
  • Pembuatan tata letak formulir cetak;
  • Menulis kode program untuk menampilkan data formulir tercetak di layar;
  • Pembuatan parameter untuk pendaftaran otomatis formulir cetak;
  • Menghubungkan formulir pencetakan eksternal ke pangkalan Perusahaan 1C.

Pembuatan formulir cetak 1C. Perumusan masalah

Kami diminta dalam konfigurasi Akuntansi 2.0 membuat dokumen yang dapat dicetak Penerimaan barang dan jasa. Di header formulir yang dicetak, tampilkan data berikut:

  • Organisasi;
  • Rekanan;
  • perjanjian rekanan;
  • Tanggal penerimaan.

Menampilkan data tabel dalam bentuk tabel Barang-barang dokumen. Tabel harus menyertakan kolom berikut:

  • Tata nama;
  • Kuantitas;
  • Harga;
  • Jumlah;
  • Serta harga item untuk tanggal saat ini (berdasarkan jenis harga dari dokumen).

File pemrosesan eksternal

Mari kita lanjutkan untuk memecahkan masalah. Untuk memulai, buka 1C 8 dalam mode Configurator. Dalam mode inilah semua pengembangan dilakukan pada platform 1C 8. Sekarang kita perlu membuat file pemrosesan eksternal. Untuk melakukan ini, klik pada menu Berkas -> Baru... atau dengan ikon file baru.

Di jendela yang terbuka, pilih item Pemrosesan eksternal.

Lebih jauh ke lapangan Nama Anda harus memasukkan nama pemrosesan eksternal. Dalam kasus kami, sebut saja: "Formulir Pencetakan", bidang sinonim akan diisi secara otomatis. Harap dicatat bahwa di lapangan Nama, pemrosesan eksternal, nama harus ditulis tanpa spasi dan tanda baca.

Tambahkan atribut pemrosesan eksternal ObjectReference dan pilih untuk dia ketik Dokumen Referensi. Penerimaan Barang Jasa. Untuk melakukan ini, pilih item di pohon metadata pemrosesan eksternal 1C Persyaratan dan tekan tombol Menambahkan(tombol tambah hijau). Di bagian kanan layar, jendela properti atribut akan terbuka, di lapangan Nama menulis - LinkToObject. DI DALAM bidang Jenis tekan tombol dengan tiga titik.

Perluas cabang di pohon tipe Tautan Dokumen, dan temukan item Penerimaan Barang dan Jasa di sana, centang kotak di sebelahnya dan klik OKE.

Simpan file pemrosesan eksternal ke HDD, untuk ini kami menggunakan menu Berkas -> Simpan, ikon Menyimpan(floppy disk biru) atau pintasan keyboard ctrl+s. Beri nama file yang disimpan "PrintForm".

Buat tata letak yang dapat dicetak

Mari mulai membuat tata letak cetak 1C. Tata letak berfungsi sebagai template untuk keluaran printable, jadi jika Anda ingin printable Anda terlihat bagus, Anda harus memperhatikannya.

Mari tambahkan tata letak baru di pohon metadata pemrosesan eksternal, kami tidak akan mengubah apa pun di jendela perancang tata letak dan menekan tombol Siap.

Di tata letak baru yang terbuka, mari buat beberapa area yang diperlukan untuk menampilkan formulir yang dicetak. Semua area tata letak yang kita butuhkan akan horizontal, jadi untuk membuat area baru, kita perlu memilih jumlah yang dibutuhkan garis tata letak dan pergi ke menu Tabel -> Nama -> Tetapkan Nama atau gunakan pintasan keyboard Ctrl+Shift+N kemudian masukkan nama daerah di dalam kotak. Saat membuat area tata letak, jangan takut membuat kesalahan dengan jumlah garis, Anda selalu dapat menambah atau menghapusnya. Untuk menghapus garis tata letak 1C, pilih garis yang diinginkan dan pilih masuk menu konteks gugus kalimat Menghapus. Untuk menambahkan garis baru ke tata letak, pilih baris mana pun dari tata letak dan pilih item di menu konteks mendorong terpisah.

Menambahkan Tajuk Tata Letak

Mari kita buat area terlebih dahulu. Topi, itu akan menampilkan data untuk header formulir yang dicetak. Untuk area ini, kita membutuhkan tujuh garis tata letak. Pilih mereka dan, seperti yang saya tulis di atas, tekan pintasan keyboard Ctrl+Shift+N, di lapangan Nama tulis "Topi" dan tekan tombol OKE.

Mari isi area tata letak dengan data yang kita butuhkan. Biasanya, tidak ada formulir cetak yang lengkap tanpa header, jadi kita juga akan membuatnya di header layout kita. Karena di header, selain nama formulir yang dicetak, kami juga akan menampilkan nomor dokumen tempat pencetakannya, kami akan mengatur teks header di tata letak sebagai parameter. Parameter tata letak adalah sel tata letak yang dirancang khusus di mana berbagai data dapat ditampilkan menggunakan bahasa 1C 8 bawaan. Judul harus ditampilkan di seluruh lebar formulir yang dicetak, jadi mari kita putuskan berapa banyak sel tata letak yang cukup untuk kita cetak pada standar orientasi lanskap lembaran.

Biasanya tiga belas atau empat belas sel tata letak sudah cukup, pilih di baris pertama area Topi dan bergabung menjadi satu sel ( Menu Konteks -> Gabung). Setelah itu, klik dua kali pada sel besar yang dihasilkan dan tulis nama parameternya, dalam kasus kita "HeaderText". Agar teks yang dimasukkan menjadi parameter lengkap, klik kanan pada sel dan pilih item di menu konteks Properti. Penanda buku Tata letak menemukan lapangan isian dan pilih nilainya Parameter. Parameter dalam tata letak 1C ditunjukkan dengan tanda kurung "<>».

Judul formulir yang dicetak harus menonjol di antara teks lainnya, jadi sekali lagi pilih sel dan gunakan ikon pada panel pemformatan tata letak untuk mengatur perataan teks Terpusat dan ukuran huruf 14.

Setelah teks judul, kami akan menampilkan di area tersebut Topi data tentang organisasi, rekanan, perjanjian rekanan dan tanggal penerimaan barang. Karena semua data ini juga diambil dari dokumen, kami juga akan menghiasinya dengan parameter. Selain itu, sebelum setiap parameter, Anda harus menulis teks penjelasan sehingga pengguna dapat dengan mudah memahami di mana organisasi itu berada, dan di mana rekanannya, dll. Semua tindakan ini mirip dengan membuat tajuk, jadi saya tidak akan membahasnya secara mendetail, saya hanya akan memberikan gambaran tentang apa yang akan terjadi pada akhirnya.

Gambar tersebut menunjukkan bagaimana opsi tata letak berbeda dari teks biasa.

Menambahkan Header Tabel Tata Letak

Hal terakhir yang perlu kita buat di area tata letak ini adalah header tabel, di mana data bagian tabular akan ditampilkan. Barang-barang. Kolom yang diperlukan untuk tabel dijelaskan di bagian "Pernyataan Masalah". Kami juga akan membuat header tabel menggunakan penggabungan sel dan menulis teks (nama kolom). Pilih batas tajuk tabel menggunakan alat Bingkai, yang terletak di bilah pemformatan tata letak.

Menambahkan tabel ke tata letak

Mari buat area lain di tata letak - Data. Ini akan menampilkan tabel data bagian tabular Barang-barang. Kami hanya membutuhkan satu garis tata letak untuk area ini. Untuk menampilkan semua baris bagian tabular dalam bentuk cetakan, kami akan mengisi dan menampilkan area ini beberapa kali. Pembicara di daerah Data harus sesuai dengan kolom header tabel, sehingga pengisiannya tidak akan sulit. Satu-satunya perbedaan adalah di daerah Data kami membutuhkan opsi, bukan hanya teks. Perhatikan juga bahwa secara default parameter numerik diformat di margin kanan dan parameter teks di kiri. Untuk memilih kolom, Anda juga perlu menggunakan alat ini Bingkai.

Menambahkan Footer ke Tata Letak

Area tata letak terakhir yang kita butuhkan adalah Ruang bawah tanah. Ini akan menampilkan total berdasarkan kuantitas dan jumlah. Penciptaan mirip dengan penciptaan suatu daerah Data, tetapi sebagai tambahan, hasilnya harus disorot dengan huruf tebal.

Hasilnya harus berupa tata letak yang terlihat seperti ini:

Pembuatan formulir cetak 1C. Pemrograman

Mari mulai pemrograman - ini adalah tahap terpenting dalam membuat formulir cetak. Pertama-tama, mari kita ke modul objek pelat cetak eksternal, di sinilah kita akan memprogram. Untuk melakukan ini, di jendela utama pemrosesan eksternal, tekan Tindakan -> Buka modul objek.

Dalam modul objek formulir pencetakan eksternal, Anda perlu membuat fungsi ekspor Segel().

Fungsi Cetak() Ekspor EndFunction

perhatikan itu fungsi yang diberikan wajib untuk formulir pencetakan eksternal dalam konfigurasi menggunakan aplikasi reguler. Kami akan menulis semua kode program berikutnya yang diperlukan untuk menampilkan formulir tercetak di dalam fungsi ini.

Inisialisasi Variabel Dasar

Mari kita membuat sebuah variabel TabDok, yang akan berisi dokumen spreadsheet - dialah yang merupakan formulir cetak tempat kami akan menampilkan area tata letak yang terisi.

TabDoc = Dokumen Spreadsheet baru;

ke dalam variabel Tata letak kami akan menerima tata letak formulir cetak yang dibuat oleh kami. Untuk melakukan ini, kami menggunakan fungsi bawaan GetLayout(<ИмяМакета>).

Tata Letak = GetLayout("Tata Letak");

Kami akan memasukkan semua area tata letak ke dalam variabel. Untuk melakukan ini, kami menggunakan metode tata letak Dapatkan Wilayah(<ИмяОбласти>) .

Header Area = Layout.GetArea("Header"); DataArea = Layout.GetArea("Data"); AreaFooter = Layout.GetArea("Basement");

Menampilkan header yang dapat dicetak dalam dokumen spreadsheet

Semua variabel yang diperlukan diinisialisasi. Mari mulai mengisi dan menampilkan area tata letak di dokumen spreadsheet. Pertama-tama, mari isi judul formulir yang dicetak, untuk ini kita perlu memasukkan parameternya Teks Judul, yang kami buat di tata letak, teks yang kami butuhkan. Untuk mengisi nilai-nilai parameter, area tata letak memiliki koleksi khusus, yang disebut - Pilihan. Dari mana melalui "." Anda bisa mendapatkan parameter apapun. Dalam teks judul kami akan menyampaikan teks: "Formulir pencetakan", serta nomor dokumen.

Header Area.Parameters.HeaderText = "Formulir Pencetakan"+ReferenceToObject.Number;

Parameter tajuk yang tersisa akan diisi dengan cara yang sama, semua nilai yang diperlukan untuknya akan diperoleh dari alat peraga ReferenceToObject, yang berisi tautan ke dokumen yang akan dicetak.

HeaderScope.Parameters.Organization = LinkToObject.Organization; Header area.Parameters.Account = LinkToObject.Account; Header Area.Parameters.IncomingDate = ObjectReference.Date; Header Area.Parameters.Counterparty Agreement = Perjanjian LinkToObject.Counterparty;

Semua parameter header diisi, kami akan menampilkannya di dokumen spreadsheet yang kami buat, untuk ini kami menggunakan metode keluaran(<Область>) .

TabDoc.Output(HeaderArea);

Menulis permintaan untuk handicap tercetak

Mari kita mulai mengisi dan menampilkan area tersebut Data. Membuat 1C yang dapat dicetak juga berarti menulis kueri, kami membutuhkannya untuk mendapatkan data dari bagian tabular Barang-barang dan harga Nomenklatur untuk tanggal saat ini kita akan menggunakan Meminta. Bahasa kueri 1C 8 mirip dengan SQL, atau lebih tepatnya, secara praktis menyalin kemampuannya. pernyataan PILIH, tetapi seluruh permintaan ditulis dalam bahasa Rusia. Oleh karena itu, jika Anda setidaknya mengenal SQL dari jarak jauh, Anda akan dengan mudah memahami bahasa kueri 1C 8.

Dalam bentuk cetakan ini, permintaannya akan sangat sederhana dan banyak yang akan mengatakan bahwa seseorang dapat melakukannya tanpanya, tetapi pengetahuan tentang bahasa kueri dan kemampuan untuk menggunakannya dengan benar adalah salah satu keterampilan utama seorang programmer 1C. Kueri memungkinkan penggunaan lebih sedikit sumber daya untuk mendapatkan pilihan data yang paling kompleks, dan juga jauh lebih mudah untuk memahami teks kueri daripada dalam kode program yang ditulis tanpa menggunakan kueri (atau dengan penggunaan minimal). Selain itu, di 1C 8 ada sangat desainer yang baik kueri, yang memungkinkan Anda mengumpulkan kueri secara interaktif dari tabel yang diperlukan.

Mari buat variabel yang akan berisi permintaan.

Permintaan = Permintaan Baru;

Teks permintaan akan disusun menggunakan pembuat kueri. Mari kita mulai dengan menulis:

Permintaan.Teks = "";

Letakkan kursor mouse di antara tanda kutip, tekan tombol kanan mouse. Di menu konteks yang terbuka, pilih item Permintaan konstruktor, itu akan banyak membantu kami dalam membuat 1C yang dapat dicetak. Setelah itu, jendela desainer kueri akan terbuka, berisi banyak tab, tetapi kueri kami hanya membutuhkan empat: "Tabel dan Bidang", "Hubungan", "Ketentuan", "Bergabung / Alias".

Untuk permintaan kami, kami memerlukan dua tabel: bagian tabular Barang-barang dokumen Penerimaan barang dan jasa dan sepotong informasi terbaru tentang tanggal register saat ini Harga barang.

Di bagian kiri jendela desainer, temukan kolomnya Basis data. Ini berisi pohon dari semua objek metadata, mari temukan yang kita butuhkan. Untuk melakukan ini, buka cabang Dokumentasi dan temukan dokumennya Layanan Barang Masuk, buka dan temukan bagian tabular Barang-barang, seret ke kolom desainer kueri tabel. Ada tiga cara untuk menyeret dan melepas: dengan menyeret, dengan mengklik dua kali pada tabel, atau dengan memilihnya dan mengklik tombol ">". Mari buka cabang RegistersInformation dan temukan meja di sana HargaItems.SliceLast, seret juga ke kolom tabel. Kedua tabel ini cukup untuk permintaan kami.

Mari pilih bidang yang kita butuhkan dari tabel yang dihasilkan. Untuk melakukan ini, di kolom tabel buka meja dan temukan bidangnya: Nomenklatur, Jumlah, Harga, Kuantitas dan seret ke kolom ketiga konstruktor - bidang. Mari kita buka tabelnya , temukan bidangnya Harga dan juga seret ke bidang.

Struktur tabel dan field permintaan kita sudah siap, sekarang mari kita bahas kondisinya. Kami membutuhkan data bagian tabular Barang-barang tidak diambil dari semua kuitansi, tetapi hanya dari kuitansi yang kami cetak. Untuk melakukan ini, kami memberlakukan kondisi di atas meja Barang Jasa Barang Masuk. Mari buka tab "Ketentuan" pembuat kueri. Dalam sebuah kolom bidang tabel yang kami pilih sebelumnya berada, untuk kondisi yang kami butuhkan bidangnya Tautan dari meja Penerimaan Barang, Jasa, Barang, seret ke jendela Ketentuan.

Dalam kueri 1C, Anda dapat menggunakan parameter, yang diperlukan untuk mentransfer data ke kueri. Misalnya, jika kami ingin membatasi pemilihan dokumen ke dokumen tertentu, maka kami dapat menggunakan parameter untuk meneruskan tautan ke dokumen ini ke permintaan dan menggunakan parameter ini dalam kondisi. Inilah yang akan kami lakukan dalam permintaan kami.

Begitu keluar jendela Kondisi kami menambahkan bidang Tautan, pembuat kueri akan membuat parameter dengan nama yang sama dan menempatkannya setelah tanda "=". Parameter ini dapat diganti namanya jika diinginkan. Dalam teks permintaan, parameter ditandai dengan tanda "&", tetapi dalam hal ini tidak perlu, karena diasumsikan bahwa parameter tersebut berada di bagian kedua dari kondisi, Anda hanya perlu mengingatnya. Cara meneruskan nilai ke parameter permintaan 1C akan dibahas di bawah.

Karena dalam kueri kami tidak menggunakan tabel lengkap harga item, tetapi tabel virtual (sepotong dari yang terakhir dalam kasus ini), kami perlu menetapkan kondisi untuk pembentukan ini meja maya, dalam kasus kami, ini adalah tanggal batas waktu dan kondisi untuk jenis harga (harga dengan jenis harga yang ditentukan secara ketat harus dipilih - harga yang ditentukan dalam dokumen tanda terima yang kami cetak).

Untuk mengisi parameter tabel virtual, buka tab Tabel dan bidang konstruktor kueri, di kolom tabel pilih tabel HargaItemSliceTerbaru dan tekan tombol Opsi Tabel Virtual terletak di bagian atas. Di jendela yang terbuka, di lapangan Periode Anda harus mengatur parameter yang akan dilewati tanggal pemotongan harga. Dalam kasus kami, ini akan menjadi tanggal saat ini (yaitu, hari ini), jadi kami akan memberi nama parameter "&CurrentDate". Di kolom kondisi, kami akan menulis kondisi untuk tipe harga, kami juga akan meneruskannya di parameter, yang akan kami sebut "&TipeHarga". Kondisi yang dihasilkan akan terlihat seperti ini (di mana Jenis Harga- daftar pengukuran Harga barang):

JenisHarga = &JenisHarga

Parameter tabel virtual diisi, klik tombol OKE.

Sekarang kita telah membatasi pilihan hanya pada dokumen yang kita butuhkan, mari buat hubungan antara tabel kueri. Jika ini tidak dilakukan, harga dari tabel PriceItemsSliceLast tidak akan dikaitkan dengan item dari tanda terima. Mari kita pergi ke tab Koneksi konstruktor kueri. Mari kita buat tautan berdasarkan bidang Tata nama antara dua meja kami. Untuk melakukan ini, tekan tombol Menambahkan, di lapangan Tabel 1 pilih meja Barang Jasa Barang Masuk, dan di kolom Tabel 2 - PriceItemsSliceLast. Dalam kondisi koneksi, pilih bidang Tata nama dari kedua tabel.

Perlu juga dicatat bahwa dalam pemilihan kueri kita perlu mendapatkan semua baris dari bagian tab Barang-barang dan harga hanya jika tersedia untuk tanggal saat ini menurut jenis harga dokumen. Jadi, bagian tab ini Barang-barang wajib, tetapi data batas harga tidak. Oleh karena itu, di tautan antara tabel-tabel ini, perlu menggunakan apa yang disebut LEFT JOIN, dan tabel kiri (atau wajib) akan menjadi Barang Jasa Barang Masuk, dan kanan (atau opsional) PriceItemSliceLast. Untuk gabung kiri tabel kueri berfungsi seperti yang saya jelaskan di atas, Anda perlu mencentang kotak Semua setelah lapangan Tabel 1.


Permintaan hampir siap, tinggal bekerja sedikit di lapangan alias. Pergi ke bookmark Serikat / Alias dan atur alias untuk bidang tersebut HargaBarangIrisTerakhir.Harga. Nama aliasnya adalah − HargaUntukHari Ini, diperlukan agar nama bidang pemilihan kueri dan nama parameter dalam tata letak formulir cetak cocok.

Pekerjaan di desainer kueri sudah selesai, mari tekan tombol OK. Setelah jendela konstruktor ditutup, Anda akan melihat bahwa baris dengan teks permintaan diisi dan terlihat seperti ini:

Query.Text = "PILIH | Barang Jasa Masuk Barang. Nomenklatur, | Barang Jasa Barang Masuk. Jumlah, | Barang Jasa Barang Masuk. Harga, | Barang Barang Jasa Masuk. .Barang SEBAGAI Barang MasukLayananBarang |LEFT BERGABUNG (| &Tanggal Sekarang, JenisHarga = &JenisHarga) SEBAGAI HargaItemsSliceLast | Dengan Barang MasukLayananBarang.Nomenklatur | = HargaItemsSliceLast.Nomenklatur |DIMANA |Barang MasukLayananBarang.Referensi = &Referensi";

Eksekusi permintaan

Kami akan meneruskan parameter yang diperlukan ke permintaan, untuk ini kami akan menggunakan metode permintaan setParameter(<ИмяПараметра>,<Значение>). Untuk mendapatkan tanggal sekarang menggunakan fungsi bawaan Tanggal saat ini(), mengembalikan tanggal dan waktu komputer.

Mari jalankan kueri untuk mendapatkan pilihan dengan data yang kita butuhkan. Untuk melakukan ini, pertama-tama kita menggunakan metode kueri Menjalankan(), lalu metode Memilih().

Pilihan = Query.Execute().Select();

Mengisi tabel yang dapat dicetak

Akibatnya, dalam variabel Sampel akan berisi pilihan hasil kueri, Anda dapat menelusurinya menggunakan metode Berikutnya(), dan untuk mem-bypass keseluruhannya akan membutuhkan sebuah loop Selamat tinggal. Strukturnya akan terlihat seperti ini:

While Selection.Next() Loop EndCycle;

Dalam siklus inilah kita akan mengisi dan menampilkan area tata letak Data. Tapi pertama-tama, mari kita menginisialisasi dua variabel bertipe numerik. Di dalamnya kami akan mengumpulkan total dengan jumlah dan jumlah yang perlu kami tampilkan di area tersebut Ruang bawah tanah.

TotalJumlah = 0; JumlahJumlah = 0;

Di dalam loop, kita akan mengisi area tersebut Data data dari elemen pilihan saat ini menjadi variabel JumlahTotal Dan JumlahTotal tambahkan nilai jumlah dan kuantitas, dan terakhir, tampilkan area dalam dokumen spreadsheet menggunakan metode yang sudah kita kenal keluaran(). Karena nama bidang permintaan kami persis sama dengan nama parameter bidang Data, maka untuk mengisi kita akan menggunakan prosedur bawaan FillPropertyValues(<Приемник>, <Источник>) yang menyalin nilai properti<Источника>ke properti<Приемника>.

While Selection.Next() Loop FillPropertyValues(DataArea.Parameters, Selection); JumlahJumlah = JumlahJumlah + Sampel.Jumlah; TotalQuantity = TotalQuantity + Sample.Quantity; TabDoc.Output(DataArea); Akhiri Siklus;

Output dari footer formulir pencetakan ke dalam dokumen spreadsheet

Tetap mengisi dan menampilkan area terakhir dari tata letak - Ruang bawah tanah. Kami sudah menyiapkan data untuk pengisian, pengisian dan keluaran dilakukan sesuai skema yang sama.

AreaBasement.Parameters.TotalQuantity = TotalQuantity; RegionBasement.Parameters.TotalAmount = JumlahTotal; TabDoc.Output(RegionFooter);

Dokumen spreadsheet sudah terisi penuh, tetap ditampilkan di layar sehingga pengguna dapat melihat formulir yang dicetak dan, jika perlu, mencetaknya. Tetapi dalam konfigurasi 1C 8 yang khas, prosedur modul khusus bertanggung jawab atas keluaran formulir pencetakan eksternal. Oleh karena itu, cukup untuk kembali dari fungsi Segel() spreadsheet selesai.

Kembalikan TabDoc;

Pada tahap ini, pemrograman selesai dan pembuatan formulir 1c yang dapat dicetak hampir selesai. Teks lengkap dari fungsi Segel() Saya tidak akan memberikannya di sini, Anda dapat melihatnya di file yang dapat dicetak, yang dapat Anda unduh di bagian bawah artikel.

Pembuatan formulir cetak 1C. Opsi pendaftaran otomatis

Saat menyambungkan cetakan eksternal ke database, sistem tidak secara otomatis menentukan untuk dokumen atau direktori tertentu mana cetakan tersebut ditujukan, Anda harus memilihnya secara manual. Dan jika orang lain menulis formulir tercetak, dan Anda hanya diminta untuk menghubungkannya, maka pilihannya bisa menjadi ambigu. Untuk menghindari masalah seperti itu, di semua cetakan eksternal perlu dibuat tata letak dengan parameter pendaftaran otomatis. Jika dibuat dan diformat dengan benar, sistem secara otomatis menentukan dokumen atau direktori mana yang dimaksudkan untuk formulir cetak.

Itu dilakukan sebagai berikut:

  • Dalam pemrosesan eksternal, kami membuat tata letak baru. Kami menyebutnya "Parameters_Autoregistration" (penting untuk tidak salah!).
  • Di sel pertama tata letak, kami menulis Dokumentasi.(atau Buku referensi.) dan nama dokumen yang ingin Anda sambungkan dengan yang dapat dicetak.

Menghubungkan ke dasar formulir pencetakan eksternal

  • Jalankan 1C 8 dalam mode Perusahaan;
  • Buka menu Layanan -> Laporan dan pemrosesan tambahan -> Formulir pencetakan eksternal tambahan;
  • Klik tombolnya Menambahkan;
  • Di jendela yang terbuka, klik ikon Ganti file pemrosesan eksternal;
  • Jika Anda telah membuat parameter pendaftaran otomatis, maka kami setuju untuk menggunakannya;
  • Jika Anda belum membuat parameter pendaftaran otomatis, maka di bagian tabel Aksesori pelat cetak tambahkan dokumen atau direktori yang diperlukan;
  • Kami menekan tombol OKE.

Setelah itu, cetakan eksternal akan tersedia di menu Segel dokumen Pengiriman barang dan jasa. Pembuatan 1C yang dapat dicetak ini dapat dianggap selesai.