Aplicativo no TSD e comunicação com 1C: Enterprise 8.3 através do serviço HTTP. Parte 1 (escolhendo um método de troca. Descrição da API)

  1. A escolha do método de troca. Descrição da API.
  2. Implementação de API no lado 1C.
  3. BroadcastReceiver Recebemos um código de barras no exemplo do ATOL Smart.Lite.
  4. OnKeyUp. Obtenha um código de barras em um scanner com emulação de teclado
  5. Menu, objeto complementar
  6. Realizamos troca e armazenamento de dados. Usamos Retrofit 2, Room, Coroutines.
  7. Interface do usuário LiveData, PagedList.

Para quem


Os dois primeiros capítulos são uma tentativa de estruturar a experiência de integrar o 1C com outros aplicativos e serviços da web. O próprio ciclo, acho, será interessante para os programadores da 1C que estão tentando ir além da plataforma e tentar algo novo. Os desenvolvedores de aplicativos Android não aprenderão nada de novo por si mesmos, mas talvez eles estejam interessados ​​na aparência do lado 1C. Começando com a quarta parte, haverá uma tentativa de combinar vários artigos dispersos da Internet sobre o uso de bibliotecas, bem como atualizar dados sobre eles. O ciclo foi concebido como um livro didático, que descreve a experiência no desenvolvimento de uma aplicação real. Eu mesmo não sou desenvolvedor de Android. Mas até o final da série, espero me tornar um.

2. A escolha do método de troca. Descrição da API


Em sua forma atual, o 1C pode ser contatado de mil e uma maneiras. Considere várias opções e por que não as usei.

  • Componente nativo - Na maioria das vezes, é bom usá-lo para compartilhamento offline. Para o Online, ele está mal adaptado. Tornou-se ainda pior quando a 1C começou a implementar seus padrões de troca com equipamentos comerciais. E também esse componente é chamado no lado 1C. Não combina comigo.
  • Serviços WEB - Mais projetados para o intercâmbio entre aplicativos que desenvolvem equipes diferentes. Pesado, use XML. Pessoalmente, é muito difícil para mim desenvolver. E ainda mais difícil de integrar em JavaScript, Golang, etc. Não é adequado.
  • Serviços HTTP - Quase o mesmo que os serviços WEB, mas descrevemos a lógica do trabalho e trocamos os protocolos completamente. Aqui não estamos limitados à invenção de nossa própria bicicleta. Por esse motivo, esse mecanismo de troca específico foi escolhido.

As tarefas que nosso aplicativo resolve. "Tudo o que pode ser feito no TSD deve ser feito no TSD." Bem, como um conjunto padrão: aceitação, inventário, rótulos, etiquetas de preço.

Lista completa de tarefas
  • Trabalhar com mercadorias: impressão de etiquetas e etiquetas de preços, atribuição de um código de barras (código de barras), verificação do código de barras, remoção do código de barras, visualização de preços e quantidades em armazéns.
  • Inventário - Realmente conduzindo inventários.
  • Recebimento - Aceitação de mercadorias na fatura, impressão de discrepâncias, impressão de documentos internos, status da fatura.
  • Coleta de mercadorias, Realização (varejo) - A idéia é que os vendedores não estejam na caixa registradora, mas vão com o comprador ou colecionam mercadorias mediante solicitação, etc. Há apenas uma pessoa no balcão de checkout, uma verificação pronta é transmitida pelo TSD. O comprador paga apenas pelos bens.
  • Coleta de mercadorias, Realização (Atacado) - Coletamos mercadorias na conta. Verificamos o que está disponível. Formamos uma remessa (com um pacote dos documentos necessários). Não se esqueça de verificar a possibilidade de envio para a contraparte.
  • Coleta de mercadorias, preparação para embarque - Coletamos mercadorias a pedido, colocamos em um palete, imprimimos documentos: lista de embalagem, etc.
  • Movimentação - Coletamos mercadorias para movimentação, damos na entrega.
  • Coleta de mercadorias, uma lista arbitrária - Necessária para reavaliações, atualização de preços, etiquetas e outras operações similares.


Voltar para a estrutura da API. O intercâmbio entre TSD e 1C será no formato JSON. Na resposta, teremos apenas dois objetos {resultado, carga}, respectivamente: o resultado e a carga . Como resultado, retornaremos dois campos {code, msg} . E sempre responderemos com o código HTTP 200. Portanto, será mais fácil para nós, do lado do cliente, analisar a estrutura de resposta. Todas as outras respostas virão como uma string. 1C não nos permite personalizar respostas fora da plataforma.

Por que é mais fácil dar 200
A maioria das bibliotecas para trabalhar com dados (incluindo Retrofit), ao receber código diferente de 200, não analisa o resultado. E temos que "analisá-lo" com canetas.

Agora temos o seguinte diagrama. Se a resposta for 200, nossos procedimentos em 1C funcionaram bem. Se uma resposta diferente, temos um problema abaixo. Aqui não podemos ir fundo, o que deu errado, mas imediatamente mostrar ao usuário qual erro e sua descrição. Alguém pode dizer que os erros precisam ser processados ​​sem a intervenção do usuário, mas podemos ter duas situações: 1 - o servidor retornou um erro. 2 - brega sem conexão. No primeiro caso, talvez nem saibamos que algo está quebrado (por exemplo, erro 404: o aplicativo solicitou um método inexistente. 500: A plataforma travou com uma exceção). No segundo, não podemos transferir o resultado para análise para o servidor. Portanto, mostramos um erro e esperamos mais ações do usuário.

A carga útil conterá objetos diferentes. Pode ser uma lista de mercadorias, uma lista de documentos, uma lista de ações será transmitida para lá. No lado da aplicação, iremos descrevê-los com modelos e dobrá-los cuidadosamente no banco de dados. Vamos lançar a lista de ações para execução e adicionar cuidadosamente os resultados ao banco de dados.

O ciclo de intercâmbio com o TSD será o seguinte:

  1. O aplicativo de comando envia uma solicitação para 1C.
  2. 1C forma uma resposta e retorna uma estrutura com o resultado e os dados. Em 1C, os registros de informações acumulam dados alterados no contexto do TSD (serviço da web).
  3. Mediante solicitação do aplicativo, uma lista de métodos a serem chamados é enviada.

Esse esquema foi escolhido porque o TSD pode ser desligado, desligado da rede, etc. Mas nada nos impede de finalizar o 1C para que, ao alterar dados, notifique outro aplicativo (serviço da web) sobre ele. Com essa troca, informamos que há novos dados. O aplicativo pergunta quais dados existem e o loop se repete. Um exemplo de troca é apresentado no diagrama.



Isso é tudo. Se você tiver perguntas, comentários, sugestões, escreva nos comentários.

Source: https://habr.com/ru/post/pt473500/


All Articles