Modo de segurança 1s. Como adicionar uma chapa de impressão externa ou processamento

Ao executar o programa de upload de documentos como um usuário normal, o erro "O modo de segurança está definido. A operação é proibida".

Essa dificuldade surge porque Não há direitos suficientes para iniciar o processamento externo. Para configurar direitos de acesso, faça login no banco de dados no modo 1C Enterprise em nome de Administrador e vá para a seção Configurações de usuários e direitos / Perfis de grupos de acesso, clique Para criar um grupo.

Insira o nome do grupo e marque as caixas das funções disponíveis para os usuários deste grupo -

  • Abertura interativa de relatórios externos e processamento
  • Usando relatórios e processamento adicionais

Clique Salvar e fechar


Retorne ao menu Usuários e selecione na lista o funcionário que trabalhará com o programa Upload de Documentos. Clique em Permissões. Na lista de perfis, selecione o perfil criado anteriormente. Clique Escreva.


Para que os usuários possam iniciar o processamento, é recomendado adicionar o Carregamento de Documentos à lista de processamento externo. Para fazer isso no menu Administração / Formulários impressos e processamento / Relatórios adicionais e processamento crie um novo processamento. Especifique o caminho para o arquivo "Download Documents.epf" e atribua um nome. Especifique o local do processamento no menu, de onde o usuário poderá iniciá-lo posteriormente, por exemplo, selecione o menu Diretórios

Ao clicar no item Acesso rápido, você indica quais usuários têm acesso ao processamento:


Após a configuração, clique em Salvar e fechar. Para iniciar o processamento, o usuário precisará apenas entrar novamente no banco de dados e abri-lo no menu de acesso (no exemplo - Diretórios) e clicar Executar.


Abrir Menu - Todas as funções.... e encontre a opção "Perfis de segurança são usados" na lista.


Basta desmarcar a opção “Perfis de segurança são usados”.


Depois disso, o programa será iniciado com sucesso.

Com o lançamento da plataforma 8.3.9.2033, surgiu um novo mecanismo "Proteção contra ações perigosas".

Graças a esta inovação, 1C agora começou a xingar na abertura do processamento (e não só):

Aviso de segurança

Abre “Meu Processamento Externo” do arquivo “My_External_Processing.epf”

Recomenda-se prestar atenção à fonte de onde este arquivo foi obtido. Caso não haja acordo com a fonte sobre o desenvolvimento de módulos adicionais, ou haja dúvidas sobre o conteúdo do arquivo, não é recomendável abri-lo, pois pode danificar o computador e os dados.

Permitir que eu abra este arquivo?

Então 1C decidiu combater códigos maliciosos!

De onde virá esse “código malicioso” em uma empresa ainda é um mistério)

Ações potencialmente perigosas incluem:

  • Carregando um relatório externo, processamento ou extensão de configuração.
  • Carregando ou atualizando configuração/extensão.
  • Acesso de um relatório/processador externo ou extensão aos seguintes recursos:
  • Executando um comando do sistema operacional.
  • Gerenciamento de usuários (gravação ou exclusão de informações sobre um usuário da infobase).
  • Chamada do método Connect() do gerenciador de processamento externo (relatórios).
  • Chamando o método ExtendConfiguration.Write().
  • Trabalhando com objetos COM.

Como esse “milagre” pode ser desligado?

Para fazer isso, você precisa iniciar o 1C Enterprise no modo configurador.
Selecione o menu “Administração” - “Usuários”.
Na janela que se abre para nossos usuários, você precisa abrir a janela de configurações do usuário e na guia “Básico” desmarcar a caixa de seleção "Proteção contra ações perigosas"

Existem outras maneiras de desativar isso:

Agora é possível especificar uma lista de infobases, ao trabalhar com as quais a proteção contra ações perigosas será desativada.
Esta função é responsável pelo parâmetro DisableUnsafeActionProtection no arquivo conf.cfg, que permite desabilitar o mecanismo de proteção contra ações perigosas para todos os usuários de determinadas infobases cujas cadeias de conexão satisfaçam as máscaras especificadas no parâmetro DisableUnsafeActionProtection.

Neste parâmetro você pode especificar diversas máscaras separadas pelo símbolo “;”, por exemplo:

DisableUnsafeActionProtection=test_.*;estágio_.*;

Além disso, a proteção contra ações perigosas do usuário pode ser desabilitada programaticamente, para as quais estão disponíveis os seguintes parâmetros e propriedades:

  • Proteção de parâmetros contra ações perigosas dos métodos Connect() de gerenciadores de processamento externo (relatórios)
  • A propriedade Proteção Contra Ações Perigosas do objeto Extensão de Configuração antes de chamar o método Write() deste objeto.

A verificação da necessidade de utilização de proteção contra ações perigosas é realizada na seguinte ordem:

1. Se a caixa de seleção “Proteção contra atividades perigosas” do usuário atual estiver desmarcada, a proteção será considerada desativada.

2. Se a cadeia de conexão com a infobase satisfizer um dos padrões especificados no parâmetro DisableUnsafeActionProtection do arquivo conf.cfg, a proteção será considerada desativada.

3. Se a proteção for explicitamente desativada usando o parâmetro Proteção contra ações perigosas de processamento externo ou relatório.

4. Se a proteção for explicitamente desativada usando a propriedade de extensão Proteção contra Ações Perigosas.

O fato é que ao utilizar a versão cliente-servidor do 1C, os processamentos/relatórios externos são abertos em modo de segurança, no qual é proibido o uso do modo privilegiado. E o modo privilegiado é muito utilizado em configurações típicas: geração de formulários impressos, verificações de serviços diversos (registro de trocas), etc. Como resultado, mesmo usando um relatório regular no sistema de controle de acesso sem formulário (por padrão, o formulário geral "ReportForm" é usado) e salvando as configurações do relatório personalizado (no diretório correspondente), você receberá um erro sobre acesso insuficiente direitos a várias constantes e parâmetros de sessão usados ​​para fins oficiais após a linha SetPrivilegedMode(True);

A solução “correta” seria conectar processamento e relatórios externos através dos mecanismos “Relatórios e processamento adicionais” do BSP com desabilitação do modo de segurança ou adição de permissões (na minha opinião, da versão 2.2.2.1 do BSP). Mas se por algum motivo for necessário usar arquivos de relatório/processamento externos, você poderá configurar um perfil de segurança de cluster usado como um perfil de segurança de modo seguro para uma infobase específica.

Gostaria de salientar desde já que esta opção não é preferível, mas devido a várias circunstâncias pode ser utilizada de forma simplificada. Por exemplo, tenho vários bancos de dados em cidades diferentes, um local comum com direitos estritamente limitados, USB fechado, etc., em algum lugar eu uso Contabilidade 2.0, e em algum lugar 3.0, faço quase todos os relatórios usando ferramentas ACS sem formulários, para que eles aberto em ambas as versões. Manter todos esses relatórios para diferentes versões e diferentes bancos de dados é trabalhoso e fútil, porque Existem planos para mudar para uma única configuração e base...

Vamos criar um perfil.
No console do cluster, criamos um perfil de segurança no qual definimos os sinalizadores "Pode ser usado como perfil de segurança no modo de segurança" e " na seção "Acesso total permitido:" "para modo privilegiado".

Em muitos casos de utilização de relatórios e processamento simples, este método será aplicável. Para situações mais complexas, não adianta descrever o processo, pois está descrito na documentação (a capacidade de configurar perfis de segurança para arquivos externos específicos, especificando sua quantidade de hash, etc.).

P.S. Achei que os perfis de segurança funcionavam apenas ao usar licenças de plataforma e servidor no nível CORP, mas essa funcionalidade também funciona na plataforma 1C:Enterprise 8.3 (pode ser chamada condicionalmente de PROF, por analogia com as configurações padrão Básico/PROF/CORP)

A abertura programática do processamento externo é realizada através do objeto de contexto global ExternalProcessing, que possui o tipo Gerenciador de Processamento Externo. Para cada modo operacional da plataforma 1C (modo de aplicativo regular e modo de aplicativo gerenciado), diferentes métodos de objeto são usados ​​para trabalhar com processamento externo.

Executando processamento externo no modo de aplicativo normal

Em uma aplicação típica, você deve usar o método Create() do objeto ExternalProcessing, ao qual é passado o nome completo do arquivo de processamento externo. O método retorna um objeto do tipo Processamento Externo, este objeto é o processamento externo que está sendo aberto. Se você precisar abrir um formulário de processamento externo, chame o método GetForm() no objeto recebido, que retornará o formulário principal, e então chame o método Open() para abri-lo.


Processando = ExternalProcessing.Create(FullFileName);
Processing.GetForm().Open();

No processamento externo, o formulário principal deve ser sempre regular e o formulário controlado deve ser sempre adicional, caso contrário o método GetForm() não funcionará no modo normal de aplicação.

Executando processamento externo no modo de aplicativo gerenciado

No modo de formulários gerenciados, o algoritmo é dividido por contexto de execução. No cliente, recebemos dados binários utilizando o nome completo do arquivo de processamento externo. Transferimos os dados binários recebidos para o servidor e os colocamos em armazenamento temporário. Em seguida, você precisa chamar o método Connect() do objeto ExternalProcessing, para o qual é passado o endereço para armazenamento temporário. O método retorna o nome do processamento externo conectado. Retornamos o nome do processamento externo ao cliente, criamos um caminho de string para o formulário de processamento e usamos o método OpenForm() para abrir o formulário de processamento externo.

&No servidor
Função GetExternalProcessingName(BinaryData)
AddressInTemporaryStorage = PlaceInTemporaryStorage(BinaryData);
Retornar ExternalProcessing.Connect(AddressInTemporaryStorage);
Função Final

&NoCliente
NomeArquivo Completo = ""; // Nome completo do arquivo de processamento externo.
DadosArquivo = new BinaryData(NomeArquivoCompleto);
NomeProcessamentoExterno = GetExternalProcessingName(FileData);
OpenForm("ProcessamentoExterno." +NomeProcessamentoExterno + ".Formulário");

Modo de segurança para processamento externo

Os métodos Create() e Connect() do objeto de processamento externo possuem um parâmetro de entrada SafeMode - um sinal de conexão do processamento externo no modo de segurança. Se o parâmetro não for especificado, a conexão será feita em modo seguro.
O modo de segurança foi projetado para proteger o sistema contra a execução de código de programa “não confiável” no servidor. O perigo potencial vem do processamento externo ou do código do programa inserido pelo usuário para uso nos métodos Run() e Calcular().
O modo de segurança impõe as seguintes restrições:
  • o modo privilegiado é cancelado se tiver sido instalado;
  • as tentativas de entrar no modo privilegiado são ignoradas;
  • operações com objetos COM são proibidas;
  • é proibido carregar e conectar componentes externos;
  • o acesso ao sistema de arquivos é proibido (exceto para arquivos temporários);
  • O acesso à Internet é proibido.
Os processos abertos interativamente não são executados em modo de segurança, portanto é recomendado implementar um mecanismo para abertura de processadores externos em modo de segurança, bem como no nível de permissão para proibir o usuário de abrir processadores externos de forma interativa.
Para proibir a abertura interativa de processamento, em todas as funções atribuídas ao usuário, é necessário remover o direito “Abertura interativa de processamento externo” (ver Figura 1).
Figura 1. Direitos para abrir interativamente processamento/relatórios externos
O direito "Abertura interativa de processamento externo" não afeta de forma alguma o objeto Processamento Externo.

A abertura programática de relatórios externos é semelhante ao processamento externo, mas você deve usar o objeto de contexto global ExternalReports, que possui o tipo Gerenciador de relatórios externos.

O fato é que ao utilizar a versão cliente-servidor do 1C, os processamentos/relatórios externos são abertos em modo de segurança, no qual é proibido o uso do modo privilegiado. E o modo privilegiado é muito utilizado em configurações típicas: geração de formulários impressos, verificações de serviços diversos (registro de trocas), etc. Como resultado, mesmo usando um relatório regular no sistema de controle de acesso sem formulário (por padrão, o formulário geral "ReportForm" é usado) e salvando as configurações do relatório personalizado (no diretório correspondente), você receberá um erro sobre acesso insuficiente direitos a várias constantes e parâmetros de sessão usados ​​para fins oficiais após a linha SetPrivilegedMode(True);

A solução “correta” seria conectar processamento e relatórios externos através dos mecanismos “Relatórios e processamento adicionais” do BSP com desabilitação do modo de segurança ou adição de permissões (na minha opinião, da versão 2.2.2.1 do BSP). Mas se por algum motivo for necessário usar arquivos de relatório/processamento externos, você poderá configurar um perfil de segurança de cluster usado como um perfil de segurança de modo seguro para uma infobase específica.

Gostaria de salientar desde já que esta opção não é preferível, mas devido a várias circunstâncias pode ser utilizada de forma simplificada. Por exemplo, tenho vários bancos de dados em cidades diferentes, um local comum com direitos estritamente limitados, USB fechado, etc., em algum lugar eu uso Contabilidade 2.0, e em algum lugar 3.0, faço quase todos os relatórios usando ferramentas ACS sem formulários, para que eles aberto em ambas as versões. Manter todos esses relatórios para diferentes versões e diferentes bancos de dados é trabalhoso e fútil, porque Existem planos para mudar para uma única configuração e base...

Vamos criar um perfil.
No console do cluster, criamos um perfil de segurança no qual definimos os sinalizadores "Pode ser usado como perfil de segurança no modo de segurança" e " na seção "Acesso total permitido:" "para modo privilegiado".

Em muitos casos de utilização de relatórios e processamento simples, este método será aplicável. Para situações mais complexas, não adianta descrever o processo, pois está descrito na documentação (a capacidade de configurar perfis de segurança para arquivos externos específicos, especificando sua quantidade de hash, etc.).

P.S. Achei que os perfis de segurança funcionavam apenas ao usar licenças de plataforma e servidor no nível CORP, mas essa funcionalidade também funciona na plataforma 1C:Enterprise 8.3 (pode ser chamada condicionalmente de PROF, por analogia com as configurações padrão Básico/PROF/CORP)