Изразен език на системата за съставяне на данни (1Cv8). Функции на изразния език на системата за съставяне на данни 1s SKD изчислени полета от функции

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

  1. кумулативен сбор в групирането;
  2. кумулативна сума в кръстосана таблица;
  3. получаване на предишната стойност;
  4. PM изход в един ред.

1. Получаване на показател на база начисляване

Нека получим количеството стоки като кумулативна сума на ниво групиране. За да направите това, създайте изчисляемо поле (вижте Фигура 1).
В раздела "Ресурси" задайте функцията за изчисляемото поле:
CalculateExpression("Sum(QuantityTurnover)", "First", "Current")
който ще сумира броя на продуктите от първия запис до текущия (вижте Фигура 2).

Ако кумулативното общо количество на артикул трябва да бъде получено на ниво подробни записи, тогава задаваме функцията CalculateExpression за изчисляемото поле в раздела „Изчислени полета“ (вижте Фигура 3).
В зависимост от нивото на получаване на кумулативната сума създаваме групиране (виж Фигура 4): на ниво ресурс - групиране по стоки, на ниво дистанционно управление - групиране на подробни записи.
Фигура 4. Групиране на отчети с кумулативни суми

2. Получаване на стойността на индикатора от предишния ред

Нека вземем обменния курс за датата и предходната дата. За да направите това, създайте изчисляемо поле и напишете следния израз в полето за израз (вижте Фигура 5):
CalculateExpression("Оценка", "Предишен", "Предишен")
който ще вземе предишната стойност на обменния курс за текущия ред, последният параметър на функцията ограничава получаването на данни.
Тъй като работим на ниво подробни записи, веднага отиваме в раздела „Настройки“ и създаваме групиране - подробни записи.

3. Получаване на индикатор като кумулативна сума в кръстосана таблица

Нека да получим количеството стоки на база начисляване по периоди. За да направите това, създайте изчисляемо поле (вижте Фигура 1). В раздела „Ресурси“ указваме следния израз за изчисляемото поле (вижте Фигура 6):
CalculateExpression("Sum(QuantityTurnover)", "Период", "Първи", "Текущ")
който на ниво групиране ще изчисли количеството стоки в интервала от първия ред до текущия в контекста на периода за всеки артикул.
В раздела „Настройки“ създайте таблица с групиране по елемент в ред и групиране по период в колона (вижте Фигура 7).

4. Извеждане на таблични данни в един ред

Методите за показване на таблични данни в един ред, включително метода с помощта на функцията CalculateExpression, са обсъдени в статията

Диаграма на оформлението на данните (1C SKD)- удобен дизайнер за създаване на сложни отчети в софтуерни продукти 1C:Enterprise, които допринасят за развитието и проследяването на автоматизацията на производството, което им позволява да бъдат направени възможно най-гъвкави и красиви за минимално време. Допълнително предимство на схемата за съставяне на данни (1C SKD) е автоматичното генериране на контролиран формуляр за отчет и с по-нататъшното развитие на тази област е важен фактор при избора на метод за разработване на отчет. Но поради сложността на структурата на схемата за съставяне на данни (1C SKD) и огромния брой настройки, това често води до по-дълго разработване на отчета, отколкото чрез „дизайнера на изходна форма“. Следователно програмистът на 1C трябва да разбере всички тънкости на схемата за съставяне на данни (1C DCS), за да ускори допълнително времето за разработка за генериране на отчети.

Нека да разгледаме първите три раздела на схемата за съставяне на данни (1C SKD) - набор от данни, връзки към набор от данни и изчисляеми полета.

Набор от данни в 1C SKD

Наборът от данни включва възможност за създаване на три обекта - заявка, обект и обединение, нека разгледаме по-подробно всеки от тях:

Това е обикновена заявка, която се генерира с помощта на бутона Query Builder. Ако флагът за автоматично попълване е зададен, тогава всички избрани подробности автоматично ще бъдат включени в полетата на набора от данни. Също така е възможно да персонализирате попълването на полетата в заявката в раздела Състав на данни, където има три раздела:

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

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

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

Част от работата се извършва в схемата за съставяне на данни, а част от нея се извършва програмно; нека да разгледаме един прост пример:

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

Нека добавим три полета и попълним всяка колона с името на детайлите, останалите колони ще се попълнят автоматично:

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

&На клиент

Процедура Print()

Нашият отчет = PrintOnServer(); //извикване на функцията на сървъра

Нашият отчет.Покажи(); // показване на генерирания отчет

Край на процедурата

&На сървъра

Функция PrintOnServer()

DocumentObject = FormAttributeValue(“Обект”);

//поставяме табличната част Products в структура с име ProductsSKD по същия начин, както посочихме в самия SKD името на обекта, съдържащ данните

DataSet = нова структура;

DataSet.Insert(“ProductsSKD”, DocumentObject.Products);

//получаваме нашето оформление и задаваме настройките по подразбиране, така че всички настройки за изход на отчета да се вземат от нашето оформление

OurLayout = DocumentObject.GetLayout(“SKD”);

Настройки = OurLayout.DefaultSettings;

//създайте оформление на оформление на данни с нашите настройки

LayoutLinker = newDataLayoutLayoutLinker;

LayoutLayout = LayoutComposer.Execute(OurLayout, Settings);

//извършване на съставяне на данни с нашия набор от данни

DataCompositionProcessor = newDataCompositionProcessor;

DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

//Създаваме документ с електронна таблица и показваме нашия отчет в него

ReportDocument = Нов табличен документ;

OutputProcessor = Нов OutputProcessorDataCompositionResultInTabularDocument;

OutputProcessor.SetDocument(ReportDocument);

OutputProcessor.Output(DataCompositionProcessor);

Връщане на документОтчет;

EndFunction

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

ОТНОСНО обединение

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

Имаме маси:

При комуникация ще получим:

И когато се комбинират:

Нека сега разгледаме попълването на колони в набори от данни (ще пропуснем някои, тъй като са свързани с други раздели; ще се върнем към тях в бъдещи статии):

- поле, посочете общото име на атрибута;

­­- път, посочете името на данните, по които ще се свържем с него в системата за контрол на достъп, например в Изчисляеми полета;

- заглавие, посочете името на атрибута, който ще се показва в отчета;

- ограничение на полето, посочете наличието на този реквизит;

- ограничаване на детайлите, ние посочваме наличието на дъщерни елементи, важно е, че ако е посочена наличността на подробности, тогава самото поле ще бъде налично, може би тази механика ще бъде променена в бъдещи версии;

- израз, чрез който се изчислява представянето на полето, удобно е да се използва, когато трябва да променим малко изхода на детайлите, например, трябва след името номенклатурабеше показан наличност, където се намира, след което попълнете следното: Артикул + „е в склад“ + Склад. Повтарям, че достъпът до детайлите се осъществява чрез името, посочено в колоната пътека;

- подреждане на изрази, удобен механизъм за настройка на подреждането на отчети, където условието може да бъде зададено ръчно, подобно на предишната точка, но както показва практиката, този механизъм често не работи, както бихме искали, и ви съветвам да използвате стандартно сортиране;

- тип стойност, показва вида на стойността на атрибута; това трябва да бъде попълнено, ако използвате следното поле;

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

- декор– стандартните настройки на формата на полето, подобни на настройките в управлявани формуляри, ви позволяват по-точно и красиво да персонализирате изхода на определени детайли.

Връзки на набор от данни в 1C SKD

Тук е инсталиран само ляво присъединяване, на принцип подобен на връзкив заявки, в източник на комуникацияпосочете основната таблица за връзката, в приемникдопълнителен. IN източник на изразИ приемник на изразиПосочваме детайлите, чрез които ще се осъществява комуникацията. Ще разгледаме останалите колони по-подробно, когато разгледаме раздела. Настроики. Ако няма допълнителна връзка с параметри, тогава се препоръчва да направите връзката в заявката, това ще ускори отчета.

Правилното използване на схема за съставяне на данни (DCS) ви позволява да:

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

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

Какво е изчислено поле

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

Факт е, че системата за контрол на достъпа е нещо повече от просто показване на резултат от заявка и това ясно се вижда от формата за създаване на диаграма (фиг. 1).

Изчисляваните полета ви позволяват да извършвате определени действия с генерирания набор от данни:

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

Нека да прегледаме този списък.

Масив от стойности в една клетка

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


Така създадохме допълнително поле за изчисление в нашата схема;


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

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

  1. Разделител на елементи – показва кой символ ще отдели един елемент от масива или един ред от таблица със стойности от друг (в нашия случай пропуснахме този параметър и по подразбиране беше зададен нов ред);
  2. Разделител на колони – знак, използван за разделяне на колони в таблица със стойности (точка и запетая се използва по подразбиране).

Достъп до експортните функции на общ модул

Функциите на общ модул могат да действат като източник на данни за попълване на изчислено поле.

Няколко важни точки:

  • Функцията трябва да може да се експортира;
  • Ако дадена функция се намира в общ модул с набор от атрибути „Глобален“, тя се извиква директно по име, в противен случай функцията трябва да се извика според схемата „Име на споделен модул“. "Име на функцията, която ще бъде извикана."

Като пример за използване ще вземем същата заявка за документи за получаване и ще я покажем в отделна колона. Няма да описваме самата заявка, нека преминем директно към изчислените полета:


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

Езикови изрази за оформление

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

  1. Изчислете средната цена на артикула;
  2. Всякакви лихви;
  3. Изчисления на средни доходи и др.

За да избегнете проблеми, в тези случаи е препоръчително да въведете тест за деление на 0 в изчислителното поле.

Това може да стане с помощта на конструкцията „Избор Когато….Тогава… В противен случай… Край“.

В заключение, няколко думи за сравнително новата функция CalculateExpression(). С негова помощ, по-специално, можете да изчислите отклонения в цената между текущия и предишния ред, кумулативен баланс и др.

Да приемем, че можете да получите сумата на документа от предишния ред на нашата заявка, като посочите стойността Calculate Expression („Сума на документа“, „Предишна сума“) в полето „Израз“.

1. Изчислете (Eval)- има за цел да оцени израз в контекста на някакво групиране. Функцията се използва за съвместимост с предишни версии на платформата. Вместо това се препоръчва да използвате функцията CalculateExpression.

Синтаксис:
Изчисляване (израз, групиране, тип изчисление)

Настроики :

  • Изразяване(Линия). Съдържа изчислен израз;
  • Групиране(Линия). Съдържа името на групирането, в контекста на който трябва да се изчисли изразът. Ако празен низ се използва като име на групиране, изчислението ще се извърши в контекста на текущото групиране. Ако низът GrandTotal се използва като име на групата, изчислението ще се извърши в контекста на общата сума. В противен случай изчислението ще се извърши в контекста на родителската група със същото име.
    Например:
    Sum(Sales.SumTurnover) / Calculate("Sum(Sales.SumTurnover)", "Total").
    В този пример резултатът ще бъде съотношението на сумата за полето "Sales.AmountTurnover" на групиращия запис към сумата на същото поле в цялото оформление.
  • Тип изчисление(Линия). Ако този параметър е зададен на "TotalTotal", изразът ще бъде изчислен за всички групиращи записи. Ако стойността на параметъра е „Групиране“, стойностите ще бъдат изчислени за текущия запис на групова група.
2. Оценка на израз (EvalExpression) - има за цел да оцени израз в контекста на някакво групиране. Функцията взема предвид избора на групи, но не взема под внимание йерархичния избор. Функцията не може да бъде приложена към групиране в груповия избор на това групиране.

Синтаксис:
CalculateExpression(Expression, Grouping, CalculationType, Start, End, Sort, HierarchicalSort, ProcessingIdenticalOrderValues)

Настроики :

  • Изразяване(Линия). Съдържа изчислен израз;
  • Групиране(Линия). Съдържа името на групирането, в контекста на който трябва да се изчисли изразът. Ако празен низ се използва като име на групиране, изчислението ще се извърши в контекста на текущото групиране. Ако низът GrandTotal се използва като име на групата, изчислението ще се извърши в контекста на общата сума. В противен случай изчислението ще се извърши в контекста на родителската група с това име;
  • Тип изчисление(Линия). Ако този параметър е зададен на "TotalTotal", изразът ще бъде изчислен за всички групиращи записи. Ако стойността на параметъра е „Групиране“, стойностите ще бъдат изчислени за текущия запис на групова група. Ако параметърът е зададен на „Групиране без ресурси“, тогава при изчисляване на функцията за групов запис по ресурс изразът ще бъде оценен за първия групов запис от оригиналното групиране. Когато се оценява функцията CalculateExpression със стойността „GroupingNonResource“ за групови записи, които не са групирания по ресурс, функцията се оценява по същия начин, както би била оценена със стойността на параметъра „Grouping“. Създателят на оформление за съставяне на данни, когато генерира оформление за съставяне на данни при извеждане на поле - ресурс, по който се извършва групирането, към оформлението, извежда към оформлението израз, изчислен с помощта на функцията CalculateExpression с посочения параметър "GroupingNon-Resource". За други ресурси, групирани по ресурс, се връщат нормални ресурсни изрази. Ако параметърът е зададен на „Йерархия“, тогава изразът трябва да бъде оценен за родителския йерархичен запис, ако има такъв, и за цялото групиране, ако няма родителски йерархичен запис. Конструкторът на оформление, когато генерира израз за % в полето Hierarchy Group, генерира израз, съдържащ връзката на ресурсния израз към функцията CalculateExpression за ресурсния израз, който се изчислява за текущото групиране с тип изчисление Hierarchy.
  • Започнете. Показва от кой запис трябва да започне фрагментът, в кои агрегатни изразни функции трябва да се изчислят и от кой запис да се получат стойности на полето извън агрегатните функции. Низ, съдържащ едно от:
    • "първо" Необходимо е да се получи първият групиращ запис. След думата в скоби можете да посочите израз, резултатът от който ще се използва като отместване от началото на групирането. Получената стойност трябва да е цяло число, по-голямо от нула. Например First(3) – получаване на третия запис от началото на групирането. Ако първият запис е извън групирането, тогава се счита, че няма записи. Например, ако има 3 записа и искате да получите First(4), тогава се счита, че няма записи.
    • "последен" Трябва да получите последния групиращ запис. След думата в скоби можете да посочите израз, чийто резултат ще се използва като отместване от края на групирането. Получената стойност трябва да е цяло число, по-голямо от нула. Например Last(3) – получаване на третия запис от края на групата. Ако последният запис е извън групирането, тогава се счита, че няма записи. Например, ако има 3 записа и искате да получите Last(4), тогава се счита, че няма записи.
    • "Предишен" Трябва да получите предишния запис на групиране. След думата в скоби можете да зададете израз, резултатът от който ще се използва като отместване обратно от текущия групиращ запис. Например Previous(2) – получаване на предишния от предишния запис. Ако предишният запис е извън групирането (например, вторият групиращ запис изисква получаване на Previous(3)), тогава се получава първият групиращ запис. При получаване на предишния запис за сумата на групирането се получава първият запис.
    • "Следващия" Трябва да получите следващия групиращ запис. След думата в скоби можете да зададете израз, резултатът от който ще се използва като отместване напред спрямо текущия групиращ запис. Например Next(2) – получаване на следващия от следващия запис. Ако следващият запис надхвърли групирането, тогава се счита, че няма записи. Например, ако има 3 записа и третият запис получи Next, тогава се счита, че няма записи. При получаване на следващия запис за сумата на групирането се счита, че няма запис.
    • "Текущ". Трябва да получите текущия запис. При извличане на сумата за групиране се получава първият запис.
    • "Гранична стойност". Необходимостта от получаване на запис с определената стойност. След думата LimitingValue в скоби трябва да посочите израза, с чиято стойност искате да стартирате фрагмента, първото поле за поръчка. Първият запис, чиято стойност на полето за подреждане е по-голяма или равна на указаната стойност, ще бъде върнат като запис. Например, ако полето Период се използва като поле за подреждане и има стойностите 01/01/2010, 02/01/2010, 03/01/2010 и искате да получите LimitingValue(DateTime(2010) , 1, 15)), тогава ще се получи запис с дата 02/01. 2010 г.
  • Край. Показва към кой запис трябва да продължи фрагментът, в който трябва да се изчисли агрегатният израз. Низ, съдържащ едно от:
    • "първо"
    • "последен"
    • "Предишен"
    • "Следващия"
    • "Текущ".
    • "Гранична стойност".
  • Сортиране. Низ, който изброява изразите, разделени със запетаи, в чиято посока трябва да бъде подредена последователността. Ако не е посочено, тогава подреждането се извършва по същия начин, както за групирането, за което се оценява изразът. След всеки израз можете да посочите ключовата дума Възходящо, за подреждане във възходящ ред, Низходящо, за подреждане в низходящ ред, Автоматично подреждане, за подреждане на референтните полета по полетата, по които искате да подредите референтния обект. Думата Auto Order може да се използва както с думата Ascending, така и с думата Descending.
  • Йерархично сортиране. Подобно на сортирането. Използва се за организиране на йерархични записи. Ако не е посочено, композаторът на оформление генерира подреждането според подреждането, указано в параметъра за сортиране.
  • Обработка на същите стойности на поръчка. Низ, съдържащ едно от:
    • „Заедно“ означава, че последователност от подредени записи се използва за определяне на предишния и следващия запис;
    • „Отделно“ означава, че предишният и следващият запис се определят въз основа на стойностите на подреждащите изрази;
    Например, ако получената последователност е подредена по дата:
    1. 01 януари 2001 г. Иванов М. 10
    2. 02.01.2001 г. Петров С. 20
    3. 02 януари 2001 г. Сидоров Р. 30
    4. 03 януари 2001 г. Петров С. 40
    При използване на обработка на идентични стойности на поръчката "Отделно", предишният за запис 3 ще бъде запис 2, а при използване на "Заедно" - запис 1. И фрагментът за текущия запис за запис 2 за "Отделно" ще бъде запис 2, а за "Заедно" - записи 2 и 3. Така сборът за текущия запис за "Поотделно" ще бъде 20, а за "Заедно" - 50. Когато "Заедно" е посочено в Старт и Крайни параметри, не можете да посочите отместване за позициите „Първа“, „Последна“, „Предишна“, „Следваща“. Стойността по подразбиране е "Отделно".
Пример:
Получаване на съотношението на сумата за полето "Sales.AmountTurnover" на групиращ запис към сумата на същото поле в цялото оформление:
Sum(Sales.SumTurnover) / CalculateExpression("Sum(Sales.SumTurnover)", "Total").

Този пример изчислява стойността на текущата йерархия:
Избор
Когато Level() > 0
След това EvaluateExpression("Reference", "Hierarchy")
В противен случай Null
Край

Бележки:
Функцията взема предвид избора на групи, но не взема под внимание йерархичния избор. Функцията не може да бъде приложена към групиране в груповия избор на това групиране. Например при избиране на групирането на номенклатурата не можете да използвате израза CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 . Но такъв израз може да се използва при йерархичен подбор. Ако крайният запис предшества началния запис, тогава се счита, че няма записи за изчисляване на подробни данни и изчисляване на агрегатни функции. При изчисляване на интервални изрази за обща сума (параметърът Групиране е зададен на "GrossTotal") се приема, че няма записи за изчисляване на подробни данни и изчисляване на агрегатни функции. Когато генерира израз за функцията CalculateExpression, композаторът на оформление, ако изразът за подреждане съдържа полета, които не могат да се използват при групиране, замества функцията CalculateExpression с NULL.

3. Оценяване на израз с групов масив (EvalExpression с групов масив) - функцията връща масив, всеки елемент от който съдържа резултат от изчисляване на израз за групиране по зададеното поле.

Синтаксис:
CalculateExpressionWithGroupArray (Expression, GroupFieldExpressions, SelectRecords, SelectGroups)

Настроики :

  • Изразяване(Низ) - изразът, който ще бъде оценен. Например "Сума(СумаОборот)";
  • FieldExpressionsGroups
  • Избор на записи
  • Избор на групировки- избор, приложен към групови записи. Например: „Сума(СумаОборот) > &Параметър1“.
Пример:
Maximum(CalculateExpressionWithGroupArray("Amount(AmountTurnover)", "Counterparty"));


Конструкторът на оформление, когато генерира изрази за показване на персонализирано поле, чийто израз съдържа само функцията CalculateArrayWithGroup, генерира израза за показване, така че данните, показани от изгледите, и данните да са подредени.
Например за персонализирано поле с израза:
CalculateExpressionWithGroupArray("Сума(СумаОборот)", "Контрагент")
Създателят на оформление ще генерира следния израз за изход:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)), Amount(DataSet.AmountTurnover)", "DataSet.Account"), "2")))

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

Синтаксис:
CalculateExpressionWithGroupValueTable (Expression, GroupField Expressions, Records Selection, Group Selection)

Настроики :

  • Изразяване(Низ) - изразът, който ще бъде оценен. Един ред може да съдържа множество изрази, разделени със запетаи. След всеки израз може да има незадължителна ключова дума AS и името на колоната на таблицата със стойности. Например: „Контрагент, сума (AmountTurnover) като обем на продажбите.“
  • FieldExpressionsGroups- изрази на полета за групиране, разделени със запетаи. Например „Контрагент, страна“;
  • Избор на записи- израз, приложен към подробни записи. Например „Флаг за изтриване = False“. Ако този параметър използва агрегатна функция, ще възникне грешка при композирането на данните;
  • Избор на групировки- избор, приложен към групови записи. Например: „Сума(СумаОборот) > &Параметър1“.
Пример:
Изчисляване на израз с таблица за групиране на стойности („Акаунт КАТО контрагент, сума (сума оборот) КАТО обем на продажбите“, „Акаунт“)

Резултатът от тази функция ще бъде таблица със стойности с колони Контрагент и Обем на продажбите, която ще съдържа контрагенти с техните обеми на продажби.
Композиторът на оформление, когато генерира оформление, преобразува функционалните параметри в термини на полета за оформление на състава на данни. Например полето Account ще бъде преобразувано в DataSet.Account.
Например потребителско поле с израза:
CalculateExpressionWithGroupValueTable("Account, Amount(AmountTurnover)", "Account")
Създателят на оформление ще генерира следния израз за изход:
ConnectRows(GetPart(Order(CalculateExpressionWithGroupValueTable("DataSet.Account, DataSet.AccountRepresentation, Sum(DataSet.AmountTurnover), View(DataSet.AmountTurnover), DataSet.OrderingField", "DataSet.Account"), "5, 1, 3" ), "2, 4"))

5. Ниво - функцията е предназначена да получи текущото ниво на запис.

Синтаксис:
Ниво()

Пример:
Ниво()

6. Пореден номер - вземете следващия сериен номер.

Синтаксис:
NumberByOrder()

Пример:
NumberByOrder()

7. SequenceNumberInGrouping - връща следващия пореден номер в текущото групиране.

Пример:
NumberByOrderInGroup()

8. Форматиране - получаване на форматиран низ от предадената стойност.

Синтаксис:
Формат (стойност, форматен низ)

Настроики :

  • Значение- изразът, който трябва да бъде форматиран;
  • FormatString- форматният низ е зададен в съответствие с форматния низ на 1C:Enterprise.
Пример:
Формат (Invoices.Doc Amount, "NPV=2")

9. BeginOfPeriod

Синтаксис:
Начален период (дата, тип период)

Настроики :

  • дата(Дата на). Посочена дата;
  • Тип период
Пример:
Начален период (Дата и час (2002, 10, 12, 10, 15, 34), "Месец")
Резултат: 10/01/2002 0:00:00

10. Край на периода - функцията е предназначена да избира конкретна дата от дадена дата.

Синтаксис:
Краен период (дата, тип период)

Настроики :

  • дата(Дата на). Посочена дата;
  • Тип период(Линия). Съдържа една от следните стойности: минута; час; ден; Седмица; месец; Квартал; Година; десетилетие; Половин година.
Пример:
EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Седмица")
Резултат: 13.10.2002 23:59:59

11. AddKDate (DateAdd) - функцията е предназначена да добави определена стойност към датата.

Синтаксис:
AddToDate(Израз, Тип нарастване, Величина)

Настроики :

  • Изразяване(Дата на). Оригинална дата;
  • TypeMagnification(Линия). Съдържа една от следните стойности: минута; час; ден; Седмица; месец; Квартал; Година; десетилетие; Половин година.
  • величина(Брой). С колко трябва да се увеличи датата, дробната част се игнорира.
Пример:
AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Месец", 1)
Резултат: 11/12/2002 10:15:34

12. DateDifference - функцията е предназначена да получи разликата между две дати.

Синтаксис:
DifferenceDate(Expression1, Expression2, DifferenceType)

Настроики :

  • Израз1(Дата на). Извадена дата;
  • Израз2(Дата на). Оригинална дата;
  • TypeDifference(Линия). Съдържа една от стойностите: Second; минута; час; ден; месец; Квартал; година.
Пример:
DATEDIFFERENCE(DATETIME(2002, 10, 12, 10, 15, 34),
ДАТА ЧАС (2002, 10, 14, 9, 18, 06), "ДЕН")
Резултат: 2

13. Подниз - тази функция е предназначена да извлича подниз от низ.

Синтаксис:
Подниз (низ, позиция, дължина)

Настроики :

  • Линия(Линия). Низът, от който е извлечен поднизът;
  • Позиция(Брой). Позицията на знака, от който започва поднизът, който трябва да бъде извлечен от низа;
  • Дължина(Брой). Дължина на разпределения подниз.
Пример:
ПОДНИЗ(Акаунти.Адрес, 1, 4)

14. StringLength - функцията е предназначена да определя дължината на низ.

Синтаксис:
StringLength(низ)

Параметър:

  • Линия(Линия). Низ, чиято дължина е посочена.
Пример:
Ред (контрагенти.Адрес)

15. Година- тази функция е предназначена за извличане на годината от стойност на тип Дата.

Синтаксис:
Година (дата)

Параметър:

  • дата(Дата на). Датата, от която се определя годината.
Пример:
YEAR(Разход.Дата)

16. Квартал - тази функция е предназначена да извлича номера на тримесечие от стойност тип Дата. Номерът на четвъртината обикновено варира от 1 до 4.

Синтаксис:
Тримесечие (дата)

Параметър:

  • дата(Дата на). Датата, до която се определя тримесечието
Пример:
ТРИМЕСЕЧИЕ(Разходи.Дата)

17. Месец - тази функция е предназначена да извлича номера на месеца от стойността на тип Дата. Номерът на месеца обикновено варира от 1 до 12.

Синтаксис:
Месец (Дата)

Параметър:

  • дата(Дата на). Датата, от която се определя месецът.
Пример:
МЕСЕЦ(Разход.Дата)

18. Ден от годината (DayOfYear) - тази функция е предназначена за получаване на деня от годината от стойност на тип Дата. Денят в годината обикновено варира от 1 до 365 (366).

Синтаксис:
Ден от годината (дата)

Параметър:

  • дата(Дата на). Датата, по която се определя денят от годината.
Пример:
DAYYEAR(Разходна сметка.Дата)

19. Ден- тази функция е предназначена за получаване на деня от месеца от стойност на тип Дата. Денят от месеца обикновено варира от 1 до 31.

Синтаксис:
Ден (дата)

Параметър:

  • дата(Дата на). Датата, от която се определя денят от месеца.
Пример:
ДЕН(Разход.Дата)

20. Седмица - тази функция е предназначена да получи номера на седмицата от годината от стойност на тип Дата. Седмиците в годината са номерирани от 1.

Синтаксис:
Седмица (дата)

Параметър:

  • дата(Дата на). Датата, до която се определят номерата на седмиците.
Пример:
СЕДМИЦА(Разход.Дата)

21. Делничен ден - тази функция е предназначена да получи деня от седмицата от стойност на тип Дата. Нормалният ден от седмицата варира от 1 (понеделник) до 7 (неделя).

Синтаксис:
Ден от седмицата (дата)

Параметър:

  • дата(Дата на). Датата, по която се определя денят от седмицата.
Пример:
ДЕН ОТ СЕДМИЦАТА (Дата на разходната фактура)

22. Час- тази функция е предназначена за получаване на часа от деня от стойност на тип Дата. Часът на деня варира от 0 до 23.

Синтаксис:
час (дата)

Параметър:

  • дата(Дата на). Датата, до която се определя часът на деня.
Пример:
ЧАС(Разход.Дата)

23. Минута - тази функция е предназначена за получаване на минутата от часа от стойност от тип Дата. Минутата на часа варира от 0 до 59.

Синтаксис:
минута (дата)

Параметър:

  • дата(Дата на). Датата, до която се определя минутата на часа.
Пример:
МИНУТА(Разход.Дата)

24. Второ - тази функция е предназначена да получи секундата от минута от стойност на тип Дата. Секундата от минута варира от 0 до 59.

Синтаксис:
Второ (дата)

Параметър:

  • дата(Дата на). Датата, на която се определят секундите от минутата.
Пример:
SECOND(Разход.Дата)

25. Актьори - тази функция е проектирана да извлича тип от израз, който може да съдържа съставен тип. Ако изразът съдържа тип, различен от необходимия тип, ще бъде върнато NULL.

Синтаксис:
Express(Израз, Индикация за тип)

Настроики :

  • Изразяване- израз за преобразуване;
  • Индикация на типа(Линия). Съдържа низ тип. Например "Число", "Низ" и т.н. В допълнение към примитивните типове, този ред може да съдържа името на таблицата. В този случай ще бъде направен опит да се изрази препратка към посочената таблица.
Пример:
Express(Data.Props1, "Number(10,3)")

26. IsNull (IsNull) - тази функция връща стойността на втория параметър, ако стойността на първия параметър е NULL. В противен случай ще бъде върната стойността на първия параметър.

Синтаксис:
IsNull(Израз1, Израз2)

Настроики :

  • Израз1- стойност за проверка;
  • Израз2- върната стойност, ако Expression1 е NULL.
Пример:
YesNULL(Сума(Продажби.СумаОборот), 0)

27.ACos- изчислява аркосинус в радиани.

Синтаксис:
ACos (израз)

Параметър:

  • Изразяване(Брой). Стойността на косинуса (в диапазона -1 ... 1), чрез която се определя ъгълът.
28.ASin- изчислява арксинуса в радиани.

Синтаксис:
ASin(израз)

Параметър:

  • Изразяване(Брой). Стойността на синуса (в диапазона -1 ... 1), чрез която се определя ъгълът.
29.ATan- изчислява аркутангенса в радиани.

Синтаксис:
ATan (израз)

Параметър:

  • Изразяване(Брой). Стойността на тангенса, чрез която се определя ъгълът.
30.Cos- изчислява косинус.

Синтаксис:
Cos (израз)

Параметър:

  • Изразяване
31. Exp- повишаване на числото e на степен.

Синтаксис:
Exp (израз)

Параметър:

  • Изразяване(Брой). Значението на степента.
32.Дневник- изчислява натурален логаритъм.

Синтаксис:
Дневник (израз)

Параметър:

  • Изразяване
33.Дневник10- изчислява логаритъма на X при основа 10.

Синтаксис:
Log10 (израз)

Параметър:

  • Изразяване(Брой). Оригиналното число е по-голямо от 0.
34. Pow- степенуване.

Синтаксис:
Pow (база, индикатор)

Настроики :

  • База(Брой). Основата на операцията за степенуване.
  • Индекс(Брой). експонента.
35. Грях- изчислява синуса.

Синтаксис:
грях (израз)

Параметър:

  • Изразяване(Брой). Посочено в радиани.
36. кв- изчислява корен квадратен.

Синтаксис:
Sqrt (израз)

Параметър:

  • Изразяване(Брой). Неотрицателно число.
37. Тен- изчислява тангенса.

Синтаксис:
Тен (израз)

Параметър:

  • Изразяване(Брой). Стойността на синуса, чрез която се определя ъгълът.
38. Кръгла- закръглява оригиналното число до необходимата битова дълбочина. Режимът на закръгляване е стандартен (1,5 като 2).

Синтаксис:
Env (израз, битова дълбочина)

Настроики :

  • Изразяване(Брой). Оригинален номер;
  • Битова дълбочина(Брой). Броят на десетичните знаци, до които да се закръгли.
39. Межд- отрязва дробната част на числото.

Синтаксис:
Обект (израз)

Параметър:

  • Изразяване(Брой). Дробно число.
40. Функции на общи модули

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

Пример:
AbbreviatedName(Документи.Връзка, Документи.Дата, Документи.Номер)

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

41. Негодуване - тази функция връща низово представяне на предадената стойност от непримитивен тип. За стойности от примитивен тип връща самата стойност.

<Пустое значение>".

Пример:
Представяне (контрагент)

42. Струна - тази функция преобразува предадената стойност в низ.

Ако като параметър се използва масив или таблица със стойности, функцията връща низ, съдържащ низово представяне на всички елементи на масива, разделени със знаците "; ". Ако някой елемент има празно представяне на низ, тогава низът "<Пустое значение>".

Пример:
Ред (Дата на продажба)

43. ValueIsFilled

За NULL стойности Undefined винаги връща False.
За булеви стойности винаги връща True.
За други типове връща True, ако стойността се различава от стойността по подразбиране за дадения тип.

Пример:
ValueFilled(DeliveryDate)

44. LevelInGroup - тази функция получава текущото ниво на запис спрямо групирането.

Може да се използва за получаване на нивото на вложеност на запис в йерархично групиране.

Пример:
LevelInGroup()

45. ValueType

Синтаксис:
ValueType(Израз)

Параметър:

  • Изразяване(Линия). Тип стойност на низ.
Връща стойност от тип Type, съдържаща типа стойност на параметъра на функцията.

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

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

Система за съставяне на данни 1C 8.3 за начинаещи: преброяване на резултатите (ресурси)

Целта на този урок ще бъде:

  • Напишете отчет, който показва списък с продукти (Директория с храни), тяхното съдържание на калории и вкус.
  • Групирайте продуктите по цвят.
  • Научете за обобщаването (ресурси) и изчисляемите полета.

Създайте нов отчет

Както в предишните уроци, отваряме базата данни " Деликатес"в конфигуратора и създайте нов отчет през менюто" Файл"->"Нов...":

Тип на документа - външен доклад:

Във формуляра за настройка на отчета напишете името " Урок3" и натиснете бутона " Отворена диаграма за съставяне на данни":

Оставете името на схемата по подразбиране и щракнете върху " Готов":

Добавяне на заявка през конструктора

В раздела " Набор от данни" щракнете зеленознак плюс и изберете " Добавяне на набор от данни - Заявка":

Вместо да пишем текста на заявката ръчно, ние я изпълняваме отново конструктор на заявки:

В раздела Маси"плъзнете масата" Храна" от първата колона към втората:

Изберете от таблицата " Храна"полета, които ще поискаме. За да направите това, плъзнете и пуснете полетата" Име", "вкус", "Цвят" И " Съдържание на калории" от втората колона до третата:

Оказа се така:

Натисни бутона " Добре" - текстът на заявката се генерира автоматично:

Създаване на настройки за представяне на отчет

Отидете в раздела " Настройки“ и щракнете върху магическа пръчка, да се обади дизайнер на настройки:

Изберете типа отчет " списък..." и натиснете бутона " По-нататък":

Плъзнете от лявата колона надясно полетата, които ще се показват в списъка, и щракнете върху " По-нататък":

Плъзнете от лявата колона към дясното поле " Цвят" - ще се случи групиранередове в отчета. Щракнете върху " Добре":

И ето резултатът от работата на дизайнера. Йерархия на нашия доклад:

  • доклада като цяло
  • групиране "Цвят"
  • подробни записи - редове с имена на храни

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

Промяна на реда на колоните

Но нека нека променим редаколони (стрелки нагоре и надолу), така че да изглежда като фигурата по-долу:

Нека запазим отчета и го отворим отново в потребителски режим:

Страхотно, така е много по-добре.

Нека обобщим съдържанието на калории

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

За целта има механизъм за изчисляване на ресурсите.

Отидете в раздела " Ресурси"и плъзнете полето" Съдържание на калории„(ще го обобщим) от лявата колона в дясната.

В този случай в полето изберете израза от падащия списък " Количество (калория)", тъй като общата сума ще бъде сумата от всички елементи, включени в общата сума:

Ние запазваме и генерираме отчет:

Вече имаме резултати за всяка от групите и за доклада като цяло.

Нека го обобщим (средно) по отношение на калориите

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

Не можете да докоснете съществуващата колона „Калории“ - общата сума вече е показана в нея, така че нека създадем друго поле, което ще бъде точно копие на полето "Калории".

За да създадем такова „виртуално“ поле, ще използваме механизма изчислени полета.

Отидете в раздела " Изчисляеми полета" и натиснете зеленознак плюс:

В колона " Път на данните"пишем името на новото поле ( безпроблемно, без интервали). Нека се казва " Средно съдържание на калории", и в колоната " Изразяване"пишем името на съществуващо поле, на базата на което ще се изчислява новото поле. Пишем там " Съдържание на калории". Колона " Заглавие“ ще се попълни автоматично.

Добавихме ново поле (" Средно съдържание на калории“), но няма да се появи в отчета сам - трябва или да се обадите отново дизайнер на настройки("вълшебна пръчка") или добавете това поле ръчно.

Хайде да го направим второначин. За да направите това, отидете на раздела " Настройки", изберете" Докладвай"(все пак искаме да добавим полето като цяло към отчета), изберете раздела в долната част" Избрани полета"и плъзнете полето" Средно съдържание на калории"от лявата колона надясно:

Оказа се така:

Ние запазваме и генерираме отчет:

Полето се появи и виждаме, че неговите стойности са стойностите на полето "Калории". Страхотен!

За целта отново ще използваме вече познатия ни механизъм ресурси(обобщаване). Отидете в раздела " Ресурси"и плъзнете полето" Средно съдържание на калории"от лявата колона надясно:

Освен това в колоната " Изразяване"избирам" Средно (средна калория)":

Ние запазваме и генерираме отчет:

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

Знаете ли защо се появиха (стойности не по група)? Защото, когато добавихме полето " Средно съдържание на калории"в настройките на отчета, във втората стъпка, която избрахме целия доклади това ново поле се озова в елемента " Подробно записи".

Нека поправим грешката. За да направите това, върнете се в раздела " Настройки", изберете" Подробни записи" първо отгоре (стъпка 2) и след това " Подробни записи"отдолу (стъпка 3), отидете на отметката" Избрано полета" и ще видим в дясната му колона елемента " Автоматичен".

елемент " Автоматичен" - това не е едно поле. Това са няколко полета, които попадат тук автоматично въз основа на настройки от по-високо ниво.

За да видите какви са тези полета, щракнете върху елемента " Автоматичен" точнои изберете " Разширяване":

елемент " Автоматичен“ се разширява в следните полета:

И тук е нашето поле" Средно съдържание на калории"което дойде тук от точката" Докладвай" когато го завлякохме там. Просто нека премахнемпоставете отметка в квадратчето до това поле, за да премахнете изхода му.

Публикации по темата