LA CAMPANA

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

Nell'articolo precedente, abbiamo aggiunto un props generale a tutte le directory della nostra configurazione, per sapere chi ha creato questo oggetto directory. Ora creeremo un abbonamento all'evento e indicheremo con quali informazioni riempire questo prop.

In questo rango, ogni volta prima della registrazione dell'oggetto, riscriveremo l'autore dell'oggetto, è auspicabile, ovviamente, indicare quando ciò è accaduto, aggiungeremo anche la data di registrazione all'autore.

Procedura Salva automaticamente l'autore prima della registrazione (Sorgente, Elimina) Esporta //Inserire il campione in posizione. Una fonte. AutoreObktu = NomeUtente () + " ; "+ stringa (data corrente ()); EndProcedure

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

Prima di tutto, utilizzando gli attributi generali, puoi aggiungere l'attributo "Commento", l'attributo "autore" e altri dettagli necessari a tutti i documenti nella configurazione.

I dettagli generali hanno un altro parametro interessante” Separazione dei dati”. Questo meccanismo ci permette di definire i dati che vogliamo mostrare all'utente. Ad esempio, affinché nessuno dei manager conosca tutti i clienti dell'azienda, gli mostreremo solo quei clienti 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.

Dopodiché, non ci resta che impostare i parametri di sessione nel modulo di sessione:

Facciamo un esempio di come si presenta la directory delle controparti senza utilizzare la "Condivisione dati" e con essa:

Nessuna separazione

Con divisione

Si prega di notare 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, che mostra agli utenti solo quei documenti che si riferiscono alla rispettiva organizzazione.

Abbiamo utilizzato il meccanismo dei parametri di sessione, capiamo brevemente di cosa si tratta. In effetti, i parametri di sessione sono variabili globali che vengono impostate all'avvio del sistema. Di norma, ciò accade nel "Modulo di sessione", si noti che i parametri di sessione vengono creati esclusivamente in modo programmatico.

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

Di conseguenza, per modificare i parametri della sessione, l'utente deve uscire ed entrare nuovamente nel programma.

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

Consente all'utente di consentire 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 certo carico al lavoro del database.

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

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

In questo modo, puoi organizzare diversi elenchi di utenti per diverse parti del database.

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

Separazione condizionale 1C

La separazione condizionale 1C consente di abilitare e disabilitare il separatore in base ai dati del database. Pertanto, puoi 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 separatore comune - separazione condizionale 1C - che sarà responsabile di 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 allora sarà possibile selezionarlo.

1. Preambolo.

Era necessario organizzare la contabilità di due organizzazioni in un unico IS. La situazione non è unica, ma è successo che il nostro UPP da 250 gigabyte fortemente atipico funzionava piuttosto lentamente, quindi invece di RLS abbiamo deciso di provare la condivisione dei dati. Di cosa si tratta è descritto, ad esempio, o. In breve, se RLS integra con condizioni Query SQL, quindi il separatore di dati è una colonna aggiuntiva nelle tabelle a livello di DBMS, per cui il meccanismo di separazione dovrebbe funzionare più velocemente di RLS.

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

I comuni mortali lavorano solo con la loro LLC e il capo contabile a volte esamina i dati su due entità legali. 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 (ovvero, imposta il valore di un variabile comune) per condurre, ad esempio, il calcolo dei costi.

2. Attuazione

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

Abbiamo creato un attributo comune OrganizationSeparator del tipo "numero", concordato con la proposta di creare parametri di sessione, compilato la struttura dell'attributo (inclusi diversi libri di riferimento, tutti i documenti, registri di accumulo, contabilità e calcolo). Condivisione dei dati - "Indipendente e condiviso". Il valore del parametro di sessione è impostato da impostazioni standard utente nella procedura SetSessionParameters nel modulo di sessione:

Organization = UserManage.GetDefault Value (glCurrentUser, "MainOrganization");
SessionParameters.OrganizationSeparatorValue = 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.OrganizationSeparatorUsage = False, la piattaforma si rifiuta di scrivere documenti, fallendo con errori come "Errore SDBL: espressione prevista (pos = 12)", quindi l'utente non può scrivere documenti in questa opzione. Per affidabilità, abbiamo creato sottoscrizioni all'evento "Prima della registrazione" per gli oggetti inclusi nell'attributo generale:

Se SessionParameters.OrganizationSeparatorUsage = False Then
# Se il cliente allora
Avvertimento ("Impossibile scrivere, perché la condivisione dei dati è disabilitata!");
#Finisci se
Rifiuto = Vero;
Finisci se;

Il nostro piano d'azione era il seguente: prepariamo la configurazione-ricevitore di IB # 1, impostiamo i valori della variabile comune = 1, carichiamo i dati da IB # 2, dopo aver caricato per tutti gli oggetti con un vuoto (uguale a 0) valore separatore, imposta OrganizationSplitter = 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 attraverso il modello a oggetti 1C, quindi ho dovuto rompere contratto di licenza esci e scrivi una query per MS SQL. Poiché ci sono molti oggetti nell'attributo generale e ci sono ancora più tabelle negli zigomi per questi oggetti, abbiamo scritto un'elaborazione che genera una query per SQL (per ogni oggetto di metadati incluso nel separatore, abbiamo scritto "aggiorna" + DB_Name + ".dbo._" + TableName + "set _" + FieldGeneralProps + "= 1";)

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

Il risultato è stato deludente. In primo luogo, ci sono problemi con il registro contabile. Quando la suddivisione è abilitata, l'analista non è visibile:

Ciò è dovuto al fatto che il registro contabile a livello di DBMS è memorizzato 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 del registro contabile)

Il separatore è impostato in tutte le tabelle, questo è visibile a livello di DBMS, non è chiaro quale possa essere un errore. Espandiamo un tipico SCP vuoto, apportiamo le modifiche sopra descritte nella configurazione, 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. Male, ma escludiamo i registri contabili dagli oggetti di scena generali, continuiamo a testare.

Inoltre, risulta che il meccanismo di prelazione 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, inseriamo il valore dell'attributo principale, facciamo T&I - senza alcun risultato.

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 viene riprodotto anche sulla base di prova:


I registri delle informazioni non potevano 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 verificano errori "Fornitore 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 la memorizzazione dei totali e altro. Il fatto è che nelle tabelle sono memorizzate righe identiche, che differiscono solo per il valore dell'attributo comune. Quando si elimina un attributo condiviso, 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
AGGIUNGI id INT IDENTITÀ (1,1);
andare
ELIMINA DA _CRgRecalc1399
DOVE id< (SELECT MAX(id)
DA _CRgRecalc1399 AS T1
WHERE _CRgRecalc1399._RecorderTRef = T1._RecorderTRef e
_CRgRecalc1399. [_ RecorderRRef] = T1. [_ RecorderRRef] e
_CRgRecalc1399. [_ CalcKindRRef] = T1. [_ CalcKindRRef] e
_CRgRecalc1399. [_ Fld1400RRef] = T1. [_ Fld1400RRef] e
_CRgRecalc1399. [_ Fld1401RRef] = T1. [_ Fld1401RRef] e
_CRgRecalc1399. [_ Fld1402RRef] = T1. [_ Fld1402RRef]
);
andare
ALTER TABLE _CRgRecalc1399
ID COLONNA DROP;

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 l'8.3 i problemi fossero stati risolti. Non erano pigri, controllati su 8.3.4.482 (con modalità di compatibilità disabilitata). Abbiamo esaminato un UPP-shke quasi tipico, con modifiche alla configurazione solo per i requisiti generali. Su questa base di test, la divisione è stata attivata prima dell'inserimento delle informazioni, ad es. la piattaforma ha dovuto scrivere correttamente il valore del separatore su tutte le tabelle, non hanno scritto nulla direttamente su MS SQL da soli.

Risultato:

    Il problema con le interrogazioni alle tabelle virtuali "Fatturato" e "Fatturato DtKt" è riproducibile.

    Il problema della prelazione è riproducibile.

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

    Il problema con la disattivazione della separazione: non puoi liberartene con il semplice tocco di un pulsante!

Pertanto, non siamo riusciti a sostituire RLS con un nuovo meccanismo. Questo meccanismo è stato concepito, a quanto pare per servizi cloud, e nel caso di utilizzo di dati condivisi "in modo indipendente", forse la separazione funzionerà, ma abbiamo bisogno di dati di riferimento comuni. Resta da aspettare che 1C risolva gli errori o, ancora meglio, implementi un meccanismo tipico per la suddivisione per organizzazioni in configurazioni tipiche.

Oggetti di scena generali in 1C 8.3 è un oggetto metadati 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 dello sviluppatore e la separazione dei dati.

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

È molto comodo aggiungere requisiti generali per non modificare gli oggetti standard nella configurazione, li uso spesso insieme.

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

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

Consideriamo le impostazioni e le proprietà di base degli attributi generali, che sono diverse da altri oggetti di configurazione:

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

Ottieni gratuitamente 267 tutorial video 1C:

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

Condivisione dei dati- considereremo questa impostazione separatamente.

Separazione dei dati in 1C utilizzando un puntello comune

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, puoi delimitare tutti gli oggetti (documenti, directory, ecc.) in cui è stabilita una determinata organizzazione.

Impostazione della separazione dei dati utilizzando i dettagli 1C generali

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

In questo caso, all'avvio del sistema, sarà necessario specificare i parametri di sessione, come fare, con un esempio descritto nell'articolo.

Questo completa la configurazione: l'utente avrà accesso solo alle informazioni specificate nei parametri di sessione selezionati.

Un esempio di utilizzo di oggetti di scena comuni

Analizziamo l'impostazione delle props generali in 1C 8.3 utilizzando l'esempio di una configurazione di telaio e props Organizzazione:

Nel sistema sono presenti 3 documenti in cui è necessario indicare la variabile Organizzazione: si tratta della Fattura Scontrino, Fattura Spesa, Maturazione Stipendio.

La configurazione è semplice:

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

Ecco fatto, l'installazione è finita!

Vediamo il risultato:

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

Non viene aggiunto il requisito generale 1C 8.3

LA CAMPANA

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