Procesul de semnare a fost întrerupt de utilizator. Cine a efectuat analiza jurnalului? Sistemul dă o eroare la conectarea la platforma electronică

Selecția pe formulare gestionate în 1C 8.3

Articolul va discuta opțiunile de instalare a selecției în formularele gestionate 1C 8.3. Selecția pentru o listă dinamică poate fi setată static sau dinamic, în interfața cu utilizatorul sau configurator. Vom lua în considerare toate opțiunile de selecție de mai jos.

  • Selectarea setărilor în configurator

Setarea selecției în modul utilizator

O listă dinamică, spre deosebire de un tabel sau arbore de valori, este o soluție mai potrivită pentru implementarea formularelor care conțin orice liste, deoarece lista dinamica oferă cea mai largă gamă de instrumente pentru lucrul cu selecția, gruparea câmpurilor și sortarea. Această selecție poate fi setată atunci când lucrați în modul utilizator sau configurator, principiul este același.

Pentru a configura selecția în modul întreprindere, trebuie să apelați comanda „Personalizați lista”.

Se va deschide o fereastră.


Fila „selecție” prezintă o listă de câmpuri care se află în lista curentă. Selectați câmpurile din listă după care vom filtra. Acest lucru se poate face dublu click sau folosind tragere și plasare cădere brusca.


Setăm tipul și valoarea comparației, facem clic pe „Finalizare editare”, selecția este setată.


Când configurați selecția în modul întreprindere, așa-numitele câmpuri de selecție rapidă sunt create automat în formularul de listă.


Pentru ca platforma 1C să creeze automat câmpuri de selecție rapidă, atunci când dezvoltați un formular în configurator, trebuie să specificați un grup de setări de utilizator.


Această selecție va fi salvată numai pentru utilizatorul curent, ceea ce permite personalizarea flexibilă a listei dinamice. Totuși, dacă sarcina este să facem o selecție fixă ​​pentru o listă specifică pentru toți utilizatorii sistemului, o putem rezolva doar prin configurator.

Selectarea setărilor în configurator

Lucrând în configurator, putem seta două tipuri de selecție dinamică a listei – fixă ​​și dinamică. Selecția fixă ​​poate fi configurată o dată, dinamică sau programatică poate fi setată în funcție de orice date din sistem.

Principiul setării unei selecții fixe în configurator nu este diferit de setarea acesteia în modul utilizator descris mai sus. Pentru a seta selecția, trebuie să deschidem setările listei dinamice.


Se va deschide o fereastră.


Selecția este setată în același mod ca în modul utilizator.

Opțiunea „Include în setările utilizatorului” determină dacă selecția setată în configurator va fi disponibilă în modul utilizator prin elementul de meniu „Personalizare listă”.


Selectare dinamică (software).

Adesea este nevoie să setăm selecția în mod programatic, de exemplu, când deschidem un formular de selecție, când trebuie să deschidem formă controlată cu selecție. Un parametru este transmis formularului și selecția este setată pe baza acestui parametru. Un exemplu comun în acest sens este selectarea elementelor de director de către proprietar.

Metode

Dacă configurația în curs de dezvoltare conține subsistemul BSP „Funcționalitate de bază”, selecția software din lista dinamică poate fi instalată folosind metoda standard:

GeneralPurposeClientServer.SetDynamicListSelectionElement()

Semnătură aceasta metoda:

DynamicList Type: DynamicList – Lista în care doriți să setați selecția.

Numele domeniului Type: String – Câmpul prin care doriți să setați selecția.

RightValue Tip: Arbitrar – Valoare de selecție (Opțional. Valoare implicită: Nedefinit. Notă: Dacă treceți Nedefinit, valoarea nu va fi modificată).

ViewComparison Tip: DataComposition Tip de comparație – Condiție de selecție.

Performanţă Tip: String – Reprezentarea unui element de compoziție de date (Opțional. Valoare implicită: Nedefinită. Dacă este specificat, este tipărit doar indicatorul de utilizare cu reprezentarea specificată (nu este tipărită nicio valoare). Trebuie să fie transmis un șir gol pentru a șterge, astfel încât valoarea să fie imprimată din nou.)

Utilizare Tip: Boolean – Semnal pentru a utiliza această selecție (Opțional. Implicit: nedefinit).

Modul de afișare Tip: ItemDisplayModeDataCompositionSettings – Cum este afișată această selecție pentru utilizator. Valori posibile:

  • Modul de afișare a elementelor Setări de aspect de date. Acces rapid – În grup setari rapide deasupra listei.
  • Element Display ModeData Layout Settings Normal – În setările listei (în submeniul Mai multe).
  • ElementDisplayModeDataCompositionSettings.Inaccessible – Împiedică utilizatorul să modifice această selecție.

IdentifierUserSettings Tip: șir – identificator unic pentru această selecție (Folosit pentru a comunica cu setările utilizatorului).

Pentru a elimina o valoare de selecție, trebuie să utilizați metoda standard:

General PurposeClientServer. RemoveGroupElementsSelectionDynamicList()

Semnătura acestei metode:

DynamicList Tip: DynamicList – atribut de formular pentru care doriți să setați selecția.

Numele domeniului Tip: String – numele câmpului de aspect (nu este utilizat pentru grupuri).

Performanţă Tip: String – Reprezentarea unui câmp de aspect.

Dacă nu există BSP în sistem, selecția poate fi setată independent folosind obiectul DataComposition Field.

Element de selecție = List.Selection.Elements.Add(Type("DataComposition Selection Element"); Selection Element.LeftValue = NewDataCompositionField("Nume"); Selection Element.Comparison Type = DataComposition Comparison Type.Equal; Selecție Element.DisplayMode = ElementDisplayModeDataCompositionSettings.QuickAccess; // Element de selecție opțional. RightValue = "Ivanov";

Această selecție va selecta rânduri în care valoarea „Nume complet” = „Ivanov”.

Pentru a utiliza logic „ȘI”, „SAU”, „NU” este destinat tipului de date DataCompositionSelectionElementGroup

Selection Group = List.Selection.Elements.Add(Type("Grup de elemente de selecție de compoziție de date")); SelectionGroup.GroupType = DataCompositionSelectionElementGroupType.GroupOR; Selection Element = Selection Group. Elements. Add(Type("Data Composition Selection Element"); Selection Element.LeftValue = NewDataCompositionField("Nume"); Selection Element.Comparison Type = DataComposition Comparison Type.Equal; Selection Element.RightValue = "Ivanov"; Selection Element = Selection Group. Elements. Add(Type("Data Composition Selection Element"); Selection Element.LeftValue = NewDataCompositionField("Nume"); Selection Element.Comparison Type = DataComposition Comparison Type.Equal; SelectionElement.RightValue = "Petrov";

Această selecție va selecta rânduri în care valoarea „Nume complet” = „Ivanov” sau „Petrov”.

Selectarea într-o listă dinamică se poate face și prin modificarea textului solicitării listei dinamice. Această opțiune funcționează atunci când lista dinamică este realizată printr-o „cerere personalizată”.


Pentru a face acest lucru, adăugați condiția „UNDE ESTE ADEVĂRAT” la textul interogării...


După cum puteți vedea, această abordare este mai compactă în ceea ce privește scrierea codului. Cu cât sunt mai complexe condițiile de selecție în partea tabulară pe care dorim să o setăm, cu atât mai greoaie va fi opțiunea de utilizare a selecției prin Elementul de selecție al compoziției datelor. Cu toate acestea, exemplul cu modificarea textului solicitării are dezavantajele sale - această implementare nu este rezistentă la modificările de cod. De exemplu, ați făcut o astfel de implementare și ați uitat, dar dacă pe viitor doriți să modificați textul solicitării adăugând un operator după UNDERE (COMANDĂ, GRUP), trebuie să vă amintiți că în codul programului Există:

List.QueryText = List.QueryText + " Și DirectoryUsers.Full Name V(""Ivanov"",""Petrov"")";

Dacă acest lucru nu este luat în considerare, va apărea o eroare, dar pentru a evita acest lucru, o puteți schimba cu o altă implementare. Adăugăm următoarea condiție la textul cererii:

WHERE (NU &SelectionInstalled SAU DirectoryUsers.Name IN (&PermittedName))

List.Parameters.SetParameterValue("SelectionSet", Nume complet.Cantitate() > 0); List.Parameters.SetParameterValue(„Nume complet permis”, Nume complet);

Aici numele complet este o matrice.

După cum puteți vedea, 2 linii de cod față de 10. Ce metodă să alegeți depinde de sarcina specifică a aplicației.

Mulți participanți la achiziții, indiferent de experiență, se confruntă cu problema funcționării corecte pe platforma electronică de tranzacționare. Aceste erori pot fi descoperite în orice moment, inclusiv în timpul tranzacționării electronice.

Consecințele pot fi foarte diferite, și anume:

  • Cererea de participare la concurs nu a fost depusă la timp
  • Licitație electronică pierdută
  • Contractul de stat nu a fost semnat la timp

Cele mai frecvente trei probleme atunci când lucrați cu semnături electronice

  1. Certificatul de participant la achiziție nu este afișat pe platforma electronică
  2. Semnătura electronică nu semnează documente

De fapt, pot exista mult mai multe erori, dar le vom analiza pe principalele și cauzele lor și, de asemenea, le vom indica moduri posibile depanare.

Cel mai important lucru este să vă amintiți asta pentru funcţionare corectă semnătura electronică trebuie utilizată într-un browser Internet Explorer nu mai mică decât versiunea 8 și, de preferință, nu mai mare de 11 (cu versiunea 11 nu există nicio garanție a funcționării stabile a semnăturii).

Certificatul cheii de semnare nu este vizibil pe site atunci când încercați să vă conectați la sistem

În acest caz, eroarea este cauzată de mai multe motive, și anume:

  • Configurare incorectă a certificatului cheii de semnare
  • Browserul de internet nu este configurat corect
  • Lipsește certificatul rădăcină al autorității de certificare

Cum se rezolvă o problemă?

În primul rând, trebuie să vă asigurați că ați instalat corect partea publică a certificatului în cele personale prin CIPF (Crypto Pro). În același timp, versiunea programul instalat potrivit pentru tipul dvs. de sistem de operare.

Apoi, în setări motor de cautare Explorer trebuie să adauge adrese de site la site-urile de încredere și să activeze toate controalele ActiveX.

Semnătura electronică dă o eroare la semnarea documentelor

De obicei, această eroare apare într-un număr de cazuri:

  • Licența programului CryptoPro a expirat
  • Media cu un certificat diferit este inserat

Cum să o repar?

Pentru a face acest lucru, trebuie să obțineți o nouă licență contactând Centrul de Certificare. După ce licența a fost obținută cu succes, trebuie să lansați CryptoPro și să intrați număr de serie licențe.

În al doilea caz, trebuie să verificați toate containerele închise (media) introduse în conectorul USB al computerului și să verificați dacă a fost selectat certificatul corect.

Sistemul dă o eroare la conectarea la platforma electronică

Această eroare poate fi cauzată de o combinație a motivelor menționate mai sus. După cum arată practica, o astfel de eroare apare în principal din cauza unei biblioteci Capicom instalate incorect. Vă recomandăm să verificați dacă biblioteca este instalată pe computer și să acordați atenție necesității copierii 2 fișiere de sistem cu extensia .dll într-unul dintre folderele Windows, când utilizați un sistem pe 64 de biți.

Pentru a evita astfel de greșeli, înainte de a instala o semnătură electronică, citiți despre instalarea și configurarea unei semnături electronice sau comandați informații despre emiterea și configurarea unei semnături electronice de la compania noastră.

Tehnologiile COMET vă permit să organizați actualizarea datelor pe o pagină fără intervenția utilizatorului.

Chaturile, poșta electronică și panourile de administrare cu mai mulți utilizatori sunt departe de a fi lista plina, unde se aplică.

În această serie de articole sunt descrise în detaliu numeroase puncte subtile și soluții la probleme comune.

Ce este COMET?

COMET (sau „server push”) este o metodă de transfer de date de la server la client, la inițiativa serverului.

De exemplu, aveți un magazin electronic, iar managerul poate urmări tranzițiile clienților.
COMET permite managerului să întrebe imediat, online, clientul despre ceva și să ofere o opțiune interesantă.

„Inițiat de server” înseamnă că clientul însuși nu solicită serverul, este pur și simplu pe pagină.

Cel mai vechi exemplu de COMET este chatul. O persoană rămâne pur și simplu pe pagină și primește mesaje noi.

COMET este folosit și în panourile de administrare pentru a notifica alți vizitatori despre modificări, pentru editarea în comun a documentelor etc.

Metode de implementare

Există multe modalități de implementare a COMET. Au o varietate de caracteristici, avantaje și dezavantaje.
Există două clase principale.

Prin mesaj la cerere

Browserul primește fiecare eveniment de pe server cu o solicitare separată. Există două metode principale aici.

  1. Sondaj frecvent
  2. Sondaj lung

Pentru a reduce numărul de conexiuni și latența necesare, mesajele de eveniment sunt împachetate în pachete speciale, „datagrame”.
De exemplu, un mesaj XML poate arăta astfel:

Vasia Buna ziua! prelucrare Procesare finalizată

Data viitoare când vă conectați, browserul primește imediat întregul pachet de evenimente până în prezent.

Browserul menține o conexiune constantă la server, așa-numitul „canal”, și primește evenimente prin intermediul acestuia.

Canalul de comunicare se întrerupe din când în când:

  • astfel încât proxy-ul să nu creadă că conexiunea a expirat și o întrerupe pentru noi
  • pentru a șterge memoria din mesajele vechi

În plus, pentru a măsura întârzierile de rețea și pentru a monitoriza conexiunile, serverul poate trimite periodic pachete ping pe acest canal.

Modalități de bază de a menține o conexiune persistentă:

  1. IFrame infinit
  2. XMLHTTPRequest, interactiv
  3. Solicitare XMLHTTP în mai multe părți
  4. Sursa evenimentului

Le veți găsi în alte articole din această secțiune.

Probleme comune conexiunilor persistente

Protocolul HTTP a fost conceput inițial astfel încât o solicitare să returneze o singură informație. Dar ne dorim multe, de aici niște dificultăți...

Buffering proxy

Acest lucru este rar, dar un proxy poate stoca o anumită cantitate de date înainte de a le transmite clientului. De exemplu, primiți și trimiteți răspunsuri în blocuri de 2K. În acest caz, mesajele vor rămâne pe proxy și vor aștepta până când vor ajunge la 2K (sau oricare ar fi dimensiunea bufferului) octeți și abia atunci vor fi transmise clientului.

Soluția este să adăugați 2K spații la fiecare mesaj.

Nu se știe dacă această problemă vă va afecta. Sper că nu, dar ține cont de bufferingul proxy motiv posibil Plângerile utilizatorilor sunt obligatorii.

Nu se poate GZIP

Un IFrame care servește la transmiterea mesajelor NU ar trebui să fie comprimat cu gzip/deflate. Cu alte cuvinte, pentru oficial Postați adrese URL compresia trebuie dezactivată.

Comprimarea activată înseamnă că browserul așteaptă să se termine descărcarea, apoi o decomprimă și o afișează utilizatorului. În cazul nostru, acest lucru este strict contraindicat și nu puteți comprima separat bucăți dintr-o pagină (mesaj).

Aceasta este o consecință nefericită a naturii de hacker a iframe-ului. De exemplu, în sondajul lung, compresia merge bine, deoarece evenimentele nu fac parte din aceeași pagină.

Buffering pentru pagina serverului

Nu uitați să dezactivați tamponarea serverului. În Apache/PHP - dezactivați tamponarea de ieșire și activați ob_implicit_flush:

În timp ce (@ob_end_flush()) () ob_implicit_flush(1); // și bineînțeles, eliminați limita timpului de execuție a scriptului set_time_limit(0);

COMET: sondare frecventă VS conexiune persistentă

Ca întotdeauna, atunci când scrieți o aplicație web, se pune problema alegerii unei arhitecturi. Pe de o parte, soluțiile pentru conexiuni lungi (toate, cu excepția sondajelor frecvente) oferă notificare rapidă. Pe de altă parte... O conexiune lungă este întotdeauna mai bună decât sondajele frecvente?
Soluția cu conexiuni lungi este aparent mai optimă, dar este mult mai complicată și are o serie de caracteristici.

  1. Implementarea unei conexiuni lungi, de regulă, complică arhitectura. Poate că există o soluție mai simplă?
  2. Un număr de servere web sunt slab optimizate pentru un număr mare de conexiuni lungi. De exemplu, se folosesc fire sau procese care consumă o cantitate fixă ​​de resurse și nu le eliberează până la sfârșitul conexiunii. La nivelul sistemului de operare, problema este rezolvată prin utilizarea kqueue (FreeBSD) sau epoll (Linux). la nivel de server web, puteți utiliza
    1. Eveniment Apache MPM pentru apache 2.2 (MPM experimental și limitat, mânere speciale de thread-uri socket-uri Listening și Keep-Alive)
      nu funcționează corect cu mod_perl/mod_php
    2. Jetty (Java) / Twisted (Python), nginx și alte servere specializate cu un fir/proces pentru mulți clienți.

    Arhitectura actuală a serverului va gestiona conexiuni lungi? Răspunsul nu este evident pentru sute/mii de conexiuni simultane, dar până la, să zicem, 100 de conexiuni în orice arhitectură este bine.

  3. Cât timp rămân utilizatorii pe aceeași pagină? În timpul tranzițiilor, cel mai probabil conexiunea va trebui redeschisă în orice caz.
  4. Dacă întârzierile livrării evenimentelor sunt acceptabile, atunci poate că vor fi suficiente sondaje frecvente?

Model COMET clasic (independent de transport).

Să ne uităm la interacțiunea client-server „din vedere de pasăre”, deasupra detaliilor de transfer de date, transporturi etc. De exemplu, acest lucru se realizează în motorul specializat server-push lightstreamer.

Conexiunile la server sunt împărțite în două tipuri

  1. Conexiune de control - conexiuni de control prin care clientul trimite cereri către server. Acestea sunt solicitări AJAX normale prin XMLHTTPRequest.
  2. Push connection(canal) - flux de evenimente, conexiune prin care clientul primește evenimente de la server

Toate evenimentele de pe server au un tip. Clientul se poate abona și dezabona la evenimente de interes prin conexiuni de control. Pentru comoditate, tipurile sunt organizate în diagrame. De exemplu, o schemă de chat poate avea un tip de mesaj.

De exemplu, următoarea diagramă descrie o secvență tipică de acțiuni:

  1. Clientul deschide o conexiune de streaming la server
  2. Clientul se abonează la evenimente de tip Item1 în Schema1
  3. Serverul trimite evenimente
  4. Clientul se dezabonează de la evenimente printr-o nouă conexiune de control
  5. Clientul închide conexiunea

Sau - iată o diagramă mai complexă în care clientul este deja abonat tipuri diferite evenimente:

Lightstreamer folosește iframe ca transport. Din când în când trebuie să fie închis pentru a curăța obiectele primite. Când sesiunea este închisă (la fel se întâmplă și când pagina este reîmprospătată în browser), serverul memorează evenimente noi până la un anumit timeout și le trimite imediat ce se deschide o nouă sesiune Stream Connection 2 a aceluiași utilizator.

În general, tamponarea evenimentelor este o tehnică generală care vă permite să supraviețuiți fără probleme închiderii unei conexiuni și este necesară pentru orice transport.

Cu noul format de stocare, un fișier jurnal poate ajunge la sute de gigaocteți. Timpul de eșantionare pentru acesta va fi foarte lung și apare o problemă: munca tuturor utilizatorilor se oprește.

Semnele acestei probleme sunt:

    Este imposibil să intrați în baza de date de informații.

    Activitate de aproape 100% a discului pe care se află fișierul jurnal și citirea activă a fișierului jurnal de către procesul rmngr.
    Acest element poate fi verificat folosind monitorul de resurse (Manager de activități - Performanță - Monitor de resurse deschise) din fila „Disc”.
    În grupul „Dispozitive de stocare”, trebuie să acordați atenție coloanei „Timp activ (%)”.
    În grupul „Operare disc”, trebuie să acordați atenție coloanelor „Citește” și „Fișier”. Puteți sorta după coloana „Citire”. Printre primele rânduri cu viteza maxima procesul de citire va fi rmngr. În continuare, trebuie să te uiți la nume fișier care poate fi citit, va corespunde jurnalului de înregistrare al unei anumite baze de informații.

    În consola de administrare a unui cluster de server 1C:Enterprise, în lista de sesiuni, aproape toți utilizatorii vor avea o valoare mare și aproximativ aceeași în coloana „DBMS Captured” sau în coloana „Call Time (current)”.

Dacă este detectată o problemă, trebuie să:

    Amintiți-vă UID-ul sistemului de securitate a informațiilor care este citit de procesul rmngr.

    Începeți să colectați jurnalul de proces pentru evenimentele EXCP, dacă nu a început deja.

    Exportați toate sesiunile pe serverul problematic SAU pe securitatea informațiilor problematice folosind consola de administrare a clusterului de servere 1C:Enterprise, în cazul în care sunt necesare date suplimentare pentru analiză.

    Reporniți serviciul 1C:Enterprise.

    Colectați un jurnal tehnologic în timpul repornirii serverului 1C:Enterprise.

    Analizați jurnalul tehnologic: căutați cuvintele „UnloadRegistrationLog” sau „UnloadEventLog”.

Exemplu:

29:40.069000-0,EXCP,4,proces=rphost, p:processName=ib_accounting ,t:clientID=114396,t:applicationName=1CV8C, t:computerName=COMP ,t:connectID=109127,SessionID=1, Usr=IvanovII ,AppID=1CV8C,ClientID=114389,Exception=NetDataExchangeException,Descr=Transferul de date a fost întrerupt de partea destinatară.,Context="Form.Call: ExternalReport.RegistrationLogAnalysis.Form.Module.BackgroundTaskRun

GeneralForm.ReportForm.Form: 1242: ReportOptions.GenerateReportInBackground(ReportGenerationParameters, BackgroundTaskResult.ResultAddress);

GeneralModule.ReportOptions.Module: 2544: Formation = GenerateReport(Parameters, False, False);

GeneralModule.Report Options.Module: 2060: ReportObject.AssembleResult(Result.TabularDocument, Result.Decryption);

Raport extern.Analiza jurnalului de înregistrare.Modul obiect: 64:Încărcați JurnalÎnregistrare(TK, Selecție, Coloane);"

Din această linie puteți spune cine: Ivanov al II-lea, unde (pe ce computer): COMP , in care baza de informatii: ib_contabilitatea a lansat analiza jurnalului.

Acțiune