Компютри Windows интернет

Безопасен режим на външна обработка 1c. Зададен е безопасен режим. Операцията е забранена. Изпълнение на външна обработка в нормален режим на приложение

Програмното отваряне на външна обработка се извършва с помощта на глобалния контекстен обект ExternalProcessing, който има тип ExternalProcessingManager. За всеки режим на работа на платформата 1C (обикновен режим на приложение и режим на управлявано приложение) се използват различни обектни методи за работа с външна обработка.

Изпълнение на външна обработка в нормален режим на приложение

В типично приложение трябва да използвате метода Create() на обекта ExternalProcessing, на който се предава пълното име на файла за външна обработка. Методът връща обект от тип Външна обработка, този обект е външната обработка, която се отваря. Ако трябва да отворите външен формуляр за обработка, тогава извикайте метода GetForm() на получения обект, който ще върне основния формуляр, и след това извикайте метода Open(), за да го отворите.


Обработка = ExternalProcessing.Create(FullFileName);
Обработка.GetForm().Open();

При външна обработка основната форма винаги трябва да е обикновена, а контролираната форма винаги трябва да е допълнителна, в противен случай методът GetForm() няма да работи в нормален режим на приложение.

Изпълнение на външна обработка в режим на управлявано приложение

В режим на управлявани формуляри алгоритъмът е разделен по контекст на изпълнение. На клиента получаваме двоични данни, използвайки пълното име на файла за външна обработка. Прехвърляме получените двоични данни на сървъра и ги поставяме във временно хранилище. След това трябва да извикате метода Connect() на обекта ExternalProcessing, към който се предава адресът за временно съхранение. Методът връща името на свързаната външна обработка. Връщаме името на външната обработка на клиента, създаваме път на низ към формуляра за обработка и използваме метода OpenForm(), за да отворим формата за външна обработка.

&На сървъра
Функция GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Връщане на ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&На клиент
FullFileName = ""; // Пълно име на файла за външна обработка.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Безопасен режим за външна обработка

Методите Create() и Connect() на обекта ExternalProcessing имат входящ параметър SafeMode - знак за свързване на външна обработка в безопасен режим. Ако параметърът не е зададен, връзката ще се осъществи в защитен режим.
Безопасният режим е предназначен да предпазва системата от изпълнение на „ненадежден“ програмен код на сървъра. Потенциалната опасност идва от външна обработка или програмен код, въведен от потребителя за използване в методите Run() и Calculate().
Безопасният режим налага следните ограничения:
  • привилегированият режим се отменя, ако е бил инсталиран;
  • опитите за влизане в привилегирован режим се игнорират;
  • операциите с COM обекти са забранени;
  • зареждането и свързването на външни компоненти е забранено;
  • достъпът до файловата система е забранен (с изключение на временни файлове);
  • Достъпът до интернет е забранен.
Процесите, отворени интерактивно, не се изпълняват в безопасен режим, поради което се препоръчва да се внедри механизъм за отваряне на външни процесори в безопасен режим, както и на ниво разрешение, за да се забрани на потребителя да отваря интерактивно външни процесори.
За да забраните интерактивното отваряне на обработка, във всички роли, присвоени на потребителя, е необходимо да премахнете правото „Интерактивно отваряне на външна обработка“ (вижте Фигура 1).
Фигура 1. Права за интерактивно отваряне на външна обработка/отчети
Правото „Интерактивно отваряне на външна обработка“ не засяга по никакъв начин обекта за външна обработка.

Програмното отваряне на външни отчети е подобно на външната обработка, но трябва да използвате глобалния контекстен обект ExternalReports, който има типа ExternalReportsManager.

Печат (Ctrl+P)

Конфигурационни обекти

Ако е необходимо да се използва „недоверен“ програмен код на сървъра: външна обработка или програмен код, въведен от потребителя за използване в методите Run() и Calculate(), можете да използвате безопасния режим на работа.

В безопасен режим:

  • Привилегирован режим отменен.
  • Преминаване към привилегирован режим игнориран.
  • Забраненооперации, водещи до използване на външни средства по отношение на платформата 1C:Enterprise (включително неблокиращи аналози на посочените методи):
  • COM механизми:
    • COMObject();
    • GetCOMObject();
    • WrapperHTMLDocument.GetCOMObject().
  • Зареждане на външни компоненти:
    • LoadExternalComponent();
    • ConnectExternalComponent().
  • Достъп до файловата система:
    • ValueInFile();
    • CopyFile();
    • Обединяване на файлове ();
    • Преместване на файл ();
    • SplitFile();
    • СъздайДиректория();
    • Изтрий файловете();
    • Нов файл;
    • Нов xBase;
    • EntryHTML.OpenFile();
    • ReadHTML.OpenFile();
    • ReadXML.OpenFile();
    • WriteXML.OpenFile();
    • ReadingFastInfoset.OpenFile();
    • RecordFastInfoset.OpenFile();
    • CanonicalXMLRecord.OpenFile();
    • TransformXSL.LoadFromFile();
    • WriteZipFile.Open();
    • ReadingZipFile.Open();
    • Нов ReadText(), ако първият параметър е низ;
    • ReadText.Open(), ако първият параметър е низ;
    • NewTextRecord(), ако първият параметър е низ;
    • WriteText.Open(), ако първият параметър е низ;
    • NewTextExtract();
    • промяна на свойството ExtractText.FileName;
    • ExtractText.Write();
    • New Picture(), ако първият параметър е низ;
    • Picture.Write();
    • нови двоични данни ();
    • BinaryData.Write();
    • NewDataRecord(), ако първият параметър е низ;
    • New ReadData(), има първи параметър - низ;
    • всички методи на обекта FileStreamManager;
    • Нов FileStream();
    • FormattedDocument.Write();
    • GeographicScheme.Read();
    • GeographicScheme.Write();
    • GeographicScheme.Print();
    • TabularDocument.Read();
    • TabularDocument.Write();
    • TabularDocument.Print(); GraphicScheme.Read();
    • GraphicScheme.Write();
    • GraphicScheme.Print();
    • TextDocument.Read();
    • TextDocument.Write().
  • Достъп до интернет:
    • Нова интернет връзка,
    • Нова интернет поща,
    • Нов InternetProxy,
    • Нова HTTP връзка,
    • Нова FTP връзка.

ВНИМАНИЕ! При извършване на забранени операции се хвърля изключение по време на изпълнение.

Забележка. Външни отчети и обработка, отворени с помощта на менюто Файл - Отвори, се изпълняват в безопасен режим, ако потребителят няма администраторски права за достъп.

Броят пъти, когато безопасният режим е включен, трябва да съответства на броя пъти, когато е бил изключен. Въпреки това, ако безопасният режим е бил включен в рамките на процедура или функция (веднъж или повече), но не е бил изключен, системата автоматично ще се изключи толкова пъти, колкото пъти е имало непълни включвания в оставащата процедура или функция.

Ако в процедура или функция извиква метод SetSafeMode(False)направи повече от извиквания на метод SetSafeMode(True), тогава ще бъде хвърлено изключение.

Софтуерното инсталиране на безопасен режим може да се изисква в случай, че разработчикът на конфигурацията възнамерява да използва програмен код на трета страна (по отношение на конфигурацията), чиято надеждност разработчикът не може да гарантира. Пример за такъв код е изпълнението на методите Execute() и Compute() в случаите, когато изпълнимият код се получава от външния свят. В този случай добра практика би била да зададете безопасен режим, преди да изпълните следните методи:

// Генерира се програмен код, който трябва да се изпълни // Възможно е кодът да е зареден от външни източници // или въведен ръчно ExecutableCode = GetExecutedCodeFromExternalWorld(); // Активиране на безопасен режим SetSafeMode(True); // Изпълнение на потенциално опасен код Execute(ExecutableCode); // Изключване на безопасен режим SetSafeMode(False);

В някои случаи настройките за безопасен режим може да са в конфликт с настройките за привилегирован режим. Пример за такъв конфликт е публикуването на документ, за който е зададено свойството Привилегирован режим при публикуване, от код на вградения език, който се изпълнява в безопасен режим. В този случай привилегированият режим е деактивиран и опитите за активирането му се игнорират. В резултат на това кодът на вградения език, който „разчита“ на активирания привилегирован режим, „среща“ липсата му, което води до грешки с неочевидни причини за появата им. За да предотврати тази ситуация, системата 1C:Enterprise автоматично деактивира безопасен режим за манипулатори на събития, които са налични в обектния модул или модула на мениджъра, при условие че изпълнимият код на вградения език не се намира в разширението на конфигурацията. Такива манипулатори са маркирани по специален начин в асистента за синтаксис.

Той също така предоставя възможност за деактивиране на безопасен режим от вградения език (ако програмният код, който се опитва да го деактивира, не е в разширение за конфигурация). За деактивиране на безопасен режим има метод SetDisableSafeMode(). Можете да проверите дали безопасният режим в момента е деактивиран (автоматично или чрез извикване на метод), като използвате метода GetDisableSafeMode().

В рамките на един метод във вградения език не може да има повече от едно ниво на влагане на задаване на безопасен режим (чрез извикване на метода SetSafeMode()) и задаване на деактивиране на безопасен режим (автоматично по време на изпълнение на събитие на обект с метаданни манипулатори или чрез извикване на метода SetSafeModeDisable(). При опит за увеличаване на вложеността се хвърля изключение:

// Правилно използване на ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetSafeMode(False); SetDisableSafeMode(False); EndProcedure // Неправилно използване на ProcedureProcedureName() SetDisableSafeMode(True); SetSafeMode(true); SetDisableSafeMode(False); // Изключение EndProcedure ProcedureProcedureName() SetSafeMode(True); SetDisableSafeMode(False); // Изключение EndProcedure

Програмното отваряне на външна обработка се извършва с помощта на глобалния контекстен обект ExternalProcessing, който има тип ExternalProcessingManager. За всеки режим на работа на платформата 1C (обикновен режим на приложение и режим на управлявано приложение) се използват различни обектни методи за работа с външна обработка.

Изпълнение на външна обработка в нормален режим на приложение

В типично приложение трябва да използвате метода Create() на обекта ExternalProcessing, на който се предава пълното име на файла за външна обработка. Методът връща обект от тип Външна обработка, този обект е външната обработка, която се отваря. Ако трябва да отворите външен формуляр за обработка, тогава извикайте метода GetForm() на получения обект, който ще върне основния формуляр, и след това извикайте метода Open(), за да го отворите.


Обработка = ExternalProcessing.Create(FullFileName);
Обработка.GetForm().Open();

При външна обработка основната форма винаги трябва да е обикновена, а контролираната форма винаги трябва да е допълнителна, в противен случай методът GetForm() няма да работи в нормален режим на приложение.

Изпълнение на външна обработка в режим на управлявано приложение

В режим на управлявани формуляри алгоритъмът е разделен по контекст на изпълнение. На клиента получаваме двоични данни, използвайки пълното име на файла за външна обработка. Прехвърляме получените двоични данни на сървъра и ги поставяме във временно хранилище. След това трябва да извикате метода Connect() на обекта ExternalProcessing, към който се предава адресът за временно съхранение. Методът връща името на свързаната външна обработка. Връщаме името на външната обработка на клиента, създаваме път на низ към формуляра за обработка и използваме метода OpenForm(), за да отворим формата за външна обработка.

&На сървъра
Функция GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Връщане на ExternalProcessing.Connect(AddressInTemporaryStorage);
EndFunction

&На клиент
FullFileName = ""; // Пълно име на файла за външна обработка.
FileData = new BinaryData(FullFileName);
ExternalProcessingName = GetExternalProcessingName(FileData);
OpenForm("ExternalProcessing." + ExternalProcessingName + ".Form");

Безопасен режим за външна обработка

Методите Create() и Connect() на обекта ExternalProcessing имат входящ параметър SafeMode - знак за свързване на външна обработка в безопасен режим. Ако параметърът не е зададен, връзката ще се осъществи в защитен режим.
Безопасният режим е предназначен да предпазва системата от изпълнение на „ненадежден“ програмен код на сървъра. Потенциалната опасност идва от външна обработка или програмен код, въведен от потребителя за използване в методите Run() и Calculate().
Безопасният режим налага следните ограничения:
  • привилегированият режим се отменя, ако е бил инсталиран;
  • опитите за влизане в привилегирован режим се игнорират;
  • операциите с COM обекти са забранени;
  • зареждането и свързването на външни компоненти е забранено;
  • достъпът до файловата система е забранен (с изключение на временни файлове);
  • Достъпът до интернет е забранен.
Процесите, отворени интерактивно, не се изпълняват в безопасен режим, поради което се препоръчва да се внедри механизъм за отваряне на външни процесори в безопасен режим, както и на ниво разрешение, за да се забрани на потребителя да отваря интерактивно външни процесори.
За да забраните интерактивното отваряне на обработка, във всички роли, присвоени на потребителя, е необходимо да премахнете правото „Интерактивно отваряне на външна обработка“ (вижте Фигура 1).
Фигура 1. Права за интерактивно отваряне на външна обработка/отчети
Правото „Интерактивно отваряне на външна обработка“ не засяга по никакъв начин обекта за външна обработка.

Програмното отваряне на външни отчети е подобно на външната обработка, но трябва да използвате глобалния контекстен обект ExternalReports, който има типа ExternalReportsManager.

Използвайки „Trade Management 11.3“ като пример, ще разгледаме простия процес на свързване на външна форма за печат. Ще разгледаме и характеристиките на новата система за сигурност.

Бързо преминаване

Предварителни действия

Първо трябва активирайте функционалностили проверете наличността му

1. Влезте с пълни права в информационната база данни.

2. Отидете в меню „Основни данни и администриране”/Блок „Администриране”/Команда „Печатни форми, справки и обработка”.

Допълнение

В секцията, която се отваря:

Добавяме обработка чрез бутона „Създаване“ (това е важно) или „Актуализиране!“ съществуващ:

  • Изберете го в списъка (ако не е избрано или празно, командата няма да работи, но няма да каже нищо).
  • Щракнете върху бутона „Зареждане от файл“.

След появата на 1C във външна обработка, проверките за сигурност се появиха в нови конфигурации.

Трябва да инсталирате само обработка, създадена независимо или получена чрез известни комуникационни канали (не от пощата, само от уебсайт с валиден сертификат или предоставена от служители на разработчика, потвърдена от него по телефона).

Ако всичко в обработката е предписано от разработчика, тогава ще бъде зададено „Поставяне“ - обектите, в които ще бъде включена обработката, ще се появи командата(ите).
За да работите, просто щракнете върху „Запазване и затваряне“.

Преглед

Веднага след това, в зависимост от вида на лечението:

  • Отпечатаната форма става достъпна при отваряне на документ или от списъка му (за вече отворен при повторно отваряне) чрез натискане на бутона „Печат“.
  • Обработката е достъпна в секциите „Допълнителна обработка“ във всяка подсистема
  • Обработка на попълване с помощта на бутона „Попълване“ на списъка или главния команден панел на обектната форма.

За горната обработка стартирането ще изглежда така:

Ако документът е нов, той трябва да бъде записан; външният механизъм за обработка ще ви предупреди за това:

По-нататъшното поведение зависи от вградената функционалност: възможно е да отворите формуляр или просто да обработите данни.

Предупреждения за сигурност в 1C

Новите версии и конфигурации на платформата имат подобрена защита срещу стартирането на злонамерени програми.

Обработката може да доведе до стартиране на Excel за зареждане, в който случай новата подсистема за сигурност също ще ви предупреди:

В този случай кодът на манипулатора се прекъсва.

Ако щракнете върху „Да“, системата ще ви помоли да изпълните командата отново:

Възможно е потребителят на информационната база да деактивира защитата от опасни действия чрез „Конфигуратора“:

Това не може да се промени от режим „Enterprise“, може би това е направено нарочно и може да се появи след актуализацията.

Трябва също да се отбележи, че ако обработката използва Excel, тя трябва да работи в опасен режим (това беше случаят преди въвеждането на новата система, това работи паралелно):

"Не може да се зареди MS EXCEL!!!" „Зададен е безопасен режим. Операцията е забранена"

При външна обработка изглежда така:

Разработчикът трябва да го зададе на „False“ в описанието на вътрешната обработка, тогава всичко ще бъде наред:

Функция InformationOnExternalProcessing() ExportRegistrationParameters = Нова структура; Параметри за регистрация.Insert("SafeMode", False);

При актуализиране на конфигурацията се появи и предупредителен текст за източника, от който е получен конфигурационният файл: