Casa / Internet / Creiamo un report con una data frequenza sul magazzino. Creiamo un rapporto con una data frequenza su skd 1s skd esempio di periodo standard

Creiamo un report con una data frequenza sul magazzino. Creiamo un rapporto con una data frequenza su skd 1s skd esempio di periodo standard

Creiamo un rapporto con un set di dati di query:

SCEGLI MerciNei magazziniResti. Magazzino, MerciIn MagazziniResti. Nomenclatura, merci nei magazzini rimane. QuantitàSaldo DA Registro di accumulazione. merci nei magazzini. Resti(&MiaData ,) COME MerciNei MagazziniResti

Ora andiamo nella scheda dei parametri e vediamo che il sistema, oltre al nostro parametro &MyDate, ha creato anche il parametro &Period.
Per osservare visivamente i periodi, creiamo il modulo del report principale e posizioniamo un campo della tabella con i dati su di esso: SettingsComposer.Settings.DataParameters

Salva il report e aprilo nell'azienda. Nel campo della tabella con i parametri, viene visualizzato solo il parametro &Periodo:

Di conseguenza, qualsiasi modifica di questo parametro non darà il risultato desiderato.

Perché &MyDate non è disponibile? Certo, perché nella scheda dei parametri ha una casella di controllo Restrizione di disponibilità.

Rimuoviamo il daw. Ora in Opzioni disponibili vediamo entrambi. Solo durante la generazione del report vedremo che il report risponde al parametro &Period e non a &MyDate.

IN questo esempio La cosa più semplice è rinominare il parametro &MyDate nella query in &Period e ottenere il risultato desiderato. Ma forse hai una richiesta che utilizzava già il parametro &Period, o le tue convinzioni religiose non ti consentono di utilizzare questo parametro, in ogni caso puoi risolvere il problema in questo modo:

SCEGLI MerciNei magazziniResti. Magazzino, MerciIn MagazziniResti. Nomenclatura, merci nei magazzini rimane. QuantitàSaldo DA Registro di accumulazione. merci nei magazzini. Resti((&MyDate) ,) AS MerciInMagazziniResti

UPD dall'utente Boo:

Il problema principale quando si utilizzano parametri "standard" (aggiunti dal sistema) è che quando si utilizzano più tabelle virtuali nel report, se questo parametro è definito, il suo valore verrà utilizzato in tutti gli altri casi invece di "proprio".

Faccio un esempio:

SELECT DipendentiSP.Dipendente, LavoratoriSP.ReasonChangeState, DipendentiSP.Period,LavoratoriSPOtherDate.Period AS Periodo2, DipendentiSPOtherDate.ReasonChangeState AS ReasonChangeState2FROMRegister.EmployeesOrganizations.SliceLast(&Period , Employee = &Employee) AS EmployeesSP UNISCITI A SINISTRA Registro delle informazioni.Dipendenti delle organizzazioni.Fetta dell'ultimo(&Altradata ,) AS DipendentiSPAltraDate ON DipendentiSP.Dipendente = DipendentiSPAltraDate.Dipendente

Nella seconda sottoquery, il valore del parametro PERIOD "standard" verrà utilizzato come parametro della data di fetta e non il valore OtherDate.

Questo "problema tecnico" verrà osservato anche se la seconda sottoquery viene inviata al secondo set di dati e collegata già tramite ACS. Anche l'opzione che utilizza nella seconda query un'espressione come "ADDDATE(&Period, MONTH, -1)" non funzionerà, il mese non verrà sottratto. Ma rinominare il parametro "Period" nella query, ad esempio, in "FirstDate" risolve questo problema.

A proposito, si verifica lo stesso identico problema con tavoli virtuali accumulazione e registri contabili utilizzati per ottenere, ad esempio, il fatturato. Qui il sistema aggiunge i parametri "StartPeriod" e "EndPeriod".
Quindi nel caso di richieste anche un po' più complesse, ha senso disattivare la disponibilità e la fruizione dei "periodi standard".

Questo articolo discute alcune delle caratteristiche dell'impostazione del periodo quando si utilizza il Data Composition System (ACS), problemi che sorgono a causa della differenza nel concetto del periodo tra l'utente medio e il sistema 1C, e suggerisce anche modi per risolverli .
La maggior parte dei report sviluppati utilizzando il Data Composition System (DCS) richiede all'utente di inserire il periodo per il quale verrà generato il report. Di norma, in ACS, l'input del periodo è organizzato tramite parametri, utilizzando la seguente costruzione, vedere Fig. Fig. 1 Questo metodo per inserire un periodo è considerato "classico", è descritto in un articolo su ITS e altra letteratura dedicata allo sviluppo in 1C, quindi lo prenderemo come base. Si consideri, ad esempio, una semplice query che recupera tutti i documenti determinato periodo cm. Fig.2 Quando si utilizza questo rapporto, l'utente imposta il periodo attraverso i parametri vedere. Fig.3 Tutto sembra essere corretto ... MA c'è un piccolo problema:

Il fatto è che la stragrande maggioranza degli utenti "comprende" il periodo in modo diverso da come lo "capisce" 1C, esempi:
1). Prendere in considerazione Fig.3
Dal punto di vista dell'utente, il periodo non è impostato, ovvero NON È LIMITATO, ovvero TUTTI i documenti senza un limite di data devono essere inclusi nel report.
"Dal punto di vista" del sistema 1C, il parametro-periodo è impostato e ... entrambi i suoi limiti sono uguali a 01.01.
2). Prendere in considerazione Fig.4
Dal punto di vista dell'utente, tutti i documenti a partire dalla data 28/01/2010 devono essere inclusi nel report.
"Dal punto di vista" 1C periodo 28/01/2010 - 01/01/0001 causerà un'eccezione.

Certo, puoi provare a spiegare all'utente perché il report non mostra i documenti che si aspetta di vedere e come viene presentato il periodo dal "punto di vista" di 1C, ma questo è un compito ingrato e sbagliato. Buon programma dovrebbe essere, prima di tutto, conveniente per l'utente, perché il programma esiste per l'utente, e non viceversa, quindi sarà necessario "insegnare" a 1C a comprendere il periodo come lo intende l'utente, ovvero:
1). StartPeriod e EndPeriod non sono impostati -> tutti i documenti.
2). È impostato solo StartPeriod -> tutti i documenti a partire da StartPeriod
3). Inoltre, verificheremo che la fine del periodo >= inizio del periodo e, se ciò non è vero, assumeremo che la fine del periodo non sia impostata, ad es. 2).
Sulla base di quanto sopra, l'espressione per il parametro EndDate avrà il seguente aspetto:

SELEZIONA QUANDO &Period.EndDate=DATETIME(1,1,1) THEN DATETIME(3999,12,31,23,59,59) ELSE SELECT WHEN &Period.EndDate<&Период.ДатаНачала ТОГДА ДАТАВРЕМЯ(3999,12,31,23,59,59) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ

La vista finale del nostro design di selezione del periodo è mostrata in Fig.5

Quindi, cominciamo.

Per semplicità, comprendendo l'esempio, costruiremo su un semplice registro di accumulazione inversa.

Nel mio caso si tratta del registro di accumulo "Contabilità lavori in corso".

Ad esempio, specificheremo rigidamente i suoi parametri (non attraverso l'imposizione morbida di parametri sull'ACS):

Si noti che la frequenza della tabella virtuale è "Record".

Ma, come notato sopra, abbiamo bisogno del periodo nel contesto della periodicità, quindi propongo di calcolare il campo "Periodo" nel modo seguente (non molto bello, ma non ho visto opzioni migliori):

Come puoi vedere dallo screenshot, alla richiesta viene passato un parametro, che l'utente specifica nel modulo: Valore dell'enumerazione "Periodicità" - questa enumerazione è disponibile in quasi tutte le soluzioni standard.

I suoi tipi disponibili sono indicati nella scheda "Parametri":

Con questa impostazione, formattiamo il nostro periodo in modo che tutto sia bello e piacevole alla vista)

Ecco i formati effettivi:

Mese: DF="MMMM yyyy "y.""

Giorno: DF = gg.MM.aaaa

Settimana: df = ""Settimana da" gg.MM.aaaa "

Quarto: DF = "a "quarto" yyyy "y."

Anno: DF = "yyyy "y."

Decennio: DF = ""Decennio dal" gg.MM.aaaa "

Semestre: DF = ""Semestre dal" gg.MM.aaaa"

È tutto. Di conseguenza, abbiamo un'immagine meravigliosa:

Quando si creano rapporti su ACS, spesso diventa necessario visualizzare una selezione di periodo sul modulo del rapporto, inoltre, in modo da non dover inserire manualmente le date, ma selezionare da un elenco di periodi standard, come: "Anno", "Mese", "Settimana", ecc. Per i parametri di tipo Data, è possibile specificare solo "Inizio di quest'anno, mese, ecc.", ma "Fine" non viene fornito.

Il fatto è che, tra i tipi di dati, è disponibile solo il tipo "Data di inizio standard", ma voglio anche il tipo "Data di fine standard".

C'è un modo per aggirare questo problema.

  1. Creiamo un nuovo parametro, chiamiamolo "Periodo"
  2. Impostare questo parametro sul tipo "Periodo standard"
  3. Nel campo "Espressione" dei parametri "StartPeriod" e "EndPeriod" utilizzati nella query, impostare le espressioni " &Period.StartDate" e " &Period.EndDate" rispettivamente.

Ma c'è una leggera sottigliezza. Se utilizziamo tabelle virtuali nella query, molto probabilmente il report smetterà di funzionare e verrà emesso un messaggio di errore del tipo "Errore di elaborazione della visualizzazione, mancata corrispondenza del tipo, numero del parametro...".

Per evitare ciò, è necessario rimuovere tutti i parametri delle tabelle virtuali.

E aggiungili alle tabelle nella scheda Composizione dati.

Affinché i parametri vengano visualizzati nelle impostazioni del rapporto rapido, abilitare il flag corrispondente per i parametri del rapporto.

Ora la selezione del periodo nel modulo del rapporto ha questo aspetto.