Come configurare smartphone e PC. Portale informativo
  • casa
  • Windows Phone
  • Espressione nei parametri di skd 1s 8.2. Linguaggio di espressione del sistema di composizione dei dati (1Cv8)

Espressione nei parametri di skd 1s 8.2. Linguaggio di espressione del sistema di composizione dei dati (1Cv8)

In questa breve nota, voglio mostrare come è possibile riassumere valori a diversi livelli di raggruppamento in un report utilizzando un sistema di composizione dei dati.
Come mostrato nell'immagine, solo a livello di raggruppamento "Gruppi di articoli" viene calcolata la risorsa "Ordine", che mostra quanto ordinare per il gruppo di articoli corrente in base a determinate condizioni:


Questo valore può essere calcolato solo a questo livello di raggruppamento, perché, sopra o sotto, non ci sono valori da calcolare. Ad esempio, a livello di record dettagliati, non ci sono dati sul numero massimo in un gruppo, perché questi dati sono veri solo per il gruppo nel suo insieme e non per i suoi singoli componenti.

Di conseguenza, ora è necessario calcolare i totali per i raggruppamenti superiori ("Magazzini", "Tipi di magazzino") e il totale.
Per questo, viene utilizzata la funzione Calcola espressione con array raggruppato:
VALUTARE L'ESPRESSIONE DEL RAGGRUPPAMENTO DI ARRAY (EVALEXPRESSIONCON GROUPARRAY)
Sintassi:
ComputeExpressionGroupedArray()
Descrizione:
La funzione restituisce un array, ogni elemento del quale contiene il risultato della valutazione dell'espressione per il raggruppamento in base al campo specificato.
Il generatore di layout, durante la generazione di un layout, converte i parametri della funzione in termini di campi di layout del layout dati. Ad esempio, il campo Account verrà convertito in Dataset.Account.
Il generatore di layout, durante la generazione di espressioni per la visualizzazione di un campo personalizzato la cui espressione contiene solo la funzione CalculateArrayWithGroupArray(), genera l'espressione di output in modo tale che le informazioni di output siano ordinate. Ad esempio, per un campo personalizzato con un'espressione:

Calculate ExpressionWith GroupingArray("Amount(AmountTurnover)", "Controparty")
Il generatore di layout genererà la seguente espressione per l'output:

ConcatenateStrings(Array(Order(CalculateGroup ExpressionValueTable("View(Amount(DataSet.AmountTurnover)),Amount(DataSet.AmountTurnover)","DataSet.Counterparty"),"2")))

Opzioni:

Tipo: stringa. L'espressione da valutare. Una stringa, ad esempio Amount(AmountTurnover).

Tipo: stringa. Raggruppamento di espressioni di campo: raggruppamento di espressioni di campo separate da virgole. Ad esempio, appaltatore, parte.

Tipo: stringa. Un'espressione che descrive il filtro applicato ai record di dettaglio. Le funzioni aggregate non sono supportate in un'espressione. Ad esempio,DeletionMark = False.

Tipo: stringa. Un'espressione che descrive il filtro applicato ai record di gruppo. Ad esempio, Importo(Fatturato Importo) > &Parametro1.
Esempio:

Massimo(Calcola EspressioneCon RaggruppamentoArray("Amount(AmountTurnover)", "Controparte"));

Una descrizione dettagliata della sintassi della funzione è disponibile all'indirizzo http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
Ora per il calcolo, duplicheremo il campo "Ordine", con diversi valori di "Calcola per ...", utilizzando le seguenti espressioni, si noti che in ogni livello superiore, i valori dei livelli al di sotto della posizione vengono utilizzati i raggruppamenti.

Di conseguenza, otteniamo la seguente costruzione:

Contenuto
1 Linguaggio di espressione del sistema di composizione dei dati
2 letterali
2.1 Linea
2.2 Numero
2.3 Data
2.4 Booleano
2.5 Significato
3 Operazioni sui numeri
3.1 Unario -
3.2 Unario +
3.3 Binario -
3.4 Binario +
3.5 Opera d'arte
3.6 Divisione
3.7 Resto
4 Operazioni sulle stringhe
4.1 Concatenazione (binario +)
4.2 Simile
5 Operazioni di confronto
5.1 Uguale
5.2 Non uguale
5.3 Meno
5.4 Altro
5.5 Minore o uguale
5.6 Maggiore o uguale
5.7 Operazione B
5.8 L'operazione di verifica della presenza di un valore in un data set
5.9 Operazione di prova NULL
5.10 Operazione di prova NULL
6 Operazioni booleane
6.1 Operazione NON
6.2 Funzionamento E
6.3 Operazione OR
7 Funzioni aggregate
7.1 Importo
7.2 Quantità
7.3 Numero di diversi
7.4 Massimo
7.5 Minimo
7.6 Media
8 Altre operazioni
8.1 Operazione SELEZIONA
9 Regole per confrontare due valori
10 Lavorare con null
11 Priorità operative
12 Funzioni del linguaggio delle espressioni del sistema di composizione dei dati
12.1 Calcola
12.2 Livello
12.3 Numero di sequenza
12.4 NumberInOrderInGroup
12.5 Formato
12.6 Inizio periodo
12.7 Fine del periodo
12.8 Aggiungi Data
12.9 Differenza Data
12.10 Sottostringa
12.11 StringLength
12.12 Anno
12.13 Quarto
12.14 Mese
12.15 Giorno dell'anno
12.16 Giorno
12.17 Settimana
12.18 Giorno della settimana
12:19 ora
12.20 Minuto
12.21 secondi
12.22 Espresso
12.23 SìNull
12.24 Funzioni generali del modulo

Linguaggio di espressione del sistema di composizione dei dati

Il linguaggio delle espressioni del sistema di composizione dei dati è progettato per registrare le espressioni utilizzate in varie parti del sistema.

Le espressioni vengono utilizzate nei seguenti sottosistemi:

  • schema di composizione dei dati - per descrivere i campi calcolati, i campi totali, le espressioni di collegamento, ecc.;
  • impostazioni di composizione dei dati - per descrivere espressioni di campo personalizzate;
  • layout della composizione dei dati - per descrivere le espressioni di relazione del set di dati, descrivere i parametri di layout, ecc.

letterali

L'espressione può contenere letterali. Possibili letterali dei seguenti tipi:

  • Linea;
  • Numero;
  • L'appuntamento;
  • booleano.

Linea

Una stringa letterale è scritta nei caratteri """, ad esempio:

"Stringa letterale"


Se è necessario utilizzare il carattere """ all'interno della stringa letterale, è necessario utilizzare due di questi caratteri.

Per esempio:

“letterale ““tra virgolette“““

Numero

Il numero viene scritto senza spazi, in formato decimale. La parte frazionaria è separata dal carattere ".". Per esempio:

l'appuntamento

Un valore letterale di tipo data viene scritto utilizzando il valore letterale chiave DATETIME. Dopo questa parola chiave, tra parentesi, separate da virgole, vengono elencati l'anno, il mese, il giorno, le ore, i minuti, i secondi. Non è richiesta l'indicazione dell'ora.

Per esempio:
DATETIME(1975, 1, 06) - 6 gennaio 1975
DATETIME(2006, 12, 2, 23, 56, 57) - 2 dicembre 2006, 23:56:57, 23:56:57

booleano

I valori booleani possono essere scritti usando i letterali True (True), False (False).

Significato

Per specificare valori letterali di altri tipi (enumerazioni di sistema, dati predefiniti), viene utilizzata la parola chiave Value, seguita dal nome letterale tra parentesi.
Valore(Tipo conto. Attivo)

Operazioni sui numeri

unario -

Questa operazione è progettata per invertire il segno di un numero. Per esempio:
-Vendite.Quantità

Unario +

Questa operazione non esegue alcuna operazione sul numero. Per esempio:
+Vendite.Quantità

binario -

Questa operazione serve per calcolare la differenza di due numeri. Per esempio:
RemainsAndTurnovers.InitialRemains – RemainsAndTurnovers.EndRemaining
RestiE Fatturati.Resto Iniziale - 100
400 – 357

binario +

Questa operazione serve per calcolare la somma di due numeri. Per esempio:
Saldi E Fatturati Saldo Iniziale + Saldi E Fatturati Fatturato
RestiE Fatturati.InitialRemainder + 100
400 + 357

Opera

Questa operazione serve per calcolare il prodotto di due numeri. Per esempio:
Nomenclatura.Prezzo * 1.2
2 * 3.14

Divisione

Questa operazione ha lo scopo di ottenere il risultato della divisione di un operando per un altro. Per esempio:
Nomenclatura.Prezzo / 1.2
2 / 3.14

Resto della divisione

Questa operazione ha lo scopo di ottenere il resto della divisione di un operando da parte di un altro. Per esempio:
Nomenclatura.Prezzo % 1.2
2 % 3.14

Operazioni sulle stringhe

Concatenazione (binario +)

Questa operazione è progettata per concatenare due stringhe. Per esempio:
Nomenclatura.Articolo + “: ”+ Nomenclatura.Nome

Piace

Questa operazione controlla se una stringa corrisponde al modello dato.

Il valore dell'operatore LIKE è TRUE se il valore<Выражения>corrisponde al modello, altrimenti FALSE.

I seguenti personaggi in<Строке_шаблона>hanno un significato diverso da un semplice altro carattere nella stringa:

  • % - percentuale: una sequenza contenente zero o più caratteri arbitrari;
  • _ - underscore: un carattere arbitrario;
  • […] - uno o più caratteri tra parentesi quadre: un carattere, uno qualsiasi di quelli indicati tra parentesi quadre. L'enumerazione può contenere intervalli, ad esempio a-z, che indica qualsiasi carattere all'interno dell'intervallo, comprese le estremità dell'intervallo;
  • [^…] - tra parentesi quadre un'icona di negazione seguita da uno o più caratteri: qualsiasi carattere diverso da quelli elencati dopo l'icona di negazione;

Qualsiasi altro simbolo significa di per sé e non comporta alcun carico aggiuntivo. Se è necessario scrivere uno dei caratteri elencati come se stesso, deve essere preceduto da<Спецсимвол>Il specificato dopo la parola chiave ESCAPE.

Ad esempio, modello
“%ABC[abc]\_abc%” CARATTERE SPECIALE “\”

indica una sottostringa costituita da una sequenza di caratteri: lettere A; lettere B; lettere B; una cifra; una delle lettere a, b, c o d; carattere di sottolineatura; lettere a; lettere b; lettere dentro. Inoltre, questa sequenza può essere individuata a partire da una posizione arbitraria nella stringa.

Operazioni di confronto

È uguale a

Questa operazione è progettata per confrontare due operandi per l'uguaglianza. Per esempio:
Sales.Counterparty = Sales.NomenclatureMainSupplier

Non uguale

Questa operazione è progettata per confrontare due operandi per la disuguaglianza. Per esempio:
Sales.Controparty Sales.NomenclatureMainSupplier

Meno

Questa operazione ha lo scopo di verificare che il primo operando sia minore del secondo. Per esempio:
SalesCurrent.Amount

Di più

Questa operazione ha lo scopo di verificare che il primo operando sia maggiore del secondo. Per esempio:
SalesCurrent.Amount > SalesPast.Amount

Meno o uguale

Questa operazione ha lo scopo di verificare che il primo operando sia minore o uguale al secondo. Per esempio:
SalesCurrent.Amount

Più o uguale

Questa operazione ha lo scopo di verificare che il primo operando sia maggiore o uguale al secondo. Per esempio:
SalesCurrent.Amount >= SalesPast.Amount

Operazione B

Questa operazione verifica la presenza di un valore nell'elenco di valori passato. Il risultato dell'operazione è True se viene trovato il valore, altrimenti False. Per esempio:
Articolo B (&Articolo1, &Articolo2)

Operazione per verificare se esiste un valore in un set di dati

L'operazione verifica la presenza di un valore nel set di dati specificato. Il dataset di convalida deve contenere un campo. Per esempio:
Vendite Appaltatore agli appaltatori

NULL controlla l'operazione

Questa operazione restituisce True se il valore è NULL. Per esempio:
L'appaltatore di vendita è NULLO

L'operazione di controllo di un valore per non NULL

Questa operazione restituisce True se il valore non è NULL. Per esempio:
Sales.Appaltatore NON È NULLO

Operazioni booleane

Le operazioni logiche accettano come operandi espressioni di tipo Boolean.

Operazione NON

L'operatore NOT restituisce True se il suo operando è False e restituisce False se il suo operando è True. Per esempio:
NON Documento.Destinatario = Documento.Mittente

Operazione E

L'operazione AND restituisce True se entrambi gli operandi sono True e restituisce False se uno degli operandi è False. Per esempio:
Document.Destinatario = Documento.Mittente AND Document.Destinatario = &Appaltatore

O operazione

L'operazione OR restituisce True se uno degli operandi è True e False se entrambi gli operandi sono False. Per esempio:
Document.Destinatario = Documento.Mittente OPPURE Document.Destinatario = &Appaltatore

Funzioni aggregate

Le funzioni aggregate eseguono alcune azioni su un insieme di dati.

Somma

La funzione Sum aggregate calcola la somma dei valori delle espressioni passate come argomento per tutti i record di dettaglio. Per esempio:
Importo(Vendite.ImportoFatturato)

Quantità

La funzione Conteggio conta il numero di valori non nulli. Per esempio:
Quantità (vendite. Appaltatore)

Numero di diversi

Questa funzione conta il numero di valori distinti. Per esempio:
Quantità (Varie Vendite. Appaltatore)

Massimo

La funzione ottiene il valore massimo. Per esempio:
Massimo(Resti. Quantità)

Minimo

La funzione ottiene il valore minimo. Per esempio:
Minimo (Saldo. Quantità)

Media

La funzione ottiene la media per valori non nulli. Per esempio:
Media(Resti. Quantità)

Altre operazioni

Operazione SELEZIONA

L'operazione Seleziona è progettata per selezionare uno tra diversi valori in determinate condizioni. Per esempio:
Seleziona Quando Somma > 1000 Quindi Somma Altro 0 Fine

Regole per confrontare due valori

Se i tipi dei valori confrontati differiscono l'uno dall'altro, la relazione tra i valori viene determinata in base alla precedenza dei tipi:
NULL (il più basso);
booleano;
Numero;
L'appuntamento;
Linea;
Tipi di riferimento

Le relazioni tra diversi tipi di riferimento sono definite in base ai numeri di riferimento delle tabelle corrispondenti a un particolare tipo.

Se i tipi di dati corrispondono, i valori vengono confrontati secondo le seguenti regole:
tipo Boolean TRUE è maggiore di FALSE;
tipo Numero ha le consuete regole di confronto per i numeri;
per il tipo Data, le date precedenti sono inferiori a quelle successive;
per il tipo String - confronti di stringhe secondo le caratteristiche nazionali stabilite della banca dati;
i tipi di riferimento vengono confrontati in base ai loro valori (numero di record, ecc.).

Lavorare con NULL

Qualsiasi operazione in cui il valore di uno degli operandi è NULL produrrà un risultato NULL.

Ci sono eccezioni:
l'operazione AND restituirà NULL solo se nessuno degli operandi è False;
l'operazione OR restituirà NULL solo se nessuno degli operandi è True.

Priorità operative

Le operazioni hanno le seguenti priorità (la prima riga ha la priorità più bassa):
O;
E;
NON;
B, È NULLA, NON È NULLA;
=, <>, <=, <, >=, >;
Binario +, Binario – ;
*, /, %;
Unario +, Unario -.

Funzioni del linguaggio delle espressioni del sistema di composizione dei dati

Calcolare

La funzione Calcola è progettata per calcolare un'espressione nel contesto di un raggruppamento. La funzione ha i seguenti parametri:
Espressione. Digitare Stringa. Contiene un'espressione calcolata;
Raggruppamento. Digitare Stringa. Contiene il nome del raggruppamento nel cui contesto deve essere valutata l'espressione. Se viene utilizzata una stringa vuota come nome di raggruppamento, il calcolo verrà eseguito nel contesto del raggruppamento corrente. Se la stringa GrandTotal viene utilizzata come nome del raggruppamento, il calcolo verrà eseguito nel contesto del totale generale. In caso contrario, il calcolo verrà eseguito nel contesto del raggruppamento padre con quel nome. Per esempio:
Amount(Sales.AmountFatturato) / Calcola("Amount(Sales.AmountFatturato)", "TotaleTotale")

In questo esempio, il risultato sarà il rapporto tra l'importo nel campo "Sales.AmountTurnover" del record di raggruppamento e l'importo dello stesso campo nell'intero layout.

Livello

La funzione è progettata per ottenere il livello di registrazione corrente.

Esempio:
Livello()

Numero in ordine

Ottieni il numero di sequenza successivo.

Esempio:
Numero d'ordine()

NumberIn OrderInGrouping

Restituisce il numero di sequenza successivo nel raggruppamento corrente.

Esempio:
NumberInOrderInGroup()

Formato

Ottieni la stringa formattata del valore passato.

La stringa di formato viene impostata in base alla stringa di formato 1C:Enterprise.

Opzioni:
Significato;
Stringa di formato.

Esempio:
Formato(Fatture di spesa.AmountDoc, "VAN=2")

Inizio periodo

Opzioni:

    • Minuto;
    • Giorno;
    • Una settimana;
    • Mese;
    • Trimestre;
    • Decennio;
    • Metà anno.

Esempio:
PeriodoInizio(DataOra(2002, 10, 12, 10, 15, 34), "Mese")

Risultato:

01.10.2002 0:00:00

FinePeriodo

La funzione è progettata per estrarre una data specifica da una data determinata.

Opzioni:

  • L'appuntamento. Digitare Data. data data;
  • Tipo di periodo. Digitare Stringa. Contiene uno dei seguenti valori:
    • Minuto;
    • Giorno;
    • Una settimana;
    • Mese;
    • Trimestre;
    • Decennio;
    • Metà anno.

Esempio:
EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Settimana")

Risultato:

13.10.2002 23:59:59

Aggiungi data

La funzione è progettata per aggiungere un valore alla data.

Opzioni:

  • Tipo di ingrandimento. Digitare Stringa. Contiene uno dei seguenti valori:
    • Minuto;
    • Giorno;
    • Una settimana;
    • Mese;
    • Trimestre;
    • Decennio;
    • Metà anno.
Valore - di quanto vuoi aumentare la data. Digitare il numero. La parte frazionaria viene ignorata.

Esempio:
AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Mese", 1)

Risultato:

12.11.2002 10:15:34

Differenza Data

La funzione è progettata per ottenere la differenza tra due date.

Opzioni:

  • Espressione. Digitare Data. data originale;
  • Espressione. Digitare Data. Data sottratta;
  • Tipo di differenza. Digitare Stringa. Contiene uno dei seguenti valori:
    • Secondo;
    • Minuto;
    • Giorno;
    • Mese;
    • Trimestre;

Esempio:
DIFFERENZA DATA(DATETIME(2002, 10, 12, 10, 15, 34),
DATETIME(2002, 10, 14, 9, 18, 06), "GIORNO")

Risultato:

Sottostringa

Questa funzione è progettata per selezionare una sottostringa da una stringa.

Opzioni:

  • Linea. Digitare Stringa. La stringa da cui viene estratta la sottostringa;
  • Posizione. Digitare il numero. La posizione del carattere da cui inizia la sottostringa da estrarre dalla stringa;
  • Lunghezza. Digitare il numero. La lunghezza della sottostringa selezionata.

Esempio:
SUBSTRING(Account.Indirizzo, 1, 4)

Lunghezza della corda

La funzione è progettata per determinare la lunghezza di una stringa.

Parametro:
Linea. Digitare Stringa. La stringa di cui viene determinata la lunghezza.

Esempio:
Stringa(Account.Indirizzo)

Questa funzione è progettata per estrarre l'anno da un valore di tipo Data.

Parametro:
L'appuntamento. Digitare Data. La data entro la quale viene determinato l'anno.

ANNO(Inc.Date)

Trimestre

Questa funzione è progettata per estrarre il numero del trimestre dal valore del tipo Data. Il numero di blocco normalmente varia da 1 a 4.

Parametro
L'appuntamento. Digitare Data. La data entro la quale viene determinato il trimestre

TRIMESTRE(Data.Fattura)

Mese

Questa funzione è progettata per estrarre il numero del mese da un valore di tipo Data. Il numero del mese è normalmente compreso tra 1 e 12.
L'appuntamento. Digitare Data. La data entro la quale viene determinato il mese.
MESE(Data.Fattura)

Giorno dell'anno

Questa funzione è progettata per ottenere il giorno dell'anno da un valore di tipo Data. Il giorno dell'anno varia normalmente da 1 a 365(366).
L'appuntamento. Digitare Data. La data entro la quale viene determinato il giorno dell'anno.
GIORNO DELL'ANNO(Exp.Inc.Date)

Giorno

Questa funzione è progettata per ottenere il giorno del mese da un valore di tipo Date. Il giorno del mese normalmente va da 1 a 31.
L'appuntamento. Digitare Data. La data entro la quale vengono determinati i giorni del mese.
GIORNO (Data Inc. Scad)

Una settimana

Questa funzione è progettata per ottenere il numero della settimana dell'anno da un valore di tipo Data. Le settimane dell'anno sono numerate a partire da 1.
L'appuntamento. Digitare Data. La data entro la quale vengono determinati i numeri delle settimane.
SETTIMANA (Data Inc. Scad)

Giorno della settimana

Questa funzione è progettata per ottenere il giorno della settimana da un valore di tipo Data. Il giorno della settimana varia normalmente da 1 (lunedì) a 7 (domenica).
L'appuntamento. Digitare Data. La data entro la quale viene determinato il giorno della settimana.
GIORNO DELLA SETTIMANA(Exp.Inc.Date)

Questa funzione è progettata per ottenere l'ora del giorno da un valore di tipo Data. L'ora del giorno varia da 0 a 23.
L'appuntamento. Digitare Data. La data entro la quale viene determinata l'ora del giorno.
ORA (Data Inc. Scad.)

Minuto

Questa funzione è progettata per ottenere il minuto dell'ora da un valore di tipo Data. I minuti dell'ora vanno da 0 a 59.
L'appuntamento. Digitare Data. La data entro la quale viene determinato il minuto dell'ora.
MINUTO (Data Inc. Scad)

Secondo

Questa funzione è progettata per ottenere i secondi di un minuto da un valore di tipo Data. Il secondo di un minuto va da 0 a 59.
L'appuntamento. Digitare Data. La data entro la quale vengono determinati i secondi del minuto.
SEC(Data Inc. Scad.)

esprimere

Questa funzione è progettata per estrarre un tipo da un'espressione che può contenere un tipo composto. Se l'espressione contiene un tipo diverso dal tipo richiesto, verrà restituito NULL.

Opzioni:
L'espressione da convertire;
Indicazione del tipo. Digitare Stringa. Contiene una stringa di tipo. Ad esempio, "Numero", "Stringa", ecc. Oltre ai tipi primitivi, questa stringa può contenere il nome di una tabella. In questo caso, si tenterà di esprimere un riferimento alla tabella specificata.

Esempio:
Espresso(Data.Attributo1, "Numero(10,3)")

Nullo

Questa funzione restituisce il valore del secondo parametro se il valore del primo parametro è NULL.

In caso contrario, verrà restituito il valore del primo parametro.

Esempio:
IsNULL(Amount(Sales.AmountFatturato), 0)

Funzioni comuni del modulo

L'espressione del motore di composizione dei dati può contenere chiamate di funzione a moduli di configurazione comuni globali. Non è richiesta alcuna sintassi aggiuntiva per chiamare tali funzioni.

Esempio:
Nome abbreviato(Documents.Link, Documents.Date, Documents.Number)

In questo esempio, la funzione "ShortName" verrà richiamata dal modulo di configurazione generale.

Si noti che l'uso delle funzioni del modulo condiviso è consentito solo quando è specificata l'opzione del processore di composizione dei dati corrispondente.

Inoltre, le funzioni del modulo comuni non possono essere utilizzate nelle espressioni di campo personalizzate.

[è necessario registrarsi per visualizzare il link]

Linguaggio di espressione del sistema di composizione dei dati

Il linguaggio delle espressioni del sistema di composizione dei dati è progettato per registrare le espressioni utilizzate in varie parti del sistema.

Le espressioni vengono utilizzate nei seguenti sottosistemi:

  • schema di composizione dei dati - per descrivere i campi calcolati, i campi totali, le espressioni di collegamento, ecc.;
  • impostazioni di composizione dei dati - per descrivere espressioni di campo personalizzate;
  • layout della composizione dei dati - per descrivere le espressioni di relazione del set di dati, descrivere i parametri di layout, ecc.

letterali

L'espressione può contenere letterali. Possibili letterali dei seguenti tipi:

  • Linea;
  • Numero;
  • L'appuntamento;
  • booleano.

Linea

Una stringa letterale è scritta nei caratteri """, ad esempio:

"Stringa letterale"

Se è necessario utilizzare il carattere """ all'interno della stringa letterale, è necessario utilizzare due di questi caratteri.

Per esempio:

“letterale ““tra virgolette“““

Numero

Il numero viene scritto senza spazi, in formato decimale. La parte frazionaria è separata dal carattere ".". Per esempio:

10.5 200

l'appuntamento

Un valore letterale di tipo data viene scritto utilizzando il valore letterale chiave DATETIME. Dopo questa parola chiave, tra parentesi, separate da virgole, vengono elencati l'anno, il mese, il giorno, le ore, i minuti, i secondi. Non è richiesta l'indicazione dell'ora.

Per esempio:

DATETIME(1975, 1, 06) - 6 gennaio 1975 DATETIME(2006, 12, 2, 23, 56, 57) - 2 dicembre 2006, 23:56:57 secondi, 23:56:57 secondi

booleano

I valori booleani possono essere scritti usando i letterali True (True), False (False).

Significato

Per specificare valori letterali di altri tipi (enumerazioni di sistema, dati predefiniti), viene utilizzata la parola chiave Value, seguita dal nome letterale tra parentesi.

Valore(Tipo conto. Attivo)

Operazioni sui numeri

unario -

Questa operazione è progettata per invertire il segno di un numero. Per esempio:

Vendite.Quantità

Unario +

Questa operazione non esegue alcuna operazione sul numero. Per esempio:

Vendite.Quantità

binario -

Questa operazione serve per calcolare la differenza di due numeri. Per esempio:

SaldiEFatturati.Saldo Iniziale - SaldiEFatturato.EndBalance SaldiEFatturato.Saldo Iniziale - 100 400 - 357

binario +

Questa operazione serve per calcolare la somma di due numeri. Per esempio:

SaldiEFatturato.Saldo Iniziale + SaldiEFatturato.Fatturato SaldiEFatturato.Saldo Iniziale + 100 400 + 357

Opera

Questa operazione serve per calcolare il prodotto di due numeri. Per esempio:

Nomenclatura Prezzo * 1.2 2 * 3.14

Divisione

Questa operazione ha lo scopo di ottenere il risultato della divisione di un operando per un altro. Per esempio:

Nomenclatura Prezzo / 1.2 2 / 3.14

Resto della divisione

Questa operazione ha lo scopo di ottenere il resto della divisione di un operando da parte di un altro. Per esempio:

Nomenclatura Prezzo % 1.2 2 % 3.14

Operazioni sulle stringhe

Concatenazione (binario +)

Questa operazione è progettata per concatenare due stringhe. Per esempio:

Nomenclatura.Articolo + “: ”+ Nomenclatura.Nome

Piace

Questa operazione controlla se una stringa corrisponde al modello dato.

Il valore dell'operatore LIKE è TRUE se il valore<Выражения>corrisponde al modello, altrimenti FALSE.

I seguenti personaggi in<Строке_шаблона>hanno un significato diverso da un semplice altro carattere nella stringa:

  • % - percentuale: una sequenza contenente zero o più caratteri arbitrari;
  • _ - underscore: un carattere arbitrario;
  • […] - uno o più caratteri tra parentesi quadre: un carattere, uno qualsiasi di quelli indicati tra parentesi quadre. L'enumerazione può contenere intervalli, ad esempio a-z, che indica qualsiasi carattere all'interno dell'intervallo, comprese le estremità dell'intervallo;
  • [^…] - tra parentesi quadre un'icona di negazione seguita da uno o più caratteri: qualsiasi carattere diverso da quelli elencati dopo l'icona di negazione;

Qualsiasi altro simbolo significa di per sé e non comporta alcun carico aggiuntivo. Se è necessario scrivere uno dei caratteri elencati come se stesso, deve essere preceduto da<Спецсимвол>Il specificato dopo la parola chiave ESCAPE.

Ad esempio, modello

“%ABC[abc]\_abc%” CARATTERE SPECIALE “\”

indica una sottostringa costituita da una sequenza di caratteri: lettere A; lettere B; lettere B; una cifra; una delle lettere a, b, c o d; carattere di sottolineatura; lettere a; lettere b; lettere dentro. Inoltre, questa sequenza può essere individuata a partire da una posizione arbitraria nella stringa.

Operazioni di confronto

È uguale a

Questa operazione è progettata per confrontare due operandi per l'uguaglianza. Per esempio:

Sales.Counterparty = Sales.NomenclatureMainSupplier

Non uguale

Questa operazione è progettata per confrontare due operandi per la disuguaglianza. Per esempio:

Vendite.Appaltatore<>Nomenclatura.VenditeMainSupplier

Meno

Questa operazione ha lo scopo di verificare che il primo operando sia minore del secondo. Per esempio:

SalesCurrent.Amount< ПродажиПрошлые.Сумма

Di più

Questa operazione ha lo scopo di verificare che il primo operando sia maggiore del secondo. Per esempio:

SalesCurrent.Amount > SalesPast.Amount

Meno o uguale

Questa operazione ha lo scopo di verificare che il primo operando sia minore o uguale al secondo. Per esempio:

SalesCurrent.Amount<= ПродажиПрошлые.Сумма

Più o uguale

Questa operazione ha lo scopo di verificare che il primo operando sia maggiore o uguale al secondo. Per esempio:

SalesCurrent.Amount >= SalesPast.Amount

Operazione B

Questa operazione verifica la presenza di un valore nell'elenco di valori passato. Il risultato dell'operazione è True se viene trovato il valore, altrimenti False. Per esempio:

Articolo B (&Articolo1, &Articolo2)

Operazione per verificare se esiste un valore in un set di dati

L'operazione verifica la presenza di un valore nel set di dati specificato. Il dataset di convalida deve contenere un campo. Per esempio:

Vendite Appaltatore agli appaltatori

NULL controlla l'operazione

Questa operazione restituisce True se il valore è NULL. Per esempio:

L'appaltatore di vendita è NULLO

L'operazione di controllo di un valore per non NULL

Questa operazione restituisce True se il valore non è NULL. Per esempio:

Sales.Appaltatore NON È NULLO

Operazioni booleane

Le operazioni logiche accettano come operandi espressioni di tipo Boolean.

Operazione NON

L'operatore NOT restituisce True se il suo operando è False e restituisce False se il suo operando è True. Per esempio:

NON Documento.Destinatario = Documento.Mittente

Operazione E

L'operazione AND restituisce True se entrambi gli operandi sono True e restituisce False se uno degli operandi è False. Per esempio:

Document.Destinatario = Documento.Mittente AND Document.Destinatario = &Appaltatore

O operazione

L'operazione OR restituisce True se uno degli operandi è True e False se entrambi gli operandi sono False. Per esempio:

Document.Destinatario = Documento.Mittente OPPURE Document.Destinatario = &Appaltatore

Funzioni aggregate

Le funzioni aggregate eseguono alcune azioni su un insieme di dati.

Somma

La funzione Sum aggregate calcola la somma dei valori delle espressioni passate come argomento per tutti i record di dettaglio. Per esempio:

Importo(Vendite.ImportoFatturato)

Quantità

La funzione Conteggio conta il numero di valori non nulli. Per esempio:

Quantità (vendite. Appaltatore)

Numero di diversi

Questa funzione conta il numero di valori distinti. Per esempio:

Quantità (Varie Vendite. Appaltatore)

Massimo

La funzione ottiene il valore massimo. Per esempio:

Massimo(Resti. Quantità)

Minimo

La funzione ottiene il valore minimo. Per esempio:

Minimo (Saldo. Quantità)

Media

La funzione ottiene la media per valori non nulli. Per esempio:

Media(Resti. Quantità)

Altre operazioni

Operazione SELEZIONA

L'operazione Seleziona è progettata per selezionare uno tra diversi valori in determinate condizioni. Per esempio:

Seleziona Quando Somma > 1000 Quindi Somma Altro 0 Fine

Regole per confrontare due valori

Se i tipi dei valori confrontati differiscono l'uno dall'altro, la relazione tra i valori viene determinata in base alla precedenza dei tipi:

  • NULL (il più basso);
  • booleano;
  • Numero;
  • L'appuntamento;
  • Linea;
  • Tipi di riferimento

Le relazioni tra diversi tipi di riferimento sono definite in base ai numeri di riferimento delle tabelle corrispondenti a un particolare tipo.

Se i tipi di dati corrispondono, i valori vengono confrontati secondo le seguenti regole:

  • tipo Boolean TRUE è maggiore di FALSE;
  • tipo Numero ha le consuete regole di confronto per i numeri;
  • per il tipo Data, le date precedenti sono inferiori a quelle successive;
  • per il tipo String - confronti di stringhe secondo le caratteristiche nazionali stabilite della banca dati;
  • i tipi di riferimento vengono confrontati in base ai loro valori (numero di record, ecc.).

Lavorare con NULL

Qualsiasi operazione in cui il valore di uno degli operandi è NULL produrrà un risultato NULL.

Ci sono eccezioni:

  • l'operazione AND restituirà NULL solo se nessuno degli operandi è False;
  • l'operazione OR restituirà NULL solo se nessuno degli operandi è True.

Priorità operative

Le operazioni hanno le seguenti priorità (la prima riga ha la priorità più bassa):

  • B, È NULLA, NON È NULLA;
  • =, <>, <=, <, >=, >;
  • Binario +, Binario – ;
  • *, /, %;
  • Unario +, Unario -.

Funzioni del linguaggio delle espressioni del sistema di composizione dei dati

Calcolare

La funzione Calcola è progettata per calcolare un'espressione nel contesto di un raggruppamento. La funzione ha i seguenti parametri:

  • Espressione. Digitare Stringa. Contiene un'espressione calcolata;
  • Raggruppamento. Digitare Stringa. Contiene il nome del raggruppamento nel cui contesto deve essere valutata l'espressione. Se viene utilizzata una stringa vuota come nome di raggruppamento, il calcolo verrà eseguito nel contesto del raggruppamento corrente. Se la stringa GrandTotal viene utilizzata come nome del raggruppamento, il calcolo verrà eseguito nel contesto del totale generale. In caso contrario, il calcolo verrà eseguito nel contesto del raggruppamento padre con quel nome. Per esempio:
Amount(Sales.AmountFatturato) / Calcola("Amount(Sales.AmountFatturato)", "TotaleTotale")

In questo esempio, il risultato sarà il rapporto tra l'importo nel campo "Sales.AmountTurnover" del record di raggruppamento e l'importo dello stesso campo nell'intero layout.

Livello

La funzione è progettata per ottenere il livello di registrazione corrente.

Livello()

Numero in ordine

Ottieni il numero di sequenza successivo.

Numero d'ordine()

NumberIn OrderInGrouping

Restituisce il numero di sequenza successivo nel raggruppamento corrente.

NumberInOrderInGroup()

Formato

Ottieni la stringa formattata del valore passato.

La stringa di formato viene impostata in base alla stringa di formato 1C:Enterprise.

Opzioni:

  • Significato;
  • Stringa di formato.

Formato(Fatture di spesa.AmountDoc, "VAN=2")

Inizio periodo

Opzioni:

    • Minuto;
    • Giorno;
    • Una settimana;
    • Mese;
    • Trimestre;
    • Decennio;
    • Metà anno.

PeriodoInizio(DataOra(2002, 10, 12, 10, 15, 34), "Mese")

Risultato:

01.10.2002 0:00:00

FinePeriodo

La funzione è progettata per estrarre una data specifica da una data determinata.

Opzioni:

  • L'appuntamento. Digitare Data. data data;
  • Tipo di periodo. Digitare Stringa. Contiene uno dei seguenti valori:
    • Minuto;
    • Giorno;
    • Una settimana;
    • Mese;
    • Trimestre;
    • Decennio;
    • Metà anno.

EndPeriod(DateTime(2002, 10, 12, 10, 15, 34), "Settimana")

Risultato:

13.10.2002 23:59:59

Aggiungi data

La funzione è progettata per aggiungere un valore alla data.

Opzioni:

  • Tipo di ingrandimento. Digitare Stringa. Contiene uno dei seguenti valori:
    • Minuto;
    • Giorno;
    • Una settimana;
    • Mese;
    • Trimestre;
    • Decennio;
    • Metà anno.
  • Valore - di quanto vuoi aumentare la data. Digitare il numero. La parte frazionaria viene ignorata.

AddToDate(DateTime(2002, 10, 12, 10, 15, 34), "Mese", 1)

Risultato:

12.11.2002 10:15:34

Differenza Data

La funzione è progettata per ottenere la differenza tra due date.

Opzioni:

  • Espressione. Digitare Data. data originale;
  • Espressione. Digitare Data. Data sottratta;
  • Tipo di differenza. Digitare Stringa. Contiene uno dei seguenti valori:
    • Secondo;
    • Minuto;
    • Giorno;
    • Mese;
    • Trimestre;

DATEDIFF(DATETIME(2002, 10, 12, 10, 15, 34), DATETIME(2002, 10, 14, 9, 18, 06), "DAY")

Risultato:

Sottostringa

Questa funzione è progettata per selezionare una sottostringa da una stringa.

Opzioni:

  • Linea. Digitare Stringa. La stringa da cui viene estratta la sottostringa;
  • Posizione. Digitare il numero. La posizione del carattere da cui inizia la sottostringa da estrarre dalla stringa;
  • Lunghezza. Digitare il numero. La lunghezza della sottostringa selezionata.

SUBSTRING(Account.Indirizzo, 1, 4)

Lunghezza della corda

La funzione è progettata per determinare la lunghezza di una stringa.

Parametro:

  • Linea. Digitare Stringa. La stringa di cui viene determinata la lunghezza.

Stringa(Account.Indirizzo)

Anno

Questa funzione è progettata per estrarre l'anno da un valore di tipo Data.

Parametro:

  • L'appuntamento. Digitare Data. La data entro la quale viene determinato l'anno.

ANNO(Inc.Date)

Trimestre

Questa funzione è progettata per estrarre il numero del trimestre dal valore del tipo Data. Il numero di blocco normalmente varia da 1 a 4.

Parametro

  • L'appuntamento. Digitare Data. La data entro la quale viene determinato il trimestre
TRIMESTRE(Data.Fattura)

Mese

Questa funzione è progettata per estrarre il numero del mese da un valore di tipo Data. Il numero del mese è normalmente compreso tra 1 e 12.

  • L'appuntamento. Digitare Data. La data entro la quale viene determinato il mese.
MESE(Data.Fattura)

Giorno dell'anno

Questa funzione è progettata per ottenere il giorno dell'anno da un valore di tipo Data. Il giorno dell'anno varia normalmente da 1 a 365(366).

  • L'appuntamento. Digitare Data. La data entro la quale viene determinato il giorno dell'anno.
GIORNO DELL'ANNO(Exp.Inc.Date)

Giorno

Questa funzione è progettata per ottenere il giorno del mese da un valore di tipo Date. Il giorno del mese normalmente va da 1 a 31.

  • L'appuntamento. Digitare Data. La data entro la quale vengono determinati i giorni del mese.
GIORNO (Data Inc. Scad)

Una settimana

Questa funzione è progettata per ottenere il numero della settimana dell'anno da un valore di tipo Data. Le settimane dell'anno sono numerate a partire da 1.

  • L'appuntamento. Digitare Data. La data entro la quale vengono determinati i numeri delle settimane.
SETTIMANA (Data Inc. Scad)

Giorno della settimana

Questa funzione è progettata per ottenere il giorno della settimana da un valore di tipo Data. Il giorno della settimana varia normalmente da 1 (lunedì) a 7 (domenica).

  • L'appuntamento. Digitare Data. La data entro la quale viene determinato il giorno della settimana.
GIORNO DELLA SETTIMANA(Exp.Inc.Date)

Ora

Questa funzione è progettata per ottenere l'ora del giorno da un valore di tipo Data. L'ora del giorno varia da 0 a 23.

  • L'appuntamento. Digitare Data. La data entro la quale viene determinata l'ora del giorno.
ORA (Data Inc. Scad.)

Minuto

Questa funzione è progettata per ottenere il minuto dell'ora da un valore di tipo Data. I minuti dell'ora vanno da 0 a 59.

  • L'appuntamento. Digitare Data. La data entro la quale viene determinato il minuto dell'ora.
MINUTO (Data Inc. Scad)

Secondo

Questa funzione è progettata per ottenere i secondi di un minuto da un valore di tipo Data. Il secondo di un minuto va da 0 a 59.

  • L'appuntamento. Digitare Data. La data entro la quale vengono determinati i secondi del minuto.
SEC(Data Inc. Scad.)

esprimere

Questa funzione è progettata per estrarre un tipo da un'espressione che può contenere un tipo composto. Se l'espressione contiene un tipo diverso dal tipo richiesto, verrà restituito NULL.

Opzioni:

  • L'espressione da convertire;
  • Indicazione del tipo. Digitare Stringa. Contiene una stringa di tipo. Ad esempio, "Numero", "Stringa", ecc. Oltre ai tipi primitivi, questa stringa può contenere il nome di una tabella. In questo caso, si tenterà di esprimere un riferimento alla tabella specificata.

Espresso(Data.Attributo1, "Numero(10,3)")

Nullo

Questa funzione restituisce il valore del secondo parametro se il valore del primo parametro è NULL.

In caso contrario, verrà restituito il valore del primo parametro.

IsNULL(Amount(Sales.AmountFatturato), 0)

Funzioni comuni del modulo

L'espressione del motore di composizione dei dati può contenere chiamate di funzione a moduli di configurazione comuni globali. Non è richiesta alcuna sintassi aggiuntiva per chiamare tali funzioni.

In questo esempio, la funzione "ShortName" verrà richiamata dal modulo di configurazione generale.

Si noti che l'uso delle funzioni del modulo condiviso è consentito solo quando è specificata l'opzione del processore di composizione dei dati corrispondente.

Inoltre, le funzioni del modulo comuni non possono essere utilizzate nelle espressioni di campo personalizzate.

Una delle aree più importanti del software aziendale è la creazione di report. Quanto è facile personalizzare un report esistente alle mutevoli esigenze dell'impresa (e della normativa) o farne uno nuovo può dipendere (e non in senso figurato!) dal destino dell'impresa, che si tratti di un report per l'Agenzia delle Entrate o un diagramma della dipendenza della domanda di beni dalla stagione e da altri fattori. Un sistema di reporting potente e flessibile che semplifica l'estrazione dei dati corretti dal sistema, la presentazione in una forma comprensibile, consentendo all'utente finale di riconfigurare un report standard per vedere i dati sotto una nuova luce: questo è l'ideale che ogni sistema aziendale dovrebbe tendere.

Nella piattaforma 1C:Enterprise, un meccanismo chiamato Data Composition System (abbreviato in ACS) è responsabile della generazione dei report. In questo articolo cercheremo di dare una breve descrizione dell'idea e dell'architettura del meccanismo ACS e delle sue capacità.


L'ACS è un meccanismo basato sulla descrizione dichiarativa delle segnalazioni. ACS è progettato per creare report e visualizzare informazioni con una struttura complessa. A proposito, oltre allo sviluppo di report, il meccanismo ACS viene utilizzato anche in 1C:Enterprise in un elenco dinamico, uno strumento per visualizzare le informazioni sugli elenchi con funzionalità avanzate (visualizzazione di elenchi semplici e gerarchici, formattazione condizionale delle righe, raggruppamento, ecc.) .

Un po' di storia

Nella primissima versione della piattaforma 1C:Enterprise 8, versione 8.0, i rapporti sono stati effettuati come segue:
  1. Una o più query sono state scritte nel linguaggio di query 1C (linguaggio simile a SQL, maggiori informazioni di seguito).
  2. È stato scritto un codice che trasferiva i risultati delle query eseguite su un foglio di calcolo o su un grafico. Il codice potrebbe anche eseguire un lavoro che non può essere eseguito in una query, ad esempio calcola i valori utilizzando il linguaggio 1C integrato.
L'approccio è semplice, ma non il più conveniente: ci sono un minimo di impostazioni visive, tutto deve essere programmato mano a mano. E una delle carte vincenti in quel momento della piattaforma 1C:Enterprise 8 completamente nuova era la riduzione al minimo della quantità di codice nella soluzione applicativa che doveva essere scritta manualmente, in particolare a causa del design visivo. Sarebbe logico seguire lo stesso percorso nel meccanismo di segnalazione. Ciò è stato possibile sviluppando un nuovo meccanismo: il Data Composition System.

Una delle idee alla base dell'ACS è stata la flessibilità e la personalizzazione dei report, disponibile sia per lo sviluppatore che per l'utente finale. Idealmente, vorremmo fornire all'utente finale l'accesso allo stesso set di strumenti di progettazione dei report dello sviluppatore. Sarebbe logico mettere a disposizione di tutti un unico insieme di strumenti. Ebbene, poiché gli strumenti implicano la partecipazione dell'utente finale, significa che l'uso della programmazione in essi dovrebbe essere rimosso al minimo (meglio di tutti, completamente eliminato) e le impostazioni visive dovrebbero essere utilizzate al massimo.

Formulazione del problema

Il compito prima del team di sviluppo era questo: realizzare un sistema di reporting basato non su un algoritmico (cioè attraverso la scrittura di codice), ma su un approccio dichiarativo alla creazione di report. E crediamo che il problema sia stato risolto con successo. Nella nostra esperienza, circa l'80% della reportistica richiesta può essere implementata utilizzando ACS senza una singola riga di codice (ad eccezione della scrittura di formule per i campi calcolati), per la maggior parte - tramite impostazioni visive.
Lo sviluppo della prima versione dell'ACS ha richiesto circa 5 anni uomo.

Due lingue

Nella creazione dei report sono coinvolte due lingue. Uno è il linguaggio di query utilizzato per recuperare i dati. Il secondo è il linguaggio delle espressioni di composizione dei dati, progettato per scrivere espressioni utilizzate in varie parti del sistema, ad esempio, nelle impostazioni di composizione dei dati, per descrivere espressioni di campo personalizzate.

Linguaggio di interrogazione

Il linguaggio di query è basato su SQL ed è facilmente padroneggiato da chi conosce SQL. Esempio di richiesta:

È facile vedere analoghi delle sezioni di query SQL standard: SELECT, FROM, GROUP BY, ORDER BY.

Allo stesso tempo, il linguaggio di interrogazione contiene un numero significativo di estensioni volte a riflettere le specificità dei compiti finanziari ed economici e alla massima riduzione degli sforzi per sviluppare soluzioni applicate:

  • Campi di riferimento tramite un punto. Se i campi di una tabella hanno un tipo di riferimento (memorizzano collegamenti a oggetti di un'altra tabella), lo sviluppatore può farvi riferimento nel testo della query tramite ".", mentre il numero di livelli di annidamento di tali collegamenti non è limitato dal sistema (ad esempio, Customer Order.Agreement.Organization. Telephone).
  • Formazione multidimensionale e multilivello dei risultati. I totali e i subtotali vengono formati tenendo conto del raggruppamento e della gerarchia, i livelli possono essere aggirati in un ordine arbitrario con la somma dei subtotali, è garantita la corretta costruzione dei totali in base alle dimensioni temporali.
  • Supporto per tabelle virtuali. Le tabelle virtuali fornite dal sistema consentono di ottenere dati quasi pronti per la maggior parte delle attività applicative senza la necessità di scrivere query complesse. Pertanto, una tabella virtuale può fornire dati sul saldo delle merci nel contesto di periodi in un determinato momento. Allo stesso tempo, le tabelle virtuali sfruttano al massimo le informazioni memorizzate, ad esempio i totali calcolati in precedenza, ecc.
  • Tabelle temporanee. Il linguaggio di query consente di utilizzare tabelle temporanee nelle query. Con il loro aiuto, puoi migliorare le prestazioni delle query, in alcuni casi ridurre il numero di blocchi e rendere più facile la lettura del testo della query.
  • richieste batch. Per un lavoro più conveniente con le tabelle temporanee, il linguaggio di query supporta il lavoro con le query batch, quindi la creazione di una tabella temporanea e il suo utilizzo vengono inseriti in un'unica query. Una richiesta batch è una sequenza di richieste separate da un punto e virgola (";"). Le richieste nel batch vengono eseguite una dopo l'altra. Il risultato dell'esecuzione di una query batch, a seconda del metodo utilizzato, sarà il risultato restituito dall'ultima query del batch o una matrice dei risultati di tutte le richieste batch nell'ordine seguito dalle richieste nel batch.
  • Ottenere viste dei campi di riferimento. Ogni tabella oggetto (in cui è memorizzata una directory o un documento) ha un campo virtuale - "Rappresentazione". Questo campo contiene una rappresentazione testuale dell'oggetto e facilita il lavoro del giornalista. Quindi, per un documento, questo campo contiene tutte le informazioni chiave: il nome del tipo di documento, il suo numero e la data (ad esempio, "Sale 000000003 dal 07/06/2017 17:49:14"), salvando lo sviluppatore da scrivendo un campo calcolato.
  • e così via.
Il motore di query modifica automaticamente la query, tenendo conto dei ruoli dell'utente per conto del quale viene eseguita la query (cioè, l'utente vedrà solo i dati che ha il diritto di vedere) e le opzioni funzionali (cioè, in conformità con quello configurato nella funzionalità della soluzione applicativa).

Esistono anche speciali estensioni del linguaggio di query per SKD. L'espansione avviene mediante apposite istruzioni sintattiche racchiuse tra parentesi graffe e poste direttamente nel testo della richiesta. Con l'aiuto delle estensioni, lo sviluppatore determina quali operazioni l'utente finale sarà in grado di eseguire personalizzando il report.

Per esempio:

  • SCEGLIERE. Questa frase descrive i campi che l'utente potrà selezionare per l'output. Dopo questa parola chiave, gli alias dei campi dell'elenco di selezione della query principale, che saranno disponibili per la personalizzazione, sono elencati separati da virgole. Esempio: (SELEZIONARE Nomenclatura, Magazzino)
  • DOVE. Descrive i campi su cui l'utente può applicare la selezione. Questa proposta utilizza i campi della tabella. L'uso di alias di campo dell'elenco di selezione non è consentito. Ogni parte dell'unione può contenere il proprio elemento WHERE. Esempi: (WHERE Nomenclatura.*, Warehouse ), (WHERE Document.Date >= &StartDate, Document.Date<= &ДатаКонца}
  • e così via.
Un esempio di utilizzo delle estensioni:

Linguaggio di espressione della composizione dei dati

Il linguaggio delle espressioni di composizione dei dati è progettato per scrivere espressioni utilizzate, in particolare, per descrivere espressioni di campo personalizzate. ACS consente di definire campi personalizzati in un report utilizzando le proprie espressioni o insiemi di opzioni con condizioni per la loro selezione (analoga a CASE in SQL). I campi personalizzati sono analoghi ai campi calcolati. Possono essere impostati sia nel configuratore che in modalità 1C:Enterprise, ma le funzioni dei moduli comuni non possono essere utilizzate nelle espressioni di campo personalizzate. Pertanto, i campi personalizzati sono più per l'utente che per lo sviluppatore.

Esempio:

Il processo di creazione di un rapporto sull'ACS

Quando si crea un report, è necessario creare un layout che definisca come verranno visualizzati i dati nel report. È possibile creare un layout basato su uno schema di composizione dei dati. Lo schema di composizione dei dati descrive l'essenza dei dati forniti al report (da dove ottenere i dati e come è possibile controllarne la composizione). Lo schema di composizione dei dati è la base su cui è possibile generare tutti i tipi di report. Lo schema di composizione dei dati può contenere:
  • richiedere un testo con le istruzioni del sistema di composizione dei dati;
  • descrizione di diversi set di dati;
  • una descrizione dettagliata dei campi disponibili;
  • descrizione delle relazioni tra diversi set di dati;
  • descrizione dei parametri di acquisizione dati;
  • descrizione dei layout e dei raggruppamenti dei campi;
  • e così via.

Ad esempio, puoi aggiungere una query allo schema di composizione dei dati come set di dati e chiamare il costruttore di query, che ti consente di comporre graficamente una query di complessità arbitraria:

Il risultato dell'esecuzione del generatore di query sarà il testo della query (nel linguaggio di query 1C:Enterprise). Questo testo può essere modificato manualmente se necessario:

Possono essere presenti diversi set di dati in uno schema di composizione dei dati, i set di dati possono essere collegati in un layout in modo arbitrario, è possibile aggiungere campi calcolati, impostare parametri di report, ecc. Vale la pena menzionare una caratteristica interessante del meccanismo di query in 1C:Enterprise. Le query vengono infine tradotte in un dialetto SQL specifico del DBMS con cui l'applicazione sta lavorando direttamente. In generale, cerchiamo di utilizzare al massimo le capacità dei server DBMS (siamo limitati dal fatto che utilizziamo solo quelle capacità che sono contemporaneamente disponibili in tutti i DBMS supportati dalla piattaforma 1C:Enterprise - MS SQL, Oracle, IBM DB2 , PostgreSQL). Pertanto, a livello di query nei campi calcolati, possiamo utilizzare solo quelle funzioni che vengono tradotte in SQL.

Ma a livello di schema di composizione dei dati, possiamo già aggiungere campi personalizzati e utilizzare le funzioni in essi contenuti nel linguaggio di sviluppo 1C integrato (inclusi quelli scritti da noi), che espande notevolmente le capacità dei report. Tecnicamente, sembra così: tutto ciò che può essere tradotto in SQL viene tradotto in SQL, la query viene eseguita a livello di DBMS, i risultati della query vengono inseriti nella memoria del server delle applicazioni 1C e l'ACS calcola i valori di campi calcolati per ogni record, le cui formule sono scritte in linguaggio 1C.


Aggiunta di campi personalizzati

Puoi aggiungere un numero qualsiasi di tabelle e grafici al rapporto:


Progettista di report


Segnala in fase di esecuzione

Con l'aiuto di ACS, l'utente può aggiungere selezioni complesse al report (che verranno aggiunte alla query nei posti giusti), formattazione condizionale (che consente di formattare in modo diverso - font, colore, ecc. - campi di output a seconda della loro valori) e molto altro ancora.

Descrivi brevemente il processo di creazione e generazione di un report come segue:

  • Lo sviluppatore in fase di progettazione con l'aiuto del progettista (o in fase di esecuzione con l'aiuto del codice) definisce lo schema di layout dei dati:
    • Testo della richiesta/richieste
    • Descrizione dei campi calcolati
    • Relazioni tra query (se ce ne sono più di una)
    • Opzioni di rapporto
    • Impostazioni predefinite
    • Eccetera.
  • Le impostazioni di cui sopra vengono salvate nel layout
  • L'utente apre un rapporto
    • Eventualmente effettua impostazioni aggiuntive (ad esempio, modifica i valori dei parametri)
    • Preme il pulsante "Genera".
  • Le impostazioni utente si applicano allo schema di composizione dei dati definito dallo sviluppatore.
  • Viene formato un layout intermedio della composizione dei dati, contenente le istruzioni su dove ottenere i dati. In particolare, vengono corrette le query specificate nel layout. Pertanto, i campi non utilizzati nel report vengono rimossi dalla richiesta (questo viene fatto per ridurre al minimo la quantità di dati ricevuti). Tutti i campi utilizzati nelle formule dei campi calcolati vengono aggiunti alla query.
  • Il responsabile della composizione dei dati è incluso nella causa. Il processore di layout esegue query, collega set di dati, calcola i valori dei campi e delle risorse calcolati, esegue il raggruppamento. In una parola, esegue tutti i calcoli che non sono stati eseguiti a livello di DBMS.
  • Il processore di output dei dati avvia una query per l'esecuzione e invia i dati ricevuti a un foglio di calcolo, un grafico, ecc.


Il processo di generazione di un report da parte del meccanismo ACS

Cerchiamo di ridurre al minimo la quantità di dati di reporting trasferiti dal server all'applicazione client. Quando si visualizzano i dati in un foglio di calcolo, quando si apre un foglio di calcolo, trasferiamo dal server solo le righe che l'utente vede all'inizio del documento. Man mano che l'utente si sposta lungo le linee del documento, i dati mancanti vengono scaricati dal server al client.

Impostazioni utente

Tutti gli strumenti ACS sono disponibili sia per lo sviluppatore che per l'utente finale. Ma la pratica ha dimostrato che l'utente finale è spesso spaventato dall'abbondanza delle capacità degli strumenti. Inoltre, nella maggior parte dei casi, l'utente finale non ha bisogno di tutta la potenza delle impostazioni: è sufficiente per lui avere un rapido accesso all'impostazione di uno o due parametri del report (ad esempio, periodo e controparte). A partire da una determinata versione della piattaforma, lo sviluppatore del rapporto ha l'opportunità di contrassegnare quali impostazioni del rapporto sono disponibili per l'utente. Questo viene fatto utilizzando la casella di controllo "Includi nelle impostazioni utente". Inoltre, le impostazioni del rapporto ora hanno un flag "Modalità di visualizzazione" che assume uno dei tre valori seguenti:
  • Accesso rapido. L'impostazione verrà visualizzata direttamente nella parte superiore della finestra del rapporto.
  • Ordinario. L'impostazione sarà disponibile tramite il pulsante "Impostazioni".
  • Non disponibile. L'impostazione non sarà disponibile per l'utente finale.


Impostazione della modalità di visualizzazione in fase di progettazione


Visualizza l'impostazione in modalità Accesso rapido in fase di esecuzione (sotto il pulsante Genera)

Piani di sviluppo

Una delle priorità nello sviluppo di ACS per noi è la semplificazione delle impostazioni dell'utente. La nostra esperienza mostra che per alcuni utenti finali, lavorare con le impostazioni utente è ancora un lavoro serio. Ne prendiamo atto e lavoriamo in questa direzione. Di conseguenza, diventerà anche più facile per gli sviluppatori lavorare con ACS, perché come prima, vogliamo fornire un unico toolkit per la creazione di report sia per lo sviluppatore che per l'utente finale.

Un saluto, miei cari lettori! Continuiamo con le basi del sistema di layout. In questa serie di articoli, hai appreso le differenze tra un set di dati: una query rispetto a una query normale. Hai anche esaminato i parametri delle tabelle virtuali e hai familiarizzato con l'estensione del linguaggio di query. Ora dai un'occhiata al contenuto che imparerai qui. Buona fortuna!

Funzioni del linguaggio di espressione SKD.

Quando una query viene compilata nel layout, al suo interno vengono utilizzate le normali funzioni del linguaggio di query. Ma ACS consente di definire funzioni aggiuntive. Alcune funzioni sono simili a quelle del linguaggio di query, ma utilizzano una sintassi diversa. Ad esempio, la funzione "BeginPeriod":

PeriodoInizio(DataOra(2002, 10, 12, 10, 15, 34), "Mese")

Questa funzione è diversa dalla funzione del linguaggio di query nel secondo parametro. Qui viene utilizzata la stringa "Mese", mentre nella funzione del linguaggio di query viene utilizzata la lettera MESE.

La descrizione delle funzioni si trova aprendo il Configuratore: Guida -> Contenuti -> Sistema di composizione dei dati -> Linguaggio di espressione del sistema di composizione dei dati -> Funzioni del linguaggio di espressione del sistema di composizione dei dati.

Dove posso utilizzare le funzioni del linguaggio di espressione SKD se non possono essere utilizzate nel linguaggio di query?

  • In una scheda nella colonna Espressione.
  • Nella scheda "Parametri" nella colonna "Espressione".
  • Nella scheda "Impostazioni" nella colonna "Campi personalizzati". L'utente può creare i propri campi e scrivervi espressioni.
  • Nella scheda Dataset, nelle colonne Visualizza espressioni ed Espressioni di ordinamento.
    Si tratta di espressioni che impostano i campi di composizione dei dati.

Caratteristiche dell'SKD.

Quando si utilizza una query del set di dati, vengono visualizzate una serie di funzionalità
quando si ottimizza l'SKD.

  • La query risultante viene ridotta in base all'impostazione della variante del rapporto,
    perché alcuni campi vengono rimossi nella query risultante.
  • Inoltre, le tabelle possono anche essere eliminate dalla query risultante se le tabelle temporanee sono descritte nella query e non vengono utilizzate altrove.
  • Lo stesso vale per i set di dati, se abbiamo descritto molti set di dati nello schema, ma ne utilizziamo solo alcuni, il sistema riceverà informazioni solo sui set di dati utilizzati e il resto dei set di dati verrà rimosso dal layout di composizione dei dati risultante .

Queste caratteristiche possono avere conseguenze negative? Sì, poiché in alcuni casi la richiesta che volevamo non verrà formata. Pertanto, è necessario tenere conto di queste funzionalità durante la creazione di query complesse.

Impostazioni di base per i campi ACS.

Nella scheda "Set di dati", quando si crea un set di dati del tipo di query, i campi del layout vengono compilati automaticamente. Come puoi vedere, i campi contengono un gran numero di impostazioni.

Colonna "Campo" contiene il nome del campo, ottenuto dall'infobase (IB).
Un valore immutabile cablato alla richiesta. Corrisponde all'alias della richiesta.

Ma c'è una caratteristica. Se cambiamo l'alias, ad esempio "Nomenclature", nel Query Builder, nella scheda "Combinazioni / Alias" nella colonna "Nome campo", in "Prodotto", apparirà un nuovo campo "Prodotto" sul Scheda “Datasets” del layout, ma allo stesso tempo rimane il campo “Nomenclature”. Questo perché è impostato il flag "Completamento automatico". Con questa impostazione, il sistema non riesce a capire che il campo "Prodotto" è uguale al campo "Nomenclatura", quindi, per ogni evenienza, il campo viene aggiunto due volte.

Un tale design potrebbe danneggiare l'esperienza dell'utente? Sì. Dopotutto, nelle impostazioni della variante del rapporto appariranno due campi "Prodotto" e "Nomenclatura". Non sarà chiaro all'utente in che modo differiscano, sebbene queste selezioni siano identiche.

Sebbene sia possibile escludere l'aspetto del campo "Nomenclatura" selezionando le caselle "Restrizione campo" - "Condizione" e "Restrizione attributo" - "Condizione" nella scheda "Set di dati" nelle impostazioni del campo. Inoltre, puoi deselezionare il flag "Completamento automatico" e compilare tutti i campi nel Generatore di query nella scheda "Composizione dati".

Colonna "Sentiero" specifica come faremo riferimento al campo in tutte le schede della composizione dei dati. Un valore che puoi modificare a tuo piacimento. Gli spazi sono consentiti nel nome del percorso, ma tale nome è racchiuso tra parentesi quadre. Ma è meglio che il percorso sia privo di spazi, poiché questo è un campo di servizi. È meglio cambiare il titolo spuntando la casella nella colonna "Titolo".

Perché è stato necessario creare due campi diversi "Campo" e "Percorso", se i loro nomi sono quasi sempre gli stessi? Perché vengono utilizzati molti set di dati. Ad esempio, se il secondo set di dati sarà un'unione, per abbinare i campi è necessario disporre degli stessi percorsi. In altri casi, i percorsi possono essere lasciati invariati se i loro nomi sono chiari.

È possibile utilizzare il metodo seguente per lavorare con la colonna "Percorso". Specificando un percorso, è possibile creare attributi di elementi virtuali nidificati. Ad esempio, inseriamo l'attributo "Qualità" all'interno dell'attributo "Prodotto". Cambiamo il campo "Percorso" dell'attributo "Qualità" in "Prodotto.Qualità". Ora nella scheda "Impostazioni" nella scheda "Campi selezionati", non troveremo il campo "Qualità", ma apparirà all'interno del campo "Prodotto".

Diamo un'occhiata più da vicino alle impostazioni delle restrizioni di accessibilità. Come puoi vedere, ci sono due righe per limitare l'accessibilità nelle colonne "Limite campo" e "Limitazione degli oggetti di scena".

Colonne che limitano i campi SKD

La colonna "Restrizione campo" significa che le restrizioni saranno imposte al campo stesso. La colonna "Limitazione dei dettagli" significa che verranno imposte restrizioni ai dettagli nidificati di questo campo, se il campo appartiene a un tipo di dati complesso, come una ricerca o un documento.

Ogni riga è divisa in altre quattro colonne. Se è impostato un flag per un campo o attributi di questo campo:

  • Campo, non saranno disponibili per la selezione nella scheda "Impostazioni" nella scheda "Campi selezionati".
  • Condizione, non saranno disponibili come condizione nella scheda "Impostazioni" nella scheda "Selezione".
  • Gruppo, il raggruppamento per essi non sarà disponibile nella scheda "Impostazioni" durante la creazione di un nuovo raggruppamento.
  • ordinare, non saranno disponibili per l'ordine nella scheda "Impostazioni" nella scheda "Ordina".

Colonna "Visualizza espressione" necessario per modificare la rappresentazione del campo a seguito del report. Ad esempio, è necessario visualizzare non solo il nome del prodotto, ma anche il suo articolo. Pertanto, in questa colonna puoi scrivere quanto segue:

Prodotto. Articolo + "-" + Merce. Nome

In questo campo possiamo utilizzare tutte le possibilità del linguaggio ACS e accedere alle funzioni dei moduli comuni.

Se la configurazione contiene un modulo comune chiamato "ForSKD" e questo modulo definisce una funzione comune (con la parola chiave "Export") "GetView" con il parametro "Reference", allora nel campo "View Expression" scriveremo:

Per SKD. Ottieni rappresentazione (elemento)

Ma è necessario utilizzare questa funzionalità con attenzione, soprattutto se la funzione del modulo comune accede al database, poiché questo accesso avviene dopo che tutti i dati del report sono stati ricevuti. Infatti, per ogni riga, la query verrà nuovamente eseguita.

Colonna "Espressione ordine" necessario per definire un ordinamento personalizzato. Qui puoi utilizzare le stesse costruzioni del campo "Visualizza espressione".

Ebbene, ha raccontato tutto, come promesso. Se hai domande, scrivile nei commenti. Affinché il materiale sia fissato nella tua mente, preparerò un test.

Articoli correlati in alto