Pemisahan data dalam bsp. Pemisahan data di bsp Mekanisme pemisahan data 1s

Elemen pemisah 1C diperlukan untuk mendistribusikan kembali area formulir sesuai kenyamanan pengguna dalam saat ini. Hampir setiap orang memiliki keterampilan menggunakan pemisah. pengguna Windows. Misalkan Anda membuat formulir sederhana dengan dua kontrol.

Secara tradisional, item dari daftar mana pun dapat ditempatkan di sisi kiri. Oleh karena itu, di sisi kanan, ada rincian rinci tentang poin-poin ini. Jika daftar kiri terdiri dari judul-judul pendek, maka logis untuk mengurangi kolom ini seminimal mungkin. Dengan demikian, dalam hal ini keterbacaan sisi kanan akan meningkat. Sebaliknya, jika ada nama yang panjang di sebelah kiri, kolomnya harus diperluas. Pembagi memungkinkan pengguna untuk menyesuaikan bentuk secara bebas hanya dengan menyeret batas dengan mouse.

Metode kontrol ini digunakan saat mengedit tabel di Word dan Excel. Saat membuat formulir, Anda bisa membuat elemen formulir vertikal dan horizontal, pemisah. Secara umum, yang paling disukai adalah membuat bentuk yang sesuai secara visual dengan layar.

Pemisah 8.2, 8.3 (formulir terkelola)

Anda tidak dapat menambahkan pemisah dalam formulir terkelola 1c; pemisah ditambahkan secara otomatis oleh program sebelum/sesudah bidang tabel

1.Pembukaan.

Ada kebutuhan untuk mengatur akuntansi untuk dua organisasi dalam satu sistem keamanan informasi. Situasinya tidak unik, tetapi kebetulan drive USB non-standar kami yang berkapasitas 250 gigabyte bekerja cukup lambat, jadi alih-alih menggunakan RLS, kami memutuskan untuk mencoba pemisahan data. Apa yang dijelaskan, misalnya, atau. Singkatnya, jika suplemen RLS dengan syarat Kueri SQL, maka pemisah data adalah kolom tambahan dalam tabel di tingkat DBMS, sehingga mekanisme pemisahan harus bekerja lebih cepat daripada RLS.

Jadi, ke database tempat catatan LLC No. 1 disimpan, perlu untuk mentransfer informasi dari database terpisah LLC No. 2 dan mengatur kerja bersama. Seperti pada gambar:

Manusia biasa hanya bekerja dengan LLC mereka sendiri, dan kepala akuntan terkadang melihat data untuk dua badan hukum. Dalam mode akses ke kedua LLC, Anda hanya dapat membaca data, sehingga kepala akuntan harus dapat beralih secara interaktif antara mode "baca semua"/"tulis hanya untuk satu organisasi" dan memilih LLC (yaitu, tetapkan nilainya rincian umum) untuk melaksanakan, misalnya perhitungan biaya.

2. Implementasi

Platform 8.2.19.90, tanpa mode kompatibilitas. DBMS - Standar MSSQL Server 2008 R2.

Kami membuat atribut umum OrganizationSeparator tipe "angka", menyetujui proposal untuk membuat parameter sesi, mengisi komposisi rincian (termasuk beberapa direktori, semua dokumen, akumulasi, register akuntansi dan perhitungan). Pemisahan data - "Independen dan bersama". Nilai parameter sesi diatur dari pengaturan standar pengguna dalam prosedur SettingSessionParameters di modul sesi:

Organisasi = UserManagement.GetDefaultValue(chCurrentUser,"PrimaryOrganization");
SessionParameters.OrganizationSeparatorValue = Organisasi.SeparatorValue;

Di antarmuka kepala akuntan, mereka membuat formulir dengan kemampuan untuk beralih antar organisasi dan mengaktifkan/menonaktifkan mode pemisahan:

Ketika pemisahan dinonaktifkan, ketika SessionParameters.OrganizationSeparatorUsage = False, platform menolak untuk menulis dokumen, mengalami error seperti “SDBL error: ekspresi yang diharapkan (pos=12)”, sehingga Anda tidak dapat mengizinkan pengguna untuk menulis dokumen dalam opsi ini. Untuk keandalan, kami membuat langganan acara "Sebelum merekam" untuk objek yang merupakan bagian dari atribut umum:

IfSessionParameters.OrganizationSeparatorUsage = Salah Lalu
#Jika Klien Lalu
Peringatan("Tidak dapat menulis karena berbagi data dinonaktifkan!");
#EndIf
Menolak = Benar;
akhirJika;

Rencana tindakan kami adalah sebagai berikut: menyiapkan konfigurasi penerima IS No. 1, mengatur nilai atribut umum = 1, memuat data dari IS No. 2, setelah memuat, untuk semua objek dengan nilai kosong (sama dengan 0 ) nilai pemisah, setel OrganizationSeparator = 2.

Konfigurasi sudah disiapkan, timbul pertanyaan: bagaimana cara menetapkan nilai rincian umum dokumen dan pergerakannya dalam periode tertutup, dengan cepat dan tanpa risiko angka-angka di neraca akan melayang? Dengan menggunakan model objek 1C, tidak mungkin untuk menulis pemisah secara terpisah dari objek, jadi saya harus melanggar perjanjian lisensi untuk keluar dan menulis kueri untuk MS SQL. Karena ada banyak objek dalam atribut umum, dan ada lebih banyak tabel di tabel untuk objek ini, kami menulis pemrosesan yang menghasilkan kueri untuk SQL (untuk setiap objek metadata yang termasuk dalam pemisah, kami menulis "perbarui" + DB_Name + ".dbo._" + Nama Tabel + "set _" + FieldGeneralAttributes + "= 1";)

Kami memasukkan nilainya, mentransfer sebagian data dari IS No. 2, dan memulai pengujian.

Hasilnya mengecewakan. Pertama, masalah dengan register akuntansi. Saat pemisahan diaktifkan, analis tidak terlihat:

Hal ini disebabkan oleh fakta bahwa register akuntansi di tingkat DBMS disimpan sebagai beberapa tabel, dan tidak semua tabel memiliki nilai atribut umum yang dimasukkan (pemrosesan digunakan untuk melihat struktur).


Oke, mari kita masukkan nilai pemisah menggunakan MS SQL, dan kita akan melihat analitiknya. Laporan tidak lagi berfungsi. Ternyata ada masalah dengan kueri ke tabel virtual register akuntansi “Turnover” dan “TurnoverDtKt”:

(Fld27033 hanyalah atribut umum pada tabel register akuntansi)

Pemisah dipasang di semua tabel, ini terlihat di level DBMS, tidak jelas apa kesalahannya. Kami menerapkan SCP kosong standar, membuat perubahan konfigurasi yang dijelaskan di atas, memasukkan beberapa dokumen (dalam opsi ini, platform itu sendiri memasukkan nilai pemisah di semua tabel register akuntansi), tetapi kesalahan tetap terjadi. Ini buruk, tapi kami mengecualikan register akuntansi dari detail umum dan melanjutkan pengujian.

Selanjutnya ternyata mekanisme perpindahan register perhitungan telah berhenti bekerja. Kami tidak memisahkan rencana berdasarkan jenis perhitungan; kami mencoba mencari masalahnya di tabel register perhitungan dan perhitungan ulang. Kami memeriksa, memasukkan nilai detail utama, melakukan T&I - tidak berhasil.

Sepanjang jalan, kami mendiagnosis masalah saat menulis informasi dari formulir daftar ke register independen. Dalam hal ini, data dicatat dan dapat dilihat setelah restart. Masalahnya juga direproduksi pada basis pengujian:


Tidak mungkin untuk "memperbaiki" register informasi dengan memanipulasi SQL (nilai pemisah di semua tabel telah ditetapkan), jadi kami hanya mengecualikannya dari atribut umum. Setelah beberapa hari bereksperimen, upaya untuk memulihkan fungsi preemption juga tidak berhasil.

Pada titik ini, kami memutuskan untuk mematikan pemisahan data dan menggunakan RLS. Saat menyetel partisi ke "jangan gunakan", kami menemukan kesalahan "Penyedia Microsoft OLE DB untukSQL Server: CREATE UNIQUE INDEX dihentikan karena kunci duplikat ditemukan untuk indeks...". Artinya, tidak mudah untuk kembali ke keadaan sebelum perpecahan. Masalah dengan indeks tabel konversi, pengaturan penyimpanan total dan lain-lain. Faktanya adalah tabel menyimpan baris yang identik, hanya berbeda dalam nilai atribut umum. Saat Anda menghapus atribut umum, rekaman non-unik akan muncul. Anda harus menghapus catatan yang tidak perlu secara langsung di MS SQL, seperti ini (untuk tabel konversi):

Gunakan basis;
ALTER TABLE_CRgRecalc1399
TAMBAHKAN id INT IDENTITY(1,1);
PERGI
HAPUS DARI_CRgRecalc1399
DIMANA identitasnya< (SELECT MAX(id)
DARI _CRgRecalc1399 SEBAGAI T1
DIMANA _CRgRecalc1399._RecorderTRef = T1._RecorderTRef dan
_CRgRecalc1399.[_RecorderRRef] = T1.[_RecorderRRef] dan
_CRgRecalc1399.[_CalcKindRRef] = T1.[_CalcKindRRef] dan
_CRgRecalc1399.[_Fld1400RRef] = T1.[_Fld1400RRef] dan
_CRgRecalc1399.[_Fld1401RRef] = T1.[_Fld1401RRef] dan
_CRgRecalc1399.[_Fld1402RRef] = T1.[_Fld1402RRef]
);
PERGI
ALTER TABLE_CRgRecalc1399
DROP KOLOM id;

Dan hanya setelah membersihkan beberapa lusin tabel barulah dimungkinkan untuk mematikan pemisahan data. Setelah mematikan separasi tidak ada masalah.

3. Kesimpulan.

Ada secercah harapan bahwa masalah tersebut teratasi di 8.3. Kami tidak terlalu malas, kami memeriksanya di 8.3.4.482 (dengan mode kompatibilitas dinonaktifkan). Kami melihat unit kontrol yang hampir standar, dengan perubahan konfigurasi hanya untuk detail umum. Pada basis pengujian ini, pemisahan diaktifkan sebelum informasi dimasukkan, mis. platform harus menulis nilai pemisah dengan benar ke semua tabel; mereka sendiri tidak menulis apa pun langsung ke MS SQL.

Hasil:

    Masalah dengan kueri ke tabel virtual "Turnover" dan "TurnoverDtKt" direproduksi.

    Masalah represi kembali muncul.

    Masalah dengan penulisan ke register informasi independen muncul kembali.

    Masalah dengan mematikan pemisahan adalah Anda tidak dapat menghilangkannya hanya dengan satu klik tombol!

Oleh karena itu, kami tidak dapat mengganti RLS dengan mekanisme baru. Mekanisme ini rupanya dirancang untuk itu layanan awan, dan dalam opsi untuk menggunakan data bersama “secara mandiri”, mungkin pembagiannya akan berhasil, tetapi kita memerlukan data master yang sama. Kita hanya perlu menunggu 1C memperbaiki kesalahannya, atau bahkan lebih baik lagi, menerapkan mekanisme standar untuk pemisahan berdasarkan organisasi dalam konfigurasi standar.

Mekanisme berbagi data memungkinkan Anda menyimpan data dari beberapa organisasi independen dalam satu basis informasi.

Hal ini dimungkinkan karena detail umum objek konfigurasi dapat digunakan tidak hanya sebagai "properti yang sama yang dimiliki semua objek", tetapi juga sebagai pengidentifikasi bahwa data tersebut milik salah satu dari beberapa area independen. Hal ini dapat dijelaskan dengan contoh berikut.

Katakanlah ada atribut umum "Organisasi" dalam konfigurasi. Ini berarti (disederhanakan) bahwa setiap direktori, dokumen, atau objek konfigurasi lainnya juga akan memiliki atribut “Organisasi”.

Selain itu, setiap pengguna basis informasi memiliki akses ke semua data yang disimpan dalam basis data ini, terlepas dari organisasi mana yang ditunjukkan, misalnya, dalam dokumen tertentu.

Sekarang mari kita tunjukkan bahwa atribut umum "Organisasi" akan berfungsi sebagai pemisah.

Kemudian (disederhanakan) beberapa area data independen akan dibuat di basis informasi, yang masing-masing akan menyimpan data hanya untuk satu organisasi tertentu:

Kini, ketika memasuki program, pengguna tidak akan memiliki akses ke semua informasi yang ada di basis informasi, tetapi hanya ke data wilayah “miliknya”, dalam hal ini ke dokumen, buku referensi, dll dari organisasinya.

Pilihan lain untuk menggunakan mekanisme ini dimungkinkan ketika terdapat beberapa area data independen di basis informasi dan, pada saat yang sama, ada data yang tersedia untuk semua pengguna program. Misalnya, mereka berisi direktori bank, yang sama untuk semua organisasi.

Dalam hal ini, pengguna memiliki akses ke area data "miliknya" dan area data yang tidak dibagikan, yang umum bagi semua pengguna.

Mekanisme berbagi data cukup fleksibel dan universal:

  • ini memungkinkan Anda untuk menggunakan bukan hanya satu, tetapi beberapa pemisah;
  • ada mode yang berbeda penggunaan data bersama; mereka berbeda dalam cara menangani situasi ketika nilai pembatas tidak ditentukan;
  • penggunaan atribut umum sebagai pemisah dapat dikontrol selama pengoperasian program dari bahasa bawaan tanpa mengubah konfigurasi; ini disebut pembagian bersyarat.

Dalam sistem 1C:Enterprise, dimungkinkan untuk menyimpan catatan untuk beberapa perusahaan dalam satu basis informasi. Pemisah akuntansi digunakan untuk tujuan ini.

Penggunaan pemisah akuntansi ditentukan dalam konfigurasi. Jika konfigurasi menentukan penggunaan pemisah akuntansi, maka dalam tabel akun dimungkinkan untuk memilih nilai pemisah akuntansi tertentu berdasarkan total akuntansi yang akan dikeluarkan.

Untuk menetapkan nilai pemisah akuntansi, gunakan item "Pemisah akun" menu "Tindakan" atau tombol toolbar yang sesuai. Dalam hal ini, dialog muncul di layar untuk menetapkan nilai pemisah akuntansi.

Di lapangan "Nilai pemisah akuntansi" Anda dapat menentukan nilai pemisah akuntansi tertentu. Metode memasukkan nilai bergantung pada jenis pemisah akuntansi yang ditentukan dalam konfigurasi. Biasanya, ini adalah buku referensi. Dalam hal ini, untuk memilih suatu nilai, gunakan tombol pilihan dan pilih nilai yang diinginkan dari daftar nilai direktori.

Tombol "Nilai kosong" memungkinkan Anda menghapus nilai yang dimasukkan dari pemisah akuntansi, yaitu menetapkan nilai kosong. Hal ini masuk akal jika, bersama dengan nilai pemisah akuntansi tertentu, nilai kosong juga digunakan dalam transaksi.

kotak centang "Untuk semua orang" memungkinkan Anda mengatur mode untuk menampilkan total semua nilai pemisah akuntansi secara total.

Untuk mengatur nilai yang dipilih, klik tombol "OKE". Untuk menolak menetapkan nilai, gunakan tombol "Membatalkan".

Setelah mengatur nilai yang dipilih, papan akun akan menampilkan total untuk nilai pemisah akuntansi tertentu atau untuk nilai kosong atau untuk semua nilai total, bergantung pada opsi yang dipilih dalam dialog.

Perhatian! Ini adalah pelajaran versi pengantar, yang materinya mungkin tidak lengkap.

Masuk ke situs sebagai pelajar

Masuk sebagai siswa untuk mengakses materi sekolah

Bahasa pemrograman internal 1C 8.3 untuk programmer pemula: format dalam 1C

Saat memprogram dalam 1C, Anda sering kali harus menampilkan nilai (dalam laporan yang sama). berbagai jenis(string, tanggal, angka...). Masing-masing nilai tersebut memiliki representasi yang berbeda-beda.

Misalnya, tanggal yang sama "01/01/2005" dapat direpresentasikan sebagai string sebagai:

  1. "01.01.2005"
  2. "1 Januari 2005"
  3. "01.01.05"

Ini semua adalah representasi string dengan nilai yang sama, d Untuk pembentukannya digunakan fungsi khusus dalam 1C Format.

Menggunakan fungsi Format di 1C

Nonaktifkan pengelompokan digit

Mari kita perlu menampilkan angka 10.000.

Jika kita menulis:

String format umumnya terdiri dari dua bagian yang dipisahkan oleh tanda sama dengan. Di sebelah kiri sama adalah nama parameter yang disetel (lihat bantuan atau contoh), dan di sebelah kanan adalah nilai parameter ini.

Pada contoh di atas, format string "HH=0" memiliki parameter HH dan nilai 0. Kombinasi ini membatalkan pengelompokan digit angka. Dan, seperti yang Anda lihat, 10.000 sekarang telah dikeluarkan.

Keluarkan angka nol di depan

Tugas umum lainnya adalah mencetak angka nol di depan sebelum angka. Misalnya, Anda ingin menampilkan angka 5 dengan nol di depannya, yaitu dalam bentuk “05”:

Laporan(Format(5, "CHZ=2; CHVN=" ) ) ;

// keluaran 05

Mari kita lihat format string "CC=2; CHVN=". Ini terdiri dari dua string format yang dipisahkan oleh titik koma. Mari kita lihat masing-masing secara terpisah. Baris "BC=2" menentukan jumlah total

menampilkan tempat desimal dari bagian bilangan bulat dan pecahan. Dengan demikian, jumlah total posisi yang akan ditempati oleh nomor tersebut selama penarikan akan sama dengan 2. Baris "ChVN=", sebagai berikut dari bantuan, menunjukkan ke fungsi format bahwa jika bilangan tersebut tidak mencapai panjang yang dinyatakan (seperti dalam kasus kami, karena kami menunjukkan 2 posisi, dan 5 hanya menempati satu), maka memimpin angka nol harus digunakan. Keunikan dari format string ini adalah hanya memiliki nama parameter dan tanda sama dengan, tetapi tidak memiliki nilai. kamu sedang membaca versi percobaan

pelajaran, pelajaran lengkap berada.

Kombinasi dua string format memberikan hasil yang kita butuhkan, “05”, bukan “5”.

Mengubah pemisah antara bagian bilangan bulat dan pecahan

Anggaplah kita perlu menampilkan bilangan pecahan yang dipisahkan oleh tanda bintang, bukan titik. Artinya, 25.46 dihasilkan sebagai "25*46": Format String format adalah parameter DF dan nilai dddd, yang menunjukkan fungsinya

cetak representasi panjang hari dalam seminggu (perhatikan berapa banyak "d" yang dikandungnya).

Representasi tanggal bulan

Deskripsi bulan demi tanggal ditampilkan sebagai berikut: Laporan(Format("20050101" , "DF=MMMM" ) ) ;

// akan mencetak bulan Januari

String format memiliki parameter DF yang sama seperti pada kasus sebelumnya. Namun maknanya berbeda. Sekarang sama dengan MMMM.

Ikuti tesnya

Mulai tes

1. Format("19050505", "DF=MMMM") akan kembali

2. Format string dengan mengubah pemisah pecahan dan bilangan bulat menjadi ^

3. Agar fungsi Format mengembalikan “00005” dan bukan 5, string format cocok

4. Agar fungsi Format mengembalikan “10.000” dan bukan 10.000, string format cocok