Типовете данни, които обектът 1s може да приеме. Използване на определени типове. Колекции от генерични стойности

Типове данни в 1C:Enterprise 8.x

Преди да се потопим в езиковите конструкции на 1C:Enterprise, трябва да се запознаем с основните типове данни. За щастие,:

Начинаещите да изучават платформата 1C понякога имат объркване относно дефиницията на типовете данни и всякакви езикови нюанси, които възникват. Тази първа статия е уводна и е посветена на примитивните типове данни 1C, няма толкова много от тях.

Номер. Числата в 1C означават както цели числа, така и стойности с плаваща запетая. Максималната дължина на бита за стойност на числов тип може да бъде 32 цифри, включително десетичната точка. Трябва също така да се има предвид, че ограничението от 32 цифри важи за числа, които ще бъдат записани в базата данни. Възможно е да декларирате променлива и да й присвоите стойност, по-голяма от 32 знака. За числови стойностикоито се съхраняват в паметта, това ограничение не се прилага. Когато е декларирана като променлива от тип "Число", нейната стойност ще бъде 0.

Линия. Както във всеки друг език за програмиране, 1C реализира всички необходими функции за манипулиране на низове. Стойностите от този тип са представени в Unicode. Дължината на променливите тип низ не е ограничена.

Дата на. В допълнение към самата дата, стойностите от този тип съдържат и часа. Времето се отнася до часове, минути и секунди. Веднага след инициализацията на променлива от типа "Дата" ще й бъде присвоена стойност (дата) "Януари 01, 0001 00 часа 00 минути 00 секунди". Това понякога е досадно, но с времето се свиква.

Булева стойност. Ясно е, че променливите от този тип могат да приемат само две стойности: True, False.

Недефиниран. Стойности от тип "недефинирани" се използват в случаите, когато искате да посочите празна стойност, която не принадлежи към друг тип данни. Например, трябва да декларирате променлива, която след това ще се използва някъде. Можете да му присвоите стойност като 0 или "" (т.е. празен низ), но по този начин веднага задавате подходящия тип за него (число или низ). Но какво ще стане, ако инсталирането на един от тези типове по-късно може да попречи? В такива случаи можете да използвате стойността от тип "неопределен". Също така си струва да се отбележи, че много функции на вградения език, в случай на неуспешно изпълнение, връщат стойност от този тип като резултат. Когато описвате функциите си, се препоръчва да се ръководите от същото правило.

Нула. Общото значение на Null е почти същото като това на "недефинирано". Стойностите от този тип се използват за обозначаване на липсваща стойност в базата данни. Най-често можете да получите стойности от този тип, като използвате език за заявки. Например заявка, която използва обединения на таблици. Да предположим, че в една от таблиците няма стойност, която да отговаря на условието. В този случай на мястото на липсващата стойност ще има стойност от тип Null.

Възможно е да срещнете стойност от тип Null не само при работа със заявки. Например стойност Null приема атрибути, които не се използват от обекта. Да си представим, че имаме йерархичен справочник с атрибут "количество". Когато този атрибут беше създаден, свойството "Използване" беше зададено на "За елемента". Ако се опитате да получите достъп до този атрибут за референтен елемент от типа "група", тогава неговата стойност ще бъде Null.

Тип. Този тип се използва за дефиниране на налични типове. Звучи малко объркващо? Добре, ще се опитам да обясня с пример. Представете си, че сте изправени пред задачата да сравните типовете на две променливи. В кода ще изглежда нещо подобно:

Променлива1 = 123; //Тъй като присвоихме число, типът на променливата ще бъде "число".
Променлива2 = "низ"; //Тук присвоихме низ, така че типът на променливата ще бъде низ.

Сега трябва да сте 100% сигурни, че променлива1 е числова. Това е мястото, където типът „Тип“ идва на помощ (звучи смешно), както и няколко помощни функции. Докато не влезете в подробностите. Просто погледнете и се опитайте да разберете примера по-долу:

If (TypeZnch(Variable1) = Type("Number")) Тогава

alert("Променлива1 е числова!");

В противен случай

alert("Променлива1 НЕ е числова:(");

EndIf;

В този малък кодов фрагмент първо получавам типа на променливата с помощта на функцията ValueType(). Тази функция приема като параметър стойност, чийто тип искате да получите. В нашия случай това е "Променлива1". След това трябва да получа стойност от тип "Тип", която характеризира типа "Число". За да направите това, вграденият език предоставя функцията "Type()". Необходим е само един аргумент, низово представяне на името на типа. Тъй като трябва да сравним с типа "Число", тогава параметърът за функцията ще бъде "Число".

Благодаря на Игор Антонов за помощта при написването на статията.

Продължаваме да се запознаем с новата функционалност на 1C:Enterprise, която започнахме в предишната статия от поредицата. След като изучите материалите в тази статия, ще научите:

  • Какво представляват дефинираните типове и как да ги използвате?
  • За какво се използва свойството за конфигуриране на първични роли?
  • Как да използвам помощника за създаване на манипулатор на събития на формуляра?
  • Как и защо се използват конфигурационни дъмпове в XML файлове?

Приложимост

Статията се занимава с платформата 1C:Enterprise версия 8.3.4.437, но нейните материали могат да бъдат полезни и за тези, които работят върху по-стари версии.

Как да улесним разработката в 1C:Enterprise 8.3

Продължаваме да разглеждаме иновациите в платформата 1C:Enterprise 8, насочени към улесняване на конфигурацията.

Дефинирани типове

В платформа 8.3 е добавен нов обект към конфигурационния клон „Общи“ - Дефинирани типове.

Това е специален конфигурационен обект, който е предназначен да дефинира тип данни, който описва често използван обект или, с висока степен на вероятност, може да се промени при прилагане на приложено решение.

Например, помислете за съставен тип, който включва връзка към директориите „Изпълнители“ и „Физически лица“.

И този тип, в някои разработвани конфигурации, често се използва като измерение в информационния регистър, описващ информацията за контакт, като атрибут в документа „Бон за пари“ и т.н.

В процеса на внедряване на такава конфигурация съставът на този тип може да се промени - към него да се добавят нови обекти и обратно - да се изключат ненужни типове.

Ако вместо нашия нов „дефинируем тип“ използваме съставен тип на всяко място, където се използва такъв обект, тогава ще трябва да променим състава на типовете навсякъде. Това е дълго, трудно, трудоемко, има възможност да забравите за някои реквизити.

Ако използвате дефиниран тип, тогава в процеса на финализиране на приложеното решение ще трябва само да промените дефиницията на този тип (и програмния код, който обработва такива полета).

Всички атрибути, за които дефинираният тип е зададен като тип, ще бъдат променени автоматично.

Ето още един пример за използване на дефиниран тип.

За някои атрибути има стандарт за въвеждане в конфигурацията. Например, ние дефинираме количество като число с дължина 15 с точност 3, а количество като число с дължина 15 с точност 2.

Да приемем, че предприятието трябва да води записи на стоки с висока стойност с висока точност на теглото им.

Съответно трябваше да увеличим точността на детайлите, за да отчетем числото до 4 знака след десетичната запетая. Тези промени трябва да бъдат направени едновременно във всички детайли на документите, ресурсите на регистъра.

Това е проста задача, но отнема много време и изисква голямо внимание и постоянство от разработчика.

Когато създавате нов тип, който дефинирате, трябва само да посочите неговия тип. След това, когато създавате подробности за документи, регистрирайте ресурси, ще бъде възможно да изберете връзка към създадения дефиниран тип.

Този подход ви позволява да гарантирате един и същи тип данни (еднаква дължина, прецизност, еднакъв състав за полета от съставен тип и т.н.) на всички места, където се използва.

След това, ако трябва да промените типа данни на всички атрибути, не е необходимо ръчно да коригирате всеки атрибут поотделно, достатъчно е да направите промени в съответния дефиниран тип.

Дефинираният тип може да бъде съставен. Има обаче ограничения за използването на този конфигурационен обект. Така дефинираният тип не може да бъде част от типа стойност на плана от типове характеристики, а също така не може да бъде част от съставния тип данни на друг атрибут.

Обърнете внимание, че в платформа 8.3.5 възможностите за използване на дефинирани типове са увеличени чрез разширяване на набора от типове, които могат да бъдат част от дефинирания тип.

Нямаше повече промени до текущите версии на платформата 8.3.10/8.3.11 при работа с определения тип.

Конфигурационно свойство „Основни роли“

В платформа 8.2 основният конфигурационен елемент имаше свойство „Основна роля“, в което разработчикът дефинира ролята, която ще се използва, ако информационна базапотребители не са зададени.

В платформа 8.3 стана възможно да се зададат няколко роли, които ще се използват при определяне на права за достъп, когато списъкът с потребители е празен. Съответно имотът е преименуван на „Основни роли”.

Кликнете върху изображението, за да го увеличите.

Създаване на манипулатори на събития на клиент на формуляр

Когато конфигурира управлявано приложение, разработчикът трябва внимателно да наблюдава контекста на изпълнение на програмния код, като използва подходящите директиви на предпроцесора.

Тъй като на клиента са налични ограничен набор от типове данни и методи, често е необходимо разработчикът да създаде клиентска процедура, от която да прехвърли контрола на сървъра.

Платформа 8.3 въведе асистент за създаване на манипулатори на събития на клиенти на формуляри.

Кликнете върху изображението, за да го увеличите.

Сега разработчикът не трябва ръчно да създава сървърен метод и да посочва извикването му в клиентската процедура, но може да се съсредоточи изцяло върху внедряването на логиката на приложението на системата.

Качване на конфигурацията във файлове

Друга иновация на платформата 8.3 е възможността за изхвърляне на цялата конфигурация на диск като набор от файлове с определена структура.

Конфигурацията винаги се разтоварва само изцяло, без възможност за филтриране на разтоварени обекти.

За да разтоварите конфигурацията във файлове, изберете елемента от менюто Конфигурация - Качване на конфигурация във файлове, в диалоговия прозорец, който се отваря, изберете директорията, в която ще бъдат записани файловете.

Конфигурационните обекти се качват като набор от XML файлове. Модулите и текстовите оформления се записват като TXT файлове. Картините от конфигурацията се записват като файлове с изображения (BMP, PNG и др.). референтна информацияекспортирани в HTML файлове.

Кликнете върху изображението, за да го увеличите.

Както можете да видите, получените файлове имат общи универсални формати. Има голям брой различни софтуерни продукти за редактирането им.

Можете също да използвате системи за контрол на версиите на трети страни. Те ви позволяват да съхранявате няколко версии на един и същ документ, ако е необходимо, да се върнете към по-ранни версии, да определите кой и кога е направил тази или онази промяна.

Редактираните файлове могат да бъдат заредени обратно в конфигурацията с помощта на елемента от менюто Конфигурация – Зареждане на конфигурация от файлове.

Работата с новата функционалност за зареждане / разтоварване също е достъпна с помощта на параметрите на командния ред LoadConfigFromFiles и DumpConfigToFiles. Например така:

“c:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe” ДИЗАЙНЕР /F “X:\Platform8Demo” /N “Администратор” /DumpConfigToFiles “X:\1\”

Преди това, обратно в платформа 8.2, имаше механизъм за разтоварване/зареждане на конфигурационни файлове, което позволяваше селективно разтоварване/зареждане на някои свойства на конфигурационни обекти (модули, оформления и справочна информация).

Беше забелязано, че по подразбиране командите „Разтоварване на конфигурационни файлове“ и „Зареждане на конфигурационни файлове“ са изключени от конфигуратора в платформа 8.3.

Въпреки това, като персонализирате главното меню, можете да показвате тези команди в менюто и да ги използвате.

Новият механизъм за разтоварване на конфигурацията във файлове винаги разтоварва всички данни за цялата конфигурация, не е предоставена възможност за конфигуриране на обекти за разтоварване, като по този начин се гарантира целостта на конфигурацията.

Обикновените форми и интерфейси се качват в двоична форма (вътрешна) и не могат да се редактират. Конфигурацията на доставчика също не е предназначена за редактиране.

Останалите обекти се качват във файлове с универсални формати. По същество механизмът е фокусиран върху управлявано приложение.

Новият механизъм предоставя на разработчика възможност за автоматизирана обработка на конфигурацията чрез стартиране на конфигуратора в пакетен режим.

Също така сега конфигурацията може да се редактира от външни софтуерни инструменти, като се използва например XML формат.

При разтоварване се извършва допълнителна обработка на конфигурацията: окачените връзки се премахват, неизползваната информация също не се разтоварва (например помощ за несъществуващ език).

А при зареждане на конфигурацията се проверява нейната цялост, не се допуска зареждане на файлове с неуникални идентификатори, обекти с метаданни, неправилни имена на типове данни и др.

Имайте предвид, че от версия 8.3.7 се появи нов формат за качване, който се нарича "йерархичен". Старият формат започва да се нарича "линеен". Изборът на формат е достъпен в прозореца за качване във файлове:

Започвайки с версия 8.3.11, "йерархичният" формат е единственият наличен за избор при интерактивно качване:

Ако използвате тази функционалност, препоръчваме:

  • първо, да използвате "йерархичния" формат за качване;
  • второ, използвайте платформа не по-ниска от версия 8.3.8+, т.к започвайки от него, скоростта на зареждане / разтоварване на XML файлове е значително увеличена.

Версия 8.3.10 вече поддържа частично дъмпинг на конфигурацията в XML файлове. В резултат на това стана възможно да се използва дъмпинг на конфигурация в XML във връзка с Git.

/
Създаване и модифициране на обекти с метаданни

Използване на дефинирани типове

Обхват: управлявано приложение, редовно приложение.

1. Дефинираните типове са предназначени да дефинират типове данни, които описват често използвани обекти или, с висока степен на вероятност, могат да се променят при прилагане на приложено решение. Те ви позволяват да използвате повторно описания тип или набор от типове, без да указвате състава на различни места в конфигурацията (в атрибути, свойства на обекти, форми и т.н.).

Вижте също статията за ITS: „Конфигурационни обекти – дефинирани типове“

2.1. За дефиниране на прост тип и неговите квалификатори, които имат приложно значение, което се използва в различни атрибути, ресурси, атрибути на формуляри, оформления и т.н. във всяка подсистема или в цялото приложно решение. Това гарантира същата дължина, точност на данните във всички места на употреба и опростява преработката в случай на промяна на изискванията.
Например:

  • Номер на фактура- Ред, дължина 30. Регламентира формата на номера на фактурата в различни документи: Получаване на стоки и услуги, WriteBooksPurchases, Връщане на стоки от клиентаи т.н.
  • Адрес за доставка- String, 500. Текстово представяне на адреса за доставка в документи OrderSupplier, Адрес за доставка на превозвача, В процес Продавач консултант, в реквизит Адрес за доставка на превозвачадокумент Заявление за връщане на стоки от клиентаи т.н.

2.2. За дефиниране на съставен тип, който се използва масово в обекти на някаква подсистема или в цялото приложно решение. Дефинираният тип гарантира еднакъв състав (тип) на данните във всички места на използване и също така опростява разработването и внедряването на подсистеми в конфигурациите на приложенията.

Например, подсистемата е вградена в конфигурацията Взаимодействия, който е предназначен за водене на кореспонденция на електронна поща, регистрация на разговори и срещи. При внедряването на тази подсистема разработчикът реши състава на обекти с метаданни, които могат да действат като "контакти за взаимодействие" - това са елементи на директории Физически лица, Партньори, Контакт Партньории задайте тази композиция от типове в дефинирания тип Взаимодействия с контактипредоставени в подсистемата. На свой ред дефинираният тип се използва масово в атрибути на обекти и форми на подсистеми (в документи Среща, Планирано взаимодействие- таблична част Членове, в документ СъобщениеSMS- табличен раздел Адресати, в документ Телефонно обаждане- реквизит АбонатКонтакт, в общи форми Адресната книга, ChoiceContact- реквизити Контакти по тема, в параметъра на оформлението ЙерархияВзаимодействияКонтактдневник за документи Взаимодействияи т.н.) В противен случай, без да използвате дефинирания тип Взаимодействия с контактиби било необходимо да премахнете обектите на подсистемата от поддръжката и да зададете необходимия състав от типове на всички изброени места.

2.3. При разработване на инжектирана подсистема, за замяна на типа приложение, който ще бъде посочен по време на внедряването.
Например тип подсистема Доставчициможе да бъде заменен с приложен тип конфигурация, когато бъде разгърнат Контрагенти.

3. Неправилно е да се използват дефинирани типове за задаване на „синоним“ на съществуващ тип, „заместване“ на обекти, за локално (а не масово) използване в рамките на една подсистема (конфигурация) без необходимост от внедряване в други конфигурации, само за причини за лекота на усъвършенстване. По правило това показва грешка в дизайна или методологично неправилен избор на името на оригиналния тип.

Типова системае специална система, чрез която се организират данните, използвани от приложните решения. Типовата система ви позволява да представяте информация от реалния свят с термини, които са "разбираеми" за 1C:Enterprise 8.

Типовата система предоставя широки възможности както за директно описание на бизнес логиката на приложените решения, така и за изпълнение на междинни задачи по обработка на данни.

Типовата система е описана в асистента за синтаксис, във вградената помощ и в документацията.

Основната характеристика на системата от типове е, че има типове, които съществуват във всяко приложно решение. Самите тези типове са дефинирани на ниво платформа и винаги присъстват, независимо от действията на разработчика. Наред с тях в конкретно приложно решение може да има различни видове данни, които са присъщи на това конкретно приложно решение. Само за такива типове данни на ниво платформа Общи правилатехните творения, модели. И конкретни типове данни се създават от платформата въз основа на това как разработчикът формира и модифицира структурата на приложеното решение.

Типове данни, дефинирани на ниво платформа

Наборът от типове, върху които могат да работят приложените решения, е доста разнообразен. Тя ви позволява да решавате както задачи за обработка на данни, така и задачи за представяне на тези данни на потребителя и интерактивна работа с тях. Има няколко основни категории типове данни.

Примитивни типове

Примитивните типове данни са типове като Линия, Номер, дата, булевои други. Тези типове не са нещо специално за 1C:Enterprise 8. По правило такива типове данни съществуват и в други софтуерни системи.

Стойностите на примитивните типове са прости неделими стойности, в които е невъзможно да се разграничат отделните компоненти. Например стойности като Номерможе да бъде 1, 8, 15 и т.н. За да създадете стойност от примитивен тип, трябва да я посочите в текста на програмата буквален- символен идентификатор на стойността.

Колекции от генерични стойности

Освен това има по-сложни типове данни. Например, платформата поддържа редица типове, които са общи колекции от стойности: масив, Структура, Списък със стойностии други.

Общи видове

Освен това платформата реализира специфични типове данни, които реализират една или друга функционалност на приложените решения: Текстов документ, SpreadsheetDocument, StorageValues, Конструктор на заявкии други.

Наричат ​​се и общи типове общи предмети. Стойностите на тези типове, за разлика от стойностите на примитивните типове, са колекция от стойности на отделни свойства на обект. Затова се наричат екземпляри на обекти.

Екземплярите на обекти се създават с помощта на специален вграден езиков оператор - Нов.

Типове интерфейси

Типовете интерфейс ви позволяват да организирате визуалното взаимодействие на приложеното решение с потребителя. По принцип това са видове, свързани с работата на формите и техните елементи.

Типове данни, генерирани в приложеното решение

Въпреки това, заедно с типовете данни, които са дефинирани на ниво платформа, конкретно решение за приложение може да използва уникални типове данни, които съществуват само в това конкретно решение за приложение. Освен това платформата ще поддържа напълно работа с тези типове данни по същия начин, както с типове, които са дефинирани на ниво самата платформа.

По правило появата на нови типове данни в решението на приложението е свързано с използването на обекти за конфигуриране на приложението. Следователно тези видове също се наричат видове приложенияили приложни предмети.

На ниво платформа се поддържат няколко класа (шаблони) от приложни обекти, които сами по себе си не могат да бъдат използвани в конкретно приложно решение. Например, можете да изброите такива класове обекти на приложения като Справочници, Документация, Информационни регистри, Планове на типове характеристикии т.н.

За всеки клас приложени обекти се определя основната функционалност, съответстваща на него: типовете таблици на базата данни, които трябва да бъдат създадени за съхраняване на данни, стандартни форми, типични езикови обекти, набори от права и др.

Разработчикът, създавайки приложно решение, няма възможност да използва директно тези класове, но може да добави нов конфигурационен обект към своето приложно решение, което наследява цялата функционалност на определен клас:

Например, разработчикът може да добави нова препратка към своето приложно решение Номенклатура Справочници, или нов документ CashReport, който ще наследи функционалността на класа Документация.

Веднага след такова добавяне нови типове данни стават достъпни за разработчика, чийто състав се определя от принадлежността на конфигурационния обект към един или друг клас обекти на приложение.

Например след създаване на нова директория Номенклатурастават достъпни следните типове данни:

  • DirectoryManager.Номенклатура,
  • DirectoryLink.Номенклатура,
  • DirectoryObject.Nomenclature,
  • DirectorySelection.Nomenclature,
  • DirectoryList.Номенклатура.

Типовата система описва само общата "структура" на този тип, правилата, по които ще се формират обекти от този тип. Конкретното име на типа, съставът на свойствата и методите на обекта ще зависи от това как разработчикът извиква конфигурационния обект и какви, например детайли, таблични части, той ще добави към него.

В същото време, след създаване на нов натрупващ регистър SalesCompanies, съставът на новите типове данни ще бъде различен:

  • RegisterAccumulationManager.SalesCompany,
  • RegisterAccumulationSampling.SalesCompanies,
  • RegisterAccumulationList.SalesCompanies,
  • RegisterAccumulationSetRecords.SalesCompany,
  • RegisterAccumulationRecord.SalesCompanies,
  • Натрупване RegisterRecordKey.CompanySales.

Трябва отново да се отбележи, че тези типове данни не се поддържат първоначално от платформата и съществуват само в конкретно решение за приложение.

Друг момент, който трябва да се подчертае, е най-лесно да се демонстрира с пример.

Да предположим, че в решението на приложението са създадени две нови директории: НоменклатураИ цени. Въпреки факта, че и двата обекта са наследили функционалността на съответния клас Справочниции същият набор от типове данни е създаден за тях в приложното решение, "едноименните" типове данни ще бъдат различни типове данни. Например, DirectoryObject.Nomenclature Тип данни.

Влезте като студент

Влезте като ученик за достъп до училищно съдържание

Вътрешен език за програмиране 1C 8.3 за начинаещи програмисти: типове данни в 1C

Сега знаем как да накараме компютъра да изпълни нашите команди (като използваме командата „Отчет“ като пример) и как да предадем определени параметри на командите (текста на съобщението, което следва в скоби след „Отчет“). Открихме също, че всички команди са разделени с точка и запетая.

Типове данни

Една от основните задачи на програмирането е обработката на данни, така че нека да разберем какви са основните типове данни на езика 1C:

  • Линия. Отличен пример за такива данни е цитат от стихотворение "Бурята покрива небето с мъгла". Имайте предвид, че String данните винаги са затворени в двойни кавички.
  • Номер. Всички знаем типа данни. Често се занимаваме с него Истински животО: на работа в деня на заплата и след това в магазина. Числата, както със сигурност знаете, могат да бъдат цялоИ дробен. Пример за цяло число: 1000000, но дробно число: 3.14. Дробната част се отделя от цялото точка. Числата също имат знак: плюсили минус.
  • дата. Вашата дата на раждане е пример за този тип данни. Включва година, месец и ден. Например, първият полет на човек в космоса се състоя на 12 април 1961 г. На компютърен език тези данни ще изглеждат така: " 19610412 ". Опитайте се да разберете сами защо това е така. Датата винаги е вътре единични кавички ().

Задача номер 6.Запишете в компютърен формат (като използвате подходящия тип данни) отговорите на следните въпроси:

  1. Кога е изстрелян първият изкуствен спътник?
  2. Как се казваше първият астронавт?
  3. Колко планети има в Слънчевата система?

Проверете себе си

Въз основа на резултатите от задача № 7 можем да направим интересно заключение: като параметър за командата Report можете да предавате не само низове, но и данни от всякакъв друг тип.

Обработка на данни

Сега, най-накрая, нека обработим тези данни! Какви операции можем да извършваме с данни? Зависи от вида им.

Например, можем да свързваме низове един с друг с помощта на знака за добавяне:

За по-сложни аритметични изрази използвайте скоби:

Задача номер 8.Изпълнете тези примери на компютър.