Internet Windows Android
Kengaytiring

1c qiymatlar jadvalini qanday yaratish kerak. Qanday usullar mavjud va bir vaqtning o'zida bir nechta qiymatlarni qanday qidirish kerak

Infostartning barcha o'quvchilariga salomlar. Ushbu maqola dasturiy jihatdan boshqariladigan dastur shaklida o'zboshimchalik bilan qiymatlar jadvalini yaratish masalasiga bag'ishlanadi.

Vazifaning xususiyatlari.

Dasturlashtirganlarning barchasi oddiy dastur, ko'pincha formada o'zboshimchalik bilan qiymatlar jadvalini olish vazifasiga duch keldi. Ixtiyoriy qiymatlar jadvali jadval sifatida tushuniladi, uning soni va turi ustunlari oldindan ma'lum emas. Ya'ni, 3 ta ustun bo'lishi mumkin, ehtimol 6 yoki 8 bo'lishi mumkin. Oddiy dasturda hamma narsa oddiy: "Qiymatlar jadvali" elementini ishlov berish shakliga joylashtirish va keyin yaratilgan qiymatlar jadvalini o'tkazish mumkin edi dasturiy jihatdan ushbu elementga. Keyin oddiy buyruq:

Form Elements.TableField.CreateColumns ();

shaklda tayyor qiymatlar jadvalini oling. Bu osonroq bo'lishi mumkin edi.

Bularning barchasi odatiy dasturda edi. Boshqariladigan dasturda hamma narsa o'zgardi. Ixtiyoriy jadval yaratish unchalik oson emas. Endi siz formadagi qiymatlar jadvalini qat'iy ravishda parametrlashingiz yoki uni dasturiy asosda yaratishingiz kerak (ta'riflang, yaxshi, aslida bu boshqariladigan dasturning mohiyati). Biz buni qilishga harakat qilamiz: dasturiy ta'minot orqali boshqariladigan shaklda ixtiyoriy qiymatlar jadvalini yaratish.

Muammoning echimi.

Bizga kerak bo'lgan birinchi narsa jadvalning formada qanday paydo bo'lishini aniqlashdir. Asosiysi, ishlov berishda biron bir ariza elementini yaratish shart emas. Biz uni butun jadval singari dasturiy jihatdan yaratamiz. Ya'ni, jadval shaklni ochish yoki tugmachani ishlatish paytida tasvirlanadi va tuziladi - bu har kimga kerak.

Formada jadval yaratish atribut sifatida qiymatlar jadvalini tavsiflash orqali sodir bo'ladi:
ChoiceType Array = Yangi Array; Array ofChoiceType.Add (Type ("ValuesTable")); ChoiceTypeDescription = NewTypeDescription (ArrayChoiceType); ArrayAttributes = Yangi qator; Array of Attributes.Add (Yangi shakl atributi ("Jadval jadvali", DescriptionTypeOf choice, "", "TZN")); Endi biz ma'lumotlarni o'z ichiga olgan qiymatlarning dasturiy jadvalini yaratishimiz kerak. Agar qiymatlar jadvali so'rovdan olingan bo'lsa, unda hamma narsa tartibda ko'proq yoki ozroq bo'ladi. Agar jadval qo'lda tuzilgan bo'lsa, unda raqamlar yoki sanalarni o'z ichiga olgan ustunlar qiymati "Turlarning tavsifi" orqali yaratilishi mumkin. Xulosa shuki, qiymatlar jadvalidagi ustunlar biron bir turdagi bo'lishi kerak. Agar, masalan, foydalanuvchi ushbu ustunlardagi ma'lumotlarni interaktiv ravishda to'ldiradi deb taxmin qilinsa, unda siz shunchaki ism bilan qiymatlar jadvalining ustunini qo'sha olmaysiz, u turga ega bo'lishi kerak. Shuni yodda tutingki, bu juda muhim. biz ushbu turlarni formadagi jadvalga o'tkazamiz.
Bir nechta ustunlarni o'z ichiga olgan jadval yaratamiz:
CD = Yangi sana saralashlari (Sana qismlari. Vaqt); ArrayKD = Yangi qator; ArrayCD.Add (turi ("Sana")); TypeDescriptionTime = Yangi TypeDescription (ArrayKD, KD); TK = Yangi qiymatlar jadvali;
TK.Kolonki.Add ("S", DescriptionTypesTime);
TK.Kolonki.Add ("Oldin", DescriptionTypesTime);
TK.Kolonki.Add ("to'liq ism");
TK.Kolonki.Add ("Izoh"); // To'liq ism va Izoh - satrlar Keyin TK dastur jadvalimizni kerakli ma'lumotlar bilan to'ldiramiz. Kerakli qiymatlarni o'z ichiga olgan va yaratilgan shakl atributiga o'tkazishga tayyor bo'lgan TK jadvalini olamiz. TK dan har bir ustun uchun. Ustunli ilmoq

ArrayAttributes.Add (yangi shakl atributi (Column.Name, Column.ValueType, "ScheduleTable"));
Tsikl tugashi;
ModifyAttributes (ArrayAttributes);
ChoiceFieldsTable = Elements.Add ("TZN", Type ("FormTable"));
ChoiceFieldsTable.PathKData = "ScheduleTable";
ChoiceFieldsTable.Display = DisplayTable.List;

Mana shunday oddiy kombinatsiya va bizning stolimiz tayyor.

TK dan har bir ustun uchun. Ustunli ilmoq

NewElement = Elements.Add (Column.Name, Type ("FormField"), ChoiceFieldsTable);
NewElement.View = FormFieldKind.InputField;
NewItem.PathData = "Jadval jadvali." + Ustun. Ism;
NewItem.Width = 10;
Tsikl tugashi;

Shartli dizayn, agar kerak bo'lsa, biz qo'lda yozamiz, buyruq menyusi - qo'lda. Stol ishlovchilari ham qo'lda yozilgan. Masalan, Select jadvali uchun voqea ishlovchilarini qo'shish uchun:

ChoiceFieldsTable.SetAction ("Tanlov", "TZNSelection");

Ushbu hodisani boshqarish uchun protsedura shaklida alohida protsedura yoziladi:

& OnClient
TZNSelection protsedurasi (TK, SelectedString, Field, StandardProcessing)
// ishlov beruvchining buyruqlari EndProcedure

Jadval ishlovchilari mijozga o'q uzishini va shuning uchun buyruq kompilyatori ko'rsatgichiga ega bo'lishini unutmang

& OnClient

Va men qo'shmoqchi bo'lgan oxirgi narsa shuki, bu barcha harakatlardan so'ng biz tugatilgan jadvalni form atributiga o'tkazishni unutmaymiz:

ValueVRequisitForm (TK, "Jadval jadvali");

Natijada biz quyidagilarni olamiz:


Mana "Tanlash" tadbirini qayta ishlash:



Keyingi so'z.

Umid qilamanki, ushbu maqola formada jadvallar yaratishni boshlaydigan 1C dasturchilariga yordam beradi.

Siz qiymatlarni va natijalarni jadvalini dasturiy ravishda yaratadigan ishlov berishni yuklab olishingiz mumkin boshqariladigan shakl jadvallaringizni yaratishda yordam beradigan sharhlar bilan.

1C qiymatlarini jadvaldan qidiring

Qanday usullar mavjud va bir vaqtning o'zida bir nechta qiymatlarni qanday qidirish kerak.

Jadvalda qiymatlarni qidirishning ikkita maxsus usuli mavjud:

1. Toping

Horizon TV = Ma'lumotnomalar.Nomenklatura.FindByName ("Horizon TV");
FoundString = TKNomenclature.Find (TV Horizon);
// qidiruvni tezlashtirish uchun qaysi ustunlarni qidirishni ham belgilashimiz mumkin
FoundString = TKNomenclature.Find (TV Horizon, "Nomenklatura");

Ushbu usul birinchi topilgan satrni kerakli qiymatga qaytaradi yoki agar bo'lmasa, Undefined-ga qaytaradi. Shuning uchun uni qidirish uchun ishlatish qulay noyob qadriyatlar beri aks holda, qiymatni topgach, keyingisini topish uchun uni jadvaldan olib tashlashingiz kerak.

Shuncha azob chekmaslik uchun keyingi usul bu sizga mos keladigan qatorlarni topishga imkon beradi:

2. FindStrings


StructureSelection.Insert ("Nomenklatura", TV Horizon); // avval ustunni qaerdan qidirish kerakligini, keyin esa nimani izlash kerakligini ko'rsating.

Ushbu usul har doim qatorni qaytaradi, ammo hech narsa topilmasa bo'sh bo'lishi mumkin. Va bu usul, xuddi oldingi kabi, qiymatlar jadvalining qatorlarini o'zlari emas, balki qiymatlarni alohida qatorga qaytaradi. Shuning uchun, qator qatoridagi qiymatlarni o'zgartirib yoki topilgan qator uchun avvalgi usulda bo'lgani kabi, qayta ishlangan qiymatlar jadvalidagi qiymatni o'zgartirasiz.

Ushbu usulning yana bir yaxshi tomoni shundaki, u bir vaqtning o'zida qiymatlar jadvalining bir nechta ustunlarini qidirishi mumkin:


Tanlov doirasi = yangi tuzilish;
StructureSelection.Insert ("Nomenklatura", TV Horizon);
Tanlash tarkibi. Qo'shish ("Miqdor", 10);
FoundArrayStrings = TKNomenclature.FindStrings (SelectionStructure);

Birgina kamchilik, siz ko'rib turganingizdek, siz "teng" dan boshqa taqqoslash turlaridan foydalana olmaysiz.

Qiymat jadvali o'ziga xosdir universal ob'ekt, ma'lumotlarni jadval shaklida saqlash uchun mo'ljallangan. Jadvallar va dastur ob'ektlari o'rtasidagi asosiy farq shundaki, ular ma'lumotlar bazasining fizikaviy jadvallari bilan bog'liq emas. Qiymat jadvali faqat mavjud tasodifiy kirish xotirasi, bu, bir tomondan, noyob imkoniyatlarni beradi, ikkinchidan, ma'lum cheklovlarni keltirib chiqaradi. Shu bilan birga, jadval bilan ta'sir o'tkazish qobiliyati ma'lumotlar bazasida mavjud bo'lgan ob'ektlar bilan o'zaro ta'sir qilish bilan taqqoslanadi.

Tarixiy jihatdan, 1C da qiymatlar jadvali virtual analog bo'lib, ikki tomonlama maqsadga ega mavjud jadvallar, lekin ayni paytda - va boshqaruv. Boshqariladigan dasturga o'tish bilan ushbu funksiyaning aksariyati eskirgan, ammo endi u foydalanuvchi interfeysi elementi bo'lishi mumkin, ammo bir qator muhim cheklovlar mavjud.

Ob'ekt sifatida qadriyatlar jadvalining tuzilishi

Qiymatlar jadvalining xususiyatlari oldindan belgilangan ikkita to'plamning kombinatsiyalari bilan aniqlanadi: uning ustunlari va satrlari.

Qadriyatlar jadvali Ustunlar

Qadriyatlar jadvalining ustuni uning aniqlovchi xususiyati hisoblanadi. Bu uning tuzilishini belgilaydigan jadvaldagi ustunlar to'plamidir. Ustunlar foydalanuvchi interfeysi bilan tanish bo'lgan fizik jadvallar maydonlariga yoki jadval bo'limi yoki hujjatlar jurnalining ustunlariga mos keladi. Ustun ichki nomga, qiymat turiga va jadvalga ta'sir o'tkazishda ko'rsatiladigan sarlavhaga ega bo'lishi mumkin.

Ustunlar ob'ektlar to'plami bo'lgani uchun siz ustunlarni qo'shishingiz, olib tashlashingiz va tahrirlashingiz mumkin.

Jadval qatori

Dasturlash interfeysi nuqtai nazaridan satrlar qiymatlar jadvaliga kiritilgan alohida to'plamdir. Ular fizik jadvallar yozuvlariga o'xshash, ya'ni foydalanuvchi uchun tanish bo'lgan jadvallar bo'limi yoki hujjatlar jurnalining qatorlari. Alohida olingan har bir qator nomlari jadval ustunlari nomlariga mos keladigan nomlangan xususiyatlar to'plamiga ega bo'lgan ob'ektdir.

Shunday qilib, mag'lubiyat bilan ta'sir o'tkazish boshqa narsalar bilan o'zaro aloqalarga juda o'xshaydi. Siz uning xususiyatlarini o'qishingiz va yozishingiz mumkin, shu jumladan oldindan belgilangan "FillPropertyValues ​​()" funktsiyasi yordamida. Qatorlar qiymatlar jadvalining asosiy to'plami bo'lganligi sababli, jadvaldagi barcha qatorlarni o'chirish uchun "Clear ()" usuli qo'llaniladi.

Qadriyatlar jadvalini yarating

Qadriyatlar jadvalidan foydalanishga tayyor bo'lishning ko'plab usullari mavjud. Keling, ularning ayrimlarini ko'rib chiqaylik. Har bir misol sharhlar bilan kodlar ro'yxati sifatida taqdim etiladi.

Dizayner tomonidan jadval yaratish

Ishlab chiquvchiga kerak bo'lgan jadvalni yaratishga imkon beradigan asosiy usul, afsuski, eng ko'p vaqtni talab qiladi, chunki u barcha kerakli jadval xususiyatlarini qo'lda ko'rsatishni talab qiladi.

DemoTable = NewValuesTable; // Avvalo biz TORni ishga tushiramiz // Keyin yangi ustunlar uchun kerakli parametrlarni aniqlaymiz va ularni to'plamga qo'shamiz // "Nomenklatura" ustunini yarating Name = "Nomenklatura"; ValueType = Turlarning yangi tavsifi ("ReferenceLink.Nomenclature"); Sarlavha = "Nomenklatura (mahsulot)"; DemoTable.Columns.Add (ism, ValueType, sarlavha); // "Miqdor" ustunini yarating Name = "Miqdor"; ValueType = NewTypeDescription ("Raqam"); DemoTable.Columns.Add (ism, ValueType); // Ushbu manipulyatsiyalar natijasida biz bo'sh jadvalni yozdik ustunlar bilan // Agar siz aniqroq yozishni ishlatishingiz kerak bo'lsa ibtidoiy turlari, keyin TypeDescription konstruktorining kengaytirilgan sintaksisidan foydalanish kerak.

Nusxalash orqali jadval yaratish

Agar sizda mos tuzilish va / yoki kompozitsiyaga ega bo'lgan ma'lumotnoma mavjud bo'lsa, siz qiymatlar jadvalini nusxalashingiz yoki yuklab olishingiz mumkin. Agar mos yozuvlar boshqa jadval bo'lsa, unda "Malumot jadvallarini nusxalash" usulini qo'llash kerak. Agar siz ishlayotgan bo'lsangiz jadval qismi yoki ro'yxatga olish yozuvlari to'plami bilan siz "Qadriyatlar jadvalini tushirish" usulidan foydalanishingiz kerak. Agar sizga faqat struktura kerak bo'lsa, unda "CopyColumns" usulidan foydalanishingiz mumkin.

// Texnik standartdan barcha satrlarni nusxalash, lekin faqat ikkita ko'rsatilgan ustunlarni saqlash bilan variant. Standart ustunlari = "Nomenklatura, miqdor"; DemoTable = TableDefault.Copy (, ColumnDefault); // TZ-shablonidan oldindan tanlangan qatorlarni nusxalash, ko'rsatilgan ikkita ustunni saqlash bilan variant. ColumnsStandard = "Nomenklatura, miqdor"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); // "Nomenklatura" bitta ustunini saqlagan holda, belgilangan filtr bo'yicha TZ-standartidan qatorlarni nusxalash bilan variant // Barcha satrlar Miqdor ustunidagi qiymat 0 bo'lgan joyda tanlanadi, natijada faqat Nomenklatura ustuni kiritiladi. ., 0); ColumnStandard = "Nomenklatura"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); // Jadvalni to'liq nusxalash bilan variant va keyinchalik qator satrining qiymati nolga teng bo'lgan bitta qatorni o'chirish va butun sonni o'chirish "Miqdor" qatorini tanlash = Yangi tuzilma ("Miqdor", 0); ColumnsStandard = "Nomenklatura"; DemoTable = TableDefault.Copy (RowsDefault, ColumnDefault); TableRow = DemoTable.Find (0, "Miqdor"); DemoTable.Delete (TableRow); DemoTable.Columns.Remove ("Miqdor"); // Shunga o'xshash variantlar va ularning modifikatsiyalari qo'llanilishi mumkin jadval bo'limlari va yozuvlarni ro'yxatdan o'tkazish

So'rov bilan jadval yaratish

Agar ma'lumotlar bazasida sizga kerakli jadval namunasi mavjud bo'lsa, unda siz so'rovdan foydalanishingiz mumkin tezkor yaratish kerakli tuzilishga ega jadvallar.

// Yig'ish registri tuzilishi asosida bo'sh jadval yaratishga misol // Bu bilan siz to'ldirilgan jadvalni olishingiz mumkinligini taxmin qilish oson Query = New Query ("SELECT the FIRST 0 * from Accumulation Regist.Products inStore "); QueryResult = Query.Run (); DemoTable = QueryResult.Upload (); // Aniq ko'rsatilgan turlar va maydonlarning nomlari uchun bo'sh jadval yaratish misoli Query = New Query; Query.Text = "SELECT FIRST 0 | Value (Directory.Nomenclature.EmptyLink) AS Nomenklatura, | EXPRESS (0 AS NUMBER (15, 3)) AS AS"; QueryResult = Query.Run (); DemoTable = QueryResult.Upload (); // MUHIM! Shuni unutmangki, so'rov natijasida olingan ustun qiymatlari har doim Null turini o'z ichiga oladi // Shunday qilib, so'rov tomonidan yaratilgan TOR har doim kompozit ustun turlariga ega

Xulosa

Ushbu kichik maqolada biz qadriyatlar jadvalini yaratish uchun asosiy xususiyatlar va eng yaxshi amaliyotlarni ko'rib chiqdik, bu sizni boshlash va tushunish uchun etarli. Qiymat jadvali ob'ekti o'zi juda ko'p qirrali batafsil tavsif uning imkoniyatlari ishlash texnikasi va usullari to'g'risida alohida maqola yozishni talab qiladi.