> For the complete documentation index, see [llms.txt](https://docs.wave.pt/mobile-logistic-manual/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.wave.pt/mobile-logistic-manual/aplicacao-android/app/funcionalidades/campos-livres.md).

# Campos Livres

Este ecrã permite preencher **informação adicional** que será gravada no documento de destino criado numa **Expedição** ou **Receção** (ex.: matrícula, temperatura, nº de volumes).

É apresentado ao guardar o documento, caso existam campos livres configurados:

* Se **algum campo for obrigatório**, o ecrã é aberto diretamente;
* Caso contrário, é perguntado ao utilizador se pretende preencher algum campo livre.

Podem existir até:

* **5 campos de texto**;
* **4 campos numéricos**;
* **1 campo de data**;
* **7 listas de seleção (*****combobox*****)**;
* **5&#x20;*****checkboxes***.

Os campos obrigatórios são identificados com um **"\*"** e o documento só pode ser gravado depois de estarem preenchidos.

#### Leitura por QR Code <a href="#leitura-por-qr-code" id="leitura-por-qr-code"></a>

É possível preencher os campos de texto lendo um **QR Code** com o formato:

```
Titulo1=Valor1;Titulo2=Valor2
```

Cada valor é colocado no campo cuja etiqueta corresponde ao título. Se nenhum título corresponder, é apresentada a mensagem **"Nenhum campo corresponde ao código lido"**.

#### Configuração <a href="#configuracao-implementador" id="configuracao-implementador"></a>

Os campos são configurados nos **Parâmetros Gerais** do BackOffice, com um conjunto de parâmetros para a Receção (`cmpadcrec...`) e outro para a Expedição (`cmpadcexp...`):

| Tipo           | Etiqueta                                                   | Campo do ERP (define se o campo é visível)              |
| -------------- | ---------------------------------------------------------- | ------------------------------------------------------- |
| Texto 1 a 5    | `cmpadcrectxtlbl`, `cmpadcrectxt2lbl` … `cmpadcrectxt5lbl` | `cmpadcrectxtbo`, `cmpadcrectxtbo2` … `cmpadcrectxtbo5` |
| Numérico 1 a 4 | `cmpadcrecnbrlbl`, `cmpadcrecnbr2lbl` …                    | `cmpadcrecnbrbo`, `cmpadcrecnbr2bo` …                   |
| Data           | `cmpadcrecdatelbl`                                         | `cmpadcrecdate`                                         |
| Combobox 1 a 7 | `cmpadcreccmblbl`, `cmpadcreccmb2lbl` …                    | `cmpadcreccmbbo`, `cmpadcreccmbbo2` …                   |
| Checkbox 1 a 5 | `cmpadcrecchklbl`, `cmpadcrecchk2lbl` …                    | `cmpadcrecchkbo`, `cmpadcrecchkbo2` …                   |

Para a Expedição, substitua `rec` por `exp` (ex.: `cmpadcexptxtlbl`).

{% hint style="info" %}

* Um campo só é apresentado se o parâmetro do **campo do ERP** estiver preenchido.
* Para tornar um campo **obrigatório**, acrescente `_obg` ao valor da etiqueta (ex.: `Matrícula_obg`).
* As opções das *combobox* são obtidas através de uma query SQL definida nos parâmetros `cmpadcreccmbsql` … `cmpadcreccmbsql7` (ou `cmpadcexpcmbsql…`). A query deve devolver as colunas **`valor`** e **`texto`**.
* O título do ecrã pode ser definido no parâmetro `labelTitleCamposLivres.`
  {% endhint %}

**Pré-preenchimento dos campos**

Os valores sugeridos são definidos no ERP, na view **`V_WSML_MAPCAMPOSLIVRES`**. Ao abrir o ecrã, a aplicação executa:

```sql
SELECT * FROM V_WSML_MAPCAMPOSLIVRES WHERE pesquisa = @pesquisa
```

* **`pesquisa`** — chave de pesquisa. A aplicação envia o **stamp do cabeçalho do documento** em tratamento (ex.: `bostamp`).

| Colunas                               | Formato do valor                                                                                        |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `cmptxtlivre1REC` … `cmptxtlivre5REC` | Texto                                                                                                   |
| `cmpnumerico1REC` … `cmpnumerico4REC` | Número (devolvido como texto)                                                                           |
| `cmpcombobox1REC` … `cmpcombobox7REC` | O **`valor`** da opção (não o `texto`), que deve existir nas opções devolvidas pela query da *combobox* |
| `cmpdataREC`                          | Texto no formato `dd-MM-yyyy`                                                                           |
| `cmpcheckbox1REC` … `cmpcheckbox5REC` | `bit` (0 / 1)                                                                                           |

Para a Expedição, substitua `REC` por `EXP` (ex.: `cmptxtlivre1EXP`).

Exemplo — pré-preencher o Texto 1 e a Checkbox 1 da Expedição com campos do dossier:

```sql
select
  bo.bostamp as pesquisa,
  ...
  bo.u_teste as cmptxtlivre1EXP,
  ...
  bo.u_conf  as cmpcheckbox1EXP,
  ...
from bo
```

{% hint style="warning" %}

* A view deve devolver **todas** as colunas, mesmo as que não são usadas. Para não pré-preencher um campo, devolva `''` (ou `CAST(0 AS bit)` nas *checkboxes*).
* Se a view não devolver resultados ou ocorrer um erro, o ecrã abre com os campos vazios, sem qualquer mensagem.&#x20;
  {% endhint %}
