ExpressionScript-ийн жишээнүүд
From LimeSurvey Manual
Бүтэц
Нийтлэлийн эхний хэсэгт илэрхийллийг юунд ашиглаж болох, илэрхийллийг хаанаас олох/нэмэх талаар тайлбарлана. Хоёр дахь хэсэгт илэрхийллийг хэрхэн ашиглах жишээнүүдийг толилуулна.
Илэрхийллийн ангилал
LimeSurvey илэрхийллийг дараах зорилгоор ашигладаг:
Ач холбогдол
Зорилго: Асуултын бүлэг/асуултыг нуух
Ач холбогдол нь асуултын бүлэг эсвэл асуултыг харуулах эсвэл нуухыг хянадаг. Илэрхийллийн үр дүн "үнэн" (өөрөөр хэлбэл 1) бол элемент харагдана. Үгүй бол (илэрхийллийн үр дүн "худал" (өөрөөр хэлбэл 0) бол) элемент нуугдана.
Баталгаажуулалт
Зорилго: Асуулт/дэд асуулт/хариулт дээрх оролт/үйлдлийг баталгаажуулах
Баталгаажуулалт нь respondent-ын асуулт эсвэл үйлдэлд оруулсан утга хүчинтэй эсэхийг хянадаг. Хэрэв илэрхийллийн үр дүн "true" (өөрөөр хэлбэл 1) бол элемент болон баталгаажуулалтын мессежид "good" класс хэрэглэгдэнэ. Үгүй бол, хэрэв илэрхийллийн үр дүн "false" (өөрөөр хэлбэл 0) бол элемент болон баталгаажуулалтын мессежид "error" класс хэрэглэгдэнэ. Эдгээр классуудын загварыг template.css' файлд зарлаж болно.
Текст гаралт
Зорилго: (Ямар нэг зүйл хийж) текст гаргах
Илэрхийллийг текст гаргахад ашиглаж болно. Жишээлбэл, ямар нэг зүйлийг шалгах эсвэл тооцоолж, шалгалт эсвэл тооцооллын үр дүнгээс хамааруулан гаралтыг тодорхойлж болно. Мөн илэрхийллийг ашиглахаас өмнө ашигласан асуултын асуултын текст, хариулт, асуултын төрөл зэргийг оруулахад ашиглаж болно. Текст гаралтыг текст харагдах бүх газарт ашиглаж болох бөгөөд ямар ч төрлийн үр дүн буцааж чадна.
| Хэрэглээний тохиолдол | Тодорхойлолт |
|---|---|
| Микро тохируулга | Текстийг тохируулах, жишээлбэл өмнө асуусан хүйсийн асуултаас хамааран "Ноён" эсвэл "Хатагтай" гэж бичих |
| Тооцоолол | Утгыг тооцоолж гаргах, жишээлбэл "Таны гэр бүлийн орлого xxx байна" |
| Лавлагаа | Элементээс текст оруулах, жишээлбэл "Таны нэр xxx. Та хэдэн настай вэ?" |
Хариулт хадгалах
Зорилго: (Ямар нэг зүйл хийж,) (текст гаргаж) мэдээллийн санд ямар нэг зүйлийг хадгалах
Тэгшитгэл асуултын төрөл-ийг мэдээллийн санд ямар нэг зүйл хадгалахад ашиглаж болно. Илэрхийллээр ямар нэг зүйл хийж, Тэгшитгэл асуултыг (текст харуулах асуулттай төстэй) харуулж, илэрхийллийн үр дүнг мэдээллийн санд хадгалах боломжтой. Энэ нь хариултыг responses хүснэгтэд хадгална. Дараа нь үр дүнг статистикийн боломжид ашиглаж болно, мөн LimeSurvey-ийн экспортын функцээр өгсөн форматуудын аль нэгээр импортолж болно.
Илэрхийллийн жишээнүүд
Өмнөх асуултын хариултыг оруулах
Нуугдмал тэгшитгэл асуултаар хариултыг автоматаар бөглөх
Асуудал: Танд Q1 ба Q2 гэсэн хоёр асуулт байна гэж бодъё. Q1 нь respondent-уудаас насыг нь асууна. Q2 нь respondent-уудыг гурван бүлэгт хуваана: нас 20-оос доош, нас 20, нас 20-оос дээш. Иймд Q2 нь дээрх нөхцөлүүдэд харгалзах "1", "2", "3" утгуудыг ашиглах ёстой. Мөн Q2-ыг үл үзэгдэх болгохоо мартаж болохгүй (асуулт судалгаанд харагдахгүй боловч утгууд нь "арын процесс"-оор responses хүснэгтэд хадгалагдана).
Тэгшитгэл асуултын төрлөөр мэдээллийн санг бөглөх:
- Эхлээд Q1 кодтой асуултыг Тоон оролт асуултаар үүсгэнэ.
- Дараа нь Q2 кодтой өөр асуултыг тэгшитгэл асуултаар үүсгэнэ.
- Q2-ын "Дэлгэцийн тохиргоо" таб хэсэгт:
- "Энэ асуултийг нуу" талбарыг "On" болгож тохируулна
- "Equation" талбарт дараах илэрхийллийг бичнэ:
{if(Q1.NAOK < 20, "1", if(Q1.NAOK > 20, "3", "2"))}
Placeholder ашиглан хураангуй хуудас үүсгэх
Энэ заавар нь судалгааны төгсгөлд ExpressionScript placeholder-уудаар бүх асуулт, хариултыг жагсаасан тойм хэрхэн үүсгэхийг харуулна. Мөн ийм тоймыг зөвхөн хариулсан асуултуудаар хэрхэн хязгаарлахыг харуулна.
Манай жишээг эндээс татаж авах боломжтой: Судалгааны орлуулагчийн судалгааны жишээ.
Энд ашиглагдаж буй асуултын төрлүүд:
1. Ганцхан асуултыг сонгох / ганц текст/тоон асуултууд
- Жагсаалт (буудаг)
- жагсаалт (радио ) [L]
- Тийм/Үгүй [Y]
- Үнэгүй урт текст [T]
- Богино үнэгүй текст [S]
- Тоон оролт [N]
- Тэгшитгэл [*]
2. Дэд асуулттай асуулт
- Олон тооны богино текст [Q]
- Олон сонголт [M]
- Хүснэгт [F]
- хүснэгт (тимй/ үгүй / тодорхойгүй ) [C]
- Массив (10 онооны сонголт) [B]
3. 2 хуваарьтай асуултууд
- давхар хуваарь бүхий хүснэгт [1]
4. X ба Y хуваарьтай асуултууд
- Хүснэгт (тоо) [:]
5. масктай асуулт
- дэлгэцэнд текст харагдана [X]
Энэ энгийн жишээнд манай тойм нь дараах хэлбэртэй энгийн жагсаалт байна:
- Асуултын текст: Хэрэглэгчийн хариулт
Ганцхан асуултыг сонгох / ганц текст/тоон асуултууд
Эдгээр бүх асуултын төрлийн хувьд LimeSurvey нэг хариулт хадгалдаг:
- Жагсаалт (буудаг)
- жагсаалт (радио )
- Тайлбартай жагсаалт
- 5 онооны сонголт
- Тийм/Үгүй
- Богино үнэгүй текст
- Үнэгүй урт текст
- Асар том үнэгүй текст
- Тоон оролт
- Тэгшитгэл
- Огноо
- Хүйс
Асуултын код нь q1 гэж үзвэл, асуултын текст болон хариултыг дараах байдлаар дуудаж болно:
- {q1.question}: {q1.shown}
Жишээ:
- Таны нас хэд вэ?: 25
Тухайн асуултад хариулсан эсэхийг шалгахыг хүсвэл гаралтаа IF илэрхийллээр хүрээлж болно:
{if(!is_empty(q1),join("- ",q1.question,": ",q1.shown),"")}
Үүнийг дараах байдлаар "орчуулж" болно: ХЭРВЭЭ q1 кодтой асуулт хоосон биш бол "- " БОЛОН асуултын текст БОЛОН ": " БОЛОН хариултын текстийг гаргана (join() функц элементүүдийг шинэ мөр болгон нэгтгэдэг); ҮГҮЙ БОЛ: юу ч гаргахгүй ("" нь хоосон мөр гэсэн үг).
Дэд асуулттай асуулт
Эдгээр бүх асуултын төрлийн хувьд LimeSurvey дэд асуулт ашигладаг:
- Олон тооны богино текст
- Олон сонголт
- Тайлбартай олон сонголт
- Хүснэгт
- Массив (5 онооны сонголт)
- Массив (10 онооны сонголт)
- хүснэгт (тимй/ үгүй / тодорхойгүй )
- хүснэгт (өсөх / тэнцэх / буурах )
- баганан хүснэгт
Асуултын код нь q2, дэд асуултууд нь SQ001, SQ002 гэж дугаарлагдсан (LimeSurvey автоматаар дугаарладаг) гэж үзвэл, асуултын текст болон хариултыг дараах байдлаар дуудаж болно:
- {q2_SQ001.question}: {q2_SQ001.shown}
- {q2_SQ002.question}: {q2_SQ002.shown}
Олон сонголттой асуултын хувьд сонгосон дэд асуултын текстийг харуулахын оронд сонгосон сонголт бүрт Y гэж харуулах нь утга учиртай:
- {q2_SQ001.question}: {q2_SQ001}
- {q2_SQ002.question}: {q2_SQ002}
...
Одоогоор дэд асуулттай асуултуудын асуултын текстийг гаргах боломжгүй гэдгийг анхаарна уу, энэ боломжийн хүсэлтийг үзнэ үү.
Жишээ 1 (асуултын төрөл нь олон сонголт гэж үзвэл)
- Та эдгээр машины брэндүүдийг мэдэх үү?
-- Mercedes: Y
-- Audi: N
-- Volvo: Y
Хэрэв зөвхөн сонгосон зүйлсийг гаргахыг хүсвэл гаралтынхаа эргэн тойронд IF илэрхийлэл ашиглаж, чекбоксын утгыг шалгаж болно:
{ if( q2_SQ001=="Y", join( "- ", q2_SQ001.question, ": ", q2_SQ001.shown ), "" ) }
Хэрэв зөвхөн сонгосон зүйлсийн жагсаалтыг гаргахыг хүсвэл listifop функцийг ашиглана уу, жишээлбэл: Mercedes, Volvo
{ listifop( 'value', '==', 'Y', 'question', ', ', that.q2.sgqa ) }
Энд that.q2 нь q2-ын бүх дэд асуулт болж өргөжнө. Дэлгэрэнгүйг self, this болон that хэсгээс үзнэ үү.
Жишээ 2 (асуултын төрөл нь Массив (10 онооны сонголт) гэж үзвэл)
- Доорх машины брэндүүдийн чанарыг 1=маш муу, 10=маш сайн гэсэн хэмжүүрээр үнэлнэ үү?
-- Mercedes: 7
-- Audi: 9
-- Volvo: 9
Хэрэв зөвхөн үнэлгээ өгсөн зүйлсийг гаргахыг хүсвэл гаралтынхаа эргэн тойронд IF илэрхийлэл ашиглаж, одоогийн дэд асуултад хариулсан эсэхийг дараах байдлаар шалгаж болно:
{ if( ! is_empty( q3_SQ001 ), join( "- ", q3_SQ001.question, ": ", q3_SQ001.shown ), "" ) }
Жишээлбэл, зөвхөн наймаас илүү үнэлгээтэй сонгосон зүйлсийн жагсаалтыг гаргахыг хүсвэл listifop функцийг ашиглана уу, жишээлбэл: Audi / Volvo
{ listifop( 'value', '>', 8, 'question', ' / ', that.q3.sgqa ) }
Хоёр шаталбартай асуулт
Дараах кодуудыг ашиглаж байна гэж үзье:
- Асуултын код: q4
- Дэд асуултын кодууд: SQ001, SQ002, ...
- Хариултын код, шаталбар нэг: A1, A2, ...
- Хариултын код, шаталбар 2: B1, B2, ...
Гурав дахь дэд асуулт ба хоёр дахь шаталбарын хариултад хандах жишээ: q4_SQ003_1 - 4-р асуулт, 3-р дэд асуулт, хоёр дахь шаталбар.
Хоёр шаталбарын үр дүнг эхний хоёр дэд асуултаар гаргая:
- {q4_SQ001_0.question}: {q4_SQ001_0.shown} / {q4_SQ001_1.shown}
- {q4_SQ002_0.question}: {q4_SQ002_0.shown} / {q4_SQ002_1.shown}
Дэд асуултын текстийг гаргахын тулд placeholder-т шаталбарын ID-г нэмэх шаардлагатай (хоёр шаталбарт текстүүд адил байдаг ч). Тиймээс {q4_SQ001.question}-ийн оронд {q4_SQ001_0.question} эсвэл {q4_SQ001_1.question}-ийг ашиглана.
Хэрэв дор хаяж нэг хариулттай дэд асуултуудын үр дүнг зөвхөн экспортлох/харуулахыг хүсвэл дэд асуулт бүрт дараах синтаксийг ашиглана уу:
{if(count(q4_SQ001_0,q4_SQ001_1)>0,join("- ",q4_SQ001_0.question,": ",q4_SQ001_0.shown," / ",q4_SQ001_1.shown),"")}
X ба Y хүрээтэй асуулт
Энэ нь нүд болгонд хариулт өгөх боломжтой (өмнө үзүүлсэн шиг зөвхөн мөр болгонд биш) бүх матриц асуултад хамаарна:
- Хүснэгт (текст)
- Хүснэгт (тоо)
Ашигласан кодууд гэж үзье:
- Асуултын код: q5
- Дэд асуултын кодууд: SQ001, SQ002, ...
- Хариултын кодууд: A1, A2, ...
Тодорхой нэг баганын тодорхой дэд асуултын хариултыг лавлахын тулд QuestionCode . '_' . SubQuestionCode . '_' . AnswerCode хэлбэрийг ашиглах хэрэгтэй. Жишээ нь, гурав дахь дэд асуултын хоёр дахь баганын хариултыг лавлахдаа: q5_SQ003_A2.
Эхний хоёр дэд асуултын 1-3-р баганын хариултуудыг гаргаж үзье:
- {q5_SQ001_A1.question}: {q5_SQ001_A1.shown} | {q5_SQ001_A2.shown} | {q5_SQ001_A3.shown}
- {q5_SQ002_A1.question}: {q5_SQ002_A1.shown} | {q5_SQ002_A2.shown} | {q5_SQ002_A3.shown}
Эдгээр асуултын төрөлд нүд бүр (X тэнхлэг ба Y тэнхлэгийн хослол) нэг хариултын сонголттой тэнцүү тул нүд бүрт өгөгдөл байгаа эсэхийг шалгах шаардлагатай. Жишээ:
{if(!is_empty(q5_SQ001_A1),join("- ",q5_SQ001_A1.question,": ",q5_SQ001_A1.shown),"")}
Өмнөх асуултын хариулт хоосон бол асуултыг нуух
| Зорилго | Өмнөх асуултын хариулт хоосон бол асуултыг нуух |
| Төрөл | Асуултын хамаарал |
| Жишээ | Нэгдүгээр асуулт: асуултын код "name", асуултын текст "Таны нэр хэн бэ?" Хоёрдугаар асуулт: асуултын текст "{name}, та хэдэн настай вэ?" Хийх зүйл: Нэгдүгээр асуултын текстийн талбар хоосон бол хоёрдугаар асуултыг нуух |
| Илэрхийлэл | !is_empty(name) |
| Тодорхойлолт | is_empty() нь хувьсагч хоосон гэж тооцогдох эсэхийг тодорхойлдог. "!" нь үр дүнг урвуулна. Тиймээс хувьсагч хоосон биш бол илэрхийлэл үнэн болж, асуулт харагдана |
| Алхмууд | Хоёрдугаар асуултыг үүсгэх/засах "Холбогдох тэгшитгэл" талбарт "!is_empty(name)" гэж оруулна |
| Жишээ файл | Hide_question_if_empty_question_group.zip |
![]()
| |
Өмнөх асуултын хариулт Тийм эсвэл Үгүй бол асуултын бүлгийг нуух
| Зорилго | Өмнөх асуултын хариулт Тийм эсвэл Үгүй бол асуултын бүлгийг нуух |
| Төрөл | Асуултын бүлгийн хамаарал |
| Жишээ | Нэгдүгээр хуудас, нэгдүгээр асуултын бүлэг, нэгдүгээр асуулт: асуултын код "PET", асуултын текст "Танд гэрийн тэжээвэр амьтан байдаг уу?" -Тийм -Үгүй Хоёрдугаар хуудас, хоёрдугаар асуултын бүлэг: Гарчиг "Таны тэжээвэр амьтан(ууд)ын тухай" Хийх зүйл: Нэгдүгээр асуултын хариулт Тийм/Үгүй байхаас хамааран хоёрдугаар асуултын бүлгийг харуулах/нуух |
| Илэрхийлэл | PET == "Y" |
| Тодорхойлолт | PET нь хариултыг нь шалгах асуултын асуултын код юм. Хэрэв дагавар ашиглахгүй бол EM нь "Qcode.code"-ийг ашиглана. Тэгэхээр та PET асуултын хариултын кодыг "Y" утгатай харьцуулж байна. Хэрэв оролцогч "Тийм" гэж хариулбал илэрхийлэл үнэн болж, "Таны тэжээвэр амьтан(ууд)ын тухай" асуултын бүлэг харагдана. |
| Алхмууд | Хоёрдугаар асуултын бүлгийг үүсгэх/засах "Холбогдох тэгшитгэл" талбарт "PET == "Y"" гэж оруулна |
| Жишээ файл | Hide_question group_if_answer_from_previous_question_is_Yes_or_No.zip |
![]()
| |
Олон хариулттай асуултын талбарын утгыг харуулах
| Зорилго | Олон хариулттай асуултын талбарын утгыг харуулах |
| Төрөл | Лавлагаа |
| Жишээ | Нэгдүгээр асуулт: асуултын код "AskChildAge", асуултын текст "Таны хүүхдүүд хэдэн настай вэ?". Дэд асуултын кодууд -Child1 -Child2 -Child3 - ChildXXX Хоёрдугаар асуулт: асуултын код "ReportChildAge", асуултын текст "Таны эхний хүүхдийн тухай: - CHILD1 нь AGE1 настай." |
| Илэрхийлэл | {AskChildAge_Child1.question}, {AskChildAge_Child1.value} |
| Тодорхойлолт | Та дэд асуултын утгыг дараагийн асуултад ашиглахыг хүсч байна. Дэд асуултын утгыг ийм төрлийн илэрхийллээр авч болно: QcodeQuestion_QcodeSubquestion.value |
| Алхмууд | Хоёрдугаар асуултыг үүсгэх/засах Тодорхойлолтод энэ текстийг оруулна: "Таны эхний хүүхдийн тухай: - {AskChildAge_Child1.question} нь {AskChildAge_Child1.value} настай." |
| Жишээ файл | Display_value_of_a_multiple_answer_input_question_field.zip |
| |
"Хүснэгт (тоо) Checkbox" асуултад мөр бүрт чагталсан нүдний тоог баталгаажуулах
| Зорилго | Мөр бүрт чагталсан нүдний тоог баталгаажуулах |
| Төрөл | Баталгаажуулалт |
| Жишээ | "Хүснэгт (тоо) (check box төлөвлөгөө)" төрлийн асуулт |
| Илэрхийлэл | sum(...) |
| Тодорхойлолт | (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) нь A мөрөнд наад зах нь X checkbox чагтлагдсан эсэхийг тодорхойлно. Хэрэв гурван мөрийг (A, B, C) бүгдийг шалгахыг хүсвэл илэрхийллийг "&&" ашиглан холбож болно: (sum(Test_A_1, Test_A_2, Test_A_3, Test_A_4, Test_A_5) <= X) && (sum(Test_B_1, Test_B_2, Test_B_3, Test_B_4, Test_B_5) <= X) && (sum(Test_C_1, Test_C_2, Test_C_3, Test_C_4, Test_C_5) <= X) |
| Алхмууд | "Хүснэгт (тоо) (check box төлөвлөгөө)" төрлийн асуултыг үүсгэх/засах. Дээрх илэрхийллийг асуултын нарийвчилсан тохиргоо дахь "асуултын батламжилсан тэгшитгэлл" талбарт оруулна (хувьсагчийн нэрийг өөрчлөх шаардлага гарч магадгүй!). |
| Жишээ файл | Validate number of boxes ticker per row for an Array (Numbers) Checkbox.lss |
![]()
| |
Хоёр огнооны зөрүүг тооцоолох
| Зорилго | Хоёр огнооны зөрүүг тооцоолох |
| Төрөл | Хамаарал / Тэгшитгэл асуултын төрөл / Баталгаажуулалт |
| Жишээ | Нэгдүгээр асуулт (огноо/цаг, код: DOB): Таны төрсөн огноо хэзээ вэ? Хоёрдугаар асуулт (огноо/цаг, код: datetoday): Өнөөдөр хэдэн сарын хэд вэ? Гуравдугаар асуулт (boilerplate): Та XXXX хоногтой болсон байна. Хийх зүйл: 1-р асуултад өгсөн огноо болон 2-р асуултын хоорондох хоногийн тоог тооцоолж харуулах. |
| Илэрхийлэл | {(strtotime(datetoday)-strtotime(DOB))/60/60/24} |
| Тодорхойлолт | strtotime нь 1970 оны 1-р сарын 1-ээс өгөгдсөн огноо хүртэлх секундийн тоог тооцоолно. Дээрх илэрхийлэл нь өгөгдсөн хоёр огнооны хоорондох секундийн тоог тооцоолно. "/60/60/24" гэсэн хэсэг нь секундийн тооноос хоногийн тоог гаргана. "datetoday"-г асуухын оронд strtotime('now') эсвэл зүгээр л time()-г ашиглаж болно. Эдгээр нь 1970 оны 1-р сараас одоог хүртэл (өөрөөр хэлбэл судалгаа бөглөсөн цаг хүртэл) өнгөрсөн секундийн тоог шууд буцаана. Ингэснээр {(time() - strtotime(DOB)) / 60 / 60 / 24 / 365.25} тэгшитгэлээр хүний насыг жилээр хурдан тооцоолж болно. Аль ч тохиолдолд огноог зөв форматаар оруулах нь чухал, эс тэгвээс strtotime() функц зөв ажиллахгүй. |
| Алхмууд | Хоёр огноотой асуулт (төрсөн огноо болон өнөөдрийн огноо) болон нэг boilerplate асуулт үүсгэнэ. Boilerplate асуултын асуултын текстэд дараахыг оруулна: "{datetoday}-д та {(strtotime(today)-strtotime(dob))/60/60/24} хоногтой байсан." Анхаарна уу: strtotime функц олон боловч бүх огнооны форматтай ажиллаж чадахгүй. Асуудал гарвал судалгааныхаа өдрийг форматлах тохиргоог mm/dd/yyyy эсвэл yyyy-mm-dd эсвэл dd.mm.yyyy болгож тохируулна уу" |
| Жишээ файл | Date_difference.zip |
| |
Үнэлгээнд ExpressionScript ашиглах
Энд хүснэгт төрлийн асуултууд болон үнэлгээнд ExpressionScript-ийг хэрхэн ашиглах өөр нэг жишээ байна:</ br>
Танд 2 хүснэгт асуулт байгаа бөгөөд тооцооллын үр дүнг өгөгдлийн санд хадгалахыг хүсэж байна гэе. Үнэндээ энэ нь энгийн: хүснэгтүүдээ үүсгэж, туршиж, ажиллаж байгаа эсэх болон дуусгавар хуудсанд үр дүн гарч байгааг шалгахын тулд туршилтын хариулт илгээх хэрэгтэй.
Хэрэгжүүлэх дэлгэрэнгүй:
- тэгшитгэл төрлийн асуулт нэмнэ
- Q1 нь таны хүснэгт асуултын код, Q2 нь хоёр дахь нь гэж үзээд дараах мөрийг нэмнэ:
{sum(Q1_SQ001.value,Q2_SQ001.value)}
SQ001 нь дэд асуулт бүрийн анхдагч код гэдгийг анхаарна уу. Хэрэв дэд асуултын кодыг өөрчилбөл дээрх тэгшитгэлийг зохих ёсоор тохируулна уу.
Хүснэгтэд em_validation_q ашиглах
Та асуултын батламжилсан тэгшитгэл-ийг ашиглан хүснэгтийг дурын нөхцөлөөр хянаж болно.
Хэрэгжүүлэх дэлгэрэнгүй:
- эхний хүснэгт : нэг сонголттой хүснэгт
- Асуултын код нь ARRAY
- Дэд асуултын кодууд нь SQ01,SQ02,SQ03 болон SQ04
- Асуулт бүхэлдээ хамрах баталгаажуулах тэгшитгэлийг шинэчилж дараахыг оруулна
!is_empty(ARRAY_SQ01) and !is_empty(ARRAY_SQ03)
- хоёр дахь хүснэгт : текстийн хүснэгт
- Асуултын код нь ARRAYTEXT
- Y тэнхлэг дээрх дэд асуултын кодууд нь SY01,SY02,SY03, болон SY04
- Асуулт бүхэлдээ хамрах баталгаажуулах тэгшитгэлийг шинэчилж дараахыг оруулна
count(self.sq_SY01 >= 1) and count(self.sq_SY03 >= 3)








