Vikasietotila on asetettu yleiseen xml-vaihtoon. Vikasietotila on asetettu. Operaatio on kielletty. Turvallinen tila ulkoista käsittelyä varten

Käyttämällä esimerkkinä "Trade Management 11.3" tarkastelemme yksinkertaista prosessia ulkoisen painolomakkeen liittämiseksi. Harkitsemme myös uuden turvajärjestelmän ominaisuuksia.

Nopea kulku

Alustavat toimenpiteet

Ensin sinun pitäisi ota toiminnallisuus käyttöön tai tarkista sen saatavuus

1. Kirjaudu sisään kaikilla oikeuksilla tietokantaan.

2. Mene valikkoon ”Päätiedot ja hallinto”/Estä ”Hallinta”/komento ”Painetut lomakkeet, raportit ja käsittely”.

Lisäys

Avautuvassa osiossa:

Lisäämme käsittelyn "Luo"-painikkeella (tämä on tärkeää) tai "Päivitä!" nykyinen:

  • Valitse se luettelosta (jos sitä ei ole valittu tai se on tyhjä, komento ei toimi, mutta ei sano mitään).
  • Napsauta "Lataa tiedostosta" -painiketta.

1C:n esiintymisen jälkeen ulkoisessa käsittelyssä turvatarkastukset ilmestyivät uusiin kokoonpanoihin.

Asenna vain itsenäisesti luotu tai tunnettujen viestintäkanavien kautta vastaanotettu prosessointi (ei postista, vain verkkosivustolta, jolla on voimassa oleva varmenne tai jonka kehittäjän työntekijät ovat toimittaneet ja jotka hän on vahvistanut puhelimitse).

Jos kehittäjä on määrännyt kaiken käsittelyssä, "Sijoitus" asetetaan - kohteet, joissa käsittely on mukana, komennot tulevat näkyviin.
Toimiaksesi napsauta "Tallenna ja sulje".

Tutkimus

Välittömästi tämän jälkeen hoidon tyypistä riippuen:

  • Painettu lomake tulee saataville avattaessa dokumentti tai sen luettelosta (jo auki olevalle avattaessa se uudelleen) painamalla "Tulosta"-painiketta.
  • Käsittely on saatavilla kunkin alajärjestelmän osiossa "Lisäkäsittely".
  • Täytön käsittely listan “Täytä”-painikkeella tai kohdelomakkeen pääkomentopaneelilla.

Yllä olevassa käsittelyssä käynnistys näyttää tältä:

Jos asiakirja on uusi, se tulee kirjoittaa muistiin; ulkoinen käsittelymekanismi varoittaa sinua tästä:

Jatkokäyttäytyminen riippuu sisäänrakennetusta toiminnallisuudesta: on mahdollista avata lomake tai yksinkertaisesti käsitellä tietoja.

Turvavaroitukset 1C

Uudet alustan julkaisut ja kokoonpanot ovat parantaneet suojaa haittaohjelmia vastaan.

Käsittely voi saada Excelin käynnistymään latautumaan, jolloin uusi suojausalijärjestelmä varoittaa myös:

Tässä tapauksessa käsittelijän koodi keskeytyy.

Jos napsautat "Kyllä", järjestelmä pyytää sinua suorittamaan komennon uudelleen:

Tietokannan käyttäjä voi poistaa suojauksen vaarallisilta toimilta "Configuratorin" kautta:

Tätä ei voi muuttaa "Enterprise"-tilasta, ehkä tämä tehtiin tarkoituksella, ja se voi ilmestyä päivityksen jälkeen.

On myös huomattava, että jos käsittely käyttää Exceliä, sen on toimittava vaarallisessa tilassa (tämä oli ennen uuden järjestelmän käyttöönottoa, tämä toimii rinnakkain):

"MS Exceliä ei voi ladata!!!" "Turvallinen tila on asetettu. Operaatio on kielletty"

Ulkoisessa käsittelyssä se näyttää tältä:

Kehittäjän tulee asettaa se arvoon "False" sisäisessä käsittelykuvauksessa, niin kaikki on kunnossa:

Funktio InformationOnExternalProcessing() ExportRegistrationParameters = Uusi rakenne; Rekisteröintiparametrit.Insert("SafeMode", False);

Kokoonpanoa päivitettäessä ilmestyi varoitusteksti myös lähteestä, josta asetustiedosto hankittiin:

Tosiasia on, että käytettäessä 1C:n asiakas-palvelinversiota ulkoinen käsittely/raportit avataan vikasietotilassa, jossa etuoikeutetun tilan käyttö on kielletty. Ja etuoikeutettua tilaa käytetään hyvin usein tyypillisissä kokoonpanoissa: painettujen lomakkeiden luominen, erilaiset palvelutarkastukset (vaihtojen rekisteröinti) jne. Tämän seurauksena jopa käyttämällä tavallista kulunvalvontajärjestelmän raporttia ilman lomaketta (oletusarvoisesti käytetään yleistä "Raporttilomake" -lomaketta) ja tallentamalla mukautetut raporttiasetukset (vastaavaan hakemistoon), saat virheilmoituksen riittämättömästä pääsystä. oikeudet erilaisiin vakioihin ja istuntoparametreihin, joita käytetään virallisiin tarkoituksiin rivin jälkeen AsetaPrivilegedMode(True) ;

"Oikea" ratkaisu olisi yhdistää ulkoinen käsittely ja raportit BSP:n "Lisäraportit ja käsittely" -mekanismien kautta poistamalla vikasietotila tai lisäämällä käyttöoikeuksia (mielestäni BSP-versiosta 2.2.2.1). Mutta jos jostain syystä on tarpeen käyttää ulkoisia raportointi-/käsittelytiedostoja, voit määrittää klusterin suojausprofiilin, jota käytetään vikasietotilan suojausprofiilina tietylle tietokannalle.

Haluan heti huomauttaa, että tämä vaihtoehto ei ole parempi, mutta eri olosuhteiden vuoksi sitä voidaan käyttää niin yksinkertaistetussa muodossa. Minulla on esimerkiksi useita tietokantoja eri kaupungeissa, yhteinen paikallinen, jolla on tiukasti rajoitetut oikeudet, suljettu USB jne., jossain käytän Accounting 2.0:aa ja jossain 3.0:aa, teen melkein kaikki raportit ACS-työkaluilla ilman lomakkeita, jotta ne avattu molemmissa versioissa. Kaikkien näiden raporttien ylläpito eri versioille ja eri tietokantoille on työlästä ja turhaa, koska Suunnitelmissa on siirtyä yhteen kokoonpanoon ja...

Luodaan profiili.
Luomme klusterikonsolissa suojausprofiilin, johon asetamme liput "Voidaan käyttää vikasietotilan suojausprofiilina" ja " Täysi käyttöoikeus -osiossa:" "etuoikeutettuun tilaan".

Monissa tapauksissa, joissa käytetään raportteja ja yksinkertaista käsittelyä, tätä menetelmää voidaan soveltaa. Monimutkaisemmissa tilanteissa prosessia ei ole järkevää kuvata, koska se on kuvattu dokumentaatiossa (kyky määrittää suojausprofiileja tietyille ulkoisille tiedostoille määrittämällä sen hash-määrä jne.).

P.S. Ajattelin, että suojausprofiilit toimivat vain käytettäessä alusta- ja palvelinlisenssejä CORP-tasolla, mutta tämä toiminto toimii myös 1C:Enterprise 8.3 -alustalla (sitä voidaan kutsua ehdollisesti PROFiksi, analogisesti peruskokoonpanojen Basic/PROF/CORP kanssa)

Tulosta (Ctrl+P)

Konfigurointiobjektit

Jos palvelimella on käytettävä "epäluotettavaa" ohjelmakoodia: ulkoista käsittelyä tai käyttäjän syöttämää ohjelmakoodia käytettäväksi Run()- ja Calculate()-menetelmissä, voit käyttää turvallista käyttötilaa.

Vikasietotilassa:

  • Etuoikeutettu tila peruutettu.
  • Vaihdetaan etuoikeutettuun tilaan huomiotta.
  • Kielletty toiminnot, jotka johtavat ulkoisten keinojen käyttöön 1C:Enterprise-alustan yhteydessä (mukaan lukien määritettyjen menetelmien estävät analogit):
  • COM-mekanismit:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Ulkoisten komponenttien lataaminen:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Pääsy tiedostojärjestelmään:
    • ValueInFile();
    • Kopioi tiedosto();
    • MergeFiles();
    • MoveFile();
    • SplitFile();
    • CreateDirectory();
    • Poista tiedostot();
    • Uusi tiedosto;
    • Uusi xBase;
    • EntryHTML.OpenFile();
    • LueHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • Uusi ReadText(), jos ensimmäinen parametri on merkkijono;
    • ReadText.Open(), jos ensimmäinen parametri on merkkijono;
    • NewTextRecord(), jos ensimmäinen parametri on merkkijono;
    • WriteText.Open(), jos ensimmäinen parametri on merkkijono;
    • UusiTekstiOte();
    • muuttaa ominaisuutta ExtractText.FileName;
    • ExtractText.Write();
    • Uusi kuva(), jos ensimmäinen parametri on merkkijono;
    • Picture.Write();
    • uusi BinaryData();
    • BinaryData.Write();
    • NewDataRecord(), jos ensimmäinen parametri on merkkijono;
    • New ReadData(), on ensimmäinen parametri - merkkijono;
    • kaikki FileStreamManager-objektin menetelmät;
    • Uusi FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • Taulukkoasiakirja.Lue();
    • TabulaarinenDocument.Write();
    • Taulukkoasiakirja.Tulosta(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Internet-yhteys:
    • Uusi Internet-yhteys,
    • Uusi InternetMail,
    • Uusi InternetProxy,
    • Uusi HTTP-yhteys,
    • Uusi FTP-yhteys.

HUOMIO! Kiellettyjä toimintoja suoritettaessa tehdään poikkeus ajon aikana.

Huomautus. Ulkoiset raportit ja Tiedosto - Avaa -valikon avulla avatut käsittelyt suoritetaan vikasietotilassa, jos käyttäjällä ei ole järjestelmänvalvojan käyttöoikeuksia.

Vikasietotilan päällekytkemiskertojen lukumäärän on vastattava sitä, kuinka monta kertaa se sammutetaan. Kuitenkin, jos vikasietotila otettiin käyttöön toimenpiteen tai toiminnon aikana (kerran tai useammin), mutta sitä ei sammutettu, järjestelmä sammuu automaattisesti niin monta kertaa kuin toimenpiteessä tai toiminnossa oli keskeneräisiä käynnistyksiä.

Jos proseduurissa tai funktiossa kutsuu menetelmää AsetaSafeMode (False) tehnyt enemmän kuin menetelmäkutsuja AsetaSafeMode (tosi), silloin tehdään poikkeus.

Vikasietotilan ohjelmistoasennus saattaa olla tarpeen, jos konfiguraatiokehittäjä aikoo käyttää kolmannen osapuolen (määritykseen liittyen) ohjelmakoodia, jonka luotettavuutta kehittäjä ei voi taata. Esimerkki tällaisesta koodista on Execute()- ja Compute()-menetelmien suorittaminen tapauksissa, joissa suoritettava koodi saadaan ulkopuolelta. Tässä tapauksessa hyvä käytäntö olisi asettaa vikasietotila ennen näiden menetelmien suorittamista:

// Luodaan ohjelmakoodi, joka tulee suorittaa // On mahdollista, että koodi on ladattu ulkoisista lähteistä // tai syötetty manuaalisesti ExecutableCode = GetExecutedCodeFromExternalWorld(); // Ota vikasietotila käyttöön SetSafeMode(True); // Suorita mahdollisesti vaarallinen koodi Execute(ExecutableCode); // Poista vikasietotila käytöstä SetSafeMode(False);

Joissakin tapauksissa vikasietotilan asetukset voivat olla ristiriidassa etuoikeutetun tilan asetusten kanssa. Esimerkki tällaisesta ristiriidasta on sellaisen asiakirjan lähettäminen, jolle on asetettu Etuoikeutettu tila kirjattaessa -ominaisuus, sisäänrakennetun kielen koodista, joka suoritetaan vikasietotilassa. Tässä tapauksessa etuoikeutettu tila on poistettu käytöstä, ja sen käyttöönottoyritykset ohitetaan. Seurauksena on, että sulautetulla kielellä oleva koodi, joka "lukee" käyttöön otettuun etuoikeutettuun tilaan, "kohtaa" sen puuttumisen, mikä johtaa virheisiin, joilla on ei-ilmeisiä syitä niiden esiintymiseen. Tämän tilanteen estämiseksi 1C:Enterprise-järjestelmä poistaa automaattisesti vikasietotilan käytöstä objektimoduulissa tai hallintamoduulissa saatavilla oleville tapahtumakäsittelijöille, mikäli suoritettavaa koodia sisäänrakennetulla kielellä ei ole kokoonpanolaajennuksessa. Tällaiset käsittelijät on merkitty erityisellä tavalla syntaksiavustajassa.

Se tarjoaa myös mahdollisuuden poistaa vikasietotilan käytöstä sisäänrakennetulla kielellä (jos ohjelmakoodi, joka yrittää poistaa sen käytöstä, ei ole kokoonpanolaajennuksessa). Vikasietotilan poistamiseksi käytöstä on menetelmä SetDisableSafeMode(). Voit tarkistaa, että vikasietotila on tällä hetkellä poissa käytöstä (automaattisesti tai kutsumalla menetelmää) käyttämällä menetelmää GetDisableSafeMode().

Yhdessä sisäänrakennetun kielen menetelmässä ei voi olla useampia kuin yksi sisäkkäistaso vikasietotilan asettamisessa (kutsumalla SetSafeMode()-metodia) ja vikasietotilan poistamisen asettamisessa (automaattisesti metatietoobjektitapahtuman suorittamisen aikana käsittelijöitä tai kutsumalla SetSafeModeDisable()-metodia). Yritettäessä lisätä sisäkkäisyyttä, tehdään poikkeus:

// ProcedureProcedureName()-funktion oikea käyttö SetDisableSafeMode(True); AsetaSafeMode(tosi); AsetaSafeMode(False); AsetaDisableSafeMode(False); EndProcedure // ProcedureProcedureName() -funktion virheellinen käyttö SetDisableSafeMode(True); AsetaSafeMode(tosi); AsetaDisableSafeMode(False); // Poikkeus EndProcedure ProcedureProcedureName() SetSafeMode(True); AsetaDisableSafeMode(False); // Poikkeus EndProcedure

Ulkoisen käsittelyn ohjelmallinen avaaminen suoritetaan käyttämällä globaalia kontekstiobjektia ExternalProcessing, jolla on tyyppi ExternalProcessingManager. Jokaisessa 1C-alustan toimintatilassa (tavallinen sovellustila ja hallittu sovellustila) käytetään erilaisia ​​objektimenetelmiä ulkoisen käsittelyn kanssa työskentelemiseen.

Ulkoisen käsittelyn suorittaminen normaalissa sovellustilassa

Tyypillisessä sovelluksessa sinun on käytettävä ExternalProcessing-objektin Create()-menetelmää, jolle välitetään ulkoisen käsittelytiedoston koko nimi. Metodi palauttaa tyyppisen objektin Ulkoinen käsittely, tämä objekti on avattava ulkoinen käsittely. Jos sinun on avattava ulkoinen käsittelylomake, kutsu vastaanotetun objektin GetForm()-metodi, joka palauttaa päälomakkeen, ja kutsu sitten Open()-metodi avataksesi sen.


Käsittely = UlkoinenKäsittely.Create(FullFileName);
Processing.GetForm().Open();

Ulkoisessa käsittelyssä päälomakkeen on aina oltava tavallinen ja ohjatun lomakkeen tulee aina olla lisälomake, muuten GetForm()-metodi ei toimi normaalissa sovellustilassa.

Ulkoisen käsittelyn suorittaminen hallitussa sovellustilassa

Hallittujen lomakkeiden tilassa algoritmi jaetaan suorituskontekstin mukaan. Asiakkaalla saamme binaaridataa käyttämällä ulkoisen käsittelytiedoston koko nimeä. Siirrämme vastaanotetut binaaritiedot palvelimelle ja asetamme ne väliaikaiseen varastoon. Seuraavaksi sinun on kutsuttava ExternalProcessing-objektin Connect()-metodi, johon tilapäisen tallennustilan osoite välitetään. Metodi palauttaa yhdistetyn ulkoisen käsittelyn nimen. Palautamme ulkoisen käsittelyn nimen asiakkaalle, luomme merkkijonopolun käsittelylomakkeeseen ja käytämme OpenForm()-metodia ulkoisen käsittelylomakkeen avaamiseen.

&Palvelimella
Funktio GetExternalProcessingName(binaaridata)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Return ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&OnClient
FullFileName = ""; // Ulkoisen käsittelytiedoston koko nimi.
TiedostoData = uusi BinaariData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Turvallinen tila ulkoista käsittelyä varten

ExternalProcessing-objektin Create()- ja Connect()-metodeissa on saapuva parametri SafeMode - merkki ulkoisen käsittelyn yhdistämisestä vikasietotilassa. Jos parametria ei ole määritetty, yhteys muodostetaan suojatussa tilassa.
Vikasietotila on suunniteltu suojaamaan järjestelmää "epäluotettavan" ohjelmakoodin suorittamiselta palvelimella. Mahdollinen vaara johtuu ulkoisesta käsittelystä tai ohjelmakoodista, jonka käyttäjä on syöttänyt käytettäväksi Run()- ja Calculate()-menetelmissä.
Vikasietotila asettaa seuraavat rajoitukset:
  • etuoikeutettu tila peruutetaan, jos se on asennettu;
  • yritykset siirtyä etuoikeutettuun tilaan ohitetaan;
  • toiminnot COM-objektien kanssa ovat kiellettyjä;
  • ulkoisten komponenttien lataaminen ja kytkeminen on kielletty;
  • pääsy tiedostojärjestelmään on kielletty (paitsi väliaikaiset tiedostot);
  • Internet-yhteys on kielletty.
Vuorovaikutteisesti avattuja prosesseja ei suoriteta vikasietotilassa, joten on suositeltavaa ottaa käyttöön mekanismi ulkoisten prosessorien avaamiseksi vikasietotilassa sekä käyttöoikeustasolla, jotta käyttäjää estetään avaamasta interaktiivisesti ulkoisia prosessoreita.
Käsittelyn interaktiivisen avaamisen estämiseksi kaikissa käyttäjälle määritetyissä rooleissa on poistettava oikeus "Ulkoisen käsittelyn interaktiivinen avaaminen" (katso kuva 1).
Kuva 1. Oikeudet avata interaktiivisesti ulkoista käsittelyä/raportteja
"Ulkoisen käsittelyn vuorovaikutteinen avaaminen" -oikeus ei vaikuta External Processing -objektiin millään tavalla.

Ulkoisten raporttien ohjelmallinen avaaminen muistuttaa ulkoista käsittelyä, mutta sinun tulee käyttää globaalia kontekstiobjektia ExternalReports, jonka tyyppi on ExternalReportsManager.

Tosiasia on, että käytettäessä 1C:n asiakas-palvelinversiota ulkoinen käsittely/raportit avataan vikasietotilassa, jossa etuoikeutetun tilan käyttö on kielletty. Ja etuoikeutettua tilaa käytetään hyvin usein tyypillisissä kokoonpanoissa: painettujen lomakkeiden luominen, erilaiset palvelutarkastukset (vaihtojen rekisteröinti) jne. Tämän seurauksena jopa käyttämällä tavallista kulunvalvontajärjestelmän raporttia ilman lomaketta (oletusarvoisesti käytetään yleistä "Raporttilomake" -lomaketta) ja tallentamalla mukautetut raporttiasetukset (vastaavaan hakemistoon), saat virheilmoituksen riittämättömästä pääsystä. oikeudet erilaisiin vakioihin ja istuntoparametreihin, joita käytetään virallisiin tarkoituksiin rivin jälkeen AsetaPrivilegedMode(True) ;

"Oikea" ratkaisu olisi yhdistää ulkoinen käsittely ja raportit BSP:n "Lisäraportit ja käsittely" -mekanismien kautta poistamalla vikasietotila tai lisäämällä käyttöoikeuksia (mielestäni BSP-versiosta 2.2.2.1). Mutta jos jostain syystä on tarpeen käyttää ulkoisia raportointi-/käsittelytiedostoja, voit määrittää klusterin suojausprofiilin, jota käytetään vikasietotilan suojausprofiilina tietylle tietokannalle.

Haluan heti huomauttaa, että tämä vaihtoehto ei ole parempi, mutta eri olosuhteiden vuoksi sitä voidaan käyttää niin yksinkertaistetussa muodossa. Minulla on esimerkiksi useita tietokantoja eri kaupungeissa, yhteinen paikallinen, jolla on tiukasti rajoitetut oikeudet, suljettu USB jne., jossain käytän Accounting 2.0:aa ja jossain 3.0:aa, teen melkein kaikki raportit ACS-työkaluilla ilman lomakkeita, jotta ne avattu molemmissa versioissa. Kaikkien näiden raporttien ylläpito eri versioille ja eri tietokantoille on työlästä ja turhaa, koska Suunnitelmissa on siirtyä yhteen kokoonpanoon ja...

Luodaan profiili.
Luomme klusterikonsolissa suojausprofiilin, johon asetamme liput "Voidaan käyttää vikasietotilan suojausprofiilina" ja " Täysi käyttöoikeus -osiossa:" "etuoikeutettuun tilaan".

Monissa tapauksissa, joissa käytetään raportteja ja yksinkertaista käsittelyä, tätä menetelmää voidaan soveltaa. Monimutkaisemmissa tilanteissa prosessia ei ole järkevää kuvata, koska se on kuvattu dokumentaatiossa (kyky määrittää suojausprofiileja tietyille ulkoisille tiedostoille määrittämällä sen hash-määrä jne.).

P.S. Ajattelin, että suojausprofiilit toimivat vain käytettäessä alusta- ja palvelinlisenssejä CORP-tasolla, mutta tämä toiminto toimii myös 1C:Enterprise 8.3 -alustalla (sitä voidaan kutsua ehdollisesti PROFiksi, analogisesti peruskokoonpanojen Basic/PROF/CORP kanssa)