1c аж ахуйн нэгж 8.2 энгийн жишээ. Татаж авах боломжтой бүтээгдэхүүн яагаад илүү дээр вэ


Цахим номыг дараахь зүйлийг агуулсан архив хэлбэрээр тараана.

  • номыг өөрөө болон SunRav BookReader програмыг хоёуланг нь багтаасан ажиллуулах боломжтой exe-файл
  • номонд нэмэлт материал бүхий каталог.
  • номыг Windows дээр уншихаар төлөвлөж байна

Ном 1С: Аж ахуйн нэгж 8.1. Хөгжлийн энгийн жишээ  нь 1С платформ дээр алгоритм хөгжүүлэх энгийн жишээг харуулсан лавлах гарын авлага юм. Аж ахуйн нэгж 8.1.

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

Ном 1С: Аж ахуйн нэгж 8.1. Хөгжлийн энгийн жишээ  ашиглах сэдвээр бүлэглэсэн олон тооны практик жишээг агуулдаг.

Хэрэглээний шийдлийг боловсруулахад туслахын тулд тайлбарласан жишээнүүдийн кодыг номонд хавсаргасан болно. Жишээнүүдийн кодыг 1S: Enterprise 8. текст загвар файл хэлбэрээр өгөв. Энэ файлыг ямар ч тохиргоонд холбож, хулганаар чирж, буулгаж болно.

Номын төлбөрийг баталгаажуулсны дараа танд дараахь зүйлийг авах болно.

* Adobe Digital Editions уншигч ашиглан компьютер дээрээ .epub файл уншихыг зөвлөж байна. Бусад програмтай хамт уншиж байхдаа хоёр хуудсыг нэгэн зэрэг үзүүлэх боломжийг олгодог харах горимыг ашиглахыг зөвлөдөггүй - олон тооны зурагнаас болж буруу дэлгэц хийх боломжтой юм.

Татаж авах боломжтой бүтээгдэхүүн яагаад илүү дээр вэ?

Хүргэлтийн төлбөр төлөх шаардлагагүй, та өдрийн аль ч үед сэтгүүлийг хоёр товшилтоор хүлээн авдаг;

Татаж авах хурд нь зөвхөн таны холболтын боломжоос хамаарна, татан авалтын менежерүүд дэмжигддэг;

Хэрэв танд худалдан авалт хийхэд асуудал гарвал та манай онлайн зөвлөхүүдтэй холбоо барьж болно;

A.P. Габетс, Д.И. Гончаров 1С: Аж ахуйн нэгж 8.0 Хөгжлийн энгийн жишээ Москва ХХК 1C-Publishing 2005 UDC 658.012.011.56:004.42 BBC 65.29 G12 Габец Андрей Петрович, Гончаров Дмитрий Игорьевич G12 1С: Аж ахуйн нэгж 8.0. Энгийн жишээнүүд .: 1C-Publishing LLC, 2005. - 420 s: ill. хөгжүүлэлт, ISBN 5-9677-0056-0 Энэхүү ном нь "1C: Enterprise 8.0" платформ дээр алгоритм боловсруулах энгийн жишээнүүдийг харуулсан лавлах гарын авлага юм. Энэхүү нийтлэл нь анх хөгжүүлэгчид, системийг аж ахуйн нэгжид хэрэгжүүлсэн админууд, програмын шийдлүүдийг бие даан боловсруулахыг хүсч буй дэвшилтэт хэрэглэгчидэд хэрэгтэй болно. Энэ номонд хэрэглээний сэдвээр бүлэглэсэн олон тооны практик жишээг багтаасан болно. Нэмж дурдахад, уг номонд жишээнүүдэд ашигласан суулгагдсан хэлний шинж чанар, арга, үйл явдлын талаархи нарийвчилсан заагчийг оруулсан болно. Энэхүү ном нь багцад багтсан програм хангамжийн бүтээгдэхүүний бүрэн хэмжээний баримт бичгийг нэмж оруулсан боловч орлуулахгүй бөгөөд програмын боломжийг илүү үр дүнтэй ашиглах боломжийг танд олгоно. Засварласан M.G. Радченко байна. 4601546 025616 ISBN 5-9677-0056-0 Номыг хуулбарлах, тараах эрх нь 1С-Publishing компанид харьяалагддаг. 1C-Publishing-ийн бичгээр гаргасан зөвшөөрөлгүйгээр номын материалыг бүрэн эсвэл хэсэгчлэн хуулбарлахыг хориглоно. ХХК "1C-Pa6lishingm, 2005 оны АГУУЛГА Оршил 16 Нийтлэлтэй хэрхэн ажиллах вэ? Үндсэн хэлбэрүүд, системийн чиг үүрэг 17 18 (D Хүссэн огноог хэрхэн яаж тодорхой зааж өгөх вэ? Хоосон огноог хэрхэн яаж шалгах вэ? Хоёр огноог (өдрийг) хэрхэн харьцуулах вэ? Өдөрт хэрхэн нэмэх вэ? , сар? Би хувьсагчийн үнэ цэнийн төрлийг зөвтэй нь хэрхэн яаж шалгаж болох вэ? Лавлах төрөлтэй форма атрибутыг хэрхэн яаж арилгах вэ? "Утга хадгалах" төрөл бүхий утгыг хэрхэн яаж арилгах вэ? "Утга хадгалах" төрөлтэй атрибутад байрлуулсан утгын төрлийг хэрхэн яаж шалгах вэ? Хэрхэн шахах вэ? хадгалалтад байрлуулсан өгөгдөл ia? Хэрэглэгчдэд нийлмэл хэлбэрийн утгыг сонгох боломжийг хэрхэн олгох вэ? Асуултанд тооцоолсон тоон талбартай ажиллахдаа дугуйруулах аргыг хэрхэн ашиглах вэ? Олон мөр бүхий анхааруулгыг хэрхэн яаж үзүүлэх вэ? Боловсруулалтын явцад одоогийн цагийг хэрхэн хэлж өгөх вэ? Орчуулж буй тоог орос хэл дээр хэрхэн яаж харуулах вэ, гэхдээ бутархай хэсэггүйгээр? Бутархай хэсгүүдэд зууны тоог харуулсан орос хэл дээр тоог хэрхэн харуулах вэ? Хэсгийн тоог граммаар хэдэн хувиар харуулах вэ? Долларын хэмжээг англиар үгээр хэрхэн яаж гаргах вэ? Гадны бүрэлдэхүүн хэсгийг хэрхэн ачаалах вэ? Үйлдлийн системийн командыг хэрхэн гүйцэтгэх вэ? Гүйцэтгэх горимоос (үйлчлүүлэгч, сервер дээр, гадаад холболт) хамааран процедурын кодыг хэрхэн хэрэгжүүлэх вэ? Объектуудыг бүлгээр боловсруулахдаа "бүгд эсвэл юу ч биш" стратегиа хэрхэн хэрэгжүүлэх вэ? Нийлмэл хүүгийн томъёог ашиглан дүнг хэрхэн тооцоолох вэ? Бүх нийтийн цуглуулга Array (D Массивыг ихэвчлэн ямар тохиолдолд ашигладаг вэ? ® Массивыг хэрхэн үүсгэх вэ? F Олон хэмжээст массивыг хэрхэн үүсгэх вэ? F Массивт элемент хэрхэн нэмэх вэ? 18 18 19 19 20 21 21 21 22 23 24 24 25 25 26 27 27 27 28 29 30 31 32 32 32 32 32 33 34 Агуулгын хүснэгт F Массивын хэмжээг хэрхэн тодорхойлох вэ? Ф Массив элементэд хэрхэн нэвтрэх вэ? ® Массив элементийг хэрхэн яаж давтагдах вэ? F Массив элементийг хэрхэн устгах вэ? F Бүх массив элементүүдийг хэрхэн устгах вэ? Давхардсан массив элементүүдийг хэрхэн устгах вэ? Массивыг хэрхэн яаж хуулах вэ? ? Хоёр массив нь ижил гэдгийг хэрхэн шалгах вэ? Мэдээллийг n агуулсан сөрөг талуудын нэр. Тэдгээрийг хэрхэн эрэмбэлэх вэ? DirectoryLink.Nomenclature хэлбэрийн утгуудыг оруулсан массив байдаг. Массивын бүх хоосон утгыг хэрхэн устгах вэ? Нэхэмжлэлийн "Нэхэмжлэл" ба "Тараа" хүснэгтийн хэсгүүдэд ашигласан эд зүйлсийн массивыг хэрхэн яаж авах вэ? Хоёр утгын хүснэгт байдаг. Тохирох баганы нэрний массивыг хэрхэн яаж авах вэ? "Жагсаалт" төрлийн дэлгэрэнгүй мэдээллийг бөглөх хэд хэдэн сонголтыг хүсэлтээр хэрхэн хийх вэ? Мэдээллийн бүртгэлээс "Цалин цалингийн зохион байгуулалтыг" хэрхэн тодорхой хэлтсийн бүх цалингийн тооцооллын массив хэлбэрээр авах вэ? Бүтэц what Ямар тохиолдолд "Бүтэц" хэлбэрийн объектуудыг ихэвчлэн ашигладаг вэ? f Бүтэцийг хэрхэн бий болгох вэ? f Бүтэцэд хэрхэн элемент нэмэх вэ? A Бүтцийн элементийг хэрхэн яаж шийдвэрлэх вэ? е Бүтцийн элементүүд дээр хэрхэн давтагдах вэ? f Бүтцийн элементийг хэрхэн яаж устгах вэ? Бүтэц дэх тодорхой түлхүүр бүхий элементийн утгыг хэрхэн тохируулах вэ? Олон хэмжээст өгөгдлийг бүтцэд хэрхэн оруулах вэ? Сэтгүүлийн хэлбэрээр тогтоосон сонголтын талаархи мэдээллийг хэрхэн цуглуулах вэ? Энэ бүтцэд "Эсрэг талын" түлхүүр бүхий элемент байгаа эсэхийг яаж тодорхойлох вэ, гэхдээ энэ нь хоосон директорын утгыг агуулж эсвэл Тодорхойлогдоогүй - энэ элементийг устгах уу? Баримт бичгийн "Бараа" хүснэгтийн хэсгээс бүх мөрийг "Үнэ" шаардлагатай утга, "НӨАТ-ын хувь" -ын үнэ цэнэ нь "НӨАТ-ын татвар" шилжүүлгийн "НӨАТ-ын 18" -тэй дүйцэх утгатай хэрхэн яаж авах вэ? Байгууллагын одоогийн нягтлан бодох бүртгэлийн бодлогын талаархи мэдээллийг тухайн өдрийн мэдээллийг тогтмол бүртгэлээс хэрхэн авах вэ? Арбитрын баримт бичгийн хүснэгтэн хэсгийн дэлгэрэнгүй мэдээллийг хэрхэн бүрдүүлэх вэ? Хүснэгтийн нарийвчилсан хэсгүүдийн нэрний бүтэцтэй баримтын хүснэгтийн хэсгийг өгөгдлийг хүсэлтээр хэрхэн хүлээж авах вэ? Тохируулга 34 34 35 36 37 37 38 39 40 41 42 43 44 45 47 47 47 48 48 49 50 50 51 52 53 53 55 55 57 Агуулгын жагсаалт f "Нөхцөл байдал" хэлбэрийн объектуудыг ямар тохиолдолд ихэвчлэн ашигладаг вэ? е Тоглолтыг хэрхэн яаж хийх вэ? f Тоглолтод хэрхэн элемент нэмэх вэ? f Тохирох элементийг хэрхэн яаж шийдвэрлэх вэ? F Тохирох элементүүд дээр хэрхэн давтагдах вэ? f Тохирсон зүйлийг хэрхэн устгах вэ? Зохицуулалтаас хэрхэн мэдээлэл авах вэ? Тооцооллын төрлүүдийн үндсэн төрлүүдтэй олон түвшний захидал харилцааг хэрхэн яаж авах вэ? 57 57 57 58 58 59 59 59 60 Утга жагсаалт, утгын хүснэгт, утгын мод 63 е. Ямар тохиолдолд үнэт зүйлсийн жагсаалт, утгын хүснэгт, утгын мод ашигладаг вэ? f Үнэ цэнэтэй зүйлсийн жагсаалтыг хэрхэн үүсгэх вэ? f Утга жагсаалтад элемент хэрхэн нэмэх вэ? f Үнэ цэнэтэй зүйлийн элементийг хэрхэн олох вэ? f Утга жагсаалтын элементийг хэрхэн яаж шийдвэрлэх вэ? f Үнэ цэнэтэй зүйлсийн жагсаалт дээр хэрхэн давтагдах вэ? f Үнэ цэнэтэй зүйлсийн жагсаалтаас зүйлийг хэрхэн устгах вэ? f Хэрхэн утгын хүснэгтийг үүсгэж, түүний талбаруудыг бөглөх вэ? f Утга хүснэгтийн утгыг хэрхэн олох вэ? ® Утга хүснэгтийн эгнээнд хэрхэн давтагдах вэ? f Утга хүснэгтийн мөр (багана) -ыг хэрхэн устгах вэ? Хэрэв багануудын нэр хувьсагчуудад агуулагдсан бол утгын хүснэгтийг хэрхэн яаж дүүргэх вэ? Хүснэгтийн бүх баганыг хүссэн утгатай хэрхэн яаж бөглөх вэ? "Хүлээн авагчийн хүснэгт" утгын хүснэгтийг "Эх сурвалж хүснэгт" утгын хүснэгтийн өгөгдөлтэй хэрхэн бөглөх вэ? "TableValues" утгын хүснэгтэд төрөл хязгаарлалтаар хэрхэн баганыг нэмэх вэ? Асуулгаас буулгаснаар олж авсан утгын хүснэгтийн баганын утгын хэлбэрийг хэрхэн өөрчлөх вэ? Утга модыг өөрөө хэрхэн бөглөх вэ? Програмын объектын захирлууд a Директорын элемент (бүлгийг) хэрхэн үүсгэх вэ? f Лавлах зүйлийг хэрхэн олох вэ? f Лавлах зүйлийг хэрхэн устгах вэ? е Лавлах зүйл дээр хэрхэн давтагдах вэ? f Бүх элементүүдийг тодорхой бүлгээс хэрхэн сонгох вэ? Асуулгыг ашиглан дэд сангийн элементүүд дээр хэрхэн давтагдах вэ? The Директорыг сонгохдоо дэд сайтуудын элементүүд дээр хэрхэн давтагдах вэ? f Директордын жагсаалт (элемент) хэлбэрийг хэрхэн нээх вэ? 63 64 64 65 65 66 66 66 67 68 69 69 71 71 72 74 75 76 78 78 78 80 81 82 83 85 86 86 Хичээлийн агуулга f Би лавлах зүйлийн хүснэгтэн хэсэгт би хэрхэн оруулах вэ? е Директорын хүснэгтийн хэсгээс мөрийг яаж устгах вэ? Директорын хүснэгтийн хэсгүүдийн эгнээнд хэрхэн давтагдах вэ The Хүссэн бүлэгтээ зүйлийг хэрхэн үүсгэх вэ? Одоогийн элемент дэд хэсгүүд байгаа эсэхийг яаж мэдэх вэ? Сонгосон лавлах элементийн дэд бүлгийн тоог хэрхэн олох вэ? Сонгосон директорын элементийн дэд сайтуудын тоог, хэрэв дэд сайтуудын тоо нэгээс илүү байвал хэрхэн олох вэ? Сонгосон лавлах зүйлийн бүх эцэг эхийг яаж авах вэ? Хэрэв код төрөл String байгаа бол директорын элементийн "бүрэн" кодыг хэрхэн авах вэ? Нэрийн тодорхой дэд мөрийг агуулсан директорын бүх элементүүдийг, тэдгээрийн харьяалагддаг бүх шатлалыг хэрхэн яаж олж авах вэ? Мөрийн шинж чанар нь бөглөөгүй байгаа бүх директор оруулгыг хэрхэн олох вэ? “Гэрээлэгч” сангийн бүх элементүүдийг нэг бүлгээс нөгөө рүү хэрхэн шилжүүлэх вэ? Лавлах зүйлийн програм хангамжийн сонголтыг хэрхэн зохион байгуулах вэ? "Ажиллагсад" лавлах санд ажилтны зургийг хэрхэн хадгалах вэ? Баримт бичиг ® Шинэ документ хэрхэн үүсгэх вэ? f Баримтыг хэрхэн олох вэ? F Баримт бичгийн маягтыг хэрхэн нээх вэ? f Бичиг баримтын утгыг хэрхэн өөрчилж, баримт бичдэг вэ? Баримт бичгийн холбоос бүхий мөрийг хүснэгтийн хэсэгт хэрхэн нэмэх вэ? f Баримтын хүснэгтийн хэсгээс мөрийг хэрхэн устгах вэ? f Баримтын шугам дээр хэрхэн давтагдах вэ? f Баримтын хүснэгтэн хэсгийг хэрхэн яаж буулгах вэ? f Баримтын хүснэгтэн хэсэгт нийт дүнг хэрхэн тооцоолох вэ? f Баримт бичгийг хэрхэн байршуулах вэ? f Баримтыг хэрхэн ангилах вэ? f Бүх ирж буй нэхэмжлэхийг устгах гэж хэрхэн тэмдэглэх вэ? е. Баримт бичигт линк хийж, хуулбарыг мэдээллийн санд хэрхэн үүсгэх вэ? е. Баримт бичигт линк хийснээр бүртгэлийн эргэн тойронд түүний хөдөлгөөнийг хэрхэн унших вэ? Баримт хөдөлгөөнийг ямар бүртгэлээр бүртгэж байгааг хэрхэн тодорхойлох вэ? Баримтын хүснэгтийн хэсэгт "Тоо хэмжээ" тэг атрибут бүхий мөрүүдийг хэрхэн устгах вэ? "Бүтээгдэхүүн" хүснэгтийн талбарт "НӨАТ-ын хувь" гэсэн мөрийг хэрхэн арилгах вэ? Одоо байгаа баримт дээр үндэслэн шинэ баримт бичгийн өмчийн утгыг хэрхэн бөглөх вэ? 87 87 88 89 90 91 93 94 96 97 98 99 100 102 104 104 104 105 105 107 107 107 108 108 108 109 109 111 111 112 113 115 116 117 Хүснэгт Агуулга Оруулсан зүйлсийн нэхэмжлэхийн жагсаалтыг хэрхэн авах вэ? Нэхэмжлэлийн өдөр, удирдлагын нягтлан бодох бүртгэлийн валютыг хэрхэн тодорхойлох вэ? Удирдлагын нягтлан бодох бүртгэлийн мөнгөн тэмдэгтийг үе үеийн мэдээллийн бүртгэлд хадгалдаг. Би үүнийг баримт бичгийн хэлбэрээр яаж хурдан хийх вэ? Гүйлгээ боловсруулахдаа баримт бичгийн байршилтай холбоотой үлдэгдлийг хэрхэн яаж авах вэ? Баримтын бичлэгийн хүснэгтэд баримт бичгийн тоо, өөр өөр шинж чанарын утгын тоог хэрхэн тодорхойлох вэ? "Байгууллага" хэмжээсийг "Нягтлан бодох бүртгэлийн хэсэг" дараалалд нэмэв. Одоо энэ хэмжигдэхүүний утга тус бүрийн дарааллын зааг дээр хэрхэн мэдээлэл авах вэ? Мэдээллийг хадгалах ® Бичлэгийг тогтмол бус бие даасан мэдээллийн бүртгэлд хэрхэн оруулах вэ? f Бичлэгийн тогтмол бус бие даасан мэдээллийн агуулгыг хэрхэн унших вэ? “Өөрөө түншүүд” үү? All Бичлэгийг бие даасан мэдээллийн бүртгэлээс хэрхэн устгах вэ? f Тухайн байгууллагын сонгон шалгаруулах мэдээлэл бүхий бие даасан мэдээллийн бүртгэлийг хэрхэн устгах вэ? f Мэдээллийн тогтмол, бие даасан бүртгэлд хэрхэн оруулах вэ? f Мэдээллийн тогтмол, бие даасан бүртгэлд байгаа бичлэгийг хэрхэн унших (өөрчлөх) вэ? f Мэдээллийн тогтмол, бие даасан бүртгэл дэх бичилтийг хэрхэн устгах вэ? "Валютын ханш" тогтмол давтамжийн бүртгэлд 2005 оны 1-р сарын 1-ээс бага хугацаатай EUR, USD нэртэй валютын бүх бүртгэлийг хэрхэн устгах вэ? "Биржийн ханш" мэдээллийн бүртгэлээс тодорхой валютаар сонгогдсон мэдээллийг хэрхэн хэмжих вэ? Тогтмол бие даасан бүртгэл хөтлөх хугацааг хэд хэдэн нөхцөлд нийцүүлэн хэрхэн өөрчлөх вэ? Бүрэн дууссан лавлах хэрэгслийн таяг "үечилсэн" болгох вэ? е Бүртгэгчийн харьяанд байгаа мэдээллийн бүртгэлд хэрхэн оруулах вэ? е Бүртгэгчийн харьяанд байгаа мэдээллийн бүртгэл дэх бүртгэлийг хэрхэн унших (өөрчлөх) вэ? е Бүртгэгчийн харьяанд байгаа мэдээллийн бүртгэлээс оруулсан мэдээллийг хэрхэн устгах вэ? Нягтлан бодох бүртгэл f Нягтлан бодох бүртгэлийн бүртгэлд хэрхэн бичлэг хийх вэ? е Дансны үлдэгдлийг хэрхэн яаж авах вэ? f Данс дээр хэрхэн эргэлт хийх вэ? f Данс дээрх үлдэгдлийг хэрхэн яаж авах вэ? 118 119 120 121 122 123 124 124 125 126 126 127 128 128 129 131 131 132 134 137 138 139 140 140 142 143 143 Агуулгын жагсаалт F Үлдэгдлийг данснаас данс руу хэрхэн шилжүүлэх вэ? Дансан дахь зээлийн үлдэгдэл үүсэхэд хүргэсэн анхны баримтыг хэрхэн олох вэ? Аналитик дансанд "Counterparty" дэд зүйл эсвэл "Гэрээ" дэд дэд зүйл аль алиныг нь хэрхэн сонгох вэ? Аналитик дансанд "Counterparty" дэд зүйл, "Нэр томъёо" дэд дэд зүйл хоёулангийнх нь аль алиныг нь хэрхэн сонгох вэ? Данс руу шинэ төрлийн субконтог хэрхэн нэмэх вэ? "Өөрийгөө тэтгэгч" нягтлан бодох бүртгэлийн бүртгэлээс зөвхөн гадаад валютын дансанд эргэлт хүлээн авахад яаж туслах вэ? Нягтлан бодох бүртгэлийн бүртгэлд "Өөртөө зориулагдсан" дансны эргэлтийг хэрхэн сонгох вэ? Нягтлан бодох бүртгэлд “улаан буцаалт” аргыг хэрхэн хэрэгжүүлэх вэ? Тогтмол үечилсэн тооцоолол (D Тодорхой хугацаанд тодорхой ажилтанд тооцоологдсон дүнг хэрхэн яаж авах вэ? (D Тодорхой хугацаанд ажиллагсдад хийсэн бүх хуримтлалын дүнг хэрхэн яаж авах вэ? Хэд хэдэн бүртгэлийг дахин тооцоолох хуваарилалтын хүснэгтийг хэрхэн яаж авах вэ? "Ажилчдын цалин хөлс" баримт бичгийн мөрийн дугаарыг хэрхэн тодорхойлох вэ?) бүрэн хасагдсан тооцооны төрлүүдийн бүртгэл? Ажилчдын цалингийн хуудсыг хэрхэн яаж бий болгох вэ? Өнгөрсөн төлбөр тооцоог хэрхэн яаж хийх вэ? Бизнес-пр Процессууд Үйл явцын эхэнд дараалсан алхамуудын тоог тус тусад нь тодорхойлдог бизнесийн үйл явцыг хэрхэн тодорхойлох вэ? Бизнесийн үйл явцтай ажиллахдаа даалгаврыг бий болгох стандарт арга хэлбэрээс хэрхэн татгалзаж, түүнийг програмчлах вэ? Хэрэглээний бусад обьектууд. Гадаад боловсруулалтын маягтыг нээхгүйгээр тодорхой обьектийн хувьд процедурыг хэрхэн яаж хийх вэ? (D Борлуулалтын талаар тодорхой менежерийн ("Хэрэглэгч" лавлах элементийн) бүрэн эрхэд хамаарах бүх обьектын талаарх мэдээллийг хэрхэн хурдан авах вэ? Маягт ба хяналт Маягтуудтай ажиллах (D Баримтын маягтыг хэрхэн нээх вэ? Ф Гадаад боловсруулалтын маягтыг хэрхэн нээх вэ? D тайлангийн маягтыг нээлттэй байгаа хэлбэртэй нь давхцахгүйн тулд нээх үү? 144 145 146 147 147 149 151 152 154 154 155 156 157 158 159 162 162 167 169 169 169 172 172 172 172 173 Хүснэгт ® Тайлангийн хуудсыг хэрхэн нээх вэ? бүтэн дэлгэц? Энэ баримтын жагсаалтын хэлбэрийг баримт бичгийн хэлбэрээс хэрхэн нээх вэ дээр гарч ирэв? ® Баримт бичиг нь "Гүйцэтгэгч" гэсэн шинж чанартай байдаг. "Гэрээлэгчийн гэрээ" дэд лавлах хэлбэрийг хэрхэн нээх вэ? f Сангийн дэлгэрэнгүй мэдээлэлд хадгалагдсан зургийг маягтанд хэрхэн харуулах вэ? ? f Одоогийн нээлттэй өдрийн тэмдэглэлд огнооны хүрээг хэрхэн олох вэ? Жагсаалтад байгаа гэрээт этгээдүүдийг сонгон лавлах хуудсыг хэрхэн нээх вэ? Нэхэмжлэх дэх хэрэглэгчийн үнэ цэнийг сонгохын тулд Худалдан авагчдын бүлгийг нээж, эсрэг талын төлөөлөгчийн сан нэн даруй нээгдэж байгааг хэрхэн баталгаажуулах вэ? Хүснэгт талбар f Хүснэгт талбар дахь багануудын дарааллыг өөрчлөхөөс хэрхэн сэргийлэх вэ? Table Хүснэгтийн баганын тохиргоог өөрчлөхөөс хэрхэн сэргийлэх вэ? f Баримт бичгийн тэмдэглэлд ямар сонголт суулгагдсан тухай мэдээллийг хэрхэн харуулах вэ? е. Мэдээллийн нэр бүхий элемент дээр курсорыг директорын хэлбэрээр хэрхэн байрлуулах вэ? е. Бичлэгийн үнэ цэнээр жагсаалтын хэлбэрээр хэрхэн сонголт хийх вэ? f Мэдээллийг хэрхэн хориглох вэ: "Оруулсан өгөгдөл нь жагсаалтад харагдахгүй, учир нь энэ нь сонголттой таарахгүй байна" гэсэн лавлахад шинэ элемент нэмэх үед? f Хүснэгтийн талбарын нүдийг өгөгдөлтэй хэрхэн яаж бөглөх вэ? Хүснэгтийн талбарын нүдний дэвсгэр өнгийг тухайн үзүүлсэн утгаас хамааран хэрхэн өөрчлөх вэ? "Сонгогдсон түншүүд" хүснэгтийн талбарт "Үндсэн гэрээ" гэсэн шинэ баганыг хэрхэн нэмж, утгыг нь бөглөж, эдгээр утгыг нээх боломжтой вэ? Хүснэгтийн талбарын "Баримт харах" багана дахь сонголтын жагсаалтыг хэрхэн тохируулах вэ? Директорын жагсаалтын хэлбэрийн хүснэгтийн талбарт харуулаагүй мэдээллийг нарийвчлан сонгож, эрэмбэлэх боломжийг хэрхэн хангах вэ? Хяналтын хооронд чирэх, буулгах аргыг хэрхэн хэрэгжүүлэх вэ? Барааны жагсаалтад байгаа агуулах дахь үлдэгдлийг хэрхэн яаж авах вэ? Бусад хяналт ® Маягт нь хуудастай самбартай. Зургийг хавчуурга дээр хэрхэн байрлуулах вэ? The “Гэрээлэгч” лавлах хэсэгт аль хэдийн бичигдсэн элементийн хэлбэрийг нээхдээ самбарын “данс, гэрээ” таб идэвхтэй байгааг хэрхэн баталгаажуулах вэ? Нээх хэд хэдэн баримт бичгийн жагсаалтыг сонгох ажлыг хэрхэн зохион байгуулах вэ? Би хүнд давж заалдах хүсэлтийг орлуулах ажлыг яаж зохион байгуулах вэ? 173 174 175 176 176 177 177 178 181 181 181 182 182 183 184 185 186 187 189 190 190 193 194 194 195 195 197 Хүснэгтийн агуулга Агуулгын самбар дээрх товчлуур бүхий дэд цэсийг хэрхэн яаж үүсгэх вэ? Би товч дээр товчлолыг хэрхэн яаж товчлох вэ? "Документ боловсруулах" оролтын талбарыг бөглөхдөө "Хүснэгт боловсруулах хэсэг" сонголтын хайрцгийн боломжит утгыг хэрхэн бөглөх вэ? f Хэрэв хэрэглэгч хуанлийн талбарт хэд хэдэн огноо оруулсан бол тэдгээрийг хэрхэн ангилах вэ? f Шалгуур үзүүлэлттэй ажлыг хэрхэн зохион байгуулах вэ? Мэдээллийн эх үүсвэрийг хэрхэн хянах вэ? е Оролтын талбарт огнооны дүрслэлийг анхдагч байдлаар хэрхэн тохируулах вэ? The Хэрэв зураг сонгоогүй бол зургийн талбарт текстийг хэрхэн харуулах вэ? A Хэрэглэгчийн хувьд өнгө сонгох стандарт харилцах цонхыг хэрхэн нээх вэ? Хүсэлтийг өгөгдлийн маягтын дагуу жагсаалтыг хэрхэн бөглөх вэ? f График диаграм файлыг файл хэлбэрээр хэрхэн харуулах вэ? Интерфэйс, стиль f 1С: Байгууллагын янз бүрийн загварыг өөр өөр хэрэглэгчдийн категорид хэрхэн тохируулах вэ? Тэмдэглэл бүхий интерфейсийн нэрсийн жагсаалт байдаг. Тэмдэглэгдсэн интерфейсийг хэрхэн харагдуулах вэ? Боловсруулалтын хэлбэрээс дэлхийн хүлээлгэгчийг хэрхэн идэвхгүй болгох вэ? Асуулт, тайлан асуулга Баримтын хүснэгтийн хэсгээс хэрхэн мэдээлэл авах вэ? Баримт бичгийн хүснэгтийн хэсгээс өгөгдлийг хэрхэн олж авах, тэдгээрийг шаталсан хэлбэрээр үзүүлэх вэ? Сонгосон өгөгдөл дэх ижил элементийн тоог хэрхэн тоолох вэ? Сонгох нөхцлийг агрегат функцийн үр дүнд тооцсон талбайн утгуудаар хэрхэн яаж хэрэглэх вэ? Виртуал хүснэгтээс сонголтыг хэрхэн хязгаарлах вэ? Түүврийн талбайн аль нэгтэй ижил утгатай өгөгдлийг хэрхэн нэгтгэх вэ? Зөвхөн тодорхой талбарын утга нь заасан утгаас давсан бичлэгүүдийг яаж авах вэ? Асуултанд дэд байр руу хэрхэн нэвтрэх вэ? Хэд хэдэн асуулгын үр дүнг хэрхэн нэгтгэх вэ? Тодорхой нөхцлийг хангасан хоёр хүснэгтээс өгөгдлийг хэрхэн сонгох вэ? Тодорхой нөхцөлд нэг хүснэгтийн өгөгдлийг өөр хүснэгтээс сонгосон өгөгдөлтэй хэрхэн яаж нэгтгэх вэ? Тодорхой нөхцөлд хоёр хүснэгтээс өгөгдлийг хэрхэн нэгтгэх вэ? Асуултанд NULL биш харин зарим утгыг яаж гаргах вэ? 10 198 200 201 202 203 205 206 209 211 212 212 213 213 214 215 216 216 216 217 218 219 220 221 223 224 225 226 227 228 231 Хүснэгт Агуулга Нэг хүснэгтээс авсан өгөгдөлтэй ижил хүснэгтээс ерөнхий үр дүнг хэрхэн авах вэ? Лавлах бүлгийн шаталсан дүнг хэрхэн яаж авах вэ? Өгөгдсөн огноо хүртэл "Үйлчилгээний бараа хүлээн авах" сүүлчийн баримтыг "OstatiNaSklad" бүртгэлээс хэрхэн олж авах вэ? Талбарын ижил утгатай бичлэгийн тоог хэрхэн тоолох вэ? Хураангуй бичилт дээр янз бүрийн бичлэгийн тоог хэрхэн харуулах вэ? Хүсэлтийн дагуу бичлэгийн тоог хэрхэн олох вэ? Баримт бичигт заасан агуулах дахь бараа бүтээгдэхүүний үлдэгдэл хэр байгаа вэ? Тооллогын үнээр сонгон шалгаруулалт хийх хүсэлтэд хэрхэн тусгасан бэ? Хоёр жилийн хүүгийн ханшийг яаж авах вэ? Бүх гаргасан баримт бичгийн "Худалдан авагчийн захиалга" -ыг албан ёсны ханшаар тооцож зөрүүтэй хүснэгтийг хэрхэн яаж авах вэ? Асуулгыг хэрхэн яаж бичих вэ? Асуултын шатлалын тодорхой түвшинд нэг функцийг тооцдог бол нөгөө түвшинд, бусад түвшинд нь хэрхэн яаж бичих вэ? Мэдээллийн жагсаалтыг хараат бус үе шатны мэдээллийн бүртгэлд оруулсан баримт бичгийн жагсаалтыг хэрхэн олж авах вэ? Хэрэв асуулгын текст урьдчилж мэдээгүй бол асуулга параметрүүдийг хэрхэн тохируулах вэ? Мэдээллийн дүн шинжилгээ хийх f хамтдаа зарагдсан бүтээгдэхүүний талаархи мэдээллийг хэрхэн авах вэ? (D Холбоотой бүтээгдэхүүнийг хэрхэн санал болгох вэ? (D Цаашид юу худалдаж авах вэ? Тайлангийн үр дүнг танилцуулах Хүснэгтийн баримт бичиг, текст баримт. Асуултын үр дүнг хүснэгтийн баримт бичигт хэрхэн харуулах вэ? Мэдээллийг бүлэглэх замаар задалж, өргөжүүлэх чадвартай хүснэгтэн баримт бичигт өгөгдлийг хэрхэн харуулах вэ?) Хүснэгт хүснэгтийн баримт бичигт өгөгдөл оруулахдаа бүх гаралтын бүлгүүдийг задалж, Нурж, өргөжүүлсэн бүлгүүдийн бүрэлдэхүүнийг дур мэдэн тодорхойлохын тулд өгөгдлийг хүснэгтийн баримт бичигт хэрхэн оруулах вэ? (D Яаж буулгах вэ? асуулга эцсийн шатлалыг харуулсан байна уу? (D Би тайлан бүтээгчээс автоматаар үүсгэгдсэн байрлалыг хаанаас, хэрхэн яаж үзэх вэ? the Мэдээлэл бүтээгчээс өгөгдлийг пивот хүснэгтэд хэрхэн шилжүүлэх вэ? Тайланг тайлан үүсгэгч өөрөө үүсгэдэг. Мэдээллийг нөгөө кодыг нь задалж багана ашиглан хэрхэн устгах вэ? 231. 233 235 237 239 240 240 243 245 246 248 250 252 253 253 254 255 257 257 257 260 260 261 261 262 263 264 11 Хүснэгт Агуулга Тайлангийн хуудсыг дараагийн удаа нээх хүртэл хэрхэн яаж хадгалах вэ? Үүсгэсэн хүснэгтийн баримт бичигт тэмдэглэлийг харуулах ажлыг хэрхэн зохион байгуулах вэ? f "Баримтын үр дүн" хүснэгтийн баримт бичгийн эхний баган, мөрний мөр хэвлэгдэхгүй байхын тулд яаж баталгаажуулах вэ? Хүснэгтийн гарчгийг таслах замаар тайлан үүсгэгчээс үүсгэсэн хүснэгтийн баримт бичгийн дээд хэсгийн бэхэлгээг хэрхэн хангах вэ? f Хүснэгтийн баримт бичгийг тайлан боловсруулагч бий болгодог. Хүснэгтийн баримтыг хэвлэхдээ хүснэгтийн гарчиг хуудсан дээр гарч ирэх эсэхийг хэрхэн баталгаажуулах вэ? е. "Урт" баримт бичгийг хэвлэхдээ хуудасны гарчиг дээр баримт бичгийн дугаар, огноо, хуудасны дугаарыг хэрхэн зааж өгөх вэ? ® Хүснэгтийн баримт бичгийг тайлан бүтээгчээс автоматаар үүсгэсэн схемийн дагуу үүсгэдэг. Хэвлэх үед хуудасны чиглэлийг хэрхэн тохируулах вэ? Хүснэгтийн баримт бичгийг тайлан үүсгэгч үүсгэдэг. Үзүүлсэн бүх тоон үзүүлэлтийн хувьд хуваагдалгүйгээр хэрхэн дүгнэлт гаргах вэ? е. Тайлан бүтээгч нь тэдгээрийн зохион байгуулалтын зорилго, стандарт зохион байгуулалтын аль нэгийг хэрхэн ашиглах вэ? Хүсэлтээс өгөгдөл хүлээн авахад зөвхөн хураангуй бичлэгийг хэрхэн авах вэ? Асуулгаас мэдээлэл авахдаа зөвхөн шаталсан хураангуй бичлэгийг хэрхэн авах вэ? f Хүснэгтийн баримт бичигт зургийг хэрхэн харуулах вэ? Зургийг хүснэгтийн баримт бичигт байрлуулалтыг өөрчлөхгүйгээр хэрхэн яаж харуулах вэ? Пивот хүснэгттэй хэрхэн ажиллах вэ? Мэдээллийг хэрхэн програмын дагуу пивот хүснэгтэд байрлуулж форматлах вэ? Текстийн загвар ашиглан хэвлэсэн хэлбэрийг хэрхэн яаж үүсгэх вэ? Диаграмм f Хүснэгтийг өгөгдөл хэрхэн яаж бөглөх вэ? Хэмжилтийн хүснэгтийг хэрхэн бөглөх вэ? f Асуултын үр дүнг пивот диаграммд хэрхэн харуулах вэ? Гантын диаграмыг өгөгдлийг хэрхэн бөглөх вэ? Гант диаграмын интервалтай хэрхэн холбогдох вэ? Гант графикийн интервалуудын интерактив өөрчлөлтийг хэрхэн зохицуулах вэ? Гант график дээр тогтмол бус шошгыг хэрхэн байрлуулах вэ? Зарим gantt диаграмын дэвсгэр интервалыг хэрхэн тодруулах вэ? Газарзүйн зохион байгуулалт f Газарзүйн байрлалын файлыг хэрхэн хэлбэрээр харуулах вэ? f Газарзүйн схемийн байршлыг хэрхэн харуулах вэ? f Газарзүйн схемийн цар хүрээг хэрхэн өөрчлөх вэ? 12 266 268 271 271 272 273 273 274 276 276 278 279 280 280 282 283 287 287 289 291 293 295 296 298 300 301 301 301 301 Хүснэгт Агуулга Сонгосон хотыг газарзүйн диаграм дээр хэрхэн харуулах вэ? Газарзүйн газрын зургийн мэдээллийн эх сурвалж болгон утгын хүснэгтийг хэрхэн ашиглах вэ? Захиргаа 1С-ийг эхлүүлэх: Аж ахуйн нэгжийг командын мөрөөс эхлүүлэх. © 1C: Enterprise командын мөрөөс хэрхэн эхлүүлэх вэ? 1C: аж ахуйн нэгжийг мэдээллийн баазыг тушаалын мөрөөс хэрхэн яаж хүчээр буулгах вэ? Командын мөрөөс өгөгдлийн сангийн тохиргоонд байгаа одоогийн тохиргоонд гарсан өөрчлөлтийг хэрхэн шинэчлэх вэ? Автомат горимд лавлагаа бүрэн бүтэн байдлыг шалгахгүйгээр мэдээллийн санг хэрхэн туршиж, засах вэ? Баталгаажуулалтын үр дүнг файл руу гарсны дараа хэрхэн автомат горимд тохируулгын баталгаажуулалтыг гүйцэтгэх вэ? Лог бүртгэлийг хэрхэн програмчлах вэ? Програмын шийдлийн модулийг командын мөрөөс текст файл болгон хэрхэн буулгах вэ? Htm форматаар хадгалагдсан тусламжийн файлуудыг програмын шийдэлд хэрхэн ачаалах вэ? Төрөл бүрийн f Ажлын огнооны үнийг хэрхэн өөрчлөх вэ? Exclusive Онцгой горимыг хэрхэн тохируулах / хасах вэ? е Бүртгэлийн дэвтэрт хэрхэн тэмдэглэл оруулах вэ? f Мэдээллийн бүртгэлтэй хэрэглэгчдийн мэдээллийг хэрхэн авах вэ? f Системийн ерөнхий мэдээллийг хэрхэн тодорхойлох вэ? Хэрэглэгчийг хэрхэн мэдээллийн програмд \u200b\u200bхэрхэн нэмэх вэ? Гадаад боловсруулалтын үр дүнг бүртгэхийн тулд өөрийн бүртгэлийн файлыг хэрхэн үүсгэх вэ? Энэ мэдээллийн сантай ажилладаг хэрэглэгчдийн жагсаалтыг маягт дээр хэрхэн харуулах вэ? Логыг XML форматаар хэрхэн яаж буулгах вэ? Ажлын клиент-серверийн хувилбар дахь бүх мэдээллийн баазыг хэрхэн хаах вэ? Интеграцчилал 302 303 305 305 305 306 306 307 307 309 309 310 311 311 311 312 313 314 315 317 318 318 320 321 Текст файл 321 XML 324 ft Мэдээллийн сангаас текст файл руу хэрхэн байршуулах вэ? f Текст файлаас өгөгдлийг хэрхэн ачаалах вэ? Тексттэй ажиллах. Ашиглах дарааллын загвар f Баримтыг нэг мэдээллийн сангаас нөгөө мэдээллийн санд хэрхэн шилжүүлэх вэ? 321 322 322 324 13 Агуулгын жагсаалт Би дур мэдэн бүтцийн XML баримт бичгийг хэрхэн яаж хийх вэ? Мөрөнд XML баримт яаж үүсгэх вэ? Бусад форматын файлуудаар дамжуулан XML цуврал нэвтрүүлэг ашиглан мэдээлэл хэрхэн солилцох вэ? Би дур мэдэн бүтцийн XML баримтыг хэрхэн яаж ачаалах вэ? 326 327 328 329 DBF файлууд 331 HTML баримт бичигтэй ажиллах 332 фут DBF файл ашиглан хэрхэн байршуулах, татаж авах боломжтой вэ? Ф HTML маягт бөглөх, Файлтай ажиллах. Текст файл сонгох диалогийг хэрхэн зохион байгуулах вэ? F Файлын мэдээллийг хэрхэн унших вэ? f Заасан директор дахь файлуудын жагсаалтыг хэрхэн авах вэ? Ftp дээр байрлуулсан файлыг локал компьютерт хэрхэн шилжүүлэх вэ? Том файлыг тодорхой хэмжээтэй хэд хэдэн файлд хэрхэн хуваах вэ? Файлыг хэрхэн архивлах вэ? Хоёр текст файлыг хэрхэн харьцуулах вэ? Гадны програмын тусламжтайгаар файл үүсэхийг хянах ажлыг хэрхэн зохион байгуулах вэ? ActiveX Ф ActiveX удирдлагыг хэрхэн ашиглах вэ? 331 332 335 335 335 336 336 337 337 338 338 340 341 341 Баримт бичгийн идэвхтэй схем 343 Интернэттэй ажиллах 345 COM обьектуудтай ажиллах 351 Microsoft Word файл дээр хэрхэн шинэ гэрээ хийх вэ? 343 Цахим шуудантай ажиллах 345 Оруулсан шуудангийн үйлчлүүлэгчээр дамжуулан имэйлийн ажлыг хэрхэн зохион байгуулах вэ? 345 Хэрэглэгчийн компьютер дээр суулгагдсан мэйл клиентгүйгээр имэйлээр хэрхэн ажиллах ажлыг хэрхэн зохион байгуулах вэ? 346 Файлтай ажиллах 349 FTP-ээр дамжуулан файл байршуулах 349 HTTP хүсэлтийг гүйцэтгэх 1C: Enterprise 8 нэг мэдээллийн сангаас 350 фут. 0 үлдсэн холболтыг COM холболтыг ашиглан өөр мэдээллийн баазад шилжүүлэх. COM холболтоор MS Excel модулээс 1C: Enterprise 8.0 программ руу нэвтрэх жишээ. F. * .Xls файлуудаас өгөгдлийг унших ажлыг хэрхэн зохион байгуулах вэ? Microsoft Excel-ийн ажлын дэвтэрт бичигдсэн макрог хэрхэн ажиллуулах вэ? Microsoft Excel баримт бичгийг өөр баримт бичигт үзүүлсэн дизайнтай хэрхэн яаж хийх вэ? е Microsoft Word програмын баримт бичигт үнийн жагсаалтыг хэрхэн яаж буулгах вэ? 14 351 353 355 356 357 359 Хүснэгт Агуулга Би дур мэдэн SQL мэдээллийн баазаас хэрхэн хайх вэ? Автоматжуулалтын Клиент / Сервер (OLE) database Нэг мэдээллийн сангаас 1C: Enterprise 8.0 нь автоматжуулалтын клиент / серверийг (OLE) ашиглан өөр мэдээллийн баазад хэрхэн интерактив хэлбэрээр бөглөх вэ? Excel хүснэгтээс 1С: Засах чадвартай аж ахуйн нэгжийн зүйлсийн жагсаалтыг хэрхэн ачаалах вэ? Мэдээлэл солилцох<Э Как организовать работу удаленных складов? Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет? Как просмотреть объекты, для которых зарегистрированы изменения? Как организовать обмен данными между произвольными конфигурациями 1С:Предприятие 8.0? Как принудительно зарегистрировать изменения объектов? WEB-расширение ф Как в форме списка номенклатуры отменить все установленные отборы? Как запретить перенос содержимого ячеек в форме списка расходных накладных? Как открыть список расходных накладных с отбором, установленным по определенному складу? Как добавить кнопку для ввода документа на основании? Указатель 362 363 363 364 366 366 369 371 372 379 380 380 382 384 388 389 15 Введение Идея написать эту книгу возникла у нас не случайно. Платформа системы «1С: Предприятие 8.0» специально ориентирована на то, что ее будут использовать не только как средство разработки, но и как инструмент быстрой доработки «на месте». В таких случаях специалисту важно в сжатые сроки решить конкретную задачу без долгого изучения всех возможностей системы. Как преподаватели учебного центра - мы, разумеется, только за то, чтобы специалист был изначально методологически и всесторонне «подкован». Но как практикующие разработчики, кроме всего прочего, зачастую и сами с большей радостью используем описанные примеры решения тех или иных задач, нежели пытаемся воссоздать их по памяти или по методическим материалам. Собственно говоря, именно с целью помочь в подобных ситуациях, и была написана эта книга. Основой ее создания послужил опыт преподавания «программистских курсов» по системе, работа на конкретных внедрениях и активное общение в форумах, посвященных данному кругу проблем. Фактически книга составлена в результате анализа того, какие задачи приходится решать чаще всего как начинающим, так и продвинутым разработчикам. При подборе примеров мы исходили из того, что спектр навыков и знаний специалистов, которые будут работать с данным изданием, может быть очень широк. Поэтому пусть Вас не смущают некоторые особо «бородатые» советы или, наоборот, - отсутствие подробного описания тех или иных технологий. А для тех, кто практически не знаком с системой «1С:Предприятие 8.0», материал самых простых примеров, объясняющих азы использования объектов и механизмов системы, помечен специальным значком ф. Кроме этого, поскольку работа с настоящим изданием не требует досконального чтения всего материала, по тексту намеренно вставлены повторы некоторых приемов или предостережений в тех случаях, когда это имеет смысл. Также следует заметить, что мы стремились сделать именно сборник простых примеров, поэтому некоторые материалы вошли в издание в «разрезанном» виде. То есть вместо сложных и громоздких «сквозных» примеров, мы старались представить отдельные части, «кирпичики», из которых впоследствии можно собрать желаемое. 16 Введение Стиль изложения соответствует цели издания, поэтому материал предоставляется в форме вопросов и ответов, как, например, в следующем разделе: Как работать с изданием? Решение данного вопроса - многовариантно. Можно читать классическим способом. От начала до конца, помечая или закладывая понравившиеся места. Впоследствии, при возникновении конкретных вопросов, зрительная память или закладки помогут найти нужное решение. Можно читать выборочно. Любимая поговорка крутых программистов: «Мануал открывать надо уже в последний момент». То есть, проблема возникла - нашли раздел и попытались найти решение, или идею решения по аналогии. Но поговорку, на самом деле, мы совсем не одобряем! Можно вообще не читать. Не читать комментарии. А рассматривать издание как сборник «шпаргалок» кода, решающего те или иные вопросы. Остальные варианты использования издания или не очень нравятся авторам, или достаточно опасны. Например, не надо рассматривать эту книжку как замену полноценного обучения или работы с методическими материалами. 17 Примитивные типы, системные функции Как явно указать нужную дату? Для указания нужной даты можно пользоваться: литералом вида ТГГГММДДччммсс" встроенного языка; встроенной функцией преобразования значений Дата(); литералом типа Дата языка запросов. В таблице ниже приводится ряд возможностей явного указания даты при помощи встроенного языка: Выражение "20050308" Дата(2005, 1,1) Дата(1, 1, 1) Дата(2005, 1, 1, 10, 29, 50) Значение результата (тип) 08.03.2005 0:00:00 (Дата) 01.01.2005 0:00:00 (Дата) 01.01.0001 0:00:00 (Дата) 01.01.2005 10:29:50 (Дата) В случае же, если в тексте запроса необходимо жестко указать некую дату - используется литерал ДАТАВРЕМЯ(). Например, поле со значением "01.01.2005 0:00:00" можно получить так: Как проверить дату на пустое значение? Значение типа Дата не бывает «пустым». Если в явном виде значение переменной типа Дата не задано, она будет иметь значение по умолчанию: начало первого дня первого месяца первого года (00 часов 00 минут 00 секунд). Поэтому проверку проще сделать так: 18 Примитивные типы, системные функции Как сравнить две даты (дни)? Точность данных типа Дата - до секунды. А сравнивать нужно именно дни. Тогда проще предварительно для сравниваемых дат воспользоваться функцией, которая возвращает, например, дату начала дня. А потом уже сравнивать полученные значения. Как прибавить к дате день, месяц? Так как тип Дата содержит дату и время с точностью до секунды, то для того чтобы к некоторой дате прибавить один день, нужно увеличить ее значение на количество секунд, содержащихся в одном дне: Для увеличения или уменьшения даты на некоторое количество месяцев, можно использовать: функции работы со значением типа Дата во встроенном языке; функции работы со значением типа Дата в запросах. В таблице ниже приводится ряд возможностей использования функций встроенного языка: Выражение ДобавитьМесяц(Дата(2005, 1, 31), 1) ДобавитьМесяц(Дата(2005, 2, 28), -1) КонецМесяца(ДобавитьМесяц(Дата(2005, 2, 28), -1)) Значение результата (тип) 28.02.2005 0:00:00 (Дата) 28.01.2005 0:00:00 (Дата) 31.01.2005 23:59:59 (Дата) 19 Примитивные типы, системные функции А вот пример функции, добавляющей количество дней к исходной дате при помощи запроса: В тексте запроса используем функцию ДОБАВИТЬКДАТЕ(). В качестве параметров ей необходимо передать исходную дату, тип добавляемых периодов (в нашем случае жестко прописали «День») и количество добавляемых периодов. Первый и последний параметры передали запросу, считав их из параметров (заголовка) нашей функции. Далее запрос выполняется, и из него получаем значение выходного поля по первой (и единственной) строке. Результаты выполнения вышеприведенной функции будут такими: ПолучитьДень("20052802", 10) = 10.03.2005 0:00:00 ПолучитьДень("20042802", 10) - 09.03.2004 0:00:00, поскольку 2004 год был високосным! Как можно проверить тип значения переменной на равенство нужному? 20 Примитивные типы, системные функции ТипЗнч() - функция языка, возвращающая по значению его тип. Тип () - функция языка, возвращающая значение типа Тип по строковому имени типа. Как очистить реквизит формы, имеющий ссылочный тип? К примеру, реквизит (имя «Товар») имеет тип СправочникСсылка.Номенклатура. Для очистки значения в связанном с ним элементе управления на форме, необходимо выполнить строку кода: То есть необходимо установить значение по умолчанию. А им, в данном случае, будет пустая ссылка на элемент справочника «Номенклатура». Как очистить значение, имеющее тип «Хранилище значения»? Очистить значение, записанное в реквизит или ресурс «РеквизитХранилище») можно следующим образом: (имя Как проверить тип значения, помещенного в реквизит имеющий тип «Хранилище значения»? По причинам не связанным с возможностями системы 1С:Предприятие 8.0, в реквизит «Фотография» (тип ХранилищеЗначения) справочника «Сотрудники» помещалась либо Строка (преобразованная к типу ХранилищеЗначения), либо Картинка (преобразованная к типу ХранилищеЗначения). Как проверить, что было записано? 21 Примитивные типы, системные функции Проверку можно осуществить, используя следующие строки кода: Следует отметить, что в реквизит имеющий тип ХранилищеЗначения можно поместить только значение, имеющее тип ХранилищеЗначения. Работа со значением, помещенным в хранилище значения, может начаться только после его получения (метод Получить()). После получения значение «восстанавливает свой прежний тип». Если полученное значение равно Неопределено, то это означает, что никакое значение в реквизит не записывалось. Как сжать данные, помещаемые в хранилище значения? Допустим, в реквизит «СопроводительнаяИнформация» (тип значения - Хранилище значения) помещается значение переменной «ПомещаемоеЗначение». Нужно обеспечить максимальное сжатие данных закладываемого значения. Вторым параметром конструктора хранилища значения передается объект СжатиеДанных. Он тоже получен соответствующим конструктором, с указанием максимального уровня сжатия. 22 Примитивные типы, системные функции Как предоставить пользователю возможность выбора значения составного типа? Для реализации этой задачи необходимо воспользоваться конструктором объекта ОписаниеТипов. А для него необходимо передавать в качестве параметра массив разрешенных для вводимого значения типов значения. Когда конструктором «ОписаниеВозможныхТипов» собрано применяем функцию для вызова диалога ввода данных ВвестиЗначение(). Первым параметром функции необходимо указать доступную в данном модуле переменную для принятия введенного значения. Вторым - заголовок открываемого окна. Третьим - объект ОписаниеТипов. После ввода значения пользователем можно считать значение с переменной, переданной первым параметром. 23 Примитивные типы, системные функции Как применить округление при работе с вычисляемыми числовыми полями в запросе? Например, составляется запрос для оценок средней цены продажи по данным регистра «Продажи». Для получения данных с точностью до двух знаков после запятой текст запроса может выглядеть следующим образом: Источником для запроса является виртуальная таблица «РегистрНакопления.Продажи.Обороты», построенная по данным регистра в интервале между «ДатаНач» и «ДатаКон». В качестве выходных полей берем «Номенклатура» и результат деления значения полей источника «СтоимостьОборот» и «КоличествоОборот». Причем оператором ВЫРАЗИТЬ() тип последнего поля приводится к примитивному типу ЧИСЛО с определенным форматом (длинна 15, точность 2). Как вывести многострочное предупреждение? Переменные «Остаток» и «Зарезервировано» содержат значения, которые необходимо вывести в виде предупреждения. Кроме того, нужно еще вывести свободный остаток, вычисляемый по формуле: СвободныйОстаток = Остаток - Зарезервировано. Все это может быть выполнено следующим образом: 24 Примитивные типы, системные функции Процедура глобального контекста Предупреждение() выводит на экран модальное окно предупреждения. Текст предупреждения передается первым параметром, вторым - таймаут, содержащий указание количества секунд, через которое окно самостоятельно закроется (если раньше его не закроет пользователь), третьим - указывается заголовок окна. Многострочность предупреждения в нашем примере осуществляется за счет добавления значения ПС (перевод строки) системного набора значений СИМВОЛЫ в текст предупреждения. Обратите внимание на вычисление свободного остатка в скобках для обеспечения корректности выполнения арифметических действий и преобразования данных к типу Строка. Кроме того, хотелось бы предупредить об опасности попыток применения процедуры Предупреждение() в ходе проведения документов. Проведение документов выполняется в транзакции, поэтому использование каких либо интерфейсных решений, останавливающих работу системы, является совершенно неприемлемым. В подобных случаях лучше информировать пользователей посредством Сообщить(). Как при выполнении обработки сообщить пользователю текущее время? Метод ТекущаяДата() возвращает системную дату. Тип значения Дата. В его значение входит и дата и время. Для получения представления только времени можно применяем функцию Формат(). Как вывести число прописью по-русски, но без дробной части? Для этого используется функция ЧислоПрописью(). У нее могут быть указаны в качестве параметров: преобразуемое число; форматная строка; параметры предмета исчисления (вид этой форматной строки определяется значением кода локализации). 25 Примитивные типы, системные функции Все возможные варианты локализаций описаны в файле Locllnfo.txt, входящем в комплект поставки программы. Для решения нашей задачи можно использовать следующий текст: В форматной строке указываем код локализации - Русский(Россия). В параметрах предмета исчисления показываем, что дробная часть не должна содержать ни одного разряда. Для ВыводимоеЧисло = 234,4 результат будет: «Двести тридцать четыре». Как вывести число прописью по-русски, с указанием сотых в дробной части? В параметрах предмета исчисления указываем возможные спряжения и склонения слов «целая» и «сотая», а так же количество разрядов дробной части, которые будут выводиться прописью. В форматной строке указываются код языка локализации и необходимость вывода дробной части прописью. Для ВыводимоеЧисло - 123,45 результат будет: «Сто двадцать три целых сорок пять сотых». 26 Примитивные типы, системные функции Как вывести прописью число килограммов с указанием дробной части в граммах? В отличие от вышеприведенного примера здесь предметами исчисления являются килограммы и граммы, а количество разрядов дробной части - три. Для ВыводимоеЧисло = 12,345 результат будет: «Двенадцать килограммов триста сорок пять граммов» Как долларовую сумму вывести прописью поанглийски? Для ВыводимоеЧисло = 1 232,45 результат будет: «One thousand two hundreds thirty two dollars 45 cents» Какзагрузитьвнешнююкомпоненту? Загрузим компоненту, позволяющую работать со сканером штрихкодов: 27 Примитивные типы, системные функции В случае ошибки загрузки компоненты или создания объекта возникает исключительная ситуация, которую рекомендуется отрабатывать с помощью конструкции Попытка. Как выполнить команду операционной системы? К примеру, требуется удалить все файлы из указанного каталога. Для реализации данной возможности достаточно выполнить следующую строку кода: Для просмотра доступных команд можно в командной строке системы выполнить команду «help». Вызвать командную строку, можно выполнив строку кода: Кроме этого, для запуска внешнего приложения (или открытия файла с использованием ассоциированного с ним приложения) может быть использован метод глобального контекста ЗапуститьПриложение(). В этом случае запуск приложения будет осуществляться непосредственно, минуя командный интерпретатор. Например: 28 Примитивные типы, системные функции Как реализовать код процедуры в зависимости от режима выполнения (на клиенте, на сервере, во внешнем соединении) ? Если алгоритм должен выполняться по-разному в зависимости от места выполнения процедуры, то можно воспользоваться инструкциями препроцессора: 29 Примитивные типы, системные функции Как при групповой обработке объектов реализовать стратегию «либо все, либо ничего»? Требуется загрузить либо все данные по справочнику «Единицы измерения», либо, в случае возникновения ошибки, нужно чтобы ни один элемент не был записан. Для реализации стратегии «либо все, либо ничего» можно использовать следующий фрагмент кода: Если необходимо но мере накопления каких-либо признаков «искусственно» отменить действия, совершаемые в транзакции, можно использовать метод системы: МО Примитивные типы, системные функции Как посчитать сумму по формуле сложного процента? Возведение в степень реализуется функцией Pow(). Первым параметром передается основание степени, вторым - показатель степени. Замечание: кроме работы со степенями математический аппарат системы позволяет работать с корнями, логарифмами и тригонометрическими функциями. 31 Универсальные коллекции Массив В каких ситуациях обычно используются массивы? Массив является универсальной коллекцией, то есть объектом, предназначенным для работы с временными наборами данных в течение сеанса работы пользователя. Необходимость в его использовании возникает, когда требуется работать с временным набором данных. Чаще всего это промежуточные операции обработки информации: подготовка отборов, реализация поиска, подготовка группирования, передача параметров и проч. Массивы могут создаваться оператором Новый или получаться в результате применения методов некоторых объектов. Как создать массив? Создание массивов чаще всего происходит посредством оператора Новый: где «СозданныйМассив» - имя переменной, которая будет содержать созданный объект типа Массив. После создания к массиву можно добавлять элементы (произвольное количество). Если же мы хотим создать массив с заранее определенной размерностью, это можно сделать так: В результате в переменной «СозданныйМассив» будет создан массив с десятью значениями. Для такого массива можно потом сразу обращаться к любому из десяти значений (начиная с нулевого по девятое) для записи или для чтения. А при необходимости к такому массиву можно так же еще добавлять новые элементы. Первый же добавленный элемент получит индекс «10». 32 Массив Как создать многомерный массив? Массив является линейной динамической коллекцией с произвольным типом значений. Поэтому значениями массива могут выступать другие массивы. То есть создание массива массивов и решает задачу создания многомерного массива. Это можно делать при использовании конструктора массива: или в процессе добавления очередных элементов к массиву: И в том и в другом случае мы решим задачу создания двумерного массива размерностью 2x8. Чтение и запись значений такого массива можно производить посредством директивного указания индексов: или при помощи метода Получить(): Хотелось бы еще раз отметить, что создание массива определенной размерности конструктором ограничивает только количество возможных к заполнению значений массива, но не препятствует добавлению новых значений (в качестве которых могут выступать массивы произвольной размерности). 33 Универсальные коллекции Как добавить элементы в массив? Допустим, массив, к которому нужно добавить значение из переменной «НовоеЗначение», называется «НашМассив». Если нужно просто добавить очередной элемент (с индексом на единицу больше самого старшего) - действуем следующим образом: Если нужно, чтобы новые значения добавлялись с определенным индексом, то можно использовать метод Вставить(): Как определить размер массива? Чтобы определить можно сделать так: количество элементов массива «НашМассив» Однако имейте в виду, поскольку индексация элементов массива начинается с нуля - значение переменной «Размер» будет на единицу больше значения самого старшего индекса. Как обратиться к элементу массива? При обращении как для записи, так и для чтения элементов массива лучше пользоваться оператором , указывая индекс элемента. Помните, что индексация начинается с нуля. Пусть в переменную «ПервоеЗначение» нужно считать значение самого первого элемента массива, а в элемент массива с индексом «9» записать значение из переменной «ДесятоеЗначение»: 34 Массив Аналогичных результатов можно добиться при помощи методов Получить() и Установить(): Замечание: в любом случае, чтобы иметь возможность обратиться к элементу массива, он должен уже существовать. Иначе получим ошибку с сообщением о том, что индекс находится за границами массива. Как перебрать элементы массива? Если перебор элементов массива нужен для чтения данных из массива - проще всего организовывать посредством цикла перебора коллекции. Например, чтобы вывести сообщения о каждом числе, найденном в массиве «МассивЭлементов», достаточно сделать следующее: Обратите внимание, «ЭлементМассива» - это произвольное имя переменной, принимающей в себя очередное значение элемента коллекции при выполнении цикла. Если же при переборе элементов массива нужно их редактировать, то для этого нужно работать еще и с индексами элементов. Лучше тогда использовать так называемый «цикл-счетчик». Например, чтобы обнулить все числовые элементы массива, достаточно сделать следующее: 35 Универсальные коллекции «Сч» - это переменная, принимающее очередное значение счетчика на каждом выполнении цикла. Именно из нее и будем считывать значение индекса очередного элемента массива. Значение самого большого индекса массива определяется посредством метода ВГраница(). Как удалить элемент массива? Удаление отдельных элементов массива происходит с обязательным указанием индекса удаляемого элемента. Так, например, будет удален первый элемент массива: Естественно, если указанный индекс будет выходить за границы массива - получим сообщение об ошибке. Кроме того, необходимо учитывать, что удаление элемента «из середины» массива приведет к уменьшению на единицу индексов элементов, стоявших «после» удаленного. Массив как бы «сомкнет ряды». Поэтому, например, один из наиболее простых вариантов удаления всех числовых элементов массива может выглядеть так: Сначала определяем самый старший индекс элементов массива. Цикл проверок и удалений чисел будет выполняться, пока очередное значение индекса не окажется меньше нуля. В цикле определяем тип значения элемента с текущим индексом. Если это число - удаляем данный элемент. Кроме того, в любом случае уменьшаем на единицу значение переменной «Индекс». В результате, поскольку перебор элементов массива проводится с конца, эффект «смыкания рядов» будет производиться только для уже проверенных элементов. 36 Массив ® Как удалить все элементы массива? Если требуется полное удаление элементов из массива, операция выполняется гораздо проще: Как удалить повторяющиеся элементы массива? Поскольку объект «массив» является одной из самых простых универсальных коллекций, методами поиска по значению он не обладает. Поэтому для того, чтобы удалить повторяющиеся элементы, следует перебрать все элементы массива и проверить их значения. Для выполнения поставленной задачи организуется два цикла: в первом цикле осуществляется перебор элементов массива и для каждого выбранного элемента осуществляется вложенный цикл сравнения 37 Универсальные коллекции текущего элемента с последующими элементами массива. В случае совпадения значений последующий элемент массива удаляется. Когда для очередного элемента с индексом «ТекущийИндекс» завершился вложенный цикл проверки с последующими - увеличиваем значение «ТекущийИндекс» на единицу с тем, чтобы следующий по индексу элемент попал в положение проверяемого. Как скопировать массив? Для получения копии массива в другом объекте (массиве) необходимо создать новый массив (массив-копию) конструктором. Далее в цикле перебора элементов исходного массива добавлять эти элементы в массив-копию. Массив Как проверить, что два массива идентичны? Это можно выполнить при помощи следующей функции. В качестве параметров ей передаются сами проверяемые массивы «ПервыйМассив» и «ВторойМассив». Сначала проверяем совпадение наибольших индексов в массивах, если совпадения нет - массивы уже не идентичны. Значит функция возвращает значение ЛОЖЬ. Далее необходимо произвести проверку идентичности элементов массивов с одинаковыми индексами. Поскольку индексация элементов массива начинается с нулевого значения - выполняем цикл-счетчик от нуля до значения наибольшего индекса массива. Внутри цикла при выполнении неравенства очередных элементов функция возвращает значение Ложь. Если цикл пройден до конца - значения всех элементов с одинаковыми индексами совпали. Значит функция может вернуть значение Истина. 39 Универсальные коллекции В массив выгружены данные, содержащие наименования контрагентов. Как их отсортировать? Список значений позволяет выполнять сортировки по представлению или по значению и, кроме того, обладает возможностями загрузки данных из массива и выгрузки в массив. Поэтому один из вариантов решения данной задачи может быть таким: Создаем список значений. Загружаем значения из массива «МассивНаименований». Сортируем список значений по значениям. Поскольку параметр не указали, направление сортировки будет - по возрастанию. Если нужно по убыванию - в качестве параметра надо передать соответствующее значение системного перечисления НаправлениеСорТИрОВКИ: После выполнения сортировки выгружаем значения из списка значений в массив. 40 Массив Есть массив, в который выгружены значения типа СправочникСсылка.Номенклатура. Как удалить все пустые значения массива? Получаем в виде параметра процедуры массив номенклатурных позиций. Устанавливаем нулевое значение счетчика - переменной «Счетчик». Организуем цикл, который будет выполняться, пока значение переменной «Счетчик» меньше количества элементов массива. Поскольку индексы элементов массива начинаются с нулевого значения, то наш цикл прервется в момент, когда значения индекса («Счетчик») и количества элементов совпадут. Внутри цикла проверяется условие, является ли ссылка, содержащаяся в очередном элементе массива - пустой. Если это так текущий элемент массива удаляется. В результате у следующих за ним элементов автоматически на единицу уменьшаться индексы. Кроме того, необходимо уменьшить на единицу значение переменной, отслеживающей количество элементов в массиве. Если же ссылка не пустая - увеличивается на единицу значение «Счетчик» с тем, чтобы на следующем ходе цикла работать уже со следующим элементом. 41 Универсальные коллекции Замечание: проверка на пустое значение для разных типов данных проводится по-разному. Только для ссылочных типов данных можно ее осуществлять посредством метода Пустая(). Как получить массив номенклатурных позиций, использованных в табличных частях «Номенклатура» и «Тара» накладной? Имеем ссылку на документ «СсылкаНаДокумент». Номенклатурные позиции могут быть указаны в колонке «Номенклат}фа» табличной части «Номенклатура» и в колонке «Номенклатура» табличной части «Тара». Тогда массив номенклатуры из обеих табличных частей можно получить следующим образом: Формируем массив «МассивНоменклатуры» посредством выгрузки колонки «Номенклатура» табличной части «Товары» документа. Аналогично формируем массив «МассивНоменклатурыТара» по табличной части «Тара». Далее в цикле перебора элементов второго массива добавляем их в первый. 42 Массив Есть две таблицы значений. Как получить массив совпадающих имен колонок? Данная операция может применяться для вспомогательного контроля перед загрузкой таблицы значений в таблицу записей регистра. Итак, есть «ТаблицаИсточник» PI «ТаблицаПриемник», требуется получить массив имен совпадающих по имени колонок. Создаем сначала конструктором «МассивСовпадающихКолонок». Далее выполняем цикл перебора колонок одной из таблиц. Внутри цикла в переменную «ИмяКолонки» получаем имя очередной колонки. Далее обращаемся к коллекции колонок другой таблицы значений и при помощи метода Найти() пытаемся найти такую же по имени колонку. Если поиск успехом не увенчается - метод выдаст значение Неопределено. А если удалось - добавляем очередной элемент к массиву «МассивСовпадающихКолонок». 43 Универсальные коллекции Как в запросе сделать отбор по нескольким вариантам заполнения реквизита типа «ПеречислениеСсылка»? Одним из приемов программирования, использующим массивы, является формирование коллекции возможных значений для заполнения параметров запроса. Это выполняется, например, когда в запросе используются отборы с операндами В или В ИЕРАРХИИ. Вот пример решения задачи: В параметр «МассивПричин» устанавливается значение - массив возможных причин, набранный из элементов перечисления « ПричиныОтсутствия». Замечание: для решения подобных задач (с операндами В и В ИЕРАРХИИ) можно передавать не только данные типа Массив, можно еще СписокЗначениЙ или вообще сформировать коллекцию возможных значений вложенным запросом в самом тексте запроса. Вариант выбора заполнения параметра зависит от конкретики самой задачи. 44 Массив Как из регистра сведений «РасчетчикиЗарплатыОрганизации» получить в виде массива всех расчетчиков зарплаты определенного подразделения организации? Периодический независимый регистр сведений «РасчетчикиЗарплатыОрганизации» имеет следующую структуру: Данную задачу можно решить посредством применения методов объектной модели или запросом. Пример решения посредством объектной модели: Создаем набор записей регистра. Устанавливаем отбор по значению измерения «ПодразделениеОрганизации». Читаем данные набора записей. Выгружаем колонку набора записей «Пользователь» в массив. Пример решения задачи посредством запроса: 45 Универсальные коллекции Источником в запросе будет таблица регистра «РегистрСведений.РасчетчикиЗарплатыОрганизации». Накладываем отбор по условию равенства поля «ПодразделениеОрганизации» определенному значению. В качестве выходных полей выбираем только «Пользователь». После выполнения запроса делаем выборку по результату запроса и в цикле перебора ее - формируем нужный массив. В данных примерах оба способа возвращают одинаковые результаты примерно за одинаковое время потому, что никаких дополнительных действий в процессе получения информации не требуется. Второй способ на первый взгляд кажется более длинным в отношении написания кода. Но если нам понадобится произвести отбор более чем по одному условию, или получить массив неповторяющихся значений - то вторым способом получить такие данные будет значительно легче и быстрее с точки зрения скорости исполнения. 46 Структура ® В каких ситуациях обычно используются объекты типа «Структура»? Структура является универсальной коллекцией, то есть объектом, предназначенным для работы с не хранящимися в базе данных совокупностями значений. Необходимость в ее использовании возникает, когда требуется работать с временным набором данных с чуть более сложной природой, нежели в массиве. Если элемент массива можно было характеризовать только числовым индексом и значением произвольного типа, то элемент структуры характеризуется строковым ключом и значением произвольного типа. Чаще всего структуры применяют в ситуациях, когда необходимо узнать или использовать имена реквизитов, свойств, полей, подчиненных объектов для тех или иных объектов; узнать или использовать значения реквизитов, свойств, полей, подчиненных объектов по их именам для тех или иных объектов. Кроме того, структуры удобно использовать для передачи параметров при работе с различными объектами. Структуры могут создаваться конструктором НОВЫЙ или получаться в результате применения методов некоторых объектов. Ввод элементов в структуру можно осуществлять как посредством параметров конструктора, так и посредством метода Вставить(). Как создать структуру? Создание структуры чаще всего происходит посредством оператора НОВЫЙ: где «СозданнаяСтруктура» - имя переменной, которая будет содержать созданный объект типа Структура. После вышеприведенного создания в структуру можно вставлять элементы (произвольное количество). 47 Универсальные коллекции Если же мы хотим создать структуру с заранее определенными элементами - это можно сделать, например, так: Первым параметром передается строка, в которой через запятую перечисляются ключи элементов структуры. Остальные параметры содержат значения для элементов структуры в том же порядке, в котором были перечислены ключи. Для такой структуры впоследствии можно обращаться к любому из элементов для записи или для чтения значения. А так же, при необходимости, к этой структуре можно еще добавлять новые элементы. Как добавить элементы в структуру? Для добавления элементов в структуру используется метод Вставить(). Первым параметром указывается ключ, вторым - значение нового элемента. Замечание: если в составе структуры уже был элемент с подобным ключом - то старый элемент будет замещен новым. Например: Как обратиться к элементу структуры? Для чтения значений элементов структуры можно использовать несколько вариантов написания кода. Для структуры «Оппонент», в составе которой есть элемент с ключом «Возраст» можно использовать явное указание значения ключа: 18 Структрура или передачу ключа в переменной: Также можно использовать метод СвоЙСТВО(), который получает значение элемента структуры по указанному ключу: Для записи значений элементов структуры использовать несколько вариантов написания кода. Если мы хотим изменить значение возраста в вышеописанного примера - можно это сделать так: также можно структуре из или так: или так: Как перебрать элементы структуры? Поскольку структура является коллекцией - перебрать элементы структуры можно посредством цикла перебора коллекции. Например, чтобы сообщить обо всех ключах и значениях элементов структуры «СтруктураПараметров», можно сделать следующее: 49 Универсальные коллекции Как удалить элемент структуры? Чтобы удалить элемент структуры - необходимо знать его ключ. Например, чтобы удалить из структуры «СтруктураПараметров» элемент с ключом «Номенклатура», достаточно сделать следующее: Если же нужно удалить все элементы структуры - применяется метод ОЧИСТИТЬ(): Как в структуре установить значение для элемента с определенным ключом? Все ключи элементов структуры - уникальны. Поэтому добавление новых элементов и замена (установка) значений для «старых» элементов выполняется одним и тем же методом Вставить^): Результатом примера выше будет структура, состоящая только из одного элемента: ключ у него - «Цвет», значение - «Синий» из системного набора значений \Л/еЬЦвета. Структрура Как получить в структуру многомерные данные? Как собрать информацию по установленным в форме журнала отборам? Для формы журнала документов установлены некие отборы. Чтобы сформировать многомерную структуру всех используемых отборов объекта «ЖурналДокументовСписок», можно сделать следующее: Создаем конструкторами две структуры. Структура «СтруктураОтборов» впоследствии будет содержать элементы, где в качестве ключа будет указано название отбора, а в качестве значения « СтруктураПараметровОтбора». В цикле перебора коллекции отборов объекта «ЖурналДокументовСписок» сначала проверяем, используется ли данный отбор. Если используется - заполняем структуру параметров данного отбора. Полученную структуру используем в качестве значения добавляемого элемента объекта «СтруктураОтборов». Впоследствии, если нам потребуется информация из полученной структуры, можно будет, например, перебрать элементы 51 Универсальные коллекции «СтруктураОтбора», а для каждого из этих элементов - перебрать элементы ее значения - структуры «ПараметрыОтбора» Как определить, есть ли в структуре элемент с ключом «Контрагент», и если есть, но содержит пустое значение справочника или Неопределено - удалить этот элемент? В качестве параметров метода СвоЙСТВО() можно указать ключ и переменную для получения значения по ключу. Кроме того, сам метод возвращает Истина, если элемент с данным ключом существует, и Ложь - если нет. Получив значение и проверив его на требуемые условия, удаляем элемент с указанным ключом из структуры. Замечание: кроме метода СвоЙСТВО() получить значения элемента структуры позволяют следующие варианты обращения по ключу: Структура-Контрагент или Структура[ "Контрагент" Структрура Как из табличной части «Товары» документа получить все строки, где значение реквизита «Цена» равно нулю, а значение реквизита «СтавкаНДС» равно значению «НДС18» перечисления «СтавкиНДС»? Для поиска строк, соответствующих условию определенного отбора, можно сделать следующее: СтруктураДляПоиска = Новый Структура("Цена, СтавкаНДС", О, Перечисления.СтавкиНДС.НДС 18); МассивСтрок = Товары. НайтиСтроки(СтруктураДляПоиска); Сначала создаем структуру для поиска. Далее посредством метода НаЙТиСтр0КИ() из табличной части документа «Товары» получаем массив строк, соответствующих отбору по структуре поиска. Обратите внимание, в данном примере был показан вариант добавления и заполнения элементов структуры непосредственно в конструкторе. Как получить данные о текущей учетной политике бухгалтерского учета организации из периодического регистра сведений на заданную дату? Периодический регистр сведений «УчетнаяПолитикаБухгалтерскийУчет» имеет следующую структуру: Тип значения измерения «Организация» СправочникСсылка. Организации. Ссылка на организацию находится в переменной «ЮрЛицо». Дата, на которую необходимо получить данные - переменная «ДатаПолучения». 53 Универсальные коллекции Получение необходимых данных можно организовать посредством метода ПолучитьПоследнее() менеджера регистра: Метод предназначен для получения данных наиболее поздней записи регистра, соответствующей указанным периоду и значениям измерений регистра. Значения измерений регистра должны предаваться в виде структуры. Каждый элемент структуры в качестве ключа должен использовать имя измерения. В качестве значения элемента структуры передаем значение отбора по этому измерению. Дату получения и полученную структуру отбора используем в качестве параметров для метода ПолучитьПоследнее(). Результатом применения метода к периодическому регистру сведений «УчетнаяПолитикаБухгалтерскийУчет» будет структура. Элементы полученной структуры состоят из названия ресурса в качестве ключа и значения ресурса в качестве значения. 54 Структрура Как сформировать структуру названий реквизитов табличной части произвольного документа? Пример функции, решающую данную задачу - ниже. В качестве параметров необходимо передать ссылку на документ и имя табличной части документа. Конструктором создаем структуру « Стру ктураТабл ичнойЧасти Доку мента». В цикле перебора реквизитов нужной табличной части полученного документа вставляем в структуру элементы с названиями полученных реквизитов. Замечание: значения элементам структуры можно было и не указывать - все зависит от того, как в дальнейшем собираемся использовать полученную структуру. Как получить запросом данные табличной части документа, имея структуру названий реквизитов табличной части? Пример функции, решающей данную задачу - ниже. В качестве параметров необходимо передать ссылку на документ или объект документа, имя табличной части и структуру названий реквизитов этой табличной части. 55 Универсальные коллекции Функция основана на сборе информации запросом, чей текст собирается «кусочками» из строковых переменных: Создаем переменную «ПоляРеквизитов». В цикле перебора элементов структуры имен полей табличной части добавляем к переменной «ПоляРеквизитов» «по кусочкам» будущие имена выходных полей запроса. Добавляются они через запятую. Далее формируем запрос, к тексту которого добавляем строку имен выходных полей запроса. Источником указываем таблицу нужной табличной части нужного документа. Кроме того, накладываем отбор по полю «Ссылка». Функция возвращает результат выполнения запроса. 56 Соответствие ф В каких ситуациях обычно используются объекты типа «Соответствие»? Соответствие является универсальной коллекцией, то есть объектом, предназначенным для работы с не хранящимися в базе данных совокупностями значений. Необходимость в его использовании возникает, когда требуется работать с временным набором данных с чуть более сложной природой, нежели в структуре. Если элемент структуры можно было характеризовать только строковым ключом и значением произвольного типа, то элемент соответствия характеризуется ключом произвольного типа и значением произвольного типа. Чаще всего соответствия применяют в ситуациях, когда необходимо хранить в оперативной памяти для последующей обработки данные с ключами произвольного типа. Кроме того, соответствия удобно использовать для передачи параметров при работе с различными объектами. Соответствия могут создаваться конструктором НОВЫЙ. ф Как создать соответствие? Создание соответствия происходит посредством оператора Новый: I СозданноеСоответствие = Новый Соответствие(); где «СозданноеСоответствие» «СозданноеСоответствие» - имя переменной, которая будет содержать созданный созданный объект типа типа Соответствие. Соответствие. содержать После вышеприведенного создания в соответствие можно вставлять элементы (произвольное количество). количество). элементы (произвольное ф Как добавить элементы в соответствие? Допустим к соответствию Допустим соответствию «ВозрастСотрудников» «ВозрастСотрудников» нужно добавить новый элемент. В качестве ключа должна выступать ссылка на сотрудника (ее можно считать из переменной «Сотрудник»), в качестве значения - возраст сотрудника (его можно считать из переменной «ВозрастСотрудника»). «ВозрастСотрудника»). 57 Универсальные коллекции Тогда добавление нового элемента можно произвести так: или так: Как обратиться к элементу соответствия? Запись значений элементов соответствия можно выполнять теми же способами, которые рассмотрены в вопросе «Как добавить элемент в соответствие?» на странице 57. А чтение значений элементов соответствия можно выполнять следующим образом: или так: В приведенных примерах из соответствия «ВозрастСотрудников» по ссылке на сотрудника в качестве ключа будет получено значение элемента соответствия. Как перебрать элементы соответствия? Поскольку соответствие является коллекцией - перебрать элементы соответствия можно посредством цикла перебора коллекции. Например, чтобы сообщить обо всех ключах и значениях элементов соответствия «Замены», можно сделать следующее: 58 Соответствие Как удалить элемент соответствия? Чтобы удалить элемент соответствия - необходимо знать его ключ. Например, чтобы удалить из соответствия «Замены» элемент со ссылкой на объект, содержащийся в переменной «УдаляемыйТовар», в качестве ключа, достаточно сделать следующее: Если же нужно удалить все элементы соответствия - применяется метод ОЧИСТИТЬ(): Как получить данные из соответствия? В соответствии «КурсыВалютДокумента» в качестве ключа используется значение валюты, а значениями являются структуры, содержащие «Курс» и «Кратность». Как получить курс и кратность валюты «УправленческаяВалюта» ? Сначала по ключу (ссылке на управленческую валюту) получаем значение соответствия. Поскольку значением является структура курса валют - далее получаем значения структуры по их названиям. 59 Универсальные коллекции Как получить многоуровневое соответствие видов расчетов, обладающих базовыми видами расчетов? Для плана видов расчетов «ОсновныеНачисления» необходимо получить соответствие «ВидыРасчетов», где в качестве ключей будут использоваться виды расчетов, обладающие базовыми. А в качестве значений - соответствия базовых видов расчетов. В качестве ключей последних - базовые виды расчета, в качестве значений - структуры, содержащие их свойства «Наименование» и «Предопределенный». Виды расчета Базовые виды расчета Оклад по дням Оклад по часам Ежегодный отпуск Оплата по часовому т арифу Оплата по дневному тарифу Оплата по произволе твенным нарядам Оклад по дням Надбавка за в редность Оклад по часам Оплата по произволе твенным нарядам Свойства базового вида расчета "Наименование" - "Оклад по дням" "Предопределенный" - Истина "Наименование" - "Оклад по часам" "Предопределенный" - Ложь "Наименование" "Оплата по часовому тарифу" "Предопределенный" - Ложь "Наименование" "Оплата по дневному тарифу" "Предопределенный" - Истина "Наименование" "Оплата по производственным нарядам" "Предопределенный" - Истина "Наименование" - "Оклад по дням" "Предопределенный" - Истина "Наименование" - "Оклад по часам" "Предопределенный" - Ложь "Наименование" "Оплата по производственным нарядам" "Предопределенный" - Истина Первичный сбор информации удобнее осуществить при помощи запроса с использованием итогов. Последующий перебор группировок результат запроса даст возможность сформировать необходимые объекты: 60 Соответствие Для запроса источником является таблица «ПланВидовРасчета.ОсновныеНачисленияОрганизации.БазовыеВидыРас чета». Выходными полями делаем все, необходимые для решения нашей задачи. Кроме того, вводим дополнительные итоги по полю «Ссылка» (ссылка на виды расчета). После выполнения запроса делаем выборку по верхнему уровню группировок результата запроса. 61 Универсальные коллекции Создаем конструктором три объекта - соответствие «ВидыРасчетов», в которое будем впоследствии добавлять виды расчетов, обладающие базовыми; соответствие «БазовыеВидыРасчетов», в которое будем добавлять базовые виды расчетов для каждого отдельного вида (владельца); структуру «СвойстваВидовРасчетов» для добавления информации о свойствах базовых видах расчетов. В цикле перебора верхнего уровня группировок (по видам расчета) сначала очищаем соответствие «БазовыеВидыРасчета». Далее открываем цикл перебора записей второго уровня группировки результата запроса (то есть уже по базовым видам расчетов определенного владельца). В этом цикле заполняем значения структуры «СвойстваВидовРасчетов» по ключам - названиям свойств. Далее добавляем сформированные структуры в качестве значений соответствия «БазовыеВидыРасчета» с конкретным базовым видом расчета в качестве ключа. По окончании вложенного цикла добавляем очередной элемент в соответствие «ВидыРасчетов» с заполнением значения ключа из поля «Ссылка», и заполненным соответствием «БазовыеВидыРасчета» в качестве значения. Список значений, таблица значений, дерево значений ® В каких ситуациях обычно используются списки значений, таблицы значений, дерево значений? Все эти объекты являются универсальными коллекциями, то есть объектами, предназначенным для работы с не хранящимися в базе данных совокупностями значений. Необходимость в использовании списка значений возникает, когда требуется работать с временным набором данных для решения интерфейсных задач. Дело в том, что в отличие от более простых универсальных коллекций (массива, структуры, соответствия) список значений состоит из объектов - ЭлементСпискаЗначениЙ. А элемент списка значений характеризуется следующим набором свойств: Значение; Представление. Содержит строковое пользовательское представление. То есть именно его пользователь увидит на экране. По умолчанию - генерируется автоматически; Пометка; Картинка; Применение списков значений для обычных задач универсальных коллекций, но не связанных с интерфейсными действиями, как правило - излишне. Обычно с этой функциональностью справляются объекты «попроще»: Массив, Структура, Соответствие. Таблицы значений позволяют работать с данными сущностей, представимых в виде таблиц, то есть «раскладываемых» на колонки и строки. А ведь с точки зрения многих систем автоматизации вообще «весь мир = совокупность таблиц». При этом можно добавлять/удалять данные (и колонки, и строки, и значения); искать данные (и колонки, и строки, и значения); сортировать данные (по любым колонкам); выгружать-загружать данные; подсчитывать итоги по колонкам; сворачивать данные и т.д. Дерево значений позволяет в добавление к вышеприведенным операциям еще вводить уровни иерархии для этих данных и оперировать в пределах уровней или игнорируя их. 63 Универсальные коллекции Подобный набор возможностей помогает решать самый широкий спектр задач промежуточной обработки данных произвольного типа. Как создать список значений? Список значений можно создать посредством оператора НОВЫЙ: где «СозданныйСписок» - имя переменной, которая будет содержать созданный объект типа СписокЗначении. Как добавить элементы в список значений? Например, требуется добавить в список значений «СписокСотрудников» новый элемент со значением ссылки на сотрудника (содержится в переменной «ТекущийСотрудник»), ФИО сотрудника в качестве представления (содержится в реквизите «ФИО» объекта «ТекущийСотрудник») и фотографии сотрудника в качестве картинки (содержится в переменной «Фото»): Если нужно, чтобы новые значения добавлялись с определенным индексом (переменная «Инд»), то можно использовать метод Вставить(): Если при этом в списке значений уже был элемент с таким индексом, то старый элемент получит индекс на единицу больше предыдущего; аналогично сдвинуться индексы у всех последующих. Если при использовании метода Вставить() указать индекс, выходящий за границы списка, - получим сообщение об ошибке. 64 Список значений, таблица значений, дерево значений Как найти элемент списка значений? Например, в списке значений «СписокСотрудников» надо найти элемент, в котором в качестве значения указан сотрудник, на которого ссылается переменная «ИскомыйСотрудник». Затем нужно сообщить индекс найденного элемента. Это можно выполнить следующим образом: Замечание: если искомое значение в списке может встретиться несколько раз - при таком подходе найдем только первый элемент, где оно содержится. Поэтому смотрите по ситуации. Поскольку список значения - объект, предназначенный, прежде всего для визуализации возможностей выбора пользователем, обычно при его заполнении уже сразу предотвращают возможность повторов. Если же такая возможность осмыслена, то получить все элементы списка значений, содержащие определенное значение можно, например, в цикле перебора элементов списка значений. Как обратиться к элементу списка значений? Если требуется получить доступ к элементу списка значений с определенным индексом (пусть содержится в переменной «Инд»), можно поступить так: или так: В любом случае - то, что получаем, еще не есть значение, заложенное в этот элемент списка (это еще не сотрудник), а именно объект типа ЭлементСпискаЗначений. 65 Универсальные коллекции Впоследствии с него можно считать значения свойств: Как перебрать элементы списка значений? Поскольку имеем дело с индексированной коллекцией, то можно использовать цикл перебора элементов коллекции или «цикл-счетчик». Например, чтобы сообщить значения всех элементов списка значений «СписокСотрудников», можно использовать следующий код: То же через «цикл-счетчик»: Как удалить элемент списка значений? Удаление отдельных элементов списка значений происходит с обязательным указанием индекса удаляемого элемента. Так, например, будет удален первый элемент массива: Естественно, если указанный индекс будет выходить за границу индексов списка - получим сообщение об ошибке. Кроме того, необходимо учитывать, что удаление элемента «из середины» списка приведет к уменьшению на единицу индексов элементов, стоявших «после» удаленного. Список значений - «сомкнет ряды». 66 Список значений, таблица значений, дерево значений Решим задачу удаления всех элементов списка «СписокОбъектов», содержащих числовые значения: значений Сначала определяем самый старший индекс элементов списка значений. Цикл проверок и удалений элементов будет выполняться, пока очередное значение индекса не окажется меньше нуля. В цикле определяем тип значения элемента с текущим индексом. Если это число - удаляем данный элемент. Кроме того, в любом случае уменьшаем на единицу значение переменной «Индекс». В результате, поскольку перебор элементов списка значений производится с конца, то эффект «смыкания рядов» будет актуален только для уже проверенных элементов. ф Как создать таблицу значений и заполнить ее поля? Для создания таблицы значений используется оператор Новый: После этого молено создать колонки таблицы (при необходимости можно задать допустимые типы значений для колонки, заголовок и ширину колонки в символах). Затем можно добавить новую строку и установить значения в колонках таблицы: 67 Универсальные коллекции или так: Как найти значение в таблице значений? Если требуется «ТаблицаЗначений», сделать так: I найти первую где присутствует строку таблицы значений «ИскомоеЗначение», можно Найден наяСтрока = ТаблицаЗначений.Найти(ИскомоеЗначение); Если требуется найти первую строку, где «ИскомоеЗначение» может быть найдено, например, в колонках «Поставщик» и «Покупатель», то: Если же нужно найти все строки, где в колонке «Сотрудник» присутствует искомое значение, то это можно выполнить при помощи метода НаЙТиСтроки(): Сначала создаем структуру поиска, каждый элемент которой будет содержать название колонки таблицы значений в качестве ключа и искомое значение в этой колонке - в качестве значения. Далее структуру поиска передаем в качестве параметра методу НаЙТиСтроки(). Результат - массив строк таблицы значений, соответствующих структуре поиска. Список значений, таблица значений, дерево значений Замечание: если в этом примере в структуру поиска добавить поискнужного значения, например, еще и в колонке «Ответственный» - то в результате применения метода НаЙТиСтроки() получим все строки, где и «Сотрудник» и «Ответственный» равны искомому значению. Как перебрать строки таблицы значений? Поскольку имеем дело с индексированной коллекцией, то можно использовать цикл перебора элементов коллекции или «цикл-счетчик». Например, чтобы сообщить значения колонки «Сотрудник» всех строк таблицы значений «ТаблицаСотрудников», можно использовать следующий код: То же через «цикл-счетчик»: ® Как удалить строки (колонки) таблицы значений? Удаление отдельных строк таблицы значений происходит с обязательным указанием удаляемой строки или индекса удаляемой строки. Если нужно удалить строку «УдаляемаяСтрока», входящую в таблицу значений «ТаблицаЗначений»: А так, например, будет удалена первая строка таблицы значений: 69 Универсальные коллекции Естественно, если указанный индекс будет выходить за границу индексов строк таблицы значений - получим сообщение об ошибке. Аналогично и для колонок. Только работать уже надо с коллекцией колонок таблицы значений. Доступ к ней - через свойство КОЛОНКИ таблицы значений. или Кроме того необходимо учитывать, что удаление строки (или колонки) «из середины» таблицы значений приведет к уменьшению на единицу индексов строк, стоявших «после» удаленной (эффект «смыкания рядов», вернее -«смыкание строк»). Например, решим задачу удаления всех строк таблицы значений «ТаблицаЗначений», содержащих числовые значения хотя бы в одной колонке: Сначала определяем самые старшие индексы строк и колонок таблицы значений. Цикл проверок и удалений строк будет выполняться, пока очередное значение индекса строки не окажется меньше нуля. Внутри цикла но строкам делаем цикл-счетчик перебора индексов колонок. Во вложенном цикле определяем тин значения элемента находящегося в строке с текущим индексом и в очередной колонке. Если 70 Список значений, таблица значений, дерево значений это число - удаляем строку таблицы значений и прерываем вложенный цикл. Кроме того, в любом случае на каждом шаге внешнего цикла уменьшаем на единицу значение переменной «Индекс». В результате, поскольку перебор строк таблицы значений производится с конца, то эффект «смыкания рядов» будет актуален только для уже проверенных элементов. Как заполнить таблицу значений, если имена колонок содержатся в переменных? Если имя колонки, для которой требуется установить значение, содержится в переменной, можно использовать оператор : В вышеприведенном коде: «ТаблицаЗначений» - имя таблицы значений; «ИмяКолонки» - строковая переменная, содержащая имя колонки, по которой нужно заполнить значение; «Значение» - переменная, содержащая само заполняемое значение. Как заполнить всю колонку таблицы значений нужным значением? Колонку «ФлагФискального Учета» в таблице «ТаблицаЗначений» необходимо заполнить значением Ложь. значений Применяем для таблицы значений метод ЗаполнитьЗначения(). Первым параметром передаем заполняемое значение. Вторым параметром - имя заполняемой колонки. Замечание: если нужно заполнить несколько колонок значением - их имена указывают через запятую во втором параметре. Если не указать второй параметр - значением заполнятся все поля таблицы. 71 Универсальные коллекции Как таблицу значений «ТаблицаПолучатель» заполнить данными таблицы значений «ИсходнаяТаблица»? Если «ТаблицаПолучатель» на момент выполнения операции еще не существует, или ее предыдущие колонки сохранять не нужно, можно создать ее, как полную копию исходной: Вариант второй: таблица «ТаблицаПолучатель» существует, и жалко терять ее колонки и ограничения на типы данных колонок. Но нужно заполнить данные по колонкам, имена которых совпадают с именами исходной таблицы. Тогда можно так: Для каждой строки исходной таблицы добавляется новая строка в таблицу получатель и выполняется заполнение значений в тех колонках новой таблицы, имена которых совпадают с именами колонок в исходной таблице. Замечание: если у таблиц не будет колонок с одинаковыми именами - таблица-получатель будет в результате содержать столько же строк с пустыми значениями, сколько строк было в таблице-источнике. Если у каких-то одноименных колонок тип значения данных из таблицы-источника не попадет в массив разрешенных типов колонки таблицы-получателя - в таких полях получим пустые значения. Рассмотрим третий случай. В случае одноименных колонок - колонку таблицы-получателя нужно привести в полное соответствие колонке таблицы-источника. 72 Список значений, таблица значений, дерево значений Нам придется заменить колонку в таблице получателе на новую, чьи свойства полностью будут соответствовать колонке таблицы-источника. Поэтому в случае обнаружения в таблице-получателе одноименной колонки собираем в переменных все свойства для новой колонки. Далее удаляем старую и создаем новую колонку. Далее выполняем цикл перебора строк исходной таблицы. В цикле добавляем к таблице-получателю новую строку и открываем цикл перебора имен колонок в массиве совпадающих колонок. Внутри этого вложенного цикла производим заполнение ячеек таблицы получателя данными ячейки таблицы-источника. 73 Универсальные коллекции Как добавить колонки к таблице значений «ТаблицаЗначений» с ограничениями по типу? При добавлении колонки можно просто указать ее имя, а второй параметр метода Добавить() - не трогать. В этом случае тип данных колонки - произвольный. Можно заполнить значение второго параметра. Туда необходимо передавать описание разрешенного для колонки типа. Само описание можно получить при помощи конструктора, передав последнему в качестве параметра строковое название типа (если много типов - через запятую) или массив допустимых типов. Если среди типов разрешенных к заполнению данных колонки есть строка - можно ограничить ее разрядность (длину), указать использование неременной или фиксированной длинны. Все это обеспечивается созданием объекта при помощи конструктора КвалификаторыСтроки. Далее этот объект будет использован в качестве одного из параметров конструктора ОписаниеТипов. Аналогичные действия можно квалификаторов числа и даты. 74 осуществлять в отношении Список значений, таблица значений, дерево значений Обратите внимание, описание типов можно строить конструктором как «с нуля», так и использовать как основу уже существующее описание типов. Как изменить тип значения колонки таблицы значений, полученной выгрузкой из запроса? Запросом собираются данные по документам «Посту плениеТоваров Услуг» PI выгружаются в таблицу значений «ТаблицаСсылок» (колонка «Ссылка»). Впоследствии к этой таблице значений будут добавляться еще строки. Как обеспечить возможность добавления в полученную таблицу значений в колонку «Ссылка» документов других видов («ОприходованиеТоваров», « ВозвратОтПокупателя») ? При выгрузке данных из запроса в таблицу значений тип значения колонок определяется типом значений колонок результата запроса. Поэтому одним из самых простых вариантов решения задачи может быть воздействие на запрос, а не на таблицу значений. 75 Универсальные коллекции Создаем пустые ссылки на документы «ОприходованиеТоваров» и «ВозвратОтПокупателя». Далее в запросе делаем объединение с записями, содержащими эти пустые ссылки. Причем в объединяемых запросах по пустым ссылкам применяем ПЕРВЫЕ 0 для того, чтобы впоследствии не удалять строки с пустыми ссылками из таблицы выгруженного результата запроса После выполнения и выгрузки запроса в таблицу значений «ТаблицаСсылок» тип значения колонки «Ссылка» будет составным: «NULL, ДокументСсылка ЛоступлениеТоваровУ слуг, ДокументСсылка. ОприходованиеТоваров, ДокументСсылка.ВозвратОтПокупателя». То есть - то, что и требовалось. Как самостоятельно заполнить дерево значений? Для иллюстрации данной возможности создадим обработку, в которой определен реквизит «Дерево» (тип ДеревоЗначениЙ). В диалоге определено табличное поле, связанное через свойство данные с реквизитом «Дерево» (имя элемента управления «Дерево»). Следующая процедура произведет запись данных в дерево значений. 76 Список значений, таблица значений, дерево значений Следующая процедура показывает один из вариантов установки текущего значения в элементе управления, связанного с деревом (табличном поле). 77 Прикладные объекты Справочники © Как создать элемент (группу) справочника? Создание нового элемента в неиерархическом справочнике можно выполнить при помощи следующего кода: Если справочник иерархический, то выполнение этого кода приведет к созданию нового элемента в корне справочника. Для того чтобы создать новый элемент в определенной группе иерархического справочника, необходимо также указать родителя создаваемого элемента: Если требуется создать новую группу в иерархическом справочнике, то для этого следует использовать метод менеджера справочника Создать Груп пу (). Если группа должна находиться внутри 78 Справочники определенной группы справочника, также следует указать и родителя создаваемой группы: Следует обратить внимание на тот факт, что у реквизитов, в которые будет производиться запись значений в свойстве «Использование» должно стоять одно из перечисленных ниже значений: Для группы Для группы и элемента Если для справочника установлен вид иерархии Иерархия элементов, то для создания новых элементов следует использовать метод СоздатьЭлемент() менеджера справочника, а иерархия создаваемых элементов будет определяться значением свойства Родитель объекта справочника: 79 Прикладные объекты Как найти элемент справочника? Для поиска элемента справочника можно использовать несколько способов. По коду: При организации поиска по коду обращайте внимание на тип кода справочника (Число или Строка). По наименованию: По реквизиту: Во всех методах поиска есть параметры позволяющие искать в нужной группе, в рамках подчинения определенному элементу справочника владельца и ряд других параметров. 80 Справочники Как удалить элемент справочника? Для корректного удаления элемента справочника необходимо убедиться в том, что другие данные не содержат ссылок на удаляемый элемент справочника. Например, в переменной «СсылкаНаУдаляемыйЭлемент» содержится ссылка на удаляемый элемент справочника: Для пометки элемента справочника на удаление можно использовать метод УстановитьПометкуУдаления() объекта справочника: Использование этого метода позволяет установить или снять пометку на удаление элемента справочника, причем будут инициированы события Перед записью и При записи объекта справочника, поскольку выполняется сохранение измененного свойства ПометкаУдаления объекта справочника. 81 Прикладные объекты Как перебрать элементы справочника? Для того чтобы перебрать элементы справочника, необходимо сформировать выборку элементов с нужными параметрами и затем обойти ее в цикле. Например, для перебора всех элементов справочника «Номенклатура» в иерархическом порядке, можно использовать следующий код: Аналогичного результата можно добиться, используя запрос: Благодаря использованию запроса можно формировать выборку элементов справочника более «гибко», поскольку запрос позволяет задать произвольные условия на выбираемые данные. 82 Справочники ® Как выбрать все элементы из определенной группы? Организуем выборку элементов справочника из группы, ссылка на которую определена в переменной «ПолеВводаРодитель»: В результате работы этого кода будут получены все дочерние элементы выбранного элемента справочника. Аналогичное действие, выполняемое с помощью запроса, будет выглядеть следующим образом: 83 Прикладные объекты Если необходимо получить не только дочерние элементы, но и все элементы, находящиеся в иерархии выбранного элемента, следует, при использовании объектной техники, выполнять метод ВыбратьИерархически() менеджера справочника: а при использовании запроса применять условие В ИЕРАРХИИ: 81 Справочники ® Как перебрать элементы подчиненного справочника с помощью запроса? Справочник «КонтактныеЛица» подчинен справочнику «Контрагенты». Требуется перебрать всех контактных лиц определенного контрагента. Ссылка на данного контрагента находится в переменной «Контрагент». Делаем запрос по таблице справочника «Контактные лица» с отбором по полю «Владелец». В качестве владельца передаем ссылку на элемент справочника «Контрагенты». 85 Прикладные объекты ® Как перебрать элементы подчиненного справочника с помощью выборки справочника? Справочник «КонтактныеЛица» подчинен справочнику «Контрагенты». Требуется перебрать всех контактных лиц определенного контрагента. Ссылка на данного контрагента находится в переменной «Контрагент». ф Как открыть форму списка (элемента) справочника? Для того чтобы открыть форму списка справочника, можно воспользоваться методом ПолучитьФормуСписка() менеджера справочника: Для того чтобы открыть произвольную форму справочника, можно использовать метод ПолучитьФорму() менеджера справочника: Однако следует помнить, что если методом ПолучитьФорму() выполняется получение формы элемента или группы справочника, то будет получена форма нового элемента (группы). Справочники Для того чтобы открыть форму существующего элемента или группы справочника, следует использовать метод ПолучитьФорму() ссылки или объекта справочника: ® Как добавить запись в табличную часть элемента справочника? Имеется ссылка на элемент справочника «Контрагенты». Как добавить запись в табличную часть «ВидыДеятельности» этого элемента? Модифицировать можно только объект справочника. Поэтому так: Получаем объект справочника от ссылки на элемент. Добавляем новую строку к табличной части полученного объекта. Заполняем реквизиты табличной части в данной строке. Записываем измененный элемент справочника. Как удалить строки из табличной части справочника? Для того чтобы полностью очистить табличную часть элемента справочника, можно воспользоваться методом ОЧИСТИТЬ() табличной части справочника: 87 Прикладные объекты Если требуется выборочное удаление строк табличной части (например, в зависимости от значения их реквизитов), можно сначала отобрать строки, удовлетворяющие условию, а затем удалить каждую из них методом Удалить() табличной части справочника. В следующем примере подразумевается, что переменная «ВыбранныйЭлемент» содержит ссылку на обрабатываемый элемент справочника, а переменная «ВыбранныйВидДеятельности» содержит ссылку на вид деятельности, который не должен присутствовать у обрабатываемого элемента: ф Как перебрать строки табличной части справочника? Табличная часть справочника представляет собой коллекцию строк, которую можно перебрать в цикле. Реквизиты табличной части будут доступны как свойства строки табличной части. Например, перебор строк табличной части «ВидыДеятельности» справочника «Контрагенты» может быть выполнен следующим образом: Справочники ® Как создать элемент в нужной группе? Необходимо создать элемент справочника номенклатура, так чтобы при этом он попал в нужную группу. Если группы с указанным кодом нет, то тогда такая группа должна быть создана. Можно использовать предопределенную группу, в этом случае вместо поиска и создания новой группы можно использовать строку: 89 Прикладные объекты Обратите внимание на тот факт, что механизм работает, только если в справочнике установлен вид иерархии «Иерархия групп и элементов». В противном случае код будет выглядеть следующим образом: Если вид иерархии справочника «Иерархия элементов», то понятие группы в нем отсутствует. Как узнать, есть ли у текущего элемента подчиненные? Пусть ссылка на текущий элемент справочника содержится в переменной «Владелец». Необходимо узнать, есть ли в справочнике «Единицы измерения» элементы, подчиненные текущему элементу. Если использовать объектную модель доступа: 90 Справочники Фактически получаем выборку всех подчиненных элементов и если в выборке есть хоть одна позиция, считаем, что подчиненные элементы существуют. Именно этот факт и говорит о неэффективности использования данного варианта (выбираемые данные мы не используем, а получаемый блок данных может быть большим). Лучше всего подобную проверку можно выполнить, используя возможности запросов: Так как не предполагается, что нам понадобятся данные о подчиненном элементе, выборку результата запроса в переменной не сохраняем. Как узнать количество подчиненных элементов у выбранного элемента справочника? Необходимо определить количество элементов в справочнике «ЕдиницыИзмерения» подчиненных элементу справочника, ссылка на который находится в переменной «Владелец». С помощью объектной модели: 91 Прикладные объекты Данное решение в общем случае является не эффективным. Связано это с тем, что выборка фактически получает все данные о подчиненных элементах справочника, а в рамках данной задачи нужно только количество элементов. Если решать задачу с помощью запроса, то решение выглядит следующим образом: В результате в переменной «КоличествоЗаписей» будет находиться нужная нам величина. Справочники Как узнать количество подчиненных элементов у выбранного элемента справочника, если количество подчиненных справочников больше чем один? Если у справочника есть несколько подчиненных справочников, то запрос может выглядеть следующим образом: Данный запрос позволяет получить количество записей в двух подчиненных справочниках. В качестве источника данных в основном запросе используется подзапрос («ВложенныйЗапрос»). Сам подзапрос состоит из двух запросов (происходит их объединение). Каждый из объединяемых запросов получает данные о количестве записей в одном из подчиненных справочников. В выборке результата запроса (в случае если у элемента справочника, ссылка на который находится в переменной «Владелец», есть подчиненные элементы) будет одна строка, в поле «КоличествоПодчиненныхЭлементов» которой содержится количество подчиненных элементов. 93 Прикладные объекты Как получить всех родителей выбранного элемента справочника? В переменной «СсылкаНаЭлемент» находится ссылка на элемент справочника. Необходимо получить всех родителей данного элемента Перебрать всех родителей можно используя строки кода: Данную задачу можно решить и с помощью запроса, однако следует учитывать, что в языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться, например, иерархическими итогами, текст запроса будет выглядеть следующим образом: Результат запроса будет содержать одну «лишнюю» запись, которую легко «отсеять» проверкой свойства «ЭтоГруппа». 94 Справочники Однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями, например, так: 95 Прикладные объекты В данном примере в окно служебных сообщений выводятся все родители для ссылки, записанной в переменную «ЭлементНоменклатура». В цикле выбирается по 5 родителей ссылки. Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла. Как получить запросом «полный» код элементов справочника, если тип кода Строка? Понятие «Полный код» соответствует объектной модели системы. Это свойство объектов «СправочникСсылка» и «СправочникОбъект», содержащее указание кодов элемента и всех родителей его иерархии. Представляет собой строку, в которой указаны коды всех вышестоящих элементов иерархии, начиная с самого верхнего уровня и разделяемые символом «/» заканчивая кодом самого элемента. В табличной модели хранения информации никакого поля «ПолныйКод» для таблиц справочника не существует. Однако можно говорить о значении поля «Родитель» каждой из записей таблиц справочников и о значении поля «Код». Поэтому запрос по трехуровневому справочнику «Контрагенты» будет выглядеть следующим образом: Источником является таблица справочника. Из нее выбираем поле «Ссылка» и вычисляемое поле «ПолныйКод». Вычисление полного кода производим путем сборки его из значений кодов самого элемента и кодов всех вышестоящих родителей. Для этого для каждой записи сначала определяем ее уровень. 96 Справочники Уровень определяем следующим образом: для записей корневого уровня поле «Родитель» содержит пустую ссылку на элемент справочника, поэтому значение поля «Код» этого «Родителя» будет NULL. Если это условие выполнилось - значит, элемент находится на корневом уровне, и в качестве полного кода достаточно указать код. Если условие не выполнилось - проверяем аналогичным способом элемент на принадлежность к первому уровню. В случае выполнения условия - выводим уже код родителя и код самого элемента через «/». Таким же образом можно построить «сборку» поля «ПолныйКод» для случаев 4-х, 5-ти и т.д. уровневых справочников. В отношении возможных возражений о «неуниверсальности» подобного подхода: хотя, в общем случае, количество уровней справочника может быть не ограничено, сложно представить себе реальную практику использования справочника более чем с 10 уровнями вложенности из-за явного неудобства работы пользователя с таким «глубоким» справочником. Как получить все элементы справочника, содержащие в наименовании определенную подстроку, со всей иерархией, в которую они входят? Допустим, речь идет о справочнике «Контрагенты». Лучше всего с данной задачей справится запрос со следующим текстом: 97 Прикладные объекты Источником запроса является таблица справочника. Делаем отбор по наименованиям, в составе которых присутствует значение параметра «ЧастьНаименования». Условие отбора обеспечивается посредством оператора проверки строки на подобие шаблону. В шаблоне служебными символами «%» обозначается, что перед и после части строки, считанной из «ПолеВводаПодстрока», может встречаться произвольное количество других символов. Как найти все элементы справочника, в которых не заполнен строковый реквизит? Получить желаемое можно таким запросом: Проверка пустой строки выполняется за счет операции сравнения «=». В данном случае будут отобраны и элементы, в которых пользователь ничего не вводил и даже те, в которые он ввел только пробел (или пробелы). Но на некоторые реквизиты при работе с формой накладывают маску. В таких случаях случайный ввод хотя бы одного пробела уже не позволяет данному реквизиту быть пустым. Его значение будет содержать маску с пробелами. Для того, чтобы «защитить пользователя от самого себя» в подобных случаях запрос лучше немножко изменить. Например, для реквизита с маской «999-999-999 99» запрос будет выглядеть таким образом: Количество пробелов соответствовать маске. перед и между символами «-» должно Справочники Как перенести все элементы справочника «Контрагенты» из одной группы в другую? Для этого необходимо перезаполнить значением нового родителя реквизит «Родитель» у элементов, непосредственно являющихся «потомками» исходного родителя. Итак, пусть переменная «СтарыйРодитель» содержит старого, а «НовыйРодитель» - нового родителя. Получение элементов справочника, которым нужно поменять родителя, производим следующим образом: Источником для запроса является таблица справочника «Контрагенты». Делаем отбор непосредственно по полю «Родитель» и получаем таблицу ссылок на нужные нам элементы справочника. Далее: В цикле обработки результата запроса производим получение объекта по ссылке. Для каждого полученного объекта производим запись нового родителя в реквизит «Родитель» и непосредственную запись объекта с измененными данными. 99 Прикладные объекты Как организовать программный выбор элемента справочника? Требуется из одной формы (например, формы документа) открыть для выбора элемента форму справочника. После того, как значение будет выбрано в форме справочника, его необходимо получить для дальнейшей обработки в форме документа. Для получения выбранного значения используется обработчик события Обработка выбора формы владельца (в нашем случае формы документа). Вместо метода Открыть() объекта Форма Выбора в ряде случаев можно использовать метод ОткрытьМодально(). В этом случае окно откроется в модальном режиме и пока данная форма не будет закрыта

1С компани нь 1С-ийн үндсэн дээр хөгжиж буй програмистуудыг сургахад ихээхэн хүчин чармайлт гаргадаг. Заах үндсэн аргуудын нэг бол хэрэглээний хэл дээр 1С 8. зохиол хэвлэн нийтлэх явдал юм. Хүн бүхэн унших ёстой хамгийн түгээмэл хэрэглэгддэг програмчлалын номыг нарийвчлан авч үзье.

Бид шүүмжийг 1С хөтөлбөр тус бүрийн хэрэгцээтэй номноос эхэлдэг (хэрэгсэл нь бага зэрэг өөрчлөгдөж магадгүй).

1С хөтөлбөрийн “хайрцаг” -аас авсан номууд

1С: Аж ахуйн нэгжийн 8 суурилуулалт ба эхлүүлэх гарын авлага

Шинэхэн администратор, программистуудад зориулсан ном, үүнд техникийн нюанс, лицензийн түлхүүр суурилуулах, санал болгосон тохиргоог зурсан болно.

1С: Аж ахуйн нэгж 8 Оруулсан хэлний тайлбар

Энэхүү ном нь дөрвөн хэсэгт хэвлэгджээ. Тэдгээрийн дотор та суурилуулсан хангалттай бүрэн тодорхойлолт, асуулгын хэлний тодорхойлолт, суулгасан аргуудын тодорхойлолт, хэрэглээний объектын тайлбар гэх мэт мэдээллийг олж авах боломжтой.

1С: Аж ахуйн нэгжийн 8 тохиргоо, удирдлага

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

1С: Аж ахуйн нэгжийн 8 үйлчлүүлэгч-сервер. Суулгах, ашиглах онцлог (үйлчлүүлэгч-сервер хүргэх зорилгоор)

Энэхүү уран зохиолыг зөвхөн клиент-серверийн ажиллагааны горимд суулгах материалаар хангаж өгдөг. Энэ номонд 1С серверүүдийг тохируулах аргууд, үйлчлүүлэгчийн програмуудыг тохируулах онцлог, серверийн хамгаалалтын тохиргоо, мэдээллийн системийн үйл ажиллагаа, тохиргоо зэргийг тусгасан болно.

1С: Аж ахуйн нэгж 8.2. Хөгжлийн энгийн жишээ

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

1С: Аж ахуйн нэгж 8.3. Хөгжүүлэгчийн практик гарын авлага

267 1C видео хичээлийг үнэ төлбөргүй авах боломжтой:

Энэхүү ном нь "Хөгжлийн энгийн жишээ" -ийн логик үргэлжлэл бөгөөд илүү төвөгтэй хэрэглээний асуудлуудыг шийдвэрлэх шийдлийг агуулдаг. Энэхүү ном нь 1C Enterprise 8.3 системийн хамгийн сүүлийн үеийн шинэчлэл, түүний дотор багтсан болно удирдсан хэлбэрүүд.

Програмчлалын хэлийг түгээн дэлгэрүүлэхийн тулд 1C энэ номыг маш тохиромжтой үнээр тогтоосон - түншүүддээ 140 рубль, жижиглэнгийн хэрэглэгчдэд 240 рубль байна.

Тусгай хэрэглээний асуудлуудыг шийдвэрлэх арга "1C: Enterprise 8.2."

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

1С: Аж ахуйн нэгж 8.3 ″ систем дэх мэргэжлийн хөгжил

"Библи 1С" хэмээх нэртэй ном. Энэхүү ном нь хоёр боть А4 форматтай бөгөөд нийт 1400 хуудастай мэдлэг агуулсан болно. Уран зохиол нь суулгагдсан хөгжлийн орчны чадавхи, чиг үүргийг бүрэн тодорхойлсон байдаг. Мэдээллийг нэвтэрхий толь хэлбэрээр гаргадаг. Би үүнийг лавлах ном болгон ашиглахыг зөвлөж байна, та хүссэн үедээ санах ойг шинэчилж болно. Энэхүү ном нь хөгжлийн талаархи бараг бүх уран зохиолыг нэгтгэсэн болно.

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

1С-д цогц тайлан боловсруулах: Аж ахуйн нэгж 8.3. Мэдээллийн бүрдүүлэлтийн систем

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

Интеграцийн технологи 1С: аж ахуйн нэгжүүд

Энэхүү ном нь бусад мэдээллийн системтэй нэгтгэхэд оролцдог хөгжүүлэгчдийн зайлшгүй хэрэгсэл болно. Энэхүү ном нь txt, dbf, xml, zip, HTML, excel, FTP, HTTP, цахим шуудан, Вэб үйлчилгээ гэх мэт технологийг ашиглан нэгтгэх жишээг багтаасан болно.

1С: Аж ахуйн нэгж 8. Мэдээлэл хөрвүүлэх: хэрэглээний шийдлүүдийн хооронд өгөгдөл солилцох

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

1C Enterprise 8.3 платформ, Таксины интерфейсийг ашиглаж байгаа байгууллагад лазер технологийн картриджуудын хөдөлгөөнийг бүртгэх энгийн тохиргоог хийв. Энэ нь хайрцаг бүрийн хөдөлгөөнийг (худалдан авах, цэнэглэх, сэргээх, засварлах, хэвлэгч дээр суурилуулах гэх мэт), хайрцаг бүрийн өртөгийг харгалзан үздэг. Гол зорилго нь 1C Enterprise 8.3 платформ дээр суурилсан програмуудыг хөгжүүлэх, ашиглах боломжтой програм ашиглах жишээг ашиглан эзэмших явдал юм.

Би туршлагатай програмист хүн, гэхдээ 1С өмнө нь нухацтай оролцож байгаагүй. Тааламжтай (1C Enterprise 8.3-тэй танилцах) ашиг тустай (ажлыг хэн ч цуцлаагүй) хослуулахын тулд бид шинэ хувилбарынхаа боломжийг ашиглан тохируулгын тохиргоог хийхийг хичээх болно. Магадгүй тохиргоог боловсруулах үйл явц нь хэн нэгэнд ашигтай байж, эхлэгчдэд 1С-ийг эзэмшихэд туслах болно.

Би олон тооны лазер принтер, MFP-тэй томоохон байгууллагын Мэдээллийн технологийн хэлтэст ажилладаг. Тэдэнд зориулж хайрцагны хөдөлгөөнийг нягтлан бодох бүртгэл хөтлөх нь нэн тулгамдсан ажил бөгөөд удирдлагын шаардлага юм.

Асуудлын талаархи мэдэгдэл.

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

Бизнесийг тодорхой болгох - аливаа тайлан шаардлагатай. Мэдээжийн хэрэг, хэрэглэгчдийн хувьд бүх зүйл аль болох энгийн бөгөөд ойлгомжтой байх ёстой.

Хэрэгжүүлэх төлөвлөгөө.

Бид 1C Enterprise 8.3 платформыг хамгийн орчин үеийн байдлаар ашиглаж байна.

Платформыг хөгжүүлэхийн тулд бид өөр өөр тохируулгын объектыг ашиглахыг хичээх болно, мэдээжийн хэрэг, шинэ Таксины интерфейс. Бид обьектуудын нэрийг тодорхой бөгөөд функциональ зорилгод ойрхон өгөхийг хичээх болно. Үйлчлүүлэгч-серверийн харилцан үйлчлэлийг оновчтой болгох, үүрэг хуваарилалт гэх мэт 1C үйл ажиллагааны "нарийн" мөчүүдэд бид хүрэхгүй.

Нэгдүгээрт, бидний тохиргоонд дараахь обьектууд байрлана гэж бодъё.

Захирлууд:

Номенклатурын хайрцаг

  Хайрцагнууд

  Номенклатурын хайрцагны үнэ

  Принтерүүд

  Хэвлэгч Номенклатур

  Нийлүүлэгчид

Бичиг баримт:

Ирэх хайрцагнууд

  Хайрцаг солих

  Гарах хайрцагнууд

Шилжүүлэг:

Тийм үгүй

  Картриджийн нөхцөл

  Картридыг солих шалтгаанууд

Мэдээллийн бүртгэл:

Хайрцаг солих

Хадгаламжийн бүртгэл:

Хайрцагнууд

Ажлын алгоритм.

Гол “жүжигчин” бол хайрцагнуудын жагсаалт юм Хайрцагнууд) Эхний ээлжинд жагсаалтыг баримт бичгээр бөглөнө Ирэх хайрцагнууд Номенклатурын хайрцагБайна. Хайрцагны үнэ цэнийн тулгуур худалдаж авахдаа Нөхцөл байдал  баримт бичигт дараах байдлаар сонгогдсон ШинэБайна. Худалдан авах үнийг лавлагаагаар тодорхойлно Номенклатурын хайрцагны үнэодоогийн огноо Цуврал дугаар) Өтгөн Байршилгэж тодорхойлсон "C эрдэнэ & # 8221;.

Одоо байгаа хайрцагнуудад цэнэглэх, сэргээх, засварлах гэх мэт мэдээллийг нягтлан бодох бүртгэл хөтлөнө Ирэх хайрцагнуудБайна. Хайрцагны төрлийг лавлагаагаар тодорхойлно Номенклатурын хайрцагБайна. Хайрцагны статусыг жагсаалтаас тодорхойлно Картриджийн нөхцөлБайна. Ажлын үнийг (цэнэглэх, нөхөн сэргээх) лавлагаагаар тодорхойлно Номенклатурын хайрцагны үнэБайна. Хайрцагны өвөрмөц байдал нь түүний серийн дугаараар тодорхойлогддог (тулгуур) Цуврал дугаар).

Баримт бичиг барьж байх үед Ирэх хайрцагнууд  хүснэгтийн хэсэгт Картридыг солих  лавлах ном Хайрцагнууд  Одоогийн баримт бичгийн дэлгэрэнгүй мэдээлэл, лавлах санд байгаа холбогдох хайрцаг (баримт бичгийн серийн дугаартай хамт) мөрийг нэмж оруулав. Хайрцагнууд  дэлгэрэнгүй мэдээлэл өөрчлөгдөнө Нөхцөл байдал  ба Байршил.

Мөн хуримтлалын бүртгэлд орно   Хайрцагнууд

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

Баримт бичиг барьж байх үед Хайрцаг солихлавлах хүснэгтийн хэсэгт Принтерүүд  одоогийн принтер нь баримт бичгийн дэлгэрэнгүй мөрийг нэмж, тулгуурыг өөрчилдөг ХайрцагБайна. Лавлагаа Хайрцагнууд  одоогийн хайрцагнууд нь мэдээллийн утгыг өөрчилдөг Нөхцөл байдал  ба БайршилБайна. Эгшигт суулгасан хайрцагны хувьд Байршил  одоогийн принтер бүртгэгдсэн, мөн салгасан картриджын хувьд - " Агуулахын.

Мөн бүртгэлд оруулна   Хайрцаг солих  Хөдөлгөөнийг энэ баримт бичигт тэмдэглэсэн болно.

Картридруудыг тусад нь баримт болгож хасдаг Гарах хайрцагнууд.

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

Хэрэгжүүлэлт.

Бодит тохиргоонд оръё.

Тохируулагч дотор хоосон бааз бий болгож, түүнийгээ "МТ мэргэжилтэн" гэж нэрлээд дэд системийг зохион байгуулцгаая Картридын нягтлан бодох бүртгэлБайна. Үүнийг хэрхэн яаж хийхийг алхам алхмаар тайлбарлахгүй, яагаад гэвэл энэ талаар хангалттай номнууд байгаа.

Эхлээд тоог нэмж оруулна уу: Тийм үгүй, Картриджийн нөхцөл  ба Картридыг солих шалтгаанууд  Ирээдүйд бидэнд хэрэгтэй байгаа Шилжүүлгийн найрлагыг 2-р зурагт үзүүлэв

Бид энгийн лавлах номыг тохируулах болно Номенклатурын хайрцаг  ба Хэвлэгчдийн нэршил.

Шаардлагатай Картриджийн төрөл  лавлагаа Принтерийн нэршил  лавлах холбоосын төрлийг хуваарилах Номенклатурын хайрцаг  (Зураг 3). Бидний үүсгэсэн бүх тохиргооны объектууд дэд системд орсон байх ёстойг бүү мартаарай Нягтлан бодох бүртгэлийн хайрцаг.

Лавлагаа Принтерүүд  хэд хэдэн дэлгэрэнгүй мэдээлэл холбоос хэлбэртэй байна:

Хөтөлбөрийг цаашид туршихын тулд Enterprise горимд бид нээсэн директорт хэд хэдэн мөрийг бөглөнө. Мэдээжийн хэрэг, бид эхлээд энгийн санг бөглөнө, дараа нь - шаардлагатай холбоос бүхий лавлах хуудсууд. Цаашид бодит аж ахуйн нэгжийн өгөгдлийг бүрэн татаж авах ажлыг Excel хүснэгтээс боловсруулах замаар хийх ёстой гэж үзэж байна.

Одоо тохиргоонд бичиг баримт нэмэх цаг болжээ. Баримт бичгийн объектыг тохиргооны объектуудын модонд тохируулна Ирэх хайрцагнууд  дэлгэрэнгүй, хүснэгтийн хэсэгтэй Баримтын нэршил  Байна. Бид тохиргоонд хуримтлалын бүртгэл байхгүй байна Хөдөлгөөн  баримт бичигт хоосон хэвээр байна. Бид өөрсдөө баримт боловсруулалтаа бичих шаардлагатай болж, програмын код нь баримт бичгийн модульд бичигдсэн тул бид энэхүү маягтыг үүсгэх болно (Зураг 9). Бид номон дээр бичигдсэн шиг бүх зүйлийг анхдагч байдлаар хийдэг (маягт - нэмэх - баримт бичгийн маягт).

Бид энэ баримт бичгийг шинэ болон дахин цэнэглэгдсэн (сэргээн засварласан, засварласан) хайрцагны агуулахад хүлээн авсны дараа ашиглана.

Эцэст нь хайрцгийг хүлээн авсны дараа бид хуримтлалын бүртгэлийг хөтлөв Хайрцагнуудхэмжилт, нөөц, нарийвчлалтай (Зураг 10) .

Хавчуурга дээр Бүртгэгчид  манай баримтыг заана уу Ирэх хайрцагнуудБайна. Тохиргоог хадгална уу.

Бид объектын модоор дамжуулан баримтанд буцаж ирдэг Ирэх хайрцагнуудБайна. Хавчуурга дээр Хөдөлгөөнбүртгэлийг сонгоно уу Хайрцагнууд, Motion Designer програмыг ажиллуулж, илэрхийлэлийн талбарыг баримт бичгийн нарийвчлалын утгыг оруулна уу (Зураг 11).

ОК дараад ороорой Обьектийн модуль   програмын код (Зураг 12).

Одоо хамгийн сонирхолтой зүйл бол та документ байрлуулахдаа дараах функцийг хангахын тулд програмын кодыг Object Module програмд \u200b\u200bнэмж оруулах хэрэгтэй байна. Ирэх хайрцагнууд.

Директор дотор шинэ карт (худалдан авалт) хүлээн авсны дараа Хайрцагнууд  өвөрмөц хайрцагны дугаартай, холбогдох (баримт бичгээс) дэлгэрэнгүй мэдээлэл бүхий мөрийг нэмж оруулах хэрэгтэй. Үүний зэрэгцээ тулгуур Картриджийн нөхцөл  асуудал болно " Шинэ", Ба тулгуур Байршил- утга " Агуулахын"Гэж бичжээ. Гарын авлагын хүснэгтэн хэсэг Хайрцагнууд  бөглөхгүй.

Хөтөлбөрийн алгоритмын дагуу эхлээд хайрцаг тус бүрийг өөрийн өвөрмөц дугаартай лавлах хэсэгт оруулах шаардлагатай болно Хайрцагнууд  баримт бичиг Ирэх хайрцагнууд.

Тонер дүүргэсэн (засварласан, засвар хийсэн гэх мэт) картыг хүлээн авмагц ижил дугаар бүхий хайрцаг лавлахад байгаа гэж үзнэ Хайрцагнууд, энэ тохиолдолд баримт бичгийг барьж байх үед Ирэх сум,мөрийг хүснэгтийн хэсэгт нэмж оруулав Шатахуун түгээх станцууддэлгэрэнгүй мэдээлэл өөрчлөгддөг Байршил  ба Нөхцөл байдалодоогийн хайрцаг дээр. Объект модульд нэмсэн кодыг 13-р зурагт үзүүлэв.

Та одоо програмын гүйцэтгэлийн анхны тестийг хийж болно. Аж ахуйн нэгжид бид баримт бичиг гаргадаг Ирэх хайрцагнууд(Зураг 14). Товчин дээр дарна уу Хааж, хааБайна. Лавлах руу очно уу Хайрцагнуудхоосон хоосон хүснэгт бүхий худалдан авсан хайрцагны дэлгэрэнгүй мэдээлэл бүхий шугам гарч ирснийг бид харж байна (Зураг 15).

Бүртгэлийг нээнэ үү Хайрцагнууд(цэсийн зүйл Хайрцагны төлбөрийн бүртгэл) төсөөтэй мөрийг эндээс үзнэ үү.

Хоёрдахь баримт бичгийг бид боловсруулж, хэрэгжүүлдэг Ирэх хайрцагнууд  ижил сумтай боловч дахин цэнэглэгдсэн (Зураг 16).

Лавлах руу очно уу Хайрцагнууд  бид эхэлсэн картридж дээр хүснэгтийн хэсэгт байгаа картридж нэмэгдсэн байгааг харж байна Шатахуун түгээх станцууд  ба тулгуур өөрчлөгдсөн байна Нөхцөл байдал  (Зураг 17).

Ура! Хөтөлбөр ажиллана!

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

Энэ нь сүүлд болно, гэхдээ одоо бид гогцоог солих асуудлыг шийдэх болно Хайрцаг солихмэдээллийн холбогдох бүртгэл Хайрцаг солих.

Баримт бичгийн дэлгэрэнгүй мэдээлэл, хүснэгтийн хэсэг Баримтын нэршил  зураг дээр үзүүлэв 18. Бидэнд тохирох хуримтлалын бүртгэл, мэдээлэл байхгүй байна Хөдөлгөөн  Бид документэд юу ч тэмдэглэхгүй. Бид баримт бичгийн боловсруулалтаа бичих шаардлагатай болсон тул баримтын анхдагч хэлбэрийг бий болгодог.

Картруудыг орлуулахын тулд бид мэдээллийн бүртгэлийг (хуримтлуулах бүртгэл биш) өөрчилж эхэлнэ. Хайрцаг солиххэмжилт, нарийвчлалтай (Зураг 19) . Энэ нь ямар нэгэн байдлаар нөөцгүй байсаар өнөөг хүрсэн .

Хавчуурга дээр Бүртгэгчид  манай баримтыг заана уу Хайрцаг солих.

Тохиргоог хадгална уу. Бид объектын модоор дамжуулан баримтанд буцаж ирдэг Хайрцаг солих.  Хавчуурга дээр Хөдөлгөөнбүртгэлийг сонгоно уу Хайрцаг солих, Motion Designer програмыг ажиллуулж, илэрхийлэлийн талбарыг баримт бичгийн нарийвчлалын утгыг оруулна уу. ОК дараад ороорой Обьектийн модуль  баримт бичиг, бид аль хэдийн бий болгосон харж байна Хөдөлгөөнийг үүсгэгчийг бүртгэх  програмын код (Зураг 20).

Одоо нэмэх Обьектийн модуль  баримт бичиг хөтлөхдөө дараах функцийг хангах програмын код Хайрцаг солихБайна. Лавлагаа Принтерүүдкартриджаа сольж байгаа принтерийн хувьд хүснэгтийн хэсэгт мөр нэмэх хэрэгтэй Картридыг солих  баримтаас дэлгэрэнгүй мэдээлэл авах бөгөөд нарийвчлалын утга өөрчлөгдөнө Одоо хайрцагны дугаар.Лавлагаа Хайрцагнууд  салгасан болон суулгасан гинжүүд нь дэлгэрэнгүй мэдээллийг өөрчлөх болно Байршил  ба Нөхцөл байдал  Байна. Баримт бичгийн боловсруулалтыг сайжруулсан Хайрцаг солих  доор харуулав.

Процедуртай харьцах (Алдаа, горим)

// ашигласан сангууд

Принтерүүд \u003d Ашигласан материал. Принтерүүд;

Картриж \u003d Ашигласан материал.

// ашигласан директорыг оруулах төгсгөл

  // Хайрцагуудыг бүртгэх

Хөдөлгөөн. Хайрцаг солих. Бичих \u003d Үнэн;

TextStringNomenclatureDocument тус бүрээс NomenclatureDocument Cycle-ийн хувьд

Хөдөлгөөн \u003d Хөдөлгөөн. Хайрцаг солих. Add ();

Хөдөлгөөн. Хөзрийн нэр томъёо \u003d Хайрцагны нэршил;

Хөдөлгөөн.Кинограмм картриджийн дугаар \u003d Баримтын нэрийн хуудасны техникийн мөр.

Хөдөлгөөн суулгасан Хайрцагны дугаар \u003d

Хөдөлгөөн. Принтер загвар \u003d Принтер загвар;

Хөдөлгөөн.PrinterSerialNumber \u003d TechStringNomenclatureDocument.PrinterSerialNumber;

Хөдөлгөөн.PrinterInventory number \u003d

Motion.Cartridge Type \u003d TechStringNomenclatureDocument.Cartridge төрөл;

Хөдөлгөөн. Хэн хийсэн бэ гэдгийг орлуулах \u003d Хэн хийсэн бэ гэдгийг орлуулах;

Хөдөлгөөн. Орлуулах шалтгаан \u003d Баримтын TechStringNomenclature. Орлуулах үндэслэл;

// Printers директорыг өөрчлөх

Нэр String \u003d TechStringNomenclatureDocument.PrinterSerialNumber;

Дараа нь CurrentObject \u003d

Хэвлэгч. Хүсэлтийн дагуу олох ("Серийн дугаар", нэрний мөр). Обьект хүлээн авах ();

CurrentObject.Cartridge NumberNow \u003d

TechStringDocument Номенклатур. Оруулсан хайрцагны дугаар;

NewString \u003d CurrentObject.Хэрэгжүүлэгчдийн орлуулалт.Add ();

NewString.Date of Replition \u003d Огноо;

NewString.Cartridge View \u003d TechStringNomenclatureDocument.Cartridge төрөл;

NewString.Суулгасан хайрцагны дугаар \u003d

TechStringDocument Номенклатур. Оруулсан хайрцагны дугаар;

NewString.Shot Cartridge Дугаар \u003d

TextStringNomenclatureDocument.Shot CartridgeNumber;

NewString. Хэнийг орлуулав \u003d Хэн хийсэн бэ гэдгийг орлуулах;

NewString.Шалтгаан солих шалтгаан \u003d Баримтын TechStringNomenclature. Орлуулах үндэслэл;

CurrentObject.Record ();

End Хэрэв;

// лавлах санг солих - суулгасан картридж

Нэр String \u003d TechStringNomenclatureDocument.InstalledCartridgeNumber;

дараа нь CurrentObject \u003d

Мөр \u003d "";

String \u003d String + Хэвлэгч загвар + "" +

TechStringNomenclatureDocument.PrinterSerialNumber + "" +

TextStringNomenclatureDocument.PrinterInventory number;

CurrentObject.Location \u003d String;

CurrentObject.Record ();

End Хэрэв;

// хайрцаг устгагдсан

Нэр String \u003d TechStringNomenclatureDocument.Shot CartridgeNumber;

Дараа нь CurrentObject \u003d

Хайрцаг. Хүсэлтийн дагуу олох ("Дугаар", Мөрний нэрс). Объект хүлээн авах ();

CurrentObject.Location \u003d "Агуулах";

CurrentObject.State \u003d Тооцоо.CartridgeState.Empty;

CurrentObject.Record ();

End Хэрэв;

// директорын өөрчлөлтийн төгсгөл

Циклийн төгсгөл

Журмын төгсгөл;

Шалгах, бөглөх, баримт бичгийг ирүүлэх Хайрцаг солих(Зураг 21) . Лавлах руу очно уу Принтерүүд  мөн сонгосон принтер нь хүснэгтийн хэсэгт шугам нэмж оруулсныг бид харж байна Шатахуун түгээх станцууд  бидний эзэмшиж буй баримт бичиг, дэлгэрэнгүй мэдээлэлтэй хамт Одоо хайрцагны дугаар  суулгасан хайрцагны дугаарын утгыг хүлээн зөвшөөрсөн (Зураг 22).

Лавлагаа Хайрцагнууд  принтерд суулгасан хайрцаг дээр байрладаг Байршил одоогийн принтерийн өгөгдлийг тэмдэглэж авав (Зураг 23). Мөн мэдээллийн бүртгэлээс гадна Хайрцаг солих  баримт дээр хөдөлгөөнийг тэмдэглэв (Зураг 24)

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

1С "үзэл суртал" -ын үүднээс авч үзвэл бичиг баримтын мэдээллийг нарийвчлан өөрчлөх, одоогийн үнийг хадгалахын тулд лавлах хуудсыг ашиглах нь буруу байж магадгүй - өгүүллийн зохиогчийн хүснэгттэй урьд өмнө хийсэн туршлага үүнд нөлөөлж байна, гэхдээ яагаад лавлагаа нь хүснэгт биш байна вэ?

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

Нийтлэлийн бүрэн хувилбарыг Part1.doc файлд өгсөн болно