Separazione dei dati in bsp. Separazione dei dati in bsp Meccanismo di separazione dei dati 1s

L'elemento separatore 1C serve per ridistribuire le aree della forma nel modo più conveniente per l'utente in al momento. Quasi tutti hanno la capacità di utilizzare i separatori. Utente Windows. Supponiamo che tu abbia creato un modulo semplice con due controlli.

Tradizionalmente, gli elementi di qualsiasi elenco possono essere posizionati sul lato sinistro. Sul lato destro si trovano quindi i dettagli dettagliati proprio di questi punti. Se l'elenco di sinistra è composto da titoli brevi, è logico ridurre questa colonna al minimo. Di conseguenza, in questo caso aumenterà la leggibilità del lato destro. Al contrario, se sono presenti nomi lunghi sul lato sinistro, la colonna dovrebbe essere espansa. I divisori consentono all'utente di personalizzare liberamente la forma semplicemente trascinando il bordo con il mouse.

Questo metodo di controllo viene utilizzato durante la modifica delle tabelle in Word ed Excel. Quando crei un modulo, puoi creare sia un elemento del modulo verticale che orizzontale, un separatore. In generale, è preferibile creare moduli che si adattino visivamente allo schermo.

Separatore 8.2, 8.3 (moduli gestiti)

Non è possibile aggiungere un separatore nella forma gestita 1c; viene aggiunto automaticamente dal programma prima/dopo il campo della tabella

1.Preambolo.

Era necessario organizzare la contabilità di due organizzazioni in un unico sistema di sicurezza delle informazioni. La situazione non è unica, ma è successo che la nostra unità USB da 250 gigabyte, molto non standard, funzionasse piuttosto lentamente, quindi invece di RLS abbiamo deciso di provare la separazione dei dati. Di cosa si tratta è descritto, ad esempio, o. Insomma, se la RLS integra con le condizioni query SQL, quindi il separatore dei dati è una colonna aggiuntiva nelle tabelle a livello DBMS, grazie alla quale il meccanismo di separazione dovrebbe funzionare più velocemente di RLS.

Pertanto, nel database in cui sono stati conservati i record per LLC n. 1, è necessario trasferire le informazioni dal database separato di LLC n. 2 e organizzare il lavoro congiunto. Proprio come nella foto:

I comuni mortali lavorano solo con la propria LLC e il capo contabile a volte esamina i dati per due persone giuridiche. Nella modalità di accesso a entrambe le LLC, è possibile solo leggere i dati, quindi il capo contabile dovrebbe essere in grado di passare in modo interattivo tra le modalità "leggi tutto"/"scrivi solo per un'organizzazione" e selezionare la LLC (ovvero, impostare il valore dei dati comuni) per effettuare, ad esempio, il calcolo dei costi.

2. Attuazione

Piattaforma 8.2.19.90, senza modalità compatibilità. DBMS: MSSQL Server 2008 R2 standard.

Abbiamo creato l'attributo generale OrganizationSeparator di tipo "numero", concordato con la proposta di creare parametri di sessione, compilato la composizione dei dettagli (incluse diverse directory, tutti i documenti, registri di accumulo, contabilità e calcolo). Separazione dei dati - "Indipendente e congiunta". Il valore del parametro di sessione viene impostato da impostazioni standard utente nella procedura SettingSessionParameters nel modulo di sessione:

Organizzazione = UserManagement.GetDefaultValue(chCurrentUser,"PrimaryOrganization");
SessionParameters.OrganizationSeparatorValue = Organization.SeparatorValue;

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

Quando la separazione è disabilitata, quando SessionParameters.OrganizationSeparatorUsage = False, la piattaforma rifiuta di scrivere documenti, bloccandosi con errori come "Errore SDBL: espressione prevista (pos=12)", quindi non è possibile consentire all'utente di scrivere documenti in questa opzione. Per affidabilità, abbiamo creato abbonamenti all'evento “Prima della registrazione” per gli oggetti che fanno parte dell'attributo generale:

IfSessionParameters.OrganizationSeparatorUsage = False Allora
#Se cliente allora
Warning("Impossibile scrivere perché la condivisione dei dati è disabilitata!");
#EndIf
Rifiuta = Vero;
fineSe;

Il nostro piano d'azione era il seguente: preparare la configurazione del ricevitore dell'IS n. 1, impostare i valori dell'attributo generale = 1, caricare i dati dall'IS n. 2, dopo il caricamento, per tutti gli oggetti con un valore vuoto (uguale a 0 ) valore separatore, impostare OrganizationSeparator = 2.

Preparata la configurazione, è sorta la domanda: come impostare il valore dei dettagli generali dei documenti e dei loro movimenti in periodi chiusi, in modo rapido e senza il rischio che volino i numeri di bilancio? Utilizzando il modello a oggetti 1C, è impossibile scrivere un separatore separatamente dall'oggetto, quindi ho dovuto violare il contratto di licenza per uscire e scrivere una query per MS SQL. Poiché ci sono molti oggetti nell'attributo generale e ci sono ancora più tabelle nella tabella per questi oggetti, abbiamo scritto un'elaborazione che genera una query per SQL (per ogni oggetto metadati incluso nel separatore, abbiamo scritto "update" + DB_Name + ".dbo._" + NomeTabella + "set _" + AttributiGeneraliCampo + "= 1";)

Abbiamo inserito il valore, trasferito alcuni dati dall'IS n. 2 e abbiamo iniziato i test.

Il risultato è stato deludente. Innanzitutto, problemi con il registro contabile. Quando la separazione è abilitata, l'analista non è visibile:

Ciò è dovuto al fatto che il registro contabile a livello DBMS è archiviato in più tabelle e non in tutte le tabelle è stato inserito il valore dell'attributo generale (per visualizzare la struttura è stata utilizzata l'elaborazione).


Ok, inseriamo il valore del separatore utilizzando MS SQL e vedremo l'analisi. I report non funzionano più. Si scopre che ci sono problemi con le interrogazioni alle tabelle virtuali del registro contabile “Fatturato” e “FatturatoDtKt”:

(Fld27033 è solo un attributo generale nella tabella del registro contabile)

Il separatore è installato in tutte le tabelle, questo è visibile a livello DBMS, non è chiaro quale possa essere l'errore. Distribuiamo un SCP vuoto standard, apportiamo le modifiche alla configurazione sopra descritte, inseriamo un paio di documenti (in questa opzione, la piattaforma stessa inserisce il valore del separatore in tutte le tabelle del registro contabile), ma gli errori vengono riprodotti. È un male, ma escludiamo i registri contabili dai dettagli generali e continuiamo i test.

Inoltre, si scopre che il meccanismo di spostamento dei registri di calcolo ha smesso di funzionare. Non abbiamo separato i piani per tipologie di calcolo; stiamo cercando di cercare il problema nelle tabelle del registro di calcolo e nei ricalcoli. Controlliamo, inseriamo il valore dei dettagli principali, eseguiamo T&I, senza alcun risultato.

Lungo il percorso, diagnostichiamo il problema durante la scrittura delle informazioni dal modulo elenco a registri indipendenti. In questo caso i dati vengono registrati e possono essere visualizzati dopo un riavvio. Il problema è riprodotto anche sulla base di test:


Non è stato possibile “aggiustare” i registri delle informazioni manipolandoli con SQL (il valore del separatore in tutte le tabelle è impostato), quindi li abbiamo semplicemente esclusi dagli attributi generali. Dopo diversi giorni di sperimentazione, anche i tentativi di ripristinare la funzionalità di prelazione risultano infruttuosi.

A questo punto decidiamo di disattivare la separazione dei dati e utilizzare RLS. Quando si imposta la partizione su "non utilizzare", si verificano gli errori "Provider Microsoft OLE DB per SQL Server: CREATE UNIQUE INDEX terminato perché è stata trovata una chiave duplicata per l'indice...". Cioè, non è così facile tornare allo Stato prima della divisione. Problema con indici di tabelle di conversione, impostazioni per la memorizzazione dei totali e altro. Il fatto è che le tabelle memorizzano righe identiche, che differiscono solo per il valore dell'attributo generale. Quando elimini un attributo comune, vengono visualizzati record non univoci. Dovrai eliminare i record non necessari direttamente in MS SQL, qualcosa del genere (per la tabella di conversione):

Usa la base;
ALTER TABLE_CRgRecalc1399
ADD id INT IDENTITY(1,1);
ANDARE
ELIMINA DA_CRgRecalc1399
DOVE id< (SELECT MAX(id)
DA _CRgRecalc1399 COME T1
DOVE _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
DROP COLONNA id;

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 fossero risolti nella versione 8.3. Non siamo stati troppo pigri, l'abbiamo controllato su 8.3.4.482 (con modalità compatibilità disabilitata). Abbiamo esaminato una centralina quasi standard, con modifiche nella configurazione solo per dettagli generali. Su questa base di test, la separazione è stata abilitata prima dell'inserimento delle informazioni, ad es. la piattaforma doveva scrivere correttamente il valore del separatore in tutte le tabelle; non scrivevano nulla direttamente in MS SQL.

Risultato:

    Viene riprodotto il problema con le interrogazioni sulle tabelle virtuali "Fatturato" e "FatturatoDtKt".

    Si ripropone il problema della repressione.

    Viene riprodotto il problema con la scrittura su registri di informazioni indipendenti.

    Il problema con la disattivazione della separazione è che non puoi eliminarla con un semplice clic!

Pertanto, non siamo stati in grado di sostituire RLS con un nuovo meccanismo. Questo meccanismo è stato apparentemente concepito per servizi cloud, e nella possibilità di utilizzare i dati condivisi “in modo indipendente”, forse la divisione funzionerà, ma abbiamo bisogno di dati anagrafici comuni. Non ci resta che attendere che 1C corregga gli errori o, meglio ancora, implementi un meccanismo standard di separazione per organizzazione nelle configurazioni standard.

Meccanismo di condivisione dei dati ti consente di archiviare dati da diverse organizzazioni indipendenti in una base informativa.

Ciò è possibile perché i dettagli generali degli oggetti di configurazione possono essere utilizzati non solo come “la stessa proprietà che hanno tutti gli oggetti”, ma anche come identificatore che i dati appartengono a una delle diverse aree indipendenti. Ciò può essere spiegato con il seguente esempio.

Supponiamo che nella configurazione sia presente un attributo generale "Organizzazione". Ciò significa (semplificato) che ogni directory, documento o altro oggetto di configurazione avrà anche un attributo “Organizzazione”.

Inoltre, qualsiasi utente della base di informazioni ha accesso a tutti i dati archiviati in questo database, indipendentemente da quale organizzazione sia indicata, ad esempio, in un particolare documento.

Ora indichiamo che l'attributo generale "Organizzazione" fungerà da separatore.

Successivamente (semplificando) verranno create diverse aree dati indipendenti nella base informativa, ciascuna delle quali memorizzerà i dati solo per una specifica organizzazione:

Ora, entrando nel programma, l'utente non avrà accesso a tutte le informazioni presenti nella base informativa, ma solo ai dati della “sua” area, in questo caso a documenti, libri di consultazione, ecc. della sua organizzazione.

Un'altra opzione per utilizzare questo meccanismo è possibile quando nella base informativa sono presenti diverse aree dati indipendenti e, insieme a queste, ci sono dati disponibili per tutti gli utenti del programma. Contengono, ad esempio, un elenco di banche, uguale per tutte le organizzazioni.

In questo caso l'utente ha accesso alla “sua” area dati e all'area dati non condivisa, comune a tutti gli utenti.

Il meccanismo di condivisione dei dati è abbastanza flessibile e universale:

  • ti permette di utilizzare non uno, ma più separatori;
  • esistere diverse modalità utilizzo dei dati condivisi; differiscono nel modo in cui viene gestita la situazione quando il valore delimitatore non è specificato;
  • l'uso di un attributo comune come separatore può essere controllato durante il funzionamento del programma dal linguaggio integrato senza modificare la configurazione; questa è chiamata divisione condizionale.

Nel sistema 1C:Enterprise è possibile conservare i record di più imprese in un'unica base informativa. A questo scopo viene utilizzato un separatore contabile.

L'utilizzo del separatore contabile è specificato nella configurazione. Se la configurazione prevede l'utilizzo di un separatore contabile, allora nella tabella dei conti è possibile selezionare uno specifico valore di separatore contabile in base al quale verranno emessi i totali contabili.

Per impostare il valore del separatore contabile utilizzare la voce "Separatore di conti" menu "Azioni" o il pulsante corrispondente della barra degli strumenti. In questo caso sullo schermo appare una finestra di dialogo per impostare il valore del separatore contabile.

Nel campo "Valore separatore contabile"È possibile specificare un valore separatore contabile specifico. La modalità di inserimento del valore dipende dal tipo di separatore contabile definito in configurazione. Di norma, questo è un libro di consultazione. In questo caso, per selezionare un valore, utilizzare il pulsante di selezione e selezionare il valore desiderato dall'elenco dei valori della directory.

Pulsante "Valore vuoto" permette di cancellare il valore inserito del separatore contabile, cioè di impostare un valore vuoto. Ciò ha senso se, oltre a specifici valori di separatore contabile, nelle transazioni viene utilizzato anche un valore vuoto.

Casella di controllo "Per tutti" permette di impostare la modalità di visualizzazione dei totali per tutti i valori del separatore contabile nel totale.

Per impostare i valori selezionati, fare clic sul pulsante "OK". Per rifiutare di impostare i valori, utilizzare il pulsante "Cancellare".

Dopo aver impostato i valori selezionati, la scheda dei conti visualizzerà i totali per uno specifico valore del separatore contabile o per un valore vuoto o per tutti i valori del totale, a seconda dell'opzione selezionata nella finestra di dialogo.

Attenzione! Questa è una versione introduttiva della lezione, i cui materiali potrebbero essere incompleti.

Accedi al sito come studente

Accedi come studente per accedere ai materiali scolastici

Linguaggio di programmazione interno 1C 8.3 per programmatori principianti: formato in 1C

Quando si programma in 1C, spesso è necessario visualizzare (negli stessi report) i valori vari tipi(stringhe, date, numeri...). Ciascuno dei valori ha rappresentazioni diverse.

Ad esempio, la stessa data "01/01/2005" può essere rappresentata come una stringa come:

  1. "01.01.2005"
  2. "1 gennaio 2005"
  3. "01.01.05"

Queste sono tutte rappresentazioni di stringhe dello stesso valore, d Per la cui formazione viene utilizzata una funzione speciale in 1C Formato.

Utilizzando la funzione Formato in 1C

Disabilita il raggruppamento di cifre

Dobbiamo emettere il numero 10000.

Se scriviamo:

Una stringa di formato è generalmente composta da due parti separate da un segno di uguale. A sinistra di uguale c'è il nome del parametro da impostare (guarda nella guida o negli esempi) e a destra c'è il valore di questo parametro.

Nell'esempio sopra, la stringa di formato "HH=0" ha il parametro HH e il valore 0. Questa combinazione annulla il raggruppamento delle cifre del numero. E, come puoi vedere, ora viene emesso 10000.

Emette gli zeri iniziali

Un'altra attività comune è stampare gli zeri iniziali prima di una cifra. Ad esempio, supponiamo che tu voglia visualizzare il numero 5 con uno zero iniziale, cioè nella forma “05”:

Rapporto(Formato(5, "CHZ=2; CHVN=" ) ) ;

// emette 05

Diamo un'occhiata alla stringa di formato "CC=2; CHVN=". È costituito da due stringhe di formato separate da un punto e virgola. Diamo un'occhiata a ciascuno di essi separatamente. La riga "BC=2" specifica numero totale

visualizzate le cifre decimali delle parti intere e frazionarie. Pertanto, il numero totale di posizioni che il numero occuperà durante l'output sarà pari a 2. La riga "ChVN=", come segue dall'help, indica alla funzione il formato che se il numero non raggiunge la lunghezza dichiarata (come nel nostro caso, perché abbiamo indicato 2 posizioni, e 5 ne occupa solo una), allora inizia dovrebbero essere usati gli zeri. La particolarità di questa stringa di formato è che ha solo il nome del parametro e un segno di uguale, ma non ha valore. stai leggendo versione di prova

lezione, si trovano le lezioni complete.

La combinazione di due stringhe di formato dà il risultato di cui abbiamo bisogno, “05”, invece di “5”.

Modifica del separatore tra la parte intera e quella frazionaria

Supponiamo di dover visualizzare i numeri frazionari separati da un asterisco anziché da un punto. Cioè, in modo che 25.46 venga restituito come "25*46": Formato La stringa di formato è il parametro DF e il valore dddd, che indica le funzioni

stampa una lunga rappresentazione del giorno della settimana (nota quante "d" contiene).

Rappresentazione della data e del mese

La descrizione del mese per data viene visualizzata come segue: Rapporto(Formato("20050101" , "DF=MMMM" ) ) ;

// stamperà gennaio

La stringa di formato ha lo stesso parametro DF del caso precedente. Ma il significato è diverso. Ora è uguale a MMMM.

Fai il test

Inizia la prova

1. Verrà restituito Format("19050505", "DF=MMMM").

2. Formattare la stringa modificando il separatore frazionario e intero in ^

3. Affinché la funzione Format restituisca "00005" invece di 5, è adatta una stringa di formato

4. Affinché la funzione Format restituisca "10000" anziché 10.000, è adatta una stringa di formato