Нормални и предварително дефинирани елементи. Разлика в страната на базата данни

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

График на 4 урока от курса:

00:19 Промени в справочника Служители след приключване на домашните за 3-ти урок от курса
00:35 Редактиране на реда на детайлите в директориите
02:54 Създаване на справочник Номенклатура
03:40 Създаване и конфигуриране на йерархична директория
05:10 Създаване на групи Услуги и Стоки в справочник Номенклатура
06:05 Попълване на справочника Номенклатура
07:14 3 начина за прехвърляне на елемент от директория към друга група
08:21 Създаване на директория Складове
09:19 Създаване на предварително дефинирани елементи на директория
11:25 Попълване на справочника Складове
12:20 Направете тест върху материала 4 урока

Йерархична директория– указател с възможност за йерархично подреждане на елементите му. Например в Номенклатурния справочник могат да се създават групи: Стоки, Услуги и др., в които да се разполагат елементи, свързани с тези групи. Освен това групите директории могат да включват други групи, като по този начин създават многостепенна йерархична структура.

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

Формуляри за справочници- визуално представяне на директорията. В зависимост от действията, които искаме да извършим с нашата директория, трябва да покажем директорията в „различни изгледи“. И така, на 4-тия урок от курса редактирахме реда на детайлите под формата на списък и под формата на референтен елемент.

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

Общо има 5 формуляра (видове формуляри) за директории:

  • форма на елемент– за създаване или редактиране на елемент от директория;
  • групова форма- за създаване или редактиране на група директории;
  • форма на списък– за показване на списъка с елементи на директория;
  • форма за избор- служи за избор на един от елементите на тази директория в полето на определена форма. Например, за да изберете конкретен склад от директория Складове в полето Склад в документа Стокова разписка;
  • формуляр за избор на група- служи за избор на една от групите на тази директория в полето на определена форма.

Предварително дефинирани елементи на директорията- елементи на директория, създадени от разработчика в режим на конфигуратор и които могат да бъдат достъпни от вградения 1c език по име.

Има фундаментална разлика между обикновените и предварително дефинираните елементи на директория. Обикновените елементи не са постоянни в конфигурация. По време на работа на потребителя те могат да бъдат създавани, редактирани и изтривани и поради тази причина не трябва да се разчита на тях при изпълнението на каквито и да е алгоритми (кодът и името на елемента могат да бъдат променяни от потребителя).Предварително дефинираните елементи, от друга страна, са постоянни. В процеса на работа, дори ако потребителят преименува такъв елемент, той може да бъде достъпен от вградения език 1c. Това се постига, като предварително дефинираният елемент има подпори Име, който не е достъпен за потребителя. Обикновените елементи на директорията нямат този атрибут.

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

Домашна работа за урок 4 от курса

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

внимание! Ето пробна версия на урока, чиито материали може да не са пълни.

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

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

1C 8.3 език за заявки за начинаещи програмисти: функция VALUE

функция ЗНАЧЕНИЕ проектирани да се справятв тялото на заявката към системните стойности на enumИ предварително дефинирани данни.

Какво друго за трансфери и предварително зададени данни, ще попитате. Нека поговорим за всичко по ред.

Изброявания

Изброявания- това е обект на приложение (сещате се, че все още има СправочнициИ Документация). Защо беше нужен?

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

Неизменността е основният им коз. Това са един вид константи на база данни.

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

Представете си какво ще се случи, ако той се опита да използва директорията за тези цели?

Първо, някой потребител ще продължи и ще добави малко "марсиански под".

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

И програмата ще се счупи от това, защото за нейната работа е необходимо да има точно два пола и с имената "Мъжки" и "Женски".

Именно за такива случаи съществуват изброения: за да веднъж (дори на етапа на конфигуриране) твърдо да зададете всички възможни стойности и по-късно да ги използвате в програмния код.

Нека да разгледаме пример за такова изброяване в нашата база данни „Gastronom“. Четете пробна версия на урока, намират се пълни уроци.

Ето го изброяването ни с името Етаж. Какви стойности може да приеме?

Има само две стойности. С имената "Мъжки" и "Женски". Това, от което се нуждаем.

Къде можем да използваме това изброяване в бъдеще? Е, разбира се, в ръководството клиенти. Обърнете внимание, че в неговия списък има нов проп Етажи тип Enum.Gender:

По този начин, когато попълваме клиентската карта вече в потребителски режим, ще можем да изберем само две стойности Мъж и Жена като пол на клиента:

Сега нека направим заявка, която избира клиенти и техния пол от базата данни:

Сега нека променим заявката, така че да останат само мъже. Ако се опитаме да напишем нещо като:

тогава не получаваме нищо:

Тъй като не е възможно да получите достъп до изброени стойности по този начин. Те трябва да бъдат достъпни чрез функцията ЗНАЧЕНИЕ:

И така, една от задачите на функцията ЗНАЧЕНИЕ- използване на изброени стойности в заявки.

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

По-добре да покажа с пример какво представляват предварително дефинираните данни за директории. Четете пробна версия на урока, намират се пълни уроци.

В нашата база данни "Gastronom" (в потребителски режим) отворете справката "Мерни единици":

Разгледайте елементите му. Виждате ли жълтите кръгове до някои от елементите? Тези елементи (които имат кръгове) са предварително дефинирани данни.

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

Първо, това означава, че елементът е създаден на етапа на конфигуриране от програмиста (в нашия случай това са елементи с кодове 1, 2 и 3).

И второ, това означава, че този елемент е много важен за функционирането на програмата. Че някакъв код в базата данни е свързан с него (или по-скоро с неговото предварително дефинирано име).

Ето защо простото изтриване на такъв елемент няма да работи. Опитайте да го маркирате за изтриване:

Нека сега да преминем към режима на конфигурация и да видим къде са създадени тези много предварително дефинирани елементи (в този случай за справочника за мерни единици):

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

За елемент с код 1 това име е Тон, с код 2 - Грам и т.н. Това име се нарича предварително зададено име на елементи именно с това име можете да го посочите от кода (или от заявката в нашия случай).

Може да попитате защо не беше възможно да се направят мерните единици просто изброяване с елементите тон, грам и опаковка? И всичко това, защото в този случай за нас е важно референтната мерна единица винаги да съдържа някои специфични елементи (тон, грам и опаковка), но в същото време не искаме да забраним на потребителя да добавя някой от техните елементи ( килограм, парче и т.н.). Четете пробна версия на урока, намират се пълни уроци.

Следователно предварително дефинираните елементи определено са по-подходящи тук от enums.

И можем да получим достъп до нашите предварително дефинирани елементи от заявката, като използваме функцията, която вече ни е позната ЗНАЧЕНИЕ:

Направете теста

Стартирайте теста

1. Стойностите на Enum са зададени

2. Да се ​​съхранява списък със складове във фирма, вид

3. Да се ​​съхранява списък на мерните единици в склад, вид

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

5. За препратка към изброената стойност в заявка е подходяща функция

6. Да съхранява данъчни ставки, чийто списък ще се променя от потребителя, вида

7. Предварително зададените данни идват от

Всеки знае разликата между предварително дефинираните елементи и обикновените: "Предварително дефинираните елементи се създават в режим Конфигуратор и не могат да бъдат изтрити в режим 1C:Enterprise." В потребителски режим можете да различите предварително дефиниран елемент от тези, добавени от потребителите чрез специална икона (вижте следната екранна снимка).

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

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

// СТОКИ ПО РЕГИСТРИ СтокиОрганизации. MoveSet = Премества. СтокиОрганизации; Ако ReceiptType = Изброявания. Видове стокови разписки. Тогава в склада // Вземете таблица със стойности, която съответства на структурата на набора от записи в регистъра. MoveTable =MoveSet. Unload() ; // Попълване на таблицата за движение.С общо предназначение. LoadToValueTable(TableByProducts,TableMovements) ; // Липсващи полета.Таблица на движенията. FillValues(Организация, "Организация" ) ; Таблица на движенията. FillValues(Undefined, "Комисар"); Таблица на движенията. FillValues(Референции. Качество. Ново, " Качество " ); // Попълване на качеството от предварително дефиниран елемент

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

Разлики

В тестовата конфигурация е създадена директория "Стоки". В него се създава групата "Тестови елементи". Можете да видите съдържанието на групата на екранната снимка в началото на статията. За справочника "Продукти" в SQL базата данни има съответстваща таблица "_Reference37" със следната структура:

Но как да определим съответствието между детайлите на конфигурационното дърво и полетата в SQL таблицата?

Нека използваме стандартния метод на глобалния контекст "GetDatabaseStorageStructure()", който ще върне таблица със стойности с описание на структурата на таблицата.

В таблицата със стойности „Полета“ виждаме съответствието между полетата на SQL таблицата и детайлите на обекта в дървото с метаданни. В нашия пример разглеждаме структурата на директорията "Продукти". Всички речници имат стандартен атрибут "Предварително дефиниран" от булев тип, който е зададен на TRUE за предварително дефинирани елементи:

Според таблицата със структурата за съхранение на директория в базата данни можем определено да кажем, че полето „Predefined“ съответства на полето „IsMetadata“. Ако прегледаме съдържанието на таблицата "_Reference37" в SQL базата данни, ще видим следното:

В записа за предварително дефинирания елемент стойността на полето "IsMetadata" е зададена на "0x01", което съответства на флага TRUE. За нормалните елементи стойността е зададена на "0x00". Това е основната разлика между предварително дефинираните елементи и обикновените. Всички други полета се съхраняват в базата данни по същия начин като полетата на обикновените елементи, добавени от потребителите.

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

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

Завършване

Предварително дефинираните елементи са неразделна част от повечето конфигурации. Използването им опростява разработката и прави изграждането на функционалността логически по-„хармонично” и солидно.

Печат (Ctrl+P)

Работа с предварително зададени стойности с помощта на Object Manager

Можете да получите предварително зададена стойност от страната на сървъра на 1C:Enterprise, като използвате съответния мениджър на обекти. Низът, който дефинира получения атрибут, има следната форма:

PredefinedValueType.MetadataObjectName.Value


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

● Стойност - може да бъде едно от следните:
● за изброяване се посочва името на стойността на изброяването;

● RoutePoints.PointName е точката на маршрута на бизнес процеса.
В случай, че е необходимо да се получи точка на маршрут на бизнес процес, низът, описващ получената стойност, ще изглежда така:

BusinessProcesses.MetadataObjectName.RoutePoint.RoutePointName
Пример:


Вид = Изброявания. Видове стоки. Стоки;
// Получаване на предварително дефинирани данни за директория.
Елемент = Директории.Валута.Рубла;
// Точка на маршрут на бизнес процес
Точка = Бизнес процес Одобрение Маршрут Точки Одобрение;

Работа с предварително зададени стойности Използване на функцията Предварително зададена стойност ()

Поради факта, че обектите на приложението не са налични от страна на клиента, получаването на предварително дефинирани атрибути с помощта на мениджъри на обекти става невъзможно. Следователно, за да ги получите, има метод за глобален контекст PredefinedValue(). Параметърът на този метод е низ, описващ каква предварително дефинирана стойност трябва да бъде извлечена. Синтаксисът за описание на предварително дефинирана стойност е същият като за оператора VALUE на езика за заявки.
Низът, който дефинира получения атрибут, има следната форма:

Нека разгледаме по-подробно компонентите на тази линия:
Тип предварително зададена стойност– за получаване на предварително зададени стойности могат да бъдат зададени следните типове данни (записани на
единствено число):
● Наръчник,
PlanSpeciesCharacteristics,
● Сметкоплан,
Изчисляване на типове планове,
● Обява,
● Бизнеспроцес.
● И ObjectNameMetadata– задайте името на обекта с метаданни, както е посочено в конфигуратора.
● Стойност - може да бъде едно от следните

● за изброяване се посочва името на стойността на изброяването;
● за да получите предварително зададена стойност, посочете името й, както е посочено в конфигуратора;
● RoutePoint.PointName – точка на маршрут на бизнес процес;
● EmptyLink - за получаване на празна връзка.
Ако трябва да получите стойността на системното изброяване, параметърът на метода ще изглежда така:
SystemEnumName.SystemEnum Стойност.
Например:

ChartType = PredefinedValue("ChartType.ConcaveSurface“);
Ако искате да получите точка на маршрут на бизнес процес, низът, описващ стойността, която получавате, ще изглежда така:
Пример:

// Получаване на стойността на enum.
Изглед = Предварително зададена стойност(“Изброяване.Видове стоки.Стоки”);
// Вземете стойността на празна препратка.
Празна връзка =
Предварително зададена стойност(“Document.Invoice.EmptyReference”);
// Получаване на предварително дефинирани данни за директория.
Елемент = Предварително зададена стойност(„Наръчник. Валута. Рубла“);
// Точка на бизнес процес
Точка = Предварително зададена стойност(“BusinessProcess.Agreement.Routepoint.Approval”);



Свързани статии: