1c ردیف های جدول مقدار را بر اساس شرایط انتخاب کنید. مهم است که هرگز یک ویژگی شی و یک روش شی را اشتباه نگیرید

به منظور حسابداری پول و کالا، جداول مختلفی در تجارت استفاده می شود. تقریباً هر سند یک جدول است.

در یک جدول، کالاهایی که باید از انبار ارسال شوند، فهرست شده است. جدول دیگری تعهدات پرداخت این کالاها را نشان می دهد.

بنابراین، در 1C، کار با جداول جایگاه برجسته ای را اشغال می کند.

به جداول 1C "قسمت های جدولی" نیز می گویند. فهرست راهنماها، اسناد و سایر موارد آنها را دارند.

پرس و جو، زمانی که اجرا می شود، جدولی را برمی گرداند که به دو روش مختلف قابل دسترسی است.

انتخاب اول - سریعتر - به دست آوردن ردیف از آن فقط به ترتیب امکان پذیر است. دومی بارگذاری نتیجه پرس و جو در جدول مقادیر و سپس دسترسی تصادفی به آن است.

//گزینه 1 - دسترسی متوالی به نتایج پرس و جو

// جدول را دریافت کنید
Select = Query.Run().Select();
// تمام خطوط نتیجه پرس و جو را به ترتیب مرور می کنیم
در حالی که حلقه () Select.Next
گزارش (Selection.Name);
چرخه پایان

//گزینه 2 - آپلود در جدول مقادیر
Request = New Request("SELECT Name FROM Directory.Nomenclature");
// جدول را دریافت کنید
جدول = Query.Run().Unload().
//بیشتر ما همچنین می توانیم در تمام خطوط تکرار کنیم
برای هر ردیف از چرخه جدول
گزارش (String.Name);
چرخه پایان
//یا به صورت دلخواه به رشته ها دسترسی پیدا کنید
ردیف = Table.Find("Shovel", "Name");

یک ویژگی مهم این است که در جدولی که از نتیجه پرس و جو به دست می آید، تمام ستون ها به طور دقیق تایپ می شوند. به این معنی که با درخواست فیلد Name از فهرست Nomenclature، ستونی از نوع String با طول مجاز بیش از N کاراکتر دریافت خواهید کرد.

جدول روی فرم (کلینت ضخیم)

وقتی جدول روی فرم قرار می گیرد کاربر با آن کار می کند.

اصول اولیه کار با فرم ها را در درس روی و در درس روی بحث کردیم

بنابراین، بیایید جدول را روی فرم قرار دهیم. برای این کار می توانید جدول را از پنل Controls بکشید. به طور مشابه، می توانید Form/Insert Control را از منو انتخاب کنید.

داده ها را می توان در پیکربندی ذخیره کرد - سپس باید قسمت جدولی موجود (که قبلاً اضافه شده است) شی پیکربندی را که فرم آن را ویرایش می کنید انتخاب کنید.

روی دکمه "..." در ویژگی Data کلیک کنید. برای دیدن لیست قطعات جدولی، باید شاخه Object را گسترش دهید.

وقتی قسمت جدولی را انتخاب می کنید، خود 1C ستون هایی را به جدول روی فرم اضافه می کند. ردیف های وارد شده توسط کاربر در چنین جدولی به طور خودکار همراه با کتاب / سند مرجع ذخیره می شود.

در همان ویژگی Data می توانید یک نام دلخواه وارد کنید و نوع Value Table را انتخاب کنید.

این بدان معنی است که یک جدول دلخواه از مقادیر انتخاب شده است. به طور خودکار ستون اضافه نمی کند و به طور خودکار ذخیره نمی شود، اما می توانید هر کاری که می خواهید با آن انجام دهید.

با کلیک راست روی جدول می توانید یک ستون اضافه کنید. در ویژگی های یک ستون، می توانید نام آن را (برای مرجع در کد 1C)، عنوان ستون در فرم، ارتباط با ویژگی بخش جدولی را مشخص کنید (اگر یک جدول دلخواه انتخاب نشده باشد، اما یک بخش جدولی).

در ویژگی های جدول موجود در فرم، می توانید تعیین کنید که آیا کاربر می تواند ردیف ها را اضافه یا حذف کند. یک فرم پیشرفته تر کادر چک فقط مشاهده است. این ویژگی ها برای سازماندهی جداول در نظر گرفته شده برای نمایش اطلاعات، اما نه برای ویرایش، مناسب هستند.

برای مدیریت جدول باید یک پنل فرمان روی فرم نمایش داده شود. مورد منو Form/Insert Control/Command Bar را انتخاب کنید.

در ویژگی های نوار فرمان، کادر تکمیل خودکار را انتخاب کنید تا دکمه های روی پانل به طور خودکار ظاهر شوند.

جدول روی فرم (مشتری نازک/مدیریت شده)

در فرم مدیریت شده، این اقدامات کمی متفاوت به نظر می رسند. اگر نیاز به قرار دادن یک قسمت جدولی در فرم دارید، شاخه Object را گسترش دهید و یکی از قسمت های جدولی را به سمت چپ بکشید. همین!

اگر نیاز به قرار دادن جدول مقادیر دارید، یک ویژگی فرم جدید اضافه کنید و در ویژگی های آن نوع – جدول مقادیر را مشخص کنید.

برای افزودن ستون‌ها، از منوی راست کلیک بر روی این ویژگی فرم استفاده کنید، ستون افزودن ویژگی را انتخاب کنید.

سپس جدول را نیز به سمت چپ بکشید.

برای اینکه یک جدول دارای نوار فرمان باشد، در قسمت خصوصیات جدول، مقادیر موجود در قسمت Usage – Command bar position را انتخاب کنید.

آپلود جدول در اکسل

هر جدول 1C موجود در فرم را می توان چاپ یا در اکسل آپلود کرد.

برای این کار بر روی آن راست کلیک کنید فضای خالیدر جدول و لیست را انتخاب کنید.

در یک کلاینت مدیریت شده (نازک)، اقدامات مشابه را می توان با استفاده از آیتم منو All actions/Display list انجام داد.

دو روش ویژه برای جستجوی جدول مقادیر وجود دارد:

1. پیدا کنید

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//همچنین می توانیم تعیین کنیم که در کدام ستون ها جستجو کنیم تا سرعت جستجو افزایش یابد
FoundString = TZNomenclature.Find(TVHorizon, "Nomenclature");

این متد اولین سطر پیدا شده را با مقدار دلخواه برمی گرداند یا اگر آن را پیدا نکرد، Undefined را برمی گرداند. بنابراین، استفاده از آن برای جستجوی مقادیر منحصر به فرد راحت است، زیرا در غیر این صورت، وقتی یک مقدار پیدا شد، باید آن را از جدول حذف کنید تا مورد بعدی را پیدا کنید.

برای جلوگیری از این دردسر، روش زیر وجود دارد که به شما امکان می دهد آرایه ای از رشته های منطبق را پیدا کنید:

2. FindStrings


Selection Structure.Insert("Nomenclature", TVHorizon); // ابتدا ستون را مشخص کنید که کجا باید جستجو کرد و سپس به دنبال چه چیزی بود.

این متد همیشه یک آرایه را برمی گرداند، اما اگر چیزی پیدا نشد، می تواند خالی باشد. و این روش، مانند روش قبلی، سطرهای جدول مقادیر را خودشان برمی گرداند، نه خود مقادیر را در یک آرایه جداگانه. بنابراین، با تغییر مقادیر در رشته آرایه یا مانند روش قبلی، برای رشته یافت شده، مقدار جدول مقادیر پردازش شده را تغییر می دهید.

یکی دیگر از چیزهای خوب در مورد این روش این است که می تواند چندین ستون از جدول مقادیر را به طور همزمان جستجو کند:


SelectionStructure = ساختار جدید;
Selection Structure.Insert("Nomenclature", TVHorizon);
Selection Structure.Insert("Quantity", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

همانطور که می بینید تنها نکته منفی این است که شما نمی توانید از انواع دیگر مقایسه به جز "برابر" استفاده کنید.

منتشر شده در 21 سپتامبر 2011

جدول مقادیر 1C - قسمت 3. فراداده. حلقه زدن از طریق ستون های جدول ارزش

در این مقاله به شما خواهم گفت که چگونه با جدول مقادیر یک ساختار "ناشناخته" کار کنید، چگونه از طریق ستون های جدول مقادیر تکرار کنید، چگونه داده ها را از ستون ها و ردیف ها بدون استفاده از نام ستون ها استخراج کنید. (این مقاله متعلق به سری مقالات 1C از ابتدا؛ برنامه نویسی 1C از ابتدا؛ جدول مقادیر 1C است)

برای توضیح مطالب و اینکه بتوانیم مثال های خود را اجرا کنیم کد برنامه"زندگی کن"، ما به مقداری نیاز داریم جدول تست مقادیر 1C. برخی از مثال‌های ما داده‌ها را از جدول مقادیر استخراج می‌کنند، بنابراین جدولی با سه ستون "نام خانوادگی"، "نام"، "نام میانی" ایجاد می‌کنیم و مقدار کمی از داده‌ها را در آن وارد می‌کنیم - به اندازه 3. ردیف :)

بنابراین، بیایید یک جدول آزمایشی از مقادیر 1C ایجاد کنیم و آن را پر کنیم:

MyTZ = New ValueTable; // یک جدول جدید از مقادیر ذخیره شده در متغیر "MyTZ" MyTZ.Columns.Add ("نام خانوادگی") ایجاد کنید. // ایجاد ستون "Last Name" MyTZ.Columns.Add("Name"); // ایجاد ستون "Name" MyTZ.Columns.Add("Patronymic"); // ستون "Middle name" را ایجاد کنید // ردیف اول را به جدول مقادیر خود اضافه کنید NewLine = MyTZ.Add(); NewString.LastName = "Chapaev"; NewLine.Name = "واسیلی"; NewString.Middle name = "Ivanovich"; // خط دوم را اضافه کنید NewLine = MyTZ.Add(); NewString.LastName = "Dzerzhinsky"; NewRow.Name = "فلیکس"; NewString.Middle name = "Edmundovich"; // خط سوم را اضافه کنید NewLine = MyTZ.Add(); NewLine.LastName = "کوتوفسکی"; NewLine.Name = "گرگوری"; NewString.Middle name = "Ivanovich";

جدول آزمون ما از سه ستون تشکیل شده است: نام، نام خانوادگی، نام خانوادگی. و دارای سه خط پر از نام قهرمانان جنگ داخلی است.

اولین نمونه کد، شمارش ستون های جدول مقدار 1C به عنوان مجموعه است.

// نمایش نام تمام ستون های TK For Every Column From MyTZ.Columns Cycle Report("Column name:" + Column.Name); چرخه پایان

چرخه ما همه نام ستون ها را در پنجره پیام 1C نمایش می دهد:

نام ستون: نام خانوادگی نام ستون: نام نام ستون: نام میانی

می بینیم که برای تکرار از طریق ستون ها، از یک چرخه تکرار مجموعه خاص، مشابه چرخه تکرار ردیف (در مقاله قبل) استفاده می شود. MyTK.Columns- این مجموعه ای از ستون های جدول ارزش 1C است "MyTZ". مجموعه شامل اشیایی از نوع است "ستون جدول ارزش"هر شیء از این نوع ستونی از جدول مقادیر است و حاوی ویژگی ها و متدها است. با دسترسی به این ویژگی ها و روش ها، اطلاعات لازم را در مورد یک ستون به دست می آوریم یا برخی اقدامات دیگر را با آن انجام می دهیم.

مثلا دسترسی به ملک "نام" (نام ستون) نام ستون فعلی را می گیریم.

توجه شما را به عنوان سریال جلب می کنم: «برای همه ستوناز MyTZ.Column Cycle" متغیر با نام "ستون"توسط ما اختراع شده است استفاده از یک نام ضروری نیست. برای مثال می توانید این متغیر را هر چیزی که دوست دارید صدا بزنید "MyCurrentColumn"سپس مثال بالا به این صورت خواهد بود:

// نمایش نام تمام ستون های TK For Every MyCurrentColumn From MyTK.Columns Cycle Report("Column name:" + MyCurrentColumn.Name); چرخه پایان

هنگامی که زیرسیستم اجرای 1C با چرخه ای از این نوع مواجه می شود، با هر گذر از چرخه، متغیری را با نام مشخص شدهیک عنصر از مجموعه ما، در این مورد - یک عنصر مجموعهستون های جدول ارزش MyTK.Columnsو سپس به متغیری که حاوی ستون فعلی است دسترسی پیدا کرده و از ویژگی استفاده می کنیم "نام".

من پیشنهاد می کنم در کنار نام ستون، تعداد هر ستون در مجموعه ستون ها نمایش داده شود:

// نمایش تعداد و نام تمام ستون های جدول مقادیر For Every Column From MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // دریافت شماره ستون ColumnName = Column.Name; // دریافت نام ستون گزارش ("شماره ستون:" + شماره ستون + " نام ستون: " + نام ستون); چرخه پایان

متن زیر در پنجره پیام 1C نمایش داده می شود:

شماره ستون: 0 نام ستون: نام خانوادگی شماره ستون: 1 نام ستون: نام شماره ستون: 2 نام ستون: نام میانی

لطفاً توجه داشته باشید که ستون‌های جدول مقدار 1C مانند ردیف‌های جدول مقادیر از صفر شروع می‌شوند.

تعداد ستون ها در جدول مقدار 1C

برای یافتن تعداد ستون ها در جدول مقادیر، از روش "Count()" در مجموعه ستون ها استفاده می کنیم.

تعداد ستون = MyTZ.Columns.Quantity(); گزارش (تعداد ستون)؛

عدد "3" روی صفحه نمایش داده می شود. در واقع، جدول ما دارای سه ستون است: "نام خانوادگی"، "نام"، "نام پدر"

دریافت یک شی ستون با تعداد آن (شاخص) و شمارش ستون ها با استفاده از نمایه ستون

بیایید با استفاده از شاخص های ستون (اعداد) یک چرخه جستجو در تمام ستون های جدول ارزش ایجاد کنیم. به یاد داشته باشید که شماره گذاری ستون ها از صفر شروع می شود. بنابراین، ما باید سیکل شمارنده "Sch" را از صفر به عددی برابر با تعداد ستون های منهای یک افزایش دهیم.

برای حساب = 0 توسط MyTZ.Columns.Quantity() - 1 چرخه CurrentColumn = MyTZ.Columns[Act]; گزارش (CurrentColumn.Name); چرخه پایان

در صفحه نمایش موارد زیر را دریافت خواهیم کرد

نام و نام خانوادگی

فکر کنم این مثال واضح بود. به روش روی آوردیم تعداد()مجموعه های ستونی" MyTZ.Columns.Quantity()"، تعداد ستون ها را گرفت و یک حلقه با شمارنده از شروع کرد صفرقبل از تعداد ستون منهای یک. در داخل حلقه، هر ستون را از مجموعه ستون ها دریافت می کنیم و شی ستون فعلی را به یک متغیر اختصاص می دهیم ستون فعلیبعد، متغیر ستون فعلیبه ملک دسترسی پیدا می کنیم نامو مقدار این ویژگی را روی صفحه نمایش دهید: گزارش (CurrentColumn.Name);

مهم است که هرگز ویژگی یک شی و روش یک شی را اشتباه نگیرید.

یک ویژگی یک مقدار ثابت مشخص است و دسترسی به آن برای مثال بدون پرانتز نوشته می شود CurrentColumn.Name. یک متد در اصل یک رویه یا تابع یک شی است و فراخوانی رویه ها و توابع همیشه با پرانتز نوشته می شود (حتی اگر هیچ پارامتر ورودی وجود نداشته باشد). مثلا: MyTZ.Columns.Quantity()

اگر به روشی دسترسی داشته باشیم و نوشتن پرانتز را فراموش کنیم، مفسر 1C به ما پیغام خطا می دهد و کد را اجرا نمی کند. از آنجایی که مفسر در نظر خواهد گرفت که ما به یک متد دسترسی نداریم، بلکه به یک ویژگی دسترسی داریم - زیرا هیچ پرانتزی وجود ندارد. اما نمی تواند خواص با آن نام را پیدا کند (چون فقط یک متد با آن نام وجود دارد) - که در پیام خطا بیان می شود.

اگر فراموش کنم پرانتزها را به روشی نادرست در فراخوانی متد قرار دهم، مفسر این را می نویسد. MyTZ.Columns.Quantity(بدون پرانتز بعد از "Quantity()"):

فیلد شی پیدا نشد (تعداد)

در این مورد، "میدان" و "مخصوص" باید به عنوان مترادف یا نادرستی در اصطلاح توسعه دهندگان 1C درک شود. آنها از هر دوی این کلمات برای اشاره به یک مفهوم استفاده می کنند. اگرچه در سایر زبان های برنامه نویسی این اصطلاحات ممکن است به معنای متفاوت باشد.

به دست آوردن داده ها از جدول مقادیر 1C با استفاده از اعداد ستون

برای شروع، من یک مثال ساده از به دست آوردن داده ها از ردیف اول جدول را به شما پیشنهاد می کنم. لطفا توجه داشته باشید که ما از جدول از پیش پر شده از ابتدای مقاله استفاده می کنیم. ما با اطمینان می دانیم که جدول دارای یک ردیف اول و حداقل یک ستون است. اگر این مثال را روی یک جدول خالی اعمال کنیم، خطا رخ می دهد. بنابراین:

First Line = MyTK; // دریافت سطر اول (شمرده شده از صفر) FirstColumnValue = FirstRow; // مقدار ستون اول را دریافت کنید (شماره‌گذاری ستون‌ها نیز از ابتدا است) Report(Value of the FirstColumn); // نمایش مقدار اولین ستون در ردیف اول جدول

صفحه نمایش داده خواهد شد:

چاپایف

ابتدا، با دسترسی به جدول مقدار با استفاده از عملگر [...]، یک شی ردیف جدول مقدار به دست آوردیم. (اگر فراموش کرده اید که چگونه این کار را انجام دهید، می توانید به مقالات قبلی نگاه کنید) ما آرگومان "0" را در اپراتور پاس کردیم. این شاخص ردیف اول جدول ارزش است. First Line = MyTK;

علاوه بر این، ما همچنین حق دسترسی به یک شی رشته را با استفاده از عملگر [...] داریم. در داخل این عملگر، شماره ستون جدول مقدار، در این مورد نیز "0" را ارسال کردیم. و به این ترتیب، مقدار ستون شماره "0" را برای ردیف جدول فعلی با شماره "0" دریافت کردیم. ما این مقدار را روی صفحه نمایش می دهیم و نشان دهنده رشته "Chapaev" است.

بیایید مثال خود را کمی پیچیده تر کنیم:

First Line = MyTK; // دریافت خط اول (شماره از صفر) گزارش (FirstLine); // نمایش مقدار ستون اول در ردیف اول جدول Report(FirstRow); // نمایش مقدار ستون دوم در ردیف اول جدول Report(FirstRow); // مقدار ستون سوم را در ردیف اول جدول نمایش می دهد

اکنون مقادیر هر سه ستون ردیف اول جدول مقادیر خود را نمایش داده ایم:

چاپایف واسیلی ایوانوویچ

حالا این مثال را هم اصلاح می کنم تا بتوانیم بدون متغیر کار کنیم "خط اول"

گزارش (MyTZ)؛ // نمایش مقدار ستون اول در ردیف اول جدول Report(MyTZ); // نمایش مقدار ستون دوم در ردیف اول جدول Report(MyTZ); // مقدار ستون سوم را در ردیف اول جدول نمایش می دهد

روی صفحه نمایش هم همینطور خواهد بود

چاپایف واسیلی ایوانوویچ

در مثال بالا دیدیم که برای دسترسی به یک مقدار واقع در یک ردیف خاص و یک ستون خاص از یک جدول مقادیر، می توانیم از فراخوانی متوالی دو عملگر [...] به این شکل استفاده کنیم: جدول ارزش[شاخص ردیف] نمایه ستون]

بنابراین، ما آماده ایم یک حلقه ایجاد کنیم و داده های تمام سطرها و تمام ستون ها را با استفاده از شاخص های سطر و ستون دریافت کنیم:

برای RowCounter = 0 توسط MyTZ.Quantity() - 1 حلقه // چرخه در میان سطرها برای ColumnCounter = 0 توسط MyTZ.Columns.Quantity() - 1 حلقه // حلقه تو در تو در میان ستون ها // مقدار سلول را دریافت کنید (از ردیف فعلی و ستون های فعلی) CellValue = MyTK[RowCounter][ColumnCounter]; // نمایش شماره سطر، شماره ستون و مقدار سلول Report("Row No" + Row Count + "Column No" + Column Count + " = " + CellValue); چرخه پایان چرخه پایان

موارد زیر روی صفحه نمایش داده می شود:

خط شماره 0 ستون شماره 0 = چاپایف خط شماره 0 ستون شماره 1 = واسیلی خط شماره 0 ستون شماره 2 = ایوانوویچ خط شماره 1 ستون شماره 0 = دزرژینسکی خط شماره 1 ستون شماره 1 = فلیکس خط شماره 1 ستون شماره 2 = ادموندویچ خط شماره 2 ستون شماره 0 = کوتوفسکی خط شماره 2 ستون شماره 1 = گریگوری خط شماره 2 ستون شماره 2 = ایوانوویچ

با استفاده از دو چرخه، که یکی از آنها در دیگری تو در تو قرار دارد، ما مقادیر تمام ستون ها را از تمام ردیف های جدول مقدار 1C نمایش دادیم. در این مورد، ما از نام ستون‌ها استفاده نکردیم، بلکه به ستون‌ها و ردیف‌ها با نمایه‌هایشان دسترسی پیدا کردیم. برای درک بیشتر به نظرات داخل مثال توجه کنید.

در خاتمه، پیشنهاد می کنم مثال ما را کمی تغییر دهیم تا به جای اعداد ستون، نام آنها را روی صفحه نمایش دهد. و علاوه بر این، من یک طراحی قابل ارائه تر برای نمایش محتوا بر روی صفحه نمایش خواهم ساخت.

برای LineCounter = 0 توسط MyTZ.Quantity() - 1 Loop // Loop through rows Report(" ======= شماره خط. " + LineCounter + " ======="); برای گزارش (" "); // خوراک خط (درج خط خالی) برای ColumnCounter = 0 توسط MyTZ.Columns.Quantity() - 1 حلقه // حلقه تودرتو از طریق ستون ها // مقدار سلول را دریافت کنید (از ردیف فعلی و ستون فعلی) CellValue = MyTZ[RowCounter][ColumnCounter]; // نام ستون را دریافت کنید ColumnName = MyTZ.Columns[ColumnCounter].Name; // نمایش نام ستون و مقدار سلول Report(ColumnName + ": " + CellValue); چرخه پایان برای گزارش (" "); // تغذیه خط (درج یک خط خالی) EndCycle;

اکنون، در صفحه ما، اطلاعات ظاهراً نماینده‌تر به نظر می‌رسند:

خط شماره 0 ======= نام خانوادگی: چاپایف نام: واسیلی نام خانوادگی: ایوانوویچ ======= خط شماره 1 ======= نام خانوادگی: دزرژینسکی نام: فلیکس نام خانوادگی: ادموندویچ ===== == خط شماره 2 ======= نام خانوادگی: کوتوفسکی نام: گریگوری نام اختصاری: ایوانوویچ

بله تقریبا فراموش کردم هنگامی که از دو عملگر [...][...] در یک ردیف استفاده می کنیم، می توانیم نام این ستون را به جای نمایه ستون ارسال کنیم: ValueTable[RowIndex][ColumnName]

برای LineCounter = 0 توسط MyTZ.Quantity() - 1 Loop // Loop through rows Report(" ======= شماره خط. " + LineCounter + " ======="); برای گزارش (" "); // تغذیه خط (درج یک خط خالی) برای ColumnCounter = 0 توسط MyTZ.Columns.Quantity() - 1 حلقه // حلقه تودرتو از میان ستون ها ColumnName = MyTZ.Columns[ColumnCounter].Name; // نام ستون را دریافت کنیدCell Value = MyTZ[RowCounter][ColumnName]; //

به خط مشخص شده با فلش توجه کنید. در این خط به جای نمایه ستون فعلی، نام ستون فعلی را به آرگومان داخل پرانتز پاس می دهیم [...] نتیجه یکسان خواهد بود.

و اکنون، آخرین مورد در این مقاله.

به دست آوردن درست تمام داده ها از جدول مقدار 1C با استفاده از حلقه ها از طریق مجموعه ای از ردیف ها و مجموعه ای از ستون ها

برای هر خط جاری از حلقه MyTZ // حلقه از طریق مجموعه ای از رشته ها گزارش کنید(" ======= شماره خط. برای گزارش (" "); برای هر CurrentColumn From MyTZ.Columns Loop // حلقه تودرتو که از طریق مجموعه ای از ستون ها تکرار می شود ColumnName = CurrentColumn.Name; // نام ستون را دریافت کنیدCellValue = CurrentRow[ColumnName]; // مقدار سلول را با ستون NAME گزارش دریافت کنید(ColumnName + ": " + CellValue); // نمایش نام ستون و مقدار سلول End of Cycle. برای گزارش (" "); چرخه پایان

در مثال، از دو حلقه استفاده شده است. یک حلقه برای حلقه زدن از طریق مجموعه ای از ستون ها در داخل یک حلقه برای حلقه زدن در میان ردیف ها قرار دارد. اگر نمونه‌های بالا را بررسی کرده باشید و مقالات قبلی را مطالعه کرده باشید، در درک نحوه عملکرد این مثال مشکلی نخواهید داشت.

در نهایت، با حذف استفاده از متغیرهای میانی، تعداد خطوط کد در مثال آخرمان را تا حد امکان کاهش خواهم داد. ما نمونه ای از "کد صنعتی" را دریافت خواهیم کرد که در مشکلات واقعی استفاده می شود.

این کار فقط زمانی باید انجام شود که درک خوبی از کاری که انجام می دهید داشته باشید. اگر کد بسیار پیچیده است، می‌توان متغیرهای میانی را گذاشت تا بعداً درک کد خود را آسان‌تر کند. همچنین هر کدی باید حداقل به صورت کامنت نوشته شود تا پس از مدتی درک متون برنامه راحت تر شود.

برای هر خط جاری از چرخه MyTZ // تکرار روی ردیف گزارش (" ======= شماره خط. " + MyTZ.Index(CurrentLine) + " ======== + Symbols.PS); برای هر ستون جاری از MyTZ.Columns حلقه // تکرار بر روی ستون گزارش (CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); چرخه پایان برای گزارش (" "); چرخه پایان

خروجی روی صفحه نمایش تغییر نکرده است، مانند مثال قبلی باقی می ماند:

دوره 2 هفته ای

"برنامه نویسی در 1C برای مبتدیان"

دوره خواهد آمد پست الکترونیک. با انجام کارهای گام به گام به یک برنامه نویس تبدیل شوید.

برای شرکت فقط به کامپیوتر و اینترنت نیاز دارید

دسترسی رایگان به دوره:

Sp-force-hide (نمایش: هیچکدام؛).sp-form (نمایش: بلوک؛ پس‌زمینه: #eff2f4؛ بالشتک: 5 پیکسل؛ عرض: 270 پیکسل؛ حداکثر عرض: 100 درصد؛ شعاع حاشیه: 0 پیکسل؛ -moz-border -radius: 0px؛ -webkit-border-radius: 0px؛ font-family: Arial، "Helvetica Neue"، sans-serif؛ پس‌زمینه تکرار: بدون تکرار؛ پس‌زمینه موقعیت: مرکز؛ اندازه پس‌زمینه: خودکار؛) ورودی .sp-form (نمایش: بلوک درون خطی؛ کدورت: 1؛ دید: قابل مشاهده؛).sp-form .sp-form-fields-wrapper ( حاشیه: 0 خودکار؛ عرض: 260 پیکسل؛). -form-control ( پس‌زمینه: #ffffff؛ رنگ حاشیه: #cccccc؛ سبک حاشیه: جامد؛ پهنای حاشیه: 1 پیکسل؛ اندازه قلم: 15 پیکسل؛ بالشتک چپ: 8.75 پیکسل؛ بالشتک سمت راست: 8.75 پیکسل؛ حاشیه -radius: 4px؛ -moz-border-radius: 4px; -webkit-border-radius: 4px; height: 35px; عرض: 100%;).sp-form .sp-field label ( color: #444444; font- اندازه: 13 پیکسل؛ سبک قلم: معمولی؛ وزن قلم: پررنگ؛). پس‌زمینه رنگ: #f4394c؛ رنگ: #ffffff؛ عرض: 100%؛ وزن قلم: 700. سبک فونت: عادی. font-family: Arial، "Helvetica Neue"، sans-serif; box-shadow: هیچکدام; -moz-box-shadow: هیچکدام. -webkit-box-shadow: هیچ. پس‌زمینه: خطی-gradient (به بالا، #e30d22، #f77380؛).

درود به همه خوانندگان اینفاستارت. این مقاله بر روی موضوع ایجاد یک جدول سفارشی مقادیر در فرم یک برنامه مدیریت شده تمرکز خواهد کرد به صورت برنامه ای.

ویژگی های کار.

هرکسی که در یک برنامه معمولی برنامه‌نویسی کرده است، اغلب با وظیفه به دست آوردن یک جدول دلخواه از مقادیر روی یک فرم مواجه شده است. جدول مقادیر دلخواه جدولی است که تعداد و نوع ستون های آن از قبل مشخص نیست. یعنی ممکن است 3 ستون، یا شاید 6، یا شاید 8 ستون وجود داشته باشد. در یک برنامه معمولی، همه چیز ساده است: شما می توانید عنصر "جدول مقادیر" را در فرم پردازش قرار دهید و سپس جدول مقادیر ایجاد شده را منتقل کنید. به این عنصر به صورت برنامه ای سپس با یک دستور ساده:

Form Elements.TableField.CreateColumns();

یک جدول آماده از مقادیر روی فرم دریافت کنید. به نظر می رسد که می تواند ساده تر باشد.

این همه در برنامه معمولی بود. در یک برنامه مدیریت شده، همه چیز تغییر کرده است. ایجاد یک جدول دلخواه چندان آسان نیست. اکنون باید جدول مقادیر را در فرم به طور دقیق پارامتر کنید یا آن را به صورت برنامه ریزی شده ایجاد کنید (خوب، این را در واقع ماهیت خود برنامه مدیریت شده توصیف کنید). این چیزی است که ما سعی خواهیم کرد انجام دهیم: نرم افزاریک جدول سفارشی از مقادیر در یک فرم مدیریت شده ایجاد کنید.

راه حل مشکل.

اولین کاری که باید انجام دهیم این است که مشخص کنیم جدول چگونه روی فرم ظاهر می شود. نکته اصلی این است که شما نیازی به ایجاد هیچ عنصر فرمی در پردازش ندارید. ما آن را مانند کل جدول بصورت برنامه نویسی می سازیم. یعنی جدول در لحظه باز کردن فرم یا استفاده از یک دکمه - بسته به اینکه چه کسی به آن نیاز دارد - توصیف و ایجاد می شود.

ایجاد یک جدول در فرم از طریق توصیف جدول مقدار به عنوان یک ویژگی رخ می دهد:
SelectionTypeArray = آرایه جدید; آرایه SelectionType.Add(Type("Value Table")); ChoiceTypeDescription = New TypeDescription(ChoiceTypeArray); آرایه از جزئیات = آرایه جدید; Array of Attributes.Add(New Form Attributes("Schedule Table", Description of SelectionType، """، "TZN")); حال باید یک جدول مقدار برنامه ایجاد کنیم که حاوی داده ها باشد. اگر جدول مقادیر از یک پرس و جو بدست آید، همه چیز کم و بیش مرتب است. اگر جدول به صورت دستی ایجاد شود، می توان از طریق "توضیح انواع" معنای ستون هایی که حاوی اعداد یا تاریخ هستند ایجاد کرد. نکته این است که ستون های جدول مقادیر باید دارای نوعی باشند. به عنوان مثال، اگر انتظار می رود که کاربر داده ها را در این ستون ها به صورت تعاملی پر کند، نمی توانید یک ستون از جدول مقدار را به سادگی با یک نام اضافه کنید؛ باید یک نوع داشته باشد. به خاطر داشته باشید - این بسیار مهم است زیرا ... این انواع را به جدول روی فرم منتقل می کنیم.
ما یک جدول ایجاد می کنیم که شامل چندین ستون است:
CD = NewDateQualifiers (DateParts.Time); ArrayKD = آرایه جدید; ArrayCD.Add(Type("Date")); DescriptionTypesTime = New DescriptionTypes(ArrayCD,CD); TZ = New ValueTable;
TK.Columns.Add("With", DescriptionTypesTime);
TK.Columns.Add("قبل"، DescriptionTypesTime);
TK.Columns.Add("Name");
TK.Columns.Add("Note")؛ // نام کامل و یادداشت - ردیف ها بعد، جدول برنامه TK خود را با داده های لازم پر می کنیم. ما یک جدول TK دریافت می کنیم که حاوی مقادیر لازم است و آماده انتقال به ویژگی فرم ایجاد شده است. چرخه ستون ها برای هر ستون از TK

Array of Attributes.Add(New Form Attributes(Column.Name, Column.ValueType,"ScheduleTable"));
چرخه پایان
ChangeDetails (ArrayDetails)؛
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

این یک ترکیب ساده است و میز ما آماده است.

چرخه ستون ها برای هر ستون از TK

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Column.Name;
NewElement.Width = 10;
چرخه پایان

طراحی مشروط، اگر به آن نیاز داشته باشیم، آن را به صورت دستی نیز می نویسیم، منوی فرمان - به صورت دستی. دسته های جدول نیز با دست نوشته می شوند. به عنوان مثال، برای اضافه کردن یک کنترل کننده رویداد برای جدول "انتخاب":

جدول SelectionFields.SetAction("Selection","TZNSelection");

برای پردازش این رویداد، یک روش جداگانه در قالب یک رویه تجویز می شود:

&OnClient
رویه TKNSelection (TK، SelectedRow، Field، StandardProcessing)
//فرمانهای هندلر EndProcedure

توجه داشته باشید که کنترل کننده های جدول روی کلاینت شلیک می کنند و بنابراین باید یک دستور اشاره گر کامپایلر داشته باشند

&OnClient

خوب، آخرین چیزی که می خواستم اضافه کنم این است که بعد از تمام این مراحل، حتماً به یاد داشته باشید که جدول تمام شده را به ویژگی form منتقل کنید:

ValueВFormAttributes(ToR، "ScheduleTable");

این چیزی است که در نتیجه داریم:


و در اینجا نحوه رسیدگی به رویداد "انتخاب" است:



پس گفتار

امیدوارم این مقاله به برنامه نویسان 1C که شروع به ایجاد جداول روی یک فرم به صورت برنامه ای می کنند کمک کند.

می‌توانید پردازشی را دانلود کنید که به صورت برنامه‌ریزی یک جدول مقدار ایجاد می‌کند و آن را به خروجی می‌دهد فرم کنترل شدهبا نظراتی که به شما کمک می کند جداول خود را ایجاد کنید.

در اینجا یک واقعیت کوچک برای شروع وجود دارد - مثال های سادهکار با جدول مقادیر:

1. جدولی از مقادیر ایجاد کنید

ValueTable = New ValueTable;


2. ستون هایی برای جدول مقادیر ایجاد کنید:

ValueTable.Columns.Add("Name");
Value Table.Columns.Add("نام خانوادگی");


3. سطرهای جدید را با استفاده از نام ستون اضافه کنید:


NewLine.Name = "واسیلی";
NewLine.LastName = "Pupkin";


4. چگونه یک مقدار را در جدول مقدار جستجو کنیم:
لازم است یک ردیف جدول حاوی مقدار مورد نظر پیدا کنید.

FoundRow = ValueTable.Find(SearchValue);


5. اولین رخداد را در ستون های خاصی از جدول مقادیر بیابید

FoundRow = ValueTable.Find(SearchValue, "Supplier, Buyer");


6. اگر می‌خواهید همه رخدادها را در جدول مقادیر پیدا کنید:
ما از ساختار جستجو استفاده می کنیم.

SearchStructure = Structure("Employee", SearchValue);
آرایه FoundRows = ValueTable.FindRows(SearchStructure);


بیایید یک ساختار جستجو ایجاد کنیم که هر عنصر آن شامل نام ستون به عنوان یک کلید و مقدار مورد نظر در این ستون به عنوان یک مقدار باشد. ساختار جستجو را به عنوان پارامتر به متد FindLines() می دهیم. در نتیجه، ردیف های جدول را دریافت می کنیم.
اگر یک جستجو برای مقدار مورد نظر به ساختار جستجو اضافه کنید، به عنوان مثال، همچنین در ستون Responsible، در نتیجه اعمال متد FindLines() همه سطرهایی را دریافت می کنیم که در آن ها Employee و Responsible برابر هستند. ارزش جستجو شده

7. نحوه تکرار از طریق جدول مقادیر به ترتیب تصادفی

برای هر ردیف فعلی از جدول مقادیر حلقه
گزارش (CurrentRow.Name);
چرخه پایان

همین مورد با استفاده از شاخص ها:

SeniorIndex = ValueTable.Quantity() - 1;
برای Account = 0 تا SeniorIndex Cycle
گزارش(TableValues[Account].Name);
چرخه پایان


8. حذف یک ردیف جدول مقادیر موجود

ValueTable.Delete (ردیف که باید حذف شود);

بر اساس شاخص

ValueTable.Delete(0);


9. حذف یک ستون موجود از جدول مقدار

ValueTable.Columns.Delete(ColumnDeleted);


بر اساس شاخص

ValueTable.Columns.Delete(0);

لازم به در نظر گرفتن این است که حذف یک ردیف (یا ستون) "از وسط" جدول مقادیر منجر به کاهش یک عدد در شاخص های ردیف های واقع در "پس از" حذف می شود.

10. اگر نام ستون ها در متغیرها وجود داشته باشد، چگونه جدول مقادیر را پر کنیم؟

NewRow = ValueTable.Add();
NewRow[ColumnName] = مقدار;


11. چگونه کل ستون جدول ارزش را با مقدار مورد نظر پر کنیم؟
ستون Flag حسابداری مالی در جدول مقادیر جدول مقادیر باید با مقدار False پر شود.

جدول مقادیر. مقادیر را پر کنید (نادرست، "پرچم حسابداری مالی")؛


ما از متد FillValues() برای جدول مقدار استفاده می کنیم. اولین پارامتر مقداری است که باید پر شود. پارامتر دوم نام ستونی است که باید پر شود.

12. چگونه می توانم جدول مقدار "جدول گیرنده" را با داده های جدول ارزش "SourceTable" پر کنم؟

اگر جدول گیرنده هنوز در زمان عملیات وجود ندارد یا نیازی به ذخیره ستون های قبلی آن نیست، می توانید آن را به عنوان یک کپی کامل از نسخه اصلی ایجاد کنید.

جدول گیرنده = جدول منبع.Copy();


گزینه دو: جدول ReceiverTable وجود دارد و حیف است که ستون‌ها و محدودیت‌های آن در انواع داده‌های ستون از دست برود. اما باید داده های ستون هایی را که نام آنها با نام جدول منبع مطابقت دارد را پر کنید.

انتقال جزئی داده برای ستون هایی با نام های منطبق:

برای هر ردیف از SourceTable از چرخه SourceTable
FillPropertyValues ​​(NewRow، SourceTableRow);
پایان چرخه


برای هر ردیف در جدول مبدا، یک ردیف جدید به جدول مقصد اضافه می شود و مقادیر آن ستون ها پر می شود. میز جدید، که نام آنها با نام ستون های جدول منبع مطابقت دارد

اگر جدول‌ها ستون‌هایی با نام‌های یکسان نداشته باشند، جدول مقصد به تعداد سطرهایی که در جدول مبدا وجود داشت، حاوی ردیف‌هایی با مقادیر تهی خواهد بود.
اگر برای برخی از ستون‌های همنام، نوع مقدار داده از جدول مبدا در آرایه انواع ستون‌های مجاز جدول مقصد قرار نگیرد، مقادیر خالی در چنین فیلدهایی دریافت خواهیم کرد.
بیایید مورد سوم را در نظر بگیریم. در مورد ستون هایی با همین نام، ستون جدول مقصد باید با ستون جدول مبدا مطابقت کامل داشته باشد.

کپی کامل داده ها برای ستون هایی با نام های منطبق

همان ستون = آرایه جدید();

برای هر ستون از SourceTable.Columns Cycle
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

اگر MatchingColumn<>تعریف نشده سپس

// ویژگی های ستون را دریافت کنید.
نام = Column.Name;
ValueType = Column.ValueType;
Header = Column.Header;
Width = Column.Width;

// ستون ها را در جدول مقصد جایگزین کنید.
Index = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Index);
ReceiverTable.Columns.Insert(Index, Name, ValueType, Header, Width);

// نام بعدی ستون های منطبق را به آرایه اضافه کنید.
همان Columns.Add(Column.Name);

endIf;

چرخه پایان

// در ردیف های جدول منبع چرخش کنید.
برای هر ردیف از SourceTable از چرخه SourceTable

// اضافه کردن خط جدیدبه میز دریافت
NewRow = TableReceiver.Add();

// مقادیر را در سلول های منطبق پر کنید.
برای هر ستون نام از ستون هایی با همان نام چرخه
NewRow[ColumnName] = SourceTableRow[ColumnName];

چرخه پایان

چرخه پایان


باید ستونی را در جدول مقصد با ستون جدیدی جایگزین کنیم که ویژگی های آن کاملاً با ستون جدول مبدا مطابقت داشته باشد.
بنابراین، اگر ستونی به همین نام در جدول گیرنده یافت شود، تمام ویژگی های ستون جدید را در متغیرها جمع آوری می کنیم. بعد، قدیمی را حذف کنید و یک ستون جدید ایجاد کنید. سپس از میان ردیف های جدول منبع حلقه می زنیم.
در حلقه، یک ردیف جدید به جدول دریافت کننده اضافه می کنیم و یک حلقه روی نام ستون ها در آرایه ستون های منطبق باز می کنیم.
در داخل این حلقه تو در تو، سلول های جدول مقصد را با داده های سلول جدول مبدا پر می کنیم.

13. چگونه می توان ستون هایی را به جدول مقادیر "ValueTable" با محدودیت نوع اضافه کرد؟

هنگام اضافه کردن یک ستون، به سادگی می توانید نام آن را مشخص کنید و پارامتر دوم متد Add() را دست نخورده بگذارید. در این مورد، نوع داده ستون دلخواه است.

اضافه کردن یک ستون بدون تعیین نوع داده

// یک ستون بدون محدودیت در نوع اضافه کنید.
ValueTable.Columns.Add("Object");


می توانید مقدار پارامتر دوم را پر کنید. در آنجا باید شرحی از نوع مجاز برای ستون ارسال کنید. خود توضیحات را می توان با استفاده از سازنده به دست آورد، نام رشته نوع را به عنوان پارامتر به آن منتقل کرد (اگر انواع زیادی وجود دارد، با کاما از هم جدا شده اند) یا آرایه ای از انواع معتبر.

اضافه کردن ستونی که نوع داده را نشان می دهد

// محدودیت در انواع داده های ستونی:
// فقط عناصر دایرکتوری "Counterparties".
Table of Values.Columns.Add("Account", New Description of Types("DirectoryLink.Accounts"));


اگر در میان انواع مجاز برای پر کردن داده های ستون یک رشته است، می توانید عمق بیت (طول) آن را محدود کنید، استفاده از یک متغیر یا طول ثابت را مشخص کنید. همه اینها با ایجاد یک شی با استفاده از سازنده String Qualifiers به ​​دست می آید. در مرحله بعد، این شی به عنوان یکی از پارامترهای سازنده TypeDescription استفاده می شود.

استفاده از واجد شرایط برای تعیین نوع داده ستون جدول مقدار

// برای داده هایی از نوع String محدودیت هایی را آماده و تنظیم کنید.
String Qualifiers = New String Qualifiers(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


اقدامات مشابهی را می توان با توجه به واجد شرایط شماره و تاریخ انجام داد.
لطفاً توجه داشته باشید: توصیف‌های نوع می‌تواند توسط سازنده ساخته شود یا «از ابتدا» یا یک توصیف نوع موجود می‌تواند به عنوان پایه استفاده شود.

استفاده از اعلان‌های نوع موجود برای تعیین نوع داده ستون جدول مقدار

// گسترش توصیف نوع استفاده شده قبلی.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
Extended ValidTypes = New TypeDescription(ValidTypes, "Number, Date", Number Qualifiers, Date Qualifiers);

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