LA CAMPANA

C’è chi ha letto questa notizia prima di te.
Iscriviti per ricevere nuovi articoli.
E-mail
Nome
Cognome
Come vuoi leggere La Campana?
Niente spam

Quando si creano report su un sistema di controllo accessi, spesso è necessario visualizzare una selezione del periodo sul modulo del report, in modo da non dover inserire le date manualmente, ma selezionarle da un elenco di periodi standard, come ad esempio: "Anno" , “Mese”, “Settimana”, ecc. Per i parametri del tipo Data, è possibile specificare solo "L'inizio di quest'anno, mese, ecc.", ma non viene fornita la "Fine".

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. Imposta questo parametro sul tipo “Periodo standard”
  3. Nel campo “Espressione” dei parametri “Inizio Periodo” e “Fine Periodo”, utilizzati nella richiesta, impostare le espressioni “ &Periodo.DataInizio" e " &Data di fine periodo” rispettivamente.

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

Per evitare ciò, è necessario rimuovere tutti i parametri della tabella virtuale.

E aggiungili alle tabelle nella scheda "Composizione dei dati".

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

Ora la selezione del periodo nel modulo del rapporto appare così.

Creiamo un report con un set di dati di query:

SELEZIONE PRODOTTI NEI MAGAZZINI Rimanenti. Magazzino, Merci nei magazzini. Nomenclatura, Prodotti nei Magazzini Rimanenti. Saldo Quantità DA Registro di Accumulo. Prodotti nei magazzini. Resti(&La mia data,) AS ProductsInWarehousesRemains

Andiamo ora nella scheda parametri e vediamo che il sistema, oltre al nostro parametro &MyDate, ha creato anche il parametro &Period.
Per monitorare visivamente i periodi, creeremo un modulo di report principale e inseriremo un campo tabella con i dati su di esso: Impostazioni Composer.Settings.DataParameters

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

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

Perché il parametro &MyDate non è disponibile? Naturalmente, perché nella scheda dei parametri ha una casella selezionata Limitazione della disponibilità.

Deseleziona la casella. Ora vediamo entrambi nei parametri disponibili. Solo durante la generazione del report vedremo che il report reagisce al parametro &Period e non a &MyDate.

In questo esempio, la cosa più semplice da fare è rinominare il parametro &MyDate nella richiesta in &Period e ottenere il risultato desiderato. Ma forse hai una query in cui è già stato utilizzato il parametro &Period, oppure le tue opinioni religiose non ti consentono di utilizzare questo parametro, in ogni caso puoi risolvere il problema in questo modo:

SELEZIONE PRODOTTI NEI MAGAZZINI Rimanenti. Magazzino, Merci nei magazzini. Nomenclatura, Prodotti nei Magazzini Rimanenti. Saldo Quantità DA Registro di Accumulo. Prodotti nei magazzini. Remains((&MyDate),) AS ProductsInWarehousesRemains

AGGIORNAMENTO dall'utente Boh:

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

Lascia che ti faccia un esempio:

SELECT EmployeesSP.Employee, WorkersSP.ReasonChangesState, WorkersSP.Period, WorkersSPAnotherDate.Period AS Period2, WorkersSPAnotherDate.ReasonChangesStates AS ReasonChangesState2 FROM RegisterInformation.EmployeesOrganizations.SliceLast(&Period , Employee = &Employee ) AS Work nikkiSP CONNESSIONE SINISTRA Registro delle informazioni.Dipendenti delle organizzazioni.Parte dell'ultima(&Altradata,) AS DipendentiSPUn'altradata BY DipendentiSP.Dipendente = DipendentiSPUn'altradata.Dipendente

Nella seconda sottoquery, il valore del parametro PERIOD "standard" verrà utilizzato come parametro della data della sezione, anziché il valore OtherDate.

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

A proposito, esattamente lo stesso problema si osserva con le tabelle virtuali di accumulazione e i registri contabili, utilizzati per ottenere, ad esempio, il fatturato. Lì il sistema aggiunge i parametri “Inizio periodo” e “Fine periodo”.
Quindi, nel caso di richieste di complessità anche leggermente maggiore, è opportuno disattivare la disponibilità e l'utilizzo di “periodi standard”.

Quindi cominciamo.

Per semplicità, comprendendo l'esempio, ci baseremo su un semplice registro di accumulo circolante.

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

Ad esempio, indicheremo i suoi parametri in modo rigido (non attraverso l'imposizione morbida dei parametri sul sistema di controllo degli accessi):

Tieni presente che la frequenza del tavolo virtuale è “Record”.

Ma, come notato sopra, abbiamo bisogno del periodo in termini di periodicità, quindi propongo di calcolare il campo “Periodo” nel modo seguente (non molto carino, ma non ho visto opzioni migliori):

Come si può vedere dallo screenshot, alla richiesta viene passato un parametro che l'utente specifica nel modulo: Il valore dell'enumerazione "Frequenza" - questa enumerazione si trova in quasi tutte le soluzioni standard.

Indicheremo i tipi disponibili nella scheda "Parametri":

Con questa impostazione formattiamo il nostro ciclo in modo che tutto sia bello e gradevole alla vista)

Ecco i formati stessi:

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

Giorno: DF = gg.MM.aaaa

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

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

Anno: DF = "aaaa "y.""

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

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

Questo è tutto. Il risultato è un'immagine meravigliosa:

Questo articolo discute alcune delle caratteristiche dell'impostazione di un periodo quando si utilizza un sistema di composizione dei dati (DCS), i problemi che sorgono a causa delle differenze nel concetto di periodo tra un utente ordinario e il sistema 1C e suggerisce anche modi per risolverli .
La maggior parte dei report sviluppati utilizzando un sistema di composizione dei dati (DCS) richiede all'utente di inserire il periodo per il quale verrà creato il report. Di norma, in ACS, l'immissione del periodo è organizzata tramite parametri, utilizzando la seguente costruzione, vedere. Fig.1 Questo metodo per inserire un periodo è considerato "classico"; è descritto in un articolo su ITS e in altra letteratura dedicata allo sviluppo in 1C, quindi prendiamolo come base. Consideriamo come esempio una semplice richiesta che riceve tutti i documenti Vendite di beni e servizi per un determinato periodo, vedi Fig.2 Quando si utilizza questo report, l'utente imposta il periodo tramite i parametri, vedere. Fig.3 Sembra tutto corretto... MA c'è un piccolo problema:

Il fatto è che la stragrande maggioranza degli utenti “capisce” il punto in modo diverso da come lo “capisce” 1C, esempi:
1). Consideriamo Fig.3
Dal punto di vista dell'utente, il periodo non è specificato, ovvero ILLIMITATO, ovvero TUTTI i documenti senza limiti di data devono essere inclusi nel rapporto.
"Dal punto di vista" del sistema 1C, il parametro periodo è impostato e ... entrambi i suoi confini sono pari a 01.01.0001 e nel report verranno inclusi solo i documenti con data vuota, il che in pratica significa non verrà incluso un unico documento.
2). Consideriamo Fig.4
Dal punto di vista dell'utente, il rapporto dovrebbe includere tutti i documenti a partire dalla data 28/01/2010.
“Dal punto di vista” di 1C, il periodo 28/01/2010 – 01/01/0001 causerà un'eccezione.

Ovviamente 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, ed è è anche sbagliato. Un buon programma dovrebbe innanzitutto essere user-friendly, perché il programma esiste per l'utente, e non viceversa, quindi dovrai “insegnare” a 1C a capire il periodo come lo capisce l'utente, ovvero:
1). Inizio periodo e Fine periodo non sono specificati -> tutti i documenti.
2). È specificato solo l'Inizio del periodo –> tutti i documenti che iniziano dall'Inizio del periodo
3). Inoltre, controlleremo che Fine del periodo >= Inizio del periodo e, se ciò non è vero, assumeremo che la Fine del periodo non sia specificata, ovvero 2).
In base a quanto sopra, l'espressione per il parametro Data di fine sarà simile a questa:

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

La forma finale del nostro progetto di selezione del periodo è mostrata in Fig.5

Alcune funzionalità di impostazione del periodo nel sistema di controllo degli accessi.

La maggior parte dei report sviluppati utilizzando un sistema di composizione dei dati (DCS) richiede all'utente di inserire il periodo per il quale verrà creato il report.

Di norma, in ACS, l'immissione del periodo è organizzata tramite parametri, utilizzando la seguente costruzione, vedere Questo metodo di immissione del periodo è considerato "classico" è descritto in un articolo su ITS e altra letteratura dedicata allo sviluppo in 1C, quindi prendiamolo come base. Consideriamo come esempio una semplice richiesta che riceve tutti i documenti Vendite di beni e servizi per un determinato periodo, vedi

Quando si utilizza questo report, l'utente imposta il periodo tramite i parametri, vedi. Tutto sembra essere corretto..., MA c'è un piccolo problema:

Il fatto è che la stragrande maggioranza degli utenti “capisce” il punto in modo diverso da come lo “capisce” 1C, esempi:

Dal punto di vista dell'utente, il periodo non è specificato, ovvero ILLIMITATO, ovvero TUTTI i documenti senza limiti di data devono essere inclusi nel rapporto.

"Dal punto di vista" del sistema 1C, il parametro periodo è impostato e ... entrambi i suoi confini sono pari a 01.01.0001 e nel report verranno inclusi solo i documenti con data vuota, il che in pratica significa non verrà incluso un unico documento.

Dal punto di vista dell'utente, il rapporto dovrebbe includere tutti i documenti a partire dalla data 28/01/2010.

"Dal punto di vista" di 1C, il periodo dal 28/01/2010 al 01/01/0001 causerà un'eccezione.

Ovviamente 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, ed è è anche sbagliato. Un buon programma dovrebbe innanzitutto essere user-friendly, perché il programma esiste per l'utente, e non viceversa, quindi dovrai “insegnare” a 1C a capire il periodo come lo capisce l'utente, ovvero:

1). Inizio periodo e Fine periodo non sono specificati -> tutti i documenti.

2). Viene specificato solo l'Inizio del Periodo -> tutti i documenti che iniziano dall'Inizio del Periodo

3). Inoltre, controlleremo che Fine del periodo >= Inizio del periodo e, se ciò non è vero, assumeremo che la Fine del periodo non sia specificata, ovvero 2).

In base a quanto sopra, l'espressione per il parametro Data di fine è:

QUANDO &Period.EndDate=DATETIME(1,1,1)

POI DATAORA(3999,12,31)

QUANDO &Data di fine periodo<&Период.ДатаНачала

POI DATAORA(3999,12,31) DATAORA(3999,12,31,23,59,59)

Data &Fine periodo

La forma finale del nostro progetto di selezione del periodo è mostrata in

Nota: questo meccanismo per l'impostazione dei parametri è destinato alle piattaforme precedenti 1C 8.1 e 8.2 (e le configurazioni eseguite sotto il loro controllo) hanno meccanismi integrati per il controllo dei parametri vuoti e non è necessario ricorrere al meccanismo descritto in questo articolo, inoltre, su alcune versioni della piattaforma 1C sono possibili errori e operazioni errate.

LA CAMPANA

C’è chi ha letto questa notizia prima di te.
Iscriviti per ricevere nuovi articoli.
E-mail
Nome
Cognome
Come vuoi leggere La Campana?
Niente spam