25.06.2023
Rumah / Internet / Parameter standar &Periode dan masalah yang digunakan. Kami membuat laporan dengan frekuensi tertentu pada skd 1s laporan dalam skd cara mengatur periode

Parameter standar &Periode dan masalah yang digunakan. Kami membuat laporan dengan frekuensi tertentu pada skd 1s laporan dalam skd cara mengatur periode

Saat membuat laporan di ACS, seringkali perlu untuk menampilkan pilihan periode pada formulir laporan, terlebih lagi, sehingga Anda tidak perlu mengisi tanggal secara manual, tetapi pilih dari daftar periode standar, seperti: “Tahun”, “Bulan”, “Minggu”, dll. Untuk parameter tipe Tanggal, Anda hanya dapat menentukan "Awal tahun ini, bulan, dll.", tetapi "Akhir" tidak tersedia.

Faktanya adalah, dari tipe data, hanya tipe "Tanggal mulai standar" yang tersedia, tetapi saya juga menginginkan tipe "Tanggal akhir standar".

Ada cara untuk menyiasatinya.

  1. Mari buat Parameter baru, beri nama "Periode"
  2. Setel parameter ini ke jenis "Periode standar"
  3. Di bidang "Ekspresi" dari parameter "StartPeriod" dan "EndPeriod" yang digunakan dalam kueri, tetapkan ekspresi " &Periode.TanggalMulai" dan " &Periode.TanggalAkhir" masing-masing.

Tapi ada sedikit kehalusan. Jika kami menggunakan tabel virtual dalam kueri, kemungkinan besar laporan akan berhenti berfungsi dan pesan kesalahan seperti "Lihat kesalahan pemrosesan, ketik ketidakcocokan, nomor parameter ..." akan dikeluarkan.

Untuk menghindarinya, Anda perlu menghapus semua parameter tabel virtual.

Dan tambahkan ke tabel pada tab Komposisi Data.

Agar parameter ditampilkan pengaturan cepat laporkan, aktifkan bendera yang sesuai untuk parameter laporan.

Sekarang pemilihan periode pada formulir laporan terlihat seperti ini.

Jadi, mari kita mulai.

Untuk kesederhanaan, memahami contoh, kami akan membuat satu register akumulasi terbalik sederhana.

Dalam kasus saya, ini adalah daftar akumulasi "Work in progress accounting".

Misalnya, kami akan menentukan parameternya secara kaku (tidak melalui pengenaan lunak parameter pada ACS):

Perhatikan bahwa frekuensi meja maya- "Catatan".

Tapi, seperti disebutkan di atas, kita membutuhkan periode dalam konteks periodisitas, jadi saya mengusulkan untuk menghitung kolom "Periode" dengan cara berikut (tidak terlalu indah, tapi pilihan yang lebih baik Aku tidak melihat):

Seperti yang Anda lihat dari tangkapan layar, parameter diteruskan ke permintaan, yang ditentukan pengguna pada formulir: Nilai pencacahan "Periodisitas" - pencacahan ini tersedia di hampir semua solusi standar.

Jenis yang tersedia ditunjukkan pada tab "Parameter":

Dengan pengaturan ini, kami memformat periode kami sehingga semuanya indah dan enak dipandang)

Berikut adalah format sebenarnya:

Bulan: DF="MMMM yyyy "y.""

Hari: DF = dd.MM.yyyy

Minggu: DF = ""Minggu dari" dd.MM.yyyy "

Seperempat: DF = "menjadi "seperempat" yyyy "y."

Tahun: DF = "yyyy "y."

Dekade: DF = ""Dekade sejak" dd.MM.yyyy "

Setengah tahun: DF = "" Setengah tahun sejak "dd.MM.yyyy"

Itu saja. Hasilnya, kami memiliki gambaran yang luar biasa:

Artikel ini membahas beberapa fitur pengaturan periode saat menggunakan Data Composition System (ACS), masalah yang muncul karena perbedaan konsep periode antara pengguna rata-rata dan sistem 1C, serta menyarankan cara untuk menyelesaikannya .
Sebagian besar laporan yang dikembangkan menggunakan Data Composition System (DCS) mengharuskan pengguna untuk memasukkan periode pembuatan laporan. Sebagai aturan, dalam ACS, input periode diatur melalui parameter, menggunakan konstruksi berikut, lihat Gambar. Gbr.1 Metode memasuki suatu periode ini dianggap "klasik", dijelaskan dalam artikel tentang ITS dan literatur lain yang ditujukan untuk pengembangan di 1C, jadi kami akan menganggapnya sebagai dasar. Pertimbangkan, sebagai contoh, kueri sederhana yang mengambil semua dokumen Penjualan Barang/Jasa untuk periode tertentu (lihat Gambar. Gbr.2 Saat menggunakan laporan ini, pengguna mengatur periode melalui parameter lihat. Gbr.3 Segalanya tampak benar ... TETAPI ada masalah kecil:

Masalahnya adalah sebagian besar pengguna "memahami" periode secara berbeda dari 1C "memahaminya", contoh:
1). Mempertimbangkan Gbr.3
Dari sudut pandang pengguna, periode tidak diatur, yaitu TIDAK TERBATAS, yaitu SEMUA dokumen tanpa batas tanggal harus dimasukkan dalam laporan.
"Dari sudut pandang" sistem 1C, periode-parameter ditetapkan dan ... kedua batasnya sama dengan 01,01.
2). Mempertimbangkan Gbr.4
Dari sudut pandang pengguna, semua dokumen mulai dari tanggal 28/01/2010 harus disertakan dalam laporan.
"Dari sudut pandang" periode 1C 28/01/2010 - 01/01/0001 akan menyebabkan pengecualian.

Tentu saja, Anda dapat mencoba menjelaskan kepada pengguna mengapa laporan tersebut tidak menampilkan dokumen yang dia harapkan untuk dilihat dan bagaimana periode disajikan dari "sudut pandang" 1C, tetapi ini adalah tugas tanpa pamrih, dan salah. Program bagus harus, pertama-tama, nyaman bagi pengguna, karena program itu ada untuk pengguna, dan bukan sebaliknya, oleh karena itu, perlu "mengajar" 1C untuk memahami periode seperti yang dipahami pengguna, yaitu:
1). StartPeriod dan EndPeriod tidak disetel -> semua dokumen.
2). Hanya StartPeriod yang diatur –> semua dokumen mulai dari StartPeriod
3). Selain itu, kami akan memeriksa bahwa Akhir Periode >= Awal Periode, dan jika ini tidak benar, maka kami akan menganggap bahwa Akhir Periode tidak ditetapkan, yaitu. 2).
Berdasarkan hal tersebut di atas, ekspresi untuk parameter EndDate akan terlihat seperti ini:

PILIH KAPAN &Period.EndDate=DATETIME(1,1,1) LALU PILIH KAPAN &Period.EndDate<&Период.ДатаНачала ТОГДА ДАТАВРЕМЯ(3999,12,31,23,59,59) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ

Tampilan akhir dari desain pemilihan periode kami ditampilkan di Gbr.5

Beberapa fitur pengaturan periode di ACS.

Sebagian besar laporan yang dikembangkan menggunakan Data Composition System (DCS) mengharuskan pengguna untuk memasukkan periode pembuatan laporan.

Sebagai aturan, dalam ACS, input periode diatur melalui parameter, menggunakan konstruksi berikut, lihat Metode memasuki periode ini dianggap "klasik", dijelaskan dalam artikel tentang ITS dan literatur lain tentang pengembangan di 1C, jadi mari kita ambil sebagai dasar. Pertimbangkan, sebagai contoh, kueri sederhana yang mengambil semua dokumen Penjualan Barang/Jasa untuk periode tertentu (lihat Gambar.

Saat menggunakan laporan ini, pengguna mengatur periode melalui parameter, lihat Segalanya tampak benar ... TAPI ada masalah kecil:

Masalahnya adalah sebagian besar pengguna "memahami" periode secara berbeda dari 1C "memahaminya", contoh:

Dari sudut pandang pengguna, periode tidak diatur, yaitu TIDAK TERBATAS, yaitu SEMUA dokumen tanpa batas tanggal harus dimasukkan dalam laporan.

"Dari sudut pandang" sistem 1C, periode-parameter ditetapkan dan ... kedua batasnya sama dengan 01,01.

Dari sudut pandang pengguna, semua dokumen mulai dari tanggal 28/01/2010 harus disertakan dalam laporan.

"Dari sudut pandang" periode 1C 28/01/2010 - 01/01/0001 akan menyebabkan pengecualian.

Tentu saja, Anda dapat mencoba menjelaskan kepada pengguna mengapa laporan tersebut tidak menampilkan dokumen yang dia harapkan untuk dilihat dan bagaimana periode disajikan dari "sudut pandang" 1C, tetapi ini adalah tugas tanpa pamrih, dan salah. Program yang baik harus, pertama-tama, nyaman bagi pengguna, karena program itu ada untuk pengguna, dan bukan sebaliknya, oleh karena itu, perlu "mengajar" 1C untuk memahami periode yang dipahami pengguna, yaitu :

1). StartPeriod dan EndPeriod tidak disetel -> semua dokumen.

2). Hanya StartPeriod yang diatur -> semua dokumen mulai dari StartPeriod

3). Selain itu, kami akan memeriksa bahwa Akhir Periode >= Awal Periode, dan jika ini tidak benar, maka kami akan menganggap bahwa Akhir Periode tidak ditetapkan, yaitu. 2).

Berdasarkan hal di atas, ekspresi untuk parameter EndDate adalah:

KAPAN &Period.EndDate=DATETIME(1,1,1)

KEMUDIAN TANGGAL WAKTU(3999,12,31)

KAPAN &Periode.TanggalAkhir<&Период.ДатаНачала

KEMUDIAN TANGGAL WAKTU(3999,12,31) TANGGAL WAKTU(3999,12,31,23,59,59)

&Periode.TanggalAkhir

Tampilan akhir dari desain pemilihan periode kami ditampilkan di

Catatan: mekanisme pengaturan parameter ini ditujukan untuk platform 1C 8.1 dan 8.2 lama (dan konfigurasi berjalan di bawah kendali mereka), versi platform 1C yang lebih lama memiliki mekanisme bawaan untuk mengontrol parameter yang tidak terisi dan tidak perlu menggunakan mekanisme yang dijelaskan dalam artikel ini, sebagai tambahan pada beberapa versi platform 1C, kesalahan dan pekerjaan yang salah mungkin terjadi.

Mari buat laporan dengan satu kumpulan data kueri:

PILIH Barang Di Gudang Sisa. Gudang, Barang Di Gudang Tetap. Nomenklatur, Barang Di Gudang Tetap. QuantityBalance DARI Register Akumulasi. barang di gudang. Remains(&MyDate ,) AS GoodsIn WarehousesRemains

Sekarang mari buka tab parameter dan lihat bahwa sistem, selain parameter &TanggalSaya, juga membuat parameter &Periode.
Untuk mengamati periode secara visual, mari buat formulir laporan utama dan tempatkan bidang tabel dengan data di dalamnya: SettingsComposer.Settings.DataParameters

Simpan laporan dan buka di perusahaan. Di kolom tabel dengan parameter, hanya parameter &Periode yang ditampilkan:

Karenanya, setiap perubahan pada parameter ini tidak akan memberikan hasil yang diinginkan.

Mengapa &TanggalSaya tidak tersedia? Tentunya karena pada tab parameter ada kotak centangnya Pembatasan ketersediaan.

Kami menghapus daw. Sekarang kita melihat keduanya dalam parameter yang tersedia. Hanya saat membuat laporan kita akan melihat bahwa laporan merespons parameter &Periode, dan bukan &TanggalSaya.

Dalam contoh ini, hal paling sederhana adalah mengganti nama parameter &TanggalSaya dalam kueri menjadi &Periode dan mencapai hasil yang diinginkan. Tapi mungkin Anda memiliki permintaan yang sudah menggunakan parameter &Periode, atau keyakinan agama Anda tidak mengizinkan Anda menggunakan parameter ini, bagaimanapun, Anda dapat menyelesaikan masalah seperti ini:

PILIH Barang Di Gudang Sisa. Gudang, Barang Di Gudang Tetap. Nomenklatur, Barang Di Gudang Tetap. QuantityBalance DARI Register Akumulasi. barang di gudang. Remains((&MyDate) ,) AS GoodsInWarehousesRemains

UPD dari pengguna Huuu:

Masalah utama saat menggunakan parameter "standar" (ditambahkan oleh sistem) adalah ketika beberapa tabel virtual digunakan dalam laporan, jika parameter ini ditentukan, nilainya akan digunakan dalam semua kasus lain, bukan "milik sendiri".

Saya akan memberikan contoh:

SELECT EmployeesSP.Employee, EmployeesSP.ReasonChangeState, EmployeesSP.Period, EmployeesSPotherDate.Period AS Period2, EmployeesSPOtherDate.ReasonChangeState AS ReasonChangeState2FROMRegister.EmployeesOrganizations.SliceRecent(&Period , Employee = &Employee) ASSP GABUNG KIRI Daftar Informasi.Karyawan Organisasi.Bagian Terakhir(&TanggalLainnya,) SEBAGAI KaryawanSPOtherDate ON EmployeesSP.Employee = EmployeesSPOtherDate.Employee

Di subquery kedua, nilai parameter PERIOD "standar" akan digunakan sebagai parameter tanggal irisan, dan bukan nilai OtherDate.

"Kesalahan" ini akan diamati bahkan jika subquery kedua adalah keluaran ke kumpulan data kedua dan sudah ditautkan melalui ACS. Opsi menggunakan dalam kueri kedua ekspresi seperti "ADDDATE(&Periode, MONTH, -1)" juga tidak akan berfungsi, bulan tidak akan dikurangi. Namun mengganti nama parameter "Periode" dalam kueri menjadi, misalnya, "TanggalPertama" memecahkan masalah ini.

Omong-omong, masalah yang persis sama diamati dengan tabel akumulasi virtual dan register akuntansi yang digunakan untuk memperoleh, misalnya, pergantian. Di sana, sistem menambahkan parameter "StartPeriod" dan "EndPeriod".
Jadi dalam kasus permintaan yang sedikit lebih rumit, masuk akal untuk menonaktifkan ketersediaan dan penggunaan "periode standar".