3.3.4.9. Формирование и отправка ответа на формализованный документ
|
|
Под ответом на формализованный документ здесь подразумевается один из следующих документов:
•
|
Уведомление об уточнении в ответ на счет-фактуру, ТОРГ 12, Акт выполненных работ, Документ о передаче товаров при торговых операциях, Документ о передаче результатов работ.
|
•
|
Титул покупателя в ответ на ТОРГ 12 или Документ о передаче товаров при торговых операциях.
|
•
|
Титул заказчика в ответ на Акт выполненных работ или Документ о передаче результатов работ.
|
•
|
Информация покупателя в ответ на счет-фактуру с функцией СЧФДОП или ДОП.
|
Файл ответа на формализованный документ можно сформировать в системе или импортировать файл ответа, сформированный вне системы (Уведомление об уточнении, Титул покупателя - ТОРГ 12, Титул заказчика - Акт выполненных работ, ...).
Отправка сформированного в системе или импортированного ответа на формализованный документ происходит при вызове метода AutoSendReceive (см. п. 3.3.4.1. Метод AutoSendReceive).
Регистрационный номер МЧД, которая ранее была загружена в систему, можно добавить в теге <Warrants>. Если указанный в блоке <Warrants> номер МЧД присутствует в системе и привязан к учетной записи подписанта, то МЧД будет добавлена к документу и отправлена вместе с ним.
Пример тега <Warrants> с регистрационным номером МЧД:
<Warrants>
<Warrant MetaID="f8a95bf3-662f-44f9-b998-b941e747c106" > </Warrant>
</Warrants>
Тег Warrant MetaID может повторяться, если необходимо передать сведения о нескольких МЧД.
Блок <Warrants> необязателен, но если он указан, то должен быть заполнен.
Формирование Уведомления об уточнении
Чтобы сформировать Уведомление об уточнении (отклонить полученный документ), необходимо воспользоваться одним из двух методов SDK:
1.
|
public void Reject(string docflowId, string comment). Автоматическое создание Уведомления об уточнении по DocflowID. 2-м параметром является комментарий, который будет добавлен в текст Уведомления об уточнении.
|
2.
|
public void RejectWithRawData(string docActionXml). Создание Уведомления об уточнении с использованием xml.
|
Формат xml такой же, как и в случае Accept, с той лишь разницей, что блок AdditionalParameter не имеет смысла.
<?xml version="1.0" encoding="utf-8"?>
<Document InternalId="732f4bce-cf42-4855-93dd-05828e9bd4df" Action="Reject">
<Comment>Недостаточно данных!</Comment>
<Signers>
<Signer>
<Person LastName="Автотестовый" FirstName="Файлер" Patronymic="ЮЛ2" Inn="9977707345" />
</Signer>
<Signer>
<Certificate Thumbprint="9baa116ed41cc4d9a8932af5493c8bf8964e1a0b" SerialNumber="6c22e4ec000000001348" />
</Signer>
</Signers>
<Warrants>
<Warrant MetaID="f8a95bf3-662f-44f9-b998-b941e747c106" > </Warrant>
</Warrants>
</Document>
В поле Comment получателем формализованного документа указывается причина отказа принять документ или произвольный комментарий, который будет добавлен в текст Уведомления об уточнении.
Если сотрудник не имеет прав доступ к указанному документу, то ему возвратится информация об ошибке 2120.
Положительный ответ на формализованный документ (ТОРГ 12, Акт выполненных работ, Документ о передаче результатов работ, Документ о передаче товаров при торговых операциях)
Для формирования положительного ответа на формализованный документ предназначена группа методов Accept.
Сигнатуры методов:
•
|
public void Accept(string docflowId). Предназначен для подписания полученного документа по его DocflowID.
|
•
|
public void Accept(string docflowId, ICustomerTitle customerTitle). Данный метод позволяет указать самостоятельно сформированный титул покупателя/заказчика наряду с DocflowID.
|
•
|
public void AcceptWithRawData(string docActionXml). Для подписания используется xml, в котором есть возможность указать дополнительные параметры для подписания документа. Формат xml для данного метода:
|
<?xml version="1.0" encoding="utf-8"?>
<Document InternalId="f1712a8e-256b-4076-a370-b35aa629f44a" Action="Accept">
<AdditionalData>
<AdditionalParameter Name="ГрузПринялФамилия" Value="Фам1" />
<AdditionalParameter Name="ГрузПринялИмя" Value="Александерр" />
<AdditionalParameter Name="ГрузПринялОтчество" Value="Петровичч" />
<AdditionalParameter Name="ГрузПринялДолжность" Value="Дол1" />
<AdditionalParameter Name="ГрузПолучилФамилия" Value="Носовв" />
<AdditionalParameter Name="ГрузПолучилИмя" Value="Иванн" />
<AdditionalParameter Name="ГрузПолучилОтчество" Value="Васильевичч" />
<AdditionalParameter Name="ГрузПолучилДолжность" Value="Долж2" />
<AdditionalParameter Name="ДатаПолученияГруза" Value="27.02.2010" />
<AdditionalParameter Name="ДоверенностьНомер" Value="12345678" />
<AdditionalParameter Name="ДоверенностьДата" Value="21.11.2007" />
<AdditionalParameter Name="НаименованиеОрганизацииВыдавшейДоверенность" Value="Ласточкаа1" />
<AdditionalParameter Name="ДоверенностьВыданаКемИмя" Value="Олегг" />
<AdditionalParameter Name="ДоверенностьВыданаКемФамилия" Value="Фам" />
<AdditionalParameter Name="ДоверенностьВыданаКемОтчество" Value="Петровиxx" />
<AdditionalParameter Name="ДоверенностьВыданаКемДолжность" Value="Дол3" />
<AdditionalParameter Name="ДоверенностьВыданаКемДополнительныеСведения" Value="" />
<AdditionalParameter Name="ДоверенностьВыданаКомуИмя" Value="Олеггг" />
<AdditionalParameter Name="ДоверенностьВыданаКомуФамилия" Value="Вдовиченко" />
<AdditionalParameter Name="ДоверенностьВыданаКомуОтчество" Value="Петровичч" />
<AdditionalParameter Name="ДоверенностьВыданаКомуДолжность" Value="Дол4" />
<AdditionalParameter Name="ДоверенностьВыданаКомуДополнительныеСведения" Value="" />
</AdditionalData>
<Signers>
<Signer>
<Person LastName="Автотестовый" FirstName="Файлер" Patronymic="ЮЛ2" Inn="9977707345" />
</Signer>
<Signer>
<Certificate Thumbprint="9baa116ed41cc4d9a8932af5493c8bf8964e1a0b" SerialNumber="6c22e4ec000000001348" />
</Signer>
</Signers>
<Warrants>
<Warrant MetaID="f8a95bf3-662f-44f9-b998-b941e747c106" > </Warrant>
</Warrants>
</Document>
В internalID указывается DocflowID документооборота, над которым необходимо провести действия.
Тэг Action отвечает за тип действия: Accept либо Reject.
Блог Signers предназначен для указания сертификатов ключей ЭП, которыми должен быть подписан документ. Указывается либо владелец сертификата, либо серийный номер с отпечатком.
Блок AdditionalParameter служит для указания набора дополнительных параметров, которые будут использованы для создания ответного титула продавца либо заказчика. Применяется только для формирования ответа на ТОРГ-12 и Акты выполненных работ. Приведен полный список возможных параметров.
Warrants – опциональная секция, содержащая регистрационный номер ранее зарегистрированной в системе Такском-Доклайнз доверенности для подписанта.
Если сотрудник не имеет прав доступ к указанному документу, то ему возвратится информация об ошибке 2120.
Импорт файла ответа на формализованный документ (Уведомления об уточнении, Титула покупателя - на ТОРГ 12 или Документ о передаче товаров при торговых операциях, Титула заказчика - на Акт выполненных работ или Документ о передаче результатов работ)
Для импорта файла ответа на формализованный документ предназначены методы:
•
|
void SendServiceDocument(TaxcomContainer container,string docflowId)
|
•
|
void SendServiceDocumentFromFile(string fileName, string docflowId)
|
Соответствующие классы в .NET SDK и COM SDK имеют следующие имена:
•
|
CorrectionNoticeDocument (Уведомление об уточнении)
|
•
|
FormalizedConsigmentCustomerTitleDocument (Титул покупателя - ТОРГ 12)
|
•
|
FormalizedTradingCustomerTitleDocument (Титул покупателя - Документ о передаче товаров при торговых операциях)
|
•
|
FormalizedStatementCustomerTitleDocument (Титул заказчика - Акт выполненных работ)
|
•
|
FormalizedWorkResultCustomerTitleDocument (Титул заказчика - Документ о передаче результатов работ)
|
В качестве обязательных параметров следует передать либо объект контейнера, содержащего один из перечисленных выше документов, либо путь к zip файлу контейнера и id документооборота, к которому относится данный документ.
Передача null в качестве любого из параметров приводит к ArgumentNullException с указанием имени некорректного параметра.
Для перечисленных выше документов имеется возможность добавить файл подписи, либо сформировать ЭП на машине клиента. Для реализации этой возможности применяются следующие методы:
•
|
void AddCertificateForSign(string thumbprint);
|
•
|
void AddExistingSignature(string _filePath).
|
Если сотрудник не имеет прав доступ к указанному документу, то ему возвратится информация об ошибке 2120.
Формирование Информации покупателя на счет-фактуру с функцией СЧФДОП или ДОП
При получении счета-фактуры с функцией СЧФДОП или ДОП возможна (не не является обязательной) отправка документа «Информация покупателя». Для функции СЧФ и счетов-фактур без функции отправка такого документа не поддерживается.
Для отправки документа «Информация покупателя» используется метод:
public void SendCustomerInformationWithRawData(string docActionXml)
,где docActionXml – XML-описатель с параметрами вызова метода (пример XML-описателя приведен ниже).
Метод формирует и отправляет «Информацию покупателя» в соответствии со значением параметра метода.
Возвращаемых значений у данного метода нет.
В составе XML-описателя передаются необходимые для формирования документа параметры (все они являются обязательными, допустимо указание двух подписантов):
-
Покупатель.НаименованиеЭкономическогоСубъектаСоставителя
-
СодержаниеФактаХозЖизни.СодержаниеОперации
-
Подписант.ОблПолн
-
Подписант.Статус
-
Подписант.ОснПолн
-
Подписант.Должн
Примеры XML-описателя для ответа на УПД формата 5.01
Пример 1, с одним подписантом:
<?xml version="1.0" encoding="utf-8"?>
<Document InternalId="ИД ДО" Action="SendCustomerInformation">
<AdditionalData>
<AdditionalParameter Name="Покупатель.НаименованиеЭкономическогоСубъектаСоставителя" Value="СубъектаСоставителя" />
<AdditionalParameter Name="СодержаниеФактаХозЖизни.СодержаниеОперации" Value="Услуги получены, претензий нет" />
<AdditionalParameter Name="Подписант.ОблПолн" Value="1" />
<AdditionalParameter Name="Подписант.Статус" Value="2" />
<AdditionalParameter Name="Подписант.ОснПолн" Value="Должностные обязанности" />
<AdditionalParameter Name="Подписант.Должн" Value="Гл. бухгалтер" />
</AdditionalData>
</Document>
Пример 2, с двумя подписантами:
<?xml version="1.0" encoding="utf-8"?>
<Document InternalId="b8995728-f550-4c20-86ea-3dc7c23e0f9b" Action="SendCustomerInformation">
<AdditionalData>
<AdditionalParameter Name="Покупатель.НаименованиеЭкономическогоСубъектаСоставителя" Value="СубъектаСоставителя"/>
<AdditionalParameter Name="СодержаниеФактаХозЖизни.СодержаниеОперации" Value="Услуги получены, претензий нет"/>
<AdditionalParameter Name="Подписант.ОблПолн" Value="3"/>
<AdditionalParameter Name="Подписант.Статус" Value="1"/>
<AdditionalParameter Name="Подписант.ОснПолн" Value="Должностные обязанности"/>
<AdditionalParameter Name="Подписант.Должн" Value="Гл. бухгалтер" />
</AdditionalData>
<Signers>
<Signer>
<Person LastName="Диденко" FirstName="Александр" Patronymic="Александрович" Inn="9898669538" AreaOfAuthority="1" SignerPersonStatus="2" ReasonTheAuthority="Должностные обязанности"/>
</Signer>
<Signer>
<Person LastName="Эстонец" FirstName="Вадим" Patronymic="Юрьевич" Inn="9898669538" AreaOfAuthority="1" SignerPersonStatus="1" ReasonTheAuthority="Должностные обязанности" />
</Signer>
</Signers>
<Warrants>
<Warrant MetaID="f8a95bf3-662f-44f9-b998-b941e747c106" > </Warrant>
</Warrants>
</Document>
Пример XML-описателя для ответа на УПД формата 5.03
<?xml version="1.0" encoding="utf-8"?>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" InternalId="cce7ab57-6256-4b1c-a860-bf4b8df36415" Action="SendCustomerInformation">
<Signers>
<Signer>
<Certificate Thumbprint="ef3d032abbd6048f0f826e508826b428d34ea30f" SerialNumber="6ea0970092b1dabb451bd04b87cb0f1b" />
</Signer>
</Signers>
<AdditionalData>
<AdditionalParameter Name="Покупатель.НаименованиеЭкономическогоСубъектаСоставителя" Value="Общество с ограниченной ответственностью Гавань, ИНН/КПП 2129465140 / 661045069" />
<AdditionalParameter Name="СодержаниеФактаХозЖизни.СодержаниеОперации" Value="Покупатель претензий к Продавцу не имеет" />
<AdditionalParameter Name="СодержаниеФактаХозЖизни.ДатаПринятия" Value="01.01.2025" />
<AdditionalParameter Name="Подписант.СпосПодтПолном" Value="1" />
<AdditionalParameter Name="СодержаниеФактаХозЖизни.СведенияОПринятии.КодСодержанияОперации.КодИтога" Value="1" />
</AdditionalData>
</Document>
Для каждого из подписантов можно задать параметры "Область полномочий" (AreaOfAuthority), "Статус" (SignerPersonStatus) и "Основание полномочий (доверия) (ReasonTheAuthority)". Они опциональны, при их отсутствии используются значения аналогичных параметров "Подписант.ОблПолн", "Подписант.Статус", "Подписант.ОснПолн" из тега <AdditionalData>. В случае двойного определения этих параметров приоритет имеют указанные в блоке <Signer>.
Выдержка из xsd схемы
<xs:attribute name="ОблПолн" use="required">
<xs:annotation>
<xs:documentation>Область полномочий</xs:documentation>
<xs:documentation>, где:
1 - лицо, совершившее сделку, операцию;
2 – лицо, совершившее сделку, операцию и ответственное за ее оформление;
3 – лицо, ответственное за оформление свершившегося события</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Статус" use="required">
<xs:annotation>
<xs:documentation>Статус</xs:documentation>
<xs:documentation>, где:
1 - Работник организации - исполнителя работ (услуг);
2 – Работник организации - составителя информации исполнителя;
3 - Работник иной уполномоченной организации;
4 - Уполномоченное физическое лицо (в том числе индивидуальный предприниматель)</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1"/>
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<xs:enumeration value="4"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ОснПолнПодп" use="required">
<xs:annotation>
<xs:documentation>Основание полномочий (доверия) подписанту</xs:documentation>
<xs:documentation>Для Статус=1 или Статус=2 или Статус=3 указываются «Должностные обязанности» по умолчанию или иные основания полномочий (доверия).
Для Статус=4 указываются основания полномочий (доверия)</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="255"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
Ограничения на использование методов:
- нельзя отклонить документ (отправить Уведомление об уточнении) до отправки извещения о получении этого документа;
- нельзя отклонить принятый документ (Товарную накладную ТОРГ-12, Документ о передаче товаров при торговых операциях, Документ о передаче результатов работ или Акт о выполнении работ), в ответ на который был отправлен Титул покупателя или Титул заказчика;
- нельзя повторно отклонить документ (отправить Уведомление об уточнении).
- нельзя повторно дать положительный ответ на документ, в ответ на который ранее был отправлен Титул покупателя или Титул заказчика;
- нельзя принять отклонённый документ (отозвать или признать недействительным отправленное Уведомление об уточнении);
- нельзя принять документ (подписать и отправить положительный ответ) до отправки извещения о его получении;
- нельзя "принять" (подписать и отправить обратно) счёт-фактуру и корректировочный счёт-фактуру;
- нельзя "принять" (подписать и отправить обратно) неформализованный документ, не требующий переподписи.
|
Пример кода:
//Читаем xml документ, содержащий УОУ
byte[] documentRawData =File.ReadAllBytes(documentFilePath);
//Импортируем документ из массива байтов
CorrectionNoticeDocument document = CorrectionNoticeDocument.ImportFromXmlBytes(documentRawData);
//Читаем файл подписи и добавляем подпись к документу
byte[] signatureRawData = File.ReadAllBytes(pathToSignature);
document.AddExistingSignature(signatureRawData);
//Создаем контейнер и добавляем туда файл с указанием режима подписания
var container = new TaxcomContainer();
container.Documents.Add(document);
container.SignMode = DocumentSignMode.UseSpecifiedSignature;
Далее этот контейнер можно экспортировать в поток байт вызовом метода ExportToZip() класса TaxcomContainer и сохранить в виде файла, передать по сети или отправить в систему Такском-Доклайнз вызовом нового метода SDK SendServiceDocument.
Отправка сформированных ответов на формализованные документы произойдёт при вызове метода AutoSendReceive. (См. п. 3.3.4.1. Метод AutoSendReceive)
Если сотрудник не имеет прав доступ к указанному документу, то ему возвратится информация об ошибке 2120.