Модуль 1С · ДокиHTML · Function-call API

Инструкция по модулю ДокиHTML

Подключение внешней обработки к конфигурации 1С, получение API-ключа и вызов экспортируемых функций для создания документов ЭДО (УПД), приёмки и подписания входящих УПД, ЭТрН, ЭЗЗ, ЭПЭ и ЭЭР — в том числе с откреплённой подписью и выбором сертификата по МЧД.

1. Скачать и подключить модуль

Один файл ДокиHTML.epf подходит и для обычных форм, и для тонкого клиента. Все экспортируемые функции (Доки_ПолучитьXML*, Доки_Отправить* и т.д.) уже встроены в модуль объекта обработки — отдельный .bsl скачивать не нужно.

Внешняя обработка

  1. Файл → Открыть → выбрать ДокиHTML.epf.
  2. В настройках обработки укажите API-ключ (или передавайте его параметром при вызове).
  3. Базовый URL по умолчанию: https://node.1os.su/doki.

Вшивка в конфигурацию

  1. Конфигуратор → Обработки → добавить ДокиHTML.
  2. Модуль объекта и формы — из поставки модуля.
  3. Вызов: Обработки.ДокиHTML.Создать() — путь к .epf не нужен.

2. Получить API-ключ

На странице регистрации можно получить триальный API-ключ и привязать организации по ЭЦП или постоянному токену Доки. Страницу можно открыть из 1С (список ИНН передаётся автоматически) или самостоятельно — тогда ИНН организаций указываются вручную.

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 + signatureFilebase64опц.Готовый 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 из ДО)
documentFilebase64опц.При отправке: тот же 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ЭТрНТитулаПоДанным

Поле ДанныеОписание
contentBase64XML для подписи
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", Ложь).

Список документов — массовая отправка ЭТрН

Команда на форме списка (например, Реализация товаров и услуг): по выделенным строкам собрать данные и вызвать Доки_ОтправитьЭТрНПоДанным для каждой. Добавьте команду формы списка и повесьте на кнопку «Отправить в Доки».

  1. Форма списка → Команды → новая команда ДокиОтправитьЭТрН.
  2. На форму — кнопка с этой командой.
  3. В модуле формы — обработчик ниже; функцию СобратьДанныеЭТрНИзРеализации заполните полями своей конфигурации (см. таблицу ЭТрН).

Если документ уже поддерживается модулем (РеализацияТоваровУслуг / ЗаданиеНаПеревозку / Взвешивание), вместо сборки структуры можно вызвать Доки_ОтправитьЭТрН(Ссылка, АПИКлюч) — внутри он сам соберёт данные и вызовет Доки_ОтправитьЭТрНПоДанным.

// === Модуль формы списка документов (управляемые формы) ===

&НаКлиенте
Процедура ДокиОтправитьЭТрН(Команда)

    Выделенные = Элементы.Список.ВыделенныеСтроки;
    Если Выделенные.Количество() = 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 + signatureFilebase64опц.Готовый 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-xmlXML для подписи
Доки_СобратьДанныеЭЭРИзДокумента(Ссылка, УидЭПЭ)Payload ЭЭР; УидЭПЭ обязателен
Доки_ОтправитьЭЭРПоДаннымPOST /api/1c/draft/eerИмпорт ЭЭР Т1
Доки_ПолучитьXMLЭЭРПоДаннымPOST /api/1c/draft/eer-xmlXML для подписи
ПолеОписание
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).

  1. Доки_ПолучитьXMLЭТрНПоДанным / Доки_ПолучитьXMLЭЗЗПоДанным / Доки_ПолучитьXMLЭТрНТитулаПоДанным / Доки_ПолучитьXMLВходящегоДляПодписиДанные.contentBase64, filename
  2. Доки_ПодписатьОткрепленноПоИНН(contentBase64, ИНН) → подпись base64
  3. В пакет: documentFile = contentBase64, documentFileName = filename; отправка с параметром Подпись или полем signatureFile
  4. Для входящего УПД: Доки_ПодписатьВходящийДокумент или одним вызовом Доки_ПодписатьВходящийДокументПоИНН (см. Приёмка УПД)
Обработка = Обработки.Доки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)
documentFilebase64обяз.*Содержимое файла
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-xmlXML титула покупателя → Данные.contentBase64
Доки_ПодписатьВходящийДокументPOST /api/1c/documents/incoming-signОтправить готовую откреплённую подпись
Доки_ПодписатьВходящийДокументПоИННsign-xml + CryptoPro + signПолный сценарий подписи одним вызовом
Доки_СоздатьСчетФактуруПолученныйПоДаннымУПДJSON1С (локально)Создать «Поступление» + «Счёт-фактура полученный»

Параметры запроса

ПолеТипОписание
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
Поле ответа ДанныеОписание
statusready_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_t1etrn_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, ТекстОшибки, Данные

Нужна помощь с внедрением на вашей конфигурации — напишите в Telegram.