Поделитесь листингом процедуры подписания УПД в 1С по rest api
Найденные решения
//Функция записи
Функция СформироватьФайлТитулаДокумента(ДанныеТитула)
ИмяФайла = ПолучитьИмяВременногоФайла();
Файл=Новый Запись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);
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.Закрыть();
Возврат ИмяФайла;
КонецФункции
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Генерируем титул получателя (на сколько я понял, это UniversalTransferDocumentBuyerTitle - титул продавца?).
Получили упрощенную xsd схему титула UserDataXsdUrl.
Возник вопрос - как автоматом сгенерировать и заполнить xml файл титула получателя на основе полученной схемы xsd, чтобы передать его как тело запроса в метод GenerateTitleXml?
Неужели надо вручную построчно формировать xml и заполнять все поля? Там же разные типы документов и заполнение будет разным.
Если есть листинг процедуры, пришлите, пожалуйста
Получили упрощенную xsd схему титула UserDataXsdUrl.
Возник вопрос - как автоматом сгенерировать и заполнить xml файл титула получателя на основе полученной схемы xsd, чтобы передать его как тело запроса в метод GenerateTitleXml?
Неужели надо вручную построчно формировать xml и заполнять все поля? Там же разные типы документов и заполнение будет разным.
Если есть листинг процедуры, пришлите, пожалуйста
//Получить содержимое документа:
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);
Показать
//Подписываем титул
ИмяФайла = СформироватьФайлТитулаДокумента(ДанныеТитула); КонтентДокумента = Новый ДвоичныеДанные(ИмяФайла); 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Ответ.ПолучитьТелоКакДвоичныеДанные(); ДанныеПодписи = МенеджерКриптографии.Подписать(ТитулДокумента, Сертификат);
//Функция записи
Функция СформироватьФайлТитулаДокумента(ДанныеТитула)
ИмяФайла = ПолучитьИмяВременногоФайла();
Файл=Новый Запись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);
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.ЗаписатьКонецЭлемента();
Файл.Закрыть();
Возврат ИмяФайла;
КонецФункции
Показать
(11)
Спасибо.
А где можно прочитать, какой минимальный и достаточный набор реквизитов для обязательного заполнения при создании титула любого типа документа? Ведь сама схема xtd содержит описание 100500 полей.
И получается, что надо вручную компоновать этот xml свой под каждый тип документа (акт, сф, УПД) и еще под каждую версию?
/Функция записи
Спасибо.
А где можно прочитать, какой минимальный и достаточный набор реквизитов для обязательного заполнения при создании титула любого типа документа? Ведь сама схема xtd содержит описание 100500 полей.
И получается, что надо вручную компоновать этот xml свой под каждый тип документа (акт, сф, УПД) и еще под каждую версию?
пишет ошибку
/UniversalTransferDocument/Signers/SignerReference: @Inn is required
/UniversalTransferDocument/Signers/SignerReference: SignerDetails not found for boxId=xxxxxx-xxxxxx-xxxx-xxxxx-xxxxxxxxxxx, thumbprint=XXXXXXXXXXXXXXXXXX
documentTitleType=7
/UniversalTransferDocument/Signers/SignerReference: @Inn is required
/UniversalTransferDocument/Signers/SignerReference: SignerDetails not found for boxId=xxxxxx-xxxxxx-xxxx-xxxxx-xxxxxxxxxxx, thumbprint=XXXXXXXXXXXXXXXXXX
documentTitleType=7
В методе MessagePatchToPost передается структура
RecipientTitles — список титулов получателя для любого типа документов [это массив], подлежащих отправке. Каждый элемент списка представлен структурой RecipientTitleAttachment.
Структура RecipientTitleAttachment представляет собой титул получателя любого типа документа.
поля этой структуры
ParentEntityId — идентификатор титула исполнителя. Принимает значение одной из сущностей родительского сообщения (поле EntityId).
SignedContent — содержимое XML-файла титула с электронной подписью, представленное структурой SignedContent.
править надо SignedContent!
струтура SignedContent состоит из
Content — бинарное содержимое подписываемого документа. Значение должно быть пустым, если заполнено поле NameOnShelf.
NameOnShelf — имя подписываемого документа на полке документов. Значение должно быть пустым, если заполнено поле Content.
Signature — электронная подпись в формате CMS SignedData в DER-кодировке. Необязательный параметр.
SignatureNameOnShelf — имя подписи на полке документов.
То есть, заполняется либо только поля без "NameOnShelf", либо только поля с "NameOnShelf"
Но судя по ошибке, это не связано с полкой
у вас титул не корректен скорее всего
как титул генерите?
RecipientTitles — список титулов получателя для любого типа документов [это массив], подлежащих отправке. Каждый элемент списка представлен структурой RecipientTitleAttachment.
Структура RecipientTitleAttachment представляет собой титул получателя любого типа документа.
поля этой структуры
ParentEntityId — идентификатор титула исполнителя. Принимает значение одной из сущностей родительского сообщения (поле EntityId).
SignedContent — содержимое XML-файла титула с электронной подписью, представленное структурой SignedContent.
править надо SignedContent!
струтура SignedContent состоит из
Content — бинарное содержимое подписываемого документа. Значение должно быть пустым, если заполнено поле NameOnShelf.
NameOnShelf — имя подписываемого документа на полке документов. Значение должно быть пустым, если заполнено поле Content.
Signature — электронная подпись в формате CMS SignedData в DER-кодировке. Необязательный параметр.
SignatureNameOnShelf — имя подписи на полке документов.
То есть, заполняется либо только поля без "NameOnShelf", либо только поля с "NameOnShelf"
Но судя по ошибке, это не связано с полкой
у вас титул не корректен скорее всего
как титул генерите?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот