Internet Windows Android
Kengaytirish

1s qiymatlari jadvalini tartiblang 8.2. Qanday usullar mavjud va bir vaqtning o'zida bir nechta qiymatlarni qanday qidirish kerak

Savol Qiymatlar jadvali ustunini yaratish har xil turlari 1C v8 da
Javob
Qiymatlar jadvalining ustunini yaratishda siz tur sifatida o'tishingiz mumkin turlari qatori, va konkret turdagi bo'lishi mumkin. Turlar massivi bitta ustun uchun bir necha xil turlarni ko'rsatish kerak bo'lganda foydalaniladi.

Turlarni belgilash uchun foydalaning "umumiy ob'ekt" - "Turlar tavsifi". Shuning uchun, avvalo, "Turlar tavsifi" ("Qiymat turlari tavsifi") nima ekanligini tushuntiramiz.

"Qiymat turlarining tavsifi". Tizimdagi turli ob'ektlarning mulk qiymatlarining ruxsat etilgan turlarini tavsiflash uchun maxsus ob'ekt ishlatiladi "Tur tavsifi". Yordamida bu ob'ekt xossalarga tayinlanishi mumkin bo'lgan haqiqiy qiymat turlarini tavsiflashingiz mumkin. Mumkin bo'lgan qiymatlarni yanada cheklash uchun ibtidoiy turlari Raqam, qator va sana berilgan saralash. Saralovchilar qator yoki raqamning uzunligi, haqiqiy sana qismlari va hokazolarni tavsiflaydi.

Turni tavsiflash usuli sintaksisi

Yangi turdagi tavsif(<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Parametrlar:
<Исходное описание типов> (ixtiyoriy)
Turi: Tavsif turlari. Turlarning dastlabki tavsifi, ularning asosida yangisi quriladi.
<Добавляемые типы> (ixtiyoriy)
Turi: massiv, satr. Ob'ektda ishlatiladigan turlardan iborat Type tipidagi qiymatlar massivi yoki vergul bilan ajratilgan turlarning nomlarini o'z ichiga olgan qator.
<Вычитаемые типы> (ixtiyoriy)
Turi: massiv, satr. Birinchi parametrda ko'rsatilgan dastlabki tavsifdan chiqarib tashlanishi kerak bo'lgan turlardan iborat Type (yoki vergul bilan ajratilgan tur nomlarini o'z ichiga olgan qator) turdagi qiymatlar massivi.
<Квалификаторы числа> (ixtiyoriy)
Turi: Saralovchi raqamlar. Raqamli turning haqiqiy qiymatlarini tavsiflovchi raqam kvalifikatsiyalari.
<Квалификаторы строки> (ixtiyoriy)
Turi: String kvalifiers. Yaroqli satr turi qiymatlarini tavsiflovchi string kvalifikatorlari.
<Квалификаторы даты> (ixtiyoriy)
Turi: Sana saralovchilari. Sana turining haqiqiy qiymatlarini tavsiflovchi sana kvalifikatsiyalari.
Tavsif:
Ba'zilarini qo'shish va boshqalarni istisno qilish orqali boshqa turdagi deklaratsiyaga asoslangan tur deklaratsiyasini yaratadi. Agar yangi kvalifikatsiya belgilanmagan bo'lsa, asl turdagi deklaratsiyaning kvalifikatsiyalari saqlanib qoladi.
Type Description obyektidan foydalanishga misol:

// AllowedTypes tavsifini yangi turlar bilan kengaytiring Massiv = Yangi massiv; Massiv. Qo‘shish(Tur( "Ma'lumotnoma. Usullar"))) Massiv. Qo'shish(Tur("Raqam" )); Sign = ValidSign. salbiy bo'lmagan; Kvalifiers = New QualifiersNumbers(10 , 2 , Sign); ValidTypes = NewTypeDescription (ValidTypes, Array, Quanumbers);
Endi, aslida, qiymatlar jadvalida har xil turdagi ustunlarni to'g'ri yaratish misollari.

Umuman olganda, ustun turlarini shu tarzda aniqlash kifoya:

TK. Ustunlar. qo'shish( "IndexSort", New TypeDescription("Raqam" ) ); TK. Ustunlar. Qo'shish("SectionName" , NewTypeDescription("String" ) ); TK. Ustunlar. Qo'shish("DateCorr" , NewTypeDescription("Sana" ) ); TK. Ustunlar. qo'shish( "Shartsiz o'chirish", New TypeDescription("Mantiqiy" ) ); TK. Ustunlar. Qo'shish("Nomenklatura" , Yangi TypeDescription() ); TK. Ustunlar. Qo'shish ("SectionData" , NewTypeDescription ("Tuzilish" )); // parametr spetsifikatsiyasi bilan "raqam" va "string" ustunlarini yaratish misoli: TK. Ustunlar. qo'shish( "Foiz bajarildi", NewTypeDescription("Raqam" , NewNumberQualifiers(18 , 2 ) ) ); TK. Ustunlar. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200 , ValidLength. Variable) ) ); TK. Ustunlar. Add("WriteDate" , New TypeDescription("Sana" , , , New DateQualifiers(DateParts.DateTime) ) );

Biroq, umuman olganda, massiv ustun turi sifatida uzatiladi. Massiv bitta ustun uchun bir nechta turlarni ko'rsatish kerak bo'lganda ishlatiladi. Keyin strukturaning ta'rifi shunga o'xshash bo'ladi (turi massiv bo'lsa, har xil turdagi ustunlar uchun misollar keltirilgan, lekin chalkashmaslik uchun massivning tarkibi soddaligi uchun bir xil turdagi)

////// TK tuzilishini shakllantirish (ustunlar yaratish) //// TK kvalifikatsiyalari sohalarida almashtirish uchun kvalifikatsiyalarni aniqlang CF = Yangi son saralovchilari(18 , 9 ); cs = NewStringQualifiers(200 ); CD = Yangi SanaQualifiers(DateParts.DateTime) ; //// kelajakdagi TK ustunlari uchun tur tavsiflarini aniqlang // Massiv - bu turlarning dastlabki tavsifi, uning asosida yangisi quriladi // E'tibor bering, TK ustunlari uchun ushbu misoldagi turlarning dastlabki tavsifi massivdir Massiv = Yangi massiv; Massiv. Qo'shish(Type("String" ) ); TypeDescriptionString = New TypeDescription(Array, , cs); Massiv. Clear(); Massiv. Qo'shish(Type("Raqam" ) ); TypeDescriptionNumber = New TypeDescription(Array, , , RC); Massiv. Clear(); Massiv. Qo'shish(Type("Sana" ) ); TypeDescriptionDate = Yangi TypeDescription(Masiv, , , , CD); Massiv. Clear(); Massiv. Qo‘shish(Tur( "DirectoryLink.Nomenklatura") ; TypeDescriptionNomenclature = New TypeDescription(Array) ; Massiv. Clear(); Massiv. Qo‘shish(Tur( "Qo'llanma. Ma'lumotnoma. SeriyalarNomenklaturasi") ; TypeDescriptionSeries = New TypeDescription(Array) ; Massiv. Clear(); Massiv. Qo‘shish(Tur( "DirectoryLink.Quality") ; TypeDescriptionQuality = New TypeDescription(Array) ; Massiv. Clear(); Massiv. Qo'shish(Type("Mantiqiy" ) ); TypeDescriptionBoolean = New TypeDescription(Array) ; // haqiqatda TORga ustunlar qo'shish (kelajakdagi TOR tuzilishini yaratish) TK. Ustunlar. Qo'shish("Nomenklatura" , TypeDescriptionNomenklatura) ; TK. Ustunlar. Qo'shish ("Kod", TypeDescriptionString) ; TK. Ustunlar. qo'shish( "Seriya nomenklaturasi", TypeDescriptionSeries); TK. Ustunlar. Qo'shish ("AccountCode", TypeDescriptionString) ; TK. Ustunlar. Qo'shish ("ActionDate" , TypeDescriptionDate) ; TK. Ustunlar. Qo'shish ("Sifat" , TavsifTypesQuality); TK. Ustunlar. Qo'shish ("NumberUS" , TypeDescriptionNumber) ; TK. Ustunlar. Qo'shish ("O'chirish" , TypeDescriptionBoolean) ; . . . //////// TK tuzilishini shakllantirish (ustunlar yaratish) ////////////////////////////////////////////////////////

Qiymatlar jadvaliga qator qo'shish bo'limiga qarang.

1C qiymatlari jadvalida qidiring

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

Qiymatlar jadvalini qidirishning ikkita maxsus usuli mavjud:

1. Toping

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//qidiruvni tezlashtirish uchun qaysi ustunlarda qidirish kerakligini ham belgilashimiz mumkin
FoundString = TKNomenclature.Find(TVHorizon, "Nomenklatura");

Bu usul siz qidirayotgan qiymat bilan topilgan birinchi satrni qaytaradi yoki topilmasa, Aniqlanmagan. Shuning uchun uni qidirish uchun ishlatish qulay noyob qadriyatlar, chunki aks holda, qiymat topilganda, keyingisini topish uchun uni jadvaldan o'chirishingiz kerak bo'ladi.

Shunday qilib, azob chekmaslik uchun mavjud quyidagi usul, bu sizga mos keladigan satrlar qatorini topish imkonini beradi:

2. FindStrings


Tanlov tuzilmasi.Insert("Nomenklatura", TVHorizon); // avval qayerda qidirish kerak bo'lgan ustunni, keyin esa nimani qidirishni belgilaymiz.

Bu usul har doim massivni qaytaradi, lekin hech narsa topilmasa, u bo'sh bo'lishi mumkin. Va bu usul, oldingi kabi, qiymatlarni alohida massivda emas, balki qiymatlar jadvalining satrlarini o'zlari qaytaradi. Shuning uchun, massiv satridagi qiymatlarni o'zgartirish yoki oldingi usulda bo'lgani kabi, topilgan qator uchun siz 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:


SelectionStructure = Yangi tuzilma;
Tanlov tuzilmasi.Insert("Nomenklatura", TVHorizon);
Tanlov tuzilmasi.Insert("Miqdor", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

Yagona salbiy, siz ko'rib turganingizdek, siz "teng" dan boshqa taqqoslash turlaridan foydalana olmaysiz.

1C 8.3 platformasidagi qiymatlar jadvali (8.2) ishlab chiquvchi foydalanishi mumkin bo'lgan universal qadriyatlar to'plamidir. dasturiy ta'minotni ishlab chiqish ularning algoritmlarini amalga oshirish uchun. Aslida, 1C qiymatlar jadvali ustunlar va ustunlarga ega bo'lgan dinamik qiymatlar to'plamidir.

1C dagi boshqa universal qadriyatlar to'plamlari haqidagi maqolalar

1C da dasturlashni "1C da 11 bosqichda dastur" kitobimdan o'rganing.

  1. Kitob tushunarli va tilda yozilgan oddiy til- boshlanuvchilar uchun.
  2. 1C arxitekturasini tushunishni o'rganing;
  3. Siz 1C tilida kod yozishni boshlaysiz;
  4. Dasturlashning asosiy usullarini egallash;
  5. Olingan bilimlarni topshiriqlar kitobi yordamida mustahkamlash;

Yangi boshlanuvchilar va tajribali dasturchilar uchun boshqariladigan 1C ilovasini ishlab chiqish bo'yicha ajoyib qo'llanma.

  1. Juda tushunarli va tushunarli til
  2. Kitob yuboriladi elektron pochta ichida PDF formati. Har qanday qurilmada ochilishi mumkin!
  3. Boshqariladigan 1C ilovasining mafkurasini tushuning
  4. Boshqariladigan ilovani ishlab chiqishni o'rganing;
  5. Dizayn qilishni o'rganing boshqariladigan shakllar 1C;
  6. Siz boshqariladigan shakllarning asosiy va kerakli elementlari bilan ishlash imkoniyatiga ega bo'lasiz
  7. Boshqariladigan dastur ostida dasturlash aniq bo'ladi

15% chegirma uchun promo-kod - 48PVXHeYu


Agar ushbu dars sizga biron bir muammoni hal qilishga yordam bergan bo'lsa, uni yoqtirgan yoki foydali bo'lgan bo'lsa, unda siz mening loyihamni istalgan miqdorni o'tkazish orqali qo'llab-quvvatlashingiz mumkin:

qo'lda to'lash mumkin:

Yandex.Money — 410012882996301
Web Money - R955262494655

Mening guruhlarimga qo'shiling.

2011 yil 21 sentyabrda e'lon qilingan

Qiymatlar jadvali 1C - 3-qism. metadata. Qiymatlar jadvalining ustunlari bo'ylab takrorlash

Ushbu maqolada men sizga "noma'lum" strukturaning qiymatlari jadvali bilan qanday ishlashni, qiymatlar jadvalining ustunlari bo'ylab qanday takrorlashni, ustun nomlaridan foydalanmasdan ustunlar va satrlardan ma'lumotlarni qanday chiqarishni aytib beraman. (Ushbu maqola 1C noldan boshlab, 1c ni noldan dasturlash; 1c qiymatlari jadvali) qator maqolalariga ishora qiladi.

Materialni tushuntirish va "jonli" dastur kodiga oid misollarimizni ishga tushirish uchun bizga ba'zilari kerak bo'ladi 1C qiymatlarining test jadvali. Bizning misollarimizning bir qismi qiymatlar jadvalidan ma'lumotlarni ajratib oladi, shuning uchun biz uchta ustunli "Familiya", "Ism", "Otasining ismi" jadvalini tuzamiz va unga oz miqdordagi ma'lumotlarni kiritamiz - 3 qatorga qadar. :)

Shunday qilib, keling, 1C qiymatlarining test jadvalini yaratamiz va uni to'ldiramiz:

MyTR = Yangi qiymatlar jadvali; // "MyTR" o'zgaruvchisida saqlangan yangi qiymatlar jadvalini yarating MyTR.Columns.Add("Familiya"); // "Familiya" ustunini yarating MyTR.Columns.Add("Ism"); // "Ism" ustunini yarating MyTM.Columns.Add("Otasining ismi"); // "O'rta nom" ustunini yarating // qiymatlar jadvalimizga birinchi qatorni qo'shing NewRow = MyTZ.Add(); NewLine.Surname = "Chapaev"; NewString.Name = "Vasiliy"; NewString.Patronymic = "Ivanovich"; // ikkinchi qatorni qo'shing NewLine = MyTZ.Add(); NewLine.Lastname = "Dzerjinskiy"; NewString.Name = "Feliks"; NewLine.Patronymic = "Edmundovich"; // uchinchi qatorni qo'shing NewLine = MyTR.Add(); NewRow.LastName = "Kotovskiy"; NewString.Name = "Gregori"; NewString.Patronymic = "Ivanovich";

Test jadvalimiz uchta ustundan iborat: Ism, Familiya, Otaning ismi; va fuqarolar urushi qahramonlari ismlari bilan tugallangan uchta satrga ega.

Birinchi kod namunasi to'plam sifatida 1C qiymatlar jadvalining ustunlari bo'ylab takrorlanadi.

// TK ning barcha ustunlari nomlarini ko'rsatish Mening TK.Ustunlarimdan Har bir ustun uchun TK ning barcha ustunlari nomini ko'rsatish. EndCycle;

Bizning tsiklimiz 1C xabar oynasidagi barcha ustun nomlarini ko'rsatadi:

Ustun nomi: Familiya Ustun nomi: Ism Ustun nomi: Otasining ismi

Ko'ramizki, ustunlar bo'ylab takrorlash uchun qatorni takrorlash sikliga o'xshash maxsus yig'ish halqasi qo'llaniladi (oxirgi maqolada). MyTM.Ustunlar- bu 1C qiymatlari jadvalining ustunlari to'plami "MoyaTZ". To'plamda turdagi ob'ektlar mavjud "ColumnValueTable" Ushbu turdagi har bir ob'ekt qiymatlar jadvalining ustuni bo'lib, xususiyatlar va usullarni o'z ichiga oladi. Ushbu xususiyatlar va usullarga murojaat qilib, biz bitta ustun haqida kerakli ma'lumotlarni olamiz yoki u bilan boshqa harakatlarni bajaramiz.

Masalan, mulkka kirish "Ism" (Ustun nomi) joriy ustun nomini olamiz.

Men sizning e'tiboringizni tsiklning sarlavhasiga qaratmoqchiman: "Har bir uchun Ustun MyTR.Columns Loop dan" o'zgaruvchisi nomlandi "ustun" biz tomonidan ixtiro qilingan. Xuddi shu nomdan foydalanish shart emas. Siz ushbu o'zgaruvchini o'zingiz yoqtirgan narsani nomlashingiz mumkin, masalan "Mening joriy ustunim" Keyin yuqoridagi misol quyidagicha ko'rinadi:

// MyTK.Columns-dan MyCurrent Column-dan TK ning barcha ustunlari nomini chop eting ("Ustun nomi: " + MyCurrentColumn.Name); EndCycle;

Ijro etuvchi 1C quyi tizimi bunday tsiklga duch kelganda, tsiklning har bir o'tishida u o'zgaruvchini tayinlaydi ismi bizning kollektsiyamizdan bitta element, bu holda - to'plamning bir elementi qiymatlar jadvali ustunlari MyTM.Ustunlar Va keyin biz joriy ustunni o'z ichiga olgan o'zgaruvchiga murojaat qilamiz va xususiyatdan foydalanamiz "Ism".

Men ustunlar to'plamida ustun nomining yonidagi har bir ustunning raqamini ko'rsatishni taklif qilaman:

// MyTR.Columns LoopColumnNumber dan Har bir ustun uchun qiymatlar jadvalining barcha ustunlari soni va nomlarini ko'rsatish. // ustun raqamini oling ColumnName = Column.Name; // ustun nomini olish Hisobot("Ustun raqami:" + Ustun raqami + " Ustun nomi: " + Ustun nomi); EndCycle;

Matn 1C xabar oynasida ko'rsatiladi:

Ustun raqami: 0 Ustun nomi: Familiya Ustun raqami: 1 Ustun nomi: Familiyasi Ustun raqami: 2 Ustun nomi: Otasining ismi

Keling, 1C qiymatlari jadvalidagi ustunlar qiymatlar jadvali qatorlari kabi noldan boshlab raqamlanganligiga e'tibor qarataylik.

Qiymatlar jadvalidagi ustunlar soni 1C

Qiymatlar jadvalidagi ustunlar sonini bilish uchun ustunlar to'plamida "Number()" usulidan foydalanamiz.

Ustunlar soni = MyTM.Columns.Number(); Hisobot (ustunlar soni);

Ekranda "3" raqami ko'rsatiladi. Darhaqiqat, bizning jadvalimizda uchta ustun mavjud: "Familiya", "Ism", "Otasining ismi"

Ustun ob'ektini raqami (indeks) bo'yicha olish va ustun indeksidan foydalanib, ustunlar bo'ylab takrorlash

Keling, ustun indekslari (raqamlari) yordamida qiymatlar jadvalining barcha ustunlari bo'ylab aylana qilaylik. Esda tutingki, ustun raqamlash noldan boshlanadi. Shuning uchun biz "Sh" tsiklining hisoblagichini noldan ustunlar soni minus bittaga teng raqamga oshirishimiz kerak.

SC uchun = 0 MyTM.Columns.Quantity() tomonidan - 1 Loop CurrentColumn = MyTM.Columns[SC]; Xabar berish (Current Column.Name); EndCycle;

Ekranda biz quyidagilarni olamiz

Familiyasi ismi otasini ismi

Menimcha, bu misol aniq edi. Biz usulga murojaat qildik Miqdor() ustunlar to'plamlari" MyTM.Columns.Quantity()", ustunlar sonini oldi va hisoblagich bilan pastadirni boshladi nol oldin ustunlar soni minus bitta. Loop ichida biz har bir ustunni ustunlar to'plamidan olamiz va joriy ustun ob'ektini o'zgaruvchiga tayinlaymiz Joriy ustun Keyingi, o'zgaruvchi Joriy ustun mulkka kiramiz Ism va ushbu xususiyatning qiymatini ekranda ko'rsating: Xabar berish (Current Column.Name);

Hech qachon ob'ekt xususiyatini ob'ekt usuli bilan aralashtirib yubormaslik muhimdir.

Xususiyat statik qiymatning bir turi bo'lib, unga kirish, masalan, qavslarsiz yoziladi Current Column.Name. Usul mohiyatan ob'ektning protsedurasi yoki funktsiyasi bo'lib, protsedura va funksiyalarga qo'ng'iroqlar har doim qavslar bilan yoziladi (hatto kirish parametrlari bo'lmasa ham). Misol uchun: MyTM.Columns.Quantity()

Qavslar yozishni unutib qo'ygan usulga murojaat qilsak, 1C tarjimoni bizga xato xabari beradi va kodni bajarish uchun ishlatmaydi. Tarjimon biz usulga emas, balki xususiyatga kirayotganimizni taxmin qiladi - chunki qavslar yo'q. Va bu nomga ega xususiyatlarni topa olmaydi (chunki bu nomga ega bo'lgan usul mavjud) - bu xato xabarida aytiladi.

Agar shunday usul chaqiruvida qavs qo'yishni unutsam, tarjimon shunday yozadi noto'g'ri yo'l MyTM.Columns.Quantity("Quantity()" dan keyin qavssiz):

Ob'ekt maydoni topilmadi (hisoblash)

Bunday holda, "maydon" va "mulk" sinonimlar yoki 1C ishlab chiquvchilari terminologiyasidagi noaniqlik sifatida tushunilishi kerak. Ular ikkala so'zni bir xil tushunchaga murojaat qilish uchun ishlatadilar. Garchi boshqa dasturlash tillarida bu atamalar turli tushunchalarni anglatishi mumkin.

Ustun raqamlari yordamida 1C qiymat jadvalidan ma'lumotlarni olish

Men sizga yangi boshlanuvchilar uchun jadvalimizning birinchi qatoridan ma'lumotlarni olishning oddiy misolini taklif qilaman. Iltimos, biz maqolaning boshidan oldindan to'ldirilgan jadvaldan foydalanayotganimizni unutmang. Jadvalda birinchi qator va kamida bitta ustun borligini aniq bilamiz. Agar biz ushbu misolni bo'sh jadvalga qo'llasak, xatolik yuzaga keladi. Shunday qilib:

Birinchi qator = MyTR; // birinchi qatorni olish (noldan raqamlash) ColumnFirstValue = RowFirst; // birinchi ustunning qiymatini olish (ustun raqamlash ham noldan iborat) Report(FirstColumnValue); // jadvalning birinchi qatoridagi birinchi ustunning qiymatini ko'rsatish

Ekranda quyidagilar ko'rsatiladi:

Chapaev

Biz birinchi navbatda [...] operatori yordamida qiymatlar jadvaliga kirish orqali qiymatlar jadvali qatori obyektini oldik. (agar buni qanday qilishni unutgan bo'lsangiz, oldingi maqolalarni ko'rishingiz mumkin) Operator ichida biz "0" argumentini o'tkazdik. Bu qiymatlar jadvalining birinchi qatori indeksidir. Birinchi qator = MyTR;

Bundan tashqari, biz [...] operatori yordamida string ob'ektiga murojaat qilish huquqiga egamiz. Ushbu bayonot ichida biz qiymatlar jadvalining ustun raqamini o'tkazdik, bu holda ham "0". Shunday qilib, biz "0" raqami bilan ustunning qiymatini oldik joriy chiziq jadvallar "0" bilan raqamlangan. Biz ushbu qiymatni ekranda ko'rsatdik va u "Chapaev" qatorini ifodalaydi.

Keling, misolimizni biroz murakkablashtiraylik:

Birinchi qator = MyTR; // birinchi qatorni olish (noldan boshlab raqamlangan) Hisobot(Birinchi qator); // jadvalning birinchi qatoridagi birinchi ustunning qiymatini ko'rsatish Report(FirstRow); // jadvalning birinchi qatorida ikkinchi ustunning qiymatini ko'rsatish Report(FirstRow); // jadvalning birinchi qatoridagi uchinchi ustunning qiymatini ko'rsatish

Endi biz qiymatlar jadvalining birinchi qatorining barcha uchta ustunidagi qiymatlarni ko'rsatdik:

Chapaev Vasiliy Ivanovich

Endi men ushbu misolni o'zgaruvchisiz qilishimiz uchun o'zgartiraman "Birinchi qator"

Xabar berish (MyTM); // jadvalning birinchi qatoridagi birinchi ustunning qiymatini ko'rsatish Report(MyTR); // Report(MyTR) jadvalining birinchi qatoridagi ikkinchi ustun qiymatini ko'rsatish; // jadvalning birinchi qatoridagi uchinchi ustunning qiymatini ko'rsatish

Ekran bir xil bo'ladi.

Chapaev Vasiliy Ivanovich

Yuqoridagi misolda biz qiymatlar jadvalining ma'lum bir satri va ustunidagi qiymatga kirish uchun quyidagi shaklda ikkita operatorning ketma-ket chaqiruvidan foydalanishimiz mumkinligini ko'rdik: Qiymatlar jadvali[IndexRows][IndexColumns]

Shunday qilib, biz tsiklni yaratishga tayyormiz va satr va ustun indekslari yordamida barcha satrlar va barcha ustunlar ma'lumotlarini olishga tayyormiz:

RowCount uchun = 0 MyTM.Quantity() boʻyicha - 1 sikl // qatorlar boʻylab aylanish ColumnCount uchun = 0 MyTM.Columns.Quantity() boʻyicha - 1 sikl // ustunlar boʻylab ichki oʻtkazgich // yacheyka qiymatini oling (joriy qatordan) va joriy ustunlar) CellValue = MyTR[RowCount][ColumnCount]; // satr raqami, ustun raqami va katak qiymatini ko'rsatish Hisobot("Line #" + RowCount + "ustun #" + ColumnCount + " = " + CellValue); EndCycle; EndCycle;

Ekranda quyidagilar ko'rsatiladi:

№0 qator №0 ustun = Chapaev qatori #0 ustun #1 = Vasiliy qator #0 ustun #2 = Ivanovich qator #1 ustun #0 = Dzerjinskiy qatori #1 ustun #1 = Feliks qator #1 ustun #2 = Edmundovich qator # 2-ustun No 0 = Kotovskiy 2-qator ustun № 1 = Grigoriy qatori № 2 ustun № 2 = Ivanovich

Biri ikkinchisiga joylashtirilgan ikkita halqa yordamida biz 1C qiymatlar jadvalining barcha qatorlaridan barcha ustunlarning qiymatlarini ko'rsatdik. Bunday holda, biz ustunlar nomlarini ishlatmadik, balki ustunlar va qatorlarni indekslari bo'yicha ko'rsatdik. Yaxshiroq tushunish uchun misol ichidagi izohlarga e'tibor bering.

Xulosa qilib aytganda, men misolimizni biroz o'zgartirishni taklif qilaman, shunda u ustun raqamlari o'rniga ularning nomlarini ekranda aks ettiradi. Bundan tashqari, men ekranda kontentni ko'rsatish uchun yanada qulayroq dizaynni yarataman.

RowCount uchun = 0 MyTR.Quantity() bo'yicha - 1 sikl // qatorlar bo'ylab aylanish Hisobot(" ======= Qator # " + RowCount + " ======="); Hisobot berish (" "); // satr tasmasi (bo'sh qatorni kiritish) ColumnCount uchun = 0 MyTR.Columns.Quantity() bo'yicha - 1 sikl // ustunlar bo'ylab ichki tsikl // hujayra qiymatini olish (joriy satr va joriy ustundan) CellValue = MyTR[RowCount ][ ColumnCount]; // ustun nomini olish ColumnName = MyTR.Columns[ColumnCount].Name; // ustun nomi va katak qiymatini ko'rsatish Hisobot (ColumnName + ": " + CellValue); EndCycle; Hisobot berish (" "); // yangi qator (bo'sh qatorni kiritish) EndCycle;

Endi bizning ekranimizda ma'lumotlar yanada ishonchli ko'rinishni boshladi:

0-qator ======= Familiya: Chapaev Familiyasi: Vasiliy Familiyasi: Ivanovich ======= 1-qator ======= Familiyasi: Dzerjinskiy Familiyasi: Feliks Middle ismi: Edmundovich ===== == 2-qator ======= Familiya: Kotovskiy Ismi: Grigoriy Otasining ismi: Ivanovich

Ha, deyarli unutdim. Bir qatorda ikkita [...][...] operatoridan foydalanilganda, ustun indeksi o‘rniga ushbu ustun nomini o‘tkazishimiz mumkin: Qiymatlar jadvali[RowIndex][ColumnName]

RowCount uchun = 0 MyTR.Quantity() bo'yicha - 1 tsikl // qatorlar bo'ylab aylanish Hisobot(" ======= Qator # " + RowCount + " ======="); Hisobot berish (" "); // satr tasmasi (bo'sh qatorni kiritish) For ColumnCount = 0 MyTR.Columns.Quantity() bo'yicha - 1 tsikl // ustunlar bo'ylab o'rnatilgan tsikl ColumnName = MyTR.Columns[ColumnCount].Name; // ustun nomini olishCellValue = MyTR[RowCount][ColumnName]; //

O'q bilan belgilangan qatorga e'tibor bering ". Bu qatorda joriy ustun indeksi o'rniga biz joriy ustun nomini kvadrat qavs ichidagi argumentga o'tkazamiz [...] Natija bir xil bo'ladi.

Va endi, ushbu maqoladagi oxirgi.

Satrlar va ustunlar to'plamini takrorlash uchun tsikllardan foydalangan holda 1C qiymatlari jadvalining barcha ma'lumotlarini TO'G'ri qabul qilish

Har bir CurrentRow From MyTR Loop uchun // satrlar toʻplami boʻylab aylanish Hisobot(" ======= Line # " + MyTR.Index(CurrentRow) + " ======="); Hisobot berish (" "); MyTR.Columns Loop-dan har bir CurrentColumn uchun // ustunlar to'plami orqali ichki o'rnatilgan tsikl ColumnName = CurrentColumn.Name; // ustun nomini olishCellValue = CurrentRow[ColumnName]; // yacheyka qiymatini ustun bo'yicha olish NAME Hisobot (ColumnName + ": " + CellValue); // ustun nomi va katak qiymatini ko'rsatish EndCycle; Hisobot berish (" "); EndCycle;

Misolda ikkita halqa ishlatilgan. Ustun yig'ish sikli qator halqasi ichiga joylashtirilgan. Agar siz yuqoridagi misollar bilan shug'ullangan bo'lsangiz va oldingi maqolalarni o'qigan bo'lsangiz, unda bu misol qanday ishlashini tushunishda qiyinchilik tug'dirmaydi.

Nihoyat, oxirgi misolimizdagi kod satrlari sonini oraliq oʻzgaruvchilardan foydalanishni yoʻq qilish orqali imkon qadar qisqa tutaman. Biz real dunyo ilovalarida qo'llaniladigan "sanoat kodi" namunasini olamiz.

Buni faqat nima qilayotganingizni yaxshi tushunganingizda qilish kerak. Agar kod juda murakkab bo'lsa, keyinchalik o'z kodingizni tushunishni osonlashtirish uchun oraliq o'zgaruvchilarni qoldirish maqbuldir. Bundan tashqari, har qanday kod kamida minimal sharhlangan bo'lishi kerak, shunda bir muncha vaqt o'tgach, dastur matnlarini tushunish osonroq bo'ladi.

Har bir CurrentRow From MyTR Loop uchun // qatorlar boʻylab aylanish Report(" ======= Line # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); MyTr.Columns Loop dan har bir joriy ustun uchun // ustunlar ustida takrorlash Hisobot (CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); EndCycle; Hisobot berish (" "); EndCycle;

Ekrandagi chiqish o'zgarmadi, u avvalgi misoldagi kabi qoladi:

2-HAFTALIK KURS

"Yangi boshlanuvchilar uchun 1C da DASTURLASH"

Kurs sizga elektron pochta orqali yuboriladi. Bosqichma-bosqich topshiriqlarni bajarib, dasturchi bo'ling.

Ishtirok etish uchun kompyuter va internet bo'lishi kifoya.

Kursga bepul kirish:

sp-force-hide (displey: yo'q;).sp-form (displey: blok; fon: #eff2f4; to'ldirish: 5px; kenglik: 270px; maksimal kenglik: 100%; chegara radiusi: 0px; -moz-chegara -radius: 0px; -webkit-border-radius: 0px; shrift-oila: Arial, "Helvetica Neue", sans-serif; fon-takrorlash: takrorlanmaslik; fon-pozitsiya: markaz; fon o'lchami: avtomatik;) .sp-forma kiritish (displey: inline-block; noaniqlik: 1; visibility: visible;).sp-form .sp-form-fields-wrapper (marja: 0 auto; en: 260px;).sp-form .sp -form-control (fon: #ffffff; hoshiya rangi: #cccccc; hoshiya uslubi: qattiq; hoshiya kengligi: 1px; shrift oʻlchami: 15px; toʻldirish-chap: 8.75px; toʻldirish-oʻng: 8.75px; chegara -radius: 4px; -moz-chegara-radius: 4px; -webkit-chegara-radius: 4px; balandlik: 35px; kengligi: 100%;).sp-form .sp-maydon yorlig'i (rang: #444444; shrift- o'lcham: 13px; shrift uslubi: normal; shrift-og'irligi: qalin;).sp-forma .sp-tugmasi (chegara-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; fon rangi: #f4394c; rang: #ffffff; kenglik: 100%; shrift-weig ht: 700; shrift uslubi: normal font-family: Arial, "Helvetica Neue", sans-serif; quti soyasi: yo'q -moz-box-soya: yo'q; -webkit-box-soya: yo'q; fon: chiziqli-gradient (yuqoriga, #e30d22 , #f77380);).sp-formasi .sp-tugma-konteyner (matnni tekislash: markaz; kenglik: avtomatik;)

Boshlash uchun kichik bir fakt - oddiy misollar qiymatlar jadvali bilan ishlash:

1. Qiymatlar jadvalini tuzing

ValueTable = Yangi qiymatlar jadvali;


2. Qiymatlar jadvalining ustunlarini yarating:

ValueTable.Columns.Add("Ism");
ValueTable.Columns.Add("Familiya");


3. Ustun nomlaridan foydalanib yangi qatorlar qo‘shing:


NewString.Name = "Vasiliy";
NewRow.LastName = "Qovoq";


4. Qiymatlar jadvalidagi qiymatni qanday izlash mumkin:
Istalgan qiymatni o'z ichiga olgan jadval qatorini topish kerak.

FoundString = ValueTable.Find(LookupValue);


5. Qiymatlar jadvalining ma'lum ustunlaridagi birinchi hodisani toping

FoundString = ValueTable.Find(LookupValue, "Yetkazib beruvchi, xaridor");


6. Agar qiymatlar jadvalidagi barcha hodisalarni topishingiz kerak bo'lsa:
Biz qidiruv tuzilmasidan foydalanamiz.

SearchStructure = Struktura ("Xodim", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Keling, qidiruv tuzilmasini yarataylik, uning har bir elementi kalit sifatida ustun nomini va qiymat sifatida ushbu ustundagi qidirilgan qiymatni o'z ichiga oladi. FindStrings() usuliga parametr sifatida Qidiruv tuzilmasini o'tkazamiz. Natijada, biz jadvalning qatorlarini olamiz.
Agar biz qidiruv tuzilmasiga kerakli qiymatni qidirishni qo'shsak, masalan, Mas'ul ustunida, FindRows() usulini qo'llash natijasida biz Xodim va Mas'ul kerakli qiymatga teng bo'lgan barcha qatorlarni olamiz. qiymat.

7. Qanday qilib qiymatlar jadvalini tasodifiy tartibda aylantirish mumkin

ValueTable tsiklidan har bir CurrentRow uchun
Hisobot (CurrentLine.Name);
EndCycle;

Indekslar yordamida xuddi shunday qiling:

SeniorIndex = ValueTable.Count() - 1;
SeniorIndex Cycle bo'yicha MF = 0 uchun
Hisobot(Qiymatlar jadvali[hisoblash].Nom);
EndCycle;


8. Mavjud qiymatlar jadvali qatorini o'chirish

ValueTable.Delete(RemoveRow);

indeks bo'yicha

ValueTable.Delete(0);


9. Qiymatlar jadvalining mavjud ustunini o'chirish

ValueTable.Columns.Delete(RemoveColumn);


indeks bo'yicha

ValueTable.Columns.Delete(0);

Shuni hisobga olish kerakki, qiymatlar jadvalining "o'rtasidan" qatorini (yoki ustunini) o'chirish o'chirilgandan "keyin" bo'lgan qatorlar indekslaridan biriga kamayishiga olib keladi.

10. Ustun nomlari o'zgaruvchilar tarkibida bo'lsa, qiymatlar jadvali qanday to'ldiriladi?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Qiymat;


11. Qiymatlar jadvalining butun ustunini kerakli qiymat bilan qanday to'ldirish mumkin?
Qiymatlar jadvalining qiymatlar jadvalidagi FiscalAccounting Flag ustuni False qiymati bilan to'ldirilishi kerak

ValueTable.FillValue(False, "Fiskal Buxgalteriya bayrog'i");


Qiymatlar jadvali uchun FillValues() usulidan foydalanamiz. Birinchi parametr to'ldiriladigan qiymatdir. Ikkinchi parametr - to'ldirilgan ustunning nomi.

12. "TableRecipient" qiymatlar jadvalini "SourceTable" qiymatlar jadvali ma'lumotlari bilan qanday to'ldirish kerak?

Agar operatsiya vaqtida Qabul qiluvchilar jadvali hali mavjud bo'lmasa yoki uning oldingi ustunlarini saqlash kerak bo'lmasa, uni asl nusxaning to'liq nusxasi sifatida yaratishingiz mumkin.

TableReceiver = TableOriginal.Copy();


Ikkinchi variant: TableReceiver jadvali mavjud va uning ustunlari va ustun ma'lumotlar turlari bo'yicha cheklovlarni yo'qotish juda achinarli. Lekin nomlari manba jadvalining nomlariga mos keladigan ustunlar uchun ma'lumotlarni to'ldirishingiz kerak.

Nomlari mos bo'lgan ustunlar uchun qisman ma'lumotlarni uzatish:

SourceTable tsiklidan olingan manba jadvalining har bir qatori uchun
FillPropertyValues(NewString, SourceTableString);
EndCycle


Manba jadvalining har bir satri uchun maqsadli jadvalga yangi qator qo'shiladi va qiymatlar yangi jadvalning nomlari manba jadvalidagi ustunlar nomlariga mos keladigan ustunlariga to'ldiriladi.

Agar jadvallarda bir xil nomdagi ustunlar bo'lmasa, maqsad jadval manba jadvalidagi qatorlar soni bo'yicha null qiymatga ega bo'lgan qatorlar bilan tugaydi.
Agar bir xil nomdagi ba'zi ustunlar uchun manba jadvalidagi ma'lumotlar qiymati turi belgilangan jadval ustunining ruxsat etilgan turlari qatoriga kirmasa, biz bunday maydonlarda bo'sh qiymatlarni olamiz.
Uchinchi ishni ko'rib chiqaylik. Xuddi shu nomdagi ustunlar bo'lsa, maqsad jadval ustuni manba jadvalining ustuniga to'liq mos kelishi kerak.

Mos keladigan nomlarga ega ustunlar uchun to'liq ma'lumotlar nusxasi

SimilarColumns = New Array();

SourceTable.Columns Loop dan har bir ustun uchun
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Agar MatchedColumn<>Keyin aniqlanmagan

// Ustun xususiyatlarini olish.
Ism = Ustun.Name;
ValueType = Column.ValueType;
Sarlavha = Ustun. Sarlavha;
Width = Column.Width;

// Belgilangan jadvaldagi ustunlarni almashtiring.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Indeks, Ism, Qiymat turi, Sarlavha, Kenglik);

// Massivga mos keladigan ustunlarning keyingi nomini qo'shing.
Same-nameColumns.Add(Column.Name);

EndIf;

EndCycle;

// Manba jadvalining qatorlari bo'ylab aylanish.
SourceTable tsiklidan manba jadvalining har bir qatori uchun

// Qo'shish yangi qator belgilangan jadvalga.
NewString = TableReceiver.Add();

// Mos keladigan hujayralardagi qiymatlarni to'ldiring.
Har bir nom uchun bir xil nomdagi ustunlar
NewString[ColumnName] = SourceTableString[ColumnName];

EndCycle;

EndCycle;


Belgilangan jadvaldagi ustunni yangisi bilan almashtirishimiz kerak, uning xususiyatlari manba jadvalining ustuniga to'liq mos keladi.
Shuning uchun, agar qabul qiluvchilar jadvalida bir xil nomdagi ustun topilsa, biz yangi ustun uchun barcha xususiyatlarni o'zgaruvchilarda to'playmiz. Keyin eskisini o'chiring va yangi ustun yarating. Keyin biz manba jadvalining qatorlari bo'ylab aylanamiz.
Loopda biz qabul qiluvchilar jadvaliga yangi qator qo'shamiz va mos ustunlar qatoridagi ustunlar nomlari orqali tsiklni ochamiz.
Ushbu ichki o'rnatilgan halqa ichida biz qabul qiluvchi jadvalning katakchalarini manba jadvalining katak ma'lumotlari bilan to'ldiramiz.

13. "Qiymatlar jadvali" qiymatlar jadvaliga tur cheklovlari bilan ustunlar qanday qo'shiladi?

Ustun qo'shganda siz shunchaki uning nomini belgilashingiz mumkin va Add() usulining ikkinchi parametriga tegmang. Bunday holda, ustunning ma'lumotlar turi ixtiyoriydir.

Ma'lumotlar turini ko'rsatmasdan ustun qo'shish

// Hech qanday turdagi cheklovlarsiz ustun qo'shing.
ValueTable.Columns.Add("Ob'ekt");


Ikkinchi parametrning qiymatini to'ldirishingiz mumkin. U erda ustun uchun ruxsat etilgan turning tavsifini o'tkazish kerak. Ta'rifning o'zi konstruktor yordamida, satr turi nomini ikkinchisiga parametr sifatida (agar turlar ko'p bo'lsa, vergul bilan ajratilgan) yoki tegishli turlar qatoriga o'tkazish orqali olinishi mumkin.

Ma'lumotlar turini ko'rsatadigan ustun qo'shish

// Ustun ma'lumotlar turlari bo'yicha cheklovlar:
// Faqat "Pudratchilar" katalogining elementlari.
ValueTable.Columns.Add("Hisob",NewTypeDescription("ReferenceReference.Accounts"));


Agar ustun ma'lumotlarini to'ldirishga ruxsat berilgan turlar orasida satr mavjud bo'lsa, siz uning bit chuqurligini (uzunligini) cheklashingiz, o'zgaruvchan yoki belgilangan uzunlikdan foydalanishni belgilashingiz mumkin. Bularning barchasi StringQualifiers konstruktori yordamida ob'ekt yaratish orqali ta'minlanadi. Bundan tashqari, ushbu ob'ekt TypeDescription konstruktorining parametrlaridan biri sifatida ishlatiladi.

Qiymatlar jadvali ustunining ma'lumotlar turini belgilash uchun kvalifikatorlardan foydalanish

// String tipidagi ma'lumotlar uchun chegaralarni tayyorlang va o'rnating.
String Qualifiers = New String Qualifiers (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Raqam va sana kvalifikatsiyalari uchun ham xuddi shunday qilishingiz mumkin.
E'tibor bering: tur tavsifi konstruktor tomonidan ham "noldan" tuzilishi mumkin va siz asos sifatida mavjud tur tavsifidan foydalanishingiz mumkin.

Qiymatlar jadvali ustunining ma'lumotlar turini belgilash uchun mavjud turdagi deklaratsiyalardan foydalanish

// Oldindan foydalanilgan turlarning tavsifini kengaytirish.
Raqam kvalifikatorlari = Yangi raqam kvalifikatsiyalari (10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription (ValidTypes, "Raqam, Sana", Raqamni Qualifiers, Sana Qualifiers);

ValueTable.Columns.Add("Eslatma", ExtendedAllowedTypes);