Процедурын функцийн параметрүүдийн 1c тоо. Процедур ба чиг үүргийн тодорхойлолт

25.06.2023

Тодорхойлолт:

Түлхүүр үгПроцедур нь эх текстийн хэсгийг эхлүүлдэг бөгөөд програмын модулийн аль ч газраас ProcedureName-ийг параметрийн жагсаалтаар зааж өгснөөр гүйцэтгэлийг эхлүүлж болно (хэрэв параметрүүдийг дамжуулаагүй бол хаалтанд оруулах шаардлагатай). Хэрэв ердийн хэрэглээний модульд байгаа бол модуль удирддаг програмэсвэл нийтлэг програмын модуль нь процедурын тайлбарын хэсэгт Export түлхүүр үгийг ашигладаг, энэ нь гэсэн үг энэ журамбусад бүх тохиргооны програм хангамжийн модулиудаас хандах боломжтой.

Return мэдэгдлийг гүйцэтгэх үед процедур дуусч хяналтыг дуудлагын цэг рүү буцаана. Процедурын текстээс Return оператор олдохгүй бол сүүлчийн гүйцэтгэгдэх операторыг гүйцэтгэсний дараа далд буцаах операторыг гүйцэтгэнэ. Процедурын програмын хэсгийн төгсгөлийг EndProcedure хэллэгээр тодорхойлно.

Хэсэг дэх процедурын үндсэн хэсэгт зарлагдсан хувьсагчууд нь энэ процедурын локал хувьсагчууд тул зөвхөн энэ процедурт боломжтой байдаг (бусад процедур, функц эсвэл аргуудыг дуудах үед тэдгээрийг параметр болгон дамжуулахаас бусад).

Синтакс:

Сонголтууд:

ProcName Процедурт нэр өгнө.Утга Дараах параметрийг утгаар дамжуулдаг, өөрөөр хэлбэл процедурыг гүйцэтгэх үед албан ёсны параметрийн утгыг өөрчлөх нь процедурыг дуудах үед дамжуулсан бодит параметрт нөлөөлөхгүй гэдгийг зааж өгөх нэмэлт түлхүүр үг. Хэрэв энэ түлхүүр үгийг заагаагүй бол процедурын параметрийг лавлагаагаар дамжуулдаг, өөрөөр хэлбэл процедур доторх албан ёсны параметрийн утгыг өөрчлөх нь харгалзах бодит параметрийн утгыг өөрчилнө.Param1 , ..., ParamN Албан параметрүүдийн заавал таслалаар тусгаарлагдсан жагсаалт. Албан ёсны параметрүүдийн утга нь процедурыг дуудах үед дамжуулсан бодит параметрүүдийн утгатай тохирч байх ёстой. Энэ жагсаалт нь процедурын текстэд ашиглагдаж байгаа параметр бүрийн нэрийг тодорхойлдог. Албан ёсны параметрүүдийн жагсаалт хоосон байж болно.Экспорт Програмын бусад модулиудаас уг процедурт хандах боломжтойг илтгэх нэмэлт түлхүүр үг.Зөвхөн энэ процедурын хүрээнд лавлаж болох локал хувьсагчдыг зарласан.// Operators Процедурын гүйцэтгэгдэх операторууд.Return Процедурын гүйцэтгэлийг дуусгаж, тухайн процедурыг дуудсан программын цэг рүү буцах нэмэлт түлхүүр үг. Хэрэглээ энэ операторынжурамд шаардлагагүй.EndProcedure Процедурын эх текстийн төгсгөл, процедурын төгсгөлийг илэрхийлэх шаардлагатай түлхүүр үг. Процедурыг дуудсан цэг рүү буцна уу.

Чиг үүрэг

Тодорхойлолт:

Function түлхүүр үг нь функцийн эх кодын хэсгийг эхлүүлдэг бөгөөд функцийн нэрийг зүгээр л параметрийн жагсаалтын хамт FunctionName-ийг зааж өгснөөр програмын модулийн аль ч газраас эхлүүлж болно (хэрэв параметрүүдийг дамжуулаагүй бол хаалтанд оруулах шаардлагатай). Хэрэв ердийн, удирддаг програм, гадаад холболт, сесс эсвэл ерөнхий програмын модуль нь функцийн мэдэгдлийн үндсэн хэсэгт Export түлхүүр үгийг ашигладаг бол энэ нь энэ функцбусад бүх тохиргооны програм хангамжийн модулиудаас хандах боломжтой.

Функцүүд нь зөвхөн буцаж ирдэгээрээ процедураас ялгаатай Буцах утга. Функцийн программын хэсгийн төгсгөлийг End of Function оператор тодорхойлно.

Програмын модулийн текстийн аль ч функцын дуудлагыг процедурын дуудлага хэлбэрээр бичиж болно, өөрөөр хэлбэл хэл нь функцээс хүлээн авахгүй байхыг зөвшөөрдөг. буцах утга.

Хэсэг дэх функцын биед зарласан хувьсагч Орон нутгийн хувьсагчийн мэдэгдлүүд, нь энэ функцийн локал хувьсагчууд тул тэдгээр нь зөвхөн энэ функцэд байдаг (бусад процедур, функц эсвэл аргуудыг дуудахдаа параметр болгон дамжуулахаас бусад тохиолдолд).

Синтакс:

Сонголтууд:

FunctionName Функцид нэр өгнө.Утга Дараах параметрийг утгаар дамжуулдагийг зааж өгөх нэмэлт түлхүүр үг, i.e. Функцийг гүйцэтгэх үед албан ёсны параметрийн утгыг өөрчлөх нь функцийг дуудах үед дамжуулсан бодит параметрт ямар ч нөлөө үзүүлэхгүй. Хэрэв энэ түлхүүр үгийг заагаагүй бол функцийн параметрийг лавлагаагаар дамжуулдаг, өөрөөр хэлбэл функц доторх албан ёсны параметрийн утгыг өөрчлөх нь харгалзах бодит параметрийн утгыг өөрчлөх болно.Param1 , ..., ParamN Албан параметрүүдийн заавал таслалаар тусгаарлагдсан жагсаалт. Албан ёсны параметрүүдийн утгууд нь функцийг дуудах үед дамжуулсан бодит параметрүүдийн утгатай тохирч байх ёстой. Энэ жагсаалт нь функцийн текстэд ашиглагдаж байгаа параметр бүрийн нэрийг тодорхойлдог. Албан ёсны параметрүүдийн жагсаалт хоосон байж болно.=DefValue Параметрийн өгөгдмөл утгын нэмэлт тохиргоо. Анхдагч утга бүхий параметрүүдийг албан ёсны параметрүүдийн жагсаалтын аль ч хэсэгт байрлуулж болно.Экспорт Бусад программ модулиудаас уг функцэд хандах боломжтойг илтгэх нэмэлт түлхүүр үг.// Орон нутгийн хувьсагчийн мэдэгдлүүдЗөвхөн энэ функц дотор лавлаж болох локал хувьсагчдыг зарласан.// Operators Функцийн гүйцэтгэх операторууд.Буцах Буцах утгаФункцийн гүйцэтгэлийг зогсоож, тухайн функцийг ашиглаж буй илэрхийлэлд заасан утгыг буцаадаг түлхүүр үг. Буцах утга нь функцийг дуудсан үр дүнг агуулсан илэрхийлэл эсвэл хувьсагч байж болно.EndFunction Функцийн эх текстийн төгсгөлийг илэрхийлэх шаардлагатай түлхүүр үг.

Суурилуулсан 1С: Аж ахуйн нэгжийн хэл нь параметрүүдийг процедур, функцэд дамжуулах хоёр аргыг дэмждэг: параметрүүдийг лавлагаагаар дамжуулах, параметрүүдийг утгаараа дамжуулах.

Анхдагч байдлаар, суурилуулсан 1C: Enterprise 8 хэл дээр параметрүүдийг лавлагааны дагуу процедур, функцүүдэд дамжуулдаг. Энэ нь процедур эсвэл функц доторх албан ёсны параметрийн өөрчлөлт нь процедур эсвэл функцийг дуудах үед дамжуулсан бодит параметрийн утгад тусгагдана гэсэн үг юм.


Процедур1(Албан параметр1)

FormalParameter1 = 2 * 3;

Төгсгөлийн процедур

ActualParameter = 10;
Процедур1(Бодит Параметр);

// 6-р утгыг харуулах болно - албан ёсны өөрчлөлт
// процедурын доторх параметр нь өөрчлөлтөд нөлөөлсөн

// процедурын дуудлага: анхдагчаар параметрүүдийг дамжуулдаг
// холбоос!

Параметрүүдийг утгаар дамжуулах

Параметрийг дуудагдсан процедур эсвэл функцэд утгаараа дамжуулах үед процедур эсвэл функц доторх албан ёсны параметрийн утгыг өөрчлөх нь процедур эсвэл функцийг дуудах үед дамжуулсан бодит параметрт ямар ч нөлөө үзүүлэхгүй. Параметрийг утгаар дамжуулах ёстойг зааж өгөх нь Value түлхүүр үгийг ашиглан хийгддэг.

Жишээ:


Процедурын журам2(Утга албан ёсны параметр1)

FormalParameter1 = 2 * 3;

Төгсгөлийн процедур

ActualParameter = 10;
Процедур2(Бодит параметр);

// 10 утгыг харуулах болно - албан ёсны өөрчлөлт
// процедурын доторх параметр нь өөрчлөлтөд НӨЛӨӨЛӨӨГҮЙ
// үед дамжуулсан бодит параметрийн утга
// процедурын дуудлага: параметрийг утгаар дамжуулсан!
Тайлан (бодит параметр);

Хувьсагчдыг дамжуулах онцлог янз бүрийн төрөлөгөгдөл утгаараа

Төрөл бүрийн өгөгдлийн төрлийн хувьсагчдыг утгаараа дамжуулах нь өөрийн гэсэн шинж чанартай байдаг. Эдгээр нь албан ёсны параметрүүдийн контекстийн арга, шинж чанаруудтай ажиллах үед процедур эсвэл функцийг дуудах үед дамжуулсан бодит параметрийн төлөв өөрчлөгдөж болно гэсэн үг юм.

Утгаар дамжуулсан процедурын параметр нь утгын хүснэгт болох нөхцөл байдлыг жишээ болгон авч үзье. Дуудагдсан ProcessTable() процедурын дотор утгын хүснэгтийн шинэ жишээ үүсгэгдэж, түүнд гурван мөр нэмэгдэнэ. Энэ нь ProcessTable() процедурыг дуудах үед бодит параметр болгон дамжуулсан Tz утгын хүснэгтийн төлөвт ямар ч байдлаар нөлөөлөхгүй.


Процедурын үйл явцын хүснэгт (Хүснэгтийн утга)


TableValue = Шинэ TableValue;

// Утгын хүснэгтэд хоёр багана нэмнэ
TableValue.Columns.Add("Багана1");
TableValue.Columns.Add("Багана2");


n = 1-ээс 3 хүртэлх мөчлөгийн хувьд
NewRow = TableValue.Add();
NewRow.Column1 = "Багана";
NewRow.Column2 = p;
Төгсгөлийн мөчлөг;

Төгсгөлийн процедур

// Утгын шинэ хүснэгт үүсгэх
Tz = Шинэ утгын хүснэгт;



// Утгын хүснэгтэд хэдэн мөр нэмнэ
n = 1-ээс 10 хүртэлх мөчлөгийн хувьд
NewLine = Tz.Add();

NewRow.Column3 = p;
Төгсгөлийн мөчлөг;

// 10 гэсэн утга гарч ирнэ


ProcessTable(Tz);

// 10 гэсэн утга гарч ирнэ: ProcessTable процедурын дотор
// албан ёсны параметрт утгуудын шинэ хүснэгт хадгалагдсан

Утгаар дамжуулсан процедурын параметр нь утгуудын хүснэгт болох нөхцөл байдлыг жишээ болгон авч үзье. Дуудагдсан CollapseTable() процедурын дотор процедурыг дуудах үед параметр болгон дамжуулсан утгуудын хүснэгтийг хумисан болно:


// TableValue параметрийг утгаар дамжуулж байгааг харуулж байна
Процедурын нуралтын хүснэгт(Хүснэгтийн утга)

// Утгын хүснэгтийг 1 ба 3 багана баганаар буулгана
TableValue.Collapse("Багана1", "Багана3");

Төгсгөлийн процедур

// Утгын шинэ хүснэгт үүсгэх
Tz = Шинэ утгын хүснэгт;

// Утгын хүснэгтэд гурван багана нэмнэ
Tz.Columns.Add("Багана1");
Tz.Columns.Add("Багана2");
Tz.Columns.Add("Багана3");

// Утгын хүснэгтэд хэдэн мөр нэмнэ
n = 1-ээс 10 хүртэлх мөчлөгийн хувьд
NewLine = Tz.Add();
NewRow.Column1 = "Багана1";
NewRow.Column2 = "Багана2";
NewRow.Column3 = p;
Төгсгөлийн мөчлөг;

// 10 гэсэн утга гарч ирнэ
Тайлан("ToR-д задрахаас өмнөх элементүүдийн тоо: " + ToR.Quantity());

// Бодит Тз параметрийг утгаар дамжуулж процедурыг дууд
CollapseTable(Tz);

// Утгын хүснэгтийг буулгасан: 1-ийн утга хэвлэгдэх болно
Тайлан("Хуулбарын дараах элементүүдийн тоо: " + ТоР.Тоо хэмжээ());

Тиймээс энэ тохиолдолд бодит параметрийг утгаараа дамжуулснаар утгын хүснэгтийн хуулбарыг үүсгэсэнгүй. Бид утгын хүснэгтийн шинж чанар, аргуудтай ажиллахдаа CollapseTable() процедурыг дуудах үед ашигласан утгын хүснэгтийн шинж чанар, аргуудтай ажилладаг.

Процедур эсвэл функцийн параметрийг лавлагаа эсвэл утгаар дамжуулахад бүх төрлийн ялгаа нь бодит процедур эсвэл функцийн параметрт шинэ утга оноогдсон явдал юм. Бодит параметрийн контекст шинж чанар, аргуудыг дуудах нь хэрэв байгаа бол энэ нь лавлагаа эсвэл утгаараа дамжуулагдсан эсэхээс үл хамааран албан ёсны параметрт нөлөөлдөг.

Энэ нийтлэл нь "1С хөгжүүлэх эхний алхамууд" цуврал нийтлэлийг үргэлжлүүлж байна. Энэ нь дараах асуултуудыг шийдвэрлэх болно.

  • Процедур, функц гэж юу вэ, тэдгээрийг хэзээ ашиглах ёстой вэ?
  • Процедур ба функц хоёрын ялгаа юу вэ?
  • Процедурын (функц) параметр гэж юу вэ, түүнийг хэрхэн дамжуулах вэ?
  • Ямар тохиолдолд параметрийг лавлагаагаар дамжуулж, аль нь утгаараа дамжуулдаг вэ?
  • Одоогийн модулийн процедурын жагсаалтыг хэрхэн хурдан харах вэ?

Хэрэглэх чадвар

Энэ материал нь 1C: Enterprise 8 платформын 8.2 хувилбарт бүрэн хамааралтай болно. болон 8.3.

Процедур ба чиг үүрэг

Ерөнхий алгоритмуудыг тусдаа процедур, функцүүдэд шилжүүлж болно. Нэг програмын кодыг өөр өөр модулиас (зарим төрлийн нийтлэг алгоритм) зарим модулийн процедур эсвэл функц руу шилжүүлж, түүнд хандах нь үндэслэлтэй юм.

Үүний зэрэгцээ бид кодын давхардлаас салж, үүнийг процедурын (функц) дуудлагаар сольдог. Хэрэв алгоритмд өөрчлөлт оруулах шаардлагатай бол эдгээр өөрчлөлтийг нэг дор хийхэд хангалттай.

Үүнээс гадна процедур, функцууд нь програмын кодыг унших чадварыг нэмэгдүүлдэг. Ялангуяа процедурын дуудлагууд утга учиртай нэртэй байвал код юу хийж байгааг харахад илүү хялбар болно.

Үүний үр дүнд хэрэглээний шийдлийн засвар үйлчилгээ хялбаршуулсан болно.

Шинэхэн хөгжүүлэгчид заримдаа процедур эсвэл функцийг нэрлэхдээ нөөц үг ашиглахыг оролддог гэдгийг тэмдэглэх нь зүйтэй Гүйцэтгэх.

Эдгээр зорилгоор нөөцлөгдсөн үгсийг ашиглах боломжгүй бөгөөд мэдээжийн хэрэг энэ тохиолдолд систем алдааны талаар мэдээлэх болно.

Процедураас ялгаатай нь функц нь буцах утгатай байж болно. Функцийн үндсэн хэсэгт утгыг буцаахын тулд та операторыг ашиглах хэрэгтэй Буцахмөн буцаах утгыг зааж өгнө.

Процедур нь функцээс ялгаатай нь буцах утгатай байж болохгүй. Үүнийг зүгээр л дуудаж, зарим үйлдлийг гүйцэтгэдэг.

Хэрэв функцэд түлхүүр үг байхгүй бол Буцах, дараа нь энэ нь байхгүй утгыг буцаана, i.e. өгөгдлийн төрлийн утга Тэмдэглэгдээгүй. Гэсэн хэдий ч түлхүүр үг БуцахПроцедурт мөн ашиглаж болно, гэхдээ энэ тохиолдолд буцах утгыг заагаагүй бөгөөд түлхүүр үг нь өөрөө: процедурыг гүйцэтгэхээ боль гэсэн утгатай болно.

Процедур эсвэл функцийг үгээр дүрсэлж эхэлдэг Процедур(Функц). Дагасан Процедурын нэр(функцүүд). Нэрийн ард заавал хаалтанд бичнэ. Тайлбарласан параметрүүдийг хаалтанд багтааж болно.

Дуудлага хийх үед (процедурыг дуудах үед) эдгээр параметрүүдийг дамжуулах шаардлагатай болно. Хаалтны ард үг орж болно Экспорт(экспортын функц).

Дараа нь процедурын (функц) биеийг дагадаг, i.e. дурын тооны операторын дараалал.

Үндсэн хэсэг нь энэ модулийн бусад процедур, функцууд эсвэл одоогийн програмын модулиас хандах боломжтой бусад модулиудын дуудлага агуулж болно. Эцсийн үг хэлэх шаардлагатай Төгсгөлийн процедур(Төгсгөлийн функц).

Процедур эсвэл функцийг тайлбарласны дараа цэг таслал хэрэглэх шаардлагагүй. Үүний зэрэгцээ модуль дахь сүүлийн процедурын (функц) дараа цэгтэй таслал гарч ирвэл Платформ үүнийг алдаа гэж үзэхгүй.

Гэсэн хэдий ч цаг хугацаа өнгөрөхөд програмистын үйлдлийн үр дүнд энэ процедур (функц) сүүлчийнх биш байж магадгүй бөгөөд дараа нь алдааны мэдэгдэл гарч ирнэ. Процедур ба функцийн ойролцоо дүрсийг зурагт үзүүлэв.

Процедурыг дуудах үед (функц) дамжуулсан параметрүүдийг функцийн буцаасан үр дүнг үүсгэх эсвэл процедурт ашиглах алгоритмыг сонгоход ашиглаж болно.

Процедур эсвэл функцийг тайлбарлахдаа бид зарим параметрийн хувьд анхдагч утгыг ашиглах ёстойг зааж өгч болно. Үүнийг хийхийн тулд шаардлагатай утгыг параметрийн баруун талд тэнцүү тэмдгээр зааж өгнө.

Процедурыг (функцийг) дуудах үед параметрийн утгыг заагаагүй бол анхдагч утгыг авна.

Тиймээс, дуудлага хийхдээ анхдагч утгаараа заасан параметрүүдийг сонгох боломжтой. Процедурын (функц) тайлбарт эхлээд шаардлагатай параметрүүдийг, дараа нь нэмэлт параметрүүдийг дагаж мөрдөнө.

Үүнээс гадна параметрүүдийг лавлагаа болон утгаараа дамжуулдаг. Процедур (функц) дотор параметрийг шинжилж, өөрчлөх боломжтой. Бүх өгөгдөл энд хадгалагдана санамсаргүй хандалт санах ойкомпьютер.

Тэдгээр. процедурыг (функцийг) дуудах үед бид нэг утгатай параметрийг дамжуулсан бөгөөд дуудагдсан процедур (функц) гүйцэтгэсний дараа параметрийн утга өөрчлөгдсөн.

Утгаар дамжих тохиолдолд параметрийг утгаар дамжуулахыг зааж өгсөн болно.

Энэ тохиолдолд өмнөхөөсөө өөр санах ойн шинэ талбар дуудагдах бөгөөд энэ нь өөрчлөгддөг. Параметрийн анхны утга өөрчлөгдөхгүй.

Анхдагч байдлаар, бүх параметрүүдийг лавлагаагаар дамжуулдаг. Параметрийг утгаараа дамжуулахын тулд процедурын тайлбарт параметрийн өмнө түлхүүр үгийг оруулах хэрэгтэй Утга.

Зарим зохицуулагчийн процедур зэрэг параметрийг дамжуулдаг гэж хэлэх ёстой Татгалзах. Энэ параметрийн анхдагч утга нь Худлаа.

Хэрэв та тохируулагчийн процедурын биед энэ параметрутга учир Үнэн, дараа нь процедур ажиллахгүй болно.

1C: Enterprise 8 модулийн процедур, функцүүдийн дараалал хамаагүй. Модулийн аль ч процедураас (функц) та энэ модулийн бусад процедур эсвэл функцийг дуудаж болно.

Тохируулагч самбар дээрх одоогийн модулийн процедурын жагсаалтад хандахын тулд та "PROC" гэсэн бичээс бүхий томруулдаг шил хэлбэртэй товчлуур дээр дарж эсвэл халуун товчлууруудыг ашиглаж болно ( Ctrl+Alt+P).

Функцуудыг тодорхойлсон харилцах цонх нээгдэнэ F(x)болон журам P(). Тэдэнтэй холбогдох боломжтой.

Жагсаалтыг цагаан толгойн үсгийн дарааллаар эрэмбэлэх боломжтой (үүнийг "Ангилах" нүдийг шалгана уу).

Сонголтгүй тохиолдолд процедур, функцуудыг модуль дахь дарааллын дагуу жагсаалтад байрлуулна.

Жагсаалтад байгаа журам, функцүүдээс гадна өөр өөр модулиудад өөр өөр стандарт зохицуулагчийг ашиглах боломжтой болно. Хулганаа давхар товшиж зохицуулагчийг сонгоход модульд харгалзах процедурын загвар (үйл явдал зохицуулагч) үүсдэг.

Хэрэв та Процедурууд ба Функцууд харилцах цонхноос процедурыг сонгоод дээр дарна уу Яв, дараа нь бид сонгосон процедурын (функц) эхэнд өөрсдийгөө олох болно.

"PROC" гэсэн шошгоны баруун талд талбар байна. Энэ талбар нь одоогийн процедурын (функц) нэрийг заана.

Процедур, функцуудтай анх танилцсаныг бид бүрэн гүйцэд гэж үзэх болно. Гэсэн хэдий ч, платформ нь олон стандарт журам, функцуудыг агуулдаг бөгөөд логикийг та өөрөө бичих шаардлагагүй гэдгийг бид тэмдэглэж байна. Шаардлагатай тохиолдолд програмын кодын зөв газар руу залгахад л хангалттай. Эдгээрийг судалж байна стандарт шинж чанаруудБид дараагийн нийтлэлдээ энэ тухай ярих болно :)

"Цоо тавих" тухай дүр эсгэсэн тайлбарын төлөө би урьдчилан хүлцэл өчье, гэхдээ бид таныг ямар нэгэн байдлаар нийтлэлд татан оруулах хэрэгтэй байна)) Миний хувьд хийсвэр нь таны хүлээлтийг хангаж байгаа эсэхийг шалгахыг хичээх болно.

Товчхондоо бид юу ярьж байна

Хүн бүр үүнийг аль хэдийн мэддэг, гэхдээ эхэнд би аргын параметрүүдийг 1С-д хэрхэн дамжуулж болохыг сануулах болно. Тэдгээрийг "лавлагаа" эсвэл "үнэ цэнээр" дамжуулж болно. Эхний тохиолдолд бид дуудлага хийх цэгтэй ижил утгыг, хоёрдугаарт, хуулбарыг нь арга руу шилжүүлдэг.

Анхдагч байдлаар, 1С-д аргументуудыг лавлагаагаар дамжуулдаг бөгөөд аргын доторх параметрийн өөрчлөлт нь аргын гаднаас харагдах болно. Энд асуултын цаашдын ойлголт нь "параметрийн өөрчлөлт" гэсэн үгийг яг юу ойлгож байгаагаас хамаарна. Тэгэхээр, энэ нь дахин томилгоо гэсэн үг бөгөөд өөр зүйл байхгүй. Түүнээс гадна, даалгавар нь далд байж болно, жишээлбэл, гаралтын параметрт ямар нэг зүйлийг буцаадаг платформын аргыг дуудаж болно.

Гэхдээ хэрэв бид параметрээ лавлагаагаар дамжуулахыг хүсэхгүй байгаа бол параметрийн өмнө түлхүүр үг зааж өгч болно. Утга

Procedure ByValue(Value Parameter) Параметр = 2; EndProcedure Параметр = 1; Үнээр(Үзүүлэлт); Тайлан (параметр); // 1 хэвлэнэ

Бүх зүйл амласан ёсоороо ажилладаг - параметрийн утгыг өөрчлөх (эсвэл "орлуулах") нь аргын гаднах утгыг өөрчлөхгүй.

За, ямар онигоо вэ?

Бид анхдагч төрлүүдийг (мөр, тоо, огноо гэх мэт) параметрүүдийг биш харин объект болгон дамжуулж эхлэхэд сонирхолтой мөчүүд эхэлдэг. Энд объектын "гүехэн", "гүн" хуулбарууд, мөн заагч (C++ хэлээр биш, харин хийсвэр бариулууд) гэх мэт ойлголтууд гарч ирдэг.

Объектыг (жишээлбэл, утгын хүснэгт) лавлагаагаар дамжуулахдаа бид заагч утгыг өөрөө (тодорхой бариул) дамжуулдаг бөгөөд энэ нь тухайн объектыг платформын санах ойд "барьдаг". Утгаар дамжих үед платформ энэ заагчийг хуулбарлах болно.

Өөрөөр хэлбэл, объектыг лавлагаагаар дамжуулж, параметрт "Массив" гэсэн утгыг оноож өгвөл дуудлагын цэг дээр бид массив хүлээн авах болно. Лавлагаагаар дамжуулсан утгыг дахин хуваарилах нь дуудлагын байршлаас харагдана.

Procedure ProcessValue(Parameter) Параметр = Шинэ массив; EndProcedure Table = Шинэ утгын хүснэгт; ProcessValue(Хүснэгт); Тайлан(ValueType(Хүснэгт)); // Массив гаргана

Хэрэв бид объектыг үнэ цэнээр дамжуулвал бидний утгын хүснэгт алдагдахгүй.

Объектын агуулга ба төлөв

Утгаар дамжих үед объектыг бүхэлд нь хуулахгүй, зөвхөн түүний заагчийг хуулна. Объектын жишээ ижил хэвээр байна. Объектыг лавлагаа эсвэл утгаараа хэрхэн дамжуулж байгаа нь хамаагүй - утгын хүснэгтийг арилгах нь хүснэгтийг өөрөө цэвэрлэх болно. Энэ цэвэрлэгээ хаа сайгүй харагдах болно, учир нь... Зөвхөн нэг объект байсан бөгөөд энэ нь яг яаж арга руу шилжих нь хамаагүй.

Procedure ProcessValue(Parameter) Parameter.Clear(); EndProcedure Table = Шинэ утгын хүснэгт; Хүснэгт.Нэмэх(); ProcessValue(Хүснэгт); Тайлан(Хүснэгт.Тоо хэмжээ()); // 0 гаргана

Объектуудыг аргууд руу дамжуулах үед платформ нь заагчаар ажилладаг (С++-ийн шууд аналог биш нөхцөлт). Хэрэв объектыг лавлагаагаар дамжуулсан бол санах ойн байршил виртуал машинЭнэ объект байрладаг 1С-ийг өөр объектоор дарж бичиж болно. Хэрэв объектыг утгаараа дамжуулсан бол заагчийг хуулж, объектыг дарж бичих нь санах ойн байршлыг эх объекттой дарж бичихэд хүргэдэггүй.

Үүний зэрэгцээ аливаа өөрчлөлт мужобъект (цэвэрлэх, шинж чанар нэмэх гэх мэт) нь тухайн объектыг өөрчилдөг бөгөөд объектыг хэрхэн, хаана шилжүүлсэнтэй огт хамаагүй. Объектын жишээний төлөв өөрчлөгдсөн, үүнд олон тооны "лавлагаа" болон "утга" байж болох ч жишээ нь үргэлж ижил байна. Объектыг арга руу дамжуулснаар бид бүхэл бүтэн объектын хуулбарыг үүсгэдэггүй.

Энэ нь үргэлж үнэн байдаг, зөвхөн ...

Үйлчлүүлэгч-серверийн харилцан үйлчлэл

Платформ нь серверийн дуудлагыг маш ил тод хэрэгжүүлдэг. Бид зүгээр л аргыг дуудаж, платформ нь аргын бүх параметрүүдийг цуваа болгож (мөр болгон хувиргаж), серверт дамжуулж, дараа нь гаралтын параметрүүдийг клиент рүү буцаадаг бөгөөд тэдгээр нь цуваа тайлагдав. хэрэв тэд хэзээ ч серверт очиж байгаагүй бол.

Та бүхний мэдэж байгаагаар бүх платформ объектуудыг цуваа болгох боломжгүй. Энд хязгаарлалт нэмэгдэж байна: бүх объектыг үйлчлүүлэгчээс серверийн арга руу шилжүүлэх боломжгүй. Хэрэв та цувааждаггүй объектыг дамжуулбал платформ муу үгсийг ашиглаж эхэлнэ.

  • Програмистын зорилгын талаар тодорхой мэдэгдэл. Аргын гарын үсгийг харснаар аль параметрийг оруулах, аль нь гаралт болохыг тодорхой хэлж чадна. Энэ кодыг унших, хадгалахад хялбар байдаг
  • Сервер дээрх "лавлагаагаар" параметрийн өөрчлөлтийг үйлчлүүлэгчийн дуудлагын цэг дээр харагдахын тулд pӨгүүллийн эхэнд тайлбарласан зан төлөвийг хангахын тулд платформ нь өөрөө сервер рүү линкээр дамжуулсан параметрүүдийг заавал буцааж өгөх болно. Хэрэв параметрийг буцаах шаардлагагүй бол ачаалал ихсэх болно. Өгөгдлийн солилцоог оновчтой болгохын тулд гаралтанд утга нь хэрэггүй параметрүүдийг Value гэсэн үгээр тэмдэглэх хэрэгтэй.

Хоёрдахь цэг энд анхаарал татаж байна. Траффикийг оновчтой болгохын тулд параметрийг Value гэсэн үгээр тэмдэглэсэн бол платформ нь параметрийн утгыг үйлчлүүлэгч рүү буцаахгүй. Энэ бүхэн гайхалтай, гэхдээ энэ нь сонирхолтой үр дүнд хүргэдэг.

Би аль хэдийн хэлсэнчлэн объектыг сервер рүү шилжүүлэх үед цуваажилт үүсдэг, жишээлбэл. объектын "гүн" хуулбарыг гүйцэтгэдэг. Тэгээд үг байвал Утгаобъект серверээс үйлчлүүлэгч рүү буцаж очихгүй. Бид эдгээр хоёр баримтыг нэмээд дараахь зүйлийг олж авна.

&OnServerProcedureByLink(Параметр) Параметр.Clear(); EndProcedure &OnServerProcedureByValue(Value Parameter) Parameter.Clear(); EndProcedure &OnClient Procedure ByValueClient(Value Parameter) Parameter.Clear(); EndProcedure &OnClient Procedure CheckValue() List1= Шинэ ЖагсаалтынҮнэ; List1.Add("сайн уу"); Жагсаалт2 = Жагсаалт1.Хуулбар(); Жагсаалт3 = Жагсаалт1.Хуулбар(); // объектыг бүрэн хуулж, // сервер рүү шилжүүлж, дараа нь буцаана. // жагсаалтыг арилгах нь дуудлагын цэг дээр харагдаж байна ByRef(List1); // объектыг бүрэн хуулсан, // сервер рүү шилжүүлсэн. Энэ нь эргэж ирэхгүй. // Жагсаалтыг арилгах нь ByValue(List2)-г дуудах үед ҮЗЭХГҮЙ; // зөвхөн объект заагчийг хуулсан // жагсаалтыг арилгах нь ByValueClient(List3) руу залгах цэг дээр харагдана; Тайлан(Жагсаалт1.Тоо хэмжээ()); Тайлан(Жагсаалт2.Тоо хэмжээ()); Тайлан(Жагсаалт3.Тоо хэмжээ()); Төгсгөлийн процедур

Дүгнэлт

Товчхондоо үүнийг дараах байдлаар дүгнэж болно.

  • Лавлагаагаар дамжуулснаар огт өөр объекттой объектыг "дарж бичих" боломжийг олгодог
  • Утгаар дамжуулснаар объектыг "дарж бичих" боломжийг олгодоггүй боловч объектын дотоод төлөвт гарсан өөрчлөлтүүд харагдах болно, учир нь Бид ижил объектын жишээтэй ажиллаж байна
  • Серверийн дуудлага хийх үед тухайн объектын ӨӨР НЭГДСЭН тохиолдлуудтай ажил хийгддэг, учир нь Гүнзгий хуулбарыг гүйцэтгэсэн. Түлхүүр үг Утгасерверийн инстанцыг үйлчлүүлэгчийн инстанц руу буцааж хуулахаас урьдчилан сэргийлэх бөгөөд сервер дээрх объектын дотоод төлөвийг өөрчлөх нь үйлчлүүлэгч дээр ижил төстэй өөрчлөлт оруулахгүй.

Энэхүү энгийн дүрмийн жагсаалт нь "үнэ цэнэ" ба "лавлагаагаар" параметрүүдийг дамжуулахтай холбоотой хамтран ажиллагсадтайгаа маргааныг шийдвэрлэхэд хялбар болгоно гэж найдаж байна.

1С дахь 1С функцууд ба процедурууд нь бусад хэлтэй төстэй ажилладаг - функц нь програмын код дахь бусад газраас дуудлага хийх нэртэй дэд програм юм.

Модуль дахь функцийн мэдэгдлийн дараалал нь дур зоргоороо байдаг (өөрөөр хэлбэл модулийн хамгийн эхэнд байрлах процедурын текстэнд та энэ модулийн доод хэсэгт байрлах процедурыг ашиглаж болно). Үүний нэгэн адил 1С функцийг экспортлох боломжтой.

1С функц ба процедурын гүйцэтгэлээс "гарах" тулд "Буцах" командыг ашиглана уу. Функц (процедураас ялгаатай нь) тооцооллын үр дүнг "буцааж өгдөг", өөрөөр хэлбэл та "VALUE буцаах;" гэж бичих хэрэгтэй. 1С функцууд нь бичигдээгүй бөгөөд энэ нь утгыг буцаах боломжтой гэсэн үг юм янз бүрийн төрөл, параметр эсвэл нөхцлөөс хамааран.

Функц нь тооцооллын үр дүнг буцаах чадвараараа процедураас ялгаатай, жишээлбэл:

Функц функц1(параметр)
Буцах параметр * 2;
Төгсгөлийн функц

Хувьсагч1 = Функц1(10);
//Хувьсагч1 нь 20-той тэнцүү байх болно

1С функц ба процедурын параметрүүд нь дуудлагын сайт дээр байгаа хувьсагчдын лавлагаа юм. "Холбоос" гэдэг нь хэрэв та 1С функцийн "дотор" параметрийн утгыг өөрчилбөл "гадна" гэсэн утгатай. Үүнээс сэргийлэхийн тулд параметрийг VARIABLE утгаар дамжуулдаг. Гэсэн хэдий ч, энэ нь утгын объектуудтай (жагсаалт, хүснэгт, мэдээллийн сангийн объект) ажиллахгүй бөгөөд тэдгээр нь лавлагаагаар дамжуулагдах болно.

Процедур/функцэд параметр дамжуулах үед түүнийг "лавлагаагаар" дамжуулдаг. Энэ нь процедурын дотор үүнийг өөрчилснөөр 1С функц дууссаны дараа хандах үед түүний утгыг өөрчилнө гэсэн үг юм. Тиймээс өмнөх жишээг дараах байдлаар бичиж болно.

Процедурын журам1(параметр)
Параметр = Параметр * 2;
Төгсгөлийн процедур

Хувьсагч1 = 10;
Процедур1(Хувьсагч1);
Тайлан (Хувьсагч1);
//Үр дүн нь 20 болно

Хувьсагчийн утгыг хувьсагчаас илүү процедурт шилжүүлэхийн тулд:

Процедур1(VALUE параметр)
// үйлдлүүд..
Төгсгөлийн процедур

Объектуудтай (лавлах, баримт бичиг) ажиллахдаа тэдгээрийг 1С функц / 1С процедурын дотор хийж болно гэдгийг санах хэрэгтэй.
Хэрэв 1С функц/1С процедур нь хэд хэдэн параметртэй бол шаардлагагүй параметрийг алгасаж (дунд хэсэгт байгаа параметр байхгүй бол таслалыг зааж өгснөөр), тодорхойгүй (доороос харна уу) эсвэл үндсэн утгыг дамжуулж болно.

Функц функц1(Параметр1, Параметр2, Параметр3 = "Мөрийн утга")
//Бид ямар нэг зүйл хийдэг
Төгсгөлийн функц

//Зарим параметргүй функцийг дуудах
//параметр2 нь Undefined-тэй тэнцүү байх болно
//параметр3 нь "мөр утга"-тай тэнцүү байх болно
функц1(10);

//Хоёр дахь параметргүй функцийг дуудна
Функц1(10, "Утга");

Өмнө дурьдсанчлан, 1С процедурыг хэрэглэгч маягттай (нээх, хаах, товчлуурыг дарах гэх мэт) эсвэл платформын үйл ажиллагаа (эхлэх, дуусгах гэх мэт) харьцах үед тохиолддог үйл явдлын зохицуулагч болгон ашигладаг. Маягт зохицуулагч эсвэл маягтын элементүүдийн боломжит төрлүүдийг шинж чанаруудаас харж болно - харгалзах маягтын элемент дээр дарж (болон шинж чанаруудын цонхыг доош гүйлгэж). Объектын модуль дахь зохицуулагчийн төрлийг тохируулагчийн самбар дээрх унадаг жагсаалтыг ашиглан харж болно - энд тодорхойгүй, аль хэдийн тодорхойлогдсон үйл явдлын жагсаалтыг харуулдаг. Өөр өөр үйл явдал нь зохицуулагчийг нэмэх үед өөр өөр параметртэй байдаг, 1C автоматаар параметрийн жагсаалтыг бичдэг.