Юридически значимый электронный документооборот с Контур.Диадок

17.10.18

Интеграция - Внешние источники данных

Пример использования компоненты DiadocComApi http://diadocsdk-1c.readthedocs.io/ru/latest/

Добрый день.

Прилагаю пример работы с сервисом юридически значимого электронного документоборота Контур.Диадок.

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, подключились по отпечатку сертификата организации (должен быть доступен закрытый ключ - на токене, в реестре и т.д.), заполнили документ, оправка совмещается с подписанием.

См. также

SALE! 15%

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20848    20    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13797    13    48    

25

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

48000 руб.

24.04.2017    51161    101    165    

89

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10839    13    8    

15

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    25124    22    1    

25

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

Обработка предназначена для загрузки файлов, выгруженных из системы Базис-мебельщик, в справочник 1С "Спецификации" для последующих процессов учета и диспетчирования полуфабрикатов и изделий.

10200 руб.

24.06.2021    20761    57    53    

35

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос данных из Парус-Зарплата Бюджет 7.71 в ЗИКГУ 3.1.27 для начала работы системы. Загрузка информации по физическим лицам, сотрудникам, начальной штатной расстановки и данных для расчета среднего заработка.

19200 руб.

06.07.2012    164900    47    157    

96
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Automatik 961 01.06.18 13:23 Сейчас в теме
А со СБИСом можете пример привести?
2. savostin.alex 83 01.06.18 14:37 Сейчас в теме
Нет, только с Контур. Но СБИС предлагает свое решение для интеграции, примеры (если решение не подойдет к вашей конфигурации) можно взять оттуда
https://sbis.ru/help/integration/1C_set/modul/download.
3. _Z1 38 06.06.18 08:13 Сейчас в теме
(2) У Сбиса есть аналогичный инструмент - но он сложнее потому , что объектая модель
у диадок-контур очень хорошая.
Мы со сбис для исходящих работаем через коннектор.
4. user612295_death4321 06.06.18 17:07 Сейчас в теме
У сбиса документация тоже вполне понятная .

У меня тоже построено много логики на этой компоненте.
5. NN2P 420 08.06.18 09:55 Сейчас в теме
Александр, можете уточнить откуда мы получаем Отпечаток и ПинКод в пункте 2?
6. savostin.alex 83 08.06.18 13:39 Сейчас в теме
В типовой УТ 11 (ERP, БП 3 - там, где есть БСП) есть справочник СертификатыКлючейЭлектроннойПодписиИШифрования, там для пользователя и организации подбираются сертификаты из личного хранилища пользователя ОС, получить нужные данные нужно оттуда. Но можно реализовать и свой аналог этого справочника.
7. AzagTot 41 16.11.18 15:55 Сейчас в теме
Александр, подскажите, пожалуйста, как с помощью COMОбъекта Diadoc.DiadocClient отправить контрагенту приглашение для обмена ЭД.
8. savostin.alex 83 17.11.18 01:01 Сейчас в теме
(7)
//Находим контрагента по ИНН/КПП
CounteragentList = Organization.GetCounteragentListByInnKpp(ИНН, КПП);
Counteragent = CounteragentList.GetItem(0);
//Принимаем запрос или отправляем приглашение
Counteragent.AcquireCounteragent("Приглашаем к партнерству");

//Или если у нас имеется ID контрагента, получаем его по ID
Counteragent = Organization.GetCounteragentById(CounteragentId);
Counteragent.AcquireCounteragent("Приглашаем к партнерству");

Вообще документация тут https://diadocsdk-1c.readthedocs.io
9. TheU 18.06.21 15:16 Сейчас в теме
(0) Александр, здравствуйте.
А где-то можно посмотреть более развернутый пример, чем в документации
а) по подписанию входящих документов (ответным действиям)
б) по загрузке статусов отправленных документов?
10. savostin.alex 83 22.06.21 03:27 Сейчас в теме
Добрый день. Кроме документации примеров нет, да и то, что реализовано, уже устарело - контур изменил API.
11. hmv59 23.08.21 08:48 Сейчас в теме
(10) Добрый день. Приведите, пожалуйста, пример использования компоненты с учетом последних изменений Контуром API?
12. savostin.alex 83 23.08.21 08:50 Сейчас в теме
Добрый день. Обработка не поддерживается, лучше возьмите по подписке у Контура их модуль.
13. hmv59 23.08.21 12:37 Сейчас в теме
(12) Спасибо за информацию. Модуль Контура в нашем случае не подойдет. Работал ранее функционал выгрузки из 1С8 в Диадок УКД методом CreateSendTask (по кнопке пользователь запускал такую выгрузку по конкретному документу). Этот функционал аналогичен Вашей обработке. Однажды это перестало работать. Ошибка: Метод объекта не обнаружен (CreateSendTask) SendTask = Organization.CreateSendTask("UcdInvoiceCorrection").
В документации указано, что требуется использовать вместо CreateSendTask - CreatePackageSendTask2(), деталей нет. Подскажите, пожалуйста, как с помощью метода CreatePackageSendTask2() отправить документ?
Оставьте свое сообщение