diadoc / diadocapi-docs

HTTP API documentation - http://api-docs.diadoc.ru/
41 stars 90 forks source link

Как получить BoxIdGuid для передачи в метод GenerateSenderTitleXml в атрибуты Buyer OrganizationReference #557

Open natt-eyre opened 4 years ago

natt-eyre commented 4 years ago

Добрый день!

Несколько вопросов по по методу GenerateSenderTitleXml

  1. Как получить BoxIdGuid для передачи в метод GenerateSenderTitleXml в атрибуты Buyer OrganizationReference. Пытаемся передавать 36bbf987214c4e91be11a6b6bb2a1660@diadoc.ru и без '@diadoc.ru' , но в ответ получаем s invalid according to its datatype 'guid' - The Pattern constraint failed. Мы используем Ruby on Rails для отправки HTTP запросов к вашему API, в формате XML, у нас нет возможности вызвать метод C# Guid.Parse(). Можно ли получить guid каким-то еще способом? Сейчас мы получаем box_id покупателя с помощью метода GetCounteragents.

  2. Как и где посмотреть какие поля и в каком формате поддерживаются данным методом?

  3. Как передавать поле TaxRate, получаем ошибки вида The 'TaxRate' attribute is invalid - The value is invalid according to its datatype 'TaxRateWithTwentyPercentAndTaxedByAgent' - The Enumeration constraint failed."

natt-eyre commented 4 years ago

По 1 пункту проблема решилась добавлением дефисов по такому паттерну 81a130d2-502f-4cf1-a376-63edeb000e9f

остальные вопросы пока актуальны

ethaniel commented 4 years ago

Диадоковцы запрятали XSD файл очень глубоко, его через веб-интерфейс не найти. Вот то, что мы собрали для УПД с НДС 20%.

И так как в Диадоке у контрагентов часто неверные юридические адреса, то BoxId для них мы не используем, а заполняем их реквизиты сами и храним в своей базе.

OrgType также нужно менять. 1 - юрлица, 2 - ИП.

Так как мы в УПД пишем, что оказываем услугу, то некоторых полей (например количество) в Item не передаем (их надо поискать в других местах)

Сыро, но хотя бы уже что-то:

<UniversalTransferDocument Function="СЧФДОП"
                           DocumentDate="31.01.2020"
                           DocumentNumber="1202"
                           DocumentCreator="ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ********, ИНН/КПП: ********/********"
                           Currency="643">
<Sellers>
<Seller>
   <OrganizationReference OrgType="1" BoxId="********"/>
</Seller>
</Sellers>
<Buyers>
<Buyer>

    <OrganizationDetails OrgType="1" OrgName="ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ********" Inn="********" Kpp="********">
      <Address>
        <RussianAddress Region="75" ZipCode="********" City="********" Street="********" Building="********" Apartment="********"/>
      </Address>
    </OrganizationDetails>

</Buyer>
</Buyers>

<Shippers>
<Shipper SameAsSeller="true" />
</Shippers>

<Signers>
    <SignerDetails Inn="********"
                   LastName="********"
                   FirstName="********"
                   MiddleName="********"
                   Position="********"
                   SignerPowers="5"
                   SignerType="1"
                   SignerStatus="1"
                   SignerPowersBase="Должностные обязанности"/>
</Signers>

<PaymentDocuments>
<Document Date="31.01.2020" Number="225" />
</PaymentDocuments>

<Table TotalWithVatExcluded="10833.33" Vat="2166.67" Total="13000">
   <Item Product="********" TaxRate="20%" SubtotalWithVatExcluded="10833.33" Vat="2166.67" Subtotal="13000"/>
</Table>

<TransferInfo OperationInfo="Услуги оказаны в полном объеме">
<Employee Position="Генеральный директор" LastName="********" FirstName="********" MiddleName="********" />
<TransferBases>
  <TransferBase BaseDocumentName="Договор" BaseDocumentNumber="131829" BaseDocumentDate="18.09.2018" />
</TransferBases>
</TransferInfo>
</UniversalTransferDocument>
einfoman commented 4 years ago

Добрый день! Есть метод GetDocumentTypes, который возвращает информацию по каждому типу и каждой версии. Пример для титула от счет-фактуры:

{
   "Version":"utd820_05_01_01_hyphen",
   "SupportsContentPatching":true,
   "SupportsEncrypting":true,
   "Titles":[
      {
         "Index":0,
         "IsFormal":true,
         "XsdUrl":"/GetContent?typeNamedId=Invoice&function=default&version=utd820_05_01_01_hyphen&titleIndex=0&contentType=TitleXsd",
         "UserDataXsdUrl":"/GetContent?typeNamedId=Invoice&function=default&version=utd820_05_01_01_hyphen&titleIndex=0&contentType=UserContractXsd",
         "SignerInfo":{
            "SignerType":"ExtendedSigner",
            "ExtendedDocumentTitleType":"UtdSeller"
         },
         "MetadataItems":[
           ...
   ],
   "IsActual":true,
   "Workflows":[
      {
         "Id":10,
         "IsDefault":true
      }
   ],
   "SupportsPredefinedRecipientTitle":false
}

Среди прочих параметров там есть параметр UserDataXsdUrl — по этому урлу можно скачать нужную XSD

natt-eyre commented 4 years ago

Спасибо @ethaniel за пример. Все-таки с наглядными примерами проще писать код, чем обращаться по API для получения урла, по которому доступна схема...

Вот пример данных, которые успешно получается отправить:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
  <UniversalTransferDocument Function=\"СЧФДОП\"
                             DocumentDate=\"26.12.2019\"
                             DocumentNumber=\"МУ-1139/377\"
                             Currency=\"643\"
                             DocumentCreator=\"Общество с ограниченной ответственностью «****»\">

    <Sellers>
      <Seller>
        <OrganizationDetails OrgName=\"Общество с ограниченной ответственностью «***»\"
                             Inn=\"ИНН\"
                             Kpp=\"КПП\"
                             FnsParticipantId=\"ID\"
                             OrgType=\"1\"
                             Phone=\"***\"
                             Email=\"***\"
                             CorrespondentAccount=\"***\"
                             BankAccountNumber=\"***\"
                             BankName=\"***\"
                             BankId=\"***\">
          <Address>
            <RussianAddress ZipCode=\"***\"
                            Street=\"***\"
                            Building=\"***\"
                            Block=\"***\"
                            City=\"***\"
                            Region=\"**\"/>
          </Address>
        </OrganizationDetails>
      </Seller>
    </Sellers>

    <Buyers>
      <Buyer>
        <OrganizationDetails OrgName=\"Общество с ограниченной ответственностью ***\"
                             Inn=\"***\"
                             FnsParticipantId=\"ID\"
                             OrgType=\"1\"
                             Email=\"***\"
                             CorrespondentAccount=\"***\"
                             BankId=\"***\"
                             Kpp=\"***\"
                             Phone=\"***\"
                             BankAccountNumber=\"***\"
                             BankName=\"***\">
           <Address>
             <RussianAddress ZipCode=\"***\"
                             Region=\"**\"
                             Street=\"***\"
                             Building=\"**\"
                             Apartment=\"***\"/>
           </Address>
         </OrganizationDetails>
       </Buyer>
     </Buyers>

     <Shippers>
       <Shipper SameAsSeller=\"true\"/>
     </Shippers>

     <Consignees>
       <Consignee>
         <OrganizationReference OrgType=\"1\"
                                BoxId=\"***\"/>
       </Consignee>
     </Consignees>

     <Table Vat=\"3333.33\"
            Total=\"20000.0\">
       <Item Product=\"product\"
             TaxRate=\"20%\"
             Vat=\"3333.33\"
             SubtotalWithVatExcluded=\"16666.67\"
             Subtotal=\"20000.0\"/>
     </Table>

    <TransferInfo OperationInfo=\"Услуги оказаны в полном объеме\"
                  TransferDate=\"26.12.2019\">
       <Employee Position=\"Генеральный директор\"
                 LastName=\"***\"
                 FirstName=\"***\"/>
    </TransferInfo>

   <PaymentDocuments>
     <Document Date=\"25.12.2019\"
               Number=\"1097\"/>
  </PaymentDocuments>

   <Signers>
     <SignerDetails LastName=\"***\"
                    FirstName=\"***\"
                    Position=\"Генеральный директор\"
                    Inn=\"***\"
                    SignerType=\"1\"
                    SignerOrganizationName=\"Общество с ограниченной ответственностью «***»\"
                    SignerPowers=\"0\"
                    SignerStatus=\"1\"/>
   </Signers>
</UniversalTransferDocument>

@einfoman А вот тут в issues писали, что если передаешь OrganizationReference, то OrganizationDetails передавать не надо, однако когда мы в Consignee передаем OrganizationReference, мы для некоторых документов получаем ошибку Address is required. Что делать в таком случае? Не использовать OrganizationReference вообще?

flosca commented 4 years ago

@natt-eyre

однако когда мы в Consignee передаем OrganizationReference, мы для некоторых документов получаем ошибку Address is required. Что делать в таком случае? Не использовать OrganizationReference вообще?

OrganizationReference используется лишь для того, чтобы Диадок сам подставил имеющиеся у него данные по организации.

По некоторым форматам документов адрес должен быть указан, потому и ошибка. Скорее всего, у вашего грузополучателя в Диадоке не прописан адрес. Если подскажете boxId, то я смогу посмотреть, так ли это.