# FORM_SPEC.md — точная структура формы «ФормаОсновная»

Спецификация для детерминированной сборки внешней обработки
**FordewindCert.epf** (Fordewind Cert / Cert4U). Собирайте строго по этому
документу — тогда два разных 1С-специалиста получат одинаковый результат.

- Платформа: **1С:Предприятие 8.3.21+**
- Режим совместимости обработки: **не ниже «Версия 8.3.21»**
- Основной режим запуска: **Управляемое приложение**
- Модальность: **Не использовать** (весь UI асинхронный)
- Основная форма: **ФормаОсновная**, тип — **Управляемая форма**

---

## 1. Реквизиты ОБЪЕКТА обработки

Дерево обработки → «Реквизиты» → Добавить. Все строковые — неограниченной длины.

| Имя реквизита            | Тип     | Назначение                                   |
|--------------------------|---------|----------------------------------------------|
| (реквизиты объекта не требуются — всё хранится в реквизитах формы) |

> Все данные живут в реквизитах формы, поэтому реквизиты объекта не создаются.

---

## 2. Реквизиты ФОРМЫ «ФормаОсновная»

Форма → командная панель → «Реквизиты формы».

### 2.1 Простые реквизиты

| Имя реквизита           | Тип              | Пометка «Сохранять данные» | Примечание                                   |
|-------------------------|------------------|----------------------------|----------------------------------------------|
| АдресСервера            | Строка           | нет                        | Рабочий адрес (без схемы), напр. `cert4u.ru` |
| КлючAPI                 | Строка           | нет                        | Активный API-ключ                            |
| ПутьAPI                 | Строка           | нет                        | Путь к api.php, напр. `/api.php`              |
| АдресСервераНастройка   | Строка           | нет                        | Поле ввода на вкладке «Настройки»            |
| КлючAPIНастройка        | Строка           | нет                        | Поле ввода (режим пароля)                    |
| ПутьAPIНастройка        | Строка           | нет                        | Поле ввода пути                              |
| РежимПесочницы          | Булево           | нет                        | Флажок «Тестовый режим (песочница)»          |
| НазваниеДокумента       | Строка           | нет                        | Вкладка «Загрузка»                           |
| ОписаниеДокумента       | Строка           | нет                        | Вкладка «Загрузка»                           |
| ИННПодписанта           | Строка(14)       | нет                        | Вкладка «Загрузка»; ИНН ожидаемого подписанта УКЭП → `signer_inn` |
| СНИЛСПодписанта         | Строка(14)       | нет                        | Вкладка «Загрузка»; СНИЛС ожидаемого подписанта → `signer_snils` |
| ТипПодписиОтправка      | Число (0..2)     | нет                        | Переключатель типа подписи                   |
| ТекстРезультатаПроверки | Строка           | нет                        | Многострочное поле результата проверки       |

> Тип «Число» для `ТипПодписиОтправка`: длина 1, точность 0.

### 2.2 Табличная часть формы «ТаблицаДокументов»

Реквизит формы типа **ТаблицаЗначений** с колонками:

| Колонка      | Тип    |
|--------------|--------|
| IDДокумента  | Строка |
| Наименование | Строка |
| Статус       | Строка |
| СтатусКод    | Строка |
| Клиент       | Строка |
| Создан       | Строка |
| ТипПодписи   | Строка |

### 2.3 Табличная часть формы «ТаблицаКлиентов»

Реквизит формы типа **ТаблицаЗначений** с колонками:

| Колонка      | Тип    |
|--------------|--------|
| IDКлиента    | Строка |
| Наименование | Строка |
| Email        | Строка |
| Телефон      | Строка |
| Компания     | Строка |
| ИНН          | Строка |

---

## 3. Команды формы

Форма → «Команды формы» → Добавить. Для каждой команды в свойстве
**Действие** укажите одноимённую процедуру-обработчик из модуля формы
(колонка «Процедура-обработчик»).

| Имя команды          | Заголовок (кнопка)            | Процедура-обработчик        |
|----------------------|-------------------------------|-----------------------------|
| СохранитьНастройки   | Сохранить настройки           | СохранитьНастройкиНажатие    |
| ПроверитьПодключение | Проверить подключение         | ПроверитьПодключениеНажатие  |
| ОбновитьДокументы    | Обновить                      | ОбновитьДокументыНажатие     |
| ЗагрузитьДокумент    | Загрузить документ            | ЗагрузитьДокументНажатие     |
| ПодписатьАдмином     | Подписать (сервер)            | ПодписатьАдминомНажатие      |
| ОтправитьКлиенту     | Отправить клиенту             | ОтправитьКлиентуНажатие      |
| ПроверитьПодписи     | Проверить подписи             | ПроверитьПодписиНажатие      |
| СкачатьАрхив         | Скачать ZIP-архив             | СкачатьАрхивНажатие          |
| БыстраяПЭП           | Быстрая ПЭП-отправка          | БыстраяПЭПНажатие            |
| ПолныйЦикл           | Полный цикл                   | ПолныйЦиклНажатие            |
| ПодписатьУКЭП        | Подписать УКЭП и загрузить    | УКЭП_ПодписатьИЗагрузить     |

> `УКЭП_ПодписатьИЗагрузить` — процедура из области **УКЭППодписание**
> (файл CAdES_signing_module.bsl, вставленный в модуль формы).

---

## 4. Элементы формы (дерево «Элементы»)

Корень — **Группа-Страницы** `ГруппаСтраницы` (вид: «Страницы»), внутри 4 страницы.

### Страница «СтраницаНастройки» (Заголовок: «Настройки»)
| Элемент                       | Вид                | Данные / Команда              |
|-------------------------------|--------------------|-------------------------------|
| ПолеАдресСервера              | Поле ввода         | Реквизит `АдресСервераНастройка` (подсказка `cert4u.ru`) |
| ПолеПутьAPI                   | Поле ввода         | Реквизит `ПутьAPIНастройка` (подсказка `/api.php`) |
| ПолеКлючAPI                   | Поле ввода         | Реквизит `КлючAPIНастройка`, РежимПароля = Истина |
| ФлажокПесочница               | Поле флажка        | Реквизит `РежимПесочницы`     |
| КнопкаСохранитьНастройки      | Кнопка             | Команда `СохранитьНастройки`  |
| КнопкаПроверитьПодключение    | Кнопка             | Команда `ПроверитьПодключение`|

### Страница «СтраницаЗагрузка» (Заголовок: «Загрузка / отправка»)
| Элемент                       | Вид                    | Данные / Команда                    |
|-------------------------------|------------------------|-------------------------------------|
| ПолеНазваниеДокумента         | Поле ввода             | Реквизит `НазваниеДокумента`        |
| ПолеОписаниеДокумента         | Поле ввода (многостр.) | Реквизит `ОписаниеДокумента`        |
| ПолеИННПодписанта             | Поле ввода             | Реквизит `ИННПодписанта`, заголовок «ИНН подписанта (необяз.)» |
| ПолеСНИЛСПодписанта           | Поле ввода             | Реквизит `СНИЛСПодписанта`, заголовок «СНИЛС подписанта (необяз.)» |
| ПереключательТипПодписи       | Поле переключателя     | Реквизит `ТипПодписиОтправка`; список значений: `0 — УКЭП + ПЭП`, `1 — Только УКЭП`, `2 — Только ПЭП` |
| КнопкаЗагрузитьДокумент        | Кнопка                 | Команда `ЗагрузитьДокумент`         |
| КнопкаПодписатьУКЭП            | Кнопка                 | Команда `ПодписатьУКЭП`             |
| КнопкаБыстраяПЭП               | Кнопка                 | Команда `БыстраяПЭП`                |
| КнопкаПолныйЦикл               | Кнопка                 | Команда `ПолныйЦикл`                |

### Страница «СтраницаДокументы» (Заголовок: «Документы»)
| Элемент                       | Вид                    | Данные / Команда                    |
|-------------------------------|------------------------|-------------------------------------|
| ТаблицаДокументов             | Таблица                | Реквизит `ТаблицаДокументов` (колонки: IDДокумента, Наименование, Статус, Клиент, Создан, ТипПодписи) |
| КнопкаОбновитьДокументы        | Кнопка (над таблицей)  | Команда `ОбновитьДокументы`         |
| КнопкаПодписатьАдмином         | Кнопка                 | Команда `ПодписатьАдмином`          |
| КнопкаОтправитьКлиенту         | Кнопка                 | Команда `ОтправитьКлиенту`          |
| КнопкаПроверитьПодписи         | Кнопка                 | Команда `ПроверитьПодписи`          |
| КнопкаСкачатьАрхив             | Кнопка                 | Команда `СкачатьАрхив`              |
| ПолеРезультатПроверки          | Поле (многостр., ТолькоПросмотр) | Реквизит `ТекстРезультатаПроверки` |

> Колонку `СтатусКод` в таблицу выводить не обязательно (техническое поле),
> но реквизит-колонка обязателен — используется в коде для проверки статуса.

### Страница «СтраницаКлиенты» (Заголовок: «Клиенты»)
| Элемент                       | Вид                    | Данные                              |
|-------------------------------|------------------------|-------------------------------------|
| ТаблицаКлиентов               | Таблица                | Реквизит `ТаблицаКлиентов` (колонки: IDКлиента, Наименование, Email, Телефон, Компания, ИНН) |

---

## 5. Обработчик события формы

| Событие формы     | Процедура            |
|-------------------|----------------------|
| ПриСозданииНаСервере | ПриСозданииНаСервере |
| ПриОткрытии       | ПриОткрытии          |

> `ПриСозданииНаСервере` и `ПриОткрытии` уже присутствуют в модуле формы —
> нужно лишь связать их в палитре свойств формы (обычно связываются
> автоматически по имени).

---

## 6. Соответствие «команда → процедура» (сводно)

```
СохранитьНастройки    -> СохранитьНастройкиНажатие
ПроверитьПодключение  -> ПроверитьПодключениеНажатие
ОбновитьДокументы     -> ОбновитьДокументыНажатие
ЗагрузитьДокумент     -> ЗагрузитьДокументНажатие
ПодписатьАдмином      -> ПодписатьАдминомНажатие
ОтправитьКлиенту      -> ОтправитьКлиентуНажатие
ПроверитьПодписи      -> ПроверитьПодписиНажатие
СкачатьАрхив          -> СкачатьАрхивНажатие
БыстраяПЭП            -> БыстраяПЭПНажатие
ПолныйЦикл            -> ПолныйЦиклНажатие
ПодписатьУКЭП         -> УКЭП_ПодписатьИЗагрузить
```

Асинхронные оповещения (обработчики ОписаниеОповещения — НЕ команды, вызываются
из кода, отдельные кнопки не нужны): `ЗагрузитьДокумент_ПослеВыбора`,
`БыстраяПЭП_ПослеВыбора`, `ПолныйЦикл_ПослеВыбора`, `СкачатьАрхив_Завершение`,
`УКЭП_ПослеВыбораФайла`, `УКЭП_ПослеВыбораСертификата`,
`УКЭП_ПослеПолученияСертификата`, `УКЭП_ПослеСозданияМенеджера`,
`УКЭП_ПослеПодписания`, `УКЭП_ОшибкаКриптографии`.


## Изменения 02.10.2026

- Добавлены реквизиты `ИННПодписанта`, `СНИЛСПодписанта` и поля ввода на вкладке «Загрузка» (перед переключателем «Тип подписи»). Значения уходят в `api_1c_upload` / `api_1c_upload_signed` как `signer_inn` / `signer_snils`; сервер сверит их с сертификатом контрагента при подписи УКЭП (при несовпадении подпись не принимается). После успешной загрузки поля очищаются.
- Кнопки `КнопкаПодписатьАдмином` и `КнопкаПолныйЦикл` скрываются в `ПриСозданииНаСервере`: серверная подпись `api_1c_sign_admin` отключена на сервере (HTTP 410). Используйте «Подписать УКЭП и загрузить» → «Отправить клиенту».
