1c enterprise 8.2 simpleng halimbawa. Bakit mas mahusay ang ma-download na mga produkto


Ang electronic book ay ipinamamahagi sa anyo ng isang archive na naglalaman ng:

  • maipapatupad na exe-file, na kasama ang parehong libro mismo at ang programa ng SunRav BookReader, na idinisenyo upang tingnan ang aklat na ito
  • katalogo na may mga karagdagang materyales sa libro.
  • ang libro ay inilaan upang mabasa sa ilalim ng Windows

Book 1C: Enterprise 8.1. Mga simpleng halimbawa ng pag-unlad  ay isang manu-manong sanggunian na naglalarawan ng mga simpleng halimbawa ng pag-unlad ng mga algorithm sa platform 1C: Enterprise 8.1.

Ang publication ay magiging kapaki-pakinabang para sa pagsisimula ng mga developer, mga administrador na nagpatupad ng system sa negosyo, at mga advanced na gumagamit na nais na nakapag-iisa na bumuo ng mga solusyon sa aplikasyon.

Ang libro 1C: Enterprise 8.1. Mga simpleng halimbawa ng pag-unlad  naglalaman ng isang malaking bilang ng mga praktikal na halimbawa na pinangkat ayon sa paksa ng paggamit.

Upang matulungan ang mga developer ng mga inilapat na solusyon, ang mga code ng inilarawan na mga halimbawa ay nakakabit sa libro. Ang code ng mga halimbawa ay ipinakita sa anyo ng isang file ng template ng teksto 1C: Enterprise 8. Ang file na ito ay maaaring konektado sa anumang pagsasaayos at i-drag-and-drop ang mga halimbawa gamit ang mouse o ipasok ang mga ito sa module gamit ang auto-palitan.

Matapos kumpirmahin ang pagbabayad ng libro makakatanggap ka:

* Inirerekomenda na basahin mo ang mga file ng .epub sa iyong computer gamit ang Adobe Digital Editions reader. Kapag nagbasa kasama ang iba pang mga programa, hindi inirerekumenda na gamitin ang mode ng pagtingin, na nagbibigay para sa pagpapakita ng dalawang pahina nang sabay - dahil sa malaking bilang ng mga imahe, posible ang hindi tamang pagpapakita.

Bakit mas mahusay ang nai-download na mga produkto?

Hindi na kailangang magbayad para sa paghahatid, nakatanggap ka ng magazine sa isang pares ng pag-click sa anumang oras ng araw;

Ang bilis ng pag-download ay nakasalalay lamang sa mga kakayahan ng iyong koneksyon, suportado ang mga tagapamahala ng pag-download;

Kung mayroon kang mga problema sa pagbili, maaari kang makipag-ugnay sa aming mga online consultant;

A.P. Gabets, D.I. Goncharov 1C: Enterprise 8.0 Mga simpleng halimbawa ng pag-unlad sa Moscow LLC 1C-Publishing 2005 UDC 658.012.011.56:004.42 BBC 65.29 G12 Gabets Andrey Petrovich, Goncharov Dmitry Igorevich G12 1C: Enterprise 8.0. Mga simpleng halimbawa ng M .: 1C-Publishing LLC, 2005. - 420 s: may sakit. pag-unlad, ISBN 5-9677-0056-0 Ang libro ay isang manu-manong sanggunian na naglalarawan ng mga simpleng halimbawa ng pagbuo ng mga algorithm sa platform na "1C: Enterprise 8.0". Ang publication ay magiging kapaki-pakinabang para sa pagsisimula ng mga developer, mga administrador na nagpatupad ng system sa negosyo, at mga advanced na gumagamit na nais na nakapag-iisa na bumuo ng mga solusyon sa aplikasyon. Ang libro ay naglalaman ng isang malaking bilang ng mga praktikal na halimbawa, na pinagsama-sama ayon sa paksa ng paggamit. Bilang karagdagan, ang libro ay naglalaman ng isang detalyadong pointer sa mga katangian, pamamaraan, at mga kaganapan ng naka-embed na wika na ginamit sa mga halimbawa. Ang mga suplemento ng aklat na ito, ngunit hindi palitan, ang buong-panahong dokumentasyon para sa produkto ng software na kasama sa pakete, at nagbibigay-daan sa iyo upang mas epektibong magamit ang mga kakayahan ng programa. Na-edit ni M.G. Radchenko. 4601546 025616 ISBN 5-9677-0056-0 Ang karapatang magdoble at ipamahagi ang libro ay kabilang sa 1C-Publishing. Ang buong o bahagyang pagkopya ng mga materyales sa libro nang walang nakasulat na pahintulot ng 1C-Publishing ay ipinagbabawal. LLC 1C-Pa6lishingm, 2005 KONTENTO Panimula 16 Paano makikipagtulungan sa publication? Mga primitive na uri, function ng system 17 18 (D Paano malinaw na ipahiwatig ang nais na petsa? Paano suriin ang petsa para sa isang walang halaga na halaga? Paano ihambing ang dalawang petsa (araw)? Paano magdagdag ng isang araw sa petsa , buwan? Paano ko masusuri ang uri ng halaga ng isang variable para sa pagkakapantay-pantay sa kanan? Paano upang limasin ang isang form na katangian na may isang uri ng sanggunian? Paano i-clear ang isang halaga na may isang uri ng "Halaga ng pag-iimbak" Paano suriin ang uri ng halaga na inilagay sa isang katangian na may isang uri ng "Pag-iimbak ng halaga" Paano i-compress ang isang halaga inilagay sa imbakan ia? Paano mabibigyan ang pagkakataon ng gumagamit na pumili ng isang halaga ng isang composite type? Paano mag-apply ng pag-ikot kapag nagtatrabaho sa kinakalkula na mga patlang sa isang query? Paano magpapakita ng isang babala na multi-line? Paano sasabihin sa gumagamit ang kasalukuyang oras kung kailan magproseso? Paano ipakita ang bilang sa mga salita sa wikang Ruso, ngunit walang isang praksyonal na bahagi? Paano ipakita ang bilang sa mga salita sa Ruso, na nagpapahiwatig ng daan-daang bahagi sa praksyonal? Paano ipakita ang bilang ng mga kilograms sa mga salita na may fractional na bahagi sa gramo? Paano bawiin ang halaga ng dolyar sa mga salita sa Ingles? Paano mag-load ng isang panlabas na sangkap? Paano magsagawa ng utos ng operating system? Paano ipatupad ang pamamaraan ng code depende sa mode ng pagpapatupad (sa kliyente, sa server, sa isang panlabas na koneksyon)? Paano ipatupad ang diskarte na "alinman sa lahat o wala" sa pagproseso ng grupo ng mga bagay? Paano makalkula ang halaga gamit ang formula ng interes ng compound? Mga koleksyon ng Universal Array (D Sa anong mga sitwasyon ang karaniwang ginagamit ng mga tatak? ® Paano makalikha ng isang array? F Paano makalikha ng isang multidimensional na array? F Paano magdagdag ng mga elemento sa isang array? 18 18 19 19 20 21 21 21 22 23 24 24 25 25 26 27 27 27 27 29 30 31 32 32 32 32 32 33 34 Talaan ng mga nilalaman Ф Paano matukoy ang laki ng isang array? Ф Paano mai-access ang isang elemento ng tatak? ? Paano suriin na ang dalawang mga arrays ay magkapareho? Data na naglalaman n mga pangalan ng counterparties.Paano pagsunud-sunurin ang mga ito? Mayroong isang array na kung saan nai-upload ang mga halaga ng DirectoryLink.Nomenclature uri. Paano tanggalin ang lahat ng mga walang laman na halaga ng array? Paano makakuha ng isang hanay ng mga item na ginamit sa mga tabular na bahagi "Invoice" at "Tare" ng invoice? Mayroong dalawang mga talahanayan ng halaga. Paano makakuha ng isang hanay ng mga pagtutugma ng mga pangalan ng haligi? Paano makagawa ng isang pagpipilian sa kahilingan para sa maraming mga pagpipilian para sa pagpuno sa mga detalye ng "Listing" na link? Paano makukuha ang "PayrollOrganizations" mula sa rehistro ng impormasyon sa anyo ng isang hanay ng lahat ng mga calculator ng payroll ng isang tiyak na dibisyon ng samahan? Istraktura Ф Sa anong mga sitwasyon ang kadalasang ginagamit ng mga bagay ng uri ng "Istraktura"? f Paano lumikha ng isang istraktura? f Paano magdagdag ng mga elemento sa istraktura? Ф Paano upang matugunan ang isang elemento ng istruktura? f Paano umulit sa mga elemento ng istruktura? f Paano alisin ang isang elemento ng istraktura? Paano itakda ang halaga para sa isang elemento na may isang tiyak na susi sa istraktura? Paano makukuha ang data ng multidimensional sa istraktura? Paano mangolekta ng impormasyon sa mga seleksyon na itinatag sa anyo ng isang journal? Paano matukoy kung mayroong isang elemento na may pindutan ng "Counterparty" sa istraktura, at kung mayroon, ngunit naglalaman ito ng isang walang laman na halaga ng direktoryo o Hindi Natukoy - tanggalin ang elementong ito? Paano makukuha ang lahat ng mga linya mula sa sekular na seksyon na "Mga Barya" ng isang dokumento kung saan ang halaga ng kinakailangang "Presyo" ay zero at ang halaga ng kinakailangang "VAT rate" ay katumbas ng halaga ng "VAT 18" ng "VAT tax" transfer? Paano makukuha ang data sa kasalukuyang mga patakaran sa accounting ng samahan mula sa isang pana-panahong rehistro ng impormasyon sa isang naibigay na petsa? Paano mabuo ang istraktura ng mga pangalan ng mga detalye ng tabular na bahagi ng isang di-makatwirang dokumento? Paano matatanggap sa pamamagitan ng kahilingan ang data ng mga tabular na bahagi ng dokumento, pagkakaroon ng istraktura ng mga pangalan ng mga detalye ng bahagi ng tabular? Pagkakatugma 34 34 35 36 37 37 38 39 40 41 42 43 44 45 47 47 47 48 48 49 49 50 50 51 52 53 53 55 55 Talahanayan ng mga nilalaman f Sa anong mga sitwasyon ang karaniwang ginagamit ng mga bagay sa uri ng "Pagsunod"? Paano lumikha ng isang tugma? f Paano magdagdag ng mga elemento sa tugma? f Paano upang matugunan ang isang elemento ng pagtutugma? F Paano umulit sa mga elemento ng pagtutugma? f Paano alisin ang isang pagtutugma na item? Paano makakuha ng data mula sa pagsunod? Paano makakakuha ng isang pagsusulat ng maraming antas ng mga uri ng mga kalkulasyon na may pangunahing uri ng mga kalkulasyon? 57 57 57 58 58 59 59 59 60 Listahan ng mga halaga, talaan ng mga halaga, puno ng mga halaga 63 f. Sa anong mga sitwasyon ang mga listahan ng mga halaga, mga talahanayan ng mga halaga, puno ng mga halaga na karaniwang ginagamit? f Paano lumikha ng isang listahan ng mga halaga? f Paano magdagdag ng mga elemento sa listahan ng mga halaga? f Paano makahanap ng isang elemento ng isang listahan ng mga halaga? f Paano upang matugunan ang isang elemento ng listahan ng mga halaga? f Paano umulit sa isang listahan ng mga halaga? f Paano alisin ang isang item sa isang listahan ng mga halaga? f Paano lumikha ng isang talahanayan ng mga halaga at punan ang mga patlang nito? f Paano makahanap ng halaga sa talahanayan ng mga halaga? ® Paano umulit sa mga hilera ng isang talahanayan ng mga halaga? f Paano tanggalin ang mga hilera (mga haligi) ng isang talahanayan ng mga halaga? Paano makakabahagi ng isang talahanayan ng mga halaga kung ang mga pangalan ng haligi ay nilalaman sa mga variable? Paano punan ang buong haligi ng talahanayan ng mga halaga sa nais na halaga? Paano punan ang talahanayan ng mga halaga ng "talahanayan ng tatanggap" na may data ng talahanayan ng mga halaga "Mesa ng pinagmulan"? Paano magdagdag ng mga haligi sa talahanayan ng mga halaga ng "Mga talahanayan ng talahanayan" na may mga paghihigpit ayon sa uri? Paano mababago ang uri ng halaga ng isang haligi ng isang talahanayan ng mga halaga na nakuha sa pamamagitan ng pag-alis mula sa isang query? Paano punan ang iyong puno ng halaga? Mga application ng Mga Direktoryo ng Application Ф Paano lumikha ng isang elemento (grupo) ng isang direktoryo? f Paano makahanap ng isang item sa direktoryo? f Paano tanggalin ang isang item sa direktoryo? f Paano umulit sa mga item ng direktoryo? f Paano pumili ng lahat ng mga elemento mula sa isang partikular na pangkat? Ф Paano umulit sa mga elemento ng isang subdirektoryo gamit ang isang query? Ф Paano umulit sa mga elemento ng isang subordinate na direktoryo gamit ang pagpili ng direktoryo? f Paano mabubuksan ang form ng listahan (elemento) ng direktoryo? 63 64 64 65 65 66 66 66 67 68 69 69 71 71 72 74 75 76 78 78 78 80 81 81 83 85 86 86 Talaan ng Mga Nilalaman f Paano ako magdagdag ng isang entry sa tabular na seksyon ng isang item sa direktoryo? f Paano alisin ang mga hilera mula sa tabular na bahagi ng direktoryo? Ф Paano umulit sa mga hilera ng bahagi ng direktoryo ng direktoryo Ф Paano lumikha ng isang item sa nais na pangkat? Paano malalaman kung ang kasalukuyang elemento ay may mga subordinates? Paano malaman ang bilang ng mga subordinate na elemento ng isang napiling elemento ng direktoryo? Paano malalaman ang bilang ng mga subordinate na elemento ng isang napiling elemento ng direktoryo, kung ang bilang ng mga subordinate na direktoryo ay higit sa isang? Paano makukuha ang lahat ng mga magulang ng napiling direktoryo na item? Paano makakuha ng isang kahilingan na "buong" code ng mga elemento ng direktoryo, kung ang uri ng code ay String? Paano makukuha ang lahat ng mga elemento ng direktoryo na naglalaman ng isang tiyak na substring sa pangalan, kasama ang buong hierarchy kung saan sila nabibilang? Paano mahahanap ang lahat ng mga entry sa direktoryo kung saan hindi napuno ang katangian ng string? Paano ilipat ang lahat ng mga elemento ng direktoryong "Mga Kontratista" mula sa isang pangkat sa isa pa? Paano ayusin ang programmatic na pagpili ng isang item sa direktoryo? Paano makatipid ng litrato ng isang empleyado sa direktoryo ng "Mga empleyado"? Mga Dokumento ® Paano lumikha ng isang bagong dokumento? f Paano makahanap ng isang dokumento? F Paano magbukas ng form ng dokumento? f Paano mababago ang halaga ng mga prop at magrekord ng isang dokumento? Ф Paano magdagdag ng isang linya sa tabular na bahagi ng isang dokumento, pagkakaroon ng isang link sa dokumento? f Paano tanggalin ang mga hilera mula sa tabular na bahagi ng dokumento? f Paano umulit sa mga linya ng dokumento? f Paano i-unload ang tabular na bahagi ng dokumento? f Paano makalkula ang kabuuan sa tabular na bahagi ng dokumento? f Paano mag-post ng isang dokumento? f Paano mag-uuri ng mga dokumento? f Paano markahan ang lahat ng papasok na mga invoice para sa pagtanggal? f. Paano, ang pagkakaroon ng isang link sa isang dokumento, lumikha ng isang kopya nito sa database? f, Paano, ang pagkakaroon ng isang link sa isang dokumento, basahin ang paggalaw nito sa paligid ng rehistro? Paano matukoy kung aling rehistro ang dokumento na gumanap ng kilusan? Paano tanggalin ang mga hilera na may isang zero na "Dami" na katangian sa tabular na bahagi ng isang dokumento? Paano i-clear ang haligi ng "VAT rate" sa patlang na "Mga Produkto" ng isang nakumpletong dokumento? Paano punan ang mga halaga ng pag-aari ng isang bagong dokumento batay sa isang umiiral na? 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 Talaan ng Mga Nilalaman Paano ako makakakuha ng isang listahan ng mga papasok na invoice kung saan hindi napunan ang mga item? Paano sa petsa ng invoice upang matukoy ang pera ng accounting accounting? Ang pera ng pamamahala ng accounting ay naka-imbak sa pana-panahong rehistro ng impormasyon.Paano ko maisasagawa agad ito mula sa anyo ng isang dokumento? Paano makatatanggap ng mga balanse na nauugnay sa posisyon ng isang dokumento sa pagproseso ng hawak Paano matukoy ang bilang ng mga dokumento at ang bilang ng iba't ibang mga halaga ng katangian sa talahanayan ng mga talaan ng dokumento? Ang sukat na "Organisasyon" ay naidagdag sa pagkakasunud-sunod na "Bahaging Accounting". Paano ngayon upang makakuha ng data sa mga hangganan ng pagkakasunud-sunod para sa bawat halaga ng sukat na ito? Pag-iimbak ng impormasyon ® Paano magdagdag ng isang entry sa isang hindi regular na independiyenteng rehistro ng impormasyon? f Paano basahin ang mga nilalaman ng isang di-pana-panahong independiyenteng rehistro ng impormasyon? "Sariling Mga Counterparties"? Ф Paano tanggalin ang lahat ng mga entry mula sa independiyenteng rehistro ng impormasyon? f Paano tanggalin ang mga talaan ng isang malayang rehistro ng impormasyon na may pagpili para sa isang tiyak na samahan? f Paano magdagdag ng isang entry sa pana-panahong independyenteng rehistro ng impormasyon? f Paano basahin (baguhin) ang mga talaan sa isang pana-panahong independiyenteng rehistro ng impormasyon? f Paano tanggalin ang mga entry sa pana-panahong independyenteng rehistro ng impormasyon? Paano tanggalin ang lahat ng mga talaan sa mga pera na may mga pangalang EUR at USD, ang panahon ng kung saan ay mas mababa sa Enero 01, 2005, sa pana-panahong mga rate ng rehistro "Mga Exchange Exchange"? Paano mabasa ang data na may kaugnayan para sa isang tiyak na petsa mula sa rehistro ng impormasyon "Mga Exchange Exchange" na may pagpili ng maraming mga pera (pagpili sa pamamagitan ng mga sukat)? Paano mababago ang panahon ng mga talaan ng isang pana-panahong independyenteng rehistro na nakakatugon sa isang bilang ng mga kundisyon? Paano "gumawa ng pana-panahong" ang mga prop ng isang nakumpleto na direktoryo? f Paano magdagdag ng mga entry sa impormasyon ng rehistro ng subordinate sa rehistro? f Paano basahin (baguhin) ang mga talaan sa impormasyon na nagpaparehistro sa ilalim ng rehistro? f Paano tanggalin ang mga entry mula sa rehistro ng impormasyon subordinate sa rehistro? Accounting f Paano lumikha ng mga pag-post sa rehistro ng accounting? f Paano makukuha ang balanse ng account? f Paano makakakuha ng turnover sa account? f Paano makakakuha ng mga balanse sa mga account? 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 Talaan ng Nilalaman Ф Paano ilipat ang balanse mula sa account sa account? Paano mahahanap ang unang dokumento na humantong sa hitsura ng balanse ng credit sa account? Paano piliin ang lahat ng mga account sa analytics kung saan mayroong alinman sa isang uri ng subconto "Counterparty" o isang uri ng subconto "Kontrata"? Paano piliin ang lahat ng mga account sa analytics kung saan mayroong parehong uri ng subconto "Counterparty" at isang uri ng subconto "Nomenclature"? Paano magdagdag ng isang bagong uri ng subconto sa account? Paano mula sa rehistro ng accounting ang "Pagsuporta sa sarili" upang makatanggap ng mga turnovers lamang sa mga foreign currency account? Paano pumili sa rehistro ng accounting na "Pagsuporta sa sarili" ng turnover ng "60th" account, hindi kasama ang panloob na paglilipat sa pagitan nila? Paano ipatutupad ang paraan ng "red reversal" para sa rehistro ng accounting? Kumpletong pana-panahong kalkulasyon (D Paano makakakuha ng halaga ng accrual para sa isang tiyak na uri ng pagkalkula sa isang tinukoy na empleyado sa isang tinukoy na panahon? (D Paano makukuha ang dami ng lahat ng mga accrual sa isang tinukoy na empleyado sa isang tinukoy na panahon? Paano makakakuha ng talahanayan ng paglalaan para sa muling pagkalkula ng ilang mga rehistro? Paano upang matukoy ang mga linya ng linya para sa dokumento na "Magbayad sa mga empleyado" mga tala ng mga kumpletong hinihiling na mga uri ng pagkalkula? Paano makalikha ng isang payroll ng empleyado? Paano mag-ayos ng pagbabalik ng mga nakaraang mga pag-aayos? Business-pr Mga Proseso Paano matukoy ang isang proseso ng negosyo kung saan ang bilang ng magkakasunod na mga hakbang ay natutukoy nang paisa-isa sa pagsisimula ng isang proseso ng proseso? Kapag nagtatrabaho sa mga proseso ng negosyo, kung paano iwanan ang karaniwang paraan ng pagbuo ng gawain at mabuo ito sa programmatically? Iba pang mga bagay ng application.Paano, nang walang pagbubukas ng isang panlabas na form sa pagproseso, upang maisagawa ang pamamaraan nito para sa isang tiyak na bagay? (D Paano mabilis na makakuha ng impormasyon sa lahat ng mga bagay na nasa loob ng kakayahan ng isang partikular na tagapamahala (elemento ng direktoryo ng Mga Gumagamit) sa mga benta? Mga porma at kontrol Makipagtulungan sa mga form (D Paano upang buksan ang isang form ng dokumento? To Paano magbukas ng isang panlabas na form sa pagproseso? (D Paano upang buksan ang form ng ulat upang hindi ito mag-overlap ang form kung saan ito bukas? 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 Talaan ng Nilalaman ® Paano mabubuksan ang form ng ulat buong screen? Paano upang buksan ang isang form ng listahan ng dokumentong ito mula sa isang form ng dokumento lumitaw dito? ® Ang dokumento ay may katangian na "Kontratista." Paano buksan ang anyo ng mga "Mga Kontrata ng Mga Kontrata" na subordinate dito? f Paano ipakita ang imahe na nai-save sa sanggunian ng direktoryo sa form? f Paano pumili lamang ng mga "ReceptionNa Work" na dokumento sa "Journal of Accounting" ? f Paano malaman ang saklaw ng petsa sa isang bukas na kasalukuyang journal? Paano upang buksan ang isang direktoryo sa pamamagitan ng pagpili ng mga katapat sa listahan? Paano masiguro na ang direktoryo ng counterparties ay bubukas kaagad sa bukas na pangkat ng mga Mamimili upang piliin ang halaga ng customer sa invoice? Patlang ng talahanayan f Paano maiiwasan ang isang gumagamit na baguhin ang pagkakasunud-sunod ng mga haligi sa isang patlang ng mesa? Ф Paano maiiwasan ang isang gumagamit na baguhin ang anumang mga setting ng mga haligi ng mga haligi ng talahanayan? f Paano ipakita ang impormasyon tungkol sa kung anong pagpipilian ang mai-install sa journal ng mga dokumento? f. Paano itakda ang cursor sa isang elemento na may kilalang pangalan sa anyo ng isang direktoryo? f. Paano gumawa ng isang seleksyon sa anyo ng isang listahan ayon sa halaga ng mga props? f Paano ipagbawal ang mensahe: "Ang ipinasok na data ay hindi ipinapakita sa listahan, dahil hindi ito tumutugma sa pagpili" kapag nagdaragdag ng mga bagong elemento sa direktoryo? f Paano punan ang isang cell ng isang patlang ng talahanayan na may data? Paano mababago ang kulay ng background ng isang cell na patlang ng cell depende sa halaga na ipinapakita sa loob nito? Paano magdagdag ng isang bagong haligi na "Pangunahing Kasunduan" sa patlang ng talahanayan "Napiling Mga Counterparties", punan ang mga halaga at paganahin ang pagbubukas ng mga halagang ito? Paano magtakda ng isang listahan ng pagpili para sa haligi ng "View ng Dokumento" ng isang patlang na mesa? Paano magbigay ng kakayahang pumili at pagsunud-sunod ng mga data sa pamamagitan ng mga detalye na hindi ipinapakita sa larangan ng talahanayan ng form ng listahan ng direktoryo? Paano ipatupad ang pag-drag at pag-drop sa pagitan ng mga kontrol? Paano mag-alis ng mga balanse sa mga bodega sa listahan ng mga item? Iba pang mga kontrol ® Ang form ay may isang panel na may mga pahina. Paano maglagay ng larawan sa isang bookmark? Ф Paano masisiguro na kapag binuksan mo ang anyo ng isang naitala na elemento ng direktoryo ng "Mga Kontratista", ang tab na "Mga Account at Mga Kasunduan" ng panel panel ay aktibo? Paano mag-ayos ng isang pagpipilian ng maraming mga listahan ng mga dokumento upang mabuksan? Paano ko maiayos ang kapalit ng isang apela sa isang tao? 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 Talaan ng Nilalaman Paano lumikha ng isang submenu na may mga pindutan sa panel ng command? Paano ako magtatalaga ng mga shortcut sa nilikha na pindutan? Paano punan ang mga posibleng halaga ng kahon ng seleksyon ng "Processing Table Part" kapag pinupunan ang patlang na "Processing Document"? f Kung tinukoy ng gumagamit ang ilang mga petsa sa larangan ng kalendaryo, paano maiayos ang mga ito? f Paano mag-ayos ng trabaho kasama ang tagapagpahiwatig? Paano mababago ng kontrol ang pinagmulan ng data? f Paano itakda ang kinatawan ng petsa na ipinapakita sa larangan ng input nang default? Ф Paano ipakita ang teksto sa larangan ng larawan kung ang larawan ay hindi napili? Ф Paano upang buksan ang isang karaniwang dialog ng pagpili ng kulay para sa isang gumagamit? Paano punan ang listahan sa form na may data ng kahilingan? f Paano magpakita ng isang graphic diagram file sa isang form? Mga pagitan, estilo f Paano magtakda ng iba't ibang mga estilo ng 1C: Enterprise para sa iba't ibang mga kategorya ng mga gumagamit? May isang listahan ng mga pangalan ng interface na may mga tala. Paano makikitang nakikita ang mga minarkahang interface? Paano hindi paganahin ang pandaigdigang tagapangasiwa ng paghihintay mula sa form ng pagproseso? Mga Query, ulat ng Mga Query Paano makakakuha ng data mula sa tabular na bahagi ng mga dokumento? Paano makakuha ng data mula sa tabular na bahagi ng mga dokumento at ipakita ang mga ito sa isang hierarchical form? Paano mabibilang ang bilang ng magkaparehong elemento sa napiling data? Paano mailalapat ang mga kondisyon para sa pagpili sa pamamagitan ng mga halaga ng mga patlang na kinakalkula bilang isang resulta ng pinagsama-samang pag-andar? Paano limitahan ang pagpili mula sa virtual na talahanayan? Paano magbilang ng data sa parehong mga halaga ng isa sa mga halimbawang patlang? Paano makukuha ang mga tala lamang na kung saan ang halaga ng isang tiyak na larangan ay lumampas sa tinukoy na halaga? Paano mai-access ang mga subfield sa isang query? Paano pagsamahin ang mga resulta ng maraming mga query? Paano pumili ng data mula sa dalawang talahanayan na nagbibigay-kasiyahan sa isang tiyak na kondisyon? Paano madagdagan ang data ng isang talahanayan na may mga datos na napili mula sa isa pang talahanayan sa ilalim ng isang tiyak na kondisyon? Paano pagsamahin ang data mula sa dalawang talahanayan sa ilalim ng isang tiyak na kondisyon? Paano mag-output ng ilang halaga sa halip na Null sa isang query? 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 Talaan ng Nilalaman Paano makakakuha ng pangkalahatang mga resulta mula sa parehong mesa kasama ang data mula sa isang mesa? Paano makakakuha ng hierarchical kabuuan para sa isang grupo ng direktoryo? Paano, tulad ng isang naibigay na petsa, mahahanap ko ang huling dokumento na "Resibo ng Mga Serbisyo ng Mga Serbisyo" alinsunod sa kung saan ang pangalan ay nagmula sa "OstatiNaSklad" rehistro? Paano mabibilang ang bilang ng mga rekord na may parehong halaga ng isang patlang? Paano ipakita ang bilang ng iba't ibang mga tala sa mga talaan ng buod? Paano malaman ang bilang ng mga rekord bilang isang resulta ng isang kahilingan? Paano suriin ang sapat na balanse ng mga kalakal sa mga bodega na ipinahiwatig sa dokumento? Paano sa isang kahilingan na isagawa ang pagpili sa pamamagitan ng halaga ng enumeration? Paano makakakuha ng mga rate ng palitan para sa dalawang petsa ng interes? Paano makakuha ng isang talahanayan ng mga pagkakaiba sa mga rate ng magkakasamang pag-areglo ng lahat ng mga inisyu na dokumento "Order ng Mamimili" na may opisyal na rate? Paano magsulat ng isang query sa isang paraan na sa isang tiyak na antas ng hierarchy ng query, isaalang-alang ang mga pag-andar ng kabuuan, at sa ibang antas, iba pa? Paano makakuha ng isang listahan ng mga dokumento na nagdala ng data ng isang subordinate na pana-panahong rehistro ng impormasyon sa isang tiyak na estado? Paano magtakda ng mga parameter ng query kung ang teksto ng query ay hindi kilala nang maaga? Data analysis f Paano makukuha ang data sa mga produktong ibebenta nang magkasama? (D Paano upang magrekomenda ng mga kaugnay na mga produkto? (D Paano upang makita kung ano ang bibilhin sa hinaharap? Pagtatanghal ng mga resulta ng mga ulat ng Dokular na dokumento, dokumento ng teksto Paano ipakita ang resulta ng isang query sa isang dokumento ng spreadsheet? Paano upang ipakita ang data sa isang dokumento ng spreadsheet na may kakayahang gumuho at mapalawak ang data sa pamamagitan ng pagpangkat? kapag nag-output ng data sa isang dokumento ng spreadsheet, ibagsak ang lahat ng mga pagpapangkat ng output? Paano mag-output ng data sa isang dokumento ng spreadsheet upang arbitraryo matukoy ang komposisyon ng mga gumuho at pinalawak na mga grupo? (D Paano i-load query ultat kasama ang pagpapakita ng hierarchy? (D Saan at paano ko makikita ang layout na awtomatikong nabuo ng tagabuo ng ulat? Ф Paano maglilipat ng data mula sa tagabuo ng ulat sa talahanayan ng pivot? Ang ulat ay nalilikha ng tagabuo ng ulat.Paano tanggalin ang isa sa mga haligi sa pamamagitan ng paglalagay ng data nito sa decryption ng iba? 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 Talaan ng Mga Nilalaman Paano i-save ang mga setting ng tagabuo ng ulat hanggang sa susunod na mabuksan ang form ng ulat? Paano ayusin ang pagpapakita ng mga tala sa nabuong dokumento ng spreadsheet? f Paano masiguro na ang unang haligi at ang unang linya ng dokumento ng spreadsheet na "Resulta ng Dokumento" ay hindi nakalimbag sa panahon ng pag-print? Ф Paano masiguro ang pag-aayos ng itaas na bahagi ng dokumento ng spreadsheet na nabuo ng tagabuo ng ulat sa pamamagitan ng pagputol ng heading ng mesa? f Ang isang tabular na dokumento ay nabuo ng tagabuo ng ulat. Kapag nagpi-print ng isang dokumento ng spreadsheet, paano masiguro na ang heading ng talahanayan ay ipinapakita sa bawat pahina? f. Paano, kapag ang pag-print ng isang "mahaba" na dokumento, ipahiwatig sa mga header ng pahina ang numero ng dokumento, petsa at numero ng pahina? ® Ang isang tabular na dokumento ay nabuo ayon sa isang layout na awtomatikong nabuo ng tagabuo ng ulat. Paano ko itatakda ang orientation ng pahina kapag naka-print? Ang isang dokumento ng talahanayan ay nabuo ng tagabuo ng ulat. Paano magtatag ng isang konklusyon nang walang isang fractional na bahagi para sa lahat ng ipinakitang mga tagapagpahiwatig ng numero? f. Paano pagsasama-sama ang tagabuo ng ulat ng layunin ng kanilang layout at ang paggamit ng isa sa mga karaniwang layout ng layout? Paano makakakuha lamang ng mga talaan ng buod kapag nakakatanggap ng data mula sa isang kahilingan? Paano makakakuha lamang ng mga talaang buod ng hierarchical kapag tumatanggap ng data mula sa isang query? f Paano ipakita ang isang larawan sa isang dokumento ng spreadsheet? Paano ipakita ang isang larawan sa isang dokumento ng spreadsheet nang hindi binabago ang layout? Paano magtrabaho kasama ang isang pivot table? Paano maglagay ng programmatically ang data sa isang pivot table at i-format ito? Paano lumikha ng isang naka-print na form gamit ang isang template ng teksto? Mga tsart f Paano upang punan ang isang tsart sa data? Paano punan ang isang tsart ng pagsukat? f Paano ipakita ang resulta ng query sa isang tsart ng pivot? Paano punan ang isang Gantt tsart na may data? Paano maiuugnay ang mga agwat ng tsart ng gantt? Paano hawakan ang interactive na pagbabago ng agwat ng tsart ng Gantt? Paano maglagay ng mga di-pana-panahong mga label sa isang tsart ng Gantt? Paano i-highlight ang ilang mga pagitan ng background ng tsart ng gantt? Geographic layout f Paano magpakita ng isang geographic layout file sa isang form? f Paano ipakita sa form ng isang layout ng isang geograpikal na pamamaraan? f Paano baguhin ang sukat ng iskedyul ng heograpiya? 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 Talaan ng Nilalaman Paano ipakita ang napiling lungsod sa diagram ng heograpiya? Paano gamitin ang isang talahanayan ng mga halaga bilang isang mapagkukunan ng data para sa isang mapa sa heograpiya? Pangangasiwaan Simula 1C: Enterprise mula sa linya ng utos © Paano magsisimula sa 1C: Enterprise mula sa linya ng utos? Paano pilitin ang 1C: Enterprise na i-load ang database mula sa linya ng utos? Paano i-update ang mga pagbabago sa kasalukuyang pagsasaayos sa pagsasaayos ng database mula sa linya ng utos? Paano subukan at ayusin ang infobase nang hindi sinusuri ang integridad ng referral sa awtomatikong mode? Paano maisagawa ang pag-verify ng pagsasaayos sa awtomatikong mode kasama ang output ng mga resulta ng pag-verify sa isang file? Paano paikliin ang logbook na programmatically? Paano mag-alis ng mga module ng solusyon ng aplikasyon bilang mga file ng teksto mula sa linya ng command? Paano mai-load ang mga file ng tulong na na-save sa format ng htm sa solusyon ng aplikasyon? Iba't ibang f Paano baguhin ang halaga ng petsa ng pagtatrabaho? Ф Paano itakda / alisin ang eksklusibong mode? f Paano gumawa ng isang entry sa logbook? f Paano makukuha ang data sa mga rehistradong gumagamit ng infobase? f Paano matukoy ang pangkalahatang impormasyon ng system? Paano iprograma ang pagdaragdag ng isang gumagamit sa infobase? Paano lumikha ng iyong sariling log file para sa pagtatala ng mga resulta ng panlabas na pagproseso? Paano ipakita sa form ang isang listahan ng mga gumagamit na nagtatrabaho sa infobase na ito? Paano i-unload ang log sa format na XML? Paano pilitin ang lahat ng mga gumagamit ng infobase sa bersyon ng client-server ng trabaho? Pagsasama 302 303 305 305 305 306 306 307 307 309 309 310 311 311 311 312 313 314 315 317 318 318 320 321 Text file 321 XML 324 ft Paano mag-upload ng data mula sa direktoryo sa isang file ng teksto? f Paano mag-load ng data mula sa isang text file? Makipagtulungan sa teksto. Sequential modelo ng pag-access f Paano maglipat ng isang dokumento mula sa isang database sa ibang database? 321 322 322 324 13 Talaan ng Mga Nilalaman Paano ako makalikha ng isang XML na dokumento ng di-makatarungang istraktura? Paano makagawa ng isang XML dokumento sa isang string? Paano ko ipagpapalit ang data gamit ang XML serialization sa pamamagitan ng mga file ng iba pang mga format? Paano ko mai-load ang isang XML dokumento ng di-makatarungang istraktura? 326 327 328 329 DBF file 331 Paggawa gamit ang mga dokumento ng HTML 332 ft. Paano ko mabubuo ang pag-upload ng pag-download gamit ang mga file ng DBF? Ф Pagpupuno sa mga form na HTML. Paggawa gamit ang mga file.Paano ayusin ang isang diyalogo para sa pagpili ng isang text file? F Paano basahin ang impormasyon ng file? f Paano makakuha ng isang listahan ng mga file sa isang tinukoy na direktoryo? Paano ilipat ang file na nai-post sa ftp sa iyong lokal na computer? Paano hatiin ang isang malaking file sa maraming mga file ng isang tiyak na laki? Paano mag-archive ng mga file? Paano ihambing ang dalawang mga file ng teksto? Paano ayusin ang kontrol ng pagbuo ng file sa pamamagitan ng isang panlabas na aplikasyon? X Paano gamitin ang mga kontrol ng ActiveX? 331 332 335 335 335 336 336 337 337 338 338 340 341 341 Mga Aktibong Layout ng Dokumento 343 Paggawa sa Internet 345 Paggawa sa Mga Bagay ng COM 351 Paano lumikha ng isang bagong kontrata batay sa isang file ng Microsoft Word? 343 Makipagtulungan sa e-mail 345 Paano mag-ayos ng trabaho sa e-mail sa pamamagitan ng naitatag na client client? 345 Paano mag-ayos ng trabaho sa mail nang walang naka-install na client client sa computer ng gumagamit? 346 Paggawa gamit ang mga file 349 Pag-upload ng mga file sa pamamagitan ng FTP 349 Pagpatupad ng isang kahilingan sa HTTP 350 ft. Tulad ng mula sa isang database 1C: Enterprise 8. 0 ilipat ang natitirang mga kalakal sa isa pang database gamit ang koneksyon ng COM Halimbawa ng pag-access sa 1C: Enterprise 8.0 na programa mula sa module ng MS Excel sa pamamagitan ng koneksyon ng COM Paano ko maiayos ang pagbabasa ng data mula sa mga * .xls file? Paano magpatakbo ng isang macro na naitala sa isang workbook ng Microsoft Excel? Paano lumikha ng isang dokumento ng Microsoft Excel hindi sa disenyo na ipinakita sa ibang dokumento? f Paano mag-alis ng isang listahan ng presyo sa isang dokumento ng programa ng Microsoft Word? 14 351 353 355 356 357 359 Talaan ng Mga Nilalaman Paano ko hihilingin ang isang di-makatarungang database ng SQL? Ang kliyente ng Automation / Server (OLE) ф Paano mula sa isang database 1C: Ang Enterprise 8.0 ay interactive na punan ang isang dokumento sa isa pang database gamit ang Automation Client / Server (OLE)? Paano mag-load ng isang listahan ng item mula sa talahanayan ng Excel sa 1C: Enterprise na may kakayahang mag-edit? Palitan ng data<Э Как организовать работу удаленных складов? Как при создании начального образа управлять тем, какие виды объектов перегружаются, а какие нет? Как просмотреть объекты, для которых зарегистрированы изменения? Как организовать обмен данными между произвольными конфигурациями 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 Прикладные объекты Как организовать программный выбор элемента справочника? Требуется из одной формы (например, формы документа) открыть для выбора элемента форму справочника. После того, как значение будет выбрано в форме справочника, его необходимо получить для дальнейшей обработки в форме документа. Для получения выбранного значения используется обработчик события Обработка выбора формы владельца (в нашем случае формы документа). Вместо метода Открыть() объекта Форма Выбора в ряде случаев можно использовать метод ОткрытьМодально(). В этом случае окно откроется в модальном режиме и пока данная форма не будет закрыта

Ang kumpanya ng 1C ay gumagawa ng maraming pagsisikap upang sanayin ang mga programmer na umuunlad sa batayan ng 1C. Ang isa sa pangunahing pamamaraan ng pagtuturo ay ang paglalathala ng panitikan para sa inilapat na wika 1C 8. Isaalang-alang natin nang mas detalyado ang pinakapopular na mga libro sa programming na dapat basahin ng lahat.

Sinimulan namin ang pagsusuri sa mga napaka-kapaki-pakinabang na mga libro na kasama ng bawat programa ng 1C (ang kit ay maaaring magkakaiba nang bahagya).

Mga aklat mula sa "kahon" ng programa ng 1C

1C: Enterprise 8 Pag-install at Gabay sa Pag-install

Ang isang libro para sa mga administrador ng baguhan at mga programmer, kung saan ang mga teknikal na nuances, pag-install ng mga susi ng lisensya, pinapayong mga setting ay ipininta.

1C: Enterprise 8 Paglalarawan ng naka-embed na wika

Ang libro ay nai-publish sa apat na bahagi. Sa mga ito mahahanap mo ang isang sapat na buong paglalarawan ng built-in, isang paglalarawan ng wika ng query, isang paglalarawan ng mga built-in na pamamaraan, isang paglalarawan ng mga object application, atbp.

1C: Pag-configure at Pamamahala ng Enterprise 8

Ang libro ay naglalaman ng impormasyon na magiging kapaki-pakinabang sa parehong mga programmer at tagapangasiwa. Ang libro ay naglalaman ng isang paglalarawan ng mga pangunahing bagay ng system metadata at mga pamamaraan ng paggamit nito.

1C: Enterprise 8 client-server. Mga tampok ng pag-install at paggamit (para sa mga paghahatid ng client-server)

Ang panitikan na ito ay ibinibigay lamang sa mga suplay para sa pag-install sa mode ng operasyon ng client-server. Inilalarawan ng libro ang mga pamamaraan ng pag-set up ng 1C server, mga tampok ng pag-set up ng mga aplikasyon ng kliyente, mga setting ng proteksyon ng server, mga tampok ng paggana at mga setting ng isang sistema ng impormasyon.

1C: Enterprise 8.2. Mga simpleng halimbawa ng pag-unlad

Mahusay na libro para sa mga developer ng nagsisimula. Inilalarawan ng panitikan ang mga halimbawa ng mga tunay na gawain at ang kanilang detalyadong solusyon. Ang libro ay nahahati sa siyam na mga kabanata, na pinagsunod-sunod ng uri ng gawain. Ang maliit na librong ito ay maaaring maging isang matapat na katulong sa simula ng pag-aaral.

1C: Enterprise 8.3. Mga praktikal na gabay ng developer

Kumuha ng 267 1C mga aralin sa video nang libre:

Ang libro ay isang lohikal na pagpapatuloy ng "Mga simpleng halimbawa ng pag-unlad" - naglalaman ito ng isang solusyon sa mas kumplikadong mga problema na inilapat. Ang libro ay nakasulat na isinasaalang-alang ang pinakabagong mga pagbabago sa sistemang 1C Enterprise 8.3, kasama na pinamamahalaang mga form.

Upang maipadama ang wika ng programming, ang 1C ay nagtakda ng isang kanais-nais na presyo para sa librong ito - mula sa 140 rubles para sa mga kasosyo at mula sa 240 rubles para sa mga customer na tingi.

Ang desisyon ng mga espesyal na inilapat na problema sa "1C: Enterprise 8.2"

Papayagan ka ng librong ito na masuri ang solusyon ng tunay na kumplikadong mga problema. Bukod dito, mahirap hindi lamang mula sa isang teknikal na punto ng pananaw, kundi pati na rin mula sa isang pamamaraan. Inilalarawan ng aklat ang solusyon ng lubos na dalubhasang mga gawain, tulad ng automation ng mga proseso ng negosyo, pagsusuri ng data, pagbuo ng mga ulat ng analitikal, atbp. Ang panitikan ay inilaan para sa mga may karanasan na mga programer ng 1C.

Propesyonal na pag-unlad sa 1C: Enterprise 8.3 ″ system

Ang aklat, na tinawag na "Bible 1C." Ang libro ay may dalawang-dami na format na A4 at naglalaman ng isang kabuuang 1,400 sheet ng kaalaman. Inilalarawan ng panitikan ang buong saklaw ng mga kakayahan at pagpapaandar ng naka-embed na kapaligiran sa pag-unlad. Ang impormasyon ay ipinakita sa isang form na encyclopedia. Inirerekumenda ko ito bilang isang sanggunian na libro, kung saan maaari mong mai-refresh ang iyong memorya sa anumang oras. Pinagsasama ng libro ang halos lahat ng panitikan sa pag-unlad.

Inilabas ang libro upang sagutin ang mga tanong na lumabas sa proseso ng pagbuo ng mga pinamamahalaang form. Ang isang malaking bilang ng mga halimbawa ay isinasaalang-alang sa panitikan, na kung saan tiyak na mahahanap mo ang iyong gawain. Ang libro ay nahahati sa apat na mga seksyon - pagdidisenyo ng interface ng command, pagdidisenyo ng mga form, mga form sa programming at pag-optimize ng pakikipag-ugnayan ng client-server.

Pag-unlad ng mga kumplikadong ulat sa 1C: Enterprise 8.3. Sistema ng komposisyon ng data

  - isang napakahalagang mekanismo ng 1C enterprise. Gayunpaman, kasama ang kahalagahan ng mekanismo ay itinuturing na kumplikado para maunawaan ng mga developer. Sinusuri ng libro ang sistema ng komposisyon ng data, na nagsisimula sa isang paliwanag ng mga termino at pagbuo ng madaling mga ulat at nagtatapos sa pinaka kumplikadong mga ulat ng pagsusuri.

Mga Teknolohiya ng Pagsasama 1C: Mga Negosyo

Ang aklat ay magiging isang kailangang-kailangan na tool para sa mga developer na kasangkot sa pagsasama sa iba pang mga sistema ng impormasyon. Sakop ng libro ang mga halimbawa ng pagsasama gamit ang mga sumusunod na teknolohiya: txt, dbf, xml, zip, HTML, excel, FTP, HTTP, e-mail, Web-services, atbp.

1C: Enterprise 8. Data conversion: data exchange sa pagitan ng mga solusyon sa aplikasyon

Tutulungan ka ng aklat na ito na maunawaan kung paano lumikha ng mga panuntunan sa palitan sa pagitan ng iba't ibang mga pagsasaayos. Inilalarawan nito ang mga pangunahing kaalaman ng mga panuntunan sa pagsusulat ng palitan sa isang pagsasaayos. Gayunpaman, sa maraming mga paraan ang aklat na ito ay isang kopya ng built-in na tulong sa pagsasaayos ng data ng conversion.

Ang isang simpleng pagsasaayos para sa pagtatala ng paggalaw ng mga cartridges para sa teknolohiya ng laser sa isang samahan gamit ang platform ng 1C Enterprise 8.3 at ang interface ng Taxi ay binuo. Isinasaalang-alang ang paggalaw ng bawat kartutso (pagbili, refueling, pagpapanumbalik, pag-aayos, pag-install sa printer, atbp.) At ang gastos ng bawat kartutso. Ang pangunahing layunin ay upang makabisado ang pagbuo ng mga aplikasyon batay sa platform ng 1C Enterprise 8.3 gamit ang halimbawa ng pagbuo ng isang magagawa at kapaki-pakinabang na aplikasyon.

Ako ay isang programmer na may karanasan, ngunit ang 1C ay hindi seryoso na kasangkot noon. Upang pagsamahin ang kaaya-aya (kakilala sa 1C Enterprise 8.3) sa kapaki-pakinabang (walang kanselahin ang gawain), susubukan naming bumuo ng isang magagawa na pagsasaayos gamit ang mga kakayahan ng bagong bersyon. Marahil ang proseso ng pag-unlad ng pagsasaayos ay magiging kapaki-pakinabang para sa isang tao at tulungan ang mga nagsisimula na makabisado ang 1C.

Nagtatrabaho ako sa departamento ng IT ng isang malaking samahan na may isang malaking bilang ng mga laser printer at MFPs. Ang pag-account para sa paggalaw ng mga cartridge para sa kanila ay isang kagyat na gawain at ang pangangailangan ng pamamahala.

Pahayag ng problema.

Ang pagpuno ng toner, pagpapanumbalik, pag-aayos ng mga cartridge ay isinasagawa ng isang third-party na samahan. Kinakailangan na isaalang-alang ang paggalaw ng bawat kartutso, iyon ay, pagbili, i-refill kasama ang toner, pagpapanumbalik, pag-aayos, pag-install sa isang tiyak na printer (MFP), kasalukuyang lokasyon, pagsulat, atbp. Bilang karagdagan, ang mga gastos ng bawat kartutso (mga gastos sa pagbili, i-refill sa toner, atbp.) Ay dapat isaalang-alang. ng mga supplier).

Malinaw na negosyo - kinakailangan ang anumang mga ulat. Siyempre, para sa mga gumagamit, ang lahat ay dapat na simple at malinaw hangga't maaari.

Plano ng pagpapatupad.

Ginagamit namin ang platform ng 1C Enterprise 8.3 bilang pinaka modern sa ngayon.

Upang mabuo ang platform, susubukan naming gumamit ng maraming iba't ibang mga object ng pagsasaayos hangga't maaari, at natural, ang bagong interface ng Taxi. Susubukan naming bigyan ang mga pangalan ng mga bagay na malinaw at malapit sa functional na layunin. Hindi namin hinawakan ang mga "banayad" na sandali ng operasyon ng 1C, tulad ng pag-optimize ng pakikipag-ugnay sa client-server, pamamahagi ng papel, atbp.

Una, ipagpalagay na sa aming pagsasaayos ay magkakaroon ng mga sumusunod na bagay:

Mga direktoryo:

Mga Lisensya ng Lisensya

  Mga cartridges

  Mga Presyo ng Mga Cartridges na Lisensya

  Mga Printer

  Mga Pangngalan ng Printer

  Mga tagapagtustos

Mga Dokumento:

Pagdating Mga Cartridges

  Kapalit ng kartutso

  Isulat ang mga Cartridges

Mga paglilipat:

Oo hindi

  Kondisyon ng Cartridge

  Mga dahilan upang Palitan ang Mga Cartridges

Mga rehistro ng impormasyon:

Kapalit ng Cartridges

Mga Rehistro ng Pag-save:

Mga cartridges

Ang algorithm ng trabaho.

Ang pangunahing "artista" ay ang listahan ng mga cartridge na magagamit (Handbook Mga cartridges) Sa una, ang listahan ay puno ng isang dokumento Pagdating Mga Cartridges Mga Lisensya ng Lisensya. Kapag bumili ng props ng halaga ng kartutso Kondisyon  sa dokumento ay napili bilang Bago. Ang presyo ng pagbili ay natutukoy sa pamamagitan ng sanggunian Mga Presyo ng Mga Cartridges na Lisensyakasalukuyang petsa Numero ng Serial) Mga Props Lokasyontinukoy bilang "C kayamanan ".

Accounting para sa refueling, pagpapanumbalik, pag-aayos, atbp ng umiiral na mga cartridge ay isinasagawa din ng isang dokumento Pagdating Mga Cartridges. Ang uri ng mga cartridge ay natutukoy sa pamamagitan ng sanggunian Mga Lisensya ng Lisensya. Ang katayuan ng kartutso ay natutukoy mula sa listahan Kondisyon ng Cartridge. Ang presyo ng trabaho (refueling, pagpapanumbalik) ay natutukoy sa pamamagitan ng sanggunian Mga Presyo ng Mga Cartridges na Lisensya. Ang pagkakaiba-iba ng kartutso ay natutukoy ng serial number (props Numero ng Serial).

Kapag may hawak na dokumento Pagdating Mga Cartridges  sa sekular na seksyon Palitan ang Cartridges  sanggunian na libro Mga cartridges  isang linya ay idinagdag kasama ang mga detalye ng kasalukuyang dokumento at ang kaukulang cartridges (kasama ang serial number mula sa dokumento) sa direktoryo Mga cartridges  nagbabago ang halaga ng mga detalye Kondisyon  at Lokasyon.

Gayundin sa rehistro ng mga akumulasyon   Mga cartridges

Accounting para sa kapalit ng kartutso sa isang tiyak na printer (sanggunian Mga Printer) na ipinatupad sa pamamagitan ng dokumento Kapalit ng kartutso. Ang dokumento ay nagpapahiwatig ng kasalukuyang printer. Ang pagiging natatangi ng printer ay tinutukoy ng mga props. Numero ng Serial. Ang kartutso na mai-install at papalitan (mga numero ng cartridge serial) ay ipinahiwatig.

Kapag may hawak na dokumento Kapalit ng kartutsosa tabular na bahagi ng direktoryo Mga Printer  ang kasalukuyang printer ay nagdaragdag ng isang linya kasama ang mga detalye ng dokumento at binago ang props Cartridge. Sa sanggunian Mga cartridges  ang mga kasalukuyang cartridges ay nagbabago ng halaga ng mga detalye Kondisyon  at Lokasyon. Para sa naka-install na kartutso sa props Lokasyon  nakarehistro ang kasalukuyang printer, at para sa tinanggal na kartutso - " Warehouse.

Gayundin sa rehistro   Kapalit ng Cartridges  Ang kilusan ay naitala para sa dokumentong ito.

Ang mga cartridges ay isinulat bilang isang hiwalay na dokumento Isulat ang mga Cartridges.

Kaya, sa kasalukuyang sandali sa direktoryo Mga cartridges  Ang bawat kartutso ay may mahusay na tinukoy na estado (bago, pino, walang laman, atbp.) At isang tukoy na lokasyon ( "Warehouse"o isang tukoy na printer), na, sa pamamagitan ng mga simpleng ulat, ay nagbibigay-daan sa iyo upang masuri ang pagkakaroon ng mga cartridges na may isang naibigay na estado at tapusin na kailangan mong bumili, magbula, atbp. Well, isaalang-alang ang mga gastos nang natural.

Pagpapatupad.

Magpatuloy tayo sa aktwal na pagsasaayos.

Gumawa tayo ng isang walang laman na base sa configurator, tawagan itong buong kapurihan na "IT espesyalista" at ayusin ang subsystem Pag-accounting ng Cartridge. Hindi ko ilalarawan ang hakbang-hakbang kung paano gawin ito, dahil may sapat na mga libro sa isyung ito.

Una, idagdag ang enumeration: Oo hindi, Kondisyon ng Cartridge  at Mga dahilan upang Palitan ang Mga Cartridges  na kakailanganin natin sa hinaharap. Ang komposisyon ng mga paglilipat ay ipinapakita sa Larawan 2

I-configure namin ang mga simpleng sanggunian na libro Mga Lisensya ng Lisensya  at Pangngalan ng mga printer.

Kinakailangan Uri ng Cartridge  sa sanggunian Pangngalan ng mga Printer  italaga ang uri ng link na sanggunian Mga Lisensya ng Lisensya  (Larawan 3). Huwag kalimutan na ang lahat ng mga object ng pagsasaayos na aming nabuo ay dapat isama sa subsystem Mga cartridge ng Accounting.

Sa sanggunian Mga Printer  maraming mga detalye ay may isang uri ng link:

Para sa karagdagang pagsubok ng programa, sa mode ng Enterprise, pupunan namin ang maraming linya sa mga direktoryo na aming binuksan. Naturally, sa una ay pinupuno namin ang mga simpleng direktoryo, kung gayon - mga direktoryo na may mga link ng kinakailangang. Sa hinaharap, ang buong pag-download ng data ng tunay na negosyo ay dapat na isagawa gamit ang pagproseso mula sa mga talahanayan ng Excel.

Ngayon ay oras na upang magdagdag ng mga dokumento sa pagsasaayos. I-configure ang object ng dokumento sa puno ng mga bagay na pagsasaayos Pagdating Mga Cartridges  na may mga detalye at tabular na bahagi Pangngalan sa dokumento  . Wala pa kaming mga regulasyon ng akumulasyon sa tab - pagsasaayos Paggalaw  nananatiling blangko para sa dokumento. Dahil kakailanganin nating isulat ang aming sariling pagproseso ng dokumento, at ang code ng programa ay nakasulat sa module ng form ng dokumento, gagawa kami ng mismong form (Fig. 9). Ginagawa namin ang lahat sa pamamagitan ng default, dahil nakasulat ito sa mga libro (Form - Add - Document Form).

Gagamitin namin ang dokumentong ito sa pagtanggap sa bodega ng parehong bago at pino (muling naayos, naayos) mga cartridge.

Sa wakas, para sa account para sa pagtanggap ng mga cartridges, nagtakda kami ng isang rehistro ng akumulasyon Mga cartridgesna may mga sukat, mapagkukunan at mga detalye (Fig. 10) .

Sa bookmark Mga rehistro  ipahiwatig ang aming dokumento Pagdating Mga Cartridges. I-save ang pagsasaayos.

Bumalik kami sa pamamagitan ng puno ng mga bagay sa dokumento Pagdating Mga Cartridges. Sa bookmark Paggalawpiliin ang rehistro Mga cartridges, patakbuhin ang taga-disenyo ng Paggalaw at punan ang patlang ng Expression na may mga halaga ng mga detalye ng dokumento (Larawan 11).

Mag-click sa OK at makapasok Module ng object   program code (Larawan 12).

Ngayon ang pinaka-kagiliw-giliw na bagay ay kailangan mong magdagdag ng code ng programa sa Module ng Bagay upang mabigyan ang sumusunod na pag-andar kapag nag-post ng isang dokumento Pagdating Mga Cartridges.

Sa pagtanggap ng isang bagong kartutso (pagbili) sa direktoryo Mga cartridges  isang linya na may isang natatanging numero ng kartutso at kaukulang (mula sa dokumento) mga detalye ay dapat na maidagdag. Kasabay nito ang props Kondisyon ng Cartridge  magiging mahalaga " Bago", At props Lokasyon- halaga " Warehouse". Tabular na bahagi ng manu-manong Mga cartridges  hindi ito pinupuno.

Ayon sa algorithm ng programa, sa una kinakailangan na ipasok ang bawat cartridge na may natatanging numero sa direktoryo Mga cartridges  dokumento Pagdating Mga Cartridges.

Sa pagtanggap ng isang toner na pino (naayos, naayos, atbp.) Kartutso, itinuturing na ang kartutso na may parehong numero ay nasa direktoryo na Mga cartridges, at sa kasong ito kapag hawak ang dokumento Pagdating Cartridges,idinagdag ang hilera sa bahagi ng mesa Mga istasyon ng gasat nagbago ang mga detalye Lokasyon  at Kondisyonsa kasalukuyang kartutso. Ang code na idinagdag sa Object Module ay ipinapakita sa Larawan 13.

Ngayon ay maaari kang magsagawa ng unang pagsubok ng pagganap ng programa. Sa enterprise gumawa kami ng isang dokumento Pagdating Mga Cartridges(Larawan 14). Push button Humawak at malapit. Pumunta sa direktoryo Mga cartridgesat nakita namin na ang isang linya na may mga detalye ng binili kartutso na may isang walang laman na bahagi ng tabular ay lumitaw sa loob nito (Larawan 15).

Buksan ang rehistro Mga cartridges(item sa menu Magrehistro sa Pagbabayad ng Cartridge) at makita ang isang katulad na linya doon.

Lumilikha kami at isinasagawa ang pangalawang dokumento Pagdating Mga Cartridges  na may parehong kartutso ngunit pino (Larawan 16).

Pumunta sa direktoryo Mga cartridges  at nakita namin na ang isang kartutso sa tabular na bahagi ay naidagdag sa kartutso na sinimulan namin Mga istasyon ng gas  at binago ang props Kondisyon  (Larawan 17).

Hooray! Gumagana ang programa!

Pag-andar ng dokumento ng kurso Pagdating Mga Cartridges  kinakailangan upang magpino, halimbawa, nais kong awtomatikong kapalit ang huling sa pamamagitan ng presyo ng presyo ng serbisyo sa bukid Gastos  sanggunian ng sanggunian Mga Presyo ng Mga Cartridges na Lisensya  kapag pumipili ng isang tagapagtustos at para sa ganitong uri ng kartutso.

Ito ay sa ibang pagkakataon, ngunit ngayon makikipag-ugnay kami sa pagpapalit ng mga cartridge - lumikha ng isang dokumento Kapalit ng kartutsoat ang kaukulang rehistro ng impormasyon Kapalit ng Cartridges.

Mga detalye at tabular na bahagi ng dokumento Pangngalan sa dokumento  ipinakita sa Fig. 18. Wala kaming angkop na rehistro ng akumulasyon at impormasyon sa pagsasaayos, sa bookmark Paggalaw  Hindi namin pipirahan ang anumang bagay para sa dokumento. Dahil kakailanganin nating isulat ang aming pagproseso ng dokumento, nilikha namin ang default na Form ng Dokumento.

Upang account para sa pagpapalit ng mga cartridges, nag-set up kami para sa impormasyon ng isang rehistro ng impormasyon (hindi isang rehistro ng mga akumulasyon) Kapalit ng Cartridgesna may sukat at detalye (Fig. 19) . Ito ay naka-malayo sa ngayon nang walang mga mapagkukunan sa paanuman .

Sa bookmark Mga rehistro  ipahiwatig ang aming dokumento Kapalit ng kartutso.

I-save ang pagsasaayos. Bumalik kami sa pamamagitan ng puno ng mga bagay sa dokumento Kapalit ng kartutso  Sa bookmark Paggalawpiliin ang rehistro Kapalit ng Cartridges, patakbuhin ang Designer ng Paggalaw at punan ang patlang ng Expression na may mga halaga ng mga detalye ng dokumento. Mag-click sa OK at makapasok Module ng object  dokumento, kung saan nakikita natin ang nilikha Magrehistro ng tagabuo ng kilusan  program code (Fig. 20).

Ngayon idagdag sa Module ng object  programa ng programa upang maibigay ang sumusunod na pag-andar kapag nagsasagawa ng isang dokumento Kapalit ng kartutso. Sa sanggunian Mga Printerpara sa isang printer na ang kartutso ay pinalitan, dapat na idagdag ang isang linya sa sekular na seksyon Palitan ang Cartridges  kasama ang mga detalye mula sa dokumento at ang halaga ng mga detalye ay magbabago Numero ng Cartridge Ngayon.Sa sanggunian Mga cartridges  ang tinanggal at naka-install na mga cartridge ay magbabago ng mga detalye Lokasyon  at Kondisyon  . Pinahusay na pagpoproseso ng pagpoproseso ng dokumento Kapalit ng kartutso  ipinakita sa ibaba.

Pamamahala ng Pamamaraan (Pagkabigo, Mode)

// ginamit na mga direktoryo

Mga Printer \u003d Mga Sanggunian. Mga Printer;

Cartridges \u003d Sanggunian. Cartridges;

// dulo ng insert ginamit na mga direktoryo

  // rehistro ang Cartridges

Paggalaw.Pagpalit ng Mga Cartridges. Sumulat \u003d Katotohanan;

Para sa bawat TextStringNomenclatureDocument Mula sa NomenclatureDocument cycle

Paggalaw \u003d Paggalaw. Cartridges Palitan. Idagdag ();

Paggalaw.Nakakuha ng Cartridge \u003d Pangngalan ng Cartridge;

Paggalaw. Numero ng Filmed Cartridge \u003d Tech String ng Dokumento ng Pangngalan. Numero ng Filmed Cartridge;

Ang Pag-install ng Pag-install ng Cartridge Number \u003d

Paggalaw. Printer Model \u003d Printer Model;

Paggalaw.PrinterSerialNumber \u003d TechStringNomenclatureDocument.PrinterSerialNumber;

Paggalaw.PrinterInventory Number \u003d

Motion.Cartridge Type \u003d TechStringNomenclatureDocument.Cartridge Type;

Paggalaw. Palitan kung Sino ang Gumawa \u003d Palitan Kung Sino ang Gumawa;

Paggalaw. Dahilan para sa Pagpapalit \u003d TechStringNomenclature ng Dokumento.Reason for Replacements;

// palitan ang direktoryo ng Printer

Pangalan String \u003d TechStringNomenclatureDocument.PrinterSerialNumber;

Pagkatapos CurrentObject \u003d

Ang mga Printer ay Nahanap Sa pamamagitan ng Kinakailangan ("Serial Number", Pangngalang String). Tumanggap ng Object ();

KasalukuyangObject.Cartridge NumberNow \u003d

TechStringDocument Nomenclature. Naka-install na Numero ng Cartridge;

NewString \u003d KasalukuyangObject.Pagbabago ng Cartridges.Add ();

NewString.Date ng Kapalit \u003d Petsa;

NewString.Cartridge View \u003d TechStringNomenclatureDocument.Cartridge Type;

NewString.Installed Number ng Cartridge \u003d

TechStringDocument Nomenclature. Naka-install na Numero ng Cartridge;

NewString.Shot Cartridge Number \u003d

TextStringNomenclatureDocument.Shot CartridgeNumber;

NewString. Sino ang Pinalitan \u003d Pinalitan Kung Sino ang Ginawa;

NewString.Reason para sa mga Pagpapalit \u003d TechStringNomenclature ng Dokumento.Reason para sa Pagpapalit;

KasalukuyangObject.Record ();

Tapusin Kung;

// baguhin ang direktoryo ng Cartridges - naka-install na kartutso

Pangalan String \u003d TechStringNomenclatureDocument.InstalledCartridgeNumber;

pagkatapos CurrentObject \u003d

String \u003d "";

String \u003d String + Printer Model + "" +

TechStringNomenclatureDocument.PrinterSerialNumber + "" +

TextStringNomenclatureDocument.PrinterInventory Number;

KasalukuyangObject.Location \u003d String;

KasalukuyangObject.Record ();

Tapusin Kung;

// tinanggal ang kartutso

Pangalan String \u003d TechStringNomenclatureDocument.Shot CartridgeNumber;

Pagkatapos CurrentObject \u003d

Mga Cartridges. Maghanap Sa pamamagitan ng Kinakailangan ("Numero", Mga Pangalan ng String). Tumanggap ng Bagay ();

KasalukuyangObject.Location \u003d "Warehouse";

KasalukuyangObject.State \u003d Enumerations.CartridgeState.Empty;

KasalukuyangObject.Record ();

Tapusin Kung;

// dulo ng pagbabago ng direktoryo

Wakas ng pag-ikot

Wakas ng Pamamaraan;

Upang suriin, punan at magsumite ng isang dokumento Kapalit ng kartutso(Larawan 21) . Pumunta sa direktoryo Mga Printer  at nakita namin na ang napiling printer ay nagdagdag ng isang linya sa seksyon ng tabular Mga istasyon ng gas  kasama ang mga detalye ng dokumento na hawak sa amin at ang mga detalye Numero ng Cartridge Ngayon  tinanggap ang halaga ng naka-install na numero ng kartutso (Fig. 22).

Sa sanggunian Mga cartridges  sa kartutso na naka-install sa printer, sa props Lokasyon ang data ng kasalukuyang printer ay naitala (Fig. 23). At bilang karagdagan sa rehistro ng impormasyon Kapalit ng Cartridges  naitala na kilusan sa dokumento (Larawan 24)

Kaya, sa ngayon, nakakuha kami ng isang pagsasaayos para sa pagtatala ng paggalaw ng mga cartridges para sa teknolohiyang laser, na, sa prinsipyo, maaari nang magamit sa trabaho.

Mula sa pananaw ng "ideolohiya" 1C, marahil mali na baguhin ang mga detalye ng mga direktoryo sa pamamagitan ng paghawak ng mga dokumento, gamitin ang direktoryo upang maiimbak ang mga kasalukuyang presyo - nakakaapekto ba ang naunang karanasan sa mga talahanayan ng may-akda ng artikulo na nakakaapekto dito, ngunit bakit ang sanggunian ay hindi isang talahanayan?

Naturally, ang isang pagpipino ng pag-andar, ang pagdaragdag ng mga ulat, pag-aayos ng bug at pag-debug ay kinakailangan. Tungkol sa mga ito sa susunod na bahagi ng artikulo.

Ang buong bersyon ng artikulo ay ibinibigay sa file na Part1.doc