Поделитесь листингом процедуры подписания УПД в 1С по rest api

1. ILNIK 34 17.01.25 21:58 Сейчас в теме +2 $m
Поделитесь, пожалуйста, листингом процедуры подписания УПД в диадоке по rest api
Уже убил кучу времени, ничего не понятно, куча несвязной информации (подписанты, расширенные подписанты и тд), непонятно чем заполнять титул и как. Все время сыпятся ошибки
Вознаграждение за ответ
Показать полностью
Найденные решения
11. uriah 18 28.01.25 18:02 Сейчас в теме +5 $m
//Функция записи
Функция СформироватьФайлТитулаДокумента(ДанныеТитула)  
ИмяФайла = ПолучитьИмяВременногоФайла();  
Файл=Новый ЗаписьXML;  
Попытка  Файл.ОткрытьФайл(ИмяФайла,"UTF-8");  
Исключение  //Сообщить("Не удалось создать файл """+ПолноеИмяФайлаВыгрузки+""": "+ОписаниеОшибки(),СтатусСообщения.Внимание);  Возврат Неопределено;  КонецПопытки;  Файл.ЗаписатьОбъявлениеXML();  Файл.ЗаписатьНачалоЭлемента("UniversalTransferDocumentBuyerTitle");  Файл.ЗаписатьАтрибут("xmlns:xs", "http://www.w3.org/2001/XMLSchema");  Файл.ЗаписатьАтрибут("DocumentCreator", ДанныеТитула.Организация);  Файл.ЗаписатьАтрибут("OperationContent", "Принято без претензий");  Файл.ЗаписатьНачалоЭлемента("Signers");  Файл.ЗаписатьНачалоЭлемента("SignerDetails");  Файл.ЗаписатьАтрибут("LastName", ДанныеТитула.LastName);  
Файл.ЗаписатьАтрибут("FirstName", ДанныеТитула.FirstNameFirstName);  Файл.ЗаписатьАтрибут("MiddleName", ДанныеТитула.MiddleName);  Файл.ЗаписатьАтрибут("SignerPowers", "1");  Файл.ЗаписатьАтрибут("SignerPowersBase", "Должностные обязанности");  Файл.ЗаписатьАтрибут("SignerStatus", "5"); 
 Файл.ЗаписатьАтрибут("SignerType", "2");  
Файл.ЗаписатьАтрибут("Inn", ДанныеТитула.INN);  
Файл.ЗаписатьКонецЭлемента(); 
 Файл.ЗаписатьКонецЭлемента();  
Файл.ЗаписатьКонецЭлемента();  
Файл.Закрыть();  
Возврат ИмяФайла; 
КонецФункции 
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. uriah 18 18.01.25 14:03 Сейчас в теме
Какой формат используете?
3. ILNIK 34 18.01.25 17:18 Сейчас в теме
(2) формат чего? способа отправки сообщений? http api
4. uriah 18 18.01.25 18:03 Сейчас в теме
версии форматов счетов-фактур (СФ) и универсальных передаточных документов (УПД)
5. ILNIK 34 19.01.25 13:54 Сейчас в теме
(4)
версии форматов счетов-фактур (СФ) и универсальных передаточных документов (УПД)

УПД до 21 января 5.02, потом 5.03, приказы 970 1032
7. ILNIK 34 20.01.25 10:04 Сейчас в теме
(6) я разве спрашивал, где мне инструкцию найти? Вопрос вроде в другом
8. ILNIK 34 28.01.25 10:59 Сейчас в теме
Генерируем титул получателя (на сколько я понял, это UniversalTransferDocumentBuyerTitle - титул продавца?).

Получили упрощенную xsd схему титула UserDataXsdUrl.

Возник вопрос - как автоматом сгенерировать и заполнить xml файл титула получателя на основе полученной схемы xsd, чтобы передать его как тело запроса в метод GenerateTitleXml?

Неужели надо вручную построчно формировать xml и заполнять все поля? Там же разные типы документов и заполнение будет разным.

Если есть листинг процедуры, пришлите, пожалуйста
9. uriah 18 28.01.25 18:00 Сейчас в теме
//Получить содержимое документа:

URL = "/V3/GetDocument";        
HTTPЗапрос = Новый HTTPЗапрос(URL + "?boxid=" + boxid + "&MessageID=" + MessageID + "&EntityId="+EntityId);
HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");   	
HTTPЗапрос.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client + ,ddauth_token="+Токен);

HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Результат = HTTPОтвет.ПолучитьТелоКакСтроку();
Реквизиты = ПолучитьСтруктуруИзJSON(Результат); 

КонтентДокумента = base64Значение(Реквизиты.Content.Data);
Показать
10. uriah 18 28.01.25 18:01 Сейчас в теме
//Подписываем титул
ИмяФайла = СформироватьФайлТитулаДокумента(ДанныеТитула);  КонтентДокумента = Новый ДвоичныеДанные(ИмяФайла);  URL = "/GenerateTitleXml";  HTTPЗапрос = Новый HTTPЗапрос(URL + "?boxid=" + boxid + "&documentTypeNamedId=" + DocumentType + "&documentFunction=" + DocumentFunction + "&documentVersion=" + DocumentVersion + "&titleIndex=1&LetterID="+MessageId+"&DocumentID="+EntityId);  HTTPЗапрос.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client + ",ddauth_token="+Токен);  HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/xml; charset=utf-8");  HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайла);  //HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос,ИмяФайлаОтвета);  HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);  Если HTTPОтвет.КодСостояния <> 200 Тогда  Результат = HTTPОтвет.ПолучитьТелоКакСтроку();  Сообщить("Ошибка формирования титула документа." + Символы.ПС + Результат);  Возврат;  КонецЕсли;  ТитулДокумента = HTTPОтвет.ПолучитьТелоКакДвоичныеДанные();  ДанныеПодписи = МенеджерКриптографии.Подписать(ТитулДокумента, Сертификат);
11. uriah 18 28.01.25 18:02 Сейчас в теме +5 $m
//Функция записи
Функция СформироватьФайлТитулаДокумента(ДанныеТитула)  
ИмяФайла = ПолучитьИмяВременногоФайла();  
Файл=Новый ЗаписьXML;  
Попытка  Файл.ОткрытьФайл(ИмяФайла,"UTF-8");  
Исключение  //Сообщить("Не удалось создать файл """+ПолноеИмяФайлаВыгрузки+""": "+ОписаниеОшибки(),СтатусСообщения.Внимание);  Возврат Неопределено;  КонецПопытки;  Файл.ЗаписатьОбъявлениеXML();  Файл.ЗаписатьНачалоЭлемента("UniversalTransferDocumentBuyerTitle");  Файл.ЗаписатьАтрибут("xmlns:xs", "http://www.w3.org/2001/XMLSchema");  Файл.ЗаписатьАтрибут("DocumentCreator", ДанныеТитула.Организация);  Файл.ЗаписатьАтрибут("OperationContent", "Принято без претензий");  Файл.ЗаписатьНачалоЭлемента("Signers");  Файл.ЗаписатьНачалоЭлемента("SignerDetails");  Файл.ЗаписатьАтрибут("LastName", ДанныеТитула.LastName);  
Файл.ЗаписатьАтрибут("FirstName", ДанныеТитула.FirstNameFirstName);  Файл.ЗаписатьАтрибут("MiddleName", ДанныеТитула.MiddleName);  Файл.ЗаписатьАтрибут("SignerPowers", "1");  Файл.ЗаписатьАтрибут("SignerPowersBase", "Должностные обязанности");  Файл.ЗаписатьАтрибут("SignerStatus", "5"); 
 Файл.ЗаписатьАтрибут("SignerType", "2");  
Файл.ЗаписатьАтрибут("Inn", ДанныеТитула.INN);  
Файл.ЗаписатьКонецЭлемента(); 
 Файл.ЗаписатьКонецЭлемента();  
Файл.ЗаписатьКонецЭлемента();  
Файл.Закрыть();  
Возврат ИмяФайла; 
КонецФункции 
Показать
12. ILNIK 34 28.01.25 21:28 Сейчас в теме
(11)
/Функция записи

Спасибо.
А где можно прочитать, какой минимальный и достаточный набор реквизитов для обязательного заполнения при создании титула любого типа документа? Ведь сама схема xtd содержит описание 100500 полей.
И получается, что надо вручную компоновать этот xml свой под каждый тип документа (акт, сф, УПД) и еще под каждую версию?
13. uriah 18 28.01.25 23:14 Сейчас в теме
Тут можно углубиться в проблему так, что не выберешься из воронки знаний. Ну а так, все документы формализованы.
14. ILNIK 34 29.01.25 12:13 Сейчас в теме
(13) Хорошо, а СформироватьФайлТитулаДокумента у вас имеется для СФ и Акта?
15. ILNIK 34 29.01.25 13:28 Сейчас в теме
пишет ошибку
/UniversalTransferDocument/Signers/SignerReference: @Inn is required
/UniversalTransferDocument/Signers/SignerReference: SignerDetails not found for boxId=xxxxxx-xxxxxx-xxxx-xxxxx-xxxxxxxxxxx, thumbprint=XXXXXXXXXXXXXXXXXX
documentTitleType=7
16. ILNIK 34 29.01.25 16:18 Сейчас в теме
далее ошибка
MessagePatchToPost.RecipientTitles[0]: Формат титула покупателя должен соответствовать формату титула продавца (Data at the root level is invalid. Line 1, position 1.)
17. uriah 18 29.01.25 22:50 Сейчас в теме
В марте 24 года код был рабочим. Может Диадок что изменил.
18. ILNIK 34 30.01.25 12:58 Сейчас в теме
(17) а можете скинуть всю вашу обработку или ее код?
Возник вопрос, нужно ли сначала посылать сообщение методом postmassage, а потом только отправлять метод postmassagepatch ? Или надо отправлять сразу postmassagepatch?
19. ILNIK 34 30.01.25 17:34 Сейчас в теме
Короче проблема была в полке, убрали ее, заработало
20. sergeytor 15 10.03.25 10:10 Сейчас в теме
(19) Добрый день! поделитесь пожалуйста секретом, как убрать полку? нужно очистить какой параметр?
21. ILNIK 34 10.03.25 14:18 Сейчас в теме
22. sergeytor 15 11.03.25 10:24 Сейчас в теме
(21) Не смогу к сожалению, рейтинг менее 20
23. NikiforovVA 24 11.03.25 10:29 Сейчас в теме
24. sergeytor 15 11.03.25 10:35 Сейчас в теме
При подписании документа ошибка лезет, модуль типовой от Диадока немного допилиный. Как я понял нужно убрать полку документов , вопрос как это сделать.
25. NikiforovVA 24 11.03.25 10:40 Сейчас в теме
26. sergeytor 15 11.03.25 10:42 Сейчас в теме
скрин
Прикрепленные файлы:
27. NikiforovVA 24 11.03.25 11:10 Сейчас в теме
В методе MessagePatchToPost передается структура
RecipientTitles — список титулов получателя для любого типа документов [это массив], подлежащих отправке. Каждый элемент списка представлен структурой RecipientTitleAttachment.

Структура RecipientTitleAttachment представляет собой титул получателя любого типа документа.
поля этой структуры
ParentEntityId — идентификатор титула исполнителя. Принимает значение одной из сущностей родительского сообщения (поле EntityId).
SignedContent — содержимое XML-файла титула с электронной подписью, представленное структурой SignedContent.

править надо SignedContent!
струтура SignedContent состоит из

Content — бинарное содержимое подписываемого документа. Значение должно быть пустым, если заполнено поле NameOnShelf.

NameOnShelf — имя подписываемого документа на полке документов. Значение должно быть пустым, если заполнено поле Content.

Signature — электронная подпись в формате CMS SignedData в DER-кодировке. Необязательный параметр.

SignatureNameOnShelf — имя подписи на полке документов.

То есть, заполняется либо только поля без "NameOnShelf", либо только поля с "NameOnShelf"

Но судя по ошибке, это не связано с полкой

у вас титул не корректен скорее всего

как титул генерите?
sergeytor; +1 Ответить
28. sergeytor 15 11.03.25 11:26 Сейчас в теме
Спасибо. Проверю отладкой эти параметры, документ входящий ,титул судя по коду не трогали.
29. NikiforovVA 24 11.03.25 12:25 Сейчас в теме
(28) саму обработку давно обновляли? с 1 ого марта формат титула поменялся сейчас 970 идет, был 820
30. sergeytor 15 11.03.25 12:56 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот