Инструкция по модулю ДокиHTML
Подключение внешней обработки к конфигурации 1С, получение API-ключа и вызов экспортируемых функций для создания документов ЭДО (УПД), приёмки и подписания входящих УПД, ЭТрН, ЭЗЗ, ЭПЭ и ЭЭР — в том числе с откреплённой подписью и выбором сертификата по МЧД.
1. Скачать и подключить модуль
Один файл ДокиHTML.epf подходит и для обычных форм, и для тонкого клиента.
Все экспортируемые функции (Доки_ПолучитьXML*, Доки_Отправить* и т.д.)
уже встроены в модуль объекта обработки — отдельный .bsl скачивать не нужно.
Внешняя обработка
- Файл → Открыть → выбрать
ДокиHTML.epf. - В настройках обработки укажите API-ключ (или передавайте его параметром при вызове).
- Базовый URL по умолчанию:
https://node.1os.su/doki.
Вшивка в конфигурацию
- Конфигуратор → Обработки → добавить
ДокиHTML. - Модуль объекта и формы — из поставки модуля.
- Вызов:
Обработки.ДокиHTML.Создать()— путь к.epfне нужен.
2. Получить API-ключ
На странице регистрации можно получить триальный API-ключ и привязать организации по ЭЦП или постоянному токену Доки. Страницу можно открыть из 1С (список ИНН передаётся автоматически) или самостоятельно — тогда ИНН организаций указываются вручную.
- URL:
https://node.1os.su/doki/1c/register - В standalone-режиме введите ИНН связанных организаций (через запятую или с новой строки) и привяжите сертификат/токен.
- Полученный ключ вида
doki1c_…передавайте вторым параметром экспортируемых функций или сохраните в настройках обработки.
3. Примеры вызова экспортируемых функций
Единый результат: Структура(Успех, URL, ТекстОшибки, Данные).
При успехе и заполненном URL можно открыть черновик в браузере: ЗапуститьПриложение(Результат.URL).
HTTP-заголовок: x-api-key.
В таблицах: обяз. — обязательно для успешной генерации/отправки; остальные поля опциональны.
УПД (документ ЭДО)
Доки_ОтправитьУПД / Доки_ОтправитьУПДПоДанным → POST /api/1c/draft/upd
| Поле | Тип | Описание | |
|---|---|---|---|
organization | Структура | обяз. | Организация-отправитель |
organization.inn / code | Строка | обяз. | ИНН или код (для привязки API-ключа) |
organization.name | Строка | опц. | Наименование |
counterparty | Структура | обяз. | Контрагент-покупатель |
counterparty.inn | Строка | обяз. | ИНН контрагента |
counterparty.name | Строка | обяз. | Наименование |
counterparty.kpp | Строка | опц. | КПП |
header.number | Строка | обяз. | Номер документа |
header.date | Строка | обяз. | Дата (yyyy-MM-dd или dd.MM.yyyy) |
header.sum, currencyCode, deliveryAddress… | опц. | Сумма, валюта, адрес | |
contract | Структура | опц. | number, date, name |
items | Массив | обяз. | Позиции товаров (минимум 1) |
items[].productName | Строка | обяз. | Наименование позиции |
items[].quantity, price, sum, vatRate… | опц. | Количество, цена, сумма, НДС | |
funcType | Строка | опц. | По умолчанию sfdop (СЧФДОП) |
requestType, source | Строка | опц. | Служебные: upd_generation, 1c |
Обработка = Обработки.ДокиHTML.Создать();
// Из документа реализации / УПД в 1С
Результат = Обработка.Доки_ОтправитьУПД(ДокументСсылка, АПИКлюч);
// Или по готовой структуре
Данные = Новый Структура;
Данные.Вставить("requestType", "upd_generation");
Данные.Вставить("source", "1c");
Данные.Вставить("funcType", "sfdop");
Данные.Вставить("organization", Новый Структура("inn,code,name", "7707083893", "7707083893", "ООО Пример"));
Данные.Вставить("counterparty", Новый Структура("inn,kpp,name", "6658378402", "667001001", "ООО ""1ОС"""));
Шапка = Новый Структура;
Шапка.Вставить("number", "УПД-1");
Шапка.Вставить("date", "2026-08-11");
Шапка.Вставить("sum", 12000);
Шапка.Вставить("currencyCode", "643");
Данные.Вставить("header", Шапка);
Позиция = Новый Структура;
Позиция.Вставить("productName", "Товар");
Позиция.Вставить("quantity", 10);
Позиция.Вставить("unitName", "шт");
Позиция.Вставить("price", 1000);
Позиция.Вставить("sum", 10000);
Позиция.Вставить("vatRate", "20%");
Позиция.Вставить("vatSum", 2000);
Товары = Новый Массив;
Товары.Добавить(Позиция);
Данные.Вставить("items", Товары);
Результат = Обработка.Доки_ОтправитьУПДПоДанным(Данные, АПИКлюч);
Если Результат.Успех Тогда
ЗапуститьПриложение(Результат.URL);
Иначе
Сообщить(Результат.ТекстОшибки);
КонецЕсли;
ЭТрН — структура данных
Доки_ОтправитьЭТрН / Доки_ОтправитьЭТрНПоДанным / Доки_ПолучитьXMLЭТрНПоДанным
| Поле | Тип | Описание | |
|---|---|---|---|
organization.inn|code | Строка | обяз. | Организация API-ключа |
documentNumber | Строка | обяз. | Номер ЭТрН |
documentDate | Строка | обяз. | Дата документа |
shipper / consignee / carrier | Структура | обяз. | Участники |
*.name, *.inn, *.phone | Строка | обяз. | Наименование, ИНН, телефон |
*.edoId | Строка | опц.* | Ящик ЭДО; если пусто — ищется по ИНН на сервере |
*.kpp, *.address | опц. | КПП; адрес (см. ниже) | |
shipper.address.index, regionCode | Строка | обяз. | Индекс и код региона ГО |
deliveryAddress.index, regionCode | Строка | обяз. | Адрес доставки (или адрес ГП) |
loading.address.index, regionCode | Строка | обяз. | Адрес погрузки |
loading.plannedAt или arrivedAt | Строка | обяз. | Дата/время погрузки (ISO) |
loading.massMethod | Строка | обяз. | Метод массы (напр. 01) |
loading.grossMassShipped, placesAccepted, loader* | опц. | Масса, места, данные погрузчика | |
cargo[] | Массив | обяз. | ≥1 позиция с name |
cargo[].placesCount, grossMass, packaging | обяз. | Места, масса брутто, упаковка | |
cargo[].condition, packageKind, markings | опц. | Состояние, вид тары, маркировка | |
drivers[] | Массив | обяз. | ≥1 водитель |
drivers[].lastName, firstName | Строка | обяз. | ФИО |
drivers[].licenseSeries, licenseNumber, licenseIssueDate | обяз. | ВУ | |
drivers[].phones[] | Массив | обяз. | ≥1 телефон |
vehicle.regNumber, ownershipType | Строка | обяз. | Госномер и тип владения ТС |
vehicle.brand, type, loadCapacity, volume | опц. | Марка, тип, грузоподъёмность | |
trailers[] | Массив | опц. | Прицепы (как vehicle) |
signer.lastName, firstName, middleName, position, status | обяз. | Подписант (middleName — отчество, должно совпадать с сертификатом) | |
transportRules | Строка | обяз. | Указания ГО / нормы перевозки |
redirectMethod, redirectPerson | Строка | обяз. | Переадресовка |
redirectPhone | Строка | обяз.* | Или телефон ГО/перевозчика/водителя |
orderNumber, orderDate, extraRecipientIds | опц. | Заказ, доп. получатели | |
sign = false / withoutSignature = true | Булево | опц. | Явная отправка без подписи (черновик) |
documentFile + signatureFile | base64 | опц. | Готовый XML и подпись (см. ниже) |
Обработка = Обработки.ДокиHTML.Создать();
// Из документа «Реализация товаров и услуг» (также: Задание на перевозку / Взвешивание)
Результат = Обработка.Доки_ОтправитьЭТрН(ДокументСсылка, АПИКлюч);
// По данным (каркас; заполните обязательные поля из таблицы выше)
Данные = Новый Структура;
Данные.Вставить("requestType", "etrn_generation");
Данные.Вставить("source", "1c");
Данные.Вставить("documentNumber", "ТН-1");
Данные.Вставить("documentDate", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
Данные.Вставить("organization", Новый Структура("inn,code,name", "665840163861", "665840163861", "ИП Пример"));
Данные.Вставить("shipper", Новый Структура("inn,name,phone", "665840163861", "ИП Пример", "3432000000"));
Данные.Вставить("consignee", Новый Структура("inn,kpp,name,phone", "6658378402", "667001001", "ООО ""1ОС""", "3432000001"));
Данные.Вставить("carrier", Новый Структура("inn,kpp,name,phone", "6686161521", "668601001", "ООО Перевозчик", "3432000002"));
Данные.Вставить("deliveryAddress", Новый Структура("index,regionCode,city", "620000", "66", "Екатеринбург"));
Данные.Вставить("cargo", Новый Массив); // ≥1: name, placesCount, grossMass, packaging
Данные.Вставить("drivers", Новый Массив); // ≥1: lastName, firstName, license*, phones
Данные.Вставить("vehicle", Новый Структура("regNumber,ownershipType", "A000AA116", "1"));
Данные.Вставить("signer", Новый Структура("lastName,firstName,position,status", "Иванов", "Иван", "Директор", "1"));
Данные.Вставить("loading", Новый Структура("plannedAt,massMethod,address",
Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + "T10:00:00+05:00", "01",
Новый Структура("index,regionCode", "620000", "66")));
Данные.Вставить("transportRules", "Согласно договору");
Данные.Вставить("redirectMethod", "Электронно");
Данные.Вставить("redirectPerson", "Иванов И.И.");
Результат = Обработка.Доки_ОтправитьЭТрНПоДанным(Данные, АПИКлюч);
Если Результат.Успех Тогда
ЗапуститьПриложение(Результат.URL);
КонецЕсли;
Если параметр Подпись и поле signatureFile не заданы, модуль пытается
подписать XML автоматически по сертификату текущего пользователя из регистра
ecom_СертификатыПользователей (отпечаток + PIN). Если регистра нет или запись не найдена —
отправляется черновик без подписи. Чтобы отключить автоподпись: sign = false или
withoutSignature = true в структуре Данные.
ЭТрН — титулы 2–8 (после титула 1)
Доки_ПолучитьXMLЭТрНТитулаПоДанным → POST /api/1c/draft/etrn-title-xml
Доки_ОтправитьЭТрНТитулПоДанным → POST /api/1c/draft/etrn-title
Перед вызовом сохраните docflowId из ответа титула 1. Сервер скачивает заготовку XML
из документооборота и подставляет поля из fields.
Для титулов 2, 3 и 4 при вызове без параметра Подпись модуль делает
автоподпись через ecom_СертификатыПользователей (как у ЭТрН Т1):
XML → CAdESCOM → import + attach. Для титулов 5–8 нужна явная подпись.
Корневая структура Данные
| Поле | Тип | Описание | |
|---|---|---|---|
organization.inn / code | Строка | обяз. | Организация API-ключа |
docflowId | Строка | обяз. | UUID документооборота после T1 |
titleNumber | Число | обяз. | 2…8 (см. таблицу титулов) |
fields | Структура | реком. | Бизнес-поля для XML (см. ниже) |
signer | Структура | опц. | lastName, firstName, middleName, position |
signableDocumentId | Строка | опц. | Явный ID заготовки (иначе — signable из ДО) |
documentFile | base64 | опц. | При отправке: тот же XML, что подписали |
signatureFile / параметр Подпись | base64 | опц. | Откреплённая подпись; для T2–T4 если пусто — автоподпись через ecom |
sign = false / withoutSignature | Булево | опц. | Явно без автоподписи (черновик) |
participantType | Строка | опц. | По умолчанию из титула (Carrier / Consignee / Consignor) |
Структура fields — общее
| Поле | Описание | |
|---|---|---|
uidTrn или УИД_ТрН | обяз. | УИД транспортной накладной (если пусто — номер ТрН из T1) |
Элемент.Атрибут | опц. | Плоский ключ, напр. СодПрвПрием.МасБрутПрин |
xmlAttributes | опц. | Массив: element, attribute, value, index? |
Формат даты/времени: ДД.ММ.ГГГГTЧЧ:ММ:СС+05:00 или только дата.
Титулы и подпись
titleNumber | Титул | Подписант (ИНН) | Ключевые поля fields |
|---|---|---|---|
| 2 | Приём груза перевозчиком | Перевозчик |
обяз.: uidTrnопц.: arrivedAt, departedAt, acceptedAt,
grossMassAccepted, placesAccepted, massMethod,
hasArrivedCoords, hasDepartedCoords, hasAcceptedCoords
|
| 3 | Информация грузополучателя | Грузополучатель | обяз.: uidTrn;
опц.: arrivedAt, departedAt, grossMassAccepted, placesAccepted |
| 4 | Выдача груза перевозчиком | Перевозчик | обяз.: uidTrn;
опц.: deliveredAt, grossMassDelivered, placesDelivered |
| 5 | Финансовые условия перевозчика | Перевозчик | обяз.: uidTrn; прочее — xmlAttributes |
| 6 | Подтверждение грузоотправителя | Грузоотправитель | обяз.: uidTrn; прочее — xmlAttributes |
| 7 | Переадресовка | Грузоотправитель | обяз.: uidTrn; прочее — xmlAttributes |
| 8 | Замена водителя / ТС | Грузоотправитель | обяз.: uidTrn; водитель/ТС — xmlAttributes |
Ответ Доки_ПолучитьXMLЭТрНТитулаПоДанным
Поле Данные | Описание |
|---|---|
contentBase64 | XML для подписи |
filename | Имя файла (ИдФайл.xml) |
signerInnHint | ИНН сертификата для Доки_ПодписатьОткрепленноПоИНН |
titleNumber, docflowId | Номер титула и ДО |
Обработка = Обработки.ДокиHTML.Создать();
// 1) Статус: готов ли следующий титул
ПараметрыСтатус = Новый Структура;
ПараметрыСтатус.Вставить("organization", Новый Структура("inn", "1838016219"));
ПараметрыСтатус.Вставить("docflowId", DocflowIdИзОтветаТ1);
Статус = Обработка.Доки_ПолучитьСтатусДокумента(ПараметрыСтатус, АПИКлюч);
// Статус.Данные.signableDocumentId — документ для подписи
// 2) Титул 2 с автоподписью (то же для titleNumber = 3 или 4)
Данные = Новый Структура;
Данные.Вставить("organization", Новый Структура("inn", "1838016219"));
Данные.Вставить("docflowId", DocflowIdИзОтветаТ1);
Данные.Вставить("titleNumber", 2);
Поля = Новый Структура;
Поля.Вставить("grossMassAccepted", Формат(МассаБрутто, "ЧГ=0"));
Поля.Вставить("placesAccepted", Формат(КолМест, "ЧГ=0"));
Поля.Вставить("massMethod", "01");
Поля.Вставить("acceptedAt",
Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") + "T"
+ Формат(ТекущаяДата(), "ДФ=HH:mm:ss") + "+05:00");
Данные.Вставить("fields", Поля);
// Подпись не передаём — модуль сам: etrn-title-xml → ecom_СертификатыПользователей → CAdESCOM
Результат = Обработка.Доки_ОтправитьЭТрНТитулПоДанным(Данные, АПИКлюч);
Если Результат.Успех Тогда
// Результат.Данные.signed = Истина при успешной автоподписи
Сообщить("Титул 2 отправлен: " + Результат.URL);
Иначе
Сообщить(Результат.ТекстОшибки);
КонецЕсли;
// --- Вариант: явная подпись (нужен для T5–T8 или если автоподпись не подходит) ---
// РезультатXML = Обработка.Доки_ПолучитьXMLЭТрНТитулаПоДанным(Данные, АПИКлюч);
// ContentBase64 = Обработка.Доки_ИзвлечьContentBase64(РезультатXML);
// Подпись = Обработка.Доки_ПодписатьОткрепленноПоИНН(ContentBase64, РезультатXML.Данные.signerInnHint);
// Данные.Вставить("documentFile", ContentBase64);
// Данные.Вставить("documentFileName", Обработка.Доки_ИзвлечьИмяФайлаXML(РезультатXML));
// Результат = Обработка.Доки_ОтправитьЭТрНТитулПоДанным(Данные, АПИКлюч, Подпись);
Русские ключи в fields эквивалентны латинским: МасБрутПрин = grossMassAccepted,
УИД_ТрН = uidTrn. Альтернативные имена для T2: ФДатВрПриб / ЗамДатВрПриб → arrivedAt.
Черновик без подписи: Данные.Вставить("sign", Ложь).
Список документов — массовая отправка ЭТрН
Команда на форме списка (например, Реализация товаров и услуг): по выделенным строкам
собрать данные и вызвать Доки_ОтправитьЭТрНПоДанным для каждой.
Добавьте команду формы списка и повесьте на кнопку «Отправить в Доки».
- Форма списка → Команды → новая команда
ДокиОтправитьЭТрН. - На форму — кнопка с этой командой.
- В модуле формы — обработчик ниже; функцию
СобратьДанныеЭТрНИзРеализациизаполните полями своей конфигурации (см. таблицу ЭТрН).
Если документ уже поддерживается модулем (РеализацияТоваровУслуг / ЗаданиеНаПеревозку / Взвешивание),
вместо сборки структуры можно вызвать Доки_ОтправитьЭТрН(Ссылка, АПИКлюч) — внутри он сам соберёт данные и вызовет Доки_ОтправитьЭТрНПоДанным.
// === Модуль формы списка документов (управляемые формы) ===
&НаКлиенте
Процедура ДокиОтправитьЭТрН(Команда)
Выделенные = Элементы.Список.ВыделенныеСтроки;
Если Выделенные.Количество() = 0 Тогда
ПоказатьПредупреждение(, "Выберите один или несколько документов «Реализация товаров и услуг».");
Возврат;
КонецЕсли;
ТекстВопроса = СтрШаблон(
"Отправить в Доки ЭТрН по выбранным документам (%1 шт.)?",
Выделенные.Количество());
Оповещение = Новый ОписаниеОповещения("ДокиОтправитьЭТрНПослеВопроса", ЭтотОбъект, Выделенные);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ДокиОтправитьЭТрНПослеВопроса(РезультатВопроса, Выделенные) Экспорт
Если РезультатВопроса <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Отчёт = ДокиОтправитьЭТрННаСервере(Выделенные);
ПоказатьПредупреждение(, Отчёт.Текст);
Если ЗначениеЗаполнено(Отчёт.ПоследнийURL) Тогда
ЗапуститьПриложение(Отчёт.ПоследнийURL);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДокиОтправитьЭТрННаСервере(ВыделенныеСтроки)
Обработка = Обработки.ДокиHTML.Создать();
АПИКлюч = "doki1c_…"; // или из константы / настройки обработки
Успешно = 0;
Ошибки = Новый Массив;
ПоследнийURL = "";
Для Каждого СсылкаДокумента Из ВыделенныеСтроки Цикл
// Вариант A: свои данные → Доки_ОтправитьЭТрНПоДанным
Данные = СобратьДанныеЭТрНИзРеализации(СсылкаДокумента);
Результат = Обработка.Доки_ОтправитьЭТрНПоДанным(Данные, АПИКлюч);
// Вариант B (если тип документа поддерживается модулем):
// Результат = Обработка.Доки_ОтправитьЭТрН(СсылкаДокумента, АПИКлюч);
Если Результат.Успех Тогда
Успешно = Успешно + 1;
Если ЗначениеЗаполнено(Результат.URL) Тогда
ПоследнийURL = Результат.URL;
КонецЕсли;
Иначе
Ошибки.Добавить(Строка(СсылкаДокумента) + ": " + Результат.ТекстОшибки);
КонецЕсли;
КонецЦикла;
Текст = СтрШаблон("Отправлено успешно: %1 из %2.", Успешно, ВыделенныеСтроки.Количество());
Если Ошибки.Количество() > 0 Тогда
Текст = Текст + Символы.ПС + "Ошибки:" + Символы.ПС + СтрСоединить(Ошибки, Символы.ПС);
КонецЕсли;
Возврат Новый Структура("Текст,ПоследнийURL", Текст, ПоследнийURL);
КонецФункции
// Заполните маппинг под свою конфигурацию / реквизиты реализации товаров и услуг.
&НаСервереБезКонтекста
Функция СобратьДанныеЭТрНИзРеализации(СсылкаДокумента)
Док = СсылкаДокумента.ПолучитьОбъект();
Данные = Новый Структура;
Данные.Вставить("requestType", "etrn_generation");
Данные.Вставить("source", "1c");
Данные.Вставить("documentNumber", Строка(Док.Номер));
Данные.Вставить("documentDate", Формат(Док.Дата, "ДФ=yyyy-MM-dd"));
// Организация API-ключа (ИНН отправителя)
Данные.Вставить("organization", Новый Структура(
"inn,code,name",
Док.Организация.ИНН,
Док.Организация.ИНН,
Строка(Док.Организация)));
// Участники, адреса, груз, водители, ТС, подписант — по таблице ЭТрН выше.
// Пример каркаса (подставьте реальные реквизиты документа):
Данные.Вставить("shipper", Новый Структура("inn,name,phone", Док.Организация.ИНН, Строка(Док.Организация), ""));
Данные.Вставить("consignee", Новый Структура("inn,name,phone", "", "", ""));
Данные.Вставить("carrier", Новый Структура("inn,name,phone", "", "", ""));
Данные.Вставить("cargo", Новый Массив);
Данные.Вставить("drivers", Новый Массив);
Данные.Вставить("vehicle", Новый Структура("regNumber,ownershipType", "", "1"));
Данные.Вставить("signer", Новый Структура("lastName,firstName,position,status", "", "", "", "1"));
Данные.Вставить("loading", Новый Структура);
Данные.Вставить("transportRules", "Согласно договору");
Данные.Вставить("redirectMethod", "Электронно");
Данные.Вставить("redirectPerson", "");
Возврат Данные;
КонецФункции
ЭЗЗ — структура данных
Доки_ОтправитьЭЗЗПоДанным / Доки_ПолучитьXMLЭЗЗПоДанным → POST /api/1c/draft/ezz / ezz-xml (XML ON_ZAKZVGO, import Type=OrderInfo).
Без параметра Подпись — автоподпись через ecom_СертификатыПользователей (как у ЭТрН Т1).
| Поле | Тип | Описание | |
|---|---|---|---|
organization.inn|code | Строка | обяз. | Организация API-ключа |
shipper.name, inn | Строка | обяз. | Грузоотправитель (или из organization) |
carrier.name, inn | Строка | обяз. | Перевозчик |
*.edoId, *.phone, *.address | опц.* | Ящик ЭДО резолвится по ИНН; адрес: index, regionCode, city… | |
signer.lastName, firstName | Строка | обяз. | Подписант |
signer.position, middleName, authorityConfirm | опц. | ||
cargo[] с name | Массив | обяз. | ≥1 позиция груза |
cargo[].placesCount, grossMass, размеры… | опц. | Места, масса, габариты | |
documentNumber, documentDate | Строка | опц. | Номер и дата заказа/заявки |
function | Строка | опц. | Заказ или Заявка |
loadUnloadPoints[] | Массив | опц. | operation: Погрузка|Выгрузка, адрес, plannedAt |
loadingAddress, deliveryAddress | Структура | опц. | Упрощённые адреса (нормализуются в точки) |
vehicleDeliveryPoint, vehicleParams | опц. | Подача ТС, тип/грузоподъёмность/объём | |
transportRules, otherConditions… | Строка | опц. | Условия перевозки |
documentFile + signatureFile | base64 | опц. | Готовый XML и подпись |
Обработка = Обработки.ДокиHTML.Создать();
// Из документа 1С
Данные = Обработка.Доки_СобратьДанныеЭЗЗИзДокумента(ДокументСсылка);
Результат = Обработка.Доки_ОтправитьЭЗЗПоДанным(Данные, АПИКлюч);
// Или вручную — структура для POST /api/1c/draft/ezz
Данные = Новый Структура;
Данные.Вставить("requestType", "ezz_generation");
Данные.Вставить("source", "1c");
Данные.Вставить("organization", Новый Структура("inn,code,name", "665840163861", "665840163861", "ИП Пример"));
Данные.Вставить("shipper", Новый Структура("inn,name,phone", "665840163861", "ИП Пример", "3432000000"));
Данные.Вставить("carrier", Новый Структура("inn,kpp,name,phone", "6686161521", "668601001", "ООО Перевозчик", "3432000002"));
Данные.Вставить("documentNumber", "ЗЗ-1");
Данные.Вставить("documentDate", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
Данные.Вставить("function", "Заказ");
Данные.Вставить("signer", Новый Структура("lastName,firstName,position", "Иванов", "Иван", "Директор"));
АдресПогрузки = Новый Структура("index,regionCode,city,street,house", "620000", "66", "Екатеринбург", "ул. Складская", "1");
Данные.Вставить("loadingAddress", АдресПогрузки);
Данные.Вставить("deliveryAddress", Новый Структура("index,regionCode,city", "620100", "66", "Екатеринбург"));
Точка = Новый Структура;
Точка.Вставить("operation", "Погрузка");
Точка.Вставить("plannedAt", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + "T10:00:00+05:00");
Точка.Вставить("address", АдресПогрузки);
Точки = Новый Массив;
Точки.Добавить(Точка);
Данные.Вставить("loadUnloadPoints", Точки);
Груз = Новый Структура;
Груз.Вставить("name", "Щебень");
Груз.Вставить("placesCount", 1);
Груз.Вставить("grossMass", 20000);
Грузы = Новый Массив;
Грузы.Добавить(Груз);
Данные.Вставить("cargo", Грузы);
Данные.Вставить("vehicleParams", Новый Структура("type,loadCapacity,volume", "грузовой автомобиль", 20, 40));
// Подпись не передаём — автоподпись через ecom_СертификатыПользователей
Результат = Обработка.Доки_ОтправитьЭЗЗПоДанным(Данные, АПИКлюч);
Если Результат.Успех Тогда
ЗапуститьПриложение(Результат.URL);
Иначе
Сообщить(Результат.ТекстОшибки);
КонецЕсли;
ЭПЭ и ЭЭР (экспедиторские документы)
ЭПЭ — поручение экспедитору (клиент → экспедитор), префикс ON_POREXPKLT,
participant Client, POST /api/1c/draft/epe (XML: epe-xml).
ЭЭР — расписка экспедитора (экспедитор → клиент), префикс ON_EXPRASP,
participant Expeditor, POST /api/1c/draft/eer (XML: eer-xml).
ЭЭР ссылается на ранее отправленный ЭПЭ через forwarderOrderUid (атрибут УИД_ПорЭксп).
| Функция | Эндпоинт | Назначение |
|---|---|---|
Доки_СобратьДанныеЭПЭИзДокумента(Ссылка) | — | Payload ЭПЭ из ЗНП / РТУ / Взвешивания |
Доки_ОтправитьЭПЭПоДанным | POST /api/1c/draft/epe | Импорт ЭПЭ Т1 |
Доки_ПолучитьXMLЭПЭПоДанным | POST /api/1c/draft/epe-xml | XML для подписи |
Доки_СобратьДанныеЭЭРИзДокумента(Ссылка, УидЭПЭ) | — | Payload ЭЭР; УидЭПЭ обязателен |
Доки_ОтправитьЭЭРПоДанным | POST /api/1c/draft/eer | Импорт ЭЭР Т1 |
Доки_ПолучитьXMLЭЭРПоДанным | POST /api/1c/draft/eer-xml | XML для подписи |
| Поле | Описание | |
|---|---|---|
organization.inn | обяз. | Организация API-ключа |
client | обяз. | Клиент (ЭПЭ: обычно = organization; ЭЭР: контрагент/заказчик) |
forwarder | обяз. | Экспедитор (ЭПЭ: перевозчик; ЭЭР: обычно = organization) |
shipper | обяз. (ЭЭР) | Грузоотправитель |
forwarderOrderUid | обяз. (ЭЭР) | UUID связанного ЭПЭ (УИД_ПорЭксп); из формы доп. данных или UUID из fileId/ИдФайл ЭПЭ |
contract.name | обяз. | Наименование договора ТЭО; опц. number, date |
shipments[] | обяз. | ≥1 партия. ЭПЭ: shipper, consignee, cargo[]; ЭЭР: cargo[] |
shipments[].transportMode | опц. | 0/1/2 |
signer | обяз. | Подписант (lastName, firstName…) |
documentFile + подпись | опц. | Сценарий XML → подпись → отправка |
Обработка = Обработки.ДокиHTML.Создать();
// --- ЭПЭ: из документа ---
ДанныеЭПЭ = Обработка.Доки_СобратьДанныеЭПЭИзДокумента(ДокументСсылка);
РезультатЭПЭ = Обработка.Доки_ОтправитьЭПЭПоДанным(ДанныеЭПЭ, АПИКлюч);
// --- ЭПЭ: вручную (структура для POST /api/1c/draft/epe) ---
ДанныеЭПЭ = Новый Структура;
ДанныеЭПЭ.Вставить("requestType", "epe_generation");
ДанныеЭПЭ.Вставить("source", "1c");
ДанныеЭПЭ.Вставить("organization", Новый Структура("inn,code,name", "665840163861", "665840163861", "ИП Пример"));
ДанныеЭПЭ.Вставить("client", Новый Структура("inn,name,phone", "665840163861", "ИП Пример", "3432000000"));
ДанныеЭПЭ.Вставить("forwarder", Новый Структура("inn,kpp,name,phone", "6686161521", "668601001", "ООО Экспедитор", "3432000002"));
ДанныеЭПЭ.Вставить("documentNumber", "ПЭ-1");
ДанныеЭПЭ.Вставить("documentDate", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
ДанныеЭПЭ.Вставить("contract", Новый Структура("name,number,date", "Договор ТЭО", "Д-1", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd")));
ДанныеЭПЭ.Вставить("signer", Новый Структура("lastName,firstName,position", "Иванов", "Иван", "Директор"));
Груз = Новый Структура("name,placesCount,grossMass", "Товар", 10, 500);
Грузы = Новый Массив;
Грузы.Добавить(Груз);
Партия = Новый Структура;
Партия.Вставить("shipper", ДанныеЭПЭ.client);
Партия.Вставить("consignee", Новый Структура("inn,kpp,name,phone", "6658378402", "667001001", "ООО Получатель", "3432000001"));
Партия.Вставить("transportMode", "1");
Партия.Вставить("acceptIntoPossession", "0");
Партия.Вставить("cargo", Грузы);
Партия.Вставить("deliveryAddress", Новый Структура("index,regionCode,city", "620100", "66", "Екатеринбург"));
Партии = Новый Массив;
Партии.Добавить(Партия);
ДанныеЭПЭ.Вставить("shipments", Партии);
РезультатЭПЭ = Обработка.Доки_ОтправитьЭПЭПоДанным(ДанныеЭПЭ, АПИКлюч);
// УИД для ЭЭР: UUID из fileId / ИдФайл ЭПЭ (последний сегмент) либо ввод на форме доп. данных
УидЭПЭ = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
// --- ЭЭР: из документа (после ЭПЭ) ---
ДанныеЭЭР = Обработка.Доки_СобратьДанныеЭЭРИзДокумента(ДокументСсылка, УидЭПЭ);
РезультатЭЭР = Обработка.Доки_ОтправитьЭЭРПоДанным(ДанныеЭЭР, АПИКлюч);
// --- ЭЭР: вручную (структура для POST /api/1c/draft/eer) ---
ДанныеЭЭР = Новый Структура;
ДанныеЭЭР.Вставить("requestType", "eer_generation");
ДанныеЭЭР.Вставить("source", "1c");
ДанныеЭЭР.Вставить("organization", Новый Структура("inn,code,name", "6686161521", "6686161521", "ООО Экспедитор"));
ДанныеЭЭР.Вставить("forwarder", Новый Структура("inn,kpp,name", "6686161521", "668601001", "ООО Экспедитор"));
ДанныеЭЭР.Вставить("client", Новый Структура("inn,name", "665840163861", "ИП Пример"));
ДанныеЭЭР.Вставить("shipper", Новый Структура("inn,name", "665840163861", "ИП Пример"));
ДанныеЭЭР.Вставить("forwarderOrderUid", УидЭПЭ); // обязателен
ДанныеЭЭР.Вставить("documentNumber", "ЭР-1");
ДанныеЭЭР.Вставить("documentDate", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd"));
ДанныеЭЭР.Вставить("contract", Новый Структура("name,number,date", "Договор ТЭО", "Д-1", Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd")));
ДанныеЭЭР.Вставить("signer", Новый Структура("lastName,firstName,position", "Петров", "Пётр", "Экспедитор"));
ПартияЭР = Новый Структура;
ПартияЭР.Вставить("transportMode", "1");
ПартияЭР.Вставить("cargo", Грузы);
ПартииЭР = Новый Массив;
ПартииЭР.Добавить(ПартияЭР);
ДанныеЭЭР.Вставить("shipments", ПартииЭР);
РезультатЭЭР = Обработка.Доки_ОтправитьЭЭРПоДанным(ДанныеЭЭР, АПИКлюч);
В типовых сценариях (ЗНП, Взвешивание) сбор и подпись выполняются через управляемую форму
Обработка.ДокиHTML.Форма.ФормаВводДанныхЭПД — см. Сценарии UI.
XML для подписи → подпись → отправка
Чтобы подписать документ локально, сначала получите тот же XML, который уйдёт в Доки
(ИдФайл содержит UUID — повторная генерация даст другой файл).
Подпись — только на клиенте Windows (КриптоПро CSP + CAdESCOM).
Доки_ПолучитьXMLЭТрНПоДанным/Доки_ПолучитьXMLЭЗЗПоДанным/Доки_ПолучитьXMLЭТрНТитулаПоДанным/Доки_ПолучитьXMLВходящегоДляПодписи→Данные.contentBase64,filenameДоки_ПодписатьОткрепленноПоИНН(contentBase64, ИНН)→ подпись base64- В пакет:
documentFile= contentBase64,documentFileName= filename; отправка с параметромПодписьили полемsignatureFile - Для входящего УПД:
Доки_ПодписатьВходящийДокументили одним вызовомДоки_ПодписатьВходящийДокументПоИНН(см. Приёмка УПД)
Обработка = Обработки.ДокиHTML.Создать();
// 1) XML без импорта в Доки
РезультатXML = Обработка.Доки_ПолучитьXMLЭТрНПоДанным(Данные, АПИКлюч);
Если НЕ РезультатXML.Успех Тогда
ВызватьИсключение РезультатXML.ТекстОшибки;
КонецЕсли;
ContentBase64 = Обработка.Доки_ИзвлечьContentBase64(РезультатXML);
ИмяФайла = Обработка.Доки_ИзвлечьИмяФайлаXML(РезультатXML);
// 2) Откреплённая подпись (ИНН ЮЛ или ИНН ФЛ по МЧД)
ПодписьBase64 = Обработка.Доки_ПодписатьОткрепленноПоИНН(ContentBase64, "7707083893");
// 3) Импорт того же XML + attach/signature
Данные.Вставить("documentFile", ContentBase64);
Данные.Вставить("documentFileName", ИмяФайла);
Результат = Обработка.Доки_ОтправитьЭТрНПоДанным(Данные, АПИКлюч, ПодписьBase64);
// Для ЭЗЗ:
// РезультатXML = Обработка.Доки_ПолучитьXMLЭЗЗПоДанным(Данные, АПИКлюч);
// …подписать…
// Результат = Обработка.Доки_ОтправитьЭЗЗПоДанным(Данные, АПИКлюч, ПодписьBase64);
Если Результат.Успех Тогда
// Результат.Данные.signed = Истина
ЗапуститьПриложение(Результат.URL);
КонецЕсли;
Эндпоинты XML: /api/1c/draft/etrn-xml, /api/1c/draft/ezz-xml,
/api/1c/draft/epe-xml, /api/1c/draft/eer-xml,
/api/1c/draft/etrn-title-xml (титулы 2–8),
/api/1c/documents/incoming-sign-xml (входящий УПД, титул покупателя).
Криптография (ЭЦП)
Работает только на клиенте Windows с КриптоПро CSP и CAdESCOM (не на сервере 1С).
| Функция | Назначение |
|---|---|
Доки_НайтиОтпечатокСертификатаПоИНН(ИНН) | Thumbprint по ИНН ЮЛ или ИНН ФЛ (МЧД) |
Доки_ПодписатьФайлОткрепленно(Данные, Отпечаток [, Пароль]) | CAdES-BES detached → base64; Пароль — PIN контейнера |
Доки_ПодписатьФайлПрикрепленно(Данные, Отпечаток) | CAdES-BES attached — для auth Доки |
Доки_ПодписатьОткрепленноПоИНН(Данные, ИНН) | Поиск серта + detached одним вызовом |
Доки_ПолучитьСписокДействующихСертификатов() | Список сертов CryptoPro: Отпечаток, ИННЮЛ, ИННФЛ, срок |
Доки_ВыбратьСертификатДляПодписи(ИНН) | Диалог выбора серта (★ — совпадение ИНН; для МЧД можно любой) |
Доки_ПодписатьОткрепленноСВыборомСертификата(Данные, ИНН) | 1 серт — авто; несколько — диалог (МЧД) |
Доки_ДанныеСертификатаПользователяEcom(Пользователь) | Отпечаток + пароль из ecom_СертификатыПользователей |
Доки_ОтпечатокСертификатаТекущегоПользователяEcom() | Отпечаток серта текущего пользователя из ecom-регистра |
Обработка = Обработки.ДокиHTML.Создать();
// Найти сертификат
Отпечаток = Обработка.Доки_НайтиОтпечатокСертификатаПоИНН("7707083893");
Если ПустаяСтрока(Отпечаток) Тогда
ВызватьИсключение "Сертификат не найден в хранилище";
КонецЕсли;
// Откреплённая подпись: ДвоичныеДанные / base64 / путь к файлу
ДанныеСерта = Обработка.Доки_ДанныеСертификатаПользователяEcom(ПараметрыСеанса.ТекущийПользователь);
ПодписьDetached = Обработка.Доки_ПодписатьФайлОткрепленно(
ДвоичныеДанныеXML, ДанныеСерта.Отпечаток, ДанныеСерта.Пароль);
// или: ПодписьDetached = Обработка.Доки_ПодписатьОткрепленноПоИНН(ДвоичныеДанныеXML, "7707083893");
// Если сертификатов несколько (МЧД) — диалог выбора:
// Отпечаток = Обработка.Доки_ВыбратьСертификатДляПодписи("7707083893");
// ПодписьDetached = Обработка.Доки_ПодписатьФайлОткрепленно(ДвоичныеДанныеXML, Отпечаток);
// или одним вызовом:
// ПодписьDetached = Обработка.Доки_ПодписатьОткрепленноСВыборомСертификата(ДвоичныеДанныеXML, "7707083893");
// Прикреплённая подпись (для сценариев auth Доки)
ПодписьAttached = Обработка.Доки_ПодписатьФайлПрикрепленно(ДвоичныеДанные, Отпечаток);
Неформализованный документ
Доки_ОтправитьНеформализованныйПоДанным → POST /api/1c/draft/unformalized
| Поле | Тип | Описание | |
|---|---|---|---|
organization.inn / code | Строка | обяз. | Организация API-ключа |
recipientIds | Массив строк | обяз. | Ящики ЭДО контрагентов (globalId) |
documentFile | base64 | обяз.* | Содержимое файла |
filePath / ПутьКФайлу | Строка | обяз.* | Или путь к файлу на диске (читается в base64) |
fileName | Строка | опц. | Имя файла в Доки |
responseSignatureRequired | Булево | опц. | Требовать ответную подпись (по умолчанию да) |
Обработка = Обработки.ДокиHTML.Создать();
Ящики = Новый Массив;
Ящики.Добавить("2AE...."); // globalId ящика контрагента в ЭДО
Данные = Новый Структура;
Данные.Вставить("organization", Новый Структура("inn,code", "7707083893", "7707083893"));
Данные.Вставить("recipientIds", Ящики);
Данные.Вставить("filePath", "C:\temp\dogovor.pdf"); // или documentFile = Base64Строка
Данные.Вставить("fileName", "dogovor.pdf");
Данные.Вставить("responseSignatureRequired", Истина);
Результат = Обработка.Доки_ОтправитьНеформализованныйПоДанным(Данные, АПИКлюч);
Если Результат.Успех Тогда
ЗапуститьПриложение(Результат.URL);
Иначе
Сообщить(Результат.ТекстОшибки);
КонецЕсли;
Входящие документы
Доки_ПолучитьВходящие → POST /api/1c/documents/incoming
| Поле | Тип | Описание | |
|---|---|---|---|
organization.inn / code | Строка | обяз. | Организация |
limit | Число | опц. | Размер страницы (по умолчанию 20, макс. 100) |
offset | Число | опц. | Смещение |
search | Строка | опц. | Поисковая строка |
date_from, date_to | Строка | опц. | Период (YYYY-MM-DD). Не задавайте date_to, равный date_from — API Доки отвечает 400; для одного дня достаточно date_from |
counterpartyId | Строка | опц. | Фильтр по контрагенту |
Из каждой строки списка для приёмки УПД сохраните id (это docflowId),
primaryDocumentId и статус ResponseSignatureRequired (ожидает подписи покупателя).
Обработка = Обработки.ДокиHTML.Создать();
Параметры = Новый Структура;
Параметры.Вставить("organization", Новый Структура("inn", "1838016219"));
Параметры.Вставить("limit", 50);
Параметры.Вставить("date_from", "2026-08-01"); // date_to не обязателен
Результат = Обработка.Доки_ПолучитьВходящие(Параметры, АПИКлюч);
Если Результат.Успех Тогда
// Результат.Данные — массив входящих: id, primaryDocumentId, status, …
Иначе
Сообщить(Результат.ТекстОшибки);
КонецЕсли;
Приёмка и подписание входящего УПД
Сценарий для входящих счётов-фактур/УПД от контрагентов: разбор XML → документы в 1С → подпись титула покупателя.
Организация должна быть зарегистрирована на
/1c/register
с токеном ЭДО. Подпись — только на клиенте Windows (КриптоПро).
Функции модуля
| Функция | Эндпоинт | Назначение |
|---|---|---|
Доки_ПолучитьСоставВходящегоУПД | POST /api/1c/documents/incoming-payload | Разбор XML УПД → Данные.payload для 1С |
Доки_ПолучитьXMLВходящегоДляПодписи | POST /api/1c/documents/incoming-sign-xml | XML титула покупателя → Данные.contentBase64 |
Доки_ПодписатьВходящийДокумент | POST /api/1c/documents/incoming-sign | Отправить готовую откреплённую подпись |
Доки_ПодписатьВходящийДокументПоИНН | sign-xml + CryptoPro + sign | Полный сценарий подписи одним вызовом |
Доки_СоздатьСчетФактуруПолученныйПоДаннымУПДJSON | 1С (локально) | Создать «Поступление» + «Счёт-фактура полученный» |
Параметры запроса
| Поле | Тип | Описание | |
|---|---|---|---|
organization.inn / code | Строка | обяз. | Организация-получатель (покупатель) |
docflowId | Строка | обяз. | Поле id из списка входящих |
primaryDocumentId | Строка | обяз.* | Из списка входящих; нужен для разбора состава (incoming-payload) |
documentId | Строка | опц. | Явный id титула покупателя; иначе сервер найдёт сам |
signatureFile / Подпись | base64 | обяз.* | Откреплённая подпись CAdES-BES (для incoming-sign) |
* Для Доки_ПодписатьВходящийДокументПоИНН подпись формируется автоматически; primaryDocumentId для подписи не нужен.
Подписать УПД — рекомендуемый способ
Обработка = Обработки.ДокиHTML.Создать();
ПараметрыПодписи = Новый Структура;
ПараметрыПодписи.Вставить("organization", Новый Структура("inn", "1838016219"));
ПараметрыПодписи.Вставить("docflowId", "d6c439f1-ef0e-401b-8389-1baddbceb0cd"); // id из списка входящих
РезультатПодписи = Обработка.Доки_ПодписатьВходящийДокументПоИНН(
ПараметрыПодписи,
"1838016219", // ИНН подписанта (ЮЛ или ИНН ФЛ по МЧД)
АПИКлюч);
Если НЕ РезультатПодписи.Успех Тогда
ВызватьИсключение РезультатПодписи.ТекстОшибки;
КонецЕсли;
Сообщить("УПД подписан. processId: " + РезультатПодписи.Данные.processId);
Подписать по шагам (ручной контроль)
// 1) XML титула покупателя
РезультатXML = Обработка.Доки_ПолучитьXMLВходящегоДляПодписи(ПараметрыПодписи, АПИКлюч);
ContentBase64 = Обработка.Доки_ИзвлечьContentBase64(РезультатXML);
// 2) Подпись CryptoPro
ПодписьBase64 = Обработка.Доки_ПодписатьОткрепленноПоИНН(ContentBase64, "1838016219");
// 3) Отправка подписи в Доки
ПараметрыПодписи.Вставить("signatureFile", ПодписьBase64);
РезультатПодписи = Обработка.Доки_ПодписатьВходящийДокумент(ПараметрыПодписи, АПИКлюч);
Полный сценарий: состав → документы 1С → подпись
Обработка = Обработки.ДокиHTML.Создать();
Параметры = Новый Структура;
Параметры.Вставить("organization", Новый Структура("inn", "1838016219"));
Параметры.Вставить("docflowId", "d6c439f1-ef0e-401b-8389-1baddbceb0cd");
Параметры.Вставить("primaryDocumentId", "e63d52e5-5186-4bb3-96d9-0ba938cd0656");
// 1) Состав УПД для 1С
РезультатСостав = Обработка.Доки_ПолучитьСоставВходящегоУПД(Параметры, АПИКлюч);
Если НЕ РезультатСостав.Успех Тогда
ВызватьИсключение РезультатСостав.ТекстОшибки;
КонецЕсли;
// 2) Поступление + счёт-фактура полученный
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, РезультатСостав.Данные);
РезультатСоздания = Обработка.Доки_СоздатьСчетФактуруПолученныйПоДаннымУПДJSON(ЗаписьJSON.Закрыть());
Если НЕ РезультатСоздания.Успех Тогда
ВызватьИсключение РезультатСоздания.Сообщение;
КонецЕсли;
// 3) Подпись титула покупателя
ПараметрыПодписи = Новый Структура;
ПараметрыПодписи.Вставить("organization", Новый Структура("inn", "1838016219"));
ПараметрыПодписи.Вставить("docflowId", Параметры.docflowId);
РезультатПодписи = Обработка.Доки_ПодписатьВходящийДокументПоИНН(ПараметрыПодписи, "1838016219", АПИКлюч);
Если НЕ РезультатПодписи.Успех Тогда
ВызватьИсключение РезультатПодписи.ТекстОшибки;
КонецЕсли;
Типичные ошибки
| Сообщение | Причина |
|---|---|
| Организация не синхронизирована | Нет организации или токена ЭДО — регистрация на /1c/register |
| Не найден сертификат CryptoPro | Нет серта с нужным ИНН в хранилище Windows на клиенте |
| Нет транзакции, доступной для подписи | УПД уже подписан или титул покупателя ещё не сформирован |
| HTTP 400 на входящих | date_from = date_to — уберите date_to |
Статус документа по ID
Доки_ПолучитьСтатусДокумента → POST /api/1c/documents/status.
После успешной отправки ЭТрН/ЭЗЗ сохраните Результат.Данные.documentId и
Результат.Данные.docflowId — по ним можно узнать текущий статус в ЭПД.
| Поле запроса | Тип | Описание | |
|---|---|---|---|
organization.inn / code | Строка | обяз. | Организация API-ключа |
docflowId | Строка | реком. | Id документооборота из ответа отправки |
documentId | Строка | опц. | Id документа ЭПД; если нет docflowId — ищется ДО |
processId | Строка | опц. | Id асинхронного процесса импорта/подписи |
id | Строка | опц. | Алиас: сначала как docflowId, иначе как documentId |
Поле ответа Данные | Описание |
|---|---|
status | ready_to_sign · signed · completed · processing · unknown · … |
documentId, docflowId | Идентификаторы ЭПД |
isSigned, isCompleted | Булевы флаги |
docflowStatus, participantStatus | Сырые статусы ДО / участника |
signableDocumentId | Документ, ожидающий подписи (если есть) |
transactions | Массив транзакций ДО (id, documentId, type, status) |
process | Статус processId (если передавали) |
Обработка = Обработки.ДокиHTML.Создать();
// После отправки:
// DocumentId = Результат.Данные.documentId;
// DocflowId = Результат.Данные.docflowId;
Параметры = Новый Структура;
Параметры.Вставить("organization", Новый Структура("inn", "7707083893"));
Параметры.Вставить("docflowId", DocflowId);
Параметры.Вставить("documentId", DocumentId);
РезультатСтатуса = Обработка.Доки_ПолучитьСтатусДокумента(Параметры, АПИКлюч);
Если РезультатСтатуса.Успех Тогда
Сообщить("Статус: " + РезультатСтатуса.Данные.status);
// ready_to_sign | signed | completed | processing | unknown
Иначе
Сообщить(РезультатСтатуса.ТекстОшибки);
КонецЕсли;
Для УПД (черновик Доки) отдельный статус по ЭПД-id не применим — используйте ссылку
Результат.URL / id черновика из ответа. Функция рассчитана на ЭТрН и ЭЗЗ.
Сценарии с формой «Доп. данные ЭПД»
Для полного цикла ЭТрН T1–T8, ЭЗЗ, ЭПЭ и ЭЭР с подписью КриптоПро в конфигурации используется
управляемая форма Обработка.ДокиHTML.Форма.ФормаВводДанныхЭПД.
Она открывается перед отправкой, собирает массу/места, адреса, УИД ЭПЭ для ЭЭР и возвращает доп. поля в модуль объекта.
| Документ / конфигурация | Что поддерживается | Исходники в репозитории Доки |
|---|---|---|
| Задание на перевозку (ERP) | ЭТрН T1–T8, ЭЗЗ, ЭПЭ, ЭЭР; Доки_DocflowId на форме |
ЗаданиеНаПеревозку/Forms/ФормаДокумента, форма списка |
| Взвешивание (ВесовойТерминал) | ЭТрН T1–T8, ЭЗЗ, ЭПЭ, ЭЭР через ту же форму доп. данных | МодульФормыВзвешиваниеДоки.bsl |
| Реализация (УТ / ERP, HTML) | ЭТрН / УПД через обычную форму DokiPage = "etrn" / "draft" |
Форма_ПолныйМодуль.bsl |
Параметры формы ФормаВводДанныхЭПД
| Параметр | Тип | Описание |
|---|---|---|
ВидЭПД | Строка | etrn_t1…etrn_t8, ezz, epe, eer |
НомерТитула | Число | 0 или 1–8 (для ЭТрН) |
ДокументСсылка | ссылка | Документ-основание (ЗНП, Взвешивание…) |
DocflowId | Строка | UUID ДО после T1 — для титулов 2–8 |
Предзаполнение | Структура | МассаБрутто, КолМест, УидЭПЭ, НомерДоговора… |
Отчество подписанта (signer.middleName / ПодписантОтчество) должно совпадать с сертификатом ЭП.
Если в 1С у ответственного лица отчество не заполнено, модуль перед генерацией XML дополняет его из сертификата
КриптоПро (регистр ecom_СертификатыПользователей или поиск по ИНН).
Результат закрытия формы: структура с доп. полями или Неопределено при отмене.
После T1 сохраните docflowId в реквизите документа или в
ХранилищеСистемныхНастроек — он нужен для титулов 2–8 и для проверки статуса.
Справочник полей ЭТрН из «Задания на перевозку»: документ
«Источники данных».
// Открытие формы доп. данных (управляемая форма ЗНП / Взвешивание)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВидЭПД", "etrn_t1"); // etrn_t2…etrn_t8 | ezz | epe | eer
ПараметрыФормы.Вставить("ДокументСсылка", Ссылка);
ПараметрыФормы.Вставить("DocflowId", СохранённыйDocflowId); // для T2–T8
ОткрытьФорму(
"Обработка.ДокиHTML.Форма.ФормаВводДанныхЭПД",
ПараметрыФормы,
ЭтаФорма, , , ,
Новый ОписаниеОповещения("ДокиПослеВводаДанныхЭПД", ЭтаФорма));
Вспомогательные функции
Обработка = Обработки.ДокиHTML.Создать();
// Результат XML-эндпоинтов
ContentBase64 = Обработка.Доки_ИзвлечьContentBase64(РезультатXML);
ИмяФайла = Обработка.Доки_ИзвлечьИмяФайлаXML(РезультатXML);
// Пустой каркас ответа (если собираете свой результат)
Каркас = Обработка.Доки_НовыйРезультатВызова(); // Успех, URL, ТекстОшибки, Данные