Como criar um formulário de impressão externo em 1c. Publicações

Este artigo descreve como conectar um formulário impresso externo a um banco de dados 1C usando o exemplo da configuração “Trade Management 10.3”

A configuração “Trade Management 10.3” é uma configuração nos chamados formulários “REGULARES”, e não em formulários “GERENCIADOS” como “Trade Management 11.2” para formulários “GERENCIADOS” que recomendamos a leitura;

Nossas instruções “mostra” como conectar um formulário impresso externo em 1C com configuração em formulários “REGULARES”, a saber:

  • "Contabilidade 2.0"
  • "Gestão Comercial 10.3"
  • “Salário e gestão de pessoal 2,5”
  • "Automação abrangente 1.1"
  • "Ao controle empresa de manufatura 1,3"
  • "Varejo 1.0"
  • e outras configurações semelhantes.

Para conectar um formulário de impressão externo em 1C, precisaremos seguir 11 etapas.

1 - Menu “Serviço”. 2 - Selecione “Externo” formulários impressos e processamento." 3 — Próximo — “Formulários impressos externos” (ver figura abaixo ↓)

Para te convencer disso esta instrução adequado para outras configurações em formulários “REGULARES” - vamos imaginar a mesma inicial 1-2-3 passo, mas não em “Trade Management 10.3”, mas em “Contabilidade 2.0” tudo é igual aí com exceção de palavras ligeiramente alteradas nos subparágrafos, nomeadamente...

1 - Menu “Serviço” (igual ao “UT 10.3” e outros).
2 - Aqui “Relatórios e processamento adicionais”, e não “Formulários impressos externos e processamento” como em “UT 10.3”,
mas ainda assim o significado é o mesmo e está localizado no menu “Serviço”.
3 - E então - “Formulários de impressão externos adicionais”, ou seja, palavra extra “Adicional” quando comparado com “UT 10.3” (ver figura abaixo ↓)

A seguir, continuaremos usando o exemplo do “Trade Management 10.3” sem comparações desnecessárias.
4 - Clique no botão “+”, ou seja, "Adicionar". 5 — Um botão onde a pasta é desenhada (ao passar o mouse sobre ela, aparecerá uma dica: “Substituir arquivo processamento externo»).

Nas novas versões do 1C (a partir de agosto de 2016), o programa possui um mecanismo de alerta integrado sobre o perigo de usar processamento externo desconhecido que pode conter “vírus”; em versões anteriores do programa, o aviso não aparecerá! Se isso ocorrer, será necessário conectar o processamento externo - 6 - clique no botão “Continuar”. (veja a figura abaixo ↓)

7 — Selecione o diretório no qual está localizado o arquivo do formulário de impressão externo que precisamos. 8 - Selecione nosso arquivo. 9 — Clique em “Abrir” (veja a figura abaixo ↓)

10 — Um formulário impresso externo pode ter parâmetros de autocadastro, como no nosso caso, aqui faz sentido clicar em “Sim” - utilizando assim esses parâmetros durante o cadastro, ou seja, selecione automaticamente aqueles objetos (documentos ou talvez, por exemplo, diretórios) nos quais será possível usar um formulário impresso externo conectado (veja a figura abaixo ↓)

Só isso, preenchemos a tabela “Afiliação do formulário impresso”, graças aos parâmetros de autocadastro, vemos o nome do formulário impresso externo conectado, talvez você tenha o campo “Comentário” preenchido, etc. Você pode adicionar seus objetos à tabela “Imprimir propriedade do formulário”, por exemplo, para nosso processamento “Formulário de contrato para impressão universal”, que suporta a impressão de muitos documentos e livros de referência, mas os parâmetros de registro automático são definidos apenas para os principais: 10* — Clique no botão verde “Adicionar” e selecione quais objetos também serão colocados para processamento. Agora tudo o que resta é - 11 - clique no botão “OK” e (veja figura abaixo ↓)

Agora vale a pena conferir: fizemos tudo certo?
Para isso, selecionamos um objeto para verificação, por exemplo, o documento “Vendas de bens e serviços”, que está indicado na tabela “Afiliação do formulário impresso”, isso significa que o formulário impresso conectado pode ser utilizado neste documento! Vamos verificar... (veja figura abaixo ↓)

Para verificar se a impressão é possível, abra qualquer documento no formato: “Vendas de bens e serviços”. 13 - Clique no botão “Imprimir”.
Vemos que apareceu uma janela para seleção de formulários impressos, entre eles está - 14 — formulário de impressão externo conectado por nós (veja figura abaixo ↓)

É realizado de acordo com o layout padrão do formulário impresso embutido no aplicativo pelos desenvolvedores (isso é chamado de layout “entregue”).

Se necessário, você pode alterar o layout padrão e, futuramente, imprimir um documento baseado no seu layout pessoal (“personalizado”). Para editar o layout do formulário impresso, é fornecido um mecanismo de upload para um computador local. A edição do layout é realizada na versão local do aplicativo do sistema 1C:Enterprise (em particular, você pode usar o aplicativo gratuito 1C:Enterprise - Trabalhando com Arquivos).


Para alterar o layout imprimível:




A edição do layout do formulário impresso é concluída; ao imprimir o documento, será utilizado o layout no qual foram feitas as alterações.

Se você quiser retornar ao layout de impressão anterior, clique no botão Usar layout padrão. Neste caso, o layout editado ainda estará presente no servidor, podendo ser reativado pressionando o botão Mudar.

Nós desejamos Tenha um bom trabalho!

Como inserir o logotipo de uma empresa em um layout de formulário impresso?

Vamos dar exemplo específico editando um layout de formulário impresso Faturas para pagamento, ou seja, consideraremos como inserir nele uma imagem, por exemplo, o logotipo de uma empresa (esta imagem deve primeiro ser preparada e salva como um arquivo gráfico, por exemplo, em formato png ou jpg).


Assim, agora as faturas que você prepara para transferência às suas contrapartes conterão o logotipo da sua empresa. Para adicionar um logotipo a outros documentos, será necessário repetir os passos descritos para os formulários impressos correspondentes destes documentos.

Desejamos-lhe um bom trabalho!

Boa tarde.

Hoje quero contar como criar formulários impressos externos para a configuração “Gestão de Salários e Pessoal 3.0”. Como você sabe, o ZUP 3.0 usa uma biblioteca de subsistemas padrão, o que significa que a estrutura de processamento parece completamente diferente. Quando tive que fazer pela primeira vez um formulário impresso para o BSP em formulários gerenciados (então era UT 11), a primeira coisa que fiz foi ir ao disco ITS para encontrar documentação detalhada sobre quais procedimentos de exportação, quais parâmetros deveriam ser processado e como tudo funciona. Aqui me decepcionou um pouco, porque... lá é dito tudo sobre como deveriam ficar os procedimentos no módulo de documento, e no impresso externo os parâmetros do procedimento “imprimir” são reorganizados, então tive que procurar informações em outras fontes e mexer no subsistema por dentro .

Bem, vamos começar. O que obtemos no final pode ser usado como modelo.

Passo um- óbvio. Vamos criar um novo processamento. Vamos atribuir um nome arbitrário: "Imprimir amostra".

Passo dois. Vamos criar um layout. Como temos um exemplo de teste, vou criar o layout mais simples, sem parâmetro único.

Passo três- O mais interessante. Abra o módulo de objeto e comece a programar. Segundo o BSP, ao registrar um processamento externo, ele (o processamento) deve indicar o que pode fazer, a quais objetos está anexado e como se chama. Quando questionado sobre qual processamento ele pode fazer, ele deverá retornar uma lista de comandos - esta é uma tabela de valores. No nosso caso, o processamento pode gerar um formulário impresso, portanto haverá apenas um comando. Para gerar uma tabela de valores, definiremos alguns procedimentos que serão sempre os mesmos em todos os impressos externos:

//procedimento que prepara a estrutura da tabela de comandos

Função GetTableCommand()

// Cria uma tabela de comando vazia e colunas nela
Comandos = Nova Tabela de Valores;

// Como será a descrição do formulário impresso para o usuário
Commands.Columns.Add("Visualizar", NewTypeDescription("Linha"));

// O nome do nosso layout, para que possamos distinguir o comando chamado no processamento de impressão
Commands.Columns.Add("Identificador", New TypeDescription("String"));

// Isso define como o comando de processamento deve ser chamado
// Opções possíveis:
// - OpeningForm - neste caso, a coluna do identificador deverá indicar o nome do formulário que o sistema irá abrir
// - CallClientMethod - chama o procedimento de exportação do cliente do módulo de formulário de processamento
// - Call ServerMethod - chama um procedimento de exportação do servidor do módulo do objeto de processamento
Commands.Columns.Add("Uso", New TypeDescription("Linha"));

// O próximo parâmetro especifica se uma notificação deve ser mostrada quando um trabalho de processamento começa e termina. Não faz sentido ao abrir o formulário
Commands.Columns.Add("ShowAlert", NewTypeDescription("Boolean"));

// Para um formulário impresso, deve conter a string PrintMXL
Commands.Columns.Add("Modificador", New TypeDescription("Linha"));

Equipe de Retorno;

Função Final

//Cria uma nova linha na tabela de comandos

Função AddCommand(CommandTable, View, Identifier, Usage, ShowAlert = False, Modifier = "")
NovoComando = CommandTable.Add();
Novo time. Ver = Ver;
Novo time. Id = Id;
Novo time. Uso = Uso;
Novo time. ShowAlert= ShowAlert;
Novo time. Modificador= Modificador;
Função Final

Função InformationOnExternalProcessing() Exportar
Parâmetros Cadastrais = Nova Estrutura;
ArrayDestinations = Nova Matriz;
Matriz de Assignments.Add("Document.Hiring");
Parâmetros de registro.Insert("Visualizar", "PrintForm"); //talvez - Preenchendo um Objeto, Relatório Adicional, Criando Objetos Relacionados...
Parâmetros de Cadastro.Insert("Destino", Matriz de Destino);
Parâmetros de registro.Insert("Nome", "Olá Mundo"); //nome sob o qual o processamento será registrado no diretório de processamento externo
Parâmetros de registro.Insert("Versão", "1.0");
Parâmetros de registro.Insert("SafeMode", TRUE);
Registration Parameters.Insert("Information", "SAMPLE");//é assim que a descrição do formulário imprimível ficará para o usuário
CommandTable = GetCommandTable();
AddCommand(CommandTable, "Hello World", "Layout", "CallServerMethod", True, "MXL Print");
Parâmetros de Registro.Insert("Comandos", CommandTable);
ReturnRegistrationParameters;
Função Final

Na verdade, você terá que mexer nisso toda vez que criar um novo formulário de impressão externo. Pelo trecho de código fica claro que iremos vinculá-lo ao documento “Contratação”, portanto você escreve o seu próprio. Nosso formulário impresso se chamará “Hello World”, novamente iremos alterá-lo para o nosso. Aqui seria conveniente escrever um outdoor óbvio no template para que chame a atenção, para não esquecer de corrigi-lo depois, na minha opinião, “Olá mundo” vem a calhar; A versão é para você, escreva o que quiser, ela será exibida na forma de um elemento no diretório de processamento externo. A palavra “AMOSTRA” também é visível apenas na forma de um diretório de formulários impressos. A seguir adicionamos um comando, aqui o nome do botão é passado para o segundo parâmetro, é isso que o usuário verá no documento no item de menu “imprimir”.

Esse conjunto de três procedimentos é suficiente para que o processamento seja adicionado ao diretório de processamento externo; todo esse código confuso é serviço e não tem nada a ver com o algoritmo de impressão. Na verdade, os autores do BSP nos obrigaram a programar de uma forma tão difícil que se antes você começava imediatamente a escrever a função “Imprimir”, agora ao escrever o processamento do zero, e não de acordo com uma amostra, você perderá tempo em o serviço. Antes os parâmetros de cadastro eram opcionais e eram indicados no layout de processamento, agora tudo parece muito mais sério. A primeira impressão quando vi isso foi legal, tantas possibilidades, tudo é unificado... mas na prática eu sempre crio apenas um comando em um processamento, e vinculo ele a um documento. Aqueles. na verdade, preciso de duas linhas para registro: nome do objeto, nome do botão. E aqui tudo é tão... bem, bem, não cabe a mim julgar.

Etapa quatro- não menos interessante.

Função IMPRIMIR?

Mas não, agora não é uma função, mas sim um procedimento.

Como posso recuperar o layout?

Envie-o para a função do módulo global do subsistema de impressão.

OK

Aqui está o texto deste procedimento:

Procedimento Imprimir (matriz de objetos, coleção de PrintForms, PrintObjects, parâmetros de saída) Exportar
Se PrintManagement.NeedPrintLayout(CollectionPrintForms, "Layout") Então
Gerenciamento de impressão. Saída de documento tabular em coleção (coleção de formulários de impressão,
"Layout", "Layout",
GenerateTabDocumentSample(Matriz de Objetos, Imprimir Objetos));
fim se;
Fim do procedimento

Agora, para esclarecimentos. A primeira linha do procedimento contém uma condição pouco clara. O fato é que quando chamamos o procedimento print, o sistema nos passa uma tabela de valores, que indica o que precisamos imprimir. Em essência, a função ManagePrint.NeedPrintLayout(...) verifica a presença na tabela de valores de uma linha em que na coluna “Nome” existe uma linha com o nome do layout. Na prática, na maioria dos casos a coisa é inútil, porque... nosso processamento poderá gerar apenas um formulário impresso. Aqueles. Esta condição pode ser omitida e não afetará o desempenho.

A seguir, Gerenciamento de impressão. Saída TabularDocumentIntoCollection(...) - é isso que adiciona o layout tabular onde for necessário, para que possa ser exibido na tela. Se você precisar mostrar seu documento de planilha em sua própria janela (não em uma janela padrão), então não chame este procedimento, apenas escreva seu código aqui.

Gostaria também de acrescentar que o procedimento de Impressão é realizado no cliente e, se necessário, você pode abrir aqui um formulário gratuito para solicitar ao usuário informações adicionais necessárias para a impressão.

A seguir, GenerateTabDocumentSample(...) é uma função que devemos escrever no módulo de processamento e que retorna um documento tabular. Em 100 dos 100 casos será baseado em servidor, porque... precisamos obter o valor dos detalhes dos objetos listados no parâmetro "Object Array".

Etapa cinco- criando um layout.

Viva, finalmente chegaremos ao algoritmo de layout, recuperação de dados, etc.

Mas em nossa amostra agiremos prosaicamente e nem vou comentar aqui)))

Função GenerateTabDocumentSample (matriz de objetos, objetos de impressão)
tabDoc = Novo Documento Tabular;
layout = GetLayout("Layout");

AreaHeader = Layout.GetArea("Cabeçalho");
tabDoc.Output(areaHeader);

Retornar TabDoc;
Função Final

Isso é tudo, obrigado pela sua atenção

Os formulários impressos externos para uma aplicação regular (para a configuração Enterprise Accounting 2.0, Salary and Human Resources Management 2.5, Trade Management 10.3, etc.) são criados de forma bastante simples em comparação com os formulários impressos externos para uma aplicação gerenciada.

Por que criar formulários de impressão externos?

A vantagem de um formulário impresso externo em relação ao convencional é que permite evitar alterações na configuração da infobase. Isso significa que o processo de atualizações de configuração subsequentes não será complicado. Além disso, a impressão externa de formulários juntamente com o processamento externo são a única opção para expandir a funcionalidade versões básicas Configurações 1C que não podem ser alteradas.

E uma última coisa: impressos externos são mais fáceis de replicar, porque eles são um arquivo separado que pode ser rapidamente conectado à infobase.

Como criar um formulário de impressão externo

Vejamos passo a passo o processo de criação de um formulário impresso 1C externo:

  1. Criamos processamento externo. Para fazer isso, selecione o item de menu no configurador Arquivo - Novo... E na caixa de diálogo que se abre - Processamento externo.
  2. Crie um atributo de processamento externo com o nome Referência de objeto. O tipo de atributo é um link para um diretório ou documento para o qual um formulário impresso externo está sendo criado. O mesmo formulário pode ser usado para vários tipos de objetos, neste caso o tipo de dados do atributo Referência de objeto deve ser composto.
  3. No módulo objeto criamos uma função de exportação com o nome Selo, que deve retornar uma planilha impressa pronta.

Muitas vezes acontece que você precisa ajustar um pouco o layout de um formulário impresso existente e torná-lo externo. Por exemplo, adicione o selo da organização e a assinatura do gestor ao layout.

Criação de um formulário de impressão externo baseado em um padrão com pequenas alterações

Vamos considerar este procedimento usando o exemplo de criação de um formulário impresso externo de um documento de transferência universal para um documento Vendas de bens e serviços 1C: Contabilidade. Será diferente do formulário impresso padrão pela presença do selo da organização.

  1. Criando processamento externo com adereços Referência de objeto, tipo de dados - DocumentLink. Vendas de bens e serviços.
  2. Encontramos o layout do formulário impresso UPD padrão (está localizado nos layouts gerais) e o copiamos (arrastamos) para a janela de processamento externo. Os layouts de outros formulários impressos podem estar localizados nos próprios documentos ou livros de referência.
  3. Nós contribuímos mudanças necessárias no layout de formulário impresso copiado.
  4. Encontramos a função responsável por gerar o formulário impresso. Esta função deve retornar o documento da planilha gerada. Copie seu conteúdo para a função de exportação Selo() no módulo de objeto de processamento externo.
    No nosso caso esta é a função Exportar PrintUniversalTransferDocument() do módulo de objeto de documento Vendas de bens e serviços.
    Se as alterações de layout forem significativas (áreas e/ou parâmetros alterados), deverão ser feitos os ajustes apropriados na função de impressão.
  5. Estamos tentando salvar o processamento externo. No entanto, você provavelmente receberá mensagens de erro indicando que alguns procedimentos e funções chamados pela função de impressão estão faltando. Essas funções e procedimentos devem ser encontrados no documento de origem e também copiados no módulo do objeto de processamento externo. Ou ajuste o link se a função ou procedimento original for exportado.
  6. (não é necessário). Para testar um formulário de impressão externo, é conveniente fazer um formulário para colocar os adereços Referência de objeto. Botão Executar deve chamar um procedimento Selo() do módulo de objeto. Para fazer isso, o evento de clique do botão recebe um procedimento:

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.

Processo de impressão documento eletrônico 1C é chamado de formulário impresso 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 surgiram e começaram a reinventar a roda.

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 esse formulário de impressão?

Onde está localizado o formulário impresso 1C?

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

No entanto, 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. Estão sendo impressos blocos separados. 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 removê-lo, 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



Continuando o tópico:
Sistema de taxas

Muitas pessoas sonham em abrir seu próprio negócio, mas simplesmente não conseguem. Muitas vezes, como principal obstáculo que os impede, citam a falta de...