1c soru içeren harici basılı form. BSP "Yazdır" alt sisteminden "Belgeleri yazdır" formundaki veri talebiyle basılı formların çıktısı

En basit basılı formu yazmayı düşünelim. 1s 8,1 - 8,2 yapılandırma örneğini kullanma Kurumsal muhasebe 2.0. Diyelim ki bir belge için harici bir basılı form yazmanız gerekiyor: belgenin temel verilerini ve ayrıca tablo kısmını görüntüleyin Mal: isimlendirme, fiyat, miktar ve tutar.

Ortaya çıkan örneği adresinden indirebilirsiniz.

Yapılandırıcıda 1C İşletmeleri 8 harici işleme oluştur ( Dosya->Yeni->Harici İşleme), adı ayarlayın, harici basılı form için gerekli ayrıntıları oluşturun Nesne Referansı tip ile DocumentLink Mal ve Hizmet Satışı.

Basılı form düzeni oluşturma

Yeni bir tane ekle düzen, düzen türünü bırakın elektronik tablo belgesi. Düzende üç alan oluşturuyoruz: Başlık, Veri Ve Bodrum. Bu, gerekli sayıda satırı seçip menüye tıklayarak yapılabilir. Tablo->Adlar->Ad ata (Ctrl+Shift+N).

Bundan sonra alanlara metin ve parametreler yerleştirmeye başlıyoruz. Başlığa koyacağız Basılı formun adı, belge numarası Ve organizasyon Ayrıca tablo başlığının kenarlıklarını çizin ve sütunların adlarını yazın. Hücre özelliklerinde bir parametre oluştururken Düzen sekmesinde özelliği ayarlamanız gerekir. dolgu Anlamında Parametre.

Bölgede Veri tablo bölümünde satırları görüntülemek için parametreler oluşturalım( İsimlendirme, fiyat vb.) ve bölgede Bodrum miktar ve tutara göre toplamlar için.

Programlama

Yazdırma formu nesne modülüne gidelim Eylemler->Nesne modülünü aç.

Basılı formlar için zorunlu olan bir dışa aktarma fonksiyonu oluşturalım. Fok().

İşlev Yazdırma () İhracat Son Fonksiyon

Fonksiyonda şunun için bir değişken yaratacağız: elektronik tablo belgesi Basılı formun çıktısının alınacağı düzen Ve yerleşim alanları.

TabDoc = yeni TabularDocument; Düzen = GetLayout("Düzen"); HeaderArea = Layout.GetArea("Başlık"); AreaData = Layout.GetArea("Veri"); AreaFooter = Layout.GetArea("Altbilgi");

Parametreleri dolduralım şapkalar ve onu getir elektronik tablo belgesi.

HeaderArea.Parameters.HeaderText = +LinkToObject.Number; HeaderArea.Parameters.Organization = LinkToObject.Organization; TabDoc.Output(HeaderArea);

Tablo satırlarını almak için Mal isteği kullanıyoruz.

İstek = yeni İstek; request.SetParameter("Bağlantı", ObjectLink); Query.Text = "SEÇ | Mal ve Hizmet Mallarının Satışı, İsimlendirme, | Mal ve Hizmet Mallarının Satışı Tutarı, | Mal ve Hizmet Mallarının Satışı, Fiyatı, | Mal ve Hizmet Mallarının Satışı Adet|DAN | Belge Mal ve Hizmet Satışı Mallar Mal ve Hizmet Satışı NASIL Yapılır|NEREDE | Mal ve Hizmet Mallarının Satışı. Bağlantı = &Link";

Ayrıntıları istek parametresine aktarıyoruz Nesne Referansı, durumda belirtmek için NEREDE yalnızca basılı formu elde ettiğimiz belgedeki verilere ihtiyacımız var. Örnek bir sorgu elde etmek için önce onu çalıştırıyoruz, ardından satırları seçiyoruz.

Select = Query.Run().Select();

Döngünün bir sonraki adımında alan parametrelerini dolduruyoruz Veri belge örneğinin her satırı için bunları görüntüleyebilirsiniz elektronik tablo belgesi. Ayrıca döngüdeki toplam değerleri de hesaplıyoruz miktarları Ve miktarlar. Her parametreyi ayrı ayrı doldurmayacağız, ancak prosedürü kullanacağız Özellik Değerlerini Doldurun((<Приемник>, <Источник>) itibaren küresel bağlamözellik değerlerini kopyalar <Источника> mülklere <Приемника> . Eşleştirme özellik adlarına göre yapılır. Bununla ilgili daha fazlasını şurada okuyabilirsiniz sözdizimi asistanı 1C Enterprise 8.

Toplam Toplam = 0; Toplam Miktar = 0; While Selection.Next() Döngü FillPropertyValues(AreaData.Parameters,Selection); ToplamToplam = ToplamToplam + Örnek.Toplam; ToplamMiktar = ToplamMiktar + Örnek.Miktar; TabDoc.Output(AreaData); EndCycle;

Alanı doldurun ve görüntüleyin Bodrum.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = ToplamToplam; TabDoc.Output(AreaFooter);

Tamamlanan elektronik tablo belgesini işlevden döndürme Fok().

TabDoc'u döndür;

Standart yapılandırmalardan birini kullanıyorsanız elektronik tablo belgesini geri gönderdikten sonra 1C Yazdırılan formu ekranda gösterecektir. Çıktı için elektronik tablo belge yöntemini de kullanabilirsiniz. Göstermek().

5. Basılı bir formu belgeye bağlama

İÇİNDE standart konfigürasyonlar 1C 8 Harici basılı formları kaydetmek için bir dizin var Harici İşleme. Bağlanmak için kurumsal modda menüye gidin Servis->Ek raporlar ve işleme->Ek harici basılı formlar.

Yeni bir dizin öğesi ekleyin, yazdırılan formu diskten yükleyin ve belge türünü seçin.

Şimdi belgede Mal ve hizmet satışı Yeni bir yazdırılabilir dosya görünecektir.

Basılı formun otomatik kaydı

Bir yazdırma formunu bağlarken belge türünü manuel olarak seçmeniz gerekmediğinden emin olmak için, otomatik kayıt. Bunu yapmak için yeni bir düzen ekleyin ve onu çağırın Ayarlar_Otomatik kayıt(tek yol bu) ve ilk hücresine yazıyoruz Dokümantasyon.<Наименование документа> (veya Dizinler.<Наименование справочника> ).

Şimdi, bir yazdırma formunu bağlarken bizden şunu kullanmamız istenecek: otomatik kayıt parametreleri.

Herkes, BSP (Standart Alt Sistemler Kütüphanesi) temelinde oluşturulan tipik yapılandırmalarda, bir Elektronik Tablo belgesi temelinde oluşturulan basılı formların özel bir "Belgeleri Yazdır" formuna nasıl çıktılandığını birden fazla kez gördü. Bu form BSP'nin "Yazdır" alt sisteminin bir parçasıdır. Kendi basılı formlarınızı geliştirirken bazen kullanıcıdan yazdırma için gerekli ek verileri talep etmek gerekebilir. Burada şu soru ortaya çıkıyor: bu durumda basılı formun “Belgeyi Yazdır” formunda nasıl görüntüleneceği. Bu yazımda, basılı formun çıktısını almadan önce kullanıcıdan ek veri talep etmek istersek, basılı bir formun çıktısını “Yazdır” alt sisteminden bahsi geçen forma nasıl uygulayacağımıza bakacağım. Burada iki durum ele alınacaktır: Basılı bir formun "Ek raporlar ve işleme" alt sistemi kullanılarak uygulanması ve yapılandırıcı modunda konfigürasyona basılı bir formun eklenmesi, örn. standart konfigürasyonda değişiklikler yapılır.

"Belgeleri Yazdır" formu, basılı formlarla çalışırken aşağıdaki gibi bazı ek işlevler sağlar:

  • doğrudan formda bir yazıcıya yazdırmak için düğme;
  • kopya sayısının belirtilmesi, basılı form;
  • oluşturulan basılı formun düzenlenmesi;
  • basılı bir formu çeşitli veri formatlarında (Excel, Word, PDF vb.) kaydetme yeteneği;
  • basılı bir formun e-postayla gönderilmesi;
  • Bir dizi belgeyle rahat çalışma.

Bu form artık 1C tarafından tüm standart konfigürasyonlarda basılı belge formlarını ve dizin öğelerini görüntülemek için kullanılıyor. Ve tabii ki kendi basılı formlarımızı geliştirirken, kabul edilen uygulamaların dışına çıkmamak adına, basılı formlarımızı da sağlanan araçları kullanarak sergilememiz gerekiyor.

Basılı formları eklemek için standart yöntemler kullanıldığında, “Yazdır” alt sistemi bizim için her şeyi yapacak ve basılı formu gerektiği gibi gösterecektir. Örneğin:

  1. "Yazdır" alt sistemini kullanarak bir belgeye yazdırma komutu eklerken, Yazdırma prosedürünün uygulandığı yazdırma yöneticisini belirten Yazdırma Komutları Ekleme prosedüründe yazdırma komutunu açıklamamız gerekir;
  2. Ek İşleme oluştururken, InformationOnExternalProcessing işlevindeki işleme nesnesi modülünde, Sunucu çağrısı yönteminin kullanım türü olan bir komutu tanımlamamız ve yazdırılan bir veri oluşturmak için çağrıyı belirli bir şekilde uygulayan Yazdırma prosedürünü hemen uygulamamız gerekir. biçim.

Bu gibi durumlarda, daha önce de söylediğim gibi, yazdırma alt sistemi, gerektiğinde kendi oluşturduğumuz basılı formun çıktısını alacaktır. Bu tür yöntemler, bir baskı formunun doğrudan oluşturulmasını içerir; Yazdırılacak nesneleri yazdırma prosedürüne geçirdi, bir elektronik tablo belgesi oluşturdu ve bunu ekranda gösterdi.

Bir e-tablo belgesi oluşturmaya başlamadan önce kullanıcıdan bazı veriler talep etmeniz gerekiyorsa ne olur? Onlar. formu göstermemiz gerekiyor. Bu durumda basılı form oluşturmanın standart düzeni ihlal edilir ve basılı formumuzu “Belgeleri Yazdır” formuna nasıl aktaracağımızı düşünmemiz gerekir.

Bu durumda iki durum mümkündür:

  1. Konfigürasyon değişikliği ile baskı kalıbı oluşturulduğunda;
  2. Yapılandırmayı değiştirmeden basılı bir form oluşturulduğunda, ör. "Ek raporlar ve işleme" alt sistemi kullanılır.

Yapılandırıcı aracılığıyla ekleyerek basılı bir form oluşturuyoruz.

İlk varyasyon. Ekiple birlikte işlemenin oluşturulması yoluyla.

Bu seçenek, işlemin doğrudan Meta Veri Nesnelerine eklenmesini içerir:

Belirli bir nesnenin, örneğin bir dizin öğesinin basılı formunu uygulamamız gerektiğinde bu seçeneği düşünelim. Bunu yapmak için dört işleme alanında çalışmamız gerekiyor:

  1. Yazdırılabilir formumuzu çağıracak bir komut oluşturun;
  2. Formun kendisini oluşturun;
  3. Basılı bir formun düzenini oluşturun;
  4. İşleme yöneticisi modülünde değişiklikler yapın.

Ekip oluşturma

Komut özelliklerinde belirtin:

  • Komutun formda görünmesini istediğimiz grup;
  • Parametre türü tam olarak basılı formunu yaptığımız referans kitabı veya belgedir;
  • Parametrenin kullanım modu Çoklu'dur. Böylece listede seçilen birden fazla öğe için basılı formları aynı anda görüntüleyebilirsiniz.

Komut modülünde, basılı formlar oluşturmanın gerekli olduğu seçilen dizin öğelerini ileterek işleme formunu açıyoruz. Burada fazla ayrıntıya girmeyelim ve platformun komut işleme prosedürüne eklediği standart kodu biraz düzeltelim:

&İstemcide Komut İşleme Prosedürü(Komut Parametresi, Komut Yürütme Parametreleri) //İşleyicinin içeriğini ekleyin. FormParameters = Yeni Yapı("DataForPrinting", CommandParameters); OpenForm("Processing.PrintForm.Form",FormParameters,CommandExecutionParameters.Source,CommandExecutionParameters.Uniqueness,CommandExecutionParameters.Window,CommandExecutionParameters.NavigationLink); Prosedürün Sonu

Komut Parametresi prosedür parametresi, yazdırma için seçtiğimiz öğeleri tam olarak içerir.

Form oluşturma

İşleme bir form ekleyelim, Değerler Listesi türünün bir form niteliğini oluşturalım ve yazdırılan form için ek parametreleri girmemiz için gerekli ayrıntıları oluşturalım:

DataForPrint - ListValues ​​yazın;

Satır Sayısı - Sayı yazın.

Örneğim tamamen açıklayıcı olacaktır, bu yüzden amacımın, seçilen öğenin temsilini ve formda ek bir parametre olarak seçtiğimiz satır sayısını yazdırmak olduğunu koşullu olarak belirleyelim.

Form modülüne gidin ve aşağıdaki kodu yazın:

&OnServerProcedureWhenCreatingOnServer(Failure, StandardProcessing)PrintData.LoadValues(Parameters.PrintData); Prosedürün Sonu &İstemcide Prosedür Yazdırma (Komut) Yazdırma YönetimiClient.Execute Yazdırma Komutu("Processing.PrintForm", //Yazdırma Yöneticisi "PrintForm", //Identifier GetObjectsForPrint(), //PrintObjectsThisObject, //Formun sahibi - yazdırmanın yapıldığı forma GetPrintParameters() adı verilir; //Yazdırma parametreleri - yazdırma yöneticisine aktarım için isteğe bağlı parametreler Prosedürün Sonu &Sunucuda İşlev GetObjectsForPrint() Array = DataForPrint.UploadValues(); Dönüş Dizisi; EndFunction &OnServer Function GetPrintParameters()PrintParameters = Yeni Yapı; Yazdırma Seçenekleri.Insert("Form Başlığı", "Formu Yazdır"); //"Belgeyi yazdır" formunun parametrelerinden biri. //Yazdırılabilir çıktı formunun başlığını belirtir. //Burada ayrıca yazdırma yöneticisine aktarmak istediğimiz parametrelerimizi ekliyoruz. PrintOptions.Insert("Satır Sayısı", Satır Sayısı); İadeYazdırmaSeçenekleri; Son Fonksiyon

WhenCreatingOnServer prosedürünü tanımlıyoruz ve içinde formu açarken komuttan ilettiğimiz parametreden, basılı bir form oluşturmamız gereken nesnelerin listesini okuyoruz.

Formda bir Print komutu oluşturuyoruz ve genel modülün işlevini çağırdığımız işleyicisini yazıyoruz. ManagePrintClient.ExecutePrintCommand, bu işlevin gerekli parametrelerini ayarlayın:

  • Yazdırma Yöneticisi - basılı formumuzu oluşturan Yazdırma işlevi tarafından tanımlanan yönetici modülündeki nesnenin adı;
  • Tanımlayıcı - yazdırılması gereken yazdırma formunun tanımlayıcısı. Bu tanımlayıcıyı kullanarak yönetici modülünün Yazdırma fonksiyonunda hangi yazdırma formunun yazdırılması gerektiğini seçeceğiz;
  • Yazdırma nesneleri doğrudan yazdırma formlarının oluşturulduğu nesnelerdir;
  • Formun sahibi;
  • Yazdırma parametreleri - burada yazdırma parametrelerini içeren bir yapı oluşturup aktarıyoruz, burada işlem formunda kullanıcıdan talep ettiğimiz ek parametrelerimizi aktarıyoruz.

Aslında işlem formundan ExecutePrintCommand fonksiyonunu çağırarak, yazdırılan formun çıktısını “PrintDocuments” formuna çıkarma sorunumuzu çözüyoruz. Daha sonra "Yazdır" alt sistemi standart eylemleri gerçekleştirecek ve yürütmeyi, işlemimizin yönetici modülünde tanımlamamız gereken Yazdırma prosedürüne getirecektir.

Basılı form düzeni oluşturma

İşleme yöneticisi modülünde değişiklik yapma

Bu andan itibaren, BSP'nin “Yazdır” alt sistemini kullanarak basılı formların geliştirilmesine yönelik standart eylemleri gerçekleştiriyoruz.

Yönetici modülüne aşağıdaki kodu ekleyin:

Prosedür Yazdırma (Nesne Dizisi, Yazdırma Parametreleri, Yazdırma Formlarının Toplanması, Yazdırma Nesneleri, Çıktı Parametreleri) Yazdırma Denetimi Durumunda Dışa Aktarma Yazdırma Düzeni Gerekiyor (Yazdırma Formlarının Toplanması, "Yazdırma Formu") Sonra Yazdırmayı Kontrol Etme Tablo Belgesini Koleksiyona Çıkarma (Yazdırma Formlarının Toplanması, "Yazdırma Formu" Formu", NStr("ru = "Yazdırma formu""), PrintLayout( Nesnelerin Dizisi, Yazdırma Parametreleri), "Processing.PrintForm.PF_MXL_PrintForm",); endIf; Prosedürün Sonu &Sunucuda İşlev PrintLayout(Nesne Dizisi, Yazdırma Seçenekleri) TabularDocument = Yeni TabularDocument; //Bir elektronik tablo belgesi oluşturun //////////////////////////////////////////// //////////////////////////////////////////////// // /////////////// //MODÜLÜN OVERRIGGED KISMI // //Burada basılı formumuzu oluşturuyoruz Layout = GetLayout("PF_MXL_PrintForm"); Nesneler Dizisindeki her Nesne için Döngü AlanıHeader = Layout.GetArea("Header"); RegionObject = Layout.GetArea("Nesne"); TabularDocument.Output(HeaderArea); AreaObject.Parameters["Nesne"] = Nesne; TabularDocument.Output(AreaObject); Hesap için = 1 ByPrint Options["Satır Sayısı"] Döngü AreaLine = Layout.GetArea("Satır"); AreaString.Parameters["String"] = Sayım; TabularDocument.Output(AreaString); EndCycle; TabularDocument.OutputHorizontalPageSeparator(); EndCycle; //MODÜLÜN AŞIRI TANIMLANMIŞ PARÇASI /////////////////////////////////////////// // ///////////////////////////////////////////////// ////////////////// TabularDocument'ı döndür; //Tablo belgesini döndür Fonksiyon Sonu

İkinci seçenek. Yazdırma komutunun uygulanması yoluyla.

Bu seçenek, yazdırma uygulaması açısından ilkine çok benzer. Farkı, arayüzde görüntülenecek ve yazdırmamızı başlatacak bir komut oluşturma biçimindedir.

Bu durumda bir yazdırma komutunu tanımlarken BSP'nin “Yazdır” alt sistemini de kullanırız. İşlemenin kendisinde işlemeyi açmak için bir komut tanımlamak yerine, yazdırma formu eklemek istediğimiz nesnenin yönetici modülüne gitmemiz ve prosedürde yazdırma komutunun açıklamasını belirtmemiz gerekir. AddPrintCommands(PrintCommands):

Prosedür AddPrintCommands(PrintCommands) ExportPrintCommand = PrintCommands.Add(); PrintCommand.Identifier = "PrintForm"; PrintCommand.View = NStr("ru = "Basılı bir form yazdır""); PrintCommand.Handler = "GeneralModulePrintForm.ProcessingPrintFormCommand"; PrintCommand.Order = 100; Prosedürün Sonu

Burada tüm dizin formlarına “Basılı formu yazdır” adında bir yazdırma komutu ekliyoruz (Karşı taraf dizini ile çalıştığımızı hatırlatırım). Ve burada dikkate alınması gereken asıl nokta şudur. Forma iki tür komut ekleyebilirsiniz:

1. Yönetici modülünden Yazdırma prosedürünün çağrılması;

2. İstemci yöntemini çağırmak.

İstemci yöntemi olarak adlandırmamız gereken şey tam olarak budur. İstemci yöntemi, yazdırmadan önce kullanıcıdan ihtiyacımız olan verileri talep edeceğimiz bir işleme formunu çağırmamıza olanak tanıyacaktır.

Böyle bir çağrıyı uygulamak için, bir komutu tanımlarken bunun için bir İşleyici belirtmek gerekir (yukarıdaki koda bakın). İstemci işlevinin yolunu içeren bir dize Komut İşleyiciye iletilir; istemcideki ortak modülün Dışa Aktarma işlevinin yolu. Formlara eklediğimiz print komutuna tıkladığınızda çağrılacak olan bu fonksiyondur.

Anladığınız gibi, bunun çalışması için bu Genel Modülü oluşturmanız ve Dışa Aktarma işlevini tanımlamanız gerekir. Bu nedenle genel modülümüze aşağıdaki kodu yazıyoruz:

Function ProcessingPrintCommandPrintForm(PrintParameters) Export //İşleyicinin içeriğini ekleyin. FormParameters = Yeni Yapı("DataForPrint", PrintParameters.PrintObjects); OpenForm("Processing.PrintForm.Form", FormParameters); Son Fonksiyon

Burada ilk uygulamada yaptığımızın aynısını yapıyoruz, yazdırma formunu açıyoruz, ancak şimdi Yazdırma Verilerimiz Yazdırma Parametreleri işlevine iletilen parametrede veya daha doğrusu Yazdırma Nesneleri alanında yer alacak.

İşleme formunu açtıktan sonra tüm işlemler ilk seçeneğe benzer.

Bu seçeneğin uygulanması, kişisel verilerin işlenmesine ilişkin onayın yazdırılmasıyla ilgili mekanizmalarda standart yapılandırmalarda bulunabilir.

Ek işlemler oluşturuyoruz.

Ya bu bizim yapılandırmamız değilse ve destekleniyorsa? Ve genel olarak konfigürasyona girip onu düzenlemek istemiyoruz?

Bu durumda BSP'nin "Ek raporlar ve işleme" alt sistemini kullanmamız gerekiyor.

Bu çözümle yalnızca iki yere kod yazmamız gerekiyor ve bunların tümü gelecekteki ek işlemlerimizde yer alıyor:

1. İşleme nesnesi modülü;

2. Form modülü işleniyor.

Nesne modülünde aşağıdaki kodu yazıyoruz:

//////////////////////////////////////////////// // ////////////////////////// // PROGRAM ARAYÜZÜ #ProgramArayüzü alanı // Harici işlemeyle ilgili bilgileri döndürür. Function InformationOnExternalProcessing() ExportRegistrationParameters = İlaveReportsAndProcessing.InformationOnExternalProcessing("2.2.2.1"); Kayıt Parametreleri.View = EkReportsAndProcessingClientServer.ProcessingViewPrintedForm(); Kayıt Parametreleri.Sürüm = "1.0"; NewCommand = Kayıt Parametreleri.Commands.Add(); NewCommand.Presentation = NStr("ru = "Ön veri talebi içeren harici basılı form""); NewCommand.Identifier = "ExternalPrintForm"; NewCommand.Use = EkReportsAndProcessingClientServer.CommandTypeOpenForm(); NewCommand.ShowAlert = Doğru; NewCommand.Modifier = "PrintMXL"; İadeKayıtParametreleri; EndFunctions Prosedür Print(Yazdırma Verileri, PrintForms Koleksiyonu, Yazdırma Nesneleri, Çıkış Parametreleri) Export If PrintManagement.NeedPrintLayout(PrintFormsCollection, "ExternalPrintForm") Then PrintManagement.OutputTabularDocumentIntoCollection(PrintFormsCollection, "ExternalPrintForm" PrintForm", NStr("ru = "Sınav sayfası" "), PrintLayout(PrintData ),); endIf; Prosedürün Sonu &Sunucuda İşlev PrintLayout(PrintData)PrintParameters = PrintData.Value; //Değer Listesi Nesne Dizisinin ilk elemanından yazdırma parametrelerini alır = PrintData.Copy(); //Değerlerin listesini kopyalayın ArrayObjects.Delete(0); //Yazdırma Seçeneklerini içeren kopyalanan öğenin satırlarını silin TabularDocument = New TabularDocument; //Bir elektronik tablo belgesi oluşturun //////////////////////////////////////////// //////////////////////////////////////////////// // /////////////// //MODÜLÜN OVERRIGGED KISMI // //Burada basılı formumuzu oluşturuyoruz Layout = GetLayout("Layout"); Nesneler Dizisindeki her Nesne için Döngü AlanıHeader = Layout.GetArea("Header"); RegionObject = Layout.GetArea("Nesne"); TabularDocument.Output(HeaderArea); AreaObject.Parameters["Nesne"] = Nesne; TabularDocument.Output(AreaObject); Hesap için = 1 ByPrint Options["Satır Sayısı"] Döngü AreaLine = Layout.GetArea("Satır"); AreaString.Parameters["String"] = Sayım; TabularDocument.Output(AreaString); EndCycle; TabularDocument.OutputHorizontalPageSeparator(); EndCycle; //MODÜLÜN AŞIRI TANIMLANMIŞ PARÇASI /////////////////////////////////////////// // ///////////////////////////////////////////////// ////////////////// TabularDocument'ı döndür; //Elektronik tablo belgesini döndürün EndFunction #EndArea

İki fonksiyon ve bir prosedür vardır.

Ek işleme için standart işlev InformationOnExternalProcessing()'dir; bu olmadan sistem bunun ek işlem olduğunu anlamayacaktır. Burada önemli olan bu işlemde uygulanan komutun tipinin olduğunun belirtilmesidir. Bir formu açma. Onlar. Formu ihtiyacımız olduğu kadar açacağız. Daha sonra Yazdırma prosedürünün tanımı ve doğrudan elektronik tablo belgemizi oluşturan işlev gelir.

Burada, bu durumda yazdırma komutunun yönetici modülündeki olağan yazdırma komutunun tanımında olduğu gibi 5 değil, yalnızca 4 parametre içermesi gerektiğine dikkat etmeniz gerekir. Bu durumda Yazdırma Ayarlarını geçirmeye yönelik herhangi bir parametre yoktur. Bu nedenle, yalnızca basılı formun oluşturulduğu nesnelerin kendisini değil, aynı zamanda formda kullanıcıdan talep ettiğimiz parametreleri de iletmek için yaratıcı olmamız gerekecek.

Ve böylece, işleme formunu açacak komut olan ek işlemeyi tanımladık. Bu nedenle bir sonraki adım bir işleme formu oluşturmaktır.

Bu formda daha sonra ihtiyaç duyacağımız değerleri saklamak için üç detay oluşturmamız gerekiyor. Bu detayları şu şekilde adlandıralım:

Komut Kimliği - Dize yazın

ObjectsAssignments - Değer Listesini yazın

Bu formun modülüne aşağıdaki kodu yazıyoruz:

&Sunucuda Prosedür Sunucuda Oluşturulduğunda (Arıza, StandardProcessing) //Sunucuda oluştururken, EkReportsAndProcessing alt sistemi tarafından iletilen standart parametreleri hatırlayın. EkProcessingLink = Parameters.AdditionalProcessingLink; CommandIdentifier = Parameters.CommandIdentifier; Hedef Objects.LoadValues(Parameters.Destination Objects); EndProcedure &OnClient Prosedürü Print(Command) // Açılan formun benzersizlik anahtarını alın. UniqueKey = String(Yeni Benzersiz Tanımlayıcı); //Genel form için standart parametreleri tanımlama ve doldurma Belgeleri YazdırAçılış Parametreleri = Yeni Yapı("DataSource, SourceParameters"); OpeningParameters.DataSource = İlaveProcessingLink; OpeningParameters.SourceParameters = Yeni Yapı("CommandIdentifier, DestinationObjects"); OpeningParameters.SourceParameters.CommandIdentifier = CommandIdentifier; //Yazdırılacak nesneler ve forma girilen parametreler işlenecek //Source Parameters parametresinden geçeceğiz.Destination ObjectsOpening Parameters.Source Parameters.Destination Objects = GetDestination ObjectsAndPrint Parameters(); OpenForm("GeneralForm.PrintDocuments", OpeningParameters,FormOwner,UniqueKey); Prosedürün Sonu &Sunucu İşlevinde GetDestinationObjectsAndPrintParameters()PrintData = DestinationObjects.Copy(); //////////////////////////////////////////////// // ////////////////////////////////////////////// //// //////// //MODÜLÜN AŞIRI DÜZELTİLMİŞ PARÇASI // //Burada Yazdırma Parametreleri yapısını oluşturuyoruz ve onu yazdırma fonksiyonuna //geçirilmesi gereken parametrelerle dolduruyoruz Yazdırma Parametreleri = Yeni Yapı; PrintOptions.Insert("Satır Sayısı", Satır Sayısı); PrintData.Insert(0, PrintOptions); //MODÜLÜN AŞIRI TANIMLANMIŞ PARÇASI /////////////////////////////////////////// // ///////////////////////////////////////////////// ////////////////// ReturnPrintData; Son Fonksiyon

When CreateOnServer prosedüründe, işleme formuna aktarılan parametreleri saklamak için oluşturduğumuz üç detayımızı dolduruyoruz.

Daha sonra formdaki yazdır butonu için bir işleyici tanımlıyoruz. Bu işleyicide “Belgeleri Yazdır” formunu kendimiz açmamız gerekiyor, bunun için belli bir yapının Açılış Parametrelerini hazırlamamız gerekiyor. Bu yapıda en az iki alanın tanımlanması gerekir:

Komut Tanımlayıcıyı ve Hedef Nesneleri içeren Kaynak Parametreleri:

Komut Kimliği - sunucuda oluşturulduğunda da kaydedilir; bu, işleme formumuzu çağıran komutun tanımlayıcısıdır. Bu nedenle tanımlayıcıyı kullanarak nesne modülündeki Yazdırma prosedüründe neyi yazdırmamız gerektiğini belirleyeceğiz.

Atama Nesneleri - bu alanda, basılı formun oluşturulduğu nesnelerin bir dizisini ve ayrıca formda kullanıcıdan talep edilen parametreleri aktarmamız gerekir.

Hedef nesneleri nasıl tanımladığımı fonksiyonda görebilirsiniz GetObjectsDestinationsAndPrintOptions. Burada form props'tan hedef nesnelerimizi kopyalıyorum, indeksi 0 olan dizi elemanının yerine print parametrelerimizi yapıştırıyorum.

İlerleyen süreçte bu şekilde tanımlanan dizi daha önce tanımladığımız Print object modülü prosedürünün ilk parametresi olarak “Belgeleri Yazdır” formundan aktarılacaktır.

İşleme nesnesi modülünün tanımına dönersek ve PrintLayout fonksiyonuna bakarsak, fonksiyonun ilk üç satırında Print prosedürüne aktarılan verilerden parametrelerimizi ve nesnelerimizi nasıl çıkardığımı ve daha sonra onlarla nasıl çalıştığımı görebilirsiniz.

Atama Nesneleri parametresiyle yapılan bu tür manipülasyonlar, Yazdırma nesnesi modülü prosedürünün çağrılmasının özelliklerine göre belirlenir. Belge Yazdırma form modülünü açarak parametrelerin nasıl iletildiğini ve işlev çağrılarının nasıl yapıldığını kendiniz takip edebilirsiniz.

Sonuç.

Bu tür manipülasyonlar sonucunda, basılı formu görüntülemek istediğimiz formda üç komut alacağız:

Komutların numaralandırılması, uygulama seçeneklerinin sırasına karşılık gelir.

Bu komutların tümü aynı şeyi yapacaktır:

Ek parametre talep formunu göster

Oluşturulan basılı formların çıktısını "Belgeleri yazdır" formuna aktarın. Tam olarak istediğimiz şey:

Not: Şablon olarak, ek parametreler talebiyle kendi basılı formlarımı uygulamak için, basılı form oluşturmanın üç yönteminde de yer alan süreçlerin her ikisini de yüklüyorum.

Bu makale size 1C 8 hakkında çok az bilgisi olan yeni başlayan birinin basılı bir formu nasıl oluşturabileceğini ayrıntılı olarak anlatacaktır. Örneğin, en yaygın 1C 8 konfigürasyonlarından birini ele alalım - Muhasebe 2.0. Basılı bir form oluşturma 1C yazma aşamaları:

  • Harici bir yazdırma formu dosyası oluşturma;
  • Basılı bir form düzeninin oluşturulması;
  • Basılı form verilerinin ekranda görüntülenmesi için program kodunun yazılması;
  • Basılı bir formun otomatik kaydı için parametreler oluşturma;
  • Harici bir yazdırma formunu tabana bağlama 1C İşletmeleri.

Basılı bir formun oluşturulması 1C. Sorunun formülasyonu

Yapılandırmada ihtiyacımız var Muhasebe 2.0 bir belge için basılı form oluşturma Mal ve hizmetlerin alınması. Basılı formun başlığında aşağıdaki verileri görüntüleyin:

  • Organizasyon;
  • Karşı taraf;
  • Karşı taraf anlaşması;
  • Fatura tarihi.

Tablo bölümündeki verileri tablo olarak görüntüleme Mal belge. Tablo aşağıdaki sütunları içermelidir:

  • İsimlendirme;
  • Miktar;
  • Fiyat;
  • Toplam;
  • Ve ayrıca öğenin geçerli tarih için fiyatı (belgedeki fiyat türüne göre).

Harici işlem dosyası

Sorunu çözmeye devam edelim. Öncelikle 1C 8'i modunda açalım. Yapılandırıcı. Tüm geliştirmeler 1C 8 platformunda bu modda gerçekleştiriliyor, şimdi harici bir işleme dosyası oluşturmamız gerekiyor. Bunu yapmak için menüye tıklayın Dosya -> Yeni… veya yeni bir dosyanın simgesiyle.

Açılan pencerede öğeyi seçin Harici işleme.

Sahadaki sonraki İsim Harici işlemenin adını girmelisiniz. Bizim durumumuzda buna basitçe "PrintForm" adını vereceğiz; eşanlamlı alan otomatik olarak doldurulacaktır. Lütfen alanda İsim, harici işlemede isim boşluk ve noktalama işareti olmadan yazılmalıdır.

Harici işleme nitelikleri ekleyelim LinkToObject'i seçin ve onun için yaz DocumentLink Mal ve Hizmetlerin Teslim Alınması. Bunu yapmak için 1C harici işleme meta veri ağacında öğeyi seçin Gereksinimler ve düğmeye basın Eklemek(yeşil artılı düğme). Nitelik özellikleri penceresi ekranın sağ tarafında, alanda açılacaktır. İsim Hadi yaz - ReferenceToObject. İÇİNDE alan Tipüç noktalı düğmeye basın.

Tür ağacındaki dalı genişletelim Belge Bağlantısı ve orada Mal ve Hizmet alımı öğesini bulun, yanındaki kutuyu işaretleyin ve tıklayın. TAMAM.

Harici işlem dosyasını sabit sürücüye kaydedelim; bunu yapmak için menüyü kullanın Dosya -> Kaydet, piktogram Kaydetmek(mavi disket) veya klavye kısayolu Ctrl+S. Kaydedilen dosyaya “PrintForm” adını verelim.

Basılı form düzeni oluşturma

1C baskı formunun düzenini oluşturmaya başlayalım. Düzen, yazdırma formunun çıktısı için bir şablon görevi görür; bu nedenle, yazdırma formunuzun iyi görünmesini istiyorsanız buna dikkat etmelisiniz.

Harici işleme meta veri ağacına yeni bir düzen ekleyelim; düzen tasarımcısı penceresinde hiçbir şeyi değiştirmeyeceğiz ve düğmesine tıklıyoruz Hazır.

Açılan yeni düzende basılı formun görüntülenmesi için gerekli birkaç alanı oluşturacağız. İhtiyacımız olan tüm yerleşim alanları yatay olacaktır, bu nedenle yeni bir alan oluşturmak için gerekli sayıda yerleşim çizgisini seçin ve menüye gidin Tablo -> Adlar -> Ad atayın veya klavye kısayolunu kullanın Ctrl + Üst Karakter + N, ardından kutuya bölgenin adını girin. Bir yerleşim alanı oluştururken satır sayısında hata yapmaktan korkmayın; bunları her zaman ekleyebilir veya kaldırabilirsiniz. 1C düzen çizgisini silmek için istediğiniz satırı seçin ve içerik menüsündeki öğeyi seçin Silmek. Düzene yeni bir satır eklemek için düzenin herhangi bir satırını seçin ve içerik menüsündeki öğeyi seçin Genişletmek.

Düzen Başlığı Ekleme

Öncelikle bir alan oluşturalım Bir kep, yazdırılan formun başlığına ilişkin verileri görüntüler. Bu alan için yedi yerleşim çizgisine ihtiyacımız olacak. Bunları seçelim ve yukarıda yazdığım gibi tuş kombinasyonuna basalım. Ctrl + Üst Karakter + N, sahada İsim“Şapka” yazın ve düğmeye basın TAMAM.

Layout alanını ihtiyacımız olan verilerle dolduralım. Genellikle hiçbir basılı form başlıksız tamamlanmaz, bu yüzden mizanpaj başlığımızda da bir tane oluşturalım. Başlıkta, yazdırılan formun adının yanı sıra yazdırıldığı belgenin numarasını da görüntüleyeceğimizden, mizanpajdaki başlığın metnini parametre olarak ayarlayacağız. Düzen parametresi, yerleşik 1C 8 dili kullanılarak çeşitli verilerin çıktısının alınabildiği, özel olarak belirlenmiş bir düzen hücresidir. Başlık, yazdırılan formun tüm genişliği boyunca görüntülenmelidir, bu nedenle, sayfanın standart yatay yönünde yazdırmak için kaç tane düzen hücresinin yeterli olacağına karar verelim.

Genellikle on üç veya on dört düzen hücresi yeterlidir; bunları alanın ilk satırından seçin Bir kep ve tek bir hücrede birleşin ( Bağlam menüsü -> Birleştir). Bundan sonra ortaya çıkan büyük hücreye çift tıklayın ve parametrenin adını, bizim durumumuzda “TitleText” yazın. Girilen metnin tam teşekküllü bir parametre haline gelmesi için hücreye sağ tıklayın ve içerik menüsünden öğeyi seçin Özellikler. Yer işaretinde Düzen hadi alanı bulalım dolgu ve değeri seçin Parametre. 1C düzenindeki parametreler parantezlerle gösterilir "<>».

Yazdırılan formun başlığı diğer metinlerin arasında öne çıkmalıdır; bu nedenle hücreyi tekrar seçin ve metin hizalamasını ayarlamak için düzen biçimlendirme panelindeki simgeleri kullanın. ortalanmış ve yazı tipi boyutu 14.

Başlık metninden sonra onu alanda görüntüleyeceğiz Bir kep organizasyon, karşı taraf, karşı taraf sözleşmesi ve malların teslim alındığı tarih hakkında bilgi. Tüm bu veriler de belgeden alındığı için parametrelerle de resmileştireceğiz. Ayrıca her parametrenin önüne açıklayıcı metin yazmalısınız ki kullanıcının kuruluşun nerede olduğunu, karşı tarafın nerede olduğunu vb. kolayca anlayabilmesi için. Tüm bu eylemler başlık oluşturmaya benzer, bu yüzden bunların üzerinde ayrıntılı olarak durmayacağım, sadece sonunda ne olması gerektiğine dair bir resim vereceğim.

Şekil, düzen parametrelerinin normal metinden ne kadar farklı olduğunu gösterir.

Düzen Tablosu Başlığı Ekleme

Bu yerleşim alanında oluşturmamız gereken son şey, tablo bölümünün verilerinin görüntüleneceği tablo başlığıdır. Mal. Tablo için gerekli olan sütunlar “Problem Açıklaması” bölümünde anlatılmıştır. Ayrıca hücrelerin ve yazma metninin (sütun adları) birleşimini kullanarak bir tablo başlığı oluşturacağız. Aracı kullanarak tablo başlığının kenarlıklarını seçin Çerçeve Düzen biçimlendirme panelinde bulunan.

Bir düzene tablo ekleme

Düzende başka bir alan oluşturalım - Veri. Tablo bölümünün veri tablosu burada görüntülenecektir Mal. Bu alan için yalnızca bir düzen satırına ihtiyacımız var. Tablo bölümünün tüm satırlarını basılı formda görüntülemek için bu alanı gereken sayıda doldurup görüntüleyeceğiz. Bölgedeki sütunlar Veri tablo başlığının sütunlarıyla örtüşmelidir, bu nedenle doldurmak zor olmayacaktır. Tek fark bölgede Veri sadece metne değil parametrelere de ihtiyacımız var. Ayrıca, varsayılan olarak sayısal parametrelerin sağda, metin parametrelerinin ise solda biçimlendirildiğini unutmayın. Sütunları seçmek için aracı da kullanmanız gerekir Çerçeve.

Bir Düzene Alt Bilgi Ekleme

İhtiyacımız olan son yerleşim alanı Bodrum. Toplamları miktar ve miktara göre gösterecektir. Yaratma bir alan yaratmaya benzer Veri, ancak ayrıca sonuçlar kalın harflerle vurgulanmalıdır.

Nihai sonuç şuna benzeyen bir düzen olmalıdır:

Basılı bir formun oluşturulması 1C. Programlama

Programlamaya başlayalım - bu, basılı bir form oluşturmanın en önemli aşamasıdır. Öncelikle harici yazdırma formu nesne modülüne gidelim, burası programlayacağımız yer. Bunu yapmak için ana harici işleme penceresinde öğesine tıklayın. Eylemler -> Nesne modülünü açın.

Harici yazdırma formu nesne modülünde bir dışa aktarma işlevi oluşturmanız gerekir Fok().

İşlev Print() Dışa Aktar EndFunction

Lütfen bu özelliğin normal uygulamayı kullanan konfigürasyonlardaki harici yazdırma formları için gerekli olduğunu unutmayın. Basılı formu görüntülemek için gerekli olan sonraki tüm program kodları bu fonksiyonun içine yazılacaktır.

Temel Değişkenlerin Başlatılması

Bir değişken oluşturalım SekmeDoc, bir elektronik tablo belgesi içerecektir - bu, düzenin doldurulmuş alanlarını görüntüleyeceğimiz basılı formdur.

TabDoc = yeni TabularDocument;

Bir değişkene Düzen Oluşturduğumuz basılı form düzenini elde edeceğiz. Bunu yapmak için yerleşik işlevi kullanıyoruz GetLayout(<ИмяМакета>).

Düzen = GetLayout("Düzen");

Düzenin tüm alanlarını değişkenlere dönüştüreceğiz. Bunu yapmak için düzen yöntemini kullanıyoruz GetArea(<ИмяОбласти>) .

HeaderArea = Layout.GetArea("Başlık"); AreaData = Layout.GetArea("Veri"); AreaFooter = Layout.GetArea("Altbilgi");

Basılı bir formun başlığını bir elektronik tablo belgesine çıkarma

Gerekli tüm değişkenler başlatılır. Bir elektronik tablo belgesindeki yerleşim alanlarını doldurmaya ve görüntülemeye başlayalım. Öncelikle yazdırılabilir formun başlığını dolduralım; bunun için parametreyi geçmemiz gerekiyor Başlık Metni Düzende oluşturduğumuz, ihtiyacımız olan metin. Düzen alanına ilişkin parametre değerlerini doldurmak için özel bir koleksiyon vardır: - Seçenekler. Hangisinden “.”ye kadar herhangi bir parametreyi alabilirsiniz. Başlık metninde “Basılı form” metnini ve belge numarasını aktaracağız.

Header Area.Parameters.TitleText = "Formu yazdır"+LinkToObject.Number;

Başlığın geri kalan parametrelerini de benzer şekilde dolduracağız; detaylardan onlar için gerekli tüm değerleri alacağız. Nesne Referansı Yazdırılacak belgeye bir bağlantı içeren.

HeaderArea.Parameters.Organization = LinkToObject.Organization; HeaderArea.Parameters.Account = LinkToObject.Account; HeaderArea.Parameters.ReceiptDate = ObjectLink.Date; Başlık Area.Parameters.Counterparty Anlaşması = LinkToObject.Counterparty Anlaşması;

Başlığın tüm parametreleri doldurulur, oluşturduğumuz elektronik tablo belgesinde görüntüleyeceğiz, bunun için yöntemi kullanıyoruz Çıktı(<Область>) .

TabDoc.Output(HeaderArea);

Basılı bir handikap için talep yazma

Alanı doldurmaya ve çizmeye başlayalım Veri. 1C basılı bir form oluşturmak aynı zamanda bir sorgu yazmayı da içerir; tablosal verileri elde etmek için buna ihtiyacımız var Mal ve fiyatlar İsimlendirmeler kullanacağımız güncel tarih için Rica etmek. 1C 8 sorgu dili SQL'e benzer veya daha doğrusu SELECT operatörünün yeteneklerini pratik olarak kopyalar, ancak sorgunun tamamı Rusça yazılmıştır. Bu nedenle, SQL'e en azından belli belirsiz aşina iseniz, 1C 8 sorgu dilini kolayca anlayacaksınız.

Bu basılı formda, istek oldukça basit olacak ve çoğu kişi onsuz yapmanın mümkün olacağını söyleyecektir, ancak sorgu dili bilgisi ve onu yetkin bir şekilde kullanma yeteneği, bir 1C programcısının temel becerilerinden biridir. Sorgular, daha az kaynak kullanarak karmaşık veri örnekleri elde etmenize olanak tanır ve sorgu metninin anlaşılması, sorgu kullanılmadan (veya çok az kullanılarak) yazılan program kodundan çok daha kolaydır. Ek olarak 1C 8, gerekli tablolardan etkileşimli olarak bir sorgu oluşturmanıza olanak tanıyan çok iyi bir sorgu tasarımcısına sahiptir.

İsteği içerecek bir değişken oluşturalım.

Talep = Yeni Talep;

İstek yapıcısını kullanarak istek metnini oluşturacağız. Başlangıç ​​olarak şunu yazalım:

İstek.Text = "";

Fare imlecini tırnakların arasına yerleştirin ve farenin sağ tuşuna basın. Açılan içerik menüsünde öğeyi seçin Yapıcıyı talep edin, 1C baskı formu oluşturmamızda bize çok yardımcı olacaktır. Bundan sonra sorgu tasarımcısı penceresi açılacaktır; birçok sekme içerir ancak sorgumuz için yalnızca dört tanesine ihtiyacımız olacak: “Tablolar ve Alanlar”, “İlişkiler”, “Koşullar”, “Birleşimler / Takma Adlar”.

Sorgumuz için iki tabloya ihtiyacımız olacak: tablo bölümü Mal belge Mal ve hizmetlerin alınması ve kaydın geçerli tarihine ilişkin en son bilgilerin anlık görüntüsü Ürün fiyatları.

Tasarımcı penceresinin sol tarafında sütunu buluyoruz Veri tabanı. Tüm meta veri nesnelerinden oluşan bir ağaç içerir, hadi ihtiyacımız olanları bulalım. Bunu yapmak için konuyu açalım Dokümantasyon ve belgeyi bulun Mal ve Hizmetin Kabulü, hadi açalım ve tablo kısmını bulalım Mal sorgu tasarımcısının sütununa sürükleyin Tablolar. Üç şekilde sürükleyebilirsiniz: sürükleyerek, tabloya çift tıklayarak veya tabloyu seçip “>” düğmesine tıklayarak. Konuyu açalım Bilgi Kayıtları ve oradaki masayı bul FiyatlarAdlandırma.KısayolSon, ayrıca onu sütunun içine sürükleyin Tablolar. Bu iki tablo sorgumuz için yeterlidir.

Ortaya çıkan tablolardan ihtiyacımız olan alanları seçelim. Bunu yapmak için sütunda Tablolar hadi masayı açalım ve alanları bulun: İsimlendirme, Tutar, Fiyat, Adet ve onları yapıcının üçüncü sütununa sürükleyin - Alanlar. Tabloyu genişletelim , hadi alanı bulalım Fiyat ve ayrıca onu şuraya sürükleyin: Alanlar.

Talebimizin tablo ve alanlarının yapısı hazır, şimdi şartlara geçelim. Tablo verilerine ihtiyacımız var Mal tüm makbuzlardan değil, yalnızca yazdırdığımız makbuzlardan alınmıştır. Bunu yapmak için masaya bir koşul koyacağız Malların Teslim AlınmasıHizmetlerMallar. Sorgu tasarımcısının “Koşullar” sekmesine gidelim. Bir sütunda Alanlar daha önce seçtiğimiz tablolar yer alıyor, bu durum için bir alana ihtiyacımız olacak Bağlantı masadan Mal ve Hizmet Mallarının Teslim Alınması, Bunu Koşullar penceresine sürükleyelim.

1C sorgularında parametreleri kullanabilirsiniz; isteğe veri aktarmak için bunlara ihtiyaç vardır. Örneğin, belge seçimini belirli bir belgeyle sınırlamak istiyorsak, bu belgenin bağlantısını isteğe iletmek için bir parametre kullanabilir ve bu parametreyi koşulda kullanabiliriz. Talebimizde tam olarak bunu yapacağız.

Pencereden sonra Koşullar bir alan ekledik Bağlantı sorgu tasarımcısının kendisi aynı adda bir parametre oluşturacak ve onu “=” işaretinden sonra yerleştirecektir. İstenirse bu parametre yeniden adlandırılabilir. İstek metninde parametreler “&” işaretiyle işaretlenmiştir ancak bu durumda buna gerek yoktur, koşulun ikinci kısmının bir parametre içerdiği varsayıldığı için bunu hatırlamanız yeterlidir. Bir değerin 1C istek parametresine nasıl aktarılacağı aşağıda tartışılacaktır.

Talepte tam bir ürün fiyatları tablosu değil, sanal bir tablo (bu durumda ikincisinin bir dilimi) kullandığımızdan, bu sanal tablonun oluşumuna ilişkin koşulları ayarlamamız gerekir; bizim durumumuzda bu, fiyat türü için kesme tarihi ve koşul (fiyat türü kesin olarak tanımlanmış fiyatlar, yazdırdığımız fiş belgesinde belirtilen fiyatlardır).

Sanal tablonun parametrelerini doldurmak için sekmeye gidin Tablolar ve alanlar sorgu yapıcısı, sütunda Tablolar tabloyu seç FiyatlarAdlandırmaKesmeSon ve düğmeye basın Sanal Tablo Seçenekleri, üst kısımda bulunur. Açılan pencerede, alanda Dönem fiyat indiriminin yapılacağı tarihin geçeceği parametreyi ayarlamalısınız. Bizim durumumuzda bu, geçerli tarih (yani bugün) olacaktır, dolayısıyla parametreyi “&CurrentDate” olarak adlandıracağız. Koşullar alanına fiyat tipine ait koşulları yazacağız, bunu da “&TypePrice” diyeceğimiz parametreye aktaracağız. Ortaya çıkan koşul şu şekilde görünecektir (burada TipFiyat- ölçüm kaydı Ürün fiyatları):

Fiyat Türü = &Fiyat Türü

Sanal tablo parametreleri doldurulur, düğmeye tıklayın TAMAM.

Artık seçimi yalnızca ihtiyacımız olan belgeyle sınırladığımıza göre sorgu tabloları arasında bağlantılar oluşturalım. Bu yapılmazsa, PriceNomenclatureSliceLast tablosundaki fiyatlar, makbuzdaki kalemle ilişkilendirilmeyecektir. Haydi sekmeye gidelim Bağlantılar sorgu tasarımcısı. Saha genelinde bir bağlantı oluşturalım İsimlendirme iki masamızın arasında. Bunu yapmak için düğmeye basın Eklemek, sahada tablo 1 bir tablo seç Malların Teslim AlınmasıHizmetlerMallar ve Tablo 2 - FiyatlarNomenclatureSliceLast alanında. İletişim koşullarında alanları seçin İsimlendirme her iki tablodan.

Ayrıca sorgu seçiminde sekme kısmından tüm satırları almamız gerektiğini de belirtelim. Mal ve fiyatlar yalnızca belge fiyat türü için geçerli tarihte mevcut olması durumunda. Böylece tablo verileri Mal zorunludur, ancak fiyat dökümü verileri mevcut değildir. Bu nedenle, bu tablolar arasındaki ilişkilerde LEFT JOIN adı verilen yöntemin kullanılması gerekir ve sol (veya gerekli) tablo Malların Teslim AlınmasıHizmetlerMallar ve sağ (veya isteğe bağlı) PriceNomenclatureSliceLast. Sorgu tablolarının sol birleşiminin yukarıda anlattığım gibi çalışması için kutuyu işaretlemeniz gerekir. Tüm sahadan sonra Tablo 1.


İstek neredeyse hazır, geriye kalan tek şey alan takma adları üzerinde biraz çalışmak. Haydi yer işaretine gidelim Birlikler/Takma Adlar ve alan için bir takma ad belirleyin FiyatlarNomenklatür Dilim Son.Fiyat. Takma ad şu şekilde olacaktır: FiyatBugünkü Gibi, sorgu seçim alanlarının adları ile yazdırılan form düzenindeki parametre adlarının eşleşmesi gerekir.

Sorgu tasarımcısındaki çalışma artık tamamlandı; Tamam'a tıklayın. Tasarımcı penceresi kapandıktan sonra istek metninin bulunduğu satırın doldurulduğunu ve şu şekilde göründüğünü göreceksiniz:

request.Text = "SELECT | Mal ve Hizmet Mallarının Teslim Alınması. İsimlendirme, | Mal ve Hizmet Mallarının Teslim Alınması. Tutar, | Mal ve Hizmet Malların Teslim Alınması. Fiyat, | Mal ve Hizmet Malların Teslim Alınması. Adet, | Fiyatlar İsimlendirme Dilim En Son Fiyat Bugün Fiyat AS FiyatBugün | FROM | Belge. Mal ve Hizmetlerin Alınması. Mallar AS AdımÜrünlerHizmetlerÜrünler |SOL BAĞLANTIKayıtBilgi.FiyatlarNomenclature.SliceLast (| &CurrentDate, PriceType = &FiyatType) NASIL İsimlendirme FiyatlarıSliceSon | ON Malların AlınmasıHizmetlerÜrünler.Nomenclature | = FiyatlarNomenclatureSliceLast . İsimlendirme |NERE | Malların AlınmasıHizmetlerÜrünler.Link = &Link";

İsteğin yürütülmesi

İsteğe gerekli parametreleri aktaralım; bunun için request metodunu kullanacağız. Parametreyi Ayarla(<ИмяПараметра>,<Значение>). Geçerli tarihi almak için yerleşik işlevi kullanın Geçerli tarih(), bilgisayarın tarih ve saatini döndürür.

İhtiyacımız olan verileri içeren bir örnek almak için bir sorgu çalıştıralım. Bunu yapmak için önce istek yöntemini kullanın Koşmak() ve ardından yöntem Seçmek().

Select = Query.Run().Select();

Basılı form tablosunun doldurulması

Sonuç olarak değişkende Örnek bir dizi sorgu sonucu içerecektir, yöntemi kullanarak bunlar arasında gezinebilirsiniz Sonraki() ve her şeyin üzerinden geçmek için bir döngüye ihtiyacınız var Hoşçakal. Tasarım aşağıdaki gibi olacaktır:

Select.Next() Döngü EndLoop iken;

Düzen alanını bu döngüde doldurup görüntüleyeceğiz Veri. Ama önce sayısal türden iki değişkeni başlatalım. Toplamları, alanda göstermemiz gereken miktar ve miktara göre toplayacağız. Bodrum.

Toplam Toplam = 0; Toplam Miktar = 0;

Döngünün içindeki alanı dolduracağız Veri geçerli seçim öğesinden gelen verileri değişkenlere dönüştürmek Toplam tutar Ve Toplam miktar toplam ve miktar değerlerini ekleyin ve son olarak, zaten bildiğimiz yöntemi kullanarak alanı bir elektronik tablo belgesinde görüntüleyin Çıktı(). İsteğimiz alanların adları alan parametrelerinin adlarıyla tamamen örtüştüğü için Veri, ardından doldurmak için yerleşik FillPropertyValues ​​prosedürünü kullanacağız(<Приемник>, <Источник>), özellik değerlerini kopyalayan<Источника>mülklere<Приемника>.

While Selection.Next() Döngü FillPropertyValues(AreaData.Parameters,Selection); ToplamToplam = ToplamToplam + Örnek.Toplam; ToplamMiktar = ToplamMiktar + Örnek.Miktar; TabDoc.Output(AreaData); EndCycle;

Basılı bir formun altbilgisini bir elektronik tablo belgesine çıkarma

Düzenin son alanını doldurmaya ve göstermeye devam ediyor - Bodrum. Doldurma, doldurma ve çekme işlemlerine ilişkin verileri zaten hazırladık, aynı şemaya göre gerçekleştirilir.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = ToplamToplam; TabDoc.Output(AreaFooter);

Elektronik tablo belgesi tamamen doldurulur; geriye kalan tek şey, kullanıcının basılı formu görüntüleyebilmesi ve gerekirse yazdırabilmesi için onu ekranda görüntülemektir. Ancak tipik 1C 8 konfigürasyonlarında, harici basılı formların çıktısından özel modüllerin prosedürleri sorumludur. Bu nedenle fonksiyondan geri dönmek yeterlidir Fok() tamamlanmış e-tablo belgesi.

TabDoc'u döndür;

Bu noktada programlama aşaması tamamlanmış olup 1c baskı formunun oluşturulması neredeyse tamamlanmıştır. Fonksiyonun tam metni Fok() Burada vermeyeceğim, yazının alt kısmında indirebileceğiniz yazdırılabilir dosyadan bakabilirsiniz.

Basılı bir formun oluşturulması 1C. Otomatik kayıt seçenekleri

Harici bir yazdırma formunu veritabanına bağlarken sistem, yazdırma formunun hangi belge veya referans kitabına yönelik olduğunu otomatik olarak belirlemez; bunu manuel olarak seçmeniz gerekir. Basılı formu başka bir kişi yazdıysa ve siz yalnızca onu bağlamakla görevlendirildiyseniz, o zaman seçim belirsiz hale gelebilir. Bu tür sorunları önlemek için tüm harici basılı formlarda otomatik kayıt parametrelerine sahip bir düzen oluşturmak gerekir. Oluşturulması ve doğru biçimlendirilmesi durumunda sistem, basılı formun hangi belgeye veya referans kitabına yönelik olduğunu otomatik olarak belirler.

Aşağıdaki şekilde yapılır:

  • Harici işlemede yeni bir düzen oluşturuyoruz. Biz buna "Ayarlar_Otomatik Kayıt" diyoruz (hata yapmamak önemlidir!).
  • Yazdığımız düzenin ilk hücresine Dokümantasyon.(veya Dizinler.) ve basılı formu bağlamanız gereken belgenin adı.

Harici bir yazdırma formunu tabana bağlama

  • 1C 8'i modunda başlatın Şirket;
  • Menüye git Hizmet -> Ek raporlar ve işlemler -> Ek harici basılı formlar;
  • Düğmeye bas Eklemek;
  • Açılan pencerede simgeye tıklayın Harici işleme dosyasını değiştirin;
  • Otomatik kayıt parametreleri oluşturduysanız bunları kullanmayı kabul ederiz;
  • Otomatik kayıt parametreleri oluşturmadıysanız tablo bölümünde Baskı plakası aksesuarı gerekli belgeyi veya referans kitabını ekleyin;
  • düğmesine basın TAMAM.

Bundan sonra harici yazdırma formu menüde mevcut olacaktır. Fok belge Mal ve hizmetlerin alınması. 1C basılı formunun oluşturulması artık tamamlanmış sayılabilir.