Qiymatlar jadvalini tashkil qiling 1c 8.2.

Yangi boshlanuvchilar uchun kichik bir fakt - qiymatlar jadvali bilan ishlashning oddiy misollari:

1. Qiymatlar jadvalini tuzing

ValueTable = Yangi qiymatlar jadvali;


2. Qiymatlar jadvali uchun ustunlar yarating:

ValueTable.Columns.Add("Ism");
Qiymatlar jadvali.Ustunlar.Qo'shish("Familiya");


3. Ustun nomlari yordamida yangi qatorlar qo‘shing:


NewLine.Name = "Vasiliy";
NewLine.LastName = "Qovoq";


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

FoundRow = ValueTable.Find(SearchValue);


5. Qiymatlar jadvalining ma'lum ustunlaridagi birinchi hodisani toping

FoundRow = ValueTable.Find(SearchValue, "Yetkazib beruvchi, xaridor");


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

SearchStructure = Struktura ("Xodim", SearchValue);
FoundRows massivi = ValueTable.FindRows(SearchStructure);


Qidiruv strukturasini yarataylik, uning har bir elementida kalit sifatida ustun nomi va qiymat sifatida ushbu ustundagi kerakli qiymat bo'ladi. FindLines() usuliga parametr sifatida Qidiruv tuzilmasini o'tkazamiz. Natijada biz jadval qatorlarini olamiz.
Agar siz qidiruv tuzilmasiga kerakli qiymatni qidirishni qo'shsangiz, masalan, Mas'ul ustunida, u holda FindLines() usulini qo'llash natijasida biz Xodim ham, Mas'ul ham teng bo'lgan barcha qatorlarni olamiz. qidirilgan qiymat.

7. Qanday qilib tasodifiy tartibda qiymatlar jadvali orqali takrorlash mumkin

Qiymatlar jadvalidagi har bir joriy qator uchun
Hisobot (CurrentRow.Name);
EndCycle;

Indekslar yordamida xuddi shu narsa:

SeniorIndex = ValueTable.Quantity() - 1;
Hisob uchun = 0 - SeniorIndex Cycle
Hisobot(TableValues[Account].Name);
EndCycle;


8. Mavjud qiymatlar jadvali qatorini o'chirish

ValueTable.Delete(O'chiriladigan qator);

indeks bo'yicha

ValueTable.Delete(0);


9. Qiymatlar jadvalining mavjud ustunini o'chirish

ValueTable.Columns.Delete(ColumnDeleted);


indeks bo'yicha

ValueTable.Columns.Delete(0);

Shuni hisobga olish kerakki, qiymatlar jadvalining "o'rtasidan" satrini (yoki ustunini) o'chirish o'chirilgandan "keyin" joylashgan qatorlar indekslarining bir marta kamayishiga olib keladi.

10. Agar ustun nomlari o'zgaruvchilarda 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 jadvalidagi Fiskal buxgalteriya bayrog'i ustuni False qiymati bilan to'ldirilishi kerak

Qiymatlar jadvali.Qiymatlarni to'ldiring (False, "Fiskal buxgalteriya bayrog'i");


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

12. “Qabul qiluvchilar jadvali” qiymatlar jadvalini “Manbalar jadvali” qiymatlar jadvalidagi ma’lumotlar bilan qanday to‘ldirish mumkin?

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.

Qabul qiluvchilar jadvali = Manba jadvali.Copy();


Ikkinchi variant: ReceiverTable 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:

Manba jadvali siklidan manba jadvalining har bir qatori uchun
FillPropertyValues(NewRow, SourceTableRow);
Tsiklning oxiri


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

Jadvallarda bir xil nomdagi ustunlar bo'lmasa, maqsad jadval manba jadvalidagi qatorlar bo'lgani kabi null qiymatli qatorlarni o'z ichiga oladi.
Agar bir xil nomdagi ba'zi ustunlar uchun manba jadvalidagi ma'lumotlar qiymati turi belgilangan jadvalning ruxsat etilgan ustun 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.

Tegishli nomlarga ega ustunlar uchun ma'lumotlarni to'liq nusxalash

Xuddi shu ustunlar = Yangi massiv();

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

Agar ustun mos kelsa<>Keyin aniqlanmagan

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

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

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

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

endIf;

EndCycle;

// Manba jadvalining qatorlari bo'ylab aylanish.
Manba jadvali siklidagi manbalar jadvalining har bir qatori uchun

// Belgilangan jadvalga yangi qator qo'shing.
NewRow = TableReceiver.Add();

// Mos keladigan hujayralardagi qiymatlarni to'ldiring.
Har bir nom ustunlari uchun bir xil nomdagi ustunlardan Cycle
NewRow[ColumnName] = SourceTableRow[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 o'zgaruvchilarda yangi ustun uchun barcha xususiyatlarni to'playmiz. Keyin eskisini o'chiring va yangi ustun yarating. Keyin biz manba jadvalining qatorlari bo'ylab aylantiramiz.
Loopda biz qabul qiluvchi jadvalga yangi qator qo'shamiz va mos ustunlar massividagi ustun nomlari ustidan pastadir ochamiz.
Ushbu ichki o'rnatilgan halqa ichida biz maqsadli jadvalning katakchalarini manba jadval katakchasi ma'lumotlari bilan to'ldiramiz.

13. Tur cheklovlari bilan qiymatlar jadvaliga ustunlar qanday qo'shiladi?

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

Ma'lumotlar turini ko'rsatmasdan ustun qo'shish

// Turi bo'yicha cheklovlarsiz ustun qo'shing.
ValueTable.Columns.Add("Ob'ekt");


Ikkinchi parametrning qiymatini to'ldirishingiz mumkin. U erda siz ustun uchun ruxsat etilgan turning tavsifini topshirishingiz kerak. Ta'rifning o'zi konstruktor yordamida olinishi mumkin, unga parametr sifatida turning nomini (agar ko'p turlar bo'lsa, vergul bilan ajratilgan) yoki haqiqiy turlar massivini o'tkazish mumkin.

Ma'lumotlar turini ko'rsatadigan ustun qo'shish

// Ustun ma'lumotlar turlari bo'yicha cheklovlar:
// Faqat "Counterparties" katalogining elementlari.
Qiymatlar jadvali.Columns.Add("Hisob", Turlarning yangi tavsifi("DirectoryLink.Accounts"));


Agar ustun ma'lumotlarini to'ldirishga ruxsat berilgan turlar orasida satr bo'lsa, siz uning bit chuqurligini (uzunligini) cheklashingiz, o'zgaruvchan yoki belgilangan uzunlikdan foydalanishni belgilashingiz mumkin. Bularning barchasiga String Qualifiers konstruktori yordamida ob'ekt yaratish orqali erishiladi. Keyinchalik, bu ob'ekt TypeDescription konstruktorining parametrlaridan biri sifatida ishlatiladi.

Qiymatlar jadvali ustunining ma'lumotlar turini belgilash uchun kvalifikatorlardan foydalanish

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


Shu kabi harakatlar raqam va sana kvalifikatsiyalariga nisbatan bajarilishi mumkin.
Iltimos, diqqat qiling: turdagi tavsiflar konstruktor tomonidan "noldan" tuzilishi mumkin yoki mavjud tur tavsifi asos sifatida ishlatilishi mumkin.

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

// Oldindan foydalanilgan tur tavsifini kengaytirish.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
Kengaytirilgan ValidTypes = Yangi TypeDescription (ValidTypes, "Raqam, Sana", Raqamlar, Sana kvalifikatsiyalari);

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

Barcha infostart o'quvchilariga salom. Ushbu maqola dasturiy ravishda boshqariladigan ilova shaklida o'zboshimchalik bilan qiymatlar jadvalini yaratish masalasiga bag'ishlanadi.

Vazifaning xususiyatlari.

Doimiy dasturda dasturlashtirgan har bir kishi ko'pincha shaklda o'zboshimchalik bilan qiymatlar jadvalini olish vazifasiga duch kelgan. Ixtiyoriy qiymatlar jadvali - bu ustunlar soni va turi oldindan ma'lum bo'lmagan jadval. Ya'ni, 3 ta ustun yoki 6 yoki 8 ta ustun bo'lishi mumkin. Oddiy dasturda hamma narsa oddiy: ishlov berish shakliga "Qiymatlar jadvali" elementini joylashtirishingiz va keyin yaratilgan qiymatlar jadvalini o'tkazishingiz mumkin. ushbu elementga dasturiy jihatdan. Keyin oddiy buyruq bilan:

Form Elements.TableField.CreateColumns();

shaklda qiymatlarning tayyor jadvalini oling. Bu oddiyroq bo'lishi mumkin edi.

Bularning barchasi oddiy dasturda edi. Boshqariladigan ilovada hamma narsa o'zgardi. O'zboshimchalik bilan jadval yaratish unchalik oson emas. Endi siz shakldagi qiymatlar jadvalini qat'iy ravishda parametrlashingiz yoki uni dasturiy ravishda yaratishingiz kerak (ta'riflang, bu aslida boshqariladigan dasturning mohiyatidir). Biz buni qilishga harakat qilamiz: boshqariladigan shaklda ixtiyoriy qiymatlar jadvalini dasturiy ravishda yarating.

Muammoning yechimi.

Biz qilishimiz kerak bo'lgan birinchi narsa - jadvalning shaklda qanday ko'rinishini aniqlash. Asosiysi, qayta ishlashda hech qanday shakl elementini yaratishingiz shart emas. Biz uni butun jadval kabi dasturiy tarzda yaratamiz. Ya'ni, jadval kimga kerak bo'lishiga qarab, shaklni ochish yoki tugmani ishlatish paytida tavsiflanadi va yaratiladi.

Shaklda jadval yaratish qiymatlar jadvalini atribut sifatida tavsiflash orqali amalga oshiriladi:
SelectionTypeArray = Yangi massiv; SelectionType massivi.Add(Type("Qiymatlar jadvali")); ChoiceTypeDescription = New TypeDescription(ChoiceTypeArray); Tafsilotlar massivi = Yangi massiv; Atributlar massivi.Qo'shish(Yangi shakl atributlari("Jadval jadvali", SelectionType tavsifi, "", "TZN")); Endi biz ma'lumotlarni o'z ichiga olgan dasturiy qiymatlar jadvalini yaratishimiz kerak. Agar qiymatlar jadvali so'rovdan olingan bo'lsa, unda hamma narsa ko'proq yoki kamroq tartibda bo'ladi. Agar jadval qo'lda yaratilgan bo'lsa, unda raqamlar yoki sanalar bo'lgan ustunlarning ma'nosi "Turlar tavsifi" orqali yaratilishi mumkin. Gap shundaki, qiymatlar jadvalidagi ustunlar qandaydir turga ega bo'lishi kerak. Agar, masalan, foydalanuvchi ushbu ustunlardagi ma'lumotlarni interaktiv tarzda to'ldirishi kutilsa, unda siz qiymatlar jadvalining ustunini shunchaki nom bilan qo'sha olmaysiz, uning turi bo'lishi kerak. Yodda tuting - bu juda muhim, chunki ... Ushbu turlarni formadagi jadvalga o'tkazamiz.
Biz bir nechta ustunlarni o'z ichiga olgan jadval yaratamiz:
CD = NewDateQualifiers(DateParts.Time); ArrayKD = Yangi massiv; ArrayCD.Add(Type("Sana")); DescriptionTypesTime = Yangi TavsifTypes(ArrayCD,CD); TZ = Yangi qiymatlar jadvali;
TK.Columns.Add("Bilan", DescriptionTypesTime);
TK.Columns.Add("Oldin", DescriptionTypesTime);
TK.Columns.Add("Ism");
TK.Columns.Add("Eslatma"); // To'liq ism va Eslatma - qatorlar Keyinchalik, biz TK dastur jadvalimizni kerakli ma'lumotlar bilan to'ldiramiz. Biz kerakli qiymatlarni o'z ichiga olgan va yaratilgan shakl atributiga o'tkazishga tayyor TK jadvalini olamiz. TK dan har bir ustun uchun. Ustunlar aylanishi

Atributlar massivi.Qo'shish(Yangi shakl atributlari(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "Jadval jadvali";
SelectionFieldTable.Display = TableDisplay.List;

Bu oddiy kombinatsiya va bizning stolimiz tayyor.

TK dan har bir ustun uchun. Ustunlar aylanishi

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Jadval jadvali." + Ustun nomi;
NewElement.Width = 10;
EndCycle;

Shartli dizayn, agar kerak bo'lsa, biz uni qo'lda ham yozamiz, buyruqlar menyusi - qo'lda. Jadval ishlovchilari ham qo'lda yoziladi. Masalan, “Tanlash” jadvaliga hodisa ishlov beruvchisini qo‘shish uchun:

SelectionFields.SetAction jadvali("Tanlash", "TZNSSelect");

Ushbu hodisani qayta ishlash uchun protsedura shaklida alohida protsedura belgilanadi:

&OnClient
TKNSelection protsedurasi (TK, SelectedRow, Field, StandardProcessing)
// ishlov beruvchi EndProcedure buyruqlari

Esda tutingki, jadval ishlov beruvchilari mijozga yonadi va shuning uchun kompilyator ko'rsatgich buyrug'iga ega bo'lishi kerak

&OnClient

Xo'sh, men qo'shmoqchi bo'lgan oxirgi narsa shundaki, barcha amallardan so'ng, tayyor jadvalni forma atributiga o'tkazishni unutmang:

ValueVFormAttributes(ToR, "ScheduleTable");

Natijada bizda shunday bo'ladi:


Va bu erda "Tanlash" hodisasini boshqarish:



Keyingi so'z.

Umid qilamanki, maqola dasturli shaklda jadvallar yaratishni boshlagan 1C dasturchilariga yordam beradi.

Siz dasturiy jihatdan qiymatlar jadvalini yaratadigan va uni boshqariladigan shaklda o'z jadvallaringizni yaratishga yordam beradigan sharhlar bilan ko'rsatadigan ishlov berishni yuklab olishingiz mumkin.

Ehtimol, universal qadriyatlar to'plamining biron bir ob'ekti 1C ishlab chiquvchilari orasida qadriyatlar jadvali (TV) kabi mashhur emas. Qiymatlar ro'yxatini tafsilotlar bilan kengaytirib bo'lmaydi; qiymatlar daraxti vizual ravishda idrok etish uchun qulay, ammo uning qatorlari qiymatlarini dasturiy ravishda o'qish dizaynini amalga oshirish qiyin.

Va faqat qiymatlar jadvali:

  • Hujjatlarning jadval qismlarini, ma'lumotnomalarni to'g'ridan-to'g'ri to'ldirish va ishlov berish;
  • Bu so'rovni bajarish natijasidir;
  • O'qish oson va vizual tarzda tuzilgan;
  • va ko'plab boshqalar.

Ushbu maqolada biz qadriyatlar jadvali kabi murakkab va universal ob'ekt haqida umumiy fikr berishga harakat qildik.

Qiymatlar jadvallari nimalardan iborat?

Barcha yangi ishlab chiquvchilar qiymatlar jadvalida quyidagilar mavjudligini aniq bilishadi:

  1. Jadvalning tuzilishini tavsiflovchi ustunlar;
  2. Jadvalni ma'lumotlar bilan to'ldiradigan qatorlar.

Biroq, biz ko'pincha jadvalning bir muhim xususiyatini unutamiz - uning indekslari, ya'ni ulardan foydalanish jadvalni qidirish, undagi tanlovlarni shakllantirish jarayonini sezilarli darajada tezlashtirishga imkon beradi va ish faoliyatini sezilarli darajada yaxshilaydi.

Lekin birinchi narsa.

1-rasmda ularning tuzilishi va mazmunini ko'rsatadigan eng oddiy protsedura yordamida chop etilgan qiymatlar jadvali qanday ko'rinishi ko'rsatilgan.

Misoldan ko'rinib turibdiki, jadvalda qator raqamini hisobga olmagan holda 5 ta ustun mavjud.

Ko'pgina hollarda ustunning ma'lumotlar turini va uning kengligini ko'rsatishning hojati yo'q; ustun nomini ko'rsatish kifoya, lekin ba'zi hollarda buni oldini olish mumkin emas (masalan, jadvalni jadvalga yuklashda). dbf fayli).

Agar siz kelajakda so'rov uchun ma'lumotlar manbai sifatida qiymatlar jadvalidan foydalanishni rejalashtirmoqchi bo'lsangiz, ma'lumotlar turini ko'rsatish kerak (2-rasm).

Qator qo'shish Add() usuli yordamida amalga oshiriladi, yangi satr nomini tayinlaydi.

Qiymatlar jadvali indekslari

Qiymatlar jadvalini qidirish ikkita usul yordamida amalga oshiriladi:

  • Find (muayyan parametrlar asosida topilgan birinchi elementni qaytaradi, aks holda qiymat Aniqlanmagan);
  • FindRows (ma'lum shartlarga javob beradigan jadval qatorlarini qaytaradi).

Katta jadvallar orqali qidirish tizimni sezilarli darajada sekinlashtiradi va uzoq vaqt talab qilishi mumkin. Bunday hollarda indekslardan foydalanish kerak.

Birinchi holda, qidiruv bir qiymat va bitta ustun yordamida amalga oshiriladi, bu indekslarga o'tkazilishi kerak bo'lgan narsa (3-rasm).

Vergul bilan ajratilgan indekslar jadvalni FindRows usuli yordamida qidirish mumkinligini ko'rsatadi, unga ma'lum bir tuzilma parametr sifatida uzatiladi.

Misolda keltirilgan holatda, ikkinchi qator ma'lum bir Nomenklatura qiymatini va uning xususiyatlarini o'z ichiga olgan qatorlarni bir vaqtning o'zida qidirishni ko'rsatadi, uchinchi qator esa qidiruv parametrlariga "Ishlab chiqarish buyurtmasi" hujjatini qo'shish mumkinligini ko'rsatadi.

Har xil konfiguratsiya metama'lumotlari ob'ektlari bilan ishlashda, shuningdek, hisobotlar va ishlov berishda, ularning jadval qismlari bilan ba'zi harakatlarni bajarish zarur bo'lganda, vaziyat tez-tez yuzaga keladi. Hujjatlarning shakl elementlari yoki jadval qismlari bilan bevosita ishlash har doim ham qulay emas.

Bu erda qadriyatlar jadvali yana yordamga keladi. Texnik spetsifikatsiyada jadval qismlarini Unload() usulidan foydalanib, siz:

  1. Barcha mumkin bo'lgan ma'lumotlarni saqlab, hujjat jadvalining tuzilishini to'liq takrorlang;
  2. Faqat keyingi ish uchun zarur bo'lgan ustunlar va qatorlarni aniqlang va ularni ko'rsating.

Teskari harakat (jadval qismini to'ldirish) Load() usuli yordamida amalga oshiriladi, uning yagona parametri ko'rsatiladigan jadval nomidir.

Shuni ta'kidlash kerakki, jadval qismi va texnik topshiriqning ustunlarini taqqoslash nom bilan sodir bo'ladi.

Siz bitta TKni boshqasiga to'liq nusxalashingiz, shuningdek Copy() usuli yordamida qaysi satr va ustunlar o'tkazilishini aniqlashingiz mumkin.

4-rasm

Bunday holda, jadval ustunlari saqlanib qoladi va dublikatdagi ma'lumotlar va qatorlar o'chiriladi.

Qiymat jadvali va so'rov

Yuqorida aytib o'tilganidek, so'rovni bajarish natijasi texnik spetsifikatsiyaga yuklanadi, lekin ko'pincha ishlab chiquvchilarda savol tug'iladi: so'rov bilan qiymatlar jadvalini qanday qayta ishlash mumkin, bu mumkinmi va buni amalga oshirish uchun qanday kod yordam beradi.

1C-dagi so'rovlar texnologiyasi ma'lumotlar manbalari sifatida texnik xususiyatlardan foydalanishni anglatmaydi, ammo bu cheklov yordamida osongina chetlab o'tish mumkin. 5-rasmdagi kod bu qanday amalga oshirilganligini ko'rsatadi.

5-rasm

"*" ni ustunlar nomlari bilan almashtirib (TZ.Nomenklatura shaklidagi chiziq) siz yuklangan ma'lumotlar miqdorini kamaytirishingiz mumkin.

So'rovni bajarishda xatolik (5-rasm) "Turni so'rovda qayta ishlash mumkin emas" - ishlab chiquvchi 2-rasmdagi kodning bir qismini bajarishni unutganligini va ustunlarni yozmaganligini ko'rsatadi.

Qiymatlar jadvali va tsikllar

Hisoblagichni o'z ichiga olgan usuldan foydalangan holda qiymatlar jadvali qatorlarini takrorlashda (6-rasm), satr indeksining boshlang'ich qiymati 0, iteratorning yakuniy qiymati esa 1 bo'lishi kerakligini yodda tutish kerak. jadvaldagi qatorlar sonidan kamroq. Aks holda, "Indeks qiymati diapazondan tashqarida" xatosining 100% ehtimoli bor.

6-rasm

Umuman olganda, iterator nomini aniqlaydigan "Har bir uchun ... dan" konstruktsiyasi orqali texnik xususiyatlar qatorlarini sanab o'tish yaxshiroqdir.

qiymatlar jadvali 1C

Qiymatlar jadvali 1C onlayn ma'lumotlarni saqlash va qayta ishlash uchun ishlatiladi. Ko'p sonli qatorlar bilan ma'lumotlarni olish tezligi keskin pasayadi. Ko'pgina dasturchilar qiymatlar jadvalidan ma'lumot qidirishda indekslardan foydalanishning ahamiyatini e'tiborsiz qoldiradilar. Men sizga indekslardan foydalanish texnik xususiyatlar bilan ishlashni tezlashtirishini ko'rsatmoqchiman ( qiymatlar jadvali 1C) oldin 100 marta.

Shunday qilib, sinov maqsadlarida men shunga o'xshash ishlaydigan kichik kod yaratdim.

  • 20 ming satr "Ishga tushirish" hujjatining jadval qismidan qiymatlar jadvaliga chiqariladi. U T1 deb ataladi.
  • Men xuddi shu qiymatlar jadvalining nusxasini, ikkinchi jadvalni T2 deb nomladim. Shunday qilib, biz har biri 20 ming qatordan iborat T1 va T2 2 ta qiymat jadvalini oldik.
  • Keyinchalik, 1 dan 5 gacha bo'lgan tsiklda biz beshta o'tishni amalga oshiramiz. O'tish quyidagicha:
  • Loopda (1 dan 5 gacha bo'lgan davrga joylashtirilgan) T1 qiymatlari jadvalining barcha satrlari, barcha 20 ming qatorlar takrorlanadi.
  • Har bir joriy T1 qatori uchun biz T1 qiymatlari jadvalidan "Miqdor" ustunidagi qiymatni chiqaramiz - bu raqam.
  • Biz T2 qiymatlari jadvalida "Miqdor" ustunida oldingi bosqichda chiqarilgan raqamni o'z ichiga olgan qatorni qidirmoqdamiz.
  • Biz har bir o'tish vaqtini millisekundlarda o'lchaymiz va uni ekranda ko'rsatamiz.

Boshqacha qilib aytganda, 1C qiymatlari jadvalining barcha qatorlarini ko'rib chiqish va "Miqdor" ustunining qiymatini eslab, biz boshqa qiymatlar jadvalida bir xil miqdordagi qatorni qidiramiz. Qiymatlar jadvalining "topish" usuli qo'llaniladi. Bir o'tishda qidiruv operatsiyasi 20 ming marta amalga oshiriladi. Faqat beshta o'tish bor. Ular eksperimental natijalarni o'rtacha hisoblash uchun zarurdir.

Quyida siz test natijalari jadvalini ko'rasiz. Ikkinchi ustun oddiy, optimallashtirilmagan ishga tushirishda beshta o'tishning har birining bajarilish vaqtini ko'rsatadi va ustun ostida 279641 millisekund yoki taxminan testni bajarish vaqti ko'rsatilgan. 279 soniya. Uchinchi ustun bir xil testning bajarilish vaqtini ko'rsatadi, lekin optimallashtirilgan qidiruv opsiyasi bilan. qiymatlar jadvalidagi indeksdan foydalanish. Aniqlik uchun men jadvalga indeks yaratish uchun sarflangan vaqtni qo'shdim (sarlavha ostidagi birinchi qator), bu juda kichik, atigi 0,047 soniya. Ikkinchi variantda testni bajarishning umumiy vaqti 2781 millisekund yoki 2,78 soniya.

Shunday qilib, birinchi variantda bizda - 279 soniya, ikkinchi variantda - 2,78 soniya. Farqi 100 marta! Bundan tashqari, bunday tezlashtirishga atigi BIR QATLI KOD qo'shish orqali erishiladi!

Bajarish vaqti, millisekundlar
Sinov raqami. Variant 1, muntazam Variant 2, optimal
indeks yaratish vaqti - 47
1 46531 563
2 55516 547
3 60969 531
4 58688 562
5 57937 531
Umumiy vaqt 279641 2781
Tezlashtirish vaqtlari: 100,5541172

Mana to'liq misol kodi:

KnIndexTableValuesPressing(Element) protsedurasi // ma'lumotlarni olish uchun so'rov yarating So'rov = Yangi so'rov; So'rov. Matn = "BIRINCHI 20000 NI SELECT | SalesProducts.Link, | SalesProducts.LineNumber, | SalesProducts.Quantity, | SalesProducts.Amount, | SalesProducts.Mahsulot |FROM | Hujjat.Sotish.Mahsulotlar SalesMahsulot AS"; // tanlangan ma'lumotlarni T1 qiymatlar jadvaliga joylashtiring T1 = So'rov. Execute(). Unload(); // T1 qiymatlari jadvalining mazmunini nusxalash orqali T2 qiymatlari jadvalini yarating T2 = T1. Nusxa ko'chirish (); StartAddIndex = GetTimeInMilliseconds() ; T2. Indekslar. Qo'shish ("Miqdor"); // BU ENG MUHIM SATIR, "SUM" USTUNGA INDEKS QO'SHILGAN ConAddIndex = GetTimeInMilliseconds() ; Xabar berish uchun ( "Indeksni qo'shish vaqti"+ (CondIndexAdding - StartIndexAdding) + "ms" ); Xabar berish uchun ( "Qiymatlar jadvalimizdagi jami qatorlar:"+ T2. Miqdor() ); // beshta o'tish tsiklini tashkil qiling, aslida biz testni besh marta o'tkazamiz Hisoblash uchun = 1 dan 5 gacha tsiklni boshlash = GetTimeInMilliseconds() ; // boshlanish vaqtini eslab qoling FoundOnce = 0; T1 tsiklining har bir sahifasi uchun // T1 jadvalining barcha qatorlarini takrorlash Foydalanuvchining uzilishlarini boshqarish() ; // T2 jadvalida ustuni "Miqdor" bo'lgan qatorni qidiring. // T1-jadvalning joriy qiymati "Sum"ga mos keladi FoundString = T2. Toping (sahifa summasi, "sum" ); // Agar moslik aniqlangan bo'lsa (string topildi), topilgan satrlar hisoblagichini oshiring If FoundString<>Aniqlanmagan Keyin FoundOnce = FoundOnce + 1; EndIf; EndCycle; // T1-jadval satrlari bo'ylab qidirish tsiklining tugash vaqtini oling End = GetTimeInMilliseconds() ; // sinovdan o'tish raqami, topilgan mosliklar soni va bajarilish vaqti haqida millisekundlarda xabar bering Hisobot ("Passage No." + Sch) ; Hisobot ("Topilgan vaqt:" + Topilgan vaqtlar); Xabar berish uchun ( "Bajarish vaqti "+ String (End-Start) + "millisekundlar"); EndCycle; // keyingi o'tish uchun qoldiring Jarayonning oxiri


Misol izohlangan va aniq bo'lishi kerak. Asosiy narsa chiziqda T2.Indices.Add("Sum"); Biz 1C ga T1 qiymatlari jadvalidagi "Miqdor" ustunida qidiruv operatsiyasini o'tkazmoqchi ekanligimizni ma'lum qilamiz va ushbu ustunda indeks yaratishni talab qilamiz. Tizim indeks yaratadi va undan keyin "Miqdor" ustunidan foydalanib, barcha qidiruv operatsiyalari uchun avtomatik ravishda foydalanadi. Shuni ta'kidlash kerakki, yaratilgan indeks faqat "Miqdor" ustunida qidirish uchun amal qiladi, chunki u ushbu ustun uchun yaratilgan. Agar bizga qidirish uchun boshqa ustunlar kerak bo'lsa, biz kerakli ustun nomlarini ko'rsatgan holda tegishli indekslarni yaratishimiz kerak.

Agar biz turli ustunlar uchun qiymatlarni qidirmoqchi bo'lsak, biz bitta jadvalda bir nechta indeks yaratishimiz mumkin. Indekslar 1C qiymatlar jadvalining indekslari to'plamida saqlanadi, bu koddan kelib chiqadi: TK.Indexes.Add(ColumnName)

Agar biz ustun qiymatlari kombinatsiyasi bo'yicha qidirishimiz kerak bo'lsa, masalan, bir vaqtning o'zida "Miqdor" va "Miqdor" ustunlari bo'yicha, biz kompozit indeks yaratishimiz kerak: T2.Indices.Add("Miqdor, miqdor") Bunday indeks FindRows() usuli yordamida jadvaldagi qiymatni qidirganda foydalaniladi.Masalan:

FoundStrings massivi = T2.FindStrings(Yangi tuzilma("Miqdor, Miqdor", SearchedQuantity, SearchedSum));

Misol matnida ishlatiladi.
Hurmat bilan, Degtyarev Roman.

1C da noldan dasturlashni qanday o'rganish mumkin?

Qanday qilib 1C dasturchisi sifatida ishlash va oyiga 150 000 rublgacha pul ishlash mumkin?

BEPUL Ro'yxatdan o'ting

2 HAFTA KURS

"Yangi boshlanuvchilar uchun 1C da DASTURLASH"

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

Ishtirok etish uchun sizga faqat kompyuter va Internet kerak

Kursga bepul kirish:

Sp-force-hide (displey: none;).sp-form ( displey: blok; fon: #eff2f4; to'ldirish: 5px; eni: 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 (margin: 0 auto; en: 260px;).sp-form .sp -forma nazorati (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; kenglik: 100%;).sp-form .sp-maydon yorligʻi (rang: #444444; shrift- o'lcham: 13px; shrift uslubi: normal; shrift-og'irligi: qalin;).sp-formasi .sp-tugmasi (chegara-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; fon rangi: #f4394c;rang: #ffffff; kengligi: 100%; shrift og'irligi: 700; shrift uslubi: normal; shrift oilasi: 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;)

1C 8.3 (8.2) platformasidagi qiymatlar jadvali ishlab chiquvchi o'z algoritmlarini amalga oshirish uchun dasturiy ta'minotni ishlab chiqishda foydalanishi mumkin bo'lgan universal qiymatlar to'plamidir. 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 11 bosqichda dasturlash" kitobimda 1C da dasturlashni o'rganing.

  1. Kitob tushunarli va sodda tilda yozilgan - yangi boshlanuvchilar uchun.
  2. 1C arxitekturasini tushunishni o'rganing;
  3. Siz 1C tilida kod yozishni boshlaysiz;
  4. Asosiy dasturlash texnikasini egallash;
  5. Muammoli kitob yordamida bilimlaringizni mustahkamlang;

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

  1. Juda qulay va tushunarli taqdimot tili
  2. Kitob elektron pochta orqali PDF formatida yuboriladi. Har qanday qurilmada ochilishi mumkin!
  3. Boshqariladigan 1C ilovasining mafkurasini tushuning
  4. Boshqariladigan ilovani ishlab chiqishni o'rganing;
  5. Boshqariladigan 1C shakllarini ishlab chiqishni o'rganing;
  6. Siz boshqariladigan shakllarning asosiy va zarur 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 qilishda yordam bergan bo'lsa, sizga yoqqan yoki foydali deb topilgan bo'lsa, unda siz mening loyihamni istalgan miqdorda xayriya qilish orqali qo'llab-quvvatlashingiz mumkin:

Siz qo'lda to'lashingiz mumkin:

Yandex.Money - 410012882996301
Web Money - R955262494655

Mening guruhlarimga qo'shiling.