Abrir
Fechar

Adicionando um formulário de impressão externo ao banco de dados. Adicionando um formulário de impressão externo ao banco de dados Configurando formulários de impressão em 1s 8.2

Este artigo contará em detalhes como um iniciante com pouco conhecimento de 1C 8 pode criar um formulário impresso. Por exemplo, vamos pegar uma das configurações 1C 8 mais comuns - Contabilidade 2.0. Criando um formulário impresso 1C etapas de escrita:

  • Criação de um arquivo de formulário de impressão externo;
  • Criação de layout de formulário impresso;
  • Escrever código de programa para exibir dados de formulários impressos na tela;
  • Criação de parâmetros para cadastro automático de formulário impresso;
  • Conectando um formulário de impressão externo à base Empresas 1C.

Criação de um formulário impresso 1C. Formulação do problema

Somos obrigados na configuração Contabilidade 2.0 criar um formulário impresso para um documento Recebimento de mercadorias e serviços. No cabeçalho do formulário impresso, exiba os seguintes dados:

  • Organização;
  • Contraparte;
  • Acordo de contraparte;
  • Data da Receita.

Exibir os dados na seção tabular como uma tabela Bens documento. A tabela deve incluir as seguintes colunas:

  • Nomenclatura;
  • Quantidade;
  • Preço;
  • Soma;
  • E também o preço do item para a data atual (por tipo de preço do documento).

Arquivo de processamento externo

Vamos prosseguir para a solução do problema. Primeiro, vamos abrir 1C 8 no modo Configurador. É neste modo que todos os desenvolvimentos são realizados na plataforma 1C 8. Agora precisamos criar um arquivo de processamento externo. Para fazer isso, clique no menu Arquivo -> Novo… ou pelo ícone de um novo arquivo.

Na janela que se abre, selecione o item Processamento externo.

Próximo em campo Nome Você deve inserir o nome do processamento externo. No nosso caso, simplesmente chamaremos de “PrintForm”; o campo de sinônimo será preenchido automaticamente. Observe que no campo Nome, processamento externo, o nome deverá ser escrito sem espaços ou sinais de pontuação.

Vamos adicionar atributos de processamento externo LinkToObject e selecione digite para ele DocumentLink.. Para fazer isso, na árvore de metadados de processamento externo 1C, selecione o item Requisitos e pressione o botão Adicionar(botão com mais verde). A janela de propriedades do atributo será aberta no lado direito da tela, no campo Nome vamos escrever - ReferênciaToObject. EM campo Tipo pressione o botão com três pontos.

Vamos expandir o ramo na árvore de tipos DocumentLink, e encontre o elemento Recebimento de Mercadorias e Serviços ali, marque a caixa ao lado dele e clique OK.

Vamos salvar o arquivo de processamento externo no disco rígido; para isso, utilize o menu; Arquivo -> Salvar, pictograma Salvar(disquete azul) ou um atalho de teclado Ctrl+S. Vamos nomear o arquivo salvo como “PrintForm”.

Criando um layout de formulário impresso

Vamos começar a criar um layout do formulário de impressão 1C. O layout serve como modelo para a saída do formulário impresso, portanto, se você deseja que seu formulário impresso tenha uma boa aparência, preste atenção nele.

Vamos adicionar um novo layout na árvore de metadados de processamento externo, não mudaremos nada na janela do designer de layout e clicar no botão; Preparar.

No novo layout que se abre, criaremos diversas áreas necessárias à visualização do formulário impresso. Todas as áreas de layout que precisamos serão horizontais, então para criar uma nova área, selecione o número necessário de linhas de layout e vá para o menu Tabela -> Nomes -> Atribuir nome ou use o atalho do teclado Ctrl + Shift + N, em seguida, insira o nome da região na caixa. Ao criar uma área de layout, não tenha medo de errar na quantidade de linhas que você sempre pode adicionar ou remover; Para excluir uma linha de layout 1C, selecione a linha desejada e selecione o item no menu de contexto Excluir. Para adicionar uma nova linha ao layout, selecione qualquer linha do layout e selecione o item no menu de contexto Expandir.

Adicionando um cabeçalho de layout

Primeiro de tudo, vamos criar uma área Um boné, ele exibirá os dados do cabeçalho do formulário de impressão. Para esta área precisaremos de sete linhas de layout. Vamos selecioná-los e, como escrevi acima, pressione a combinação de teclas Ctrl + Shift + N, em campo Nome escreva “Chapéu” e pressione o botão OK.

Vamos preencher a área de layout com os dados que precisamos. Normalmente, nenhum formulário impresso fica completo sem um título, então vamos criar um também em nosso cabeçalho de layout. Como no título, além do nome do formulário impresso, exibiremos também o número do documento a partir do qual foi impresso, definiremos como parâmetro o texto do título no layout. Um parâmetro de layout é uma célula de layout especialmente designada na qual vários dados podem ser gerados usando a linguagem 1C 8 integrada. O título deve ser exibido em toda a largura do formulário impresso, então vamos decidir quantas células de layout serão suficientes para imprimirmos na orientação paisagem padrão da folha.

Normalmente treze ou quatorze células de layout são suficientes, selecione-as na primeira linha da área Um boné e combine em uma célula ( Menu de contexto -> Mesclar). Depois disso, clique duas vezes na célula grande resultante e escreva o nome do parâmetro, no nosso caso “TitleText”. Para que o texto inserido se torne um parâmetro completo, clique com o botão direito na célula e selecione o item no menu de contexto Propriedades. No marcador Disposição vamos encontrar o campo Enchimento e selecione o valor Parâmetro. Os parâmetros no layout 1C são indicados entre colchetes “<>».

O título do formulário impresso deve se destacar dos demais textos, então selecione a célula novamente e utilize os ícones do painel de formatação do layout para definir o alinhamento do texto Centralizado e tamanho da fonte 14.

Após o texto do título iremos exibi-lo na área Um boné informações sobre a organização, contraparte, acordo de contraparte e data de recebimento da mercadoria. Como todos esses dados também são retirados do documento, também iremos formalizá-los com parâmetros. Além disso, antes de cada parâmetro você deve escrever um texto explicativo para que o usuário possa entender facilmente onde está a organização, onde está a contraparte, etc. Todas essas ações são semelhantes à criação de um título, então não vou me alongar sobre elas, apenas darei uma ideia do que deve acontecer no final.

A figura mostra como os parâmetros de layout diferem do texto normal.

Adicionando um cabeçalho de tabela de layout

A última coisa que precisamos criar nesta área de layout é o cabeçalho da tabela, no qual serão exibidos os dados da parte tabular Bens. As colunas necessárias para a tabela foram descritas na seção “Declaração do Problema”. Também criaremos um cabeçalho de tabela usando uma combinação de células e escrevendo texto (nomes de colunas). Selecione as bordas do cabeçalho da tabela usando a ferramenta Quadro, localizado no painel de formatação de layout.

Adicionando uma tabela a um layout

Vamos criar outra área no layout - Dados. A tabela de dados da parte tabular será exibida nela Bens. Para esta área, precisamos apenas de uma linha de layout. Para exibir todas as linhas da parte tabular de forma impressa, preencheremos e exibiremos esta área o número de vezes necessário. Colunas na área Dados deve coincidir com as colunas do cabeçalho da tabela, portanto o preenchimento não será difícil. A única diferença está na área Dados precisamos de parâmetros, não apenas de texto. Observe também que, por padrão, os parâmetros numéricos são formatados à direita e os parâmetros de texto são formatados à esquerda. Para selecionar colunas, você também precisa usar a ferramenta Quadro.

Adicionando um rodapé a um layout

A última área de layout que precisamos é Porão. Ele exibirá os totais por quantidade e valor. A criação é semelhante à criação de uma área Dados, mas adicionalmente os resultados devem ser destacados em negrito.

O resultado final deve ser um layout parecido com este:

Criação de um formulário impresso 1C. Programação

Vamos começar a programar - esta é a etapa mais importante na criação de um formulário impresso. Primeiramente vamos ao módulo do objeto formulário de impressão externa, é aqui que iremos programar. Para fazer isso, na janela principal de processamento externo, clique em Ações -> Abrir módulo de objeto.

Você precisa criar uma função de exportação no módulo de objeto de formulário de impressão externo Selo().

Função Print() Exportar EndFunction

Observe que esse recurso é necessário para impressão externa de formulários em configurações que usam o aplicativo normal. Todo o código do programa subsequente necessário para exibir o formulário impresso será escrito dentro desta função.

Inicializando Variáveis ​​Básicas

Vamos criar uma variável TabDoc, que conterá um documento de planilha - este é exatamente o formulário impresso no qual exibiremos as áreas preenchidas do layout.

TabDoc = novo TabularDocument;

Para uma variável Disposição Obteremos o layout do formulário impresso que criamos. Para fazer isso, usamos a função integrada ObterLayout(<ИмяМакета>).

Layout = GetLayout("Layout");

Converteremos todas as áreas do layout em variáveis. Para fazer isso usamos o método de layout GetArea(<ИмяОбласти>) .

HeaderArea = Layout.GetArea("Cabeçalho"); AreaData = Layout.GetArea("Dados"); AreaFooter = Layout.GetArea("Rodapé");

Saída do cabeçalho de um formulário impresso em um documento de planilha

Todas as variáveis ​​necessárias são inicializadas. Vamos começar a preencher e exibir as áreas de layout em uma planilha. Primeiramente vamos preencher o título do formulário imprimível para isso precisamos passar o parâmetro; Texto do título, que criamos no layout, o texto que precisamos. Para preencher os valores dos parâmetros, a área de layout possui uma coleção especial, que é chamada - Opções. A partir do qual através de “.” você pode obter qualquer parâmetro. No texto do cabeçalho transferiremos o texto: “Forma impressa”, bem como o número do documento.

Header Area.Parameters.TitleText = "Imprimir formulário"+LinkToObject.Number;

Preenchemos os demais parâmetros do cabeçalho de forma semelhante e obteremos todos os valores necessários para eles a partir dos detalhes; Referência para objeto, que contém um link para o documento a ser impresso.

HeaderArea.Parameters.Organization = LinkToObject.Organization; HeaderArea.Parameters.Account = LinkToObject.Account; HeaderArea.Parameters.ReceiptDate = LinkToObject.Date; Header Area.Parameters.Contrato de contraparte = LinkToObject.Contrato de contraparte;

Todos os parâmetros do cabeçalho estão preenchidos, iremos exibi-lo na planilha que criamos, para isso utilizamos o método Saída(<Область>) .

TabDoc.Output(HeaderArea);

Escrevendo um pedido de handicap impresso

Vamos começar a preencher e desenhar a área Dados. A criação de um formulário impresso 1C também envolve escrever uma consulta que precisamos para obter dados tabulares; Bens e preços Nomenclaturas para a data atual usaremos Solicitar. A linguagem de consulta 1C 8 é semelhante ao SQL, ou melhor, praticamente copia os recursos de seu operador SELECT, mas toda a consulta é escrita em russo. Portanto, se você estiver pelo menos vagamente familiarizado com SQL, entenderá facilmente a linguagem de consulta 1C 8.

Nesta forma impressa, o pedido será bastante simples e muitos dirão que seria possível prescindir dele, mas o conhecimento da linguagem de consulta e a capacidade de utilizá-la com competência é uma das principais competências de um programador 1C. As consultas permitem obter amostras de dados complexas usando menos recursos, e o texto da consulta é muito mais fácil de entender do que o código do programa escrito sem usar uma consulta (ou com uso mínimo dela). Além disso, 1C 8 possui um designer de consultas muito bom que permite montar interativamente uma consulta a partir das tabelas necessárias.

Vamos criar uma variável que conterá a solicitação.

Solicitação = Nova Solicitação;

Comporemos o texto da consulta usando o construtor de consulta. Para começar, vamos escrever:

Solicitação.Text = "";

Coloque o cursor do mouse entre as aspas e pressione o botão direito do mouse. No menu de contexto que é aberto, selecione o item Solicitar construtor, isso nos ajudará muito na criação de um formulário de impressão 1C. Depois disso, a janela do designer de consulta será aberta; ela contém várias abas, mas para nossa consulta precisaremos apenas de quatro: “Tabelas e Campos”, “Relações”, “Condições”, “Joins / Aliases”.

Para nossa consulta precisaremos de duas tabelas: parte da tabela Bens documento Recebimento de mercadorias e serviços e um instantâneo das informações mais recentes sobre a data atual do registro Preços dos itens.

No lado esquerdo da janela do designer encontramos a coluna Base de dados. Ele contém uma árvore de todos os objetos de metadados, vamos encontrar aqueles que precisamos. Para fazer isso, vamos abrir o tópico Documentação e encontre o documento Recebimento de Bens e Serviços, vamos abri-lo e encontrar a parte tabular Bens, arraste-o para a coluna do designer de consulta Tabelas. Você pode arrastar de três maneiras: arrastando, clicando duas vezes na tabela ou selecionando-a e clicando no botão “>”. Vamos abrir o tópico Registros de informações e encontre a mesa lá PreçosNomenclatura.SliceLatest, arraste-o também para a coluna Tabelas. Essas duas tabelas são suficientes para nossa consulta.

Vamos selecionar os campos que precisamos nas tabelas resultantes. Para fazer isso, na coluna Tabelas vamos abrir a mesa e encontre os campos: Nomenclatura, Quantidade, Preço, Quantidade e arraste-os para a terceira coluna do construtor - Campos. Vamos expandir a tabela , vamos encontrar o campo Preço e também arraste-o para Campos.

A estrutura das tabelas e campos da nossa requisição está pronta, agora vamos passar às condições. Precisamos dos dados tabulares Bens não foram retirados de todos os recibos, mas apenas daquele que imprimimos. Para fazer isso, vamos impor uma condição na mesa Recebimento de MercadoriasServiçosMercadorias. Vamos para a aba “Condições” do designer de consultas. Em uma coluna Campos as tabelas que selecionamos anteriormente estão localizadas, para a condição precisaremos de um campo Link Da mesa Recebimento de Mercadorias e Serviços, Vamos arrastá-lo para a janela Condições.

Nas consultas 1C, você pode usar parâmetros; eles são necessários para transferir dados para a solicitação. Por exemplo, se quisermos limitar a seleção de documentos a um documento específico, podemos usar um parâmetro para passar um link desse documento para a solicitação e usar esse parâmetro na condição. É exatamente isso que faremos em nosso pedido.

Depois da janela Condições adicionamos um campo Link, o próprio designer da consulta criará um parâmetro com o mesmo nome e o colocará após o sinal “=”. Este parâmetro pode ser renomeado, se desejado. No texto da solicitação, os parâmetros são marcados com o sinal “&”, mas neste caso isso não é necessário, pois se presume que a segunda parte da condição contém um parâmetro, basta lembrar disso. Como passar um valor para um parâmetro de solicitação 1C será discutido abaixo.

Como na solicitação não estamos utilizando uma tabela completa de preços de produtos, mas sim uma virtual (neste caso uma fatia desta), precisamos definir as condições para a formação desta tabela virtual, no nosso caso esta é a a data de corte e a condição do tipo de preços (os preços que têm um tipo de preço estritamente definido é o especificado no documento de recebimento que imprimimos).

Para preencher os parâmetros da tabela virtual, acesse a aba Tabelas e campos construtor de consulta, na coluna Tabelas selecione a tabela PreçosNomenclaturaCorteÚltimo e pressione o botão Opções de mesa virtual, localizado na parte superior. Na janela que se abre, no campo Período você deve definir um parâmetro para o qual será passada a data em que será feito o corte de preço. No nosso caso, esta será a data atual (ou seja, hoje), por isso chamaremos o parâmetro “&CurrentDate”. No campo de condições escreveremos as condições para o tipo de preço, também passaremos no parâmetro, que chamaremos de “&TypePrice”. A condição resultante será semelhante a esta (onde TipoPreço- registrar medição Preços dos itens):

TipoPreço = &TipoPreço

Os parâmetros da tabela virtual estão preenchidos, clique no botão OK.

Agora que limitamos a seleção apenas ao documento que precisamos, vamos criar conexões entre as tabelas de consulta. Caso isso não seja feito, os preços da tabela PricesNomenclatureSliceLast não serão associados ao item do recibo. Vamos para a aba Conexões designer de consulta. Vamos criar uma conexão em todo o campo Nomenclatura entre nossas duas mesas. Para fazer isso, pressione o botão Adicionar, em campo tabela 1 selecione uma mesa Recebimento de MercadoriasServiçosMercadorias, e no campo Tabela 2 - PreçosNomenclaturaSliceLast. Nas condições de comunicação, selecione os campos Nomenclatura de ambas as tabelas.

Deve-se notar também que na seleção da consulta precisamos obter todas as linhas da parte da guia Bens e preços somente se estiverem disponíveis na data atual para o tipo de preço do documento. Assim, os dados tabulares Bens são obrigatórios, mas os dados de discriminação de preços não estão disponíveis. Portanto, nos relacionamentos entre essas tabelas é necessário utilizar o chamado LEFT JOIN, e a tabela da esquerda (ou obrigatória) será Recebimento de MercadoriasServiçosMercadorias e o PriceNomenclatureSliceLast correto (ou opcional). Para que a junção esquerda das tabelas de consulta funcione conforme descrevi acima, você precisa marcar a caixa Todos depois do campo Tabela 1.


A solicitação está quase pronta, só falta trabalhar um pouco nos aliases do campo. Vamos para o marcador Uniões/aliases e defina um alias para o campo PreçosNomenclatura Slice Latest.Price. O nome do apelido será - Preço como hoje, é necessário para que os nomes dos campos de seleção da consulta e os nomes dos parâmetros no layout do formulário impresso correspondam.

O trabalho no designer de consultas está concluído, clique em OK. Depois que a janela do designer fechar, você verá que a linha com o texto da solicitação está preenchida e fica assim:

Request.Text = "SELECT | Recebimento de mercadoriasServiçosProdutos.Nomenclatura, | Recebimento de mercadoriasServiçosProdutos.Quantidade, | Recebimento de mercadoriasServiçosProdutos.Preço, | Recebimento de mercadoriasServiçosProdutos.Quantidade, | PreçosNomenclatura Fatia do mais recente.Preço AS PreçoHoje | DE | Documento. Recebimento de MercadoriasServiços.Mercadorias AS Recebimento ProdutosServiçosProdutos | CONEXÃO ESQUERDA CadastroInformações.PreçosNomenclatura.SliceÚltimo (| &DataAtual, TipoPreço = &TipoPreço) AS PreçosNomenclaturaFatiaÚltimo ON Recebimento de MercadoriasServiçosProdutos.Nomenclatura |

Executando a solicitação

Vamos passar os parâmetros necessários à requisição; para isso utilizaremos o método request; SetParameter(<ИмяПараметра>,<Значение>). Para obter a data atual, use a função integrada A data atual(), ele retorna a data e a hora do computador.

Vamos executar uma consulta para obter uma amostra com os dados que precisamos. Para fazer isso, primeiro use o método de solicitação Correr(), e então o método Escolher().

Selecione = Query.Run().Select();

Preenchendo a tabela do formulário impresso

Como resultado, na variável Amostra conterá uma seleção de resultados de consulta, você pode navegar por ela usando o método Próximo(), e para percorrer tudo você precisa de um loop Tchau. O desenho será o seguinte:

Enquanto Select.Next() Loop EndLoop;

É neste loop que iremos preencher e exibir a área de layout Dados. Mas primeiro, vamos inicializar duas variáveis ​​do tipo numérico. Neles coletaremos os totais por quantidade e valor que precisamos exibir na área Porão.

SomaTotal = 0; QuantidadeTotal = 0;

Dentro do loop vamos preencher a área Dados dados do elemento de seleção atual em variáveis Montante total E Quantidade total adicionar valores de soma e quantidade e, por fim, exibir a área em uma planilha usando o método que já conhecemos Saída(). Já que os nomes dos campos da nossa solicitação coincidem totalmente com os nomes dos parâmetros da área Dados, então para preencher usaremos o procedimento interno FillPropertyValues(<Приемник>, <Источник>), que copia valores de propriedade<Источника>para propriedades<Приемника>.

Enquanto Selection.Next() Loop FillPropertyValues(AreaData.Parameters,Selection); TotalSum = TotalSum + Sample.Sum; QuantidadeTotal = QuantidadeTotal + Quantidade.Amostra; TabDoc.Output(AreaData); Fim do Ciclo;

Gerando o rodapé de um formulário impresso em um documento de planilha

Resta preencher e exibir a última área do layout - Porão. Já preparamos os dados para preenchimento, o preenchimento e a retirada são realizados de acordo com o mesmo esquema.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = TotalSum; TabDoc.Output(AreaFooter);

O documento da planilha está totalmente preenchido, resta exibi-lo na tela para que o usuário possa visualizar o formulário impresso e imprimi-lo se necessário. Mas nas configurações típicas do 1C 8, os procedimentos dos módulos especiais são responsáveis ​​​​pela saída dos formulários impressos externos. Portanto, basta retornar da função Selo() documento de planilha preenchido.

Retornar TabDoc;

Neste ponto, a etapa de programação está concluída e a criação do formulário de impressão 1c está quase concluída. Texto completo da função Selo() Não vou dar aqui, você pode conferir no arquivo para impressão, que pode ser baixado no final do artigo.

Criação de um formulário impresso 1C. Opções de registro automático

Ao conectar um formulário de impressão externo ao banco de dados, o sistema não determina automaticamente a qual documento ou livro de referência o formulário de impressão se destina; E se outra pessoa escreveu o formulário impresso e você só tem a tarefa de conectá-lo, a escolha pode se tornar ambígua. Para evitar tais problemas, em todos os impressos externos é necessário criar um layout com parâmetros de autocadastro. Se for criado e formatado corretamente, o sistema determina automaticamente a qual documento ou livro de referência se destina o formulário impresso.

Isso é feito da seguinte forma:

  • No processamento externo criamos um novo layout. Chamamos isso de “Settings_Auto-Registration” (é importante não cometer erros!).
  • Na primeira célula do layout escrevemos Documentação.(ou Diretórios.) e o nome do documento ao qual você precisa conectar o formulário impresso.

Conectando um formulário de impressão externo à base

  • Inicie 1C 8 no modo Empresa;
  • Ir para o cardápio Serviço -> Relatórios e processamento adicionais -> Formulários impressos externos adicionais;
  • Clique no botão Adicionar;
  • Na janela que se abre, clique no ícone Substituir arquivo de processamento externo;
  • Se você criou parâmetros de registro automático, concordamos em usá-los;
  • Se você não criou parâmetros de registro automático, na seção tabular Acessório de placa de impressão adicione o documento ou livro de referência necessário;
  • aperte o botão OK.

Após isso, o formulário de impressão externa estará disponível no menu Selo documento Recebimento de mercadorias e serviços. A criação do formulário impresso 1C agora pode ser considerada concluída.

A vida continua, a legislação muda, o desenvolvedor lança atualizações de configuração e novamente temos uma escolha: instalar nós mesmos a atualização ou chamar novamente o programador para “instalar uma nova versão”...

Vamos conhecer o mecanismo de alteração dos formulários de impressão sem alterar a configuração.


Na prática de todo contador que utiliza 1C, sempre houve a necessidade de modificar a configuração por si mesmo: alguns ajustaram a precisão do preço ou valor da fatura, alguns inseriram um logotipo e ajustaram a aparência da fatura. Tudo ficaria bem, mas muitas dessas alterações se acumulam ao longo do tempo e quando chega a hora de atualizar a versão, surge um dilema: ou perde todas as alterações feitas ou chama um programador para transferir todas as alterações para a nova versão (de curso por uma taxa adicional). Como ser? Para simplificar de alguma forma a atualização das configurações, os desenvolvedores criaram um novo mecanismo: “Processamento externo, formulários impressos, processamento para preenchimento de partes tabulares”. Hoje veremos apenas parte desse mecanismo - impressão de formulários.


Qualquer assunto é melhor aprendido pelo exemplo. Vamos nos propor a seguinte tarefa: adicionar à configuração a possibilidade de imprimir uma fatura (documento “Vendas de bens e serviços”) com o logotipo da nossa empresa. Além disso, é necessário que no cabeçalho do documento as inscrições "fornecedor" E "comprador" foram destacados em negrito e por fim, é necessário que na parte inferior do documento haja local para a assinatura do serviço de segurança que autorizou o envio.


Vamos introduzir duas condições adicionais:

  • O novo formulário impresso deverá substituir o antigo "Fatura"
  • A configuração não pode ser alterada, pois queremos usar a atualização automática da configuração no futuro

Bem, qual é a tarefa? Parece muito complicado? Bem, quanto mais complexo for, mais interessante será e mais você desejará resolvê-lo. Então mãos à obra.


Lançamos nosso banco de dados no modo Configurador. Abra a configuração selecionando o comando no menu principal "Configuração > Configuração aberta". Não alteraremos a configuração em si em nenhuma circunstância. Usaremos isso como protótipo. Faremos o trabalho principal aqui, mas editaremos o processamento externo. Criamos processamento externo com um comando no menu principal "Arquivo > Novo". Selecionando o tipo de documento "Processamento externo". Para o primeiro processamento, vamos definir um nome "Fatura com marca"


Importante! O nome do processamento não deve conter espaços, assim como os nomes das variáveis.


Agora vamos fazer um pouco "plágio". Vamos copiar o layout "Fatura" do documento "Vendas de Bens e Serviços". Para fazer isso, vamos encontrá-lo no ramo "Documentação"árvore de configuração. Expanda este tópico clicando no ícone «+» e encontre o layout que precisamos "Fatura"(está no tópico "Layouts"). Para copiar este objeto, você precisa selecionar este layout na árvore e executar o comando "Editar > Copiar"(a mesma ação ocorre com a combinação CTRL+C). Agora vamos ao processamento que criamos, selecione um rótulo na árvore "Layouts" e no menu principal selecione o item - "Editar > Colar" (CTRL+V). O resultado deve ser semelhante à Figura 1.


Agora clique duas vezes para abrir o layout.

O que é um "layout"

Digamos algumas palavras sobre o propósito do layout.

Disposição- armazenar "blocos de construção", áreas a partir das quais, como tijolos, se constrói um documento tabular, que costumamos chamar de impresso. As áreas são definidas usando seções horizontais e verticais ou suas interseções. Nosso layout possui apenas seções horizontais: “Cabeçalho”, “Fornecedor”, “Comprador”, “Cabeçalho da tabela”, “Linha” (ver Fig. 2). Uma área é um conjunto de células. Como no MS Excel, as células podem ser mescladas, as cores do texto e do fundo, as fontes e assim por diante podem ser alteradas. Todas as configurações das células podem ser visualizadas e alteradas na janela de propriedades da célula. Você pode abrir a janela de configurações clicando com o botão direito na célula e selecionando o item do menu de contexto "Propriedades"(o mesmo resultado é obtido pelo atalho de teclado Alt + Enter).


Uma célula pode conter um dos três tipos de valores:

  1. texto– um valor deste tipo será impresso no mesmo formato;
  2. parâmetro– uma célula deste tipo contém o nome de uma variável cujo valor será impresso.
  3. amostra– células deste tipo são uma combinação da primeira e da segunda opções. A célula pode conter texto e variáveis. Para que um programa distinga texto de uma variável, as variáveis ​​devem ser colocadas entre colchetes: "Hoje é [data]".

Importante! O editor de tabelas exibe os valores das células do segundo e terceiro tipos entre colchetes triangulares. Na Figura 2 há uma célula com texto "Comprador"- parece texto e à direita da célula "Apresentação do Comprador"- parâmetro.

Por que estou contando tudo isso? Agora você sabe em quais células pode alterar facilmente o conteúdo e em quais é indesejável alterar alguma coisa, pois será necessário fazer alterações no algoritmo de impressão.

Voltemos agora à nossa tarefa. Criamos o processamento, copiamos o layout e estamos prontos para modificá-lo ao nosso gosto. Primeiro, vamos dar uma olhada nisso.

O que está incluído no layout para impressão

A estrutura de layout de todos os documentos é muito semelhante. Tendo examinado cuidadosamente um documento, podemos lidar com outros. Primeira sessão "Título". Ao visualizar esta seção, será gerado um cabeçalho do documento, composto pelo tipo, data e número do documento. É seguido por seções "Fornecedor" e "Comprador", onde o programa exibirá informações sobre o fornecedor e o comprador, respectivamente. A seguir está uma seção mais interessante "Informações adicionais", que os desenvolvedores utilizam para exibir outras informações no documento, por exemplo, informações sobre o contrato com seu número e data. A peculiaridade desta seção é que ela pode ser exibida diversas vezes, e cada vez pode conter informações diferentes. O que exatamente imprimir e quando está descrito no algoritmo de impressão.

Isso completa o cabeçalho do documento. O cabeçalho geralmente é seguido por uma seção tabular. Curiosamente, o layout descreve duas opções para exibir a parte tabular: "Cabeçalho da tabela", "Sequência" e "HeaderTablePlaces" E "StringPlace". Dependendo se sua coluna está preenchida ou não "Mest" no documento, será utilizada a primeira ou segunda opção de exibição da parte tabular do documento. O leitor curioso provavelmente já se perguntou: por que na seção de saída do cabeçalho "Preço" E "Soma" são colocadas entre colchetes triangulares como se fossem variáveis? Isso mesmo – são variáveis ​​nas quais, dependendo das configurações do documento, a inscrição será exibida "Preço", "Preço com IVA" ou "Preço sem IVA" e da mesma forma para o valor.

Pois bem, abaixo no layout existem seções com as quais são exibidos os resultados do documento e da assinatura.

Editando o layout

Seria bom colocar o logotipo acima das informações do fornecedor e do comprador. Sugiro editar a área de layout "Título". É necessário reduzir o tamanho da célula que contém o conteúdo "TítuloTexto". Esta célula consiste em várias células mescladas. Alteramos o tamanho da seguinte forma:

  1. Vamos copiar cuidadosamente o conteúdo da célula mesclada "TítuloTexto"(para fazer isso, você precisa selecionar a célula e usar o comando “Editar > Copiar” ou o atalho de teclado CTRL+C)
  2. Após selecionar esta célula, selecione o item no menu principal "Tabela - Mesclar", o que levará ao efeito oposto - a célula mesclada será dividida em muitas células originais
  3. Agora vamos selecionar um número menor de células - em vez da célula 2 da coluna, começaremos a mesclar a partir da coluna 6, terminando na coluna 32 - e clicaremos novamente no botão "Mesclar"
  4. Equipe "Editar > Colar" (CTRL+V) insira o conteúdo da célula mesclada anterior na nova célula mesclada
  5. Simplesmente limparemos as células liberadas nas colunas 2 – 5 (selecione-as e pressione a tecla Delete)

Agora você pode inserir uma imagem com logotipo no espaço livre. Para fazer isso, selecione o item no menu “Tabela > Imagens > Imagem...”. Encontre o arquivo com nosso logotipo no disco e clique em “ OK" Agora vamos mover a imagem para o espaço livre. O resultado deve ser semelhante ao da Figura 3.


Agora vamos destacar os valores nas células em negrito "Fornecedor" E "Comprador"(Fig. 4). Para fazer isso, encontre o parâmetro nas propriedades da célula "Fonte" e defina o estilo como negrito.



E por último, resta adicionar a assinatura do serviço de segurança. Publicaremos essas informações na seção "Assinaturas". Para obter espaço para assinaturas você precisa expandir a seção. Selecione a linha 37, clique com o botão direito nela e selecione "Expandir", e assim por diante duas vezes. Numa das linhas acrescentadas colocaremos um local para assinatura do serviço de segurança. Como resultado, tudo deve ficar como na Figura 5.



Importante! Em uma configuração típica, são usados ​​​​dois idiomas: russo e ucraniano. O layout armazena a representação do texto em ambos os idiomas (o design da célula é geral). Para entrar na versão ucraniana da inscrição que adicionamos, você precisa ir às propriedades da célula e ao campo "Texto" aperte o botão "procurar". Será aberta uma janela para inserção de representações de texto em diferentes idiomas (Fig. 6).

Como garantir a impressão

Então, o layout está pronto. Agora é a hora de trabalhar no algoritmo para imprimi-lo.

Para que possamos integrar este layout na configuração e utilizá-lo sem problemas, o processamento que criamos deve atender às seguintes condições:

  1. Você precisa criar adereços no processamento "Link de objeto" com tipo "AnyLink"
  2. Você precisa criar um procedimento no módulo de processamento "Imprimir() Exportar" sem parâmetros e certifique-se de especificar a palavra-chave " Exportar"

O primeiro ponto é necessário para que o algoritmo de impressão saiba onde obter os dados para impressão, e o segundo é o próprio algoritmo de impressão. Vamos cumprir essas condições.

No painel da janela, selecione a janela para edição do nosso processamento (na Figura 7). Será aberta uma janela com uma árvore de objetos para nosso processamento. Selecionando uma filial "Requisitos" e pressione o botão "Adicionar",. A janela de propriedades do atributo será aberta. Vamos inserir o nome - "Link de objeto" e indique o tipo "AnyLink". Agora podemos passar para o texto do módulo de impressão. Não iremos escrevê-lo do zero; em vez disso, iremos copiá-lo do documento. "Vendas de Bens e Serviços".



Para fazer isso, encontre na árvore de configuração entre os documentos "Vendas de Bens e Serviços", clique com o botão direito sobre ele e selecione "Abrir módulo de objeto"(ver Figura 8).



Isso abrirá o módulo de documento. Precisamos da primeira função "Imprimir Documento". Seu texto deve ser selecionado e copiado. É muito conveniente destacar o texto de uma função quando ela está recolhida, mas você também deve destacar a linha abaixo dela, caso contrário corre o risco de copiar apenas o título.

Veja na Figura 9, destacamos o título e a linha abaixo dele. Depois disso, copie-o para a área de transferência. Menu principal "Editar > Copiar" (ou CTRL+C).



Memorizamos o texto na área de transferência, agora vamos voltar ao nosso processamento "Fatura com marca". Clique no botão "Ações > Módulo de objeto aberto"(Fig. 10).



Cole o texto copiado: "Editar > Colar" (ou CTRL+V).

Agora precisamos editar um pouco o texto copiado, pois ele foi escrito para impressão de um documento a partir do próprio documento, e estamos coletando-o de processamento externo. Para fazer isso você precisa:

  1. Renomeie a função para "Imprimir"
  2. Substituir "EsteObjeto" sobre "Link de objeto"
  3. Substituir "EsteObjeto" sobre "Link de objeto"
  4. Substituir "Conta Bancária da Organização" sobre “Link para conta bancária Object.Organization”
  5. Substituir "Produtos. Resumo" sobre "LinkToObject.Produtos.Total"

Para essas ações você pode usar o item do menu principal "Editar > Substituir".

Depois disso, você deve verificar a sintaxe. Existe uma combinação mágica para isso: CTRL+F7. Como resultado, a seguinte mensagem deverá aparecer: "Nenhum erro de sintaxe encontrado!"

Bem, com isso concluímos todo o trabalho sujo. Agora podemos salvar os resultados do nosso trabalho em um arquivo, por exemplo "BrandedInvoice.epf". Para isso, é necessário ativar a janela deste processamento e salvá-la através do menu principal do programa "Arquivo > Salvar como...". Processando nome do arquivo – "BrandedInvoice.epf"(será oferecido por padrão). Você pode salvá-lo temporariamente em sua área de trabalho para encontrá-lo mais rapidamente mais tarde.

Importante! Como você viu, não fizemos nenhuma alteração em nossa configuração. Para todas as ações descritas acima, você nem precisa removê-lo do suporte (ou seja, habilitar a capacidade de alteração).

Conectando processamento externo à configuração

Agora podemos conectar o processamento à nossa fatura. Para fazer isso, inicie no modo. Vá para o cardápio "Serviço", onde existem três pontos relacionados ao mecanismo “Processamento externo, impressão de formulários, processamento para preenchimento de partes tabulares”. No nosso caso, precisamos apenas do item "Formulários de impressão externa"(ver Fig. 11).



Isso abrirá o diretório. "Processamento externo", com seleção por tipo "formulários impressos". Armazenará uma lista de todos os impressos externos, indicando a que documentos se destinam e em que casos devem ser apresentados.



Importante! O processamento em si ficará armazenado no banco de dados junto com os demais dados, ou seja, após salvar o processamento dentro do banco de dados, não precisaremos de arquivo externo.

Precisamos criar um novo elemento no diretório. Clique Inserir. Agora vamos dar uma olhada no conteúdo do elemento. No nome incluímos uma breve descrição significativa da essência deste formulário, por exemplo, "Fatura da empresa". Como qualquer outro diretório, também possui um código. Vamos deixar como padrão. O atributo type é preenchido por padrão e não pode ser editado – "Imprimir formulário". E o último elemento do cabeçalho é um comentário. Aqui, como sempre, há mais detalhes sobre a finalidade do formulário de impressão. Além do cabeçalho, os elementos deste diretório possuem dois marcadores. A segunda contém informações sobre a restrição dos direitos de acesso a este tratamento. Este tópico foge ao escopo deste artigo (falaremos sobre esta e outras configurações de direitos de acesso sem modificar a configuração em uma das próximas edições).

Vamos dar uma olhada mais de perto na primeira guia.

A guia contém quatro colunas. Representação de objeto– o tipo de documento para o qual gostaríamos de utilizar o nosso formulário de impressão,

Seleção– uma condição sob a qual este formulário impresso deve estar disponível. Por exemplo, redesenhamos o formato impresso da fatura e traduzimos para o inglês. E queremos para clientes da pasta "Europeu" em vez de um formulário impresso padrão "Fatura de Venda" Um novo formulário foi impresso em inglês. Para fazer isso, você pode usar a coluna "Seleção". Um exemplo dessa seleção é mostrado na Figura 13.



Mas em nossa tarefa nenhuma seleção é necessária.

Arquivo de formulário para impressão– indica o arquivo do qual será retirado o layout e o procedimento de impressão. Nesta célula você precisa selecionar o arquivo que salvamos na área de trabalho.

Placa de impressão substituível– se quisermos que o formulário impresso que criamos substitua um dos padrões deste documento, então precisamos indicar qual deles precisa ser substituído. Se não houver nada para selecionar, um formulário impresso adicional aparecerá.

No nosso caso, precisamos "Fatura com marca" foi impressa em vez da fatura habitual. Para fazer isso, selecione neste campo "Fatura de Venda".

Agora vamos salvar este elemento. E abra qualquer fatura.

Deverá ficar como mostrado na Figura 14.



Bem, isso conclui a tarefa que nos propusemos no início do artigo. Acreditamos ter conseguido ilustrar as possibilidades que a utilização do mecanismo de processamento externo abre para o usuário.

Para consolidar as suas competências, pode tentar adicionar de forma independente à configuração um formulário impresso adicional “Para o armazém” para o documento “Recebimento de mercadorias e serviços”, que repetiria a fatura habitual, mas sem preços e valores, e também seria contém campos para inserir a quantidade aceita.

Vamos considerar escrever a forma impressa mais simples em 1s 8,1 - 8,2 usando exemplo de configuração Contabilidade empresarial 2.0. Digamos que você precise escrever um formulário impresso externo para um documento: exibir os dados básicos do documento, bem como da parte tabular Bens: nomenclatura, preço, quantidade e valor.

Você pode baixar o exemplo resultante em .

No configurador Empresas 1C 8 criar processamento externo ( Arquivo->Novo->Processamento Externo), defina o nome, crie os detalhes necessários para o formulário impresso externo Referência para objeto com tipo DocumentLink. Vendas de bens e serviços.

Criando um layout de formulário impresso

Adicione um novo layout, deixe o tipo de layout documento de planilha. Criamos três áreas no layout: Cabeçalho, Dados E Porão. Isso pode ser feito selecionando o número necessário de linhas e clicando no menu Tabela->Nomes->Atribuir nome (Ctrl+Shift+N).

Depois disso, começamos a colocar texto e parâmetros nas áreas. Colocaremos no cabeçalho nome do formulário impresso, número do documento E organização, e também desenhe as bordas do cabeçalho da tabela e escreva os nomes das colunas. Ao criar um parâmetro nas propriedades da célula, na aba Layout você deve definir a propriedade Enchimento no sentido Parâmetro.

Na área Dados vamos criar parâmetros para exibir linhas na seção tabular ( Nomenclatura, preço etc.), e na área Porão para totais por quantidade e valor.

Programação

Vamos para o módulo de objeto de formulário de impressão Ações-> Abrir módulo de objeto.

Vamos criar ali uma função de exportação que é obrigatória para formulários impressos. Selo().

Função Imprimir () Exportar Função Final

Na função vamos criar uma variável para documento de planilha, no qual o formulário impresso será gerado, obtemos layout E áreas de layout.

TabDoc = novo TabularDocument; Layout = GetLayout("Layout"); HeaderArea = Layout.GetArea("Cabeçalho"); AreaData = Layout.GetArea("Dados"); AreaFooter = Layout.GetArea("Rodapé");

Vamos preencher os parâmetros chapéus e trazê-lo para documento de planilha.

HeaderArea.Parameters.HeaderText = +LinkToObject.Number; HeaderArea.Parameters.Organization = LinkToObject.Organization; TabDoc.Output(HeaderArea);

Para obter linhas da tabela Bens usamos a solicitação.

Solicitação = nova Solicitação; Request.SetParameter("Link", ObjectLink); Consulta.Text = "SELECIONE | Nomenclatura de Vendas de Bens e Serviços. | Quantidade de vendas de bens e serviços. | Preço de vendas de bens e serviços. | Quantidade de vendas de bens e serviços.|DE | Documento. Venda de Bens e Serviços COMO Vender Bens e Serviços.|ONDE | Vendas de bens e serviços Link = &Link";

Passamos os detalhes para o parâmetro request Referência para objeto, para indicar na condição ONDE, que precisamos de dados apenas do documento do qual derivamos o formulário impresso. Para obter um exemplo de consulta, primeiro a executamos e depois selecionamos as linhas.

Selecione = Query.Run().Select();

A seguir no loop, preenchemos os parâmetros da área Dados para cada linha da seleção do documento e exibi-los em documento de planilha. Também calculamos os valores totais no loop quantidades E valores. Não preencheremos cada parâmetro separadamente, mas utilizaremos o procedimento PreenchaPropertyValues((<Приемник>, <Источник>) de contexto global, ele copia os valores das propriedades <Источника> para propriedades <Приемника> . A correspondência é feita por nomes de propriedades. Você pode ler mais sobre isso em assistente de sintaxe 1C Enterprise 8.

SomaTotal = 0; QuantidadeTotal = 0; Enquanto Selection.Next() Loop FillPropertyValues(AreaData.Parameters,Selection); TotalSum = TotalSum + Sample.Sum; QuantidadeTotal = QuantidadeTotal + Quantidade.Amostra; TabDoc.Output(AreaData); Fim do Ciclo;

Preencha e exiba a área Porão.

AreaFooter.Parameters.TotalQuantity = TotalQuantity; AreaFooter.Parameters.TotalSum = TotalSum; TabDoc.Output(AreaFooter);

Retornando o documento de planilha preenchido da função Selo().

retornar TabDoc;

Se você estiver usando uma das configurações padrão, após devolver o documento da planilha 1C exibirá o formulário impresso na tela. Você também pode usar o método de documento de planilha para saída. Mostrar().

5. Conectando um formulário impresso a um documento

EM configurações padrão 1C 8 Existe um diretório para cadastro de formulários impressos externos Processamento Externo. Para conectar, acesse o menu no modo empresarial Serviço->Relatórios e processamento adicionais->Formulários impressos externos adicionais.

Adicione um novo elemento de diretório, carregue o formulário impresso do disco e selecione o tipo de documento.

Agora no documento Vendas de bens e serviços Uma nova impressão aparecerá.

Registro automático de formulário impresso

Para garantir que ao conectar um formulário de impressão você não precise selecionar o tipo de documento manualmente, você pode configurar registro automático. Para fazer isso, adicione um novo layout e chame-o Configurações_Registro automático(esta é a única maneira) e em sua primeira célula escrevemos Documentação.<Наименование документа> (ou Diretórios.<Наименование справочника> ).

Agora, ao conectar um formulário de impressão, seremos solicitados a usar parâmetros de registro automático.

Como é sabido - sem um pedaço de papel você... nenhum negócio sério pode prescindir. E quando dizemos que 1C possui algum tipo de documento eletrônico, surge imediatamente a questão de como imprimi-los em papel.

O processo de impressão de um documento eletrônico 1C é denominado formulário de impressão 1C.

Cada documento pode ter vários formulários impressos 1C. Por exemplo, o documento Vendas de bens e serviços (ou seja, venda) é impresso em formulários impressos 1C: TORG-12, Fatura, Nota de Consignação, Certificado de serviços prestados e assim por diante.

A essência do formulário impresso 1C é um modelo (como um documento Excel) no qual as variáveis ​​​​são especificadas. Durante o processo de impressão, o texto do documento eletrônico é substituído por variáveis. O modelo geralmente é armazenado na configuração.

O problema de alterar um formulário impresso 1C padrão é que geralmente não é aconselhável alterar a configuração padrão, caso contrário será mais difícil atualizá-lo. Portanto, vários métodos de utilização de formulários de impressão 1C externos começaram a ser reinventados.

Um formulário de impressão 1C externo é um modelo de impressão armazenado de alguma forma separadamente da própria configuração.

No entanto, tudo isso é teoria. Como criar seu próprio formulário impresso? Ou melhor ainda, como fazer alterações em um já existente?

Como um documento 1C é impresso

Para imprimir qualquer documento 1C (que pode ser impresso), você precisa clicar no botão Imprimir no documento. 1C se oferecerá para selecionar um formulário impresso 1C para este documento da lista.

À esquerda do botão Imprimir geralmente há um botão de acesso rápido ao último formulário de impressão 1C selecionado.

O resultado da impressão fica assim. Para imprimi-lo em uma impressora, você precisa colocar o cursor no formulário de impressão 1C, pressionar Ctrl+P ou o botão da impressora no painel de botões ou no menu Arquivo/Imprimir.

As configurações de impressão (margens, orientação da folha, etc.) estão localizadas no menu Configuração de arquivo/página. Você também pode definir as configurações do usuário para imprimir diretamente na impressora.

De onde vem essa impressão?

Onde está o formulário impresso 1C?

Vamos para o configurador. Encontre o documento necessário na janela de configuração. Vamos expandir seu ramo Layouts. São eles que se transformam na forma de impressão 1C quando impressos.

No entanto, isso não será suficiente - fomos oferecidos para escolher muito mais opções ao imprimir. O fato é que muitos layouts de formulários impressos 1C estão escondidos em outro lugar.

Voltemos ao topo da janela de configuração 1C. Vamos abrir a ramificação Geral e depois a ramificação Layouts Gerais. É aqui que a maioria dos layouts está localizada. Isto é especialmente verdadeiro para formulários impressos regulamentados pelo estado 1C - TORG 12, fatura, etc.

Aliás, não é difícil perceber que você verá diversos layouts de TORG12 ou Invoice. Por que? É fácil de explicar. As leis e os requisitos mudam periodicamente. Mas não podemos simplesmente alterar o mesmo layout – e se tivermos que imprimir o documento a partir de uma data anterior à data da alteração. Portanto, são feitos diversos layouts e, dependendo da data do documento, utiliza-se o correto.

Mas isso não é tudo! Existem também layouts externos. Onde eles estão armazenados?

Voltemos ao modo 1C Enterprise. Através do menu do usuário com direitos administrativos Operações/Diretórios, selecione o diretório Processamento externo.

As linhas deste diretório, que possuem o formato Formulário de impressão, adicionam opções de impressão para o documento especificado na tabela Propriedade do formulário de impressão (na imagem é Vendas de bens e serviços).

Para que isso funcione, é necessário fazer um processamento externo que possua um procedimento Print() em seu módulo objeto denominado Export, que organiza o processo de impressão.
Mas estamos ficando à frente de nós mesmos. Vejamos primeiro como o layout do formulário de impressão 1C é organizado.

Layout do formulário impresso 1C

O layout do formulário de impressão 1C é assim.

Como você pode ver, ele está dividido em blocos. Os blocos podem ser horizontais (nome à esquerda) ou verticais (nome no topo).

O layout em si, tal como está, não é impresso. Blocos individuais são impressos. O programador no procedimento de processamento de impressão especifica a ordem dos blocos e o número de repetições de cada bloco. Como resultado, um formulário impresso é formado.

Para atribuir uma área, selecione várias linhas (ou várias colunas) e selecione Tabela/Nomes/Atribuir um nome no menu. Para remover, existe também o comando Remover nome.

O nome é necessário para que a área possa ser acessada a partir do código do programa. O nome pode ser atribuído não apenas a linhas ou colunas, mas também simplesmente a várias células. Para fazer isso, selecione as células e selecione o mesmo menu.

No entanto, por padrão, os nomes de células personalizados não são exibidos. Para vê-los, selecione o item de menu Tabela/Nomes/Exibir células nomeadas.

Então, hoje aprendemos que um formulário impresso 1C é formado por meio de um layout. O layout consiste em blocos – habilmente chamados de áreas.

Blocos típicos (comumente usados) para chapas de impressão:

  • Cabeçalho – o título do documento é exibido
  • Linha – uma linha da tabela é exibida, este bloco é repetido quantas vezes forem necessárias as linhas que precisam ser impressas
  • Rodapé – o final do documento é exibido.

Agora precisamos lidar com o fato de que