1c mengisi bagian tabel dokumen, formulir terkendali. Mengisi bagian tabel dokumen

Halo lagi.

Sebelumnya saya telah berbicara tentang membuat formulir cetak eksternal di aplikasi yang dikelola menggunakan contoh konfigurasi Gaji dan Manajemen Personalia 3.0, sekarang saya ingin memberi tahu Anda cara membuat pemrosesan untuk mengisi bagian tabel di antarmuka yang dikelola.

Karena Kita secara kasar sudah familiar dengan dasar-dasar inisialisasi, saya tidak akan fokus pada ini, jika Anda lupa sesuatu, lihat. Tentu saja akan ada perbedaan kecil, tapi yang terpenting adalah yang utama.

Sebagai contoh, mari kita ambil masalah sederhana:

Kami memiliki konfigurasi 1C Enterprise Accounting di versi 3.0
berisi dokumen Surat Pernyataan Pembayaran Gaji ke Kantor Kas
Dokumen ini dapat diisi dengan segala sesuatu yang diperoleh karyawan dengan seleksi pada divisi yang dipilih, namun pada saat membayar uang muka belum ada akrual dan harus diisi secara manual. Namun, database memiliki ruang untuk menyimpan akrual yang direncanakan dan sangat mungkin untuk mengatur pengisian dokumen sebagai persentase dari gaji. Tentu saja, tidak ada lembar waktu untuk menganalisis pembagian waktu kerja, tetapi hanya kantor kecil yang menyimpan gaji dalam Akuntansi 1C dan kemudian menyesuaikan dua baris dari lima puluh bukanlah masalah.

Tugasnya jelas, dokumen akan memiliki perintah pengisian, yang akan membuka dialog untuk memasukkan persentase, setelah itu dokumen akan diisi.

Mari kita mulai!

Mari buat pemrosesan baru dan beri nama. Di bidang formulir pemrosesan, klik "lensa", sehingga membuat formulir.

Sekarang mari kita tinggalkan formulir untuk sementara dan masuk ke modul pemrosesan. Mari kita tulis di dalamnya fungsi GetCommandTable() dan prosedur AddCommand(CommandTable, View, Identifier, Usage, ShowAlert = False, Modifier = ""). Anda akan menemukan teksnya di artikel sebelumnya.

Sekarang kita menulis fungsi ekspor InformationInExternalProcessing(). Ini teksnya:

Fungsi InformationOnExternalProcessing() Ekspor
Parameter Registrasi = Struktur Baru;
ArrayDestinations = Array Baru;
Array of Assignments.Add("Dokumen. Laporan Pembayaran Gaji ke Kantor Kas");
Parameter Registrasi.Insert("View","Pengisian Objek");
Parameter Registrasi.Insert("Tujuan", Array Tujuan);
Parameter Registrasi.Insert("Versi", "1.0");
Parameter Registrasi.Insert("Nama", "Isi Terlebih Dahulu"+Parameter Registrasi.Versi);
Parameter Registrasi.Insert("SafeMode", False);
Parameter Registrasi.Insert("Informasi", "Pemrosesan tambahan pada bagian tabel dokumen Laporan Pembayaran Gaji ke Kantor Kas");
Tabel Perintah = GetCommandTable();
TambahkanPerintah(Tabel Perintah,

"Isi Terlebih Dahulu"+Parameter Registrasi.Versi,
"Pembukaan Formulir", Benar);
Parameter Registrasi.Insert("Perintah", Tabel Perintah);
ReturnRegistrationParameters;
Fungsi Akhir

Tetapkan "tujuan" ke dokumen " Surat Pernyataan Pembayaran Gaji ke Kantor Kas". Jenis pemrosesan"Mengisi Objek".Gunakan - "OpenForm". Kita tidak memerlukan Safe Mode.

Perbedaan dari bentuk cetakannya minimal. Sekarang mari kita kembali ke bentuk semula.

Secara teori, parameter formulir akan berisi objek yang perlu diisi. Anda bisa mendapatkannya dengan mengakses properti "Objek Tujuan". Secara teori, jumlahnya bisa banyak, karena perintah pengisian akan muncul tidak hanya dalam bentuk dokumen, tetapi juga dalam bentuk daftar, dan tersedia banyak pilihan di sana. Pemilik formulir juga merupakan jendela tempat tombol "isi" ditekan. Ini bisa berupa formulir dokumen atau formulir daftar.

Ini teori, dalam praktiknya pelanggan tidak perlu mengisi tiga formulir untuk pembayaran di muka sekaligus :)) oleh karena itu, dalam contoh kami dari formulir daftar, pemrosesan kami akan gagal karena kesalahan. Saya tidak menganjurkan Anda melakukan hal ini, hanya saja yang utama dalam artikel adalah menyampaikan esensi, dan yang utama bagi pelanggan adalah hasilnya.

Jadi, kami sepakat bahwa selalu ada satu daftar dan kami menekan tombol di dokumen, dan bukan di daftar. Selesaikan sendiri kasus memeras dari daftar))

Dalam formulir kita memerlukan rincian: "pernyataan" dan "persentase"

Kita juga membutuhkan perintah "Isi". Seret atribut “persentase” dan perintah “isi” ke formulir.

Kami menambahkan handler “CreateOnServer” ke formulir dan menulis di sana untuk menerima objek untuk diisi.

&Di Server
Prosedur Saat DibuatDiServer (Kegagalan, Pemrosesan Standar)
Jika Parameters.Property("Objek Tujuan") maka
Pernyataan = Parameter.AssignmentObjects;
akhirJika;
Akhir Prosedur

Sebenarnya, ini bendera di tangan Anda dan analisis jumlah objek yang ditransfer)) jika Anda mau, tentu saja.

Di handler "When CreatedOnServer" kami memiliki serangkaian tautan. Kami juga mendapat jaminan bahwa barang tersebut telah dicatat sebelum diisi. Jika dokumen diubah, kami akan ditawari untuk menuliskannya sebelum mengisinya atau menolak untuk mengisinya. Aku tidak menyukainya karena... Setiap isi ulang memerlukan rekaman, namun bagaimana jika kita tidak perlu mencatatnya? Padding yang baik harus berfungsi dengan data formulir, bukan data objek tertulis. tetapi untuk membatalkan kontrol modifikasi, Anda perlu menghapus konfigurasi dari dukungan dan mengomentari pemeriksaan ini. Karena semua kebingungan ini, kita berada di persimpangan jalan: kita dapat memodifikasi objek dalam database dan kemudian memperbarui formulir (membaca ulang data di dalamnya), atau kita dapat memodifikasi data formulir, yang dalam konteks kita adalah pemiliknya dari formulir pemrosesan.

Mungkin benar melakukan ini:

Saat membuat formulir pemrosesan di server, analisis dari mana pemrosesan diluncurkan: dari daftar atau dari formulir dokumen. Jika dari daftar maka kita bekerja dengan database, jika dari form dokumen maka kita bekerja sama dengan pemilik form pengolahan.

Pada opsi pertama (saat bekerja dengan objek di database), kita harus menuliskannya setelah eksekusi, yang tidak selalu dapat diterima. Hal ini tidak memungkinkan kami untuk melihat hasil pengisian dan menolaknya. Namun dalam bentuk daftar tidak ada pilihan lain.

Secara umum, menganalisis sumber peluncuran perintah memaksa kita untuk menulis dua prosedur pengisian yang berbeda, karena satu di server dan yang lainnya di klien.

Tapi, seperti yang sudah saya katakan, saya melewatkan opsi untuk membuka dari formulir daftar, jadi saya bekerja dengan data formulir. Oleh karena itu saya menulis rincian formulir "pernyataan" dan penangan "ketika CreatedOnServer" dengan sia-sia)))

Berikut adalah prosedur pengisian sebenarnya:

&Pada Klien

Isi Prosedur (Perintah)
m = GetData(FormOwner.Object.RegistrationPeriod);
FormOwner.Object.Gaji.Clear();
FormOwner.Object.PaymentMethod = Metode Pembayaran();
Untuk Setiap Baris Data Dari m Loop
DocumentStr = FormOwner.Object.Salary.Add();
Documentstr.Employee = Datastring.Employee;
Documentstr.Department = Datastring.Department;
Documentstr.KPayment = Datastring.Size / 100 * Persentase;
Siklus Akhir;
Formulir Ini.Tutup();
Akhir Prosedur

Baris pertama berisi inti artikel ini. Kami mengakses data formulir melalui konstruksi FormOwner.Object. Dari situ kita beralih ke bagian tabel dan header, membaca dan menulis.

Prosedur “GetData()” dijalankan di server dan mengumpulkan jumlah yang harus diisi sesuai dengan akrual yang direncanakan. Karena Tabel nilai tidak dapat ditransfer dari server ke klien; saya menggunakan struktur array.

Berikut teks prosedur pengumpulan data:

&Di Server
Fungsi GetData(Periode)
Kueri = Kueri Baru("PILIH
|Akrual yang DirencanakanDipotong ke Terbaru.Karyawan,
|Akrual TerencanaPotongan Terbaru.Individu,
|Riwayat Personalia Pegawai, Bagian Terbaru.Divisi,
|Akrual TerencanaPotongan Terbaru.Ukuran
|DARI
|Daftar Informasi. Batas Akrual yang Direncanakan. Batas Akhir (&Periode,) SEBAGAI Batas Akrual yang Direncanakan Terbaru
|HUBUNGAN KIRI Daftar Informasi Riwayat Kepegawaian. Sepotong Riwayat Kepegawaian AS Terbaru
|.Software Planned Accruals Piece Terbaru.Employee = HRHistory of Employees Piece Terbaru.Employee
|DIMANA
|Riwayat Personalia Karyawan Cuplikan Terkini.Lihat Peristiwa<>NILAI(Pencacahan.Jenis Peristiwa Personil.Pemberhentian)
|
|PESAN OLEH
|PlannedAccrualsSliceLast.Individual.Name");
Query.SetParameter("Periode", Periode);
res = Permintaan.Jalankan();
m = Array Baru;
pilih = res.Pilih();

Sambil pilih.Berikutnya() Loop
Struktur data = Struktur Baru("Karyawan, Individu, Departemen, Ukuran");
FillPropertyValues(Struktur Data, pilih);
m.Tambahkan(Struktur Data);
Siklus Akhir;
Kembalikan m;
Fungsi Akhir

Semuanya harus jelas di sini; satu-satunya TAHU BAGAIMANA adalah cara mentransfer hasil permintaan dari server ke klien. Permintaan di sini sederhana, karena... Berbeda dengan ZUP, di Bukhia tidak ada tanggal akhir dalam register, hal ini menyederhanakan tugas memperoleh data.

Selain bagian tabel, saya juga mengisi detail “Metode Pembayaran”, dan saya juga harus menerimanya di server:

&Di Server
FungsiMetode Pembayaran()
Direktori Pengembalian.Metode Pembayaran Gaji.Temukan Berdasarkan Nama("Uang Muka");
Fungsi Akhir

Itu saja.

Sekarang ringkasannya:

1. Jika konfigurasi Anda tidak lagi didukung, nonaktifkan pemeriksaan apakah objek telah ditulis sebelum memanggil pemrosesan padding.

2. Jangan mengubah objek database jika dapat mengubah data form. Hingga pengguna mengklik rekam, tindakan mereka seharusnya dapat dibatalkan.

3. Jika Anda punya waktu dan tenaga, tulislah pemrosesan untuk kedua kasus: memanggil dari formulir daftar dan dari formulir objek. Untuk formulir objek, ubah data formulir; untuk formulir daftar, ubah data database. Dalam kasus saya, perintah gagal dari formulir daftar dengan kesalahan, ini tidak benar.

Terima kasih semuanya, sampai jumpa!

1. Pernyataan masalah

Pada artikel ini kita akan melihat proses penulisan pemrosesan eksternal paling sederhana untuk mengisi bagian tabel 1C 8 untuk konfigurasi menggunakan aplikasi biasa. Misalnya, ambil tugas berikut: “Dalam konfigurasi 1C:Akuntansi 2.0 membuat pemrosesan eksternal untuk mengisi bagian tabel Barang-barang dokumen, data yang harus diisi diambil dari bagian tabel Barang-barang dokumen Penerimaan barang dan jasa" Oleh karena itu, kita perlu mengisi item penjualan berdasarkan barang yang diterima; tugas ini cukup umum dalam praktik nyata seorang programmer 1C.

2. Buat pemrosesan eksternal

Ayo pergi ke 1C 8 dalam mode konfigurator. Menggunakan menu Berkas -> Baru atau piktogram Dokumen baru ayo buat yang baru pemrosesan eksternal.

Di lapangan Nama tunjukkan: "Pengisian Bagian Tabular yang paling sederhana" dan simpan pemrosesan eksternal ke hard drive menggunakan menu File -> Simpan atau piktogram Menyimpan atau pintasan keyboard Ctrl+S.

Memilih cabang Detail di pohon metadata pemrosesan dan mengklik tombol Menambahkan(tombol dengan tanda tambah hijau) buat atribut pemrosesan eksternal baru - Tanda Terima Dokumen, pilih jenisnya DocumentLink.Penerimaan Barang dan Jasa, kita memerlukan atribut ini untuk memilih dokumen Penerimaan barang dan jasa, yang menjadi dasar pelaksanaannya akan diisi.

Untuk memilih dokumen kwitansi, kita memerlukan formulir tersendiri. Memilih cabang Formulir dan menggunakan tombol yang sama - Menambahkan Mari buat formulir pemrosesan eksternal. Jendela perancang formulir akan terbuka; Anda tidak perlu melakukan perubahan apa pun pada halaman pertama perancang, cukup klik tombolnya Berikutnya.

Pada halaman kedua desainer kita perlu memilih alat peraga Tanda Terima Dokumen(sehingga muncul pada formulir yang dibuat) dan tekan tombol Siap.

Setelah ini, formulir yang dibuat akan terbuka, kita memerlukan pengguna untuk memilih dokumen tanda terima dan menutupnya. Jadi ketika Anda menekan tombol Menjalankan Formulir harus ditutup saja. Untuk menerapkan ini, pilih tombol Menjalankan, klik kanan padanya dan pilih Properti. Di properti tombol, di baris Tindakan pilih tindakan - Menutup. Ini menyelesaikan pekerjaan dengan formulir, mari kita tutup.

3. Pemrograman

Mari kita mulai memprogram proses pengisian bagian tabel. Ayo pergi ke Modul objek pemrosesan eksternal (di panel pemrosesan bawah terdapat tombol Tindakan -> Buka modul objek).

Di dalamnya kita perlu membuat prosedur ekspor Inisialisasi.

Prosedur Inisialisasi Ekspor Akhir Prosedur

perhatikan itu prosedur Inisialisasi, serta semua parameternya, wajib untuk pemrosesan eksternal pengisian bagian tabel, jika Anda tidak membuatnya atau tidak menentukan semua parameter, pemrosesan Anda tidak akan berfungsi.

Sekarang mari kita mulai menulis kode program. Pertama-tama, mari buat variabel untuk bagian tabel dokumen Penjualan barang dan jasa yang akan kami isi.

TabularPart = Objek[TabularPartName];

Saat menjalankan prosedur dalam suatu parameter Obyek akan berisi objek dokumen yang kita isi, dan parameternya TabularPartName sebaris dengan nama bagian tabel yang sedang kita isi. Jadi, baris kode ini mendapatkan bagian tabel dari dokumen yang diisi dengan namanya.

Kami membutuhkan pengguna untuk memilih dokumen Penerimaan barang dan jasa, jadi mari kita tulis kode untuk membuka formulir pemilihan dokumen. Pertama, mari kita ubah formulir ini menjadi variabel menggunakan metode pemrosesan eksternal Dapatkan Formulir(<Форма>, <Владелец>, <КлючУникальности>) . Kita hanya perlu mengisi parameter pertama dari metode ini dengan meneruskan string dengan nama formulir kita.

ReceiptSelectionForm = GetForm("Formulir");

Sekarang mari kita buka formulir yang dihasilkan menggunakan pembukaan modal (saat formulir terbuka, semua jendela 1C lainnya tidak tersedia), karena dengan metode pembukaan ini, kode selanjutnya dalam prosedur Inisialisasi tidak akan dieksekusi sampai pengguna menutup formulir.

ReceiptSelectionForm.OpenModal();

Setelah pengguna menutup formulir, kita perlu memeriksa apakah detailnya sudah diisi Tanda Terima Dokumen(jika dokumen tanda terima tidak dipilih). Jika setelah diperiksa Tanda Terima Dokumen kosong, maka pemrosesan lebih lanjut tidak masuk akal dan harus dibatalkan.

Jika TIDAK ValueFilled(ReceiptDocument) Maka Report(); Kembali ; AkhirJika ;

Untuk memeriksa apakah detailnya sudah lengkap, fungsi konteks global digunakan di sini Nilai Terisi(<Значение>) , ia memeriksa apakah nilai yang diteruskan dalam parameter berbeda dari nilai default dari tipe yang sama. Prosedur Laporan menampilkan teks yang ditentukan di jendela pesan 1C 8 Kembali mengganggu pelaksanaan prosedur.

Mari mulai menulis kueri yang akan memilih data tabular Barang-barang dokumen Penerimaan barang dan jasa. Mari buat permintaan baru:

Permintaan = Permintaan Baru;

Permintaan.SetParameter( "Penerimaan Dokumen",Dokumen Penerimaan);

Mari tulis teks permintaan dan lakukan menggunakan Konstruktor kueri. Tidak disarankan untuk menulis teks permintaan secara manual; ini tidak efektif dan memakan banyak waktu. Pertama, mari kita tulis barisnya:

Permintaan.Teks = "" ;

Tempatkan kursor di antara tanda kutip, tekan tombol kanan mouse dan pilih item Konstruktor kueri.... Setelah ini, Anda akan diminta untuk membuat permintaan baru, klik tombol “OK”. Jendela desainer akan terbuka, di sisi kiri ada semua tabel database yang tersedia, kita memerlukan dokumen Penerimaan Barang dan Jasa. Mari kita temukan dan perluas menggunakan simbol “+”, pilih bagian tabel Barang-barang dan seret ke bagian kedua layar desainer, yang disebut Tabel(Anda juga dapat memindahkan tabel yang diinginkan menggunakan tombol “>”).

Sekarang mari kita perluas tabel yang kita pilih dengan “+”( Penerimaan BarangJasaBarang) dan seret bidang yang diperlukan untuk pengisian tabel kita ke bagian ketiga layar desainer, yang disebut - bidang. Kami tidak akan memilih semua bidang yang tersedia; kami akan membatasi diri pada kumpulan berikut: Nomenklatur, Jumlah, Harga, Jumlah, Tarif PPN, Besaran PPN.

Karena kita hanya membutuhkan data satu dokumen resi (yang kita pilih sebelum mulai mengisi), maka pada tab “Kondisi” kita akan menerapkan kondisi pada link dokumen menggunakan parameter yang kita lewati.

Pembuatan teks permintaan di desainer sekarang selesai; klik tombol “OK”. Hasilnya, kami mendapat teks permintaan berikut:

Query.Teks = "PILIH |DARI |MANA ;

Kueri yang dibuat hanya perlu dijalankan dan diunggah ke variabel:

Hasil = Permintaan.Jalankan().Unggah();

Dalam variabel Hasil tabel nilai dengan baris bagian tabel disimpan Barang-barang dokumen yang kita pilih Penerimaan barang dan jasa. Sekarang Anda dapat mulai mengisi bagian tabel Barang-barang implementasi kami. Namun sebelum mengisi datanya, sebaiknya bersihkan dulu, siapa tahu sudah ada beberapa baris disana.

TablePart.Clear();

Menggunakan lingkaran Untuk semua orang Mari kita lihat tabel nilai dengan hasil kueri.

Untuk Setiap Elemen Hasil dari Siklus Hasil EndCycle ;

Dalam siklus ini kita akan membuat dan mengisi baris-baris bagian tabel dokumen Penjualan barang dan jasa. Kita bisa membuat baris baru menggunakan variabel Bagian Tabular, yang melaluinya Anda dapat melakukan tindakan apa pun dengannya.

NewRowTC = TabularPart.Tambahkan();

Mari kita isi baris yang dibuat pada tabel. bagian data dari string hasil kueri menggunakan prosedur Konteks globalIsi PropertyValues(<Приемник>, <Источник>) .

FillPropertyValues(NewRowTC, ResultElement);

Namun data yang kita isi saja tidak cukup; agar dokumen dapat diproses, kita perlu mengisi lebih banyak lagi akun akuntansi barang. Untuk melakukan ini, kami akan menggunakan ekspor

prosedur Isi AccountingInLineTabParts dari modul objek dokumen Penjualan barang dan jasa. Sebut saja menggunakan parameter Obyek(perlu diperhatikan

yang hanya bisa kita hubungi ekspor prosedur dari modul objek dokumen).

Objek.FillAccountingInLineTabPart(NewRowTCH, TabularPartName, Benar);

Ini melengkapi pemrograman pengisian bagian tabel untuk 1C 8 selesai. Pemrosesan dapat digunakan. Teks lengkap prosedurnya Inisialisasi, terlihat seperti ini:

Prosedur Inisialisasi (Objek, TablePartName = Tidak terdefinisi, ObjectTableField = Tidak terdefinisi) Ekspor TabularPart = Objek[TabularPartName]; ReceiptSelectionForm = GetForm("Formulir"); ReceiptSelectionForm.OpenModal(); "Penerimaan Dokumen" Jika TIDAK ValueFilled(ReceiptDocument) Kemudian Laporkan ( "Dokumen tanda terima tidak dipilih" ); Kembali ; AkhirJika ; Permintaan = Permintaan Baru; Permintaan.SetParameter( ,Dokumen Penerimaan); Kueri.Teks = "PILIH | Penerimaan Barang dan Jasa Nomenklatur,| Penerimaan Barang dan Jasa Jumlah, | Penerimaan Barang dan Tarif PPN Jasa.| Penerimaan Barang dan Jumlah Barang Jasa.

| Penerimaan Barang dan Jasa Jumlah PPN,

| Penerimaan Barang dan Harga Barang Jasa

|DARI 1C 8| Dokumen Penerimaan Barang dan Jasa |DIMANA| Kwitansi BarangJasaProduk.Link = &Kwitansi Dokumen" ;

Hasil = Permintaan.Jalankan().Unggah(); |DIMANA TablePart.Clear();

Untuk Setiap Elemen Hasil dari Siklus Hasil NewRowTC = TabularPart.Add(); FillPropertyValues(NewRowTC, ResultElement); Objek.FillAccountingInLineTabPart(NewRowTCH, TabularPartName, Benar); Menjalankan Siklus Akhir; Akhir Prosedur Inisialisasi Bagian selanjutnya dari artikel ini akan memberi tahu Anda cara men-debug proses pengisian bagian tabel dan cara menghubungkannya ke dokumen. Penjualan barang dan jasa 4. Men-debug |DIMANA Seringkali Anda perlu men-debug kode yang Anda tulis. Untuk men-debug proses pengisian bagian tabel Barang-barang).

Prosedur mari kita buat alat peraga untuknya Referensi Objek

jenis

Sekarang Anda dapat mengatur breakpoint di tempat yang diinginkan dalam prosedur Inisialisasi atau prosedur FillPropertyValues(NewRowTC, ResultElement); formulir debug, dan jalankan pemrosesan pengisian bagian tabel dalam mode debugging 1C:Perusahaan.

5. Hubungkan ke dokumen

Setelah proses pengisian ditulis dan di-debug, Anda harus menghubungkannya ke dokumen yang akan digunakan untuk mengeksekusinya. Untuk melakukan ini, ayo pergi ke 1C 8 dalam mode Perusahaan, ayo buka menunya Layanan -> Laporan dan pemrosesan tambahan -> Pemrosesan eksternal tambahan pada bagian tabel dan tambahkan elemen direktori baru. Menggunakan tombol Ganti file pemrosesan eksternal Mari tambahkan file yang kita buat untuk memproses pengisian bagian tabel.

Mari isi aksesori pemrosesan dengan menggunakan tombol Pilihan pilih dokumen Penjualan barang dan jasa

Dan kami menunjukkan bahwa isiannya ditujukan untuk bagian tabel Barang-barang.

Tekan tombolnya OKE dan itu saja, pemrosesan pengisian akan tersedia di menu Mengisi bagian tabel Barang-barang dokumen Penjualan barang dan jasa. Anda dapat mengunduh pemrosesan yang digunakan untuk contoh ini di .

Untuk melakukan beberapa tindakan dengan baris bagian tabel, tidak perlu mengubah konfigurasi. Platform 1C 8.2 memiliki mekanisme yang memungkinkan Anda bekerja dengan bagian tabel menggunakan pemrosesan eksternal. Untuk melakukan ini, pemrosesan harus diformalkan dan ditempatkan di direktori pemrosesan eksternal. Setelah itu, sebuah tombol akan muncul di dokumen yang diperlukan yang akan melakukan tindakan yang ditentukan dalam modul pemrosesan kami.

Pertama, mari buat pemrosesan eksternal di konfigurator menggunakan menu File/Baru. Di jendela yang muncul, pilih “Pemrosesan eksternal”.

Prosedurnya sendiri akan terlihat seperti ini:

Prosedur Inisialisasi (Objek, TabularPartName, TabularField) Ekspor;

Untuk setiap Baris TabularPart dari Siklus Object[TabularPartName].

TabularPartRow.Hasil = Okr(TabularPartRow.Hasil);

Siklus Akhir;

Akhir Prosedur

Dalam contoh ini, hasil perhitungan gaji perlu dibulatkan pada dokumen “Penggajian” di ZUP 2.5. Anda menuliskan tindakan yang Anda perlukan dengan bagian tabel dokumen. Prosedurnya harus disebut "Inisialisasi", berisi tiga parameter dan kata kunci "Ekspor".

Setelah kami menuliskan apa yang harus dilakukan pemrosesan, kami menyimpannya dan masuk ke mode 1C Enterprise, di mana kami mendaftarkan pemrosesan di direktori pemrosesan eksternal.

Pastikan untuk memilih atribut tipe - “Mengisi bagian tabel”. Tambahkan baris ke tabel dan isi semua bidang yang wajib diisi. Representasi objek adalah dokumen yang kita perlukan untuk memanggil pemrosesan kita. Bagian tabel - nama bagian tabel, karena mungkin ada beberapa di antaranya dalam satu dokumen. Dan presentasi tombol adalah tampilan tombol pada menu “Isi” di atas bagian tabel.

Setelah menyelesaikan semua langkah, tuliskan elemennya dan buka dokumen yang diinginkan. Kami melihat tombol baru telah muncul di atas bagian tabel. Kami menggunakannya dan menikmatinya.)

Saya harap artikel ini membantu Anda membuat mekanisme untuk mengisi atau memproses bagian tabel. Jika tidak, Anda selalu bisa dan saya akan menulis pemrosesan apa pun untuk Anda.)

Anda juga dapat mengunduh, misalnya, pemrosesan yang diperoleh selama penulisan artikel ini, untuk melakukannya, klik tautan di bawah.

Pada artikel ini kita akan melihat proses penulisan pemrosesan eksternal paling sederhana untuk mengisi bagian tabel 1C 8 untuk konfigurasi menggunakan aplikasi biasa. Misalnya, ambil tugas berikut: “Dalam konfigurasi 1C:Akuntansi 2.0 membuat pemrosesan eksternal untuk mengisi bagian tabel Barang-barang dokumen Penjualan barang dan jasa, data yang diisi diambil dari bagian tabel Barang-barang dokumen Penerimaan barang dan jasa" Oleh karena itu, kita perlu mengisi item penjualan berdasarkan barang yang diterima; tugas ini cukup umum dalam praktik nyata seorang programmer 1C.

2. Buat pemrosesan eksternal

Ayo pergi ke 1C 8 dalam mode konfigurator. Menggunakan menu Berkas -> Baru atau piktogram Dokumen baru ayo buat yang baru pemrosesan eksternal.

Di lapangan Nama tunjukkan: "Pengisian Bagian Tabular yang paling sederhana" dan simpan pemrosesan eksternal ke hard drive menggunakan menu File -> Simpan atau piktogram Menyimpan atau pintasan keyboard Ctrl+S.

Memilih cabang Detail di pohon metadata pemrosesan dan mengklik tombol Menambahkan(tombol dengan tanda tambah hijau) buat atribut pemrosesan eksternal baru - Tanda Terima Dokumen, pilih jenisnya DocumentLink.Penerimaan Barang dan Jasa, kita memerlukan atribut ini untuk memilih dokumen Penerimaan barang dan jasa, yang menjadi dasar pelaksanaannya akan diisi.

Untuk memilih dokumen kwitansi, kita memerlukan formulir tersendiri. Memilih cabang Formulir dan menggunakan tombol yang sama - Menambahkan Mari buat formulir pemrosesan eksternal. Jendela perancang formulir akan terbuka; Anda tidak perlu melakukan perubahan apa pun pada halaman pertama perancang, cukup klik tombolnya Berikutnya.

Pada halaman kedua desainer kita perlu memilih alat peraga Tanda Terima Dokumen(sehingga muncul pada formulir yang dibuat) dan tekan tombol Siap.

Setelah ini, formulir yang dibuat akan terbuka, kita memerlukan pengguna untuk memilih dokumen tanda terima dan menutupnya. Jadi ketika Anda menekan tombol Menjalankan Formulir harus ditutup saja. Untuk menerapkan ini, pilih tombol Menjalankan, klik kanan padanya dan pilih Properti. Di properti tombol, di baris Tindakan pilih tindakan - Menutup. Ini menyelesaikan pekerjaan dengan formulir, mari kita tutup.

3. Pemrograman

Mari kita mulai memprogram proses pengisian bagian tabel. Ayo pergi ke Modul objek pemrosesan eksternal (di panel pemrosesan bawah terdapat tombol Tindakan -> Buka modul objek).

Di dalamnya kita perlu membuat prosedur ekspor Inisialisasi.

Prosedur Inisialisasi Ekspor Akhir Prosedur

perhatikan itu prosedur Inisialisasi, serta semua parameternya, wajib untuk pemrosesan eksternal pengisian bagian tabel, jika Anda tidak membuatnya atau tidak menentukan semua parameter, pemrosesan Anda tidak akan berfungsi.

Sekarang mari kita mulai menulis kode program. Pertama-tama, mari buat variabel untuk bagian tabel dokumen Penjualan barang dan jasa yang akan kami isi.

TabularPart = Objek[TabularPartName];

Saat menjalankan prosedur dalam suatu parameter Obyek akan berisi objek dokumen yang kita isi, dan parameternya TabularPartName sebaris dengan nama bagian tabel yang sedang kita isi. Jadi, baris kode ini mendapatkan bagian tabel dari dokumen yang diisi dengan namanya.

Kami membutuhkan pengguna untuk memilih dokumen Penerimaan barang dan jasa, jadi mari kita tulis kode untuk membuka formulir pemilihan dokumen. Pertama, mari kita ubah formulir ini menjadi variabel menggunakan metode pemrosesan eksternal Dapatkan Formulir(<Форма>, <Владелец>, <КлючУникальности>) . Kita hanya perlu mengisi parameter pertama dari metode ini dengan meneruskan string dengan nama formulir kita.

ReceiptSelectionForm = GetForm("Formulir");

Sekarang mari kita buka formulir yang dihasilkan menggunakan pembukaan modal (saat formulir terbuka, semua jendela 1C lainnya tidak tersedia), karena dengan metode pembukaan ini, kode selanjutnya dalam prosedur Inisialisasi tidak akan dieksekusi sampai pengguna menutup formulir.

ReceiptSelectionForm.OpenModal();

Setelah pengguna menutup formulir, kita perlu memeriksa apakah detailnya sudah diisi Tanda Terima Dokumen(jika dokumen tanda terima tidak dipilih). Jika setelah diperiksa Tanda Terima Dokumen kosong, maka pemrosesan lebih lanjut tidak masuk akal dan harus dibatalkan.

Jika TIDAK ValueFilled(ReceiptDocument) Maka Report(); Kembali ; AkhirJika ;

Untuk memeriksa apakah detailnya sudah lengkap, fungsi konteks global digunakan di sini Nilai Terisi(<Значение>) , ia memeriksa apakah nilai yang diteruskan dalam parameter berbeda dari nilai default dari tipe yang sama. Prosedur Laporan menampilkan teks yang ditentukan di jendela pesan 1C 8 Kembali mengganggu pelaksanaan prosedur.

Mari mulai menulis kueri yang akan memilih data tabular Barang-barang dokumen Penerimaan barang dan jasa. Mari buat permintaan baru:

Permintaan = Permintaan Baru;

Permintaan.SetParameter( "Penerimaan Dokumen",Dokumen Penerimaan);

Mari tulis teks permintaan dan lakukan menggunakan Konstruktor kueri. Tidak disarankan untuk menulis teks permintaan secara manual; ini tidak efektif dan memakan banyak waktu. Pertama, mari kita tulis barisnya:

Permintaan.Teks = "" ;

Tempatkan kursor di antara tanda kutip, tekan tombol kanan mouse dan pilih item Konstruktor kueri.... Setelah ini, Anda akan diminta untuk membuat permintaan baru, klik tombol “OK”. Jendela desainer akan terbuka, di sisi kiri ada semua tabel database yang tersedia, kita memerlukan dokumen Penerimaan Barang dan Jasa. Mari kita temukan dan perluas menggunakan simbol “+”, pilih bagian tabel Barang-barang dan seret ke bagian kedua layar desainer, yang disebut Tabel(Anda juga dapat memindahkan tabel yang diinginkan menggunakan tombol “>”).

Sekarang mari kita perluas tabel yang kita pilih dengan “+”( Penerimaan BarangJasaBarang) dan seret bidang yang diperlukan untuk pengisian tabel kita ke bagian ketiga layar desainer, yang disebut - bidang. Kami tidak akan memilih semua bidang yang tersedia; kami akan membatasi diri pada kumpulan berikut: Nomenklatur, Jumlah, Harga, Jumlah, Tarif PPN, Besaran PPN.

Karena kita hanya membutuhkan data satu dokumen resi (yang kita pilih sebelum mulai mengisi), maka pada tab “Kondisi” kita akan menerapkan kondisi pada link dokumen menggunakan parameter yang kita lewati.

Pembuatan teks permintaan di desainer sekarang selesai; klik tombol “OK”. Hasilnya, kami mendapat teks permintaan berikut:

Query.Teks = "PILIH |DARI |MANA ;

Kueri yang dibuat hanya perlu dijalankan dan diunggah ke variabel:

Hasil = Permintaan.Jalankan().Unggah();

Dalam variabel Hasil tabel nilai dengan baris bagian tabel disimpan Barang-barang dokumen yang kita pilih Penerimaan barang dan jasa. Sekarang Anda dapat mulai mengisi bagian tabel Barang-barang implementasi kami. Namun sebelum mengisi datanya, sebaiknya bersihkan dulu, siapa tahu sudah ada beberapa baris disana.

TablePart.Clear();

Menggunakan lingkaran Untuk semua orang Mari kita lihat tabel nilai dengan hasil kueri.

Untuk Setiap Elemen Hasil dari Siklus Hasil EndCycle ;

Dalam siklus ini kita akan membuat dan mengisi baris-baris bagian tabel dokumen Penjualan barang dan jasa. Kita bisa membuat baris baru menggunakan variabel Bagian Tabular, yang melaluinya Anda dapat melakukan tindakan apa pun dengannya.

NewRowTC = TabularPart.Tambahkan();

Mari kita isi baris yang dibuat pada tabel. bagian data dari string hasil kueri menggunakan prosedur Konteks global - Isi PropertyValues(<Приемник>, <Источник>) .

FillPropertyValues(NewRowTC, ResultElement);

Namun data yang kita isi saja tidak cukup; agar dokumen dapat diproses, kita perlu mengisi lebih banyak lagi akun akuntansi barang. Untuk melakukan ini, kami akan menggunakan ekspor

prosedur Isi AccountingInLineTabParts dari modul objek dokumen Penjualan barang dan jasa. Sebut saja menggunakan parameter Obyek(perlu diperhatikan

yang hanya bisa kita hubungi ekspor prosedur dari modul objek dokumen).

Objek.FillAccountingInLineTabPart(NewRowTCH, TabularPartName, Benar);

Ini melengkapi pemrograman pengisian bagian tabel untuk 1C 8 selesai. Pemrosesan dapat digunakan. Teks lengkap prosedurnya Inisialisasi, terlihat seperti ini:

Prosedur Inisialisasi (Objek, TablePartName = Tidak terdefinisi, ObjectTableField = Tidak terdefinisi) Ekspor TabularPart = Objek[TabularPartName]; ReceiptSelectionForm = GetForm("Formulir"); ReceiptSelectionForm.OpenModal(); "Penerimaan Dokumen" Jika TIDAK ValueFilled(ReceiptDocument) Kemudian Laporkan ( "Dokumen tanda terima tidak dipilih" ); Kembali ; AkhirJika ; Permintaan = Permintaan Baru; Permintaan.SetParameter( ,Dokumen Penerimaan); Kueri.Teks = "PILIH | Penerimaan Barang dan Jasa Nomenklatur,| Penerimaan Barang dan Jasa Jumlah, | Penerimaan Barang dan Tarif PPN Jasa.| Penerimaan Barang dan Jumlah Barang Jasa.

| Penerimaan Barang dan Jasa Jumlah PPN,

| Penerimaan Barang dan Harga Barang Jasa

|DARI 1C 8| Dokumen Penerimaan Barang dan Jasa |DIMANA jenis ;

Hasil = Permintaan.Jalankan().Unggah(); |DIMANA TablePart.Clear();

Untuk Setiap Elemen Hasil dari Siklus Hasil NewRowTC = TabularPart.Add(); FillPropertyValues(NewRowTC, ResultElement); Objek.FillAccountingInLineTabPart(NewRowTCH, TabularPartName, Benar); Menjalankan Siklus Akhir; Akhir Prosedur Inisialisasi Bagian selanjutnya dari artikel ini akan memberi tahu Anda cara men-debug proses pengisian bagian tabel dan cara menghubungkannya ke dokumen. Penjualan barang dan jasa(yang akan kita dapatkan dari alat peraga |DIMANA Seringkali Anda perlu men-debug kode yang Anda tulis. Untuk men-debug proses pengisian bagian tabel Barang-barang).

Prosedur mari kita buat alat peraga untuknya Referensi Objek

jenis

Sekarang Anda dapat mengatur breakpoint di tempat yang diinginkan dalam prosedur Inisialisasi atau prosedur FillPropertyValues(NewRowTC, ResultElement); formulir debug, dan jalankan pemrosesan pengisian bagian tabel dalam mode debugging 1C:Perusahaan.

5. Hubungkan ke dokumen

Setelah proses pengisian ditulis dan di-debug, Anda harus menghubungkannya ke dokumen yang akan digunakan untuk mengeksekusinya. Untuk melakukan ini, ayo pergi ke 1C 8 dalam mode Perusahaan, ayo buka menunya Layanan -> Laporan dan pemrosesan tambahan -> Pemrosesan eksternal tambahan pada bagian tabel dan tambahkan elemen direktori baru. Menggunakan tombol Ganti file pemrosesan eksternal Mari tambahkan file yang kita buat untuk memproses pengisian bagian tabel.

Mari isi aksesori pemrosesan dengan menggunakan tombol Pilihan pilih dokumen Penjualan barang dan jasa

Dan kami menunjukkan bahwa isiannya ditujukan untuk bagian tabel Barang-barang.

Tekan tombolnya OKE dan itu saja, pemrosesan pengisian akan tersedia di menu Mengisi bagian tabel Barang-barang dokumen Penjualan barang dan jasa. Anda dapat mengunduh pemrosesan yang digunakan untuk contoh ini di bagian bawah artikel.

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat