LA CAMPANA

C'è chi legge questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Nell'articolo precedente, abbiamo aggiunto un oggetto di scena generale a tutte le directory della nostra configurazione, al fine di sapere chi ha creato questo oggetto directory. Ora creeremo un abbonamento all'evento e indicheremo quali informazioni compilare questi oggetti di scena.

In questo grado, ogni volta prima di registrare un oggetto, riscriveremo l'autore dell'oggetto, è ovviamente opportuno indicare quando ciò è accaduto, aggiungeremo anche la data di registrazione all'autore.

Procedura Salva automaticamente l'autore prima della registrazione (Origine, Elimina) Esportazione // Inserire l'esempio in posizione. Fonte. AuthorObktu \u003d UserName () + " ; "+ stringa (data corrente ()); EndProcedure

Perfettamente. Ora pensiamo a dove altro puoi usare i dettagli generali?

Innanzitutto, utilizzando i dettagli generali, è possibile aggiungere l'attributo "Commento", l'attributo "autore" e altri dettagli necessari per tutti i documenti nella configurazione.

I dettagli generali hanno un altro parametro interessante " Condivisione dei dati ".Questo meccanismo ci consente di definire i dati che vogliamo mostrare all'utente. Ad esempio, in modo che nessuno dei manager conosca tutti i client dell'azienda, gli mostreremo solo quei client che ha aggiunto al database, con cui lavora. Proviamo ad aggiungere questa funzionalità al database. Innanzitutto, dovremo indicare che utilizzeremo la separazione dei dati, il sistema offrirà automaticamente di creare parametri di sessione predefiniti.

Successivamente, non ci resta che impostare i parametri della sessione nel modulo sessione:

Diamo un esempio di come appare la directory delle controparti senza usare "Condivisione dei dati" e con essa:

Nessuna separazione

Con divisione

Si noti che l'attributo "Responsabile" non è stato trovato nella prima controparte, poiché l'autore di questo attributo era qualcun altro.

Un classico esempio di separazione contabile è per organizzazione, mostrando agli utenti solo quei documenti relativi all'organizzazione corrispondente.

Abbiamo usato il meccanismo dei parametri di sessione, capiamo brevemente di cosa si tratta. In effetti, i parametri di sessione sono variabili globali che vengono impostati all'avvio del sistema. Di norma, ciò accade nel "Modulo di sessione", si noti che i parametri di sessione vengono creati esclusivamente a livello di programmazione.

Dopo aver impostato i "Parametri di sessione" possiamo fare riferimento a questo parametro da qualsiasi modulo del sistema con un semplice

Di conseguenza, per modificare i parametri della sessione, l'utente deve uscire e accedere nuovamente al programma.

Una volta abbiamo discusso i meccanismi per limitare l'accesso degli utenti in 1C e in particolare.

Permette all'utente di lavorare non con tutti i documenti, ma solo con quelli in cui è indicata una specifica organizzazione o magazzino. Le selezioni vengono effettuate in modo dinamico, quindi impongono un determinato carico sul database.

La proprietà della variabile separatore comune - Separazione degli utenti 1C - consente di impostare la disponibilità dell'elenco di utenti in base all'uso dei separatori.

Se il separatore è abilitato per un utente, sarà visibile nell'elenco degli utenti in modalità Enterprise 1C, altrimenti non sarà visibile.

In questo modo, è possibile organizzare diversi elenchi di utenti per diverse parti della base.

La proprietà della variabile separatore comune - Separazione dell'autenticazione 1C - consente di creare utenti con gli stessi nomi utente per diverse parti del database.

Separazione condizionale 1C

La separazione condizionale 1C consente di abilitare e disabilitare il separatore in base ai dati del database. Pertanto, è possibile creare catene di separatori reciprocamente dipendenti che agiscono dinamicamente in un caso o nell'altro.

Per abilitare la separazione condizionale 1C - è necessario specificare nella proprietà della variabile del separatore comune - separazione condizionale 1C - che sarà responsabile per determinare se la separazione 1C è abilitata.

È possibile utilizzare una costante con il tipo booleano o un attributo di riferimento con il tipo booleano.

Importante: per questa costante / questo riferimento è necessario disabilitare l'uso (selezionare Non utilizzare) come parte dei separatori, solo così sarà possibile selezionarlo.

1. Preambolo.

Era necessario organizzare la contabilità di due organizzazioni in una IS. La situazione non è unica, ma è successo che il nostro UPP da 250 gigabyte fortemente non tipico ha funzionato piuttosto lentamente, quindi invece di RLS abbiamo deciso di provare la condivisione dei dati. Di cosa si tratta, ad esempio, o. In breve, se RLS condiziona le query SQL, il separatore di dati è una colonna aggiuntiva nelle tabelle a livello di DBMS, a causa della quale il meccanismo di partizionamento dovrebbe funzionare più velocemente di RLS.

Pertanto, alla base in cui è stata conservata la contabilità per la LLC n. 1, è necessario trasferire informazioni da una base separata della LLC n. 2 e organizzare un lavoro congiunto. Proprio come l'immagine:

I mortali ordinari lavorano solo con la loro LLC e il capo contabile a volte esamina i dati su due persone giuridiche. Nella modalità di accesso a entrambe le LLC, puoi solo leggere i dati, quindi il capo contabile dovrebbe essere in grado di passare in modo interattivo tra le modalità "leggi tutto" / "scrivi solo un'organizzazione" e seleziona LLC (cioè imposta il valore di una variabile comune) per condurre calcolo del costo.

2. Attuazione

Piattaforma 8.2.19.90, nessuna modalità di compatibilità. DBMS - MSSQL Server 2008 R2 Standart.

Abbiamo creato un attributo OrganizationSplitter di tipo "numero" comune, concordato con la proposta di creare parametri di sessione, compilato l'attributo (inclusi diversi libri di consultazione, tutti i documenti, i registri di accumulazione, contabilità e calcolo). Condivisione dei dati - "Indipendente e condiviso". Il valore del parametro session è impostato dalle impostazioni utente predefinite nella procedura SessionParametersSetting nel modulo session:

Organization \u003d User Management.GetDefault Value (glCurrentUser, "MainOrganization");
SessionParameters.OrganizationSeparatorValue \u003d Organization.SeparatorValue;

Nell'interfaccia del capo contabile, hanno creato un modulo con la possibilità di passare da un'organizzazione all'altra e abilitare / disabilitare la modalità di separazione:

Con la separazione disabilitata, quando SessionParameters.OrganizationSplitterUsage \u003d False, la piattaforma rifiuta di scrivere documenti, fallendo con errori come "Errore SDBL: espressione prevista (pos \u003d 12)", quindi non puoi permettere all'utente di scrivere documenti in questo modo. Per affidabilità, abbiamo creato abbonamenti all'evento "Prima della registrazione" per oggetti che fanno parte dell'attributo generale:

Se SessionParameters.OrganizationSeparatorUsage \u003d False Quindi
# Se cliente quindi
Avviso ("Impossibile scrivere, perché la condivisione dei dati è disabilitata!");
# Finisci se
Rifiuto \u003d Vero;
Finisci se;

Il nostro piano d'azione era il seguente: prepariamo il ricevitore di configurazione di IB # 1, impostiamo i valori della variabile comune \u003d 1, cariciamo i dati da IB # 2, dopo il caricamento per tutti gli oggetti con un valore di separazione vuoto (uguale a 0), impostiamo OrganizationSplit \u003d 2.

La configurazione è stata preparata, è sorta la domanda, come impostare il valore del requisito generale per i documenti e i loro movimenti in periodi chiusi e rapidamente e senza il rischio che i numeri in bilancio volino? È impossibile scrivere il separatore separatamente dall'oggetto tramite il modello a oggetti 1C, quindi ho dovuto rompere il contratto di licenza per uscire e scrivere una query per MS SQL. Dato che ci sono molti oggetti nell'attributo generale e ci sono anche più tabelle negli zigomi per questi oggetti, abbiamo scritto un processo che genera una query per SQL (per ogni oggetto metadata incluso nel separatore, hanno scritto "update" + DB_Name + ".dbo._" + TableName + "set _" + FieldGeneralProps + "\u003d 1";)

Il valore è stato impostato, alcuni dei dati sono stati trasferiti dall'IB n. 2 e sono iniziati i test.

Il risultato è stato deludente. Innanzitutto, ci sono problemi con il registro contabile. Con la divisione abilitata, l'analista non è visibile:

Ciò è dovuto al fatto che il registro contabile a livello di DBMS è archiviato come più tabelle e non tutte le tabelle contengono il valore di una variabile comune (l'elaborazione è stata utilizzata per visualizzare la struttura).


Bene, impostiamo il valore del separatore tramite MS SQL, vediamo l'analisi. Ora i rapporti non funzionano. Si scopre che ci sono problemi con le query alle tabelle virtuali del registro contabile "Fatturato" e "FatturatoDtKt":

(Fld27033 è solo una variabile generale nella tabella dei registri contabili)

Il separatore è impostato in tutte le tabelle, questo può essere visto a livello di DBMS, quale potrebbe essere un errore non è chiaro. Espandiamo un tipico SCP vuoto, apportiamo le modifiche nella configurazione sopra descritta, inseriamo un paio di documenti (in questa versione, la piattaforma stessa inserisce il valore del separatore in tutte le tabelle del registro contabile), ma gli errori vengono riprodotti. Cattivo, ma escludiamo i registri contabili dagli oggetti di scena generali, continuiamo i test.

Inoltre, risulta che il meccanismo preventivo per i registri di calcolo ha smesso di funzionare. Non abbiamo separato i piani per i tipi di calcolo, stiamo cercando di cercare il problema nelle tabelle del registro di calcolo e nei ricalcoli. Controlliamo, abbassiamo il valore dei principali oggetti di scena, facciamo T&I - senza risultati.

Lungo la strada, diagnostichiamo il problema quando scriviamo informazioni dal modulo elenco a registri indipendenti. In questo caso, i dati vengono registrati, possono essere visualizzati dopo un riavvio. Il problema è riprodotto anche sulla base del test:


I registri delle informazioni non possono essere "riparati" manipolando SQL (il valore del separatore è stato impostato in tutte le tabelle), quindi sono stati semplicemente esclusi dall'attributo generale. Dopo diversi giorni di sperimentazione, i tentativi di ripristinare lo spostamento al lavoro falliscono.

A questo punto, decidiamo di disattivare la condivisione dei dati e utilizzare RLS. Quando si imposta la partizione su "non utilizzare", si riscontrano errori "Provider Microsoft OLE DB per SQL Server: CREATE UNIQUE INDEX terminato perché è stata trovata una chiave duplicata per l'indice ...". Cioè, non è facile tornare allo stato prima della separazione. Il problema con gli indici delle tabelle di ricalcolo, le impostazioni per l'archiviazione dei totali e altri. Il fatto è che le righe identiche sono memorizzate nelle tabelle, differendo solo per il valore dell'attributo comune. Quando si elimina un attributo comune, vengono visualizzate voci non univoche. Dovrai eliminare i record non necessari direttamente in MS SQL, qualcosa del genere (per la tabella di ricalcolo):

Usa base;
ALTER TABLE _CRgRecalc1399
ADD ID INT IDENTITY (1,1);
PARTIRE
ELIMINA DA _CRgRecalc1399
DOVE ID< (SELECT MAX(id)
DA _CRgRecalc1399 COME T1
DOVE _CRgRecalc1399._RecorderTRef \u003d T1._RecorderTRef e
_CRgRecalc1399. [_ RecorderRRef] \u003d T1. [_ RecorderRRef] e
_CRgRecalc1399. [_ CalcKindRRef] \u003d T1. [_ CalcKindRRef] e
_CRgRecalc1399. [_ Fld1400RRef] \u003d T1. [_ Fld1400RRef] e
_CRgRecalc1399. [_ Fld1401RRef] \u003d T1. [_ Fld1401RRef] e
_CRgRecalc1399. [_ Fld1402RRef] \u003d T1. [_ Fld1402RRef]
);
PARTIRE
ALTER TABLE _CRgRecalc1399
ID DROP COLUMN;

E solo dopo aver pulito diverse dozzine di tabelle, è possibile disattivare la separazione dei dati. Dopo aver disattivato la separazione, non ci sono problemi.

3. Conclusioni

C'era un barlume di speranza che i problemi di 8.3 fossero risolti. Non erano pigri, controllato su 8.3.4.482 (con modalità di compatibilità disabilitata). Abbiamo osservato un UPP-shke quasi tipico, con cambiamenti nella configurazione solo per il requisito generale. Su questa base di test, la divisione è stata attivata prima dell'inserimento delle informazioni, ad es. la piattaforma doveva scrivere correttamente il valore del separatore su tutte le tabelle, non scrivevano nulla direttamente su MS SQL da soli.

Risultato:

    Viene riprodotto il problema con le query alle tabelle virtuali "Fatturato" e "FatturatoDtKt".

    Il problema preventivo è riproducibile.

    Il problema con la scrittura in registri di informazioni indipendenti è riproducibile.

    Il problema con lo spegnimento della separazione - non puoi liberartene con un clic di un pulsante!

Pertanto, non siamo riusciti a sostituire RLS con un nuovo meccanismo. Questo meccanismo è stato concepito, molto probabilmente, per i servizi cloud e nell'opzione di utilizzare i dati condivisi "in modo indipendente", forse la separazione funzionerà, ma abbiamo bisogno di dati di riferimento comuni. Resta da aspettare fino a quando 1C correggerà gli errori, o ancora meglio, implementerà un meccanismo tipico per dividere le organizzazioni in configurazioni tipiche.

Puntelli generali in 1C 8.3 è un oggetto metadata della piattaforma che consente di utilizzare un attributo per molti oggetti di configurazione (directory, documenti, piani dei conti, ecc.). L'oggetto è stato creato principalmente per facilitare il lavoro di sviluppo e la separazione dei dati.

I dettagli generali sono stati originariamente implementati nella versione 1C 7.7, ma gli sviluppatori non l'hanno immediatamente inclusa nella piattaforma della versione 8. Il meccanismo di dettagli generali è stato introdotto dagli sviluppatori 1C solo nella versione 8.2.14.

È molto conveniente aggiungere requisiti generali in modo da non modificare oggetti standard nella configurazione, spesso li utilizzo insieme.

Dopo aver aggiunto un attributo generale, può essere utilizzato nelle query e visualizzato sotto forma di oggetti: esternamente, non è diverso dai normali oggetti di scena.

L'unica limitazione dei dettagli generali è che non possono essere utilizzati.

Consideriamo le impostazioni e le proprietà di base degli attributi generali che sono diversi dagli altri oggetti di configurazione:

Composizione - un elenco di oggetti a cui verrà utilizzato l'attributo generale, l'impostazione ricorda l'impostazione di un piano di scambio.

Ottieni 267 tutorial video 1C gratis:

Uso automatico - l'impostazione determina se verrà usato un attributo comune per quegli oggetti per i quali è specificata la modalità d'uso "Automatico".

Condivisione dei dati - considereremo questa impostazione separatamente.

Separazione dei dati in 1C usando oggetti di scena comuni

Condivisione dei dati - un meccanismo simile al meccanismo. Tuttavia, le prestazioni di questo meccanismo sono più efficienti e più facili da configurare.

Il meccanismo consente di personalizzare la visualizzazione dei soli elementi che l'utente può vedere. Ad esempio, è possibile differenziare tutti gli oggetti (documenti, directory, ecc.) In cui è stabilita una determinata organizzazione.

Impostazione della separazione dei dati utilizzando dettagli generali 1C

Per l'impostazione nell'attributo generale, è necessario specificare la separazione dei dati - Dividere... Immediatamente dopo aver fatto clic, il sistema offrirà di creare parametri contabili predefiniti:

In questo caso, sarà necessario specificare i parametri della sessione all'avvio del sistema, come farlo, con un esempio che è stato descritto nell'articolo.

Questo completa l'installazione: l'utente avrà accesso solo alle informazioni specificate nei parametri della sessione selezionata.

Esempio di utilizzo di oggetti di scena comuni

Analizziamo l'impostazione degli oggetti di scena generali in 1C 8.3 usando l'esempio di una configurazione di telaio e oggetti di scena Organizzazione:

Ci sono 3 documenti nel sistema in cui è necessario indicare la variabile Organizzazione: questa è la Fattura ricevuta, Fattura spese, Accumulo salariale.

L'installazione è semplice:

  1. Crea un nuovo attributo generale, specifica il tipo - DirectoryLink.Organization.
  2. Nella composizione che inseriamo per i nostri documenti - Uso.

Ecco fatto, l'installazione è finita!

Vediamo il risultato:

Il sistema visualizza l'attributo generale "come proprio": nelle richieste e negli attributi del modulo e in altri punti. Questa è la magia! 🙂

L'attributo generale 1C 8.3 non viene aggiunto

LA CAMPANA

C'è chi legge questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam