Поделитесь листингом процедуры подписания УПД в 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[0]: Формат титула покупателя должен соответствовать формату титула продавца (Data at the root level is invalid. Line 1, position 1.)
MessagePatchToPost.RecipientTitles[0]: Формат титула покупателя должен соответствовать формату титула продавца (Data at the root level is invalid. Line 1, position 1.)
При подписании документа ошибка лезет, модуль типовой от Диадока немного допилиный. Как я понял нужно убрать полку документов , вопрос как это сделать.
В методе 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"
Но судя по ошибке, это не связано с полкой
у вас титул не корректен скорее всего
как титул генерите?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
