Добрый день.
Прилагаю пример работы с сервисом юридически значимого электронного документоборота Контур.Диадок.
1. Установление соединения с сервером Диадок:
Функция ПолучитьДиадокAPI() Экспорт Поп ДиадокAPI ытка= Новый ComОбъект("Diadoc.DiadocClient"); ДиадокAPI.ApiClientId = ВашКлюч Разработчика; ДиадокAPI.ServerURL = "https://diadoc-api.kontur.ru:443"; ДиадокAPI.ProxyMode = "UseDefaultProxy"; Возврат ДиадокAPI; Исключение ЛогированиеЭДО("Не удалось создать ДиадокAPI " + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; КонецФункции
2. Подключаемся по сертификату к ящику организации-отправителя документа:
Функция ПолучитьОрганизацию(Отпечаток, ПинКод, ИДЯщикаОрганизации, ДиадокAPI) Экспорт Попытка ДиадокСоединение = ДиадокAPI.CreateConnectionByCertificate(Отпечаток, ПинКод); Исключение Сообщить("Не удалось получить соединение " + Отпечаток + " " + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Если ДиадокСоединение = Неопределено Тогда Сообщить("Не удалось получить соединение " + Отпечаток); Возврат Неопределено; КонецЕсли; Organization = ДиадокСоединение.GetOrganizationById(ИДЯщикаОрганизации); Если Organization = Неопределено Тогда Сообщить("Не удалось получить организацию " + ИДЯщикаОрганизации); Возврат Неопределено; КонецЕсли; Возврат Organization; КонецФункции
3. Создаем документ, заполняем его, отправляем и подписываем.
&НаКлиенте Функция ОтправитьУПД(ДиадокAPI, РасходнаяНакладная, Продавец) Экспорт СтруктураВозврата = Новый Структура("docid, ОписаниеОшибки"); Попытка ТекущийПользователь = ПараметрыСеанса.ТекущийПользователь; ДатаДокумента = РасходнаяНакладная.Дата; Организация = РасходнаяНакладная.Организация; Контрагент = РасходнаяНакладная.Контрагент; Organization = ПолучитьОрганизацию(Отпечаток, ПинКод, ИДЯщикаОрганизации, ДиадокAPI); Если Organization = Неопределено Тогда ОписаниеОшибки = ОписаниеОшибки(); Сообщить("Не удалось выгрузить документ " + РасходнаяНакладная + " " + ОписаниеОшибки); СтруктураВозврата.docid = ""; СтруктураВозврата.ОписаниеОшибки = ОписаниеОшибки; Возврат СтруктураВозврата; КонецЕсли; SendTask = Organization.CreateSendTask("UniversalTransferDocument");//создаем объект УПД для отправки и подписания SendTask.CounteragentId = ИДЯщикаКонтрагента; SendTask.CustomDocumentID = Строка(РасходнаяНакладная.УникальныйИдентификатор()); InvoiceContent = SendTask.Content;//содержимое счет-фактуры InvoiceContent.Function = "InvoiceAndBasic";//тип УПД - СЧФДОП InvoiceContent.Date = ДатаДокумента; InvoiceContent.Number = РасходнаяНакладная.Номер; InvoiceContent.Currency = РасходнаяНакладная.Валюта.Код; //////////////////////////// //продавец( InvoiceContent.Seller.Name = Организация.ПолноеНаименование; InvoiceContent.Seller.Inn = СокрЛП(Организация.ИНН); InvoiceContent.Seller.Kpp = СокрЛП(Организация.КПП); InvoiceContent.Seller.Address.IsForeign = Истина; InvoiceContent.Seller.Address.Countrycode = 643; InvoiceContent.Seller.Address.AddressText = Организация.ЮридическийАдрес; InvoiceContent.Seller.type = "LegalEntity";//юрлицо //Продавец) //////////////////////////// //////////////////////////// //Грузоотправитель(может отсутствовать InvoiceContent.Shipper.OrganizationInfo.Name = Грузоотправитель.ПолноеНаименование; InvoiceContent.Shipper.OrganizationInfo.Inn = СокрЛП(Грузоотправитель.ИНН); InvoiceContent.Shipper.OrganizationInfo.Kpp = СокрЛП(Грузоотправитель.КПП); InvoiceContent.Shipper.OrganizationInfo.Address.IsForeign = Истина; InvoiceContent.Shipper.OrganizationInfo.Address.Countrycode = 643; InvoiceContent.Shipper.OrganizationInfo.Address.AddressText = Грузоотправитель.ЮридическийАдрес; InvoiceContent.Shipper.OrganizationInfo.type = ?(Грузоотправитель.ВидКонтрагента = Перечисления.ВидКонтрагента.ЮридическоеЛицо, "LegalEntity", "IndividualEntity");//юрлицо или физлицо //Грузоотправитель //////////////////////////// //////////////////////////// //Покупатель InvoiceContent.Buyer.Name = Контрагент.ПолноеНаименование; InvoiceContent.Buyer.Inn = СокрЛП(Контрагент.ИНН); InvoiceContent.Buyer.Kpp = СокрЛП(Контрагент.КПП); InvoiceContent.Buyer.Address.IsForeign = Истина; InvoiceContent.Buyer.Address.Countrycode = 643; InvoiceContent.Buyer.Address.AddressText = Контрагент.ЮридическийАдрес; InvoiceContent.Buyer.type = "LegalEntity"; //Покупатель) //////////////////////////// //////////////////////////// //Грузополучатель(может отсутствовать InvoiceContent.Consignee.Name = Грузополучатель.ПолноеНаименование; InvoiceContent.Consignee.Inn = СокрЛП(Грузополучатель.ИНН); InvoiceContent.Consignee.Kpp = СокрЛП(Грузополучатель.КПП); InvoiceContent.Consignee.Address.IsForeign = Истина; InvoiceContent.Consignee.Address.Countrycode = 643; InvoiceContent.Consignee.Address.AddressText = Грузополучатель.ЮридическийАдрес; InvoiceContent.Consignee.type = "LegalEntity"; //Грузополучатель //////////////////////////// InvoiceContent.Creator = Организация.Наименование; InvoiceContent.TransferInfo.OperationInfo = "Продажа"; SendTask.CustomDocumentId = Строка(РасходнаяНакладная.УникальныйИдентификатор()); SendTask.OneSDocumentId = Строка(РасходнаяНакладная.УникальныйИдентификатор()); Всего = 0; ВсегоБезНДС = 0; НДС = 0; //заполняем табличную часть Для Каждого Стр Из РасходнаяНакладная.Товары Цикл Номенклатура = Стр.Номенклатура; Количество = Стр.Количество; СтавкаНДС = Неопределено; СуммаНДС = 0; СуммаСНДС = 0; Item = InvoiceContent.InvoiceTable.AddItem();//новая строка ТЧ Item.Product = Строка(Номенклатура); Item.UnitCode = Стр.Единица.ЕдиницаИзмерения.Код; Item.UnitName = Стр.Единица.Наименование; Item.VendorCode = Номенклатура.Артикул; Item.Quantity = Количество; Item.Price = Окр(?(Количество = 0, 0, СуммаБезНДС / Количество), 2); Item.SubtotalWithVatExcluded = Окр(СуммаБезНДС, 2); Item.TaxRate = ?(Стр.СтавкаНДС.Наименование = "Без налога", "без НДС", Стр.СтавкаНДС.Ставка); Item.Vat = Окр(СуммаНДС, 2); Item.Subtotal = Окр(СуммаСНДС, 2); Всего = Всего + Окр(СуммаСНДС, 2); ВсегоБезНДС = ВсегоБезНДС + Окр(СуммаБезНДС, 2); НДС = НДС + Окр(СуммаНДС, 2); ДопИнфо = Item.AddStructedAdditionalInfo();//можно добавлять произвольные строковые данные ДопИнфо.Key = "ГУИД"; ДопИнфо.Value = Строка(Номенклатура.УникальныйИдентификатор()); Если Номенклатура.СтранаПроисхождения <> Справочники.КлассификаторСтранМира.РОССИЯ И Число(Номенклатура.СтранаПроисхождения.ЦифровойКодОКСМ) > 0 Тогда НомерГТД = ПолучитьНомерГТД(РасходнаяНакладная, Номенклатура); CD = Item.AddCustomDeclaration();//добавляем номер ГТД и страну происхождения для импортного товара CD.CountryCode = Строка(Номенклатура.СтранаПроисхождения.ЦифровойКодОКСМ); CD.DeclarationNumber = НомерГТД; КонецЕсли; КонецЦикла; InvoiceContent.InvoiceTable.Total = Окр(Всего, 2); InvoiceContent.InvoiceTable.Vat = Окр(НДС, 2); InvoiceContent.InvoiceTable.TotalWithVatExcluded = Окр(ВсегоБезНДС, 2); Signer = InvoiceContent.AddSigner();//добавляем подписанта МассивЧастейИмени = РазложитьСтрокуВМассивПодстрок(Organization.Certificate.Name, " ");//функция БСП Signer.SignerDetails.Surname = МассивЧастейИмени[0]; Signer.SignerDetails.FirstName = МассивЧастейИмени[1]; Signer.SignerDetails.Patronymic = ?(МассивЧастейИмени.Количество() > 2, МассивЧастейИмени[2], "");//подписанты бывают без отчества в паспорте Signer.SignerDetails.JobTitle = Organization.Certificate.JobTitle; Signer.SignerDetails.SignerType = "LegalEntity"; Signer.SignerDetails.Inn = СтрЗаменить(Строка(Число(Organization.Certificate.INN)), Символы.НПП, ""); Signer.SignerDetails.Powers = "MadeAndSignOperation"; ОтправленныйДокумент = SendTask.Send();//отправляем + подписываем ЗафиксироватьОтправку(РасходнаяНакладная.Ссылка, ОтправленныйДокумент.DocumentId);//при необходимости, для исключения дублирования - Диадок не следит за уникальностью документов СтруктураВозврата.docid = ОтправленныйДокумент.DocumentId; СтруктураВозврата.ОписаниеОшибки = ""; Возврат СтруктураВозврата; Исключение ОписаниеОшибки = ОписаниеОшибки(); Сообщить("Не удалось выгрузить документ " + РасходнаяНакладная + " " + ОписаниеОшибки); СтруктураВозврата.docid = ""; СтруктураВозврата.ОписаниеОшибки = ОписаниеОшибки; Возврат СтруктураВозврата; КонецПопытки;
КонецФункции &НаКлиенте Функция ОтправитьПодписатьУКД(СчетФактура, Organization, ДанныеПодключения) ДатаДокумента = СчетФактура.Дата; Организация = СчетФактура.Организация; Контрагент = СчетФактура.Контрагент; СчетФактура = СчетФактура.Ссылка; Попытка СтруктураШапки = ПолучитьДанныеПервичногоДокументаУКД(Истина,,, СчетФактура); SendTask = Organization.CreateSendTask("UniversalCorrectionDocument"); SendTask.CounteragentId = ДанныеПодключения.ИдентификаторКонтрагента; SendTask.CustomDocumentID = Строка(СчетФактура.УникальныйИдентификатор()); InvoiceContent = SendTask.Content; InvoiceContent.Function = "InvoiceAndBasic"; InvoiceContent.Date = СтруктураШапки.ДатаВыставления; InvoiceContent.Number = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтруктураШапки.Номер, Ложь, Истина); InvoiceContent.Currency = СтруктураШапки.ВалютаКод; //////////////////////////// //продавец( InvoiceContent.Seller.Name = СтруктураШапки.ПредставлениеОрганизации; InvoiceContent.Seller.Inn = СокрЛП(СтруктураШапки.ОрганизацияИНН); InvoiceContent.Seller.Kpp = СокрЛП(СтруктураШапки.ОрганизацияКПП); InvoiceContent.Seller.Address.IsForeign = Истина; InvoiceContent.Seller.Address.Countrycode = 643; InvoiceContent.Seller.Address.AddressText = ПолучитьАдрес(СтруктураШапки.Организация, "ЮАО"); InvoiceContent.Seller.type = "LegalEntity"; //Продавец) //////////////////////////// //////////////////////////// //Покупатель InvoiceContent.Buyer.Name = СтруктураШапки.ПредставлениеКонтрагента; InvoiceContent.Buyer.Inn = СокрЛП(СтруктураШапки.КонтрагентИНН); InvoiceContent.Buyer.Kpp = СокрЛП(СтруктураШапки.КонтрагентКПП); InvoiceContent.Buyer.Address.IsForeign = Истина; InvoiceContent.Buyer.Address.Countrycode = 643; InvoiceContent.Buyer.Address.AddressText = ПолучитьАдрес(СтруктураШапки.Контрагент, "ЮАК"); InvoiceContent.Buyer.type = "LegalEntity"; //Покупатель) //////////////////////////// SendTask.CustomDocumentId = Строка(СчетФактура.УникальныйИдентификатор()); SendTask.OneSDocumentId = Строка(СчетФактура.УникальныйИдентификатор()); TotalWithVatExcludedInc = 0; TotalWithVatExcludedDec = 0; TotalVatInc = 0; TotalVatDec = 0; TotalInc = 0; TotalDec = 0; КоличествоСтрок = ПолучитьДанныеПервичногоДокументаУКД(Ложь,, Истина, СчетФактура); Для СчетчикСтрок = 0 По КоличествоСтрок - 1 Цикл СтруктураСтроки = ПолучитьДанныеПервичногоДокументаУКД(Ложь, СчетчикСтрок,, СчетФактура); Item = InvoiceContent.InvoiceCorrectionTable.AddItem(); Item.Product = СтруктураСтроки.ТоварНаименование; СтруктураТовара = Новый Структура("Артикул, ТоварНаименование, ЕдиницаИзмеренияКодДоКорректировки, ЕдиницаИзмеренияКод, КоличествоДоКорректировки, Количество, ЦенаЗаЕдиницуИзмеренияДоКорректировки, ЦенаЗаЕдиницуИзмерения, |СтоимостьТоваровБезНалогаДоКорректировки, СтоимостьТоваровБезНалога, СтоимостьТоваровБезНалогаУвеличение, СтоимостьТоваровБезНалогаУменьшение, НалоговаяСтавкаДоКорректировки, НалоговаяСтавка, СуммаНалогаДоКорректировки, |СуммаНалога, СуммаНалогаУвеличение, СуммаНалогаУменьшение, СуммаАкцизаДоКорректировки, СуммаАкциза, СуммаАкцизаУвеличение, СуммаАкцизаУменьшение, СтоимостьТоваровСНалогомДоКорректировки, СтоимостьТоваровСНалогом, |СтоимостьТоваровСНалогомУвеличение, СтоимостьТоваровСНалогомУменьшение"); Item.OriginalValues.Quantity = СтруктураСтроки.КоличествоДоКорректировки; Item.OriginalValues.UnitCode = СтруктураСтроки.ЕдиницаИзмеренияКод; Item.OriginalValues.Price = СтруктураСтроки.ЦенаЗаЕдиницуИзмеренияДоКорректировки; Item.OriginalValues.TaxRate = СтруктураСтроки.НалоговаяСтавкаДоКорректировки; Item.OriginalValues.Excise = СтруктураСтроки.СуммаАкцизаДоКорректировки; Item.OriginalValues.TotalWithVatExcluded = СтруктураСтроки.СтоимостьТоваровБезНалогаДоКорректировки; Item.OriginalValues.Vat = СтруктураСтроки.СуммаНалогаДоКорректировки; Item.OriginalValues.Total = СтруктураСтроки.СтоимостьТоваровСНалогомДоКорректировки; Item.CorrectedValues.Quantity = СтруктураСтроки.Количество; Item.CorrectedValues.UnitCode = СтруктураСтроки.ЕдиницаИзмеренияКод; Item.CorrectedValues.Price = СтруктураСтроки.ЦенаЗаЕдиницуИзмерения; Item.CorrectedValues.TaxRate = СтруктураСтроки.НалоговаяСтавка; Item.CorrectedValues.Excise = СтруктураСтроки.СуммаАкциза; Item.CorrectedValues.TotalWithVatExcluded = СтруктураСтроки.СтоимостьТоваровБезНалога; Item.CorrectedValues.Vat = СтруктураСтроки.СуммаНалога; Item.CorrectedValues.Total = СтруктураСтроки.СтоимостьТоваровСНалогом; Item.AmountsInc.Excise = СтруктураСтроки.СуммаАкцизаУвеличение; Item.AmountsInc.TotalWithVatExcluded = СтруктураСтроки.СтоимостьТоваровБезНалогаУвеличение; Item.AmountsInc.Vat = СтруктураСтроки.СуммаНалогаУвеличение; Item.AmountsInc.Total = СтруктураСтроки.СтоимостьТоваровСНалогомУвеличение; Item.AmountsDec.Excise = СтруктураСтроки.СуммаАкцизаУменьшение; Item.AmountsDec.TotalWithVatExcluded = СтруктураСтроки.СтоимостьТоваровБезНалогаУменьшение; Item.AmountsDec.Vat = СтруктураСтроки.СуммаНалогаУменьшение; Item.AmountsDec.Total = СтруктураСтроки.СтоимостьТоваровСНалогомУменьшение; ДопИнфо = Item.AddStructedAdditionalInfo(); ДопИнфо.Key = "ГУИД"; ДопИнфо.Value = Строка(СтруктураСтроки.ТоварИдентификатор); ДопИнфо = Item.AddStructedAdditionalInfo(); ДопИнфо.Key = "Артикул"; ДопИнфо.Value = Строка(СтруктураСтроки.Артикул); TotalWithVatExcludedInc = TotalWithVatExcludedInc + СтруктураСтроки.СтоимостьТоваровБезНалогаУвеличение; TotalWithVatExcludedDec = TotalWithVatExcludedDec + СтруктураСтроки.СтоимостьТоваровБезНалогаУменьшение; TotalVatInc = TotalVatInc + СтруктураСтроки.СуммаНалогаУвеличение; TotalVatDec = TotalVatDec + СтруктураСтроки.СуммаНалогаУменьшение; TotalInc = TotalInc + СтруктураСтроки.СтоимостьТоваровСНалогомУвеличение; TotalDec = TotalDec + СтруктураСтроки.СтоимостьТоваровСНалогомУменьшение; КонецЦикла; InvoiceContent.InvoiceCorrectionTable.TotalsInc.TotalWithVatExcluded = TotalWithVatExcludedInc; InvoiceContent.InvoiceCorrectionTable.TotalsInc.Vat = TotalVatInc; InvoiceContent.InvoiceCorrectionTable.TotalsInc.Total = TotalInc; InvoiceContent.InvoiceCorrectionTable.TotalsDec.TotalWithVatExcluded = TotalWithVatExcludedDec; InvoiceContent.InvoiceCorrectionTable.TotalsDec.Vat = TotalVatDec; InvoiceContent.InvoiceCorrectionTable.TotalsDec.Total = TotalDec; Invoice = InvoiceContent.AddInvoice(); СтруктураОснования = ПолучитьДанныеСФОснования(); Invoice.InvoiceDate = СтруктураОснования.InvoiceDate; Invoice.InvoiceNumber = СтруктураОснования.InvoiceNumber; Signer = InvoiceContent.AddSigner(); МассивЧастейИмени = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Organization.Certificate.Name, " "); InvoiceContent.Creator = Organization.Certificate.Name; Signer.BoxId = ДанныеПодключения.ИдентификаторОрганизации; Signer.CertificateThumbprint = Organization.Certificate.Thumbprint; СтруктураКорретировки = ПолучитьДанныеКорректировки(); InvoiceContent.EventContent.OperationContent = СтруктураКорретировки.НомерКорректировки + " от " + СтруктураКорретировки.ДатаКорректировки; InvoiceContent.EventContent.CostChangeInfo = ""; InvoiceContent.EventContent.NotificationDate = Лев(Строка(ТекущаяДата()), 10); InvoiceContent.EventContent.TransferDocDetails = "УПД " + СтруктураОснования.InvoiceNumber + " от " + СтруктураОснования.InvoiceDate; CorrectionBase = InvoiceContent.EventContent.AddCorrectionBase(); CorrectionBase.BaseDocumentName = СтруктураКорретировки.НаименованиеКорректировки; CorrectionBase.BaseDocumentNumber = СтруктураКорретировки.НомерКорректировки; CorrectionBase.BaseDocumentDate = СтруктураКорретировки.ДатаКорректировки; ОтправленныйДокумент = SendTask.Send(); ИмяФайла = ПолучитьИмяВременногоФайла(".pdf"); ОтправленныйДокумент.GetPrintForm(ИмяФайла); ЗапуститьПриложение(ИмяФайла); Сообщить("Отправлен и подписан УКД к корректировке " + СтруктураКорретировки.НомерКорректировки + " от " + СтруктураКорретировки.ДатаКорректировки); ЗафиксироватьОтправку(ОтправленныйДокумент.DocumentId, СчетФактура); Возврат Истина; Исключение ОписаниеОшибки = ОписаниеОшибки(); Сообщить(ОписаниеОшибки); Возврат Ложь; КонецПопытки; КонецФункции
&НаСервере Функция ПолучитьДанныеПервичногоДокументаУКД(Шапка, НомерСтроки = Неопределено, КоличествоСтрок = Ложь, СчетФактура) МассивОбъектов = Новый Массив; МассивОбъектов.Добавить(СчетФактура); ПараметрыПечати = Новый Структура(); СтруктураДанных = Документы.СчетФактураВыданный.ПолучитьДанныеДляПечатнойФормыУКД(ПараметрыПечати, МассивОбъектов); Если КоличествоСтрок Тогда Возврат СтруктураДанных.РезультатПоТабличнойЧасти.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).Строки.Количество(); КонецЕсли; Если Не Шапка И НомерСтроки = Неопределено Тогда Возврат Неопределено; КонецЕсли; Если Шапка Тогда Выборка = СтруктураДанных.РезультатПоШапке.Выбрать(); Выборка.Следующий(); СтруктураШапки = Новый Структура; СтруктураШапки.Вставить("ВалютаКод", Выборка.ВалютаКод); СтруктураШапки.Вставить("Организация", Выборка.Организация); СтруктураШапки.Вставить("ПредставлениеОрганизации", Выборка.Организация.НаименованиеПолное); СтруктураШапки.Вставить("ОрганизацияИНН", Выборка.Организация.ИНН); СтруктураШапки.Вставить("ОрганизацияКПП", Выборка.Организация.КПП); СтруктураШапки.Вставить("Контрагент", Выборка.Контрагент); СтруктураШапки.Вставить("ПредставлениеКонтрагента", Выборка.Контрагент.НаименованиеПолное); СтруктураШапки.Вставить("КонтрагентИНН", Выборка.Контрагент.ИНН); СтруктураШапки.Вставить("КонтрагентКПП", Выборка.Контрагент.КПП); СтруктураШапки.Вставить("ДатаВыставления", Объект.Ссылка.ДатаВыставления); СтруктураШапки.Вставить("Номер", Объект.Ссылка.Номер); Возврат СтруктураШапки; КонецЕсли; СтруктураТовара = Новый Структура("Артикул, ТоварНаименование, ЕдиницаИзмеренияКодДоКорректировки, ЕдиницаИзмеренияКод, КоличествоДоКорректировки, Количество, ЦенаЗаЕдиницуИзмеренияДоКорректировки, ЦенаЗаЕдиницуИзмерения, |СтоимостьТоваровБезНалогаДоКорректировки, СтоимостьТоваровБезНалога, СтоимостьТоваровБезНалогаУвеличение, СтоимостьТоваровБезНалогаУменьшение, НалоговаяСтавкаДоКорректировки, НалоговаяСтавка, СуммаНалогаДоКорректировки, |СуммаНалога, СуммаНалогаУвеличение, СуммаНалогаУменьшение, СуммаАкцизаДоКорректировки, СуммаАкциза, СуммаАкцизаУвеличение, СуммаАкцизаУменьшение, СтоимостьТоваровСНалогомДоКорректировки, СтоимостьТоваровСНалогом, |СтоимостьТоваровСНалогомУвеличение, СтоимостьТоваровСНалогомУменьшение, ТоварИдентификатор"); ТаблицаТоваров = Новый ТаблицаЗначений; ТаблицаТоваров.Колонки.Добавить("ИдТовараУКонтрагента"); ТаблицаТоваров.Колонки.Добавить("ТоварНаименование"); ТаблицаТоваров.Колонки.Добавить("Артикул"); ТаблицаТоваров.Колонки.Добавить("ЕдиницаИзмеренияКодДоКорректировки"); ТаблицаТоваров.Колонки.Добавить("ЕдиницаИзмеренияКод"); ТаблицаТоваров.Колонки.Добавить("КоличествоДоКорректировки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(26,11))); ТаблицаТоваров.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(26,11))); ТаблицаТоваров.Колонки.Добавить("ЦенаЗаЕдиницуИзмеренияДоКорректировки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(26,11))); ТаблицаТоваров.Колонки.Добавить("ЦенаЗаЕдиницуИзмерения", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(26,11))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровБезНалогаДоКорректировки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровБезНалога", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровБезНалогаУвеличение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровБезНалогаУменьшение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("НалоговаяСтавкаДоКорректировки"); ТаблицаТоваров.Колонки.Добавить("НалоговаяСтавка"); ТаблицаТоваров.Колонки.Добавить("СуммаНалогаДоКорректировки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаНалога", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаНалогаУвеличение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаНалогаУменьшение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаАкцизаДоКорректировки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаАкциза", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаАкцизаУвеличение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СуммаАкцизаУменьшение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровСНалогомДоКорректировки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровСНалогом", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровСНалогомУвеличение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("СтоимостьТоваровСНалогомУменьшение", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(19,2))); ТаблицаТоваров.Колонки.Добавить("ТоварИдентификатор", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(255))); ВыборкаПоДокументам = СтруктураДанных.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаПоДокументам.Следующий(); СтрокаТовары = ВыборкаПоДокументам.Выбрать(); Пока СтрокаТовары.Следующий() Цикл НовСтрока = ТаблицаТоваров.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрока, СтрокаТовары); НовСтрока.ТоварНаименование = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати( СтрокаТовары.НоменклатураНаименование, СтрокаТовары.ХарактеристикаНаименование ) + ?(СтрокаТовары.ЭтоВозвратнаяТара, НСтр("ru=' (возвратная тара)'"), ""); НовСтрока.ТоварИдентификатор = Строка(СтрокаТовары.Номенклатура.УникальныйИдентификатор()); НовСтрока.Артикул = СтрокаТовары.Номенклатура.Артикул; НовСтрока.ЕдиницаИзмеренияКодДоКорректировки = СокрЛП(СтрокаТовары.ЕдиницаИзмеренияКод); НовСтрока.ЕдиницаИзмеренияКод = СокрЛП(СтрокаТовары.ЕдиницаИзмеренияКод); НовСтрока.КоличествоДоКорректировки = СтрокаТовары.КоличествоДо; НовСтрока.Количество = СтрокаТовары.Количество; НовСтрока.ЦенаЗаЕдиницуИзмеренияДоКорректировки = Окр(СтрокаТовары.ЦенаДо, 2); НовСтрока.ЦенаЗаЕдиницуИзмерения = Окр(СтрокаТовары.Цена, 2); НовСтрока.СтоимостьТоваровБезНалогаДоКорректировки = Окр(СтрокаТовары.СуммаБезНДСДо, 2); НовСтрока.СтоимостьТоваровБезНалога = Окр(СтрокаТовары.СуммаБезНДС, 2); НовСтрока.СтоимостьТоваровБезНалогаУвеличение = Окр(СтрокаТовары.РазницаБезНДСУвеличение, 2); НовСтрока.СтоимостьТоваровБезНалогаУменьшение = Окр(СтрокаТовары.РазницаБезНДСУменьшение, 2); НовСтрока.НалоговаяСтавкаДоКорректировки = СтрокаТовары.СтавкаНДС; НовСтрока.НалоговаяСтавка = СтрокаТовары.СтавкаНДС; НовСтрока.СуммаНалогаДоКорректировки = Окр(СтрокаТовары.СуммаНДСДо, 2); НовСтрока.СуммаНалога = Окр(СтрокаТовары.СуммаНДС, 2); НовСтрока.СуммаНалогаУвеличение = Окр(СтрокаТовары.РазницаНДСУвеличение, 2); НовСтрока.СуммаНалогаУменьшение = Окр(СтрокаТовары.РазницаНДСУменьшение, 2); НовСтрока.СтоимостьТоваровСНалогомДоКорректировки = Окр(СтрокаТовары.СуммаСНДСДо, 2); НовСтрока.СтоимостьТоваровСНалогом = Окр(СтрокаТовары.СуммаСНДС, 2); НовСтрока.СтоимостьТоваровСНалогомУвеличение = Окр(СтрокаТовары.РазницаСНДСУвеличение, 2); НовСтрока.СтоимостьТоваровСНалогомУменьшение = Окр(СтрокаТовары.РазницаСНДСУменьшение, 2); КонецЦикла; ЗаполнитьЗначенияСвойств(СтруктураТовара, ТаблицаТоваров[НомерСтроки]); Возврат СтруктураТовара; КонецФункции Функция ПолучитьДанныеКорректировки() СтруктураОснования = Новый Структура("НаименованиеКорректировки, НомерКорректировки, ДатаКорректировки"); СтруктураОснования.НаименованиеКорректировки = "Корректировка реализации"; Если Объект.ДокументыОснования.Количество() > 0 Тогда СтрокаОснования = Объект.ДокументыОснования[0]; СтруктураОснования.НомерКорректировки = СтрокаОснования.ДокументОснование.Номер; СтруктураОснования.ДатаКорректировки = Лев(Строка(СтрокаОснования.ДокументОснование.Дата), 10); КонецЕсли; Возврат СтруктураОснования; КонецФункции Функция ПолучитьДанныеСФОснования() СтруктураОснования = Новый Структура("InvoiceNumber, InvoiceDate"); Если Объект.ДокументыОснования.Количество() > 0 Тогда СтрокаОснования = Объект.ДокументыОснования[0]; СтруктураОснования.InvoiceNumber = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(СтрокаОснования.ИсходныйДокумент.Номер, Ложь, Истина); СтруктураОснования.InvoiceDate = Лев(Строка(СтрокаОснования.ИсходныйДокумент.Дата), 10); КонецЕсли; Возврат СтруктураОснования; КонецФункции
4. На что обратить внимание.
4.1 Классификаторы стран мира (ОКСМ) и единиц измерения (ОКЕИ) должны быть в актуальном состоянии - отсутствующие в классификаторах коды Диадок отвергнет (будет исключение).
4.2 Если товар импортный, номер ГТД должен присутствовать обязательно (т.е. когда к строке добавляется CustomDeclaration).
4.3 Общий принцип работы = получили API, подключились по отпечатку сертификата организации (должен быть доступен закрытый ключ - на токене, в реестре и т.д.), заполнили документ, оправка совмещается с подписанием.