Загрузка данных



&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// ++ Бойков BSLR-1852
	СписокЭлементов = Новый Массив;
	СписокЭлементов.Добавить("ЛичныйКабинет");
	СписокЭлементов.Добавить("ТоварыТовар");
	СписокЭлементов.Добавить("УслугиУслугаМП");
	СписокЭлементов.Добавить("ВыкупТовар");
	топ_ИнтерфейсСервер.НастроитьПараметрыВыбораПоТорговымПлощадкам(ЭтотОбъект, СписокЭлементов);
	// -- Бойков BSLR-1852 
	Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") тогда
		Элементы.СсылкаНаСтрОтчета.Заголовок = ""; // письмерова 12.09.2023 BSLR-2566  
	КонецЕсли;  	
	// ++ Стародубцев BSLR-3624
	топ_ОбщийМодульСервер.ОбновитьДанныеСтатистики(ЭтотОбъект.ИмяФормы);
	// -- Стародубцев BSLR-3624 
	// письмерова 11.12.2025 BSLR-5126
	Если ЗначениеЗаполнено(Объект.ДатаОкончания) ТОгда
		ЗначениеОсновнойСтавкиНДС = топ_ОбщийВызовСервера.ЗначениеОсновнойСтакиНДС(Объект.ДатаОкончания);
	КонецЕсли; 
	
	ОбновитьИндексыДокументов(); // BSLR-5372
	
	ОбновитьДеревоДокументов(); // BSLR-5340

	
КонецПроцедуры 

ПРоцедура ОбновитьДеревоДокументов() // BSLR-5340

	ДеревоДокументов.ПолучитьЭлементы().Очистить();
	ЭлементыДерева = ДеревоДокументов.ПолучитьЭлементы();
	ДобавленаГруппа = Ложь;
	Для Каждого Стр Из Объект.Документы Цикл
		
		Если Стр.ТипДокумента <> "Реализация через комиссионера юр.лицу" ТОгда
			СтрокаДок = ЭлементыДерева.Добавить();
			ЗаполнитьЗначенияСвойств(СтрокаДок, Стр);
		Иначе
			
			Если НЕ ДобавленаГруппа ТОгда			
				СтрокаДок = ЭлементыДерева.Добавить();
				СтрокаДок.ТипДокумента = "Документы реализации юр.лицам";
				СтрокаДок.ИндексКартинки = 2;  // пустая картинка
				ДобавленаГруппа = Истина;
				ПодчиненныеРеал = СтрокаДок.ПолучитьЭлементы();
		    КонецЕсли;
			
			СтрокаРеал = ПодчиненныеРеал.Добавить();
			ЗаполнитьЗначенияСвойств(СтрокаРеал, Стр);
			
		КонецЕсли;			
		
	КонецЦикла;
	
КонецПРоцедуры

ПРоцедура ОбновитьИндексыДокументов() // BSLR-5372
	
	Для Каждого Стр из Объект.Документы Цикл
		
		Если Стр.ДокументНавигационнаяСсылка = "" Тогда // пустая строка 
			Продолжить;
		КонецЕсли;
		
		НС = Стр.ДокументНавигационнаяСсылка;
	    ПерваяТочка = Найти(НС, "e1cib/data/");
	    ВтораяТочка = Найти(НС, "?ref=");
	    
	    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
	    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
	    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
	    СсылкаДок = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
		
		Если СсылкаДок.ПометкаУдаления Тогда
			Стр.ИндексКартинки = 1;
		Иначе
			Если НЕ СсылкаДок.Проведен ТОгда
				Стр.ИндексКартинки = 2;	
			Иначе
				Стр.ИндексКартинки = 0;	
			КонецЕсли;
		КонецЕсли;
		// по умолчанию установлен =0, это картинка проведен
		
	КонецЦикла;  
	
КонецПРоцедуры

&НаКлиенте
Процедура УстановитьВидимостьДоступность()
		
	// письмерова 17.11.2023 BSLR-2814
	Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) Тогда
		ПолучитьЗначениеСНО();
	Иначе
		СНО = Неопределено;
	КонецЕсли;
	
	ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
	ЭтоWB = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries");
	ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");
	ЭтоСбер = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет"); // BSLR-4190
	
	Элементы.ФормаЗагрузитьИзExcel.Заголовок = "Загрузить из excel"; //BSLR-3639, Чупраков А.Н., 02.07.24
	
	Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) тогда
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") тогда
			Элементы.СуммаУслугХранения.Доступность = Ложь; 
			Элементы.Декорация1.Доступность = Ложь;
			Элементы.Декорация1.Заголовок = "На текущий момент OZON может присылать не корректные данные по услуге с наименованием ""Услуга FBO (без размещения)/услуга FBS (Marketplace Услуги селлеров)"". В случае, если по ней данные не сходятся с первичными документами, тогда поправьте их вручную.";
			Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
			Элементы.СуммаДоплаты.Доступность = Ложь;
			Элементы.ФормаЗагрузитьИзExcel.Видимость = истина;
			Элементы.ФормаЗагрузитьДанные.Видимость = Ложь;
			Элементы.ДатаНачала.Видимость = истина;
			Элементы.Период.Видимость = ложь;
			Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
			Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Ложь;
			// письмерова 14.12.2023 BSLR-2953
			Элементы.СуммаКомиссииПоУПД.Доступность = Истина;
			Элементы.РаспределитьРазницу.Доступность = Истина; 
			Элементы.СуммаКомиссииПоУПД.Подсказка = "Если возникла погрешность в загруженном отчете, заполните поле данными из Позаказного отчета о реализации: ""Итого комиссия после скидок"" или УПД и нажмите Распределить разницу. Сумма комиссии после скидок будет скорректирована.";
			Элементы.ГруппаПоляСуммы.Видимость = Истина;
			Элементы.ГруппаУслугиХранения.Видимость = Ложь;  		
			
			Элементы.ТоварыСуммаДоплатыOzon.Видимость = Истина; 
			Элементы.ТоварыСуммаДоплатыOzon.Заголовок = "Доплата за счет Озон";
			Элементы.ВыкупЗагрузитьВыкупыИзExcel.Видимость = Ложь;
			Элементы.ЗагрузитьВыкупыИзExcelOZON.Видимость = Истина;// письмерова 13.10.2023 BSLR-1587  
			Элементы.ВыкупКомиссия.Видимость = Ложь;
			Элементы.ВыкупСуммаНДСВознаграждения.Видимость = Ложь;
			Элементы.ВыкупЗаказПокупателяМП.Видимость = Ложь;
			Элементы.ВыкупЗаказПокупателя.Видимость = Ложь;
			Элементы.ВыкупИдентификатор.Видимость = Ложь;
			Элементы.ВыкупСтранаПродажи.Видимость = Ложь;
			Элементы.ТоварыАртикулМП.Заголовок = "Артикул";
			
			Элементы.ТоварыРазмерWB.Видимость = Ложь;
			Элементы.ВыкупРазмерWB.Видимость = Ложь;
			Элементы.ТоварыСуммаКВыплате.Видимость = Ложь;
			Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Истина;
			Элементы.ТоварыВознаграждениеОператору.Видимость = Ложь;
			Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Ложь; //LAShadrin BSLR-1338 
			Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Ложь; //письмерова 14.03.2024 BSLR-3357 
			Элементы.ГруппаНастройкиВБ.Видимость = Ложь; // письмерова 08.07.2024 BSLR-3667
			Элементы.ТоварыНомерСчФакт.Видимость = Истина; // письмерова 18.08.2023 BSLR-2035
			Элементы.ТоварыПокупатель.Видимость = Истина; 
			Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Истина; 
			Элементы.СоздаватьКонтрагентов.Видимость = Истина;
			Элементы.ТоварыДатаСчФакт.Видимость = Истина;
			// ++ Куряев 04.10.2023 BSLR-2661
			//Элементы.ГруппаПоляСуммы.Видимость = Ложь; BSLR-2953 - сумма по упд должна быть в озон
			// Куряев 04.10.2023 BSLR-2661
			Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
			Если Объект.ДатаНачала >= Дата('20231001000000') Тогда //письмерова 28.11.2023 BSLR-2862
				Элементы.ТоварыКомиссияБазовая.Видимость = истина;
				Элементы.ТоварыКомиссия.Заголовок = "Комиссия после скидок";
			Иначе
				Элементы.ТоварыКомиссияБазовая.Видимость = Ложь;
				Элементы.ТоварыКомиссия.Заголовок = "Комиссия"; 
			КонецЕсли;
			Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = истина; // письмерова 20.08.2024 BSLR-3677 
			Элементы.ТолькоВыкупы.Видимость = Истина; // письмерова 28.08.2024 BSLR-3601  
			Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Истина; //Крупа BSLR-4753 
			Элементы.УслугиБаллы.Видимость = Истина;  //Крупа BSLR-4753 
			Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Истина;  //Крупа BSLR-4753
		ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") тогда
			Элементы.СуммаУслугХранения.Доступность = истина; 
			Элементы.Декорация1.Заголовок = "Суммы услуг могут быть отрицательные, вносите их  с учётом знака";
			Элементы.СуммаУслугПлатнойПриемки.Доступность = истина;
			Элементы.СуммаДоплаты.Доступность = Истина;
			Элементы.ФормаЗагрузитьИзExcel.Видимость = Истина;
			Элементы.ФормаЗагрузитьДанные.Видимость = истина;
			Элементы.ДатаНачала.Видимость = истина;
			Элементы.Период.Видимость = ложь;  			
			Элементы.ПродажиВРБВПродажахРФ.Доступность = Истина; 
			Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Истина;
			Элементы.ГруппаУслугиХранения.Видимость = Истина; // письмерова 30.01.2024 BSLR-3146
			Элементы.СуммаКомиссииПоУПД.Доступность = Истина;
			Элементы.РаспределитьРазницу.Доступность = Истина;
			Элементы.ТоварыСуммаДоплатыOzon.Видимость = Ложь;
            Элементы.ВыкупЗагрузитьВыкупыИзExcel.Видимость = Истина; 
			Если СНО = ПредопределенноеЗначение("Перечисление.СистемыНалогообложения.Упрощенная") Тогда // письмерова 21.11.2023 BSLR-2814
				//Элементы.ВыкупЗагрузитьВыкупыИзExcel.Доступность = Ложь; 
				//Элементы.НадписьВыкупыУСН.Видимость = Истина;
			Иначе
				Элементы.ВыкупЗагрузитьВыкупыИзExcel.Доступность = истина;
				Элементы.НадписьВыкупыУСН.Видимость = Ложь;
			КонецЕсли;
			Элементы.ЗагрузитьВыкупыИзExcelOZON.Видимость = Ложь;// письмерова 13.10.2023 BSLR-1587
			Элементы.ВыкупКомиссия.Видимость = Истина;
			Элементы.ВыкупСуммаНДСВознаграждения.Видимость = Истина;
			Элементы.ВыкупЗаказПокупателяМП.Видимость = Истина;
			Элементы.ВыкупЗаказПокупателя.Видимость = Истина;
			Элементы.ВыкупИдентификатор.Видимость = Истина;
			Элементы.ВыкупСтранаПродажи.Видимость = Истина;
			Элементы.ТоварыАртикулМП.Заголовок = "Артикул";
			
			Элементы.ТоварыРазмерWB.Видимость = Истина;
			Элементы.ВыкупРазмерWB.Видимость = Истина;
			Элементы.ТоварыСуммаКВыплате.Видимость = Ложь;
			Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Истина;
			Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Истина; //LAShadrin BSLR-1338
			Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Истина; //письмерова 14.03.2024 BSLR-3357 
			Элементы.ГруппаНастройкиВБ.Видимость = Истина; // письмерова 08.07.2024 BSLR-3667
			Элементы.ТоварыВознаграждениеОператору.Видимость = Ложь;
			Элементы.ТоварыНомерСчФакт.Видимость = Истина; // BSLR-4698
			Элементы.ТоварыПокупатель.Видимость = Истина; // BSLR-4698
			Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Истина; // BSLR-4895 
			Элементы.ТоварыЗагрузитьДанныеЮЛ.Заголовок = "Загрузить реестры юр.лиц (файлы)"; // BSLR-4895
			Элементы.СоздаватьКонтрагентов.Видимость = Истина; // BSLR-4698
			Элементы.ТоварыДатаСчФакт.Видимость = Истина; // BSLR-4698
			// ++ Куряев 04.10.2023 BSLR-2661
			Элементы.ГруппаПоляСуммы.Видимость = Истина;
			Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862 
			Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677 
			Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601 
			Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа BSLR-4753  
			Элементы.УслугиБаллы.Видимость = Ложь;  //Крупа BSLR-4753 
			Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Ложь;  //Крупа BSLR-4753
		ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") тогда
			Элементы.СуммаУслугХранения.Доступность = Ложь; 
			Элементы.Декорация1.Доступность = Ложь;
			Элементы.Декорация1.Заголовок = "";
			Элементы.Декорация1.Видимость = Ложь;
			Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
			Элементы.СуммаДоплаты.Доступность = Ложь;
			Элементы.ФормаЗагрузитьИзExcel.Видимость = истина;
			Элементы.ФормаЗагрузитьИзExcel.Заголовок = "Загрузить (zip)";
			Элементы.ФормаЗагрузитьДанные.Видимость = Ложь;
			Элементы.ДатаНачала.Видимость = истина;
			Элементы.Период.Видимость = ложь;
			Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
			Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Ложь;
			Элементы.ГруппаУслугиХранения.Видимость = Ложь; // письмерова 30.01.2024 BSLR-3146
			Элементы.СуммаКомиссииПоУПД.Доступность = Ложь;
			Элементы.РаспределитьРазницу.Доступность = Ложь; 
			Элементы.ТоварыСуммаДоплатыOzon.Видимость = Истина;
			Элементы.ТоварыСуммаДоплатыOzon.Заголовок = "Доплата за счет Сбер"; 		
			Элементы.ТоварыАртикулМП.Заголовок = "offer_id";
			
			Элементы.ВыкупЗагрузитьВыкупыИзExcel.Видимость = ложь;
			Элементы.ЗагрузитьВыкупыИзExcelOZON.Видимость = Ложь;// письмерова 13.10.2023 BSLR-1587 
			
			Элементы.ТоварыРазмерWB.Видимость = Ложь;
			Элементы.ВыкупРазмерWB.Видимость = Ложь;
			Элементы.ТоварыШтрихКод.Видимость = Ложь;
            Элементы.ТоварыСуммаКВыплате.Видимость = Истина;
	        Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Ложь; 
			Элементы.ТоварыВознаграждениеОператору.Видимость = ЛОжь; // не приходит больше 
			Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Ложь; //LAShadrin BSLR-1338 
			Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Ложь; //письмерова 14.03.2024 BSLR-3357 
			Элементы.ГруппаНастройкиВБ.Видимость = Ложь; // письмерова 08.07.2024 BSLR-3667
			Элементы.ТоварыНомерСчФакт.Видимость = Ложь; // письмерова 18.08.2023 BSLR-2035
			Элементы.ТоварыПокупатель.Видимость = Ложь;
			Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Ложь;
			Элементы.СоздаватьКонтрагентов.Видимость = Ложь;
			Элементы.ТоварыДатаСчФакт.Видимость = Ложь;
			// ++ Куряев 04.10.2023 BSLR-2661
			Элементы.ГруппаПоляСуммы.Видимость = Ложь;
			// Куряев 04.10.2023 BSLR-2661 
			Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
			Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
			Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677 
			Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601  
			Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа BSLR-4753

		Иначе
			Элементы.СуммаУслугХранения.Доступность = Ложь;
			Элементы.Декорация1.Доступность = Ложь;
			Элементы.Декорация1.Заголовок = "Суммы услуг могут быть отрицательные, вносите их  с учётом знака";
			Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
			Элементы.СуммаДоплаты.Доступность = Ложь;
			Элементы.ФормаЗагрузитьИзExcel.Видимость = истина;
			Элементы.ФормаЗагрузитьДанные.Видимость = истина;
			Элементы.ДатаНачала.Видимость = истина;
			Элементы.Период.Видимость = ложь;
			Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь; 
			Элементы.УдержатьСуммуДоставкиПриВыкупе.Видимость = Ложь;
			Элементы.ТоварыАртикулМП.Заголовок = "Артикул";
			Элементы.ГруппаУслугиХранения.Видимость = Ложь; // письмерова 30.01.2024 BSLR-3146
			Элементы.СуммаКомиссииПоУПД.Доступность = Ложь;
			Элементы.РаспределитьРазницу.Доступность = Ложь;  
			// письмерова 19.11.2024 BSLR-4095 
			//Элементы.ТоварыСуммаДоплатыOzon.Видимость = Ложь;
			Элементы.ТоварыСуммаДоплатыOzon.Видимость = Истина;
			Элементы.ТоварыСуммаДоплатыOzon.Заголовок = "Сумма всех скидок"; 
			Если Объект.ДатаНачала < Дата(2024,10,1) Тогда
				Элементы.ТоварыСуммаДоплатыOzon.Видимость = Ложь;	
			КонецЕсли;
			Элементы.ТоварыСуммаКВыплате.Видимость = Ложь;

			Элементы.ТоварыРазмерWB.Видимость = Ложь;
			Элементы.ВыкупРазмерWB.Видимость = Ложь;
			Элементы.ТоварыВознаграждениеОператору.Видимость = Ложь; 
			Элементы.ВыгужатьДетализациюWB_Excel.Видимость = Ложь; //LAShadrin BSLR-1338 
			Элементы.ВключитьВСуммуПродажВозмешения.Видимость = Ложь; //письмерова 14.03.2024 BSLR-3357 
			Элементы.ГруппаНастройкиВБ.Видимость = Ложь; // письмерова 08.07.2024 BSLR-3667
			Элементы.ТоварыНомерСчФакт.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
			Элементы.ТоварыНомерСчФакт.Заголовок = "Номер УПД"; // письмерова 14.12.2023 BSLR-2680
			Элементы.ТоварыПокупатель.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
			Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Ложь;
			Элементы.СоздаватьКонтрагентов.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
			Элементы.ТоварыДатаСчФакт.Видимость = истина; // письмерова 14.12.2023 BSLR-2680
			Элементы.ТоварыДатаСчФакт.Заголовок = "Дата УПД"; // письмерова 14.12.2023 BSLR-2680
			// ++ Куряев 04.10.2023 BSLR-2661
			Элементы.ГруппаПоляСуммы.Видимость = Ложь;
			// Куряев 04.10.2023 BSLR-2661 
			Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814
			Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
			Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677
			Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601 
			Элементы.ТоварыКомиссия.Видимость = Ложь;  //письмерова 03.10.2024 BSLR-3978 
			Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Ложь; //письмерова 03.10.2024 BSLR-3978 
			Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа 17.04.2026 BSLR-4753
            Элементы.УслугиБаллы.Видимость = Ложь;  //Крупа BSLR-4753 
			Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Ложь;  //Крупа BSLR-4753

		КонецЕсли;
		Если Объект.ТолькоВыкупы Тогда // письмерова 28.08.2024 BSLR-3601
			Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь;
		Иначе
			Элементы.ФормаЗагрузитьИзExcel.Доступность = Истина;	
		КонецЕсли;	
	иначе
		Элементы.ДатаНачала.Видимость = ложь;
		Элементы.Период.Видимость = истина;
		Элементы.ФормаЗагрузитьДанные.Видимость = Ложь;
		Элементы.ФормаЗагрузитьИзExcel.Видимость = Ложь;
		Элементы.ПродажиВРБВПродажахРФ.Доступность = Ложь;
		
		Элементы.СуммаУслугХранения.Доступность = Ложь;
		Элементы.Декорация1.Доступность = Ложь;
		Элементы.Декорация1.Заголовок = "Суммы услуг могут быть отрицательные, вносите их  с учётом знака";
		Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
		Элементы.СуммаДоплаты.Доступность = Ложь;
		Элементы.СуммаКомиссииПоУПД.Доступность = Ложь;
		Элементы.РаспределитьРазницу.Доступность = Ложь;
		
		Элементы.ТоварыРазмерWB.Видимость = Ложь;
		Элементы.ВыкупРазмерWB.Видимость = Ложь; 
		Элементы.ТоварыСуммаНДСВознаграждения.Видимость = Истина;
		Элементы.ТоварыНомерСчФакт.Видимость = Ложь; // письмерова 18.08.2023 BSLR-2035
		Элементы.ТоварыПокупатель.Видимость = Ложь;
		Элементы.ТоварыЗагрузитьДанныеЮЛ.Видимость = Ложь;
		Элементы.СоздаватьКонтрагентов.Видимость = Ложь; 
		Элементы.ТоварыДатаСчФакт.Видимость = Ложь;
		// ++ Куряев 04.10.2023 BSLR-2661
		Элементы.ГруппаПоляСуммы.Видимость = Ложь;
		// Куряев 04.10.2023 BSLR-2661 
		Элементы.НадписьВыкупыУСН.Видимость = Ложь; // письмерова 21.11.2023 BSLR-2814 
		Элементы.ТоварыКомиссияБазовая.Видимость = Ложь; //письмерова 28.11.2023 BSLR-2862
		Элементы.ТоварыВыплатыПоМеханикамЛояльностиПартнеров.Видимость = Ложь; // письмерова 20.08.2024 BSLR-3677
		Элементы.ТолькоВыкупы.Видимость = Ложь; // письмерова 28.08.2024 BSLR-3601   
		Элементы.УслугиЗагрузитьОтчетБаллыЗаСкидки.Видимость = Ложь; //Крупа 17.04.2026 BSLR-4753
        Элементы.УслугиБаллы.Видимость = Ложь;  //Крупа BSLR-4753 
		Элементы.УслугиСуммаДоВычетаБаллов.Видимость = Ложь;  //Крупа BSLR-4753

	КонецЕсли;

                                                                            // BSLR-5071
	Если (Объект.Товары.Количество() или Объект.Выкуп.Количество() Или Объект.Компенсации.Количество()) и Объект.Документы.Количество() = 0 тогда
		Элементы.ФормаСоздатьДокументы.Доступность = Истина;
	// письмерова 05.11.2025 BSLR-5051 ++ 
	ИначеЕсли (Объект.Товары.Количество()= 0 и Объект.Услуги.Количество()<>0) и Объект.Документы.Количество() = 0 ТОгда
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") ТОгда
			Элементы.ФормаСоздатьДокументы.Доступность = Истина;
		Иначе
			Элементы.ФормаСоздатьДокументы.Доступность = Ложь;
		КонецЕсли; // BSLR-5051 --	
	Иначе		
		Элементы.ФормаСоздатьДокументы.Доступность = Ложь;
	КонецЕсли; 
	// письмерова 07.09.2023 BSLR-2415 
	//Если Объект.Документы.Количество() ТОгда
	//	Элементы.ФормаСоздатьДокументы.Доступность = Ложь;
	//КонецЕсли;		
	
	// если есть доки то блокируем форму
	Если Объект.ОтчетКомиссионераПродажа.Пустая() и Объект.ОтчетКомиссионераВозврат.Пустая() и Объект.ПриходнаяНакладная.Пустая() 
		и Объект.РасходнаяНакладнаяКомиссия.Пустая() и Объект.Документы.Количество() = 0 тогда // письмерова 07.09.2023 BSLR-2415
		Элементы.НомерВходящегоДокумента.Доступность = Истина;
		Элементы.ДатаВходящегоДокумента.Доступность = Истина;
		Элементы.НомерВходящегоДокументаВыкупа.Доступность = Истина;
		Элементы.ДатаВходящегоДокументаВыкупа.Доступность = Истина;
		//Элементы.ЛичныйКабинет.Доступность = Истина;
		Элементы.ЛичныйКабинет.ТолькоПросмотр = ЛОжь;
		Элементы.ДатаНачала.Доступность = Истина;
		Элементы.Товары.ТолькоПросмотр = Ложь;
		Элементы.Услуги.ТолькоПросмотр = Ложь;  
		Элементы.Компенсации.ТолькоПросмотр = Ложь; // BSLR-3318 
		Элементы.ОчиститьСвязанныеДокументы.Доступность = Ложь;
		Элементы.ОбновитьСтатусДокументов.Доступность = Ложь; // BSLR-5372
	иначе
		Элементы.СуммаКомиссииПоУПД.Доступность = ложь;
		Элементы.РаспределитьРазницу.Доступность = ложь;
		Элементы.НомерВходящегоДокумента.Доступность = Ложь;
		Элементы.ДатаВходящегоДокумента.Доступность = Ложь;
		Элементы.НомерВходящегоДокументаВыкупа.Доступность = Ложь;
		Элементы.ДатаВходящегоДокументаВыкупа.Доступность = Ложь;
		//Элементы.ЛичныйКабинет.Доступность = Ложь;
		Элементы.ЛичныйКабинет.ТолькоПросмотр = Истина;
		Элементы.ДатаНачала.Доступность = Ложь;
		Элементы.СуммаУслугХранения.Доступность = Ложь;
		Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
		Элементы.СуммаДоплаты.Доступность = Ложь;
		Элементы.Товары.ТолькоПросмотр = Истина;
		Элементы.Услуги.ТолькоПросмотр = Истина; 
		Элементы.Компенсации.ТолькоПросмотр = Истина; // BSLR-3318
		Элементы.ОчиститьСвязанныеДокументы.Доступность = Истина;
		Элементы.ОбновитьСтатусДокументов.Доступность = Истина; // BSLR-5372
	КонецЕсли;
	Элементы.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой.Доступность = Истина; // BSLR-3906 
	если ЗначениеЗаполнено(Объект.ПриходнаяНакладная) или ЗначениеЗаполнено(Объект.ПриходнаяНакладнаяКомиссия) 
		Или Объект.Документы.Количество() Тогда // письмерова 07.09.2023 BSLR-2415
		Элементы.СуммаУслугХранения.Доступность = Ложь;
		Элементы.СуммаУслугПлатнойПриемки.Доступность = Ложь;
		Элементы.СуммаДоплаты.Доступность = Ложь;
		Элементы.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой.Доступность = Ложь; // BSLR-3906
	КонецЕсли;   
	
	//если в табличках есть данные то покажем подсказки и поле для распределения сумм для ВБ
	если (Объект.Товары.Количество() или Объект.Услуги.Количество()) и ЗначениеЗаполнено(Объект.НомерВходящегоДокумента) и Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") тогда
		Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = истина;
		Элементы.СсылкаНаСтрОтчета.Заголовок = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьАдресСсылкиНаОтчёт(Объект.НомерВходящегоДокумента,Объект.ДатаНачала); // письмерова 12.08.2024 BSLR-3773
	иначе
		Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = Ложь;
		Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") тогда
			Элементы.СсылкаНаСтрОтчета.Заголовок = ""; // письмерова 12.09.2023 BSLR-2566 
		КонецЕсли;
	КонецЕсли;
	
	// блокировка кнопок с учетом проведения
	Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) и ЗначениеЗаполнено(Объект.ДатаНачала)и ЗначениеЗаполнено(Объект.ДатаОкончания) и НЕ Объект.Проведен тогда
		Элементы.ФормаЗагрузитьДанные.Доступность = Истина;
		Элементы.ФормаЗагрузитьИзExcel.Доступность = Истина;
		// письмерова 28.02.2023 BSLR-1434	
		Если НЕ Объект.ОтчетКомиссионераПродажа.Пустая() Тогда // если есть документы
			Элементы.ФормаЗагрузитьДанные.Доступность = Ложь;
			Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь;
		КонецЕсли;

	ИначеЕсли Объект.Проведен тогда
		//Элементы.ФормаЗагрузитьДанные.Доступность = Ложь;
		//Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь; 
		// письмерова 28.02.2023 BSLR-1434	
		Если НЕ Объект.ОтчетКомиссионераПродажа.Пустая() 
			Или Объект.Документы.Количество() Тогда // письмерова 07.09.2023 BSLR-2415 // если есть документы
			Элементы.ФормаЗагрузитьДанные.Доступность = Ложь;
			Элементы.ФормаЗагрузитьИзExcel.Доступность = Ложь; 
		Иначе
			Элементы.ФормаЗагрузитьДанные.Доступность = Истина;
			Элементы.ФормаЗагрузитьИзExcel.Доступность = Истина; 
		КонецЕсли;
		//Элементы.ЛичныйКабинет.Доступность = Ложь;
		Элементы.ЛичныйКабинет.ТолькоПросмотр = Истина;
		Элементы.Период.Доступность = Ложь;
		Элементы.ДатаНачала.Доступность = Ложь;
	КонецЕсли;
	
	Элементы.ГруппаВыкуп.Видимость = ЭтоWB или Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON"); // письмерова 13.10.2023 BSLR-1587
	Элементы.ВозвратДляРасходаПоВыкупу.Видимость = ЭтоWB;
	Элементы.РасходнаяНакладнаяВыкуп.Видимость = ЭтоWB;
	Элементы.ВозвратПоВыкупуДляПередачиНаКомиссию.Видимость = ЭтоWB;
	Элементы.ПередачаНаКомиссиюВозвратовПоВыкупу.Видимость = ЗначениеЗаполнено(Объект.ПередачаНаКомиссиюВозвратовПоВыкупу);//ЭтоWB; 
	Если ЭтоWB Тогда
		Элементы.ПередачаНаКомиссиюВозвратовПоВыкупуУИД.Видимость = НЕ ЗначениеЗаполнено(Объект.ПередачаНаКомиссиюВозвратовПоВыкупу);
	Иначе
		Элементы.ПередачаНаКомиссиюВозвратовПоВыкупуУИД.Видимость = ЭтоWB; 
	КонецЕсли;
	//Элементы.ПриходнаяНакладнаяВыкуп.Видимость = ЭтоWB;
	Элементы.НомерВходящегоДокументаВыкупа.Видимость = ЭтоWB;
	Элементы.ДатаВходящегоДокументаВыкупа.Видимость = ЭтоWB; 
	Элементы.ОтчетКомиссионераВозврат.Видимость = Ложь; // письмерова 15.05.2023 BSLR-1894
	// письмерова 09.06.2023 BSLR-1982
	Элементы.ТоварыОбоснованиеДляОплаты.Видимость = ЭтоWB;
	Элементы.ВыкупОбоснованиеДляОплаты.Видимость = ЭтоWB; 
	
	// письмерова 18.07.2023 BSLR-2097
	Элементы.УслугиЗагрузитьУслугиИзExcel.Видимость = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
	
	// счетчик документов
	сч = 0;
	Если ЗначениеЗаполнено(объект.ОтчетКомиссионераПродажа) Тогда
		сч = сч + 1;
	КонецЕсли;
	Если ЗначениеЗаполнено(объект.ОтчетКомиссионераВозврат) Тогда
		сч = сч + 1;
	КонецЕсли;
	Если ЗначениеЗаполнено(объект.ПриходнаяНакладная) Тогда
		сч = сч + 1;
	КонецЕсли;
	Если ЗначениеЗаполнено(объект.ПриходнаяНакладнаяКомиссия) Тогда
		сч = сч + 1;
	КонецЕсли;
	Если ЗначениеЗаполнено(объект.РасходнаяНакладнаяВыкуп) Тогда
		сч = сч + 1;
	КонецЕсли;
	//Если ЗначениеЗаполнено(объект.ПриходнаяНакладнаяВыкуп) Тогда
	//	сч = сч + 1;
	//КонецЕсли;
	Если ЗначениеЗаполнено(объект.РасходнаяНакладнаяКомиссия) Тогда
		сч = сч + 1;
	КонецЕсли; 
	Если ЗначениеЗаполнено(объект.ВозвратДляРасходаПоВыкупу) Тогда
		сч = сч + 1;
	КонецЕсли; 
	Если ЗначениеЗаполнено(объект.ВозвратПоВыкупуДляПередачиНаКомиссию) Тогда
		сч = сч + 1;
	КонецЕсли;
	Если ЗначениеЗаполнено(объект.ПередачаНаКомиссиюВозвратовПоВыкупу) Тогда
		сч = сч + 1;
	Иначе
		// письмерова 19.04.2023 BSLR-1765
		Если объект.ПередачаНаКомиссиюВозвратовПоВыкупуУИД <> "" Тогда
			сч = сч + 1;
		КонецЕсли;
	КонецЕсли; 
	
	// письмерова 07.09.2023 BSLR-2415
	// если ссылки пустые - скрываем группу ссылок на документы, оставляем только таб часть
	Если сч = 0 Тогда
		Элементы.ДокументыКолонки.Видимость = Ложь; 
	Иначе
		Элементы.ТаблицаДокументов.Видимость = Ложь; 
	КонецЕсли; 
	
	Элементы.ТаблицаДокументов.Видимость = Ложь;//не Элементы.ДокументыКолонки.Видимость; 
	
	Если сч > 0 Тогда
		Элементы.Документы.Заголовок = "Документы (" + сч + ")";
	Иначе  // письмерова 07.09.2023 BSLR-2415
		сч = Объект.Документы.Количество();
		Если сч > 0 Тогда
			Элементы.Документы.Заголовок = "Документы (" + сч + ")";
		Иначе
			Элементы.Документы.Заголовок = "Документы";
		КонецЕсли;
	КонецЕсли; 
	
	// письмерова 12.09.2023 BSLR-2566 
	Элементы.ГруппаЗапросЯМ.Видимость = Ложь;
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") ТОгда
		Если Элементы.СсылкаНаСтрОтчета.Заголовок <> "" ТОгда  		
			Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = истина;
		КонецЕсли; 
		Если ИДОтчета <> "" ТОгда
			Элементы.ГруппаЗапросЯМ.Видимость = Истина;
		КонецЕсли;
	КонецЕсли;
	
	ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
	ВидимостьГруппаДоступа = ЭтоОзон ИЛИ ЭтоЯМ ИЛИ ЭтоWB; // BSLR-4698
	Элементы.ГруппаДоступаПартнера.Видимость = ИспользуютсяГруппыДоступаКонтрагентов И ВидимостьГруппаДоступа;
    // письмерова 17.10.2024 BSLR-3906
	Элементы.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой.Видимость = ЭтоОзон Или ЭтоСбер; // BSLR-4190 
	// письмерова 24.10.2024 BSLR-3318
	Элементы.Компенсации.Видимость = ЭтоОзон Или ЭтоWB; // BSLR-4460 
	Элементы.КомпенсацииЗагрузитьКомпенсацииИзExcel.Видимость = ЭтоОзон; // BSLR-4460
	Элементы.КомпенсацииЗагрузитьДекомпенсацииИзExcel.Видимость = ЭтоОзон; // BSLR-4460
	Элементы.КомпенсацииРазмерWB.Видимость = ЭтоWB; // BSLR-4460 
	// BSLR-3215 ++
	Элементы.ГруппаПеревыставление.Видимость = ЭтоОзон;  
	Элементы.ЗагрузитьРеестрСФ.Доступность = Объект.ПеревыставлениеУслуг.Количество();
	// письмерова 28.11.2024 BSLR-3215
	Если НЕ РаспределятьПоПоставщикам(Объект.ЛичныйКабинет) Тогда
		Элементы.ЗагрузитьРеестрСФ.Доступность = Ложь;
	КонецЕсли;
	Элементы.СоздатьДокументыПеревыставлениеУслуг.Доступность = Объект.ПеревыставлениеУслуг.Количество(); 
	Элементы.ОчиститьДокументыПеревыставления.Доступность = Объект.ПеревыставлениеУслуг.Количество(); 
	Если Объект.ПеревыставлениеУслуг.Количество() Тогда // BSLR-4203
		Если ЕстьДокуметыПеревыставления() Тогда 
			Элементы.СоздатьДокументыПеревыставлениеУслуг.Доступность = Ложь;	
			Элементы.ОчиститьДокументыПеревыставления.Доступность = Истина;
		Иначе
			Элементы.СоздатьДокументыПеревыставлениеУслуг.Доступность = Истина;	
			Элементы.ОчиститьДокументыПеревыставления.Доступность = Ложь; 
		КонецЕсли; 
		
		УстановитьУсловноеОформлениеПеревыставлениеУслуг(); // BSLR-4423
		
	КонецЕсли;
		
	// BSLR-3215 --
	// письмерова 28.11.2024 BSLR-4102
	Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
	Элементы.ВыкупЦена.Видимость = Не ЭтоWB;
	Элементы.ВыкупСумма.Видимость = Не ЭтоWB;
	Элементы.ВыкупКомиссия.Видимость = Не ЭтоWB;
	Элементы.ВыкупСуммаНДСВознаграждения.Видимость = Не ЭтоWB;
	Элементы.ВыкупЗаказПокупателя.Видимость = Не ЭтоWB;
	Элементы.ВыкупСтранаПродажи.Видимость = Не ЭтоWB;
	Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
	Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
	Элементы.ВыкупЗаказПокупателяМП.Видимость = Не ЭтоWB;
	Элементы.ВыкупСборкаТоваров.Видимость = Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты;
	Элементы.ЗагружатьСуммуСкидокВУслугу.Видимость = Ложь; // BSLR-4195, BSLR-4508 - перенесен в ЛК 
	Элементы.ДекорацияЭкваринг.Видимость = Объект.Документы.Количество(); // BSLR-4378 	
	Элементы.СоздаватьСначалаПродажиПотомВозвраты.Видимость = СоздаватьОтдельныйДокументПоВозвратам(ОБъект.ЛичныйКабинет); // BSLR-4351 
	Элементы.ТоварыЗапроситьРеестрЮрЛиц.Видимость = ЭтоWB;  // BSLR-4698
	
	Элементы.УслугиЗагрузитьОЗОН.Видимость = ЭтоОзон; // BSLR-3887
	Элементы.ЗагрузитьВыкупыИзExcelOZONВозвраты.Видимость = ЭтоОзон; // BSLR-4287
	// письмерова 30.01.2026 BSLR-5255
	Элементы.ТаблицаДокументовЗаменитьСсылку.Видимость = ЕстьДокументСписаниеОтгруженныхТоваров();
	
КонецПроцедуры 

// письмерова 30.01.2026 BSLR-5255
&НаСервереБезКонтекста
Функция ЕстьДокументСписаниеОтгруженныхТоваров()
	Если Метаданные.Документы.Найти("СписаниеОтгруженныхТоваров") <> НЕопределено ТОгда 
		Возврат Истина;
	Иначе
		Возврат Ложь;  Метаданные.Документы.Найти("СписаниеОтгруженныхТоваров")
	КонецЕсли;
КонецФункции
		
	
// письмерова 14.11.2024 BSLR-3215
&НаСервереБезКонтекста
Функция РаспределятьПоПоставщикам(ЛК) 
	
	Возврат ЛК.СоздаватьОтдельныеДокументыДляУслугСНДС; 
	
КонецФункции
	
// письмерова 28.02.2025 BSLR-4351
&НаСервереБезКонтекста
Функция СоздаватьОтдельныйДокументПоВозвратам(ЛК) 
	
	Возврат ЛК.СоздаватьОтдельныйДокументПоВозвратам; 
	
КонецФункции
	
// письмерова 07.04.2025 BSLR-4462
&НаСервереБезКонтекста
Функция БратьСтавкуНДСИзНоменклатуры(ЛК) 
	Возврат ЛК.СтавкаНДСИзНоменклатуры;
КонецФункции

// письмерова 17.11.2023 BSLR-2814
&НаСервере
Процедура ПолучитьЗначениеСНО() 
	
	СНО = УчетнаяПолитикаПереопределяемый.СистемаНалогообложения(Объект.ЛичныйКабинет.Организация,Объект.Дата); 
	
КонецПроцедуры
	

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Период.ДатаНачала = Объект.ДатаНачала;
	Период.ДатаОкончания = Объект.ДатаОкончания;
	//ЛичныйКабинетПриИзменении(Элементы.ЛичныйКабинет); 
	ТекущийЛК = Объект.ЛичныйКабинет;// письмерова 12.02.2024 BSLR-3227
	значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
	если значенияКТ.Свойство("ПометкаУдаления") тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "В документе выбран личный кабинет, помеченный на удаление";
		сообщение.Сообщить();
	КонецЕсли;
	Если ЗначениеЗаполнено(объект.ЛичныйКабинет) тогда
		Клиент = значенияКТ.Клиент;
		Токен =  значенияКТ.Токен; 
		Токен2 = значенияКТ.Токен2;
		Маркетплейс = значенияКТ.Маркетплейс;			
		УстановитьПериод();
	КонецЕсли;
	
	УстановитьВидимостьДоступность();  
	УстановитьУсловноеОформлениеКомпенсация(); //Крупа 09.04.2026 BSLR-5437
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьПредставлениеПериода(НачалоПериода = '00010101', КонецПериода = '00010101')
	
	ТекстПериод = "";
	
	Если ЗначениеЗаполнено(КонецПериода) Тогда 
		Если КонецПериода >= НачалоПериода Тогда
			ТекстПериод = ПредставлениеПериода(НачалоДня(НачалоПериода), КонецДня(КонецПериода), "ФП = Истина");
		Иначе
			ТекстПериод = "";
		КонецЕсли;
	ИначеЕсли ЗначениеЗаполнено(НачалоПериода) Тогда
		ТекстПериод = ПредставлениеПериода(НачалоДня(НачалоПериода), КонецДня(Дата(3999, 11, 11)), "ФП = Истина");
		ТекстПериод = СтрЗаменить(ТекстПериод, Сред(ТекстПериод, СтрНайти(ТекстПериод, " - ")), " - ...");
	КонецЕсли;
	
	Возврат ТекстПериод;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСписокПериодов(СписокПериодов, НачалоСписка, ПределЗагрузки)
	
	СписокПериодов.Очистить();
	ЭтоОзон = Ложь;
	ЭтоВБ = Ложь;
	ЭтоЯМ = Ложь;
	Если Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") ИЛи
			Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
		ЭтоОзон = Истина;
		ДатаНачала = НачалоСписка; // НачалоМесяца(НачалоСписка); - BSLR-3601
		ДатаОкончания = НачалоМесяца(ПределЗагрузки);
	ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		ЭтоВБ = Истина;
		ДатаНачала = НачалоНедели(НачалоСписка);
		ДатаОкончания = НачалоНедели(ПределЗагрузки);
	ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
		ЭтоЯМ = Истина;
		ДатаНачала = НачалоМесяца(НачалоСписка);
		ДатаОкончания = НачалоМесяца(ПределЗагрузки);
	КонецЕсли;
	ЭтоПерваяПоловина = ?(День(НачалоСписка)=1,Истина,Ложь); // письмерова 28.08.2024 BSLR-3601
	Пока ДатаНачала >= ДатаОкончания Цикл
		
		Если ЭтоОзон Тогда
			Если Не Объект.ТолькоВыкупы Тогда // письмерова 28.08.2024 BSLR-3601
				СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецМесяца(ДатаНачала)));
				ДатаНачала = НачалоМесяца(ДатаНачала - ИнтервалМеждуОтчетами(ЭтоОзон,ЭтоВБ,ЭтоЯМ));	 
			Иначе 
				Если ЭтоПерваяПоловина Тогда
					СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецДня(ДатаНачала + 14*24*60*60)));
					ДатаНачала = НачалоМесяца(ДобавитьМесяц(ДатаНачала,-1)) + 15*24*60*60;
					ЭтоПерваяПоловина = Ложь;
				Иначе
					СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецМесяца(ДатаНачала)));
					ДатаНачала = НачалоМесяца(ДатаНачала);	
					ЭтоПерваяПоловина = Истина;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ЭтоВБ Тогда 
			// письмерова 11.01.2024 BSLR-3066
			// заглушка для последней недели 2023 года
			// вместо недели два периода 25.12-27.12 и 28.12.-31.12
			Если ДатаНачала = Дата(2023,12,25) Тогда 
				СписокПериодов.Добавить(Дата(2023,12,28), ПолучитьПредставлениеПериода(Дата(2023,12,28), Дата(2023,12,31)));
				СписокПериодов.Добавить(Дата(2023,12,25), ПолучитьПредставлениеПериода(Дата(2023,12,25), Дата(2023,12,27))); 
			ИначеЕсли ДатаНачала = Дата(2025,12,29) Тогда // BSLR-5212
				СписокПериодов.Добавить(Дата(2026,1,1), ПолучитьПредставлениеПериода(Дата(2026,1,1), Дата(2026,1,4)));
				СписокПериодов.Добавить(Дата(2025,12,29), ПолучитьПредставлениеПериода(Дата(2025,12,29), Дата(2025,12,31)));				
			Иначе // как обычно
				СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецНедели(ДатаНачала)));
			КонецЕсли;	
				ДатаНачала = НачалоНедели(ДатаНачала - ИнтервалМеждуОтчетами(ЭтоОзон,ЭтоВБ,ЭтоЯМ));			
		ИначеЕсли ЭтоЯМ Тогда
			СписокПериодов.Добавить(ДатаНачала, ПолучитьПредставлениеПериода(ДатаНачала, КонецМесяца(ДатаНачала)));
			ДатаНачала = НачалоМесяца(ДатаНачала - ИнтервалМеждуОтчетами(ЭтоОзон,ЭтоВБ,ЭтоЯМ));
		КонецЕсли;
		
	КонецЦикла;
	//добавим в список период который уже есть в документе
	если ЗначениеЗаполнено(Объект.ДатаНачала) тогда
		если СписокПериодов.НайтиПоЗначению(Объект.ДатаНачала) = Неопределено тогда
		Если ЭтоОзон Тогда
			СписокПериодов.Добавить(Объект.ДатаНачала, ПолучитьПредставлениеПериода(Объект.ДатаНачала, КонецМесяца(Объект.ДатаНачала)));
		ИначеЕсли ЭтоВБ Тогда
			СписокПериодов.Добавить(Объект.ДатаНачала, ПолучитьПредставлениеПериода(Объект.ДатаНачала, КонецНедели(Объект.ДатаНачала)));
		ИначеЕсли ЭтоЯМ Тогда
			СписокПериодов.Добавить(Объект.ДатаНачала, ПолучитьПредставлениеПериода(Объект.ДатаНачала, КонецМесяца(Объект.ДатаНачала)));
		КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ИнтервалМеждуОтчетами(ЭтоОзон = Ложь, ЭтоВБ = Ложь, ЭтоЯМ = Ложь)
	Если ЭтоОзон тогда
		Возврат 28*86400;
	ИначеЕсли ЭтоВБ Тогда
		Возврат 7*86400;
	ИначеЕсли ЭтоЯМ Тогда
		 Возврат 28*86400;
	КонецЕсли;
КонецФункции

&НаСервере
Процедура УстановитьПериод()
	ЭтоОзон = Ложь;
	ЭтоВБ = Ложь;
	ЭтоЯМ = Ложь;
	 
	если Объект.РазрешитьЗагрузкуЗа12Месяцев тогда
		КоличествоДнейДляРасчетаПределаЗагрузки = 365;
		КоличествоДнейДляРасчетаПределаЗагрузкиЯМ = 365;
	иначе
		КоличествоДнейДляРасчетаПределаЗагрузки = 90;
		КоличествоДнейДляРасчетаПределаЗагрузкиЯМ = 180;
	КонецЕсли;
	
	Если Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Или
			Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
		ЭтоОзон = Истина;
		НачалоПрошлогоПериода = НачалоМесяца(ДобавитьМесяц(ТекущаяДатаСеанса(), -1));
		ПределЗагрузки = НачалоМесяца(ТекущаяДатаСеанса() - КоличествоДнейДляРасчетаПределаЗагрузки*86400);
		Если Объект.ТолькоВыкупы Тогда // письмерова 28.08.2024 BSLR-3601			
			НачалоПрошлогоПериода = ?(День(ТекущаяДата()) > 15,НачалоМесяца(ТекущаяДатаСеанса()),
											НачалоМесяца(ДобавитьМесяц(ТекущаяДатаСеанса(),-1)) + 14*24*60*60); 
			// Письмерова 10.03.2026 BSLR-5363
			Если НачалоПрошлогоПериода = Дата(2026,2,15) ТОгда
				НачалоПрошлогоПериода = Дата(2026,2,16);
			КонецЕсли;
		КонецЕсли;	
	ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		ЭтоВБ = Истина;
		НачалоПрошлогоПериода = НачалоНедели(ТекущаяДатаСеанса() - ИнтервалМеждуОтчетами(, ЭтоВБ,));
		ПределЗагрузки = НачалоНедели(ТекущаяДатаСеанса() - КоличествоДнейДляРасчетаПределаЗагрузки*86400);
	ИначеЕсли Объект.ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
		ЭтоЯМ = Истина;
		НачалоПрошлогоПериода = НачалоМесяца(ДобавитьМесяц(ТекущаяДатаСеанса(), -1));
		ПределЗагрузки = НачалоМесяца(ТекущаяДатаСеанса() - КоличествоДнейДляРасчетаПределаЗагрузкиЯМ*86400);
	КонецЕсли;
	
	//НачалоПрошлойНедели = НачалоНедели(ТекущаяДатаСеанса() - ИнтервалМеждуОтчетами());
	//ВБ и ОЗОН хранит данные за последние 90 дней
	//ПределЗагрузки = НачалоНедели(ТекущаяДатаСеанса() - 90*86400);
	//Для ЯМ данные собираем за полгода
	
	СписокПериодов = Новый СписокЗначений;
	ЗаполнитьСписокПериодов(СписокПериодов, НачалоПрошлогоПериода, ПределЗагрузки);
	
	Элемент = Элементы.ДатаНачала;
	
	// Чтобы избежать дублирования элементов, очищаем список выбора в поле формы
	Элемент.СписокВыбора.Очистить();
	УдалитьПроведенныеПериоды(СписокПериодов, Объект.ЛичныйКабинет, Объект.Ссылка,Объект.ТолькоВыкупы);
	Для каждого ЭлПериод Из СписокПериодов Цикл
		Элемент.СписокВыбора.Добавить(ЭлПериод.Значение, ЭлПериод.Представление);
	КонецЦикла;
			
	Если ЗначениеЗаполнено(Объект.ДатаВходящегоДокумента) Тогда
		ДатаНачала = НачалоНедели(Объект.ДатаВходящегоДокумента);
		Если ЭтоОзон тогда
			ДатаНачала = НачалоМесяца(Объект.ДатаВходящегоДокумента);
		ИначеЕсли ЭтоВБ Тогда
			ДатаНачала = НачалоНедели(Объект.ДатаВходящегоДокумента);
		ИначеЕсли ЭтоЯМ Тогда
			ДатаНачала = НачалоМесяца(Объект.ДатаВходящегоДокумента);
		КонецЕсли;
	Иначе
		ДатаНачала = НачалоПрошлогоПериода;
	КонецЕсли;
	
	ДатаНачала = Макс(ПределЗагрузки, ДатаНачала);
	
КонецПроцедуры


&НаСервереБезКонтекста
Процедура УдалитьПроведенныеПериоды(СписокПериодов, ЛичныйКабинет, Ссылка, ТолькоВыкупы = Ложь)
	
	Если ТолькоВыкупы Тогда // только озон выкупы - письмерова 30.08.2024 BSLR-3601
		
		Запрос = Новый Запрос;
		Запрос.Текст = 
			"ВЫБРАТЬ
			|	топ_ЗарузкаОтчетовКомиссионера.ДатаНачала КАК ДатаНачала
			|ИЗ
			|	Документ.топ_ЗарузкаОтчетовКомиссионера КАК топ_ЗарузкаОтчетовКомиссионера
			|ГДЕ
			|	топ_ЗарузкаОтчетовКомиссионера.ДатаНачала В(&ДатаНачала)
			|	И топ_ЗарузкаОтчетовКомиссионера.ЛичныйКабинет = &ЛичныйКабинет
			|	И топ_ЗарузкаОтчетовКомиссионера.Проведен
			|	И топ_ЗарузкаОтчетовКомиссионера.ТолькоВыкупы
			|	И топ_ЗарузкаОтчетовКомиссионера.Ссылка <> &Ссылка
			| 
			|СГРУППИРОВАТЬ ПО
			|	топ_ЗарузкаОтчетовКомиссионера.ДатаНачала";
		
		Запрос.УстановитьПараметр("ДатаНачала", СписокПериодов);
		Запрос.УстановитьПараметр("ЛичныйКабинет", ЛичныйКабинет);
		Запрос.УстановитьПараметр("Ссылка", Ссылка);
		
		РезультатЗапроса = Запрос.Выполнить();
		
		Выборка = РезультатЗапроса.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			НайденныйЭлемент = СписокПериодов.НайтиПоЗначению(Выборка.ДатаНачала);
			Если Выборка.ДатаНачала <> Ссылка.ДатаНачала Тогда
				СписокПериодов.Удалить(НайденныйЭлемент);
			КонецЕсли;
		КонецЦикла;
		
	Иначе // общие код для всех  BSLR-3601
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	топ_ЗарузкаОтчетовКомиссионера.ДатаНачала КАК ДатаНачала
		|ИЗ
		|	Документ.топ_ЗарузкаОтчетовКомиссионера КАК топ_ЗарузкаОтчетовКомиссионера
		|ГДЕ
		|	топ_ЗарузкаОтчетовКомиссионера.ДатаНачала В(&ДатаНачала)
		|	И топ_ЗарузкаОтчетовКомиссионера.ЛичныйКабинет = &ЛичныйКабинет
		|	И топ_ЗарузкаОтчетовКомиссионера.Проведен
		|	И топ_ЗарузкаОтчетовКомиссионера.Ссылка <> &Ссылка
		// письмерова 17.09.2024 BSLR-3601
		|	И НЕ топ_ЗарузкаОтчетовКомиссионера.ТолькоВыкупы 
		| 
		// письмерова 30.05.2023 BSLR-1984
		|СГРУППИРОВАТЬ ПО
		|	топ_ЗарузкаОтчетовКомиссионера.ДатаНачала";
	
	Запрос.УстановитьПараметр("ДатаНачала", СписокПериодов);
	Запрос.УстановитьПараметр("ЛичныйКабинет", ЛичныйКабинет);
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		НайденныйЭлемент = СписокПериодов.НайтиПоЗначению(Выборка.ДатаНачала);
		// письмерова 19.04.2023 BSLR-1758
		Если Выборка.ДатаНачала <> Ссылка.ДатаНачала Тогда
			СписокПериодов.Удалить(НайденныйЭлемент);
		КонецЕсли;
	КонецЦикла;
	КонецЕсли; // BSLR-3601
	
КонецПроцедуры

&НаКлиенте
Процедура ПериодПриИзменении(Элемент)  
	Объект.Компенсации.Очистить(); //Крупа BSLR-5157
	Объект.ДатаНачала = НачалоДня(Период.ДатаНачала);
	Объект.ДатаОкончания = КонецДня(Период.ДатаОкончания);
	УстановитьВидимостьДоступность(); 
	// письмерова 11.12.2025 BSLR-5126
	Если ЗначениеЗаполнено(Объект.ДатаОкончания) ТОгда
		ЗначениеОсновнойСтавкиНДС = топ_ОбщийВызовСервера.ЗначениеОсновнойСтакиНДС(Объект.ДатаОкончания);
	КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ДатаНачала()
	Возврат Объект.Ссылка.ДатаНачала;
КонецФункции

&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)
	СтараяДатаНач = ДатаНачала();
	если НЕ Объект.ДатаНачала = СтараяДатаНач тогда
		Если Объект.Товары.Количество() или Объект.Услуги.Количество() или Объект.Выкуп.Количество() или Объект.Компенсации.Количество() Тогда  //Крупа BSLR-5157
			ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеДаты", ЭтаФорма, СтараяДатаНач);
			ПоказатьВопрос(ОписаниеОповещения, "При смене периода таблицы будут очищены, изменить период?", РежимДиалогаВопрос.ДаНет);
		КонецЕсли;
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Или 
			Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
			Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
			Период.ДатаНачала = Объект.ДатаНачала;
			//Период.ДатаОкончания = КонецМесяца(Объект.ДатаНачала); BSLR-3601
			Если Не Объект.ТолькоВыкупы Тогда
				Период.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
			Иначе
				Период.ДатаОкончания = ?(День(Объект.ДатаНачала) >1, КонецМесяца(Объект.ДатаНачала), (Объект.ДатаНачала+ 14*24*60*60 ));
				Объект.ДатаОкончания = Период.ДатаОкончания;
			КонецЕсли;
		ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
			// письмерова 11.01.2024 BSLR-3066
			// заглушка для последней недели 2023 года
			// вместо недели два периода 25.12-27.12 и 28.12.-31.12 
			Если Объект.ДатаНачала = Дата(2023,12,25) Тогда
				Объект.ДатаОкончания = Дата(2023,12,27);
				Период.ДатаНачала = Объект.ДатаНачала;
				Период.ДатаОкончания = Объект.ДатаОкончания;
			ИначеЕсли Объект.ДатаНачала = Дата(2023,12,28) Тогда
				Объект.ДатаОкончания = Дата(2023,12,31);
				Период.ДатаНачала = Объект.ДатаНачала;
				Период.ДатаОкончания = Объект.ДатаОкончания; 
			// BSLR-5212
			ИначеЕсли Объект.ДатаНачала = Дата(2025,12,29) Тогда
				Объект.ДатаОкончания = Дата(2025,12,31);
				Период.ДатаНачала = Объект.ДатаНачала;
				Период.ДатаОкончания = Объект.ДатаОкончания;
			ИначеЕсли Объект.ДатаНачала = Дата(2026,1,1) Тогда
				Объект.ДатаОкончания = Дата(2026,1,4);
				Период.ДатаНачала = Объект.ДатаНачала;
				Период.ДатаОкончания = Объект.ДатаОкончания; 

			Иначе
				Объект.ДатаОкончания = КонецНедели(Объект.ДатаНачала);
				Период.ДатаНачала = Объект.ДатаНачала;
				Период.ДатаОкончания = КонецНедели(Объект.ДатаНачала); 
			КонецЕсли;
		ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
			Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
			Период.ДатаНачала = Объект.ДатаНачала;
			Период.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
		КонецЕсли; 
	Иначе //письмерова 11.01.2024 BSLR-3066
		Объект.ДатаОкончания = Период.ДатаОкончания;		
	КонецЕсли; 
	
	// письмерова 03.12.2024 BSLR-3621
	Объект.ДатаТиповыхДокументов = Объект.ДатаОкончания;
	
	УстановитьВидимостьДоступность();
	// письмерова 11.12.2025 BSLR-5126
	Если ЗначениеЗаполнено(Объект.ДатаОкончания) ТОгда
		ЗначениеОсновнойСтавкиНДС = топ_ОбщийВызовСервера.ЗначениеОсновнойСтакиНДС(Объект.ДатаОкончания);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеДаты(Результат, СтараяДатаНач) Экспорт
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Объект.ДатаНачала = СтараяДатаНач;
	КонецЕсли;
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Товары.Очистить();
		Объект.Услуги.Очистить();
		//LAShadrin 28/03/23 
		Объект.Выкуп.Очистить(); 
		// Крупа BSLR-5157
		Объект.Компенсации.Очистить();
	
	КонецЕсли;
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Или
		Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
		Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
		Период.ДатаНачала = Объект.ДатаНачала;
		Период.ДатаНачала = КонецМесяца(Объект.ДатаНачала);
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		Объект.ДатаОкончания = КонецНедели(Объект.ДатаНачала);
		Период.ДатаНачала = Объект.ДатаНачала;
		Период.ДатаНачала = КонецНедели(Объект.ДатаНачала);
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда
		Объект.ДатаОкончания = КонецМесяца(Объект.ДатаНачала);
		Период.ДатаНачала = Объект.ДатаНачала;
		Период.ДатаНачала = КонецМесяца(Объект.ДатаНачала);
	КонецЕсли;
	УстановитьВидимостьДоступность();
КонецПроцедуры

&НаСервере
Функция ЛичныйКабинетПриИзмененииНаСервере(ЛичныйКабинет)

	стрРезультат = новый Структура;
	стрРезультат.Вставить("Отказ", Ложь);
	
	если ЛичныйКабинет.ПометкаУдаления тогда
		стрРезультат.Вставить("ПометкаУдаления",истина);
	КонецЕсли;
	
	если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON тогда	
		
		стрРезультат.Вставить("Клиент", Объект.ЛичныйКабинет.ID_Поставщика);
		стрРезультат.Вставить("Токен", Объект.ЛичныйКабинет.API_Key);
		стрРезультат.Вставить("Токен2","");  
		Если топ_УТсервер.ПолучитьСкладДляВыкупов(Объект.ЛичныйКабинет) = Справочники.Склады.ПустаяСсылка() ТОгда // BSLR-4537, BSLR-4616
			ОбщегоНазначения.СообщитьПользователю("Не удалось определить склад для выкупов, заполните реквизит ""Склад"" в личном кабинете, на вкладке ""Отчет комиссионера""");
		КонецЕсли; 
	ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries тогда	
		
		стрРезультат.Вставить("Клиент", Объект.ЛичныйКабинет.ID_Поставщика_WB);
		Если Объект.ЛичныйКабинет.ИспользоватьНовыйAPIWB Тогда
			стрРезультат.Вставить("Токен", Объект.ЛичныйКабинет.API_Key_СтатистикаNEW);	
		Иначе
			стрРезультат.Вставить("Токен", Объект.ЛичныйКабинет.API_Key_Статистика); 
		КонецЕсли;
		стрРезультат.Вставить("Токен2", Объект.ЛичныйКабинет.API_Key); 
		Если топ_УТсервер.ПолучитьСкладДляВыкупов(Объект.ЛичныйКабинет) = Справочники.Склады.ПустаяСсылка() ТОгда // BSLR-4537, BSLR-4616
			ОбщегоНазначения.СообщитьПользователю("Не удалось определить склад для выкупов, заполните реквизит ""Склад"" в личном кабинете, на вкладке ""Отчет комиссионера""");
		КонецЕсли; 
	ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет тогда	
		// письмерова 14.01.2025 BSLR-4190	
		Если ЛичныйКабинет.СхемаРаботыЯндексМаркет = Перечисления.топ_СхемыРаботыЯМ.Агентская Тогда
			стрРезультат.Отказ = Истина;
		КонецЕсли;
		стрРезультат.Вставить("Клиент", "ЯМ");
		стрРезультат.Вставить("Токен", "ЯМ"); 
		стрРезультат.Вставить("Токен2", "ЯМ");
		
	ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет Тогда
         //  не нужен, т.к. пока только загрузка из файлов
		стрРезультат.Вставить("Клиент", "123");
		стрРезультат.Вставить("Токен", "");
		стрРезультат.Вставить("Токен2","");
	Иначе // письмерова
		стрРезультат.Вставить("Клиент", "123");
		стрРезультат.Вставить("Токен", "");
		стрРезультат.Вставить("Токен2","");
	КонецЕсли;
	стрРезультат.Вставить("Маркетплейс",ЛичныйКабинет.ТорговаяПлощадка);
	// ++ Куряев 20.12.2023 BSLR-2824
	Если ЛичныйКабинет.ТорговаяПлощадка <> Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет Тогда
		КоличествоДублейШК = топ_ОбщийВызовСервера.НайтиДублиШтрихкодовСервер(Объект.ЛичныйКабинет);
		Если КоличествоДублейШК > 0 Тогда
			ОбщегоНазначения.СообщитьПользователю("Найдены дубли штрихкодов товаров. Перейдите на форму товаров торговых площадок и удалите дубли");
		КонецЕсли;
	КонецЕсли;
	// Куряев 20.12.2023 BSLR-2824
	Возврат стрРезультат;
КонецФункции

&НаКлиенте
Процедура ЛичныйКабинетПриИзменении(Элемент)
	
	ОчиститьСообщения(); // письмерова 30.01.2024 BSLR-3146
		
	значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
	если значенияКТ.Свойство("ПометкаУдаления") тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Нельзя выбрать личный кабинет, помеченный на удаление";
		сообщение.Сообщить();
		объект.ЛичныйКабинет = Неопределено;
		Возврат; 
	КонецЕсли;
	
	если значенияКТ.Отказ тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Загрузка отчетов комиссионера не предусмотрена по агентской схеме. Для выполнения данной операции измените в настройках личного кабинета схему на ""Работа по отчету комиссионера""";
		сообщение.Сообщить();
		объект.ЛичныйКабинет = Неопределено;
		Возврат; 
	КонецЕсли;
	
	Если ЗначениеЗаполнено(объект.ЛичныйКабинет) тогда
		//СтарыйЛК = ЛичныйКабинет();  - письмерова 12.02.2024 BSLR-3227
		если НЕ Объект.ЛичныйКабинет = ТекущийЛК  тогда // письмерова 12.02.2024 BSLR-3227
			Если Объект.Товары.Количество() или Объект.Услуги.Количество() или Объект.Выкуп.Количество() Или Объект.ПеревыставлениеУслуг.Количество()Тогда  // BSLR-4203
				ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеЛК", ЭтаФорма, ТекущийЛК);// письмерова 12.02.2024 BSLR-3227
				ПоказатьВопрос(ОписаниеОповещения, "При смене личного кабинета таблицы будут очищены изменить личный кабинет?", РежимДиалогаВопрос.ДаНет);
			иначе
				Объект.ДатаНачала = дата('0001.01.01 00:00:00');
				Объект.ДатаОкончания = дата('0001.01.01 00:00:00');
				// письмерова 12.02.2024 BSLR-3227	
				ТекущийЛК = Объект.ЛичныйКабинет;	
				Клиент = значенияКТ.Клиент;
				Токен =  значенияКТ.Токен; 
				Токен2 = значенияКТ.Токен2;
				Маркетплейс = значенияКТ.Маркетплейс;			
				УстановитьПериод();
			КонецЕсли;
		Иначе
			ТекущийЛК = Объект.ЛичныйКабинет; // письмерова 12.02.2024 BSLR-3227	
			Клиент = значенияКТ.Клиент;
			Токен =  значенияКТ.Токен; 
			Токен2 = значенияКТ.Токен2;
			Маркетплейс = значенияКТ.Маркетплейс;			
			УстановитьПериод(); 
		КонецЕсли;
	КонецЕсли;
		    
	УстановитьВидимостьДоступность();
		
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыПриСменеЛК(Результат, СтарыйЛК) Экспорт
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Объект.ЛичныйКабинет = ТекущийЛК;// письмерова 12.02.2024 BSLR-3227
		Если ЗначениеЗаполнено(Объект.ЛичныйКабинет) Тогда
			значенияКТ = ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет);
			Клиент = значенияКТ.Клиент;
			Токен =  значенияКТ.Токен; 
			Токен2 = значенияКТ.Токен2;
			Маркетплейс = значенияКТ.Маркетплейс;
			УстановитьПериод(); 
		Иначе
			Клиент = значенияКТ.Клиент;
			Токен =  значенияКТ.Токен; 
			Токен2 = значенияКТ.Токен2;
			Маркетплейс = значенияКТ.Маркетплейс;			
	    КонецЕсли;
	КонецЕсли;
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.ДатаНачала = дата('0001.01.01 00:00:00');
		Объект.ДатаОкончания = дата('0001.01.01 00:00:00');
		Объект.Товары.Очистить();
		Объект.Услуги.Очистить(); 
		//BSLR-4203
		Объект.Выкуп.Очистить();
		ОчиститьСсылкиНаДокументыНаСервере();
		Объект.ПеревыставлениеУслуг.Очистить(); 
		УстановитьПериод();//письмерова 11.01.2024 BSLR-3066
		ТекущийЛК = Объект.ЛичныйКабинет; // письмерова 12.02.2024 BSLR-3227 
		
		//BSLR-3639, Чупраков А.Н., 02.07.24
		значенияКТ 	= ЛичныйКабинетПриИзмененииНаСервере(Объект.ЛичныйКабинет); 
		Маркетплейс = значенияКТ.Маркетплейс;
		
	КонецЕсли; 
	
	УстановитьВидимостьДоступность(); 
	
КонецПроцедуры

// письмерова 30.01.2026 BSLR-5255
&НаКлиенте
Процедура ЗаменитьСсылку(Команда)
	
	ТекущиеДанные = Элементы.ТаблицаДокументов.ТекущиеДанные;
	
	Если СтрНайти(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя" ) > 0 ТОгда
		ТекущиеДанные.ДокументНавигационнаяСсылка = СтрЗаменить(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя", "СписаниеОтгруженныхТоваров"); 
		ТекущиеДанные.ДокументУИД = СтрЗаменить(ТекущиеДанные.ДокументУИД,"Отчет о списании товаров у комиссионера", "Списание товаров, отгруженных комиссионеру"); 
	Иначе
		ОбщегоНазначенияКлиент.СообщитьПользователю("Выберете строку с документом ""Отчет о списании товаров у комиссионера"", 
														|для других видов документов замена ссылки не предусмотрена.");
	КонецЕсли;
	
КонецПроцедуры

// письмерова 08.05.2026 BSLR-5340
&НаКлиенте
Процедура ЗаменитьСсылкуДерево(Команда)
	
	ТекущиеДанные = Элементы.ДеревоДокументов.ТекущиеДанные;
	
	Если СтрНайти(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя" ) > 0 ТОгда
		ТекущиеДанные.ДокументНавигационнаяСсылка = СтрЗаменить(ТекущиеДанные.ДокументНавигационнаяСсылка,"ОтчетОСписанииТоваровУХранителя", "СписаниеОтгруженныхТоваров"); 
		ТекущиеДанные.ДокументУИД = СтрЗаменить(ТекущиеДанные.ДокументУИД,"Отчет о списании товаров у комиссионера", "Списание товаров, отгруженных комиссионеру"); 
	Иначе
		ОбщегоНазначенияКлиент.СообщитьПользователю("Выберете строку с документом ""Отчет о списании товаров у комиссионера"", 
														|для других видов документов замена ссылки не предусмотрена.");
	КонецЕсли;
	
КонецПроцедуры


#область загрузкаПоАПИ

&НаСервереБезКонтекста
Функция проверитьНаличиеДокументовПоВБ(ДатаНачала,ДатаОкончания,ЛичныйКабинет)
	результат = новый Структура("ЕстьДокументы, Сообщение",
								ложь,			"");
	запрос = новый запрос;
		запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
		               |	топ_ЗарузкаОтчетовКомиссионера.Ссылка КАК Ссылка
		               |ИЗ
		               |	Документ.топ_ЗарузкаОтчетовКомиссионера КАК топ_ЗарузкаОтчетовКомиссионера
		               |ГДЕ
		               |	топ_ЗарузкаОтчетовКомиссионера.Проведен = ИСТИНА
		               |	И топ_ЗарузкаОтчетовКомиссионера.ДатаНачала = &ДатаНачала
		               |	И топ_ЗарузкаОтчетовКомиссионера.ДатаОкончания = &ДатаОкончания
		               |	И топ_ЗарузкаОтчетовКомиссионера.ЛичныйКабинет = &ЛичныйКабинет";
		запрос.УстановитьПараметр("ДатаНачала",ДатаНачала);
		запрос.УстановитьПараметр("ДатаОкончания",ДатаОкончания);
		запрос.УстановитьПараметр("ЛичныйКабинет",ЛичныйКабинет);
		РезультатЗапроса=запрос.Выполнить().Выгрузить();
		если РезультатЗапроса.Количество() тогда
	     	результат.ЕстьДокументы = Истина;
			результат.Сообщение = "За период с " + строка(ДатаНачала) + " по " + строка(ДатаОкончания)+ 
			" уже есть проведённый долкумент Зарузка отчетов комиссионера " + строка(РезультатЗапроса[0].Ссылка) +
			" перезаполните его, или распроведите.";
		КонецЕсли;
	Возврат результат;
КонецФункции

&НаКлиенте
Процедура ЗагрузитьДанныеAPI(Команда)
	
	ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
	ЭтоWB = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries");
	ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON");
	ИспользуютсяЮЛ = ЭтоЯМ ИЛИ ЭтоОзон;
	ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
	
	Если ИспользуютсяЮЛ И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Группа доступа партнера";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	если (не ЗначениеЗаполнено(Объект.ДатаНачала)) или (не ЗначениеЗаполнено(Объект.ДатаОкончания)) тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Период";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	если не ЗначениеЗаполнено(Объект.ЛичныйКабинет)тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Выберите Личный Кабинет";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	Если Объект.ДатаНачала > Объект.ДатаОкончания Тогда
		ВременнаяПеременная = Объект.ДатаНачала;
		Объект.ДатаНачала          = Объект.ДатаОкончания;
		Объект.ДатаОкончания       = ВременнаяПеременная;   
	КонецЕсли;
	//проверим чтоб для WB период был неделя и небыло уже проведённых документов за эту неделю
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		РезультатПроверки=проверитьНаличиеДокументовПоВБ(Объект.ДатаНачала,Объект.ДатаОкончания,Объект.ЛичныйКабинет);
		если РезультатПроверки.ЕстьДокументы тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверки.Сообщение);
			Возврат;
		КонецЕсли;
	КонецЕсли;
	ПараметрыЗапуска = Новый Структура;
	ПараметрыЗапуска.Вставить("Клиент",             Клиент);
	ПараметрыЗапуска.Вставить("Токен",              Токен);
	ПараметрыЗапуска.Вставить("Токен2",				Токен2);
	ПараметрыЗапуска.Вставить("ДатаНачала",         НачалоДня(Объект.ДатаНачала));//Объект.ДатаНачала);
	ПараметрыЗапуска.Вставить("ДатаОкончания",      КонецДня(Объект.ДатаОкончания)); //Объект.ДатаОкончания);
	ПараметрыЗапуска.Вставить("СуммаУслугХранения", Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты);
	ПараметрыЗапуска.Вставить("ЛичныйКабинет",		Объект.ЛичныйКабинет);  
	ПараметрыЗапуска.Вставить("ВыгружатьДетализацию", Объект.ВыгужатьДетализациюWB_Excel);//Lashadrin BSLR-1338
	ПараметрыЗапуска.Вставить("МП",		Маркетплейс);
	
	ПараметрыЗапуска.Вставить("ПродажиВРБВПродажахРФ",		Объект.ПродажиВРБВПродажахРФ);
	ПараметрыЗапуска.Вставить("УдержатьСуммуДоставкиПриВыкупе",		Объект.УдержатьСуммуДоставкиПриВыкупе); 
	// письмерова 08.07.2024 BSLR-3667
	ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииИздержкиПоПеревозке",		Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке);
	ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииВесьЭкваринг",		Объект.ВключитьВСуммуКомиссииВесьЭкваринг); 
	
	СтруктураФоновогоЗадания 	= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ЗагрузитьДанныеОтчетКоммисионера(ПараметрыЗапуска, УникальныйИдентификатор);
	ИДЗадания 	= СтруктураФоновогоЗадания.ИдентификаторЗадания;
	
	ПараметрыОжидания 	= ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
	ПараметрыОжидания.Интервал  = 2;
	
	ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ПослеВыполненияКомандыВФоне", ЭтотОбъект), ПараметрыОжидания);

КонецПроцедуры

&НаКлиенте
Процедура ПослеВыполненияКомандыВФоне(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		
		Если Результат.Статус = "Выполнено" Тогда  //получили результат
			
			// письмерова 16.04.2026 BSLR-5483
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
				
				ОбработатьРезультатЗагрузкиУслугНаСервере(Результат.АдресРезультата);
				
			Иначе // BSLR-5483
			
			РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
			// письмерова 12.09.2023 BSLR-2566
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") ТОгда  
				
				Если РезультатВыполнения.Ошибка Тогда
					ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
							БиблиотекаКартинок.Ошибка32,
							СтатусОповещенияПользователя.Информация);
				Иначе
					Если РезультатВыполнения.ИДОтчета <> "" ТОгда // все норм			
						// получили только ссылку на отчет 
						ИДОтчета = РезультатВыполнения.ИДОтчета;
						Таймаут = РезультатВыполнения.Таймаут; 
						УстановитьВидимостьДоступность(); 
						
						ПоказатьПредупреждение(Новый ОписаниеОповещения("ПослеЗапросаГенерацииОтчета",ЭтотОбъект),"Получена ссылка на отчет, скачивание начнется через 10 с, не закрывайте документ.",10);
					Иначе // нет ИД отчета
						ПоказатьОповещениеПользователя(,,"Не получен ID отчета, попробуйте загрузить данные позже.",
							БиблиотекаКартинок.Ошибка32,
							СтатусОповещенияПользователя.Информация);
					КонецЕсли;	
				КонецЕсли;
			Иначе // обычная схема для всех
			
			Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
				Если НЕ РезультатВыполнения.Ошибка тогда //проверим на ошибку в результате
					Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
						ОбновитьДанныеФормыНаКлиенте(РезультатВыполнения, ДополнительныеПараметры);
						
						Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
							ОбновитьДанныеФормыНаКлиенте_Выкуп(РезультатВыполнения, ДополнительныеПараметры);
						КонецЕсли;
						
						Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
							ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
							БиблиотекаКартинок.Предупреждение32,
							СтатусОповещенияПользователя.Информация);
						КонецЕсли;
						ЭтаФорма.Модифицированность = Истина; 
					КонецЕсли;
				иначе // в результате ошибка
				    ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
					БиблиотекаКартинок.Информация,
					СтатусОповещенияПользователя.Информация);
				КонецЕсли;
				
			КонецЕсли;
			
			КонецЕсли; // типовая схема для всех
			УдалитьИзВременногоХранилища(Результат.АдресРезультата); 
			
			КонецЕсли; // BSLR-5483
			
		ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
			ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
				БиблиотекаКартинок.Ошибка32,
				СтатусОповещенияПользователя.Информация);
		КонецЕсли;
		
	КонецЕсли; 
	
	// письмерова 09.11.2023 BSLR-2599
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда 
		Если ЕстьПродажиЮЛ() Тогда
			ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеДанныхЮЛ", ЭтаФорма);
			ПоказатьВопрос(ОписаниеОповещения, "Таблица заказов загружена, обнаружены продажи юридическим лицам. Загрузить данные о юридических лицах?", РежимДиалогаВопрос.ДаНет,600);
		КонецЕсли;
	КонецЕсли; 
	
	// письмерова 02.09.2025 BSLR-4698
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") ТОгда
		Если ЕстьПродажиЮЛ() Тогда 
			ОбщегоНазначенияКлиент.СообщитьПользователю("Есть продажи юр.лицам за период, загрузите данные по продажам юр.лицам");
		КонецЕсли;
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыполненияКомандыВФоне_Выкуп(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		
		Если Результат.Статус = "Выполнено" Тогда  //получили результат
			
			РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
			Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
				Если НЕ РезультатВыполнения.Ошибка тогда //проверим на ошибку в результате
					Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
					ОбновитьДанныеФормыНаКлиенте_Выкуп(РезультатВыполнения, ДополнительныеПараметры);   
					Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
						ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
							БиблиотекаКартинок.Предупреждение32,
							СтатусОповещенияПользователя.Информация);
					КонецЕсли;
					
				КонецЕсли;
				иначе // в результате ошибка
				    ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
					БиблиотекаКартинок.Информация,
					СтатусОповещенияПользователя.Информация);
				КонецЕсли;
				
			КонецЕсли;
			УдалитьИзВременногоХранилища(Результат.АдресРезультата); 
		ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
			ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
				БиблиотекаКартинок.Ошибка32,
				СтатусОповещенияПользователя.Информация);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры


// только ЯМ, письмерова 12.09.2023 BSLR-2566
&НаКлиенте
Процедура ПослеЗапросаГенерацииОтчета(Результат)Экспорт 
	
	ПараметрыЗапуска = Новый Структура;
	ПараметрыЗапуска.Вставить("Клиент",             Клиент);
	ПараметрыЗапуска.Вставить("Токен",              Токен);
	ПараметрыЗапуска.Вставить("Токен2",				Токен2);
	ПараметрыЗапуска.Вставить("ДатаНачала",         НачалоДня(Объект.ДатаНачала));
	ПараметрыЗапуска.Вставить("ДатаОкончания",      КонецДня(Объект.ДатаОкончания)); 
	ПараметрыЗапуска.Вставить("СуммаУслугХранения", Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты);
	ПараметрыЗапуска.Вставить("ЛичныйКабинет",		Объект.ЛичныйКабинет);  
	ПараметрыЗапуска.Вставить("МП",					Маркетплейс);   
	ПараметрыЗапуска.Вставить("ИДОтчета",			ИДОтчета);
	
	СтруктураФоновогоЗадания 	= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ЗапроситьДанныеОтчетаРеализации(ПараметрыЗапуска, УникальныйИдентификатор);
	ИДЗадания 	= СтруктураФоновогоЗадания.ИдентификаторЗадания;
	
	ПараметрыОжидания 	= ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
	ПараметрыОжидания.Интервал  = 2;
	
	ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ПослеВыполненияЗапросаОтчета", ЭтотОбъект), ПараметрыОжидания);
	
КонецПроцедуры 

&НаКлиенте
Процедура ПослеВыполненияЗапросаОтчета(Результат,ДополнительныеПараметры)Экспорт
	
	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		
		Если Результат.Статус = "Выполнено" Тогда  //получили результат
			РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата);
			
			Если РезультатВыполнения.Ошибка Тогда
				ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
						БиблиотекаКартинок.Ошибка32,
						СтатусОповещенияПользователя.Информация);
			Иначе
			    // получить сам файл по ссылке
				Элементы.СсылкаНаСтрОтчета.Заголовок = РезультатВыполнения.СсылкаНаОтчет;
				УстановитьВидимостьДоступность();
				
				Если РезультатВыполнения.СсылкаНаОтчет <> "" И РезультатВыполнения.СсылкаНаОтчет <> Неопределено ТОгда // письмерова 27.06.2024 BSLR-3615
					ЗагрузитьФайлИзИнтернета(РезультатВыполнения.СсылкаНаОтчет);
				Иначе // ссылки на файл нет
					ПоказатьОповещениеПользователя(,,"Ссылка на отчет не получена, попробуйте еще раз запросить отчет по ID.",
													БиблиотекаКартинок.Ошибка32,
													СтатусОповещенияПользователя.Информация);
				КонецЕсли; 
			КонецЕсли;								
			УдалитьИзВременногоХранилища(Результат.АдресРезультата);
			
		ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
			ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
				БиблиотекаКартинок.Ошибка32,
				СтатусОповещенияПользователя.Информация);
		КонецЕсли;
	КонецЕсли; 
	
КонецПроцедуры

&НаКлиенте
Процедура ЗапроситьОтчетПоИД(Команда)
	ПослеЗапросаГенерацииОтчета(Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура СкачатьОтчетПоСсылке(Команда) 
	//отладка
	//АдресФайлаВИнтернете = "https://market-mbi-prod.s3-private.mds.yandex.net/statistics-reports/954830/2023-08/statistics-report-2023-08.xlsx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230912T114033Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=dSfBeaHjSm6fhdzUohgK%2F20230912%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=1e6e85ffc7cf4035fe9499ea813f66e390106365226eac43145cd92e0a75ff39";	
	Если Элементы.СсылкаНаСтрОтчета.Заголовок <> "" ТОгда
		
		АдресФайлаВИнтернете = Элементы.СсылкаНаСтрОтчета.Заголовок;  
		ЗагрузитьФайлИзИнтернета(АдресФайлаВИнтернете);
		
	Иначе
		ПоказатьОповещениеПользователя(,,"Ссылка на отчет не получена, попробуйте еще раз запросить отчет по ID.",
												БиблиотекаКартинок.Ошибка32,
												СтатусОповещенияПользователя.Информация);	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте	
Процедура ЗагрузитьФайлИзИнтернета(АдресФайлаВИнтернете)
	
	АдресФайлаНаКлиенте = ПолучитьИмяВременногоФайла("xlsx");
	Если Найти(НРег(АдресФайлаВИнтернете),"https://") = 1 Тогда
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
	Иначе
		ЗащищенноеСоединение = Неопределено;
	КонецЕсли;
	
	// "http://static.1c.ru/images/logo.png" -> "static.1c.ru/images/logo.png"
	АдресБезHTTP = СтрЗаменить(АдресФайлаВИнтернете, "//", Символы.ПС);
	АдресБезHTTP = СтрПолучитьСтроку(АдресБезHTTP, СтрЧислоСтрок(АдресБезHTTP));
	
	// "static.1c.ru/images/logo.png" -> "static.1c.ru"
	АдресСервера = СтрПолучитьСтроку(СтрЗаменить(АдресБезHTTP, "/", Символы.ПС), 1);
	
	// "static.1c.ru/images/logo.png" -> "/images/logo.png"
	ПутьКФайлуВнутриДомена = Сред(АдресБезHTTP, Найти(АдресБезHTTP, "/"));
	
	// скачиваем на диск
	Соединение = Новый HTTPСоединение(АдресСервера, ,,,, 3, ЗащищенноеСоединение);
	Соединение.Получить(ПутьКФайлуВнутриДомена, АдресФайлаНаКлиенте);  
	
	Файл = Новый Файл(АдресФайлаНаКлиенте); 	
	Результат = Новый Структура("Адрес, ПомещениеФайлаОтменено,СсылкаНаФайл","",Ложь,
						Новый Структура("ИдентификаторФайла,Имя,Расширение,Файл","",Файл.Имя,Файл.Расширение,""));
						
	// переход в загрузку из эксель типовую 
	Результат.Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(АдресФайлаНаКлиенте));
	ВыполнитьЗагрузку(Результат,Ложь);
	
КонецПроцедуры
 // только ЯМ конец

#КонецОбласти


#область ЗагрузкаИзЭксельOzon

&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
    // письмерова 18.06.2024 BSLR-3588
	ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
	ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON"); 
	ИспользуютсяЮЛ = ЭтоЯМ ИЛИ ЭтоОзон;
	ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
	Если ИспользуютсяЮЛ И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Группа доступа партнера";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	Если НЕ ЗначениеЗаполнено(Период) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
		Возврат;
	КонецЕсли;
	
	Если Объект.Товары.Количество() или Объект.Услуги.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицы", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблицы не пустые. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
	иначе
		ВыполнитьЗагрузкуЧерезФайл();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицы(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Товары.Очистить();
		Объект.Услуги.Очистить();
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайл();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайл(ЭтоВыкупы = Ложь) 
	
	Попытка
		// Бойков BSLR-3406
		ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
		ПараметрыДиалога.МножественныйВыбор = Ложь;
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
			ПараметрыДиалога.Фильтр = "ZIP-архив|*.zip";
		Иначе
			ПараметрыДиалога.Фильтр = "Excel (*.xls;*.xlsx;*.ods)|*.xls;*.xlsx;*.ods";
		КонецЕсли;
		НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузку",ЭтаФорма,ЭтоВыкупы),,,, ПараметрыДиалога,новый УникальныйИдентификатор);
	Исключение
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
	КонецПопытки;  
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузку(Результат,ЭтоВыкупы) Экспорт 
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	Сообщить("Начало загрузки: " + ТекущаяДата());// BSLR-5483 - удалить
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		РезультатВыполнения = ЗагрузитьНаСервереOzon(Результат.Адрес, РасширениеФайла,ЭтоВыкупы);
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда 
		РезультатВыполнения = ЗагрузитьНаСервереWB(Результат.Адрес, РасширениеФайла, ЭтоВыкупы);
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда 
		РезультатВыполнения = ЗагрузитьНаСервереЯМ(Результат.Адрес, РасширениеФайла, ЭтоВыкупы); 
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда 
		РезультатВыполнения = ЗагрузитьНаСервереСберМегаМаркет(Результат.Адрес, РасширениеФайла, ЭтоВыкупы);  
	КонецЕсли;
	
	Если НЕ РезультатВыполнения.Ошибка Тогда
		
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		Сообщить("окончание загрузки: " + ТекущаяДата());// BSLR-5483 - удалить
			ЗагрузитьДанныеAPI(Неопределено); 
		Иначе
			ПослеЗагрузкиТоваровИзExcel(РезультатВыполнения, ЭтоВыкупы);  // 
		КонецЕсли;
		
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") И НЕ ЭтоВыкупы Тогда
			ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыВыкупов", ЭтаФорма);
			ПоказатьВопрос(ОписаниеОповещения, "Таблица заказов загружена. Загрузить выкупы?", РежимДиалогаВопрос.ДаНет);
		КонецЕсли; 
		
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") И НЕ ЭтоВыкупы Тогда
			ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеЛояльности", ЭтаФорма);
			ПоказатьВопрос(ОписаниеОповещения, "Таблица заказов загружена. Загрузить данные о программе лояльности СберМегаМаркет?", РежимДиалогаВопрос.ДаНет);
		КонецЕсли;
		
		// письмерова 06.10.2025 BSLR-4895
		Если НЕ ЭтоВыкупы Тогда
			Если ЕстьПродажиЮЛ() Тогда 
				ОбщегоНазначенияКлиент.СообщитьПользователю("Есть продажи юр.лицам за период, загрузите данные по продажам юр.лицам");
			КонецЕсли;
		КонецЕсли;	
	Иначе
		Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
			Сообщить(РезультатВыполнения.Сообщение);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры  

// письмерова 21.08.2023 BSLR-2035
&НаКлиенте
Процедура ЗагрузитьДанныеЮЛ(Команда)
	
	ЭтоЯМ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет");
	ЭтоОзон = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON"); 
	// BSLR-4895 ++
	ЭтоВБ = Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries"); 
	ИспользуютсяЮЛ = ЭтоЯМ ИЛИ ЭтоОзон ИЛИ ЭтоВБ; // BSLR-4895 --
	ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
	
	Если ИспользуютсяЮЛ И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Группа доступа партнера";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	Если Объект.Товары.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеДанныхЮЛ", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Загрузить данные о юридических лицах?", РежимДиалогаВопрос.ДаНет);
	иначе
		Сообщить("Перед загрузкой данных по юридическим лицам нужно загрузить данные о продажах.");
	КонецЕсли;

КонецПроцедуры

// письмерова 09.11.2023 BSLR-2599
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеДанныхЮЛ(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Возврат;
	КонецЕсли; 
	
	Если ЕстьПродажиЮЛ() ТОгда 
		// BSLR-4895 ++
		Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда 	
			Попытка
				НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуДанныхЮЛ",ЭтаФорма, Истина),,,,,новый УникальныйИдентификатор); 
			Исключение
				ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
			КонецПопытки;
		Иначе 
			Попытка
				НачатьПомещениеФайловНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуРеестраЮЛ",ЭтаФорма)); 
			Исключение
				ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
			КонецПопытки;
		КонецЕсли;  // BSLR-4895 --
	Иначе
		Сообщить("Перед загрузкой данных по юридическим лицам нужно загрузить данные о продажах. Данные о продажах юр. лицам не обнаружены. Попробуйте повторно загрузить данные о продажах.");
	КонецЕсли;

КонецПроцедуры  

// письмерова 09.11.2023 BSLR-2599
&НаКлиенте
Процедура ВыполнитьЗагрузкуДанныхЮЛ(Результат,ЭтоВыкупы) Экспорт 
	
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		РезультатВыполнения = ЗагрузитьНаСервереOzon(Результат.Адрес, РасширениеФайла,ЭтоВыкупы);  
	КонецЕсли;
	
	Если НЕ РезультатВыполнения.Ошибка Тогда
		ПослеЗагрузкиТоваровИзExcel(РезультатВыполнения, ЭтоВыкупы);				
	Иначе
		Сообщить(РезультатВыполнения.Сообщение);
	КонецЕсли;
	
КонецПроцедуры  


&НаКлиенте
Процедура ПослеЗагрузкиТоваровИзExcel(РезультатВыполнения, ЭтоВыкупы = Ложь)
	
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") И ЭтоВыкупы Тогда 
		// не нужна доп обработка после загрузки лояльности 
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") И ЭтоВыкупы Тогда 
		// письмерова 21.08.2023 BSLR-2035
		// доп обработка после загрузки данных ЮЛ не нужна
	Иначе
		Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
			Если НЕ РезультатВыполнения.Ошибка тогда //проверим на ошибку в результате
				Если ЭтоВыкупы Тогда
					ОбновитьДанныеФормыНаКлиенте_Выкуп(РезультатВыполнения, , Истина);   
					Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
						ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
						БиблиотекаКартинок.Предупреждение32,
						СтатусОповещенияПользователя.Информация);
					КонецЕсли; 
				Иначе
					ОбновитьДанныеФормыНаКлиенте(РезультатВыполнения, , Истина);   
					Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
						ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
						БиблиотекаКартинок.Предупреждение32,
						СтатусОповещенияПользователя.Информация);
					КонецЕсли;
				КонецЕсли;	
			Иначе // в результате ошибка
				ПоказатьОповещениеПользователя(,,РезультатВыполнения.Сообщение,
				БиблиотекаКартинок.Информация,
				СтатусОповещенияПользователя.Информация);
			КонецЕсли; 	
		КонецЕсли;
	КонецЕсли;	
КонецПроцедуры

&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузки(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара продавца"));
	// ++ Стародубцев BSLR-5321, BSLR-5431 
	Результат.Вставить("sku",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара OZON"));
	Если Результат.sku = 0 Тогда
		Результат.Вставить("sku", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU"));
	КонецЕсли;
	// -- Стародубцев BSLR-5321, BSLR-5431
	Результат.Вставить("ЦенаПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации")); 
	Результат.Вставить("СуммаДоплатыOzon",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Доплата за счет Ozon")); 
	Если Результат.СуммаДоплатыOzon = 0 Тогда
		Результат.Вставить("СуммаДоплатыOzon",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Баллы за скидки")); // письмерова 07.11.2023 BSLR-2800
	КонецЕсли;
	Результат.Вставить("КомиссияПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого комиссия с учетом скидок и наценки")); 
	Если Результат.КомиссияПродажи = 0 Тогда
		Результат.Вставить("КомиссияПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовая комиссия, руб.")); // письмерова 07.11.2023 BSLR-2800 
	КонецЕсли;
	Если Результат.КомиссияПродажи = 0 Тогда
		Результат.Вставить("КомиссияПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовое вознаграждение Ozon, руб.")); // письмерова 07.02.2024 BSLR-3204 
	КонецЕсли;
	Результат.Вставить("КоличествоПродано",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во")); 
	// ++ Бойков BSLR-847
	//Результат.Вставить("СуммаДоплатыOzonВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Доплата за счет Ozon") + 9); 
	//Результат.Вставить("КоличествоВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во") + 9);
	//Результат.Вставить("КомиссияВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого комиссия с учетом скидок и наценки") + 11); 
	//Результат.Вставить("ЦенаВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации") + 8);
	Результат.Вставить("СуммаДоплатыOzonВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Доплата за счет Ozon", Результат.СуммаДоплатыOzon)); 
	Если Результат.СуммаДоплатыOzonВозврат = 0 Тогда
		Результат.Вставить("СуммаДоплатыOzonВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Баллы за скидки", Результат.СуммаДоплатыOzon)); // письмерова 07.11.2023 BSLR-2800
	КонецЕсли;	
	Результат.Вставить("КоличествоВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во", Результат.КоличествоПродано));
	Результат.Вставить("КомиссияВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого комиссия с учетом скидок и наценки", Результат.КомиссияПродажи)); 
	Если Результат.КомиссияВозврат = 0 Тогда
		Результат.Вставить("КомиссияВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовая комиссия, руб.", Результат.КомиссияПродажи));// письмерова 07.11.2023 BSLR-2800  
	КонецЕсли; 
	Если Результат.КомиссияВозврат = 0 Тогда
		Результат.Вставить("КомиссияВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Базовое вознаграждение Ozon, руб.", Результат.КомиссияПродажи));	// письмерова 07.02.2024 BSLR-3204
	КонецЕсли;
	Результат.Вставить("ЦенаВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации", Результат.ЦенаПродажи));
	// -- Бойков BSLR-847
	Результат.Вставить("Идентификатор",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара OZON")); 
	Результат.Вставить("ШтрихКод",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Штрих-код товара")); 
	Результат.Вставить("ИД_Заказ",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Номер")); 
	// ++ Бойков BSLR-847
	Результат.Вставить("УИН",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "UIN")); // Скорректировать имя поиска колонки
	// письмерова 18.08.2023 BSLR-2035 
	НомерСчФакт = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "счет-фактуры");
	Если НомерСчФакт = 0 Тогда
		НомерСчФакт = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "счета-фактуры"); 
	КонецЕсли;
	Результат.Вставить("НомерСчФакт", НомерСчФакт);											
	Результат.Вставить("ДатаСчФакт", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Дата"));
	Результат.Вставить("ИНН",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "ИНН")); 
	Результат.Вставить("НаименованиеПокупателя",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Наименование покупателя")); 
	Результат.Вставить("КПП",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "КПП"));
	Результат.Вставить("ЮридическийАдресПокупателя",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Юридический адрес покупателя")); 
	// письмерова 20.08.2024 BSLR-3677
	Результат.Вставить("ВыплатыЛояльности",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Выплаты по механикам лояльности")); 
	Результат.Вставить("ВыплатыЛояльностиВозврат",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Выплаты по механикам лояльности", Результат.КоличествоПродано));
	// письмерова 03.06.2025 BSLR-4648	
	Если Результат.Артикул = 0 Тогда
		Результат.Артикул = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"); 
	КонецЕсли;
	Если Результат.Идентификатор = 0 Тогда
		Результат.Идентификатор = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU"); 
	КонецЕсли;
	Возврат Результат;
	
КонецФункции

&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, СтрокаПоиска, НачальноеСмещение = 0)
	// Бойков BSLR-847. Увеличен диапазон колонок, UIN не попадал в прежний.
	// Добавлено начальное смещение для считывания колонок с одинаковым заголовком,
	// т.к. в разных версиях файлов положение колонок отличается
	НачальныйИндекс = 1 + НачальноеСмещение;
	Для сч = НачальныйИндекс по 50 Цикл 
		Если СтрокаПоиска = "ИНН" Тогда // 01.12.2025 письмерова BSLR-5123
			Если ВРЕГ(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст)) = ВРЕГ(СтрокаПоиска)
				Или ВРЕГ(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков+1) + "C" + сч).ТекущаяОбласть.Текст)) = ВРЕГ(СтрокаПоиска) Тогда
				Возврат сч;
				Прервать;
			КонецЕсли;
		Иначе	
			Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст), СтрокаПоиска) <> 0 
				Или СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков+1) + "C" + сч).ТекущаяОбласть.Текст), СтрокаПоиска) <> 0  Тогда
				Возврат сч;
				Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	Возврат 0;
КонецФункции

&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровOZON() Экспорт
	// письмерова 16.04.2026 BSLR-5483  - добавлена типизация колонок таблицы
	КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
	КвалификаторыЧисла  = Новый КвалификаторыЧисла(18,3);
	КвалификаторыДаты   = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя);
	
	ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
	ТипЧисла  = Новый ОписаниеТипов("Число"  ,,,  КвалификаторыЧисла );
	ТипДаты   = Новый ОписаниеТипов("Дата"   ,,,,,КвалификаторыДаты);
	
	СписокТоваров = Новый ТаблицаЗначений;
	
	СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки); 
	СписокТоваров.Колонки.Добавить("Наименование", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Идентификатор", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Артикул",ТипСтроки);
	СписокТоваров.Колонки.Добавить("ШтрихКод",ТипСтроки);
	СписокТоваров.Колонки.Добавить("Количество",ТипЧисла);
	СписокТоваров.Колонки.Добавить("Цена",ТипЧисла);
	СписокТоваров.Колонки.Добавить("Сумма",ТипЧисла); 
	СписокТоваров.Колонки.Добавить("СуммаДоплатыOzon",ТипЧисла);
	СписокТоваров.Колонки.Добавить("Комиссия",ТипЧисла);
	//СписокТоваров.Колонки.Добавить("НДС");
	СписокТоваров.Колонки.Добавить("ИД_Заказ",ТипСтроки);
	//++ Стародубцев BSLR-5321
	СписокТоваров.Колонки.Добавить("sku",ТипСтроки);
	//-- Стародубцев BSLR-5321
	СписокТоваров.Колонки.Добавить("УИН",ТипСтроки);
	СписокТоваров.Колонки.Добавить("НомерСчФакт",ТипСтроки);// письмерова 18.08.2023 BSLR-2035
	СписокТоваров.Колонки.Добавить("КомиссияБазовая",ТипЧисла); // письмерова 28.11.2023 BSLR-2862 
	СписокТоваров.Колонки.Добавить("ВыплатыЛояльности",ТипЧисла); // письмерова 20.08.2024 BSLR-3677
	СписокТоваров.Колонки.Добавить("ПродажаЮЛ", Новый ОписаниеТипов("Булево")); // BSLR-5361
	
	Возврат СписокТоваров;
	
КонецФункции  

// письмерова 21.08.2023 BSLR-2035
&НаСерверебезконтекста
Функция ПолучитьТаблицуДанныхЮЛOZON() Экспорт
	
	СписокТоваров = Новый ТаблицаЗначений;
	СписокТоваров.Колонки.Добавить("НаименованиеПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250))); 
	СписокТоваров.Колонки.Добавить("ЮридическийАдресПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
	СписокТоваров.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
	СписокТоваров.Колонки.Добавить("КПП",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
	СписокТоваров.Колонки.Добавить("НомерСчФакт",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(25)));
	СписокТоваров.Колонки.Добавить("ДатаСчФакт",Новый ОписаниеТипов("Дата" ,,,, Новый КвалификаторыДаты(ЧастиДаты.Дата))); 
	СписокТоваров.Колонки.Добавить("SRID",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250))); // BSLR-4698
	Возврат СписокТоваров;
	
КонецФункции 

&НаСервере
Процедура ЗаполнитьСтрокуТаблицыДанныхЮЛ(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.НаименованиеПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НаименованиеПокупателя).ТекущаяОбласть.Текст);
	СтрокаПриемник.ИНН = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст));
	СтрокаПриемник.НомерСчФакт = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФакт).ТекущаяОбласть.Текст));
	ДатаСчФактСтрокой = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФакт).ТекущаяОбласть.Текст));	
	СтрокаПриемник.ДатаСчФакт = ?(ДатаСчФактСтрокой = "", "", Дата("" + ДатаСчФактСтрокой + " 0:00:00")); 
	СтрокаПриемник.КПП = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст));
	СтрокаПриемник.ЮридическийАдресПокупателя = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЮридическийАдресПокупателя).ТекущаяОбласть.Текст));
	// письмерова 17.12.2025 BSLR-5170
	// некорректный адрес, заменяем на пустую строку лишние буквы в номре помещения "помещ./часть помещ."
	СтрокаПриемник.ЮридическийАдресПокупателя = СтрЗаменить(СтрокаПриемник.ЮридическийАдресПокупателя,"помещ./часть помещ.","");	
	
КонецПроцедуры

&НаСервере 
Функция ЕстьПродажиЮЛ()
	
	Результат = Ложь; 
	Для Каждого Стр из Объект.Товары Цикл
		Если Стр.НомерСчФакт <> "" Тогда // есть сч/факт, есть продажи ЮЛ
			Результат = Истина; 
			Прервать;
		КонецЕсли; 
		// письмерова 02.09.2025 BSLR-4698
		Если Стр.ПродажаЮЛ ТОгда  // для ВБ
			Результат = Истина; 
			Прервать;
		КонецЕсли; 
	КонецЦикла; 
	Возврат Результат;
	
КонецФункции


&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваров(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.Артикул       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	// ++ Стародубцев BSLR-5321
	Попытка
		СтрокаПриемник.SKU           = Строка(Число(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст)));
	Исключение
		СтрокаПриемник.SKU           = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст);
	КонецПопытки;
	// -- Стародубцев BSLR-5321
	СтрокаПриемник.Идентификатор = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Идентификатор).ТекущаяОбласть.Текст);
	СтрокаПриемник.ШтрихКод      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Штрихкод).ТекущаяОбласть.Текст);
	Если ЭтоВозврат Тогда
		СтрокаПриемник.Комиссия      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомиссияВозврат).ТекущаяОбласть.Текст);
		СтрокаПриемник.Комиссия      = СтрокаПриемник.Комиссия * -1;
		СтрокаПриемник.Цена          = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаВозврат).ТекущаяОбласть.Текст);
		СтрокаПриемник.СуммаДоплатыOzon          = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzonВозврат).ТекущаяОбласть.Текст);
		СтрокаПриемник.СуммаДоплатыOzon      = СтрокаПриемник.СуммаДоплатыOzon * -1; 
		// письмерова 20.08.2024 BSLR-3677 
		Попытка
		СтрокаПриемник.ВыплатыЛояльности     = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВыплатыЛояльностиВозврат).ТекущаяОбласть.Текст);
		Исключение
		СтрокаПриемник.ВыплатыЛояльности     = 0; КонецПопытки;
		СтрокаПриемник.ВыплатыЛояльности     = СтрокаПриемник.ВыплатыЛояльности * -1;
	Иначе
		СтрокаПриемник.Комиссия      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомиссияПродажи).ТекущаяОбласть.Текст);
		СтрокаПриемник.Комиссия      = СтрокаПриемник.Комиссия * 1; //BSLR-2862
		СтрокаПриемник.Цена          = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаПродажи).ТекущаяОбласть.Текст);
		СтрокаПриемник.СуммаДоплатыOzon          = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzon).ТекущаяОбласть.Текст);
		СтрокаПриемник.СуммаДоплатыOzon      = СтрокаПриемник.СуммаДоплатыOzon * 1;//BSLR-2862 
		// письмерова 20.08.2024 BSLR-3677
		Попытка
		СтрокаПриемник.ВыплатыЛояльности     = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВыплатыЛояльности).ТекущаяОбласть.Текст);
		Исключение
		СтрокаПриемник.ВыплатыЛояльности     = 0; КонецПопытки;
		СтрокаПриемник.ВыплатыЛояльности     = СтрокаПриемник.ВыплатыЛояльности * 1;
	КонецЕсли;

	СтрокаПриемник.Сумма         = СтрокаПриемник.Количество * СтрокаПриемник.Цена;
	// ++ Бойков BSLR-2182
	СтрокаПриемник.ИД_Заказ      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИД_Заказ).ТекущаяОбласть.Текст);
	// -- Бойков BSLR-2182
	// ++ Бойков BSLR-847
	Если ЗначениеЗаполнено(НомераКолонокФайла.УИН) Тогда
		СтрокаПриемник.УИН = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УИН).ТекущаяОбласть.Текст));
	Иначе
		СтрокаПриемник.УИН = "";
	КонецЕсли;
	// письмерова 18.08.2023 BSLR-2035
	Если ЗначениеЗаполнено(НомераКолонокФайла.НомерСчФакт) Тогда
		СтрокаПриемник.НомерСчФакт = СокрЛП(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФакт).ТекущаяОбласть.Текст));
	Иначе
		СтрокаПриемник.НомерСчФакт = "";
	КонецЕсли;
	// письмерова 08.04.04.2026 BSLR-5479
	Если ЗначениеЗаполнено(СтрокаПриемник.НомерСчФакт) ТОгда
		СтрокаПриемник.ПродажаЮЛ = Истина;
	КонецЕсли; 
	
	СтрокаПриемник.КомиссияБазовая	= СтрокаПриемник.Комиссия; // BSLR-5483 
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьНаСервереOzon(Знач Адрес, Расширение, РасшифровкаЮЛ = Ложь)	
	
	Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг", 
	Ложь, "", Новый Массив, Новый Массив);
	ПерваяСтрока = 0;
	ЕстьДанныеОтправления = Ложь;
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровOZON();
	ТаблицаДанныхЮЛ = ПолучитьТаблицуДанныхЮЛOZON(); 
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда
		
		УдалитьФайлы(ИмяФайла);
		
	КонецЕсли; 
	
	КоличествоСтрок   = MXL.ВысотаТаблицы;
	КоличествоКолонок = MXL.ШиринаСтраницы;
	
	Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
		Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
			ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
			Если Не РасшифровкаЮЛ ТОгда 
				Если СтрНайти(ТекстЯчейки, "Отчет реализации") <> 0 Тогда
					ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
					ПозицияНомераОт = СтрНайти(ТекстЯчейки, "от");
					НомерОправления =  СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2, ПозицияНомераОт - ПозицияНомераНачало - 3));
					Объект.НомерВходящегоДокумента = НомерОправления;  				
				КонецЕсли;
				
				Если СтрНайти(ТекстЯчейки, "Отчет о реализации") <> 0 Тогда
					ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
					ПозицияНомераОт = СтрНайти(ТекстЯчейки, "от");
					НомерОправления =  СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2, ПозицияНомераОт - ПозицияНомераНачало - 3));
					Объект.НомерВходящегоДокумента = НомерОправления;  				
				КонецЕсли; 			
				
				Если СтрНайти(ТекстЯчейки, "Реализация товаров за период") <> 0 Тогда
					ПозицияДаты  = СтрНайти(ТекстЯчейки, "по");
					ДатаОтправленияСтрока = СокрЛП(Сред(ТекстЯчейки, ПозицияДаты + 3)) + " 00:00:00";
					Попытка
						ДатаОтправления = Дата(ДатаОтправленияСтрока);
						Объект.ДатаВходящегоДокумента = ДатаОтправления;
					Исключение
						ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
					КонецПопытки;
				КонецЕсли;
				
				Если ТекстЯчейки = "№ п/п" Тогда
					ПерваяСтрока = ТекущаяСтрока + 3;
				КонецЕсли;
				Если ТекстЯчейки = "Номер" Тогда
					ЕстьДанныеОтправления = Истина;
				КонецЕсли;
				Если ЕстьДанныеОтправления И ЗначениеЗаполнено(ПерваяСтрока) Тогда
					Прервать;
				КонецЕсли; 
			Иначе 
				Если ТекстЯчейки = "Статус УКД/УПД" Тогда
					ПерваяСтрока = ТекущаяСтрока + 1;
				КонецЕсли;
	
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Если ПерваяСтрока = 0 Тогда
		Результат.Ошибка = Истина;
		Если Не РасшифровкаЮЛ ТОгда 
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Позаказный отчет по реализациям""");
		Иначе	
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Реестр продаж юридическим лицам""");
		КонецЕсли;
		Возврат Результат;
	КонецЕсли;
	Если Не РасшифровкаЮЛ ТОгда 
		Если НЕ ЕстьДанныеОтправления Тогда
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Для загрузки необходимо выбрать отчет по реализации в разрезе заказов");
			Возврат Результат;
		КонецЕсли;
	КонецЕсли;
	Если Не РасшифровкаЮЛ ТОгда 
		НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузки(MXL, ПерваяСтрока-3);
	Иначе
		НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузки(MXL, ПерваяСтрока-1);
	КонецЕсли;
	
	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
		Если Не РасшифровкаЮЛ ТОгда 
			Артикул = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
			// ++ Стародубцев BSLR-5321
			SKU = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст);
			// -- Стародубцев BSLR-5321
			ШтрихКод = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст);
			Если (Артикул = "" и ШтрихКод = "") Или (Артикул = 0 и ШтрихКод = 0) Или (Артикул = "0" и ШтрихКод = "0") Тогда 
				Продолжить;
			КонецЕсли;
			
			КоличествоПродано = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
			КоличествоВозврат = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст);
			Если ЗначениеЗаполнено(КоличествоПродано) Тогда
				НоваяСтрока = ТаблицаТоваров.Добавить();
				НоваяСтрока.ТипОперации   = "Продажа";
				НоваяСтрока.Количество = КоличествоПродано;
				ЗаполнитьСтрокуТаблицыТоваров(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
				Если НЕ Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда // пересчет цены/суммы - лояльность добавляем к сумме
					НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.ВыплатыЛояльности;
					НоваяСтрока.Цена = НоваяСтрока.Сумма/?(НоваяСтрока.Количество = 0, 1, НоваяСтрока.Количество); 				
				КонецЕсли;
			КонецЕсли;
			
			Если ЗначениеЗаполнено(КоличествоВозврат) Тогда
				НоваяСтрока = ТаблицаТоваров.Добавить();
				НоваяСтрока.ТипОперации   = "Возврат";
				НоваяСтрока.Количество = КоличествоВозврат;
				НоваяСтрока.Количество = - НоваяСтрока.Количество;
				ЗаполнитьСтрокуТаблицыТоваров(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина); 
				Если НЕ Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда // пересчет цены/суммы - лояльность добавляем к сумме
					НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.ВыплатыЛояльности;
					НоваяСтрока.Цена = НоваяСтрока.Сумма/?(НоваяСтрока.Количество = 0, 1, НоваяСтрока.Количество); 				
				КонецЕсли;
			КонецЕсли; 		
			
		Иначе
			НоваяСтрока = ТаблицаДанныхЮЛ.Добавить();
			ЗаполнитьСтрокуТаблицыДанныхЮЛ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);		
		КонецЕсли;
		
	КонецЦикла;
	
	Если ТаблицаТоваров.Количество() Тогда
		Если Не РасшифровкаЮЛ ТОгда
	
			ДоплатаЗаСчетОзон = ТаблицаТоваров.Итог("СуммаДоплатыOzon");
			КомиссияБазовая = ТаблицаТоваров.Итог("Комиссия");			
			ОтниматьДоплату = ?(ДоплатаЗаСчетОзон>0.99*КомиссияБазовая,Ложь,Истина);
			
			ИспользуетсяВерсияФайлаСУИН = ЗначениеЗаполнено(НомераКолонокФайла.УИН);
			
			ДанныеЗагрузки = топ_РаботаСМаркетплейсами_OZON.ПолучитьДанныеИзВыгрузки(ТаблицаТоваров, Маркетплейс, Объект.ЛичныйКабинет,Ложь,Объект.ДатаОкончания,,ОтниматьДоплату,ИспользуетсяВерсияФайлаСУИН);
			
			Если ДанныеЗагрузки.Ошибка Тогда
				Результат.Ошибка = Истина;
				Результат.Сообщение = Результат.Сообщение;
			    Возврат Результат;
			КонецЕсли;

			Объект.Товары.Очистить();
			Объект.Товары.Загрузить(ДанныеЗагрузки.Товары);
		КонецЕсли;
	КонецЕсли; 
	
	Если ТаблицаДанныхЮЛ.Количество() Тогда
        // обработка таб части, заполнение данных по ЮЛ, поиск контрагента по ИНН 
		// если не нашли - ипшем ИНН + Наименование и сообщаем пользователю
		Результат = ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ);

		Если Результат.Ошибка Тогда
			Результат.Ошибка = Истина;
			Результат.Сообщение = Результат.Сообщение;
		    Возврат Результат;
		КонецЕсли;

	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции  

// письмерова 01.12.2023 BSLR-2862  - удалить  BSLR-5483
//&НаСервере
//Функция ПересчитатьТаблицуТоваровОЗОН(ТаблицаТоваров) 
//	
//	ДоплатаЗаСчетОзон = ТаблицаТоваров.Итог("СуммаДоплатыOzon");
//	КомиссияБазовая = ТаблицаТоваров.Итог("Комиссия"); 
//	
//	ОтниматьДоплату = ?(ДоплатаЗаСчетОзон>0.99*КомиссияБазовая,Ложь,Истина);
//	
//	Для Каждого Стр Из ТаблицаТоваров Цикл
//		Стр.КомиссияБазовая	= Стр.Комиссия;
//		Если ОтниматьДоплату Тогда
//			Стр.Комиссия = Стр.КомиссияБазовая - Стр.СуммаДоплатыOzon;
//		Иначе
//			Стр.Комиссия = Окр(Стр.КомиссияБазовая * 0.01,2);  // BSLR-4243
//		КонецЕсли;		
//	КонецЦикла;
//	
//	Возврат ТаблицаТоваров;
//КонецФункции

// письмерова 21.08.2023 BSLR-2035
&НаСервере
Функция ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ)  
	
	// если нужно создавать контрагентов, то предварительно проверим кто уже есть в базе и создадим тех, кого не нашли по ИНН
	Если СоздаватьКонтрагентов Тогда
		
		ВремТабл = ТаблицаДанныхЮЛ.Скопировать(); 
		ВремТабл.Свернуть("НаименованиеПокупателя,ИНН,КПП,ЮридическийАдресПокупателя"); 
		Запрос = Новый Запрос("ВЫБРАТЬ
		                      |	ТЗ.НаименованиеПокупателя КАК НаименованиеПокупателя,
		                      |	ТЗ.ИНН КАК ИНН,
		                      |	ТЗ.КПП КАК КПП,
		                      |	ТЗ.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя
		                      |ПОМЕСТИТЬ Таблица
		                      |ИЗ
		                      |	&ТЗ КАК ТЗ
		                      |ГДЕ
		                      |	ТЗ.ИНН <> """"
		                      |;
		                      |
		                      |////////////////////////////////////////////////////////////////////////////////
		                      |ВЫБРАТЬ
		                      |	Таблица.НаименованиеПокупателя КАК НаименованиеПокупателя,
		                      |	Таблица.ИНН КАК ИНН,
		                      |	Таблица.КПП КАК КПП,
		                      |	Таблица.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя,
		                      |	ВЫБОР
		                      |		КОГДА Контрагенты.Ссылка ЕСТЬ NULL
		                      |			ТОГДА ""ИНН "" + (ВЫРАЗИТЬ(Таблица.ИНН КАК СТРОКА(15))) + "" "" + (ВЫРАЗИТЬ(Таблица.НаименованиеПокупателя КАК СТРОКА(200)))
		                      |		ИНАЧЕ Контрагенты.Ссылка
		                      |	КОНЕЦ КАК Покупатель
		                      |ИЗ
		                      |	Таблица КАК Таблица
		                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		                      |		ПО Таблица.ИНН = Контрагенты.ИНН ");

		Запрос.УстановитьПараметр("ТЗ",ВремТабл); 
		
		ТаблицаНеНайденныхЮЛ = Запрос.Выполнить().Выгрузить();  // отладка
		
		Выборка = Запрос.Выполнить().Выбрать(); 
		
		Пока Выборка.Следующий() Цикл
			Если ТипЗнч(Выборка.Покупатель) = Тип("Строка") Тогда
				НовыйКонтрагент = СоздатьЮЛ(Выборка,Объект.ЛичныйКабинет.Организация);  
				Сообщить("Создан новый контрагент " + НовыйКонтрагент); 
			КонецЕсли;
		КонецЦикла; 		   
	КонецЕсли;	
	 
	Результат = Новый Структура("Ошибка, Сообщение",Ложь,""); 
	                                                                                                           // BSLR-4698
	ТаблицаДанныхЮЛ.Свернуть("НаименованиеПокупателя,ИНН,НомерСчФакт,ДатаСчФакт,КПП,ЮридическийАдресПокупателя, SRID");
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.НаименованиеПокупателя КАК НаименованиеПокупателя,
	                      |	ТЗ.ИНН КАК ИНН,
	                      |	ТЗ.НомерСчФакт КАК НомерСчФакт,
						  |	ТЗ.ДатаСчФакт КАК ДатаСчФакт,
	                      |	ТЗ.КПП КАК КПП,
						  // письмерова 03.09.2025 BSLR-4698	 
						  |	ТЗ.SRID КАК SRID,
	                      |	ТЗ.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя
	                      |ПОМЕСТИТЬ Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |ГДЕ
	                      |	ТЗ.ИНН <> """"
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	Таблица.НаименованиеПокупателя КАК НаименованиеПокупателя,
	                      |	Таблица.ИНН КАК ИНН,
	                      |	Таблица.НомерСчФакт КАК НомерСчФакт,
						  |	Таблица.ДатаСчФакт КАК ДатаСчФакт,
	                      |	Таблица.КПП КАК КПП,
						  // письмерова 03.09.2025 BSLR-4698	 
						  |	Таблица.SRID КАК SRID,
	                      |	Таблица.ЮридическийАдресПокупателя КАК ЮридическийАдресПокупателя,
	                      |	ВЫБОР
	                      |		КОГДА Контрагенты.Ссылка ЕСТЬ NULL
	                      |			ТОГДА ""ИНН "" + (ВЫРАЗИТЬ(Таблица.ИНН КАК СТРОКА(15))) + "" "" + (ВЫРАЗИТЬ(Таблица.НаименованиеПокупателя КАК СТРОКА(200)))
	                      |		ИНАЧЕ Контрагенты.Ссылка
	                      |	КОНЕЦ КАК Покупатель
	                      |ИЗ
	                      |	Таблица КАК Таблица
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
	                      |		ПО Таблица.ИНН = Контрагенты.ИНН");
	Запрос.УстановитьПараметр("ТЗ",ТаблицаДанныхЮЛ); 
	
	ТаблицаДанных = Запрос.Выполнить().Выгрузить();
	
	Для Каждого СТр из Объект.Товары Цикл 
		// письмерова 03.09.2025 BSLR-4698	 
		Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.OZON ТОгда
			Если Стр.НомерСчФакт <> "" Тогда
				НайтиСтроки = ТаблицаДанных.НайтиСтроки(Новый Структура("НомерСчФакт",Стр.НомерСчФакт));
				Если НайтиСтроки.Количество() ТОгда
					Стр.Покупатель = НайтиСтроки[0].Покупатель;
					Стр.ДатаСчФакт = НайтиСтроки[0].ДатаСчФакт;
					
					Если ТипЗнч(Стр.Покупатель) = Тип("Строка") Тогда // не нашли по ИНН 
						Результат.Сообщение = Результат.Сообщение + "В строке " + Стр.НомерСтроки + " не найден контрагент "  + НайтиСтроки[0].Покупатель + Символы.ПС; 					
						Результат.Ошибка = Истина;  				
					КонецЕсли;
						
				КонецЕсли; 		
			КонецЕсли; 
			
		ИначеЕсли Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries ТОгда
			Если Стр.ПродажаЮЛ Тогда
				НайтиСтроки = ТаблицаДанных.НайтиСтроки(Новый Структура("SRID",Стр.Идентификатор));
				Если НайтиСтроки.Количество() ТОгда
					Стр.Покупатель = НайтиСтроки[0].Покупатель; 
					Стр.ДатаСчФакт = НайтиСтроки[0].ДатаСчФакт; 
					Стр.НомерСчФакт = НайтиСтроки[0].НомерСчФакт;
					
					Если ТипЗнч(Стр.Покупатель) = Тип("Строка") Тогда // не нашли по ИНН 
						Результат.Сообщение = Результат.Сообщение + "В строке " + Стр.НомерСтроки + " не найден контрагент "  + НайтиСтроки[0].Покупатель + Символы.ПС; 					
						Результат.Ошибка = Истина;  				
					КонецЕсли;
						
				КонецЕсли; 		
			КонецЕсли;
		КонецЕсли; // -- BSLR-4698
			
	КонецЦикла; 
	
	Возврат Результат;
КонецФункции  

&НаСервере
Функция СоздатьЮЛ(Данные,Организация,ЭтоПоставщик = Ложь) 
	
	// Предварительный поиск по ИНН  
	// BSLR-3215
	НовыйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН",Данные.Инн); 
	
	Если НовыйКонтрагент = Справочники.Контрагенты.ПустаяСсылка() Тогда // создаем
		
		//партнер
		НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
		НовыйПартнер.Наименование = Данные.НаименованиеПокупателя;
		НовыйПартнер.ГруппаДоступа = ГруппаДоступаПартнера;
		НовыйПартнер.НаименованиеПолное = НовыйПартнер.Наименование; 
		НовыйПартнер.клиент = истина;
		НовыйПартнер.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;//ЧастноеЛицо  
		
		Если Данные.ЮридическийАдресПокупателя <> "" Тогда // BSLR-3215
			нЭл = НовыйПартнер.КонтактнаяИнформация.Добавить();
			нЭл.тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
			нЭл.Вид = Справочники.ВидыКонтактнойИнформации.АдресПартнера;
			нЭл.Представление = Данные.ЮридическийАдресПокупателя; 
		КонецЕсли;  // BSLR-3215 
		Если ЭтоПоставщик Тогда
			НовыйПартнер.Поставщик = Истина; // BSLR-3215	
		КонецЕсли;  
		
		НовыйПартнер.Записать();
		
		// Данные: ИНН, КПП, Наименование, Адрес
		// форму собственности проверяем по заполнению КПП - если пусто, это ИП
		// контрагент
		НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент(); 
		НовыйКонтрагент.Наименование= Данные.НаименованиеПокупателя;
		НовыйКонтрагент.НаименованиеПолное= Данные.НаименованиеПокупателя;
		НовыйКонтрагент.ИНН= Данные.ИНН;
		НовыйКонтрагент.КПП= Данные.КПП;
		НовыйКонтрагент.СтранаРегистрации = Справочники.СтраныМира.Россия;
		НовыйКонтрагент.ЮрФизЛицо = ?(НовыйКонтрагент.КПП = "",Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель,Перечисления.ЮрФизЛицо.ЮрЛицо);
		НовыйКонтрагент.Партнер = НовыйПартнер.Ссылка;
		
		Если Данные.ЮридическийАдресПокупателя <> "" Тогда 
			нЭл = НовыйКонтрагент.КонтактнаяИнформация.Добавить();
			нЭл.тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
			нЭл.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
			нЭл.Представление = Данные.ЮридическийАдресПокупателя;  
			
			нЭл = НовыйКонтрагент.КонтактнаяИнформация.Добавить();
			нЭл.тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
			нЭл.Вид = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента;
			нЭл.Представление = Данные.ЮридическийАдресПокупателя;
		КонецЕсли; 
		
		НовыйКонтрагент.Записать(); //BSLR-4750, Чупраков А.Н., 17.09.25
		
	КонецЕсли; // BSLR-3215
	
	Возврат НовыйКонтрагент;  
	
КонецФункции  

&НаСервере
Функция ПроверитьЗаполнениеЮЛ(ЭтоПеревыставление = Ложь)
	// письмерова 14.11.2024 BSLR-3215
	Результат = Ложь;
	Если НЕ ЭтоПеревыставление ТОгда
		Для Каждого Стр из Объект.Товары Цикл
			Если Стр.НомерСчФакт <> "" Тогда 
				Если ТипЗнч(Стр.Покупатель) = Тип("Строка") Тогда // есть сч/факт, нет контрагента
					Результат = Истина; 
					Прервать; 
				КонецЕсли; 
				
				Если Стр.Покупатель = Справочники.Контрагенты.ПустаяСсылка() Тогда // есть сч/факт, нет контрагента
					Результат = Истина; 
					Прервать; 
				КонецЕсли;
			КонецЕсли;
		КонецЦикла; 
	Иначе 
		Для Каждого Стр Из Объект.ПеревыставлениеУслуг Цикл
				Если ТипЗнч(Стр.Поставщик) = Тип("Строка") Тогда // есть сч/факт, нет контрагента
					Результат = Истина; 
					Прервать; 
				КонецЕсли; 
				
				Если Стр.Поставщик = Справочники.Контрагенты.ПустаяСсылка() Тогда // есть сч/факт, нет контрагента
					Результат = Истина; 
					Прервать; 
				КонецЕсли;
		  КонецЦикла;
	КонецЕсли;
	Возврат Результат;
	
КонецФункции


#КонецОбласти


// письмерова 18.11.2025 BSLR-3887
#область ЗагрузкаУслугOzon

&НаКлиенте
Процедура ЗагрузитьУслугиОЗОН(Команда)

	Если Объект.Услуги.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыУслуг", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблица услуг содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
	Иначе
		ЗагрузитьУслугиОЗОНпоAPI(Неопределено);
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыУслуг(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Услуги.Очистить();
		ЗагрузитьУслугиОЗОНпоAPI(Неопределено);
	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьУслугиОЗОНпоAPI(Команда)

	Если (не ЗначениеЗаполнено(Объект.ДатаНачала)) или (не ЗначениеЗаполнено(Объект.ДатаОкончания)) тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Период";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	Если не ЗначениеЗаполнено(Объект.ЛичныйКабинет)тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Выберите Личный Кабинет";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	Если Объект.ДатаНачала > Объект.ДатаОкончания Тогда
		ВременнаяПеременная = Объект.ДатаНачала;
		Объект.ДатаНачала          = Объект.ДатаОкончания;
		Объект.ДатаОкончания       = ВременнаяПеременная;   
	КонецЕсли;

	ПараметрыЗапуска = Новый Структура;
	ПараметрыЗапуска.Вставить("Клиент",             Клиент);
	ПараметрыЗапуска.Вставить("Токен",              Токен);
	ПараметрыЗапуска.Вставить("Токен2",				Токен2);
	ПараметрыЗапуска.Вставить("ДатаНачала",         НачалоДня(Объект.ДатаНачала));
	ПараметрыЗапуска.Вставить("ДатаОкончания",      КонецДня(Объект.ДатаОкончания)); 
	ПараметрыЗапуска.Вставить("СуммаУслугХранения", Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты);
	ПараметрыЗапуска.Вставить("ЛичныйКабинет",		Объект.ЛичныйКабинет);  
	ПараметрыЗапуска.Вставить("ВыгружатьДетализацию", Объект.ВыгужатьДетализациюWB_Excel);
	ПараметрыЗапуска.Вставить("МП",		Маркетплейс);
	
	ПараметрыЗапуска.Вставить("ПродажиВРБВПродажахРФ",		Объект.ПродажиВРБВПродажахРФ);
	ПараметрыЗапуска.Вставить("УдержатьСуммуДоставкиПриВыкупе",		Объект.УдержатьСуммуДоставкиПриВыкупе); 

	ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииИздержкиПоПеревозке",		Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке);
	ПараметрыЗапуска.Вставить("ВключитьВСуммуКомиссииВесьЭкваринг",		Объект.ВключитьВСуммуКомиссииВесьЭкваринг); 
	
	СтруктураФоновогоЗадания 	= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ЗагрузитьДанныеОтчетКоммисионера(ПараметрыЗапуска, УникальныйИдентификатор);
	ИДЗадания 	= СтруктураФоновогоЗадания.ИдентификаторЗадания;
	
	ПараметрыОжидания 	= ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ВыводитьПрогрессВыполнения = Истина;
	ПараметрыОжидания.Интервал  = 2;
	
	ДлительныеОперацииКлиент.ОжидатьЗавершение(СтруктураФоновогоЗадания, Новый ОписаниеОповещения("ПослеВыполненияКомандыУслугиВФоне", ЭтотОбъект), ПараметрыОжидания);

КонецПроцедуры

&НаКлиенте
Процедура ПослеВыполненияКомандыУслугиВФоне(Результат, ДополнительныеПараметры) Экспорт
	
	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		
		Если Результат.Статус = "Выполнено" Тогда  //получили результат
			// письмерова 16.04.2026 BSLR-5483
			ОбработатьРезультатЗагрузкиУслугНаСервере(Результат.АдресРезультата);
			
		ИначеЕсли Результат.Статус = "Ошибка" Тогда //не получили результат
			ПоказатьОповещениеПользователя(,,Результат.КраткоеПредставлениеОшибки,
				БиблиотекаКартинок.Ошибка32,
				СтатусОповещенияПользователя.Информация);
		КонецЕсли;
		
	КонецЕсли; 
	
КонецПроцедуры 

// письмерова 16.04.2026 BSLR-5483
&НаСервере
Процедура ОбработатьРезультатЗагрузкиУслугНаСервере(АдресРезультата) 
	
	РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресРезультата);
	
	Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
		Если ТипЗнч(РезультатВыполнения) = Тип("Структура") Тогда
			
			Объект.Услуги.Загрузить(РезультатВыполнения.СписокУслуг);

			Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
				СуммаЛояльности = Объект.Товары.Итог("ВыплатыПоМеханикамЛояльностиПартнеров");
				Если СуммаЛояльности <> 0 Тогда
					СтрокаУслуг = Объект.Услуги.Добавить();
					СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","PaymentsBasedOnPartnerLoyaltyMechanics");
					СтрокаУслуг.Наименование = СтрокаУслуг.УслугаМП.Наименование;
					СтрокаУслуг.НаименованиеМП = СтрокаУслуг.УслугаМП.ЛитералУслуги;
					СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.OZON, СтрокаУслуг.УслугаМП);
					СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,ОБъект.ЛичныйКабинет,Период.ДатаОкончания);
					СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
					СтрокаУслуг.СтавкаНДС = Строка(СтавкаНДС);
					СтрокаУслуг.Сумма = - СуммаЛояльности; 
					СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач); 
				КонецЕсли;
			КонецЕсли;
			Если ЗначениеЗаполнено(РезультатВыполнения.Сообщение) Тогда
				ОбщегоНазначения.СообщитьПользователю(РезультатВыполнения.Сообщение);
			КонецЕсли;
			ЭтаФорма.Модифицированность = Истина; 
		КонецЕсли;
	КонецЕсли;
	
	УдалитьИзВременногоХранилища(АдресРезультата); 

КонецПроцедуры
			


#КонецОбласти


#Область ЗагрузкаИзЭксельWBНовая 

&НаСервере
Функция  ЗагрузитьНаСервереWB(Знач Адрес, Расширение, ЭтоВыкупы)
  	Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг", 
	Ложь, "", Новый Массив, Новый Массив);
	ПерваяСтрока = 0;
	
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровWB();
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
		Возврат Результат;
	КонецПопытки;;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда
		УдалитьФайлы(ИмяФайла);        
	КонецЕсли; 
	
	КоличествоСтрок   = MXL.ВысотаТаблицы;
	КоличествоКолонок = MXL.ШиринаСтраницы;

	НовыйФорматФайла = Истина;  
	Для ТекущаяКолонка = 1 По 5 Цикл    
		ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(1) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
		Если ТекстЯчейки = "Номер поставки" Тогда
			НовыйФорматФайла = Ложь;
			Прервать;
		КонецЕсли;			
	КонецЦикла;	

	Если НовыйФорматФайла ТОгда //BSLR-3067
		МассивЗаголовковФайла = ЗаголовкиТаблицыWB_NEW();
	Иначе
		Если Объект.ДатаНачала >= Дата(2024,01,29) ТОгда // еще один формат с 29.01.2024
			МассивЗаголовковФайла = ЗаголовкиТаблицыWB_NEW(Истина);	
		Иначе
			МассивЗаголовковФайла = ЗаголовкиТаблицыWB(); 
		КонецЕсли;
	КонецЕсли;

	ПерваяСтрока = 2; // BSLR-3859
	Если ПерваяСтрока = 0 Тогда
		Результат.Ошибка = Истина;
		ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Детализация по продажам""");
		Возврат Результат;
	КонецЕсли;
	НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиWB(MXL, ПерваяСтрока-1);
	ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную"); 

	Если Не ЭтоВыкупы ТОгда
		Объект.НомерВходящегоДокумента = "";
		Объект.ДатаВходящегоДокумента = ""; 
		Объект.НомерВходящегоДокументаВыкупа = "";
		Объект.ДатаВходящегоДокументаВыкупа = "";  
	Иначе
		Объект.НомерВходящегоДокументаВыкупа = "";
		Объект.ДатаВходящегоДокументаВыкупа = "";  
	КонецЕсли;
    // письмерова 16.10.2025 BSLR-4460
	МассивДляУдаления = Новый Массив; 
	ТаблицаКомпенсаций = ПолучитьТаблицуЗагрузкиТоваровWB(); 

	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл
		
		Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст)  = "" 
			И Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ОбоснованиеДляОплаты).ТекущаяОбласть.Текст) = "" Тогда // письмерова 21.12.2023 BSLR-2959
			ПРодолжить; // шк заполнен всегда
		КонецЕсли; 
		
		Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст)  = "Баркод" Тогда // письмерова 27.02.2026 BSLR-5173
			ПРодолжить;
		КонецЕсли;
		
		КоличествоПродано = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
		КоличествоВозврат = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст);
		КПеречислению = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.СуммаКВыплате).ТекущаяОбласть.Текст);
		ТипДокумента = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипДокумента).ТекущаяОбласть.Текст);

		ОбоснованиеДляОплаты = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ОбоснованиеДляОплаты).ТекущаяОбласть.Текст);
		
		Если ТипДокумента = "Возврат" или ТипДокумента = "возврат" Тогда  // письмерова 13.03.2024 BSLR-3355  

			//Если ЭтоВыкупы Тогда  -  BSLR-4287  - вернули выкупы в отчет комиссионера
			//	Продолжить;
			//КонецЕсли;
			
			НоваяСтрока = ТаблицаТоваров.Добавить();
			НоваяСтрока.ТипОперации   = "Возврат";
			НоваяСтрока.Количество = КоличествоВозврат;
			НоваяСтрока.Количество = - НоваяСтрока.Количество;
			ЗаполнитьСтрокуТаблицыТоваровWB(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина, ЭтоВыкупы, Объект.ВключитьВСуммуПродажВозмещения); // письмерова 14.03.2024 BSLR-3357
				
			Если ОбоснованиеДляОплаты = "Возмещение за выдачу и возврат товаров на ПВЗ" Тогда
				НоваяСтрока.ТипОперации = ОбоснованиеДляОплаты;
				НоваяСтрока.ВозмещениеВыдачаВозврат = - НоваяСтрока.ВозмещениеВыдачаВозврат;
				НоваяСтрока.Комиссия = - НоваяСтрока.Комиссия;
				НоваяСтрока.НДСКомиссии = - НоваяСтрока.НДСКомиссии;
			КонецЕсли;
			
		Иначе 
			НоваяСтрока = ТаблицаТоваров.Добавить();
			Если КПеречислению <> 0 Тогда
				НоваяСтрока.ТипОперации = "Продажа"
			Иначе
				НоваяСтрока.ТипОперации   = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипОперации).ТекущаяОбласть.Текст); 
			КонецЕсли;
			НоваяСтрока.Количество = КоличествоПродано;
			ЗаполнитьСтрокуТаблицыТоваровWB(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, , ЭтоВыкупы, Объект.ВключитьВСуммуПродажВозмещения); // письмерова 14.03.2024 BSLR-3357 
		КонецЕсли;  
		// письмерова 14.03.2025 BSLR-4435
		Если ОбоснованиеДляОплаты = "Возмещение за выдачу и возврат товаров на ПВЗ" Тогда
			НоваяСтрока.НДСКомиссии = 0;
		КонецЕсли;
		
		// письмерова 25.08.2025 BSLR-4868, BSLR-4934 ++ 
		Если ОбоснованиеДляОплаты = "Компенсация скидки по программе лояльности" Или
				ОбоснованиеДляОплаты = "Стоимость участия в программе лояльности" Или  
					ОбоснованиеДляОплаты = "Сумма удержанная за начисленные баллы программы лояльности" Тогда
			НоваяСтрока.ТипОперации = ОбоснованиеДляОплаты;
		КонецЕсли;
		Если ОбоснованиеДляОплаты = "Коррекция суммы удержанной за начисленные баллы программы лояльности" Тогда
			НоваяСтрока.ТипОперации = "Сумма удержанная за начисленные баллы программы лояльности";
		КонецЕсли; // BSLR-4934 --
        // письмерова 16.10.2025 BSLR-4460 ++
		Если ОбоснованиеДляОплаты = "Компенсация потерянного товара" или 
			ОбоснованиеДляОплаты = "Компенсация брака" Или 
				ОбоснованиеДляОплаты = "Компенсация ущерба" Или 
					ОбоснованиеДляОплаты = "Добровольная компенсация при возврате" Или 
						ОбоснованиеДляОплаты = "Компенсация подмененного товара"  Тогда 
			
			НоваяСтрока.ТипОперации = ОбоснованиеДляОплаты;
			МассивДляУдаления.Добавить(НоваяСтрока);
			нСтр = ТаблицаКомпенсаций.Добавить();
			ЗаполнитьЗначенияСвойств(нСтр,НоваяСтрока);
		КонецЕсли; 
	КонецЦикла;

	Для Каждого Эл Из МассивДляУдаления Цикл
		ТаблицаТоваров.Удалить(Эл);
	КонецЦикла;	// BSLR-4460 --
	
	ДоставкаВыкупы = 0; // письмерова 09.01.2024 BSLR-4099 
	Если ТаблицаТоваров.Количество() Тогда  
		ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); 
		
		Если Не ЭтоВыкупы Тогда // письмерова 21.12.2023 BSLR-2959 - для усн и осн стало одинаково
			// письмерова 04.12.2023 BSLR-2814
			РезультатУслуги = ОбработатьТаблицуУслугВБ_УСН(ТаблицаТоваров,Объект.СуммаУслугХранения+Объект.СумаУслугПлатнойПриемки+Объект.СуммаДоплаты); // письмерова 13.12.2023 BSLR-2951
			ТаблицаУслуг = РезультатУслуги.ТаблицаУслуг; 
			ТаблицаТоваров = ОбработатьТаблицуТоваровВБ(ТаблицаТоваров, ЭтоВыкупы, Истина,РезультатУслуги); // письмерова 06.02.2024 BSLR-3188
			// письмерова 20.03.2024 BSLR-2959
			Если РезультатУслуги.ПлатнаяПриемка <> 0 Тогда
				Объект.СумаУслугПлатнойПриемки = РезультатУслуги.ПлатнаяПриемка;
			КонецЕсли;
			Если РезультатУслуги.Доплаты <> 0 Тогда
				Объект.СуммаДоплаты = РезультатУслуги.Доплаты;
			КонецЕсли;
			Если РезультатУслуги.Хранение <> 0 Тогда 
				Объект.СуммаУслугХранения = РезультатУслуги.Хранение;
			КонецЕсли;
		Иначе
			ТаблицаУслуг = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина); // письмерова 20.03.2024 BSLR-2959 - пустая таблица, по выкупам нет услуг
			// письмерова 09.01.2024 BSLR-4099
			ДанныеВыкупов = ОбработатьДанныеПоВыкупамВБ(ТаблицаТоваров);
			ТаблицаТоваров = ДанныеВыкупов.ВремТаблВЫкуп; 
			ДоставкаВыкупы = ДанныеВыкупов.Разница;  
		КонецЕсли;
		 
		Результат.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаТоваров);
		Результат.СписокУслуг   = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаУслуг); 
		Если Не ЭтоВыкупы Тогда  // BSLR-4102
			ДанныеЗагрузки = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(Результат, Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания,ЭтоВыкупы); // письмерова 28.02.2024 BSLR-3309 
		Иначе
			ДанныеЗагрузки = Новый Структура("Товары, Услуги, Ошибка, Сообщение",ТаблицаТоваров, Новый ТаблицаЗначений,Ложь,"");
		КонецЕсли;			
			
		Если ДанныеЗагрузки.Ошибка Тогда
			Результат.Ошибка = Истина;
			Результат.Сообщение = Результат.Сообщение;
		    Возврат Результат;
		КонецЕсли;

		// получить признак набора для номенклатуры
		Если Константы.ИспользоватьНаборы.Получить() Тогда 
			Если Не ЭтоВыкупы Тогда // BSLR-4102
				ДанныеЗагрузки.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеЗагрузки.Товары); 
			КонецЕсли;
		КонецЕсли;
		
		// обработка компенсаций письмерова 16.10.2025 BSLR-4460
		Если ТаблицаКомпенсаций.Количество() ТОгда
			РезультатКомпенсаций = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг", 
														Ложь, "", Новый Массив, Новый Массив); 
			РезультатКомпенсаций.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаКомпенсаций); 
			ДанныеКомпенсаций = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(РезультатКомпенсаций, 
									Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания,ЭтоВыкупы); 
			Если Константы.ИспользоватьНаборы.Получить() Тогда 
				ДанныеКомпенсаций.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеКомпенсаций.Товары); 
			КонецЕсли; 		
			ЗаполнитьТабЧастьКомпенсации(ДанныеКомпенсаций.Товары);			
		КонецЕсли;
		
		Если ЭтоВыкупы Тогда
			Результат.Вставить("ТоварыВыкуп", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
			Результат.Вставить("ДоставкаВыкупы", ДоставкаВыкупы);// письмерова 09.01.2024 BSLR-4099
		Иначе
			Результат.Вставить("Товары", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
			Результат.Вставить("Услуги", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Услуги));
		КонецЕсли; 	 
		
	КонецЕсли;
	
	Возврат Результат;


КонецФункции

// письмерова 17.11.2023 BSLR-2814
&НаСервере
Функция ОбработатьТаблицуУслугВБ_УСН(ТаблицаТоваров, СуммаУслугХранения)

	ТаблицаУслуг = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина);
	ПереченьДопУслуг = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьПереченьДопУслугМП();
	НДСДопУслуг = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьНДСДопУслугМП(); 
	// письмерова 04.12.2023 BSLR-2814	
	Результат = Новый Структура;
	Результат.Вставить("ТаблицаУслуг",ТаблицаУслуг); 
	
	СтруктураУслуг = Новый Соответствие;
	
	СуммаКомпенсацииБрака = 0;
	СуммаАвансовойОплаты = 0; 
	Для Каждого Стр из ТаблицаТоваров Цикл
		Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" ТОгда
			СуммаКомпенсацииБрака = СуммаКомпенсацииБрака + Стр.Сумма;
		ИначеЕсли Стр.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения" Тогда 
			СуммаАвансовойОплаты = СуммаАвансовойОплаты + Стр.Сумма;
		КонецЕсли; 			
	КонецЦикла;	
	
	// расчет суммы международной доставки 
	УслугиПоДоставке_Международная = 0;
	УслугиПоДоставке = 0; 
	WB_komission = 0;
	ppvz_reward = 0; 
	WB_komission_ВЗ = 0;
	ppvz_reward_ВЗ = 0;
    ВозмещениеИздержекПоПеревозке = 0;
	// письмерова 17.04.2024 BSLR-3481 
	ВозмещениеИздержекПоПеревозке_V2 = 0;
	// письмерова 20.03.2024 BSLR-2959
    Хранение = 0; 
    Удержания = 0; 
    ПлатнаяПриемка = 0; 
	Доплаты = 0;
	// письмерова 26.04.2024 BSLR-3509
	ЭквайрингОТдельно = 0;
	ЭквайрингОТдельно_ВЗ = 0;
	ПрочиеВыплаты = 0;
	КомпенсацияУщерба = 0;  
	МассивДляУдаления = новый Массив;   
	// письмерова 27.11.2024 BSLR-4102
	ЭквайрингОТдельноБезНуля = 0;
	ЭквайрингОТдельно_ВЗБезНуля = 0;
    СуммаВозмещениеПВЗ = 0; // письмерова 14.03.2025 BSLR-4435 
	СуммаКорректировка = 0; // BSLR-4558 
	СуммаВозмещениеЛояльности = 0; // BSLR-4868 
	СуммаСтоимостьУчастияЛояльности = 0; // BSLR-4934
	СуммаУдержанияЗаБаллыЛояльности = 0; // BSLR-4934 
	РазовоеНачисление = 0; // BSLR-5301 
	
	Для Каждого Стр из ТаблицаТоваров Цикл 
		
		Если Стр.ТипОперации = "Возмещение издержек по перевозке" Или Стр.ТипОперации = "Возмещение издержек по перевозке/по складским операциям с товаром" Тогда // письмерова 05.04.2024 BSLR-3440
			ВозмещениеИздержекПоПеревозке = ВозмещениеИздержекПоПеревозке + Стр.Комиссия;
			ВозмещениеИздержекПоПеревозке_V2 = ВозмещениеИздержекПоПеревозке_V2 + Стр.ВозмещениеИздержек; // письмерова 17.04.2024 BSLR-3481 
		КонецЕсли;  
		                                                                        // BSLR-3796                                                      // BSLR-4000
		Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика"  ИЛИ Стр.ТипОперации = "Логистика сторно" ИЛИ Стр.ТипОперации = "Коррекция логистики" Тогда // письмерова 20.12.2023 BSLR-2959
			Если Стр.СтранаПродажи <> "Россия" и Стр.СтранаПродажи <> "RU" ТОгда // письмерова 17.04.2024 BSLR-3481
				УслугиПоДоставке_Международная = УслугиПоДоставке_Международная + Стр.УслугиПоДоставке; 
			Иначе
				УслугиПоДоставке = УслугиПоДоставке + Стр.УслугиПоДоставке; 
			КонецЕсли;
		КонецЕсли;  
		// письмерова 20.03.2024 BSLR-2959
		Если СтрНайти(Врег(Стр.ТипОперации),"ХРАНЕНИ") > 0 Тогда // письмерова 17.04.2024 BSLR-3481		
			Хранение = Хранение + Стр.Хранение;	
		КонецЕсли;
		Если СтрНайти(Врег(Стр.ТипОперации),"УДЕРЖАНИ") > 0 Тогда // письмерова 17.04.2024 BSLR-3481
			// письмерова 26.04.2024 BSLR-3509
			Если Объект.ДатаНачала < Дата(2024,4,1) ТОгда
				Удержания = Удержания + Стр.Удержания;
			Иначе   
				Если Стр.Удержания > 0 Тогда
					Удержания = Удержания + Стр.Удержания;
				Иначе
					ПрочиеВыплаты = ПрочиеВыплаты + Стр.Удержания;
				КонецЕсли;				
			КонецЕсли;
		КонецЕсли;
		//Если Стр.ТипОперации = "Пересчет платной приемки" Тогда - BSLR-4444		
			ПлатнаяПриемка = ПлатнаяПриемка + Стр.ПлатнаяПриемка;	
		//КонецЕсли; 
		Если СтрНайти(Врег(Стр.ТипОперации),"ДОПЛАТ") > 0 Тогда		
			Доплаты = Доплаты + Стр.Доплаты;	
		КонецЕсли; 
		
		// письмерова 30.04.2025 BSLR-4558
		Если Стр.ТипОперации = "Корректировка" Тогда		
			СуммаКорректировка = СуммаКорректировка + Стр.Доплаты;	
		КонецЕсли; 
		
		// письмерова 26.04.2024 BSLR-3509
		Если Объект.ДатаНачала >= Дата(2024,4,1) ТОгда
				Если Стр.ТипОперации = "Компенсация потерянного товара" или 
					Стр.ТипОперации = "Компенсация брака" Или 
					  Стр.ТипОперации = "Компенсация ущерба" Или // письмерова 03.07.2024 BSLR-3662 
					  Стр.ТипОперации = "Добровольная компенсация при возврате" Или // письмерова 03.07.2024 BSLR-3662
						Стр.ТипОперации = "Компенсация подмененного товара"  Тогда 
				КомпенсацияУщерба = КомпенсацияУщерба + Стр.Сумма;
				МассивДляУдаления.Добавить(Стр);	
			КонецЕсли; 
		КонецЕсли;	
		
		// пересчет комиссии вб и услуг поверенного
		Если Стр.ТипОперации = "Продажа" Тогда
			WB_komission = WB_komission + Стр.Комиссия;     // письмерова 21.12.2023 BSLR-2959
			Если (Стр.ОбоснованиеДляОплаты = "Логистика" Или Стр.ТипОперации = "логистика") и 
				(Стр.СтранаПродажи <> "Россия" и Стр.СтранаПродажи <> "RU") ТОгда // письмерова 17.04.2024 BSLR-3481
				WB_komission = WB_komission + Стр.УслугиПоДоставке;
			КонецЕсли;
			
			ppvz_reward = ppvz_reward + Стр.Эквайринг + Стр.ВозмещениеВыдачаВозврат;
			// письмерова 26.04.2024 BSLR-3509
			Если Стр.ПроцентЭквайринга <> 0 Тогда
				ЭквайрингОТдельно = ЭквайрингОТдельно + Стр.Эквайринг; КонецЕсли;
		ИначеЕсли Стр.ТипОперации = "Возврат" Тогда
			WB_komission_ВЗ = WB_komission_ВЗ - (Стр.Комиссия);// + Стр.НДСКомиссии);
			
			ppvz_reward_ВЗ = ppvz_reward_ВЗ - (Стр.Эквайринг + Стр.ВозмещениеВыдачаВозврат);
			// письмерова 26.04.2024 BSLR-3509
			Если Стр.ПроцентЭквайринга <> 0 Тогда
				ЭквайрингОТдельно_ВЗ = ЭквайрингОТдельно_ВЗ - Стр.Эквайринг; КонецЕсли;
		КонецЕсли;  
			
		// письмерова 27.11.2024 BSLR-4102 
		Если Стр.ТипОперации = "Возврат" Тогда
			ЭквайрингОТдельно_ВЗБезНуля = ЭквайрингОТдельно_ВЗБезНуля - Стр.Эквайринг;
		Иначе
			ЭквайрингОТдельноБезНуля = ЭквайрингОТдельноБезНуля + Стр.Эквайринг;	
		КонецЕсли;
		// письмерова 14.03.2025 BSLR-4435
		Если Стр.ТипОперации = "Возмещение за выдачу и возврат товаров на ПВЗ" Тогда
			СуммаВозмещениеПВЗ = СуммаВозмещениеПВЗ + Стр.ВозмещениеВыдачаВозврат;	
		КонецЕсли;
		
		// письмерова 26.08.2025 BSLR-4868 - компенсация лояльности
		Если Стр.ТипОперации = "Компенсация скидки по программе лояльности" Тогда 
			СуммаВозмещениеЛояльности = СуммаВозмещениеЛояльности + Стр.КомпенсацияЛояльности;	
		КонецЕсли;	
		// письмерова 06.10.2025 BSLR-4934 ++ 
		Если Стр.ТипОперации = "Стоимость участия в программе лояльности" Тогда 
			СуммаСтоимостьУчастияЛояльности = СуммаСтоимостьУчастияЛояльности + Стр.СтоимостьУчастияЛояльности;	
		КонецЕсли;	
		Если Стр.ТипОперации = "Сумма удержанная за начисленные баллы программы лояльности" Тогда 
			СуммаУдержанияЗаБаллыЛояльности = СуммаУдержанияЗаБаллыЛояльности + Стр.УдержанияЗаБаллыЛояльности;	
		КонецЕсли; // BSLR-4934	 --
		
		Если Стр.ТипОперации = "Разовое изменение срока перечисления денежных средств" Тогда 
			РазовоеНачисление = РазовоеНачисление + Стр.РазовоеНачисление;	
		КонецЕсли;
			
	КонецЦикла;	

	СуммаУслугХранения = Хранение + ПлатнаяПриемка + Доплаты;  // BSLR-4102  - только файлы
	Если ВозмещениеИздержекПоПеревозке_V2 = 0 Тогда
		WB_komission_ИТОГ = WB_komission + СуммаУслугХранения - WB_komission_ВЗ + ВозмещениеИздержекПоПеревозке + УслугиПоДоставке; 
		ВозмещениеИздержекПоПеревозке_Итог = ВозмещениеИздержекПоПеревозке; //BSLR-3690
	Иначе
		// для повышения точности в комиссии нужно учитывать ВозмещениеИздержекПоПеревозке, у поверенного нужно использовать ВозмещениеИздержекПоПеревозке_V2, BSLR-3690
		Если ВозмещениеИздержекПоПеревозке = 0 ТОгда  
			WB_komission_ИТОГ = WB_komission + СуммаУслугХранения - WB_komission_ВЗ + УслугиПоДоставке +
			   // BSLR-3796
				?(НЕ Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке,ВозмещениеИздержекПоПеревозке_V2,0); // письмерова 08.07.2024 BSLR-3667 08.07.2024  
		Иначе
			WB_komission_ИТОГ = WB_komission + СуммаУслугХранения - WB_komission_ВЗ + УслугиПоДоставке + 
			   // BSLR-3796
				?(НЕ Объект.ВключитьВСуммуКомиссииИздержкиПоПеревозке,ВозмещениеИздержекПоПеревозке,0); // письмерова 08.07.2024 BSLR-3667 08.07.2024  
		КонецЕсли;
		ВозмещениеИздержекПоПеревозке_Итог = ВозмещениеИздержекПоПеревозке_V2; //BSLR-3690
	КонецЕсли;    

	ppvz_reward_ИТОГ = ppvz_reward + ppvz_reward_ВЗ - ВозмещениеИздержекПоПеревозке_Итог; //BSLR-3690 
	// письмерова 26.04.2024 BSLR-3509
	Если ЭквайрингОТдельно_ВЗ > 0 Тогда // письмерова 30.05.2024
    	ЭквайрингОТдельно_ИТОГ = ЭквайрингОТдельно - ЭквайрингОТдельно_ВЗ;
	Иначе
		ЭквайрингОТдельно_ИТОГ = ЭквайрингОТдельно + ЭквайрингОТдельно_ВЗ;
	КонецЕсли;
	
	// BSLR-4102 - смена знака у возвратов, экваринг без учета процента	
	Если Объект.ДатаНачала > Дата(2024,11,1) Тогда
		WB_komission_ИТОГ = WB_komission + СуммаУслугХранения + WB_komission_ВЗ + УслугиПоДоставке + ВозмещениеИздержекПоПеревозке_V2; 
		ЭквайрингОТдельно_ИТОГ = ЭквайрингОТдельноБезНуля + ЭквайрингОТдельно_ВЗБезНуля;
	КонецЕсли;	
	
	СтруктураУслуг.Вставить("delivery_EX", УслугиПоДоставке_Международная);	 
	// письмерова 04.12.2023 BSLR-2814	
	Результат.Вставить("ВозмещениеИздержекПоПеревозке",ВозмещениеИздержекПоПеревозке_Итог); //BSLR-3690
	Результат.Вставить("УслугиПоДоставке",УслугиПоДоставке);
    Результат.Вставить("СуммаУслугХранения",СуммаУслугХранения);
	Результат.Вставить("СуммаКомиссияВБ",WB_komission_ИТОГ- СуммаВозмещениеПВЗ + СуммаКорректировка);  // письмерова 30.04.2025 BSLR-4558
	// письмерова 20.03.2024 BSLR-2959
	Результат.Вставить("Хранение",Хранение);
	Результат.Вставить("ПлатнаяПриемка",ПлатнаяПриемка);
	Результат.Вставить("Доплаты",Доплаты);
	Результат.Вставить("Удержания",Удержания);
	Результат.Вставить("СуммаКорректировка",СуммаКорректировка); // письмерова 30.04.2025 BSLR-4558 
	
	penalty = ТаблицаТоваров.Итог("Штрафы");  
	СтруктураУслуг.Вставить("WB_komission",WB_komission_ИТОГ - СуммаВозмещениеПВЗ + СуммаКорректировка);  // письмерова 30.04.2025 BSLR-4558
	//СтруктураУслуг.Вставить("ppvz_reward", ppvz_reward_ИТОГ); письмерова 26.04.2024 BSLR-3509
	СтруктураУслуг.Вставить("penalty", penalty); 
	СтруктураУслуг.Вставить("other_deductions", Удержания);  // прочие удержания // письмерова 20.03.2024 BSLR-2959
	СтруктураУслуг.Вставить("advance_payment", СуммаАвансовойОплаты);  
	СтруктураУслуг.Вставить("partial_compensation", СуммаКомпенсацииБрака); 
	// письмерова 26.04.2024 BSLR-3509
	Если Объект.ДатаНачала >= Дата(2024,4,1) ТОгда	
		СтруктураУслуг.Вставить("refund_on_acquiring", ЭквайрингОТдельно_ИТОГ); 
		Если КомпенсацияУщерба <> 0 ТОгда // BSLR-4460
			СтруктураУслуг.Вставить("compensation_for_damage", - КомпенсацияУщерба);
		КонецЕсли;
		СтруктураУслуг.Вставить("other_payments", ПрочиеВыплаты);
		СтруктураУслуг.Вставить("payment_schedule", РазовоеНачисление);
		// BSLR-4934 ++
		Если Объект.ДатаНачала >= Дата(2025,9,15) Тогда // услуги поверенного разделили 
			СтруктураУслуг.Вставить("rebill_logistic_cost",-ВозмещениеИздержекПоПеревозке_Итог);	
			СтруктураУслуг.Вставить("delivery_return_goods",ppvz_reward_ИТОГ - ЭквайрингОТдельно_ИТОГ + СуммаВозмещениеПВЗ + ВозмещениеИздержекПоПеревозке_Итог );	
		Иначе
			СтруктураУслуг.Вставить("ppvz_reward",ppvz_reward_ИТОГ - ЭквайрингОТдельно_ИТОГ + СуммаВозмещениеПВЗ);	
		КонецЕсли; // BSLR-4934 --
		Для Каждого Эл Из МассивДляУдаления Цикл
			ТаблицаТоваров.Удалить(Эл);	
		КонецЦикла;
	Иначе
		СтруктураУслуг.Вставить("ppvz_reward", ppvz_reward_ИТОГ); 
	КонецЕсли; 
	// письмерова 06.10.2025 BSLR-4934 ++
	Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
		Если СуммаВозмещениеЛояльности <> 0 ТОгда
			СтруктураУслуг.Вставить("loyalty_compensation",- СуммаВозмещениеЛояльности);
		КонецЕсли;
	КонецЕсли;
	Если СуммаСтоимостьУчастияЛояльности <> 0 ТОгда
		СтруктураУслуг.Вставить("loyalty_program_cost",СуммаСтоимостьУчастияЛояльности);
	КонецЕсли;
	Если СуммаУдержанияЗаБаллыЛояльности <> 0 ТОгда
		СтруктураУслуг.Вставить("loyalty_deductions",СуммаУдержанияЗаБаллыЛояльности);
	КонецЕсли; // BSLR-4934 --	
	
	Для Каждого Услуга Из ПереченьДопУслуг Цикл
		Если СтруктураУслуг.Получить(Услуга.Ключ) <> Неопределено Тогда	
			
			// письмерова 26.04.2024 BSLR-3509
			Если Объект.ДатаНачала < Дата(2024,4,1) ТОгда // не добавляем новые услуги
				Если Услуга.Ключ = "refund_on_acquiring" Или
						Услуга.Ключ = "compensation_for_damage" Или
							Услуга.Ключ = "other_payments" Тогда  
					ПРодолжить; КонецЕсли;
			КонецЕсли;		
			
			СтрокаУслуг = ТаблицаУслуг.Добавить();
			СтрокаУслуг.Наименование = Услуга.Значение;
			СтрокаУслуг.НаименованиеМП = Услуга.Ключ;
			СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги",Услуга.Ключ);
			СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.Wildberries, СтрокаУслуг.УслугаМП);
			СтрокаУслуг.Цена = СтруктураУслуг[Услуга.Ключ];
			СтрокаУслуг.СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,ОБъект.ЛичныйКабинет,Период.ДатаОкончания);
			СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтрокаУслуг.СтавкаНДС);
			СтрокаУслуг.Количество = 1;
			СтрокаУслуг.Сумма = СтруктураУслуг[Услуга.Ключ]; 
			СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);	
		КонецЕсли;	
	КонецЦикла;
	Возврат Результат;  // письмерова 04.12.2023 BSLR-2814
КонецФункции


&НаСервере
Функция ОбработатьТаблицуТоваровВБ(ТаблицаТоваров, ЭтоВыкупы, ЭтоУСН, СтруктураУслуг = Неопределено)
	
	//Отсекаем товары, на которых нет продаж, а есть только цифры комиссии, их мы выше уже собрали в таблицу 
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	тз.rid КАК rid,
		|	тз.srid КАК srid,
		|	тз.site_country КАК site_country,
		|	тз.Артикул КАК Артикул,
		|	тз.Бренд КАК Бренд,
		|	тз.ИД_Заказ КАК ИД_Заказ,
		|	тз.ИД_Этикетки_Заказа КАК ИД_Этикетки_Заказа,
		|	тз.Идентификатор КАК Идентификатор,
		|	тз.Наименование КАК Наименование,
		|	тз.НомерОперации КАК НомерОперации,
		|	тз.НомерОтправления КАК НомерОтправления,
		|	тз.ТипОперации КАК ТипОперации,
		|	тз.НомерСтроки КАК НомерСтроки,
		|	тз.Размер КАК Размер,
		|	тз.Штрихкод КАК Штрихкод,
		|	тз.Цена КАК Цена,
		|	тз.Сумма КАК Сумма,
		|	тз.Количество КАК Количество,
		|	тз.Комиссия КАК Комиссия,
		|	тз.НДС КАК НДС,
		|	тз.НДСКомиссии КАК НДСКомиссии,
		|	тз.Доплаты КАК Доплаты,
		|	тз.Штрафы КАК Штрафы,
		|	тз.СуммаКВыплате КАК СуммаКВыплате,
		// письмерова 25.08.2025 BSLR-4868
		|	тз.КомпенсацияЛояльности КАК КомпенсацияЛояльности,
		// письмерова 30.10.2025 BSLR-4895
		|	тз.ПродажаЮЛ КАК ПродажаЮЛ,
		// письмерова 19.04.2024 BSLR-3481
		|	ТЗ.КодНоменклатуры КАК КодНоменклатуры,
		|	тз.ОбоснованиеДляОплаты КАК ОбоснованиеДляОплаты
		|ПОМЕСТИТЬ ВТ_ТЗ
		|ИЗ
		|	&тз КАК тз
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ТЗ.rid КАК rid,
		|	ВТ_ТЗ.srid КАК srid,
		|	ВТ_ТЗ.site_country КАК site_country,
		|	ВТ_ТЗ.Артикул КАК Артикул,
		|	ВТ_ТЗ.Бренд КАК Бренд,
		|	ВТ_ТЗ.ИД_Заказ КАК ИД_Заказ,
		|	ВТ_ТЗ.ИД_Этикетки_Заказа КАК ИД_Этикетки_Заказа,
		// письмерова 30.10.2025 BSLR-4895
		|	ВЫБОР КОГДА ВТ_ТЗ.ПродажаЮЛ ТОГДА ВТ_ТЗ.srid ИНАЧЕ  ВТ_ТЗ.Идентификатор КОНЕЦ КАК Идентификатор,
		|	ВТ_ТЗ.Наименование КАК Наименование,
		|	ВТ_ТЗ.НомерОперации КАК НомерОперации,
		|	ВТ_ТЗ.НомерОтправления КАК НомерОтправления,
		|	ВТ_ТЗ.ТипОперации КАК ТипОперации,
		|	ВТ_ТЗ.НомерСтроки КАК НомерСтроки,
		|	ВТ_ТЗ.Размер КАК Размер,
		|	ВТ_ТЗ.Штрихкод КАК Штрихкод,
		|	ВТ_ТЗ.Цена КАК Цена,
		|	ВТ_ТЗ.Сумма КАК Сумма,
		|	ВТ_ТЗ.Количество КАК Количество,
		|	ВТ_ТЗ.Комиссия КАК Комиссия,
		|	ВТ_ТЗ.НДС КАК НДС,
		|	ВТ_ТЗ.НДСКомиссии КАК НДСКомиссии,
		|	ВТ_ТЗ.Доплаты КАК Доплаты,
		|	ВТ_ТЗ.Штрафы КАК Штрафы,
		|	ВТ_ТЗ.СуммаКВыплате КАК СуммаКВыплате,
		// письмерова 25.08.2025 BSLR-4868
		|	ВТ_ТЗ.КомпенсацияЛояльности КАК КомпенсацияЛояльности,
		// письмерова 30.10.2025 BSLR-4895
		|	ВТ_ТЗ.ПродажаЮЛ КАК ПродажаЮЛ,
		// письмерова 19.04.2024 BSLR-3481
		|	ВТ_ТЗ.КодНоменклатуры КАК КодНоменклатуры,
		|	ВТ_ТЗ.ОбоснованиеДляОплаты КАК ОбоснованиеДляОплаты
		|ИЗ
		|	ВТ_ТЗ КАК ВТ_ТЗ
		|ГДЕ
		|	ВЫБОР
		|			КОГДА &ЭтоВыкупы
		|				ТОГДА ВТ_ТЗ.ТипОперации = ""Продажа""
		|						ИЛИ ВТ_ТЗ.ТипОперации = ""Возврат""  
		                                                                  // письмерова 20.12.2023 BSLR-2959      // письмерова 21.06.2024 BSLR-3602            // письмерова 15.08.2024 BSLR-3796
		|						ИЛИ ВТ_ТЗ.ТипОперации = ""Логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""логистика""  ИЛИ ВТ_ТЗ.ТипОперации = ""Коррекция логистики"" ИЛИ ВТ_ТЗ.ТипОперации = ""Логистика сторно""
		|			ИНАЧЕ ВТ_ТЗ.ТипОперации = ""Продажа""
		|					ИЛИ ВТ_ТЗ.ТипОперации = ""Возврат"" 
		                                                                 // письмерова 19.03.2024 BSLR-3355         // письмерова 25.08.2025 BSLR-4868
		|						ИЛИ ВТ_ТЗ.ТипОперации = ""Логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""логистика"" ИЛИ ВТ_ТЗ.ТипОперации = ""Компенсация скидки по программе лояльности"" 
															// письмерова 06.10.2025 BSLR-4934								
		|						ИЛИ ВТ_ТЗ.ТипОперации = ""Стоимость участия в программе лояльности"" ИЛИ ВТ_ТЗ.ТипОперации = ""Сумма удержанная за начисленные баллы программы лояльности""
		|		КОНЕЦ";

	Запрос.УстановитьПараметр("тз", ТаблицаТоваров);
	Запрос.УстановитьПараметр("ЭтоВыкупы", ЭтоВыкупы);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ТаблицаТоваровБезУслуг = РезультатЗапроса.Выгрузить(); 


#Область Выкупы	
	// письмерова 07.08.2023 BSLR-2288
	Если ЭтоВыкупы Тогда // перенести суммы к выплате (комиссия по доставке) в итоговую сумму к выплате по заказу 
		// письмерова 31.10.2023 BSLR-2741 
		// сворачиваем выкупы, т.к. теперь приходит только логистика, без продажи 
		Если ЭтоУСН Тогда // письмерова 24.11.2023 BSLR-2814                                                                                                                         // письмерова 19.04.2024 BSLR-3481
			ТаблицаТоваровБезУслуг.Свернуть(" Артикул, Бренд,  Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации,  Размер,ШтрихКод,  ОбоснованиеДляОплаты, Цена, КодНоменклатуры", 
				"Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,SRID,RID, site_country,НомерСтроки,ИД_Заказ, ИД_Этикетки_Заказа");  
		Иначе
			                             // BSLR-3745                                                                                                                                      // письмерова 19.04.2024 BSLR-3481
			ТаблицаТоваровБезУслуг.Свернуть("SRID, Артикул, Бренд,  Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации,  Размер,ШтрихКод,  ОбоснованиеДляОплаты, КодНоменклатуры", 
				"Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,RID, site_country,НомерСтроки,ИД_Заказ, ИД_Этикетки_Заказа,Цена"); // письмерова 09.10.2023 BSLR-2677 
		КонецЕсли; 
	
		МассивДляУдаления = новый Массив;
		
		Для каждого СТр Из ТаблицаТоваровБезУслуг Цикл  
			                                                                                                                  // письмерова 15.08.2024 BSLR-3796
			Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" Или Стр.ТипОперации = "Коррекция логистики" ИЛи Стр.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
				//НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("Идентификатор",Стр.Идентификатор));
				НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("SRID",Стр.SRID)); // BSLR-3745
				КомиссияКПереносу = Стр.Комиссия;  // письмерова 24.11.2023 BSLR-2814 
				Если НайтиСтроки.Количество() Тогда
					Для Каждого Ст из НайтиСтроки Цикл                                                                                 // письмерова 15.08.2024 BSLR-3796
						Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" Или Ст.ТипОперации = "Коррекция логистики" ИЛи Ст.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
							Продолжить;
						КонецЕсли; 
						Если КомиссияКПереносу = 0 ТОгда // дважды может вычисть
							Продолжить;
						КонецЕсли;
						//письмерова 13.10.2023 BSLR-2718
						Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда // меняем знаки // письмерова 13.03.2024 BSLR-3355
							//Ст.СуммаКВыплате = Ст.СуммаКВыплате + Стр.Комиссия; - вся комиссия отнимается от операции с типом Продажа, письмерова 23.01.2024 BSLR-3095
							//КомиссияКПереносу = 0;
						Иначе
							Ст.СуммаКВыплате = Ст.СуммаКВыплате - Стр.Комиссия;
							КомиссияКПереносу = 0;
						КонецЕсли;
						Если ЭтоУСН Тогда // письмерова 24.11.2023 BSLR-2814  - здесь цифры не бьются, поэтому логистику распределяем ниже по сумме продажи
							//Ст.Комиссия = Ст.Комиссия + Стр.Комиссия;
							//КомиссияКПереносу = 0;
						КонецЕсли;
					КонецЦикла;
				// BSLR-3745	
					Если КомиссияКПереносу = 0 ТОгда 
						МассивДляУдаления.Добавить(Стр);
					КонецЕсли;
				КонецЕсли;
				// BSLR-3745
				//МассивДляУдаления.Добавить(Стр);	
			КонецЕсли; 
			
		КонецЦикла; 
		// BSLR-3745 ++	
		// удаляем строки с логистикой 	
		Для Каждого Эл Из МассивДляУдаления Цикл 
			ТаблицаТоваровБезУслуг.Удалить(Эл);	
		КонецЦикла; 		
				
		ТаблицаТоваровБезУслуг.Свернуть("RID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, ТипОперации, Размер,  
									|ШтрихКод, ОбоснованиеДляОплаты, КодНоменклатуры", "Цена,SRID, Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы"); // письмерова 09.10.2023 BSLR-2677 
		
		// вторая итерация, остались строки, которые не распределились по SRID 	
		МассивДляУдаления.Очистить();
		Для каждого СТр Из ТаблицаТоваровБезУслуг Цикл 
			                                                                                                                  // письмерова 15.08.2024 BSLR-3796
			Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" Или Стр.ТипОперации = "Коррекция логистики" ИЛи Стр.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
				НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("Идентификатор",Стр.Идентификатор));
				КомиссияКПереносу = Стр.Комиссия;  // письмерова 24.11.2023 BSLR-2814 
				Если НайтиСтроки.Количество() Тогда
					Для Каждого Ст из НайтиСтроки Цикл                                                                                 // письмерова 15.08.2024 BSLR-3796
						Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" Или Ст.ТипОперации = "Коррекция логистики" ИЛи Ст.ТипОперации = "Логистика сторно" Тогда // письмерова 21.06.2024 BSLR-3602
							Продолжить;
						КонецЕсли; 
						Если КомиссияКПереносу = 0 ТОгда // дважды может вычисть
							Продолжить;
						КонецЕсли;
						Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда // меняем знаки // письмерова 13.03.2024 BSLR-3355
						Иначе
							Если Ст.СуммаКВыплате < Стр.Комиссия Тогда
								Продолжить;
							Иначе
								Ст.СуммаКВыплате = Ст.СуммаКВыплате - Стр.Комиссия;
								КомиссияКПереносу = 0;
							КонецЕсли;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли; 
				МассивДляУдаления.Добавить(Стр);
			КонецЕсли;  		
		КонецЦикла; 
		
		// удаляем строки с логистикой 	
		Для Каждого Эл Из МассивДляУдаления Цикл 
			ТаблицаТоваровБезУслуг.Удалить(Эл);	
		КонецЦикла; 		
		// BSLR-3745 --
		
		// цену нужно пересчитать 
		Для Каждого Стр из ТаблицаТоваровБезУслуг Цикл
			Стр.Цена = Стр.Сумма/?(Стр.Количество=0,1,Стр.Количество);	
		КонецЦикла;  
		
		// письмерова 04.12.2023 BSLR-2814	- распределить суммы комиссий для схождения с данными первичных документов 
		Если ЭтоУСН Тогда 
			Если СтруктураУслуг <> Неопределено Тогда 
				СуммаКРаспределению = СтруктураУслуг.ВозмещениеИздержекПоПеревозке + СтруктураУслуг.СуммаУслугХранения + СтруктураУслуг.УслугиПоДоставке 
										+ СтруктураУслуг.СуммаКорректировка; // письмерова 30.04.2025 BSLR-4558; 
				Если СуммаКРаспределению <> 0 Тогда    // письмерова 20.12.2023 BSLR-2959
					ЕстьОшибкиРаспределения = Ложь;
					СтавкаНДСВознагражденияЗначение = 20;
					Отбор = новый Структура;
					Отбор.Вставить("ТипОперации","Продажа");
					ТЗПродажи = ТаблицаТоваровБезУслуг.Скопировать(Отбор); 
					 
					МассивКоэффициентов    = ТЗПродажи.ВыгрузитьКолонку("Сумма");
					РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаКРаспределению, МассивКоэффициентов);
					
					Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
						Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
						Сообщить("По документу не удалось распредилить сумму услуг хранения. Проверьте сумму комиссии!");
						ЕстьОшибкиРаспределения = Истина;
					КонецЕсли;
				    сч = 0;
					Для Каждого строкаТЗ из ТаблицаТоваровБезУслуг Цикл		
				        //распредилим только по продажам 
						если не ЕстьОшибкиРаспределения и строкаТЗ.ТипОперации = "Продажа" тогда
							строкаТЗ.Комиссия = строкаТЗ.Комиссия + РезультатРаспределения[сч];
							сч = сч +1; 
							//пересчитаем НДС комиссии 
							строкаТЗ.НДСКомиссии = строкаТЗ.Комиссия * СтавкаНДСВознагражденияЗначение / (100 + СтавкаНДСВознагражденияЗначение);
						КонецЕсли;  
					КонецЦикла;	 			
				КонецЕсли;	
			КонецЕсли;
		КонецЕсли;  		
		
	КонецЕсли; 
		
	// письмерова 26.01.2024 BSLR-3095 - убрать из загрузки по выкупа сторно продаж и сторно возврата
	Если ЭтоВыкупы Тогда 
		Для Каждого Стр из ТаблицаТоваровБезУслуг Цикл
			Если Стр.ОбоснованиеДляОплаты = "Сторно продаж" Или Стр.ОбоснованиеДляОплаты = "Сторно возврата" Тогда
				ТаблицаТоваровБезУслуг.Удалить(Стр);
			КонецЕсли;
		КонецЦикла;
	// письмерова 19.03.2024 BSLR-3355 SRID - сворачиваем только для выкупов
	// BSLR-3745 ++
	//ТаблицаТоваровБезУслуг.Свернуть("RID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, НомерСтроки, Размер,  
	//								|ШтрихКод, Цена, ОбоснованиеДляОплаты, КодНоменклатуры", "Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,SRID"); // письмерова 09.10.2023 BSLR-2677 
	//КонецЕсли; 		                                                      // письмерова 19.04.2024 BSLR-3481
		
#КонецОбласти

	Иначе	                            // письмерова 19.03.2024 BSLR-3355 SRID - сворачиваем только для выкупов
	ТаблицаТоваровБезУслуг.Свернуть("RID, SRID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, НомерСтроки, Размер,  
									|ШтрихКод, Цена, ОбоснованиеДляОплаты, КодНоменклатуры, ПродажаЮЛ", "Количество, Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,КомпенсацияЛояльности"); // BSLR-4868
	КонецЕсли;                                                                    			// BSLR-4895
	// BSLR-3745 --	
	// письмерова 15.03.2024 BSLR-3287
	// обработка ЧКБ, Авансовой оплаты за товар, Компенсация подмененного товара  
	// свернуть по типу продажа/возврат и по ШК
	Если Не ЭтоВыкупы Тогда  
		МассивДляУдаления = Новый Массив;
		//ТабШК = Новый ТаблицаЗначений;
		ТабШК = ПолучитьТаблицуЗагрузкиТоваровWB();
		
		Для Каждого Стр Из ТаблицаТоваровБезУслуг Цикл
			
			Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" Тогда  // пока только для ЧКБ
				//Стр.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или 
				//	Стр.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения"  
				нСтр = ТабШК.Добавить();
				ЗаполнитьЗначенияСвойств(нСтр,Стр);
				МассивДляУдаления.Добавить(Стр); 
			КонецЕсли;
			
			// письмерова 10.07.2024 BSLR-3690 - удалить, комиссия учтена при пересчктк услуг
			//Если СТр.ОбоснованиеДляОплаты = "Коррекция продаж" ТОгда
			//	МассивДляУдаления.Добавить(Стр);  - BSLR-4102
			//КонецЕсли;
			
		КонецЦикла;
		
		Для Каждого Эл из МассивДляУдаления Цикл
			ТаблицаТоваровБезУслуг.Удалить(Эл);
		КонецЦикла;
			
		
		ТабШк.Свернуть("RID, site_country, Артикул, Бренд, ИД_Заказ, ИД_Этикетки_Заказа, Идентификатор, Наименование, НомерОперации, НомерОтправления, ТипОперации, Размер,  
									|ШтрихКод, ОбоснованиеДляОплаты, КодНоменклатуры, ПродажаЮЛ", "Комиссия, НДС, НДСКомиссии, Сумма, СуммаКВыплате, Доплаты, Штрафы,SRID"); // письмерова 09.10.2023 BSLR-2677 
                                                                 					// BSLR-4895
		Для Каждого Стр Из ТабШк Цикл  		
			нСтр = ТаблицаТоваровБезУслуг.Добавить();
			ЗаполнитьЗначенияСвойств(нСтр,Стр);
			// письмерова 09.04.2024 BSLR-3448
			Если Стр.ТипОперации = "Возврат" Или Стр.ТипОперации = "возврат" Тогда
				нСтр.Количество = -1;
				нСтр.Цена = -нСтр.Сумма;
			Иначе
				нСтр.Количество = 1;
				нСтр.Цена = нСтр.Сумма; 
			КонецЕсли;
		КонецЦикла;	

		// письмерова 19.03.2024 BSLR-3355 SRID
		МассивДляУдаления = Новый Массив;
		Для каждого СТр Из ТаблицаТоваровБезУслуг Цикл 
			
			Если Стр.ТипОперации = "Логистика" Или Стр.ТипОперации = "логистика" Тогда // письмерова 20.12.2023 BSLR-2959
				НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("SRID",Стр.SRID));
				КомиссияКПереносу = Стр.Комиссия;  // письмерова 24.11.2023 BSLR-2814 
				Если НайтиСтроки.Количество() Тогда
					Для Каждого Ст из НайтиСтроки Цикл
						Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" Тогда // письмерова 20.12.2023 BSLR-2959, BSLR-3355
							Продолжить;
						КонецЕсли; 
						Если КомиссияКПереносу = 0 ТОгда // дважды может вычисть
							Продолжить;
						КонецЕсли;
						//письмерова 13.10.2023 BSLR-2718
						Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда // меняем знаки // письмерова 13.03.2024 BSLR-3355
							Ст.Комиссия = Ст.Комиссия - Стр.Комиссия;
							КомиссияКПереносу = 0;						
						Иначе
							Ст.Комиссия = Ст.Комиссия + Стр.Комиссия;
							КомиссияКПереносу = 0;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
				
				МассивДляУдаления.Добавить(Стр);	
			КонецЕсли;
			
			// письмерова 25.08.2025 BSLR-4868 - компенсация лояльности
			Если Стр.ТипОперации = "Компенсация скидки по программе лояльности" Тогда 
				// письмерова 06.10.2025 BSLR-4934 ++
				Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
				
					НайтиСтроки = ТаблицаТоваровБезУслуг.НайтиСтроки(Новый Структура("SRID",Стр.SRID));
					КомпенсацияЛояльности = Стр.КомпенсацияЛояльности;  // письмерова 24.11.2023 BSLR-2814 
					Если НайтиСтроки.Количество() Тогда
						Для Каждого Ст из НайтиСтроки Цикл
							Если Ст.ТипОперации = "Логистика" Или Ст.ТипОперации = "логистика" ИЛи Ст.ТипОперации = "Компенсация скидки по программе лояльности" Тогда
								Продолжить;
							КонецЕсли; 
							Если КомпенсацияЛояльности = 0 ТОгда // дважды может вычисть
								Продолжить;
							КонецЕсли;
							Если Ст.ТипОперации = "Возврат" или Ст.ТипОперации = "возврат" Тогда 
								// не меняем
							Иначе
								Ст.Сумма = Ст.Сумма - КомпенсацияЛояльности;
								Ст.Цена = Ст.Сумма/?(Ст.Количество = 0, 1, Ст.Количество);
								КомпенсацияЛояльности = 0;
							КонецЕсли;
						КонецЦикла;
					КонецЕсли; 
				КонецЕсли; // BSLR-4934 --
				
				МассивДляУдаления.Добавить(Стр);	
			КонецЕсли;
			// письмерова 06.10.2025 BSLR-4934
			Если Стр.ТипОперации = "Стоимость участия в программе лояльности" ИЛИ Стр.ТипОперации = "Сумма удержанная за начисленные баллы программы лояльности" Тогда 
				МассивДляУдаления.Добавить(Стр);	
			КонецЕсли; 
			
		КонецЦикла; 
		
		// удаляем строки с логистикой 	
		Для Каждого Эл Из МассивДляУдаления Цикл 
			ТаблицаТоваровБезУслуг.Удалить(Эл);	
		КонецЦикла; 
		
		// письмерова 19.03.2024 BSLR-3355  - дораспределение комиссии
		Если СтруктураУслуг.СуммаКомиссияВБ <> 0 ТОгда
			Если ТаблицаТоваровБезУслуг.Итог("Комиссия") <> СтруктураУслуг.СуммаКомиссияВБ ТОгда   
				
				СуммаКРаспределению = СтруктураУслуг.СуммаКомиссияВБ - ТаблицаТоваровБезУслуг.Итог("Комиссия");
				
				Если СуммаКРаспределению <> 0 Тогда    
					ЕстьОшибкиРаспределения = Ложь;
					СтавкаНДСВознагражденияЗначение = 20;
					Отбор = новый Структура;
					Отбор.Вставить("ТипОперации","Продажа");
					ТЗПродажи = ТаблицаТоваровБезУслуг.Скопировать(Отбор); 
					 
					МассивКоэффициентов    = ТЗПродажи.ВыгрузитьКолонку("Сумма");
					РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаКРаспределению, МассивКоэффициентов);
					
					Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
						Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
						Сообщить("По документу не удалось распредилить сумму услуг хранения. Проверьте сумму комиссии!");
						ЕстьОшибкиРаспределения = Истина;
					КонецЕсли;
				    сч = 0;
					Для Каждого строкаТЗ из ТаблицаТоваровБезУслуг Цикл		
				        //распредилим только по продажам 
						если не ЕстьОшибкиРаспределения и строкаТЗ.ТипОперации = "Продажа" тогда
							строкаТЗ.Комиссия = строкаТЗ.Комиссия + РезультатРаспределения[сч];
							сч = сч +1; 
							//пересчитаем НДС комиссии 
							строкаТЗ.НДСКомиссии = строкаТЗ.Комиссия * СтавкаНДСВознагражденияЗначение / (100 + СтавкаНДСВознагражденияЗначение);
						КонецЕсли;  
					КонецЦикла;	 			
				КонецЕсли;	
			КонецЕсли;
		КонецЕсли;	
	КонецЕсли;
	
	Возврат ТаблицаТоваровБезУслуг;
	
КонецФункции

&НаСерверебезконтекста
Функция ЗаголовкиТаблицыWB()
	
	МассивКолонок = Новый Массив;
	
	МассивКолонок.Добавить("№");
	МассивКолонок.Добавить("Номер поставки");
	МассивКолонок.Добавить("Предмет");
	МассивКолонок.Добавить("Код номенклатуры");
	МассивКолонок.Добавить("Бренд");
	МассивКолонок.Добавить("Артикул поставщика");
	МассивКолонок.Добавить("Название");
	МассивКолонок.Добавить("Размер");
	МассивКолонок.Добавить("Баркод");
	МассивКолонок.Добавить("Тип документа");
	МассивКолонок.Добавить("Обоснование для оплаты");
	МассивКолонок.Добавить("Дата заказа покупателем");
	МассивКолонок.Добавить("Дата продажи");
	МассивКолонок.Добавить("Кол-во");
	МассивКолонок.Добавить("Цена розничная");
	МассивКолонок.Добавить("Вайлдберриз реализовал Товар (Пр)");
	МассивКолонок.Добавить("Согласованный продуктовый дисконт, %");
	МассивКолонок.Добавить("Промокод %");
	МассивКолонок.Добавить("Итоговая согласованная скидка");
	МассивКолонок.Добавить("Цена розничная с учетом согласованной скидки");
	// ++ Бойков BSLR-1961. Новая структура и порядок колонок
	МассивКолонок.Добавить("Размер снижения кВВ из-за рейтинга, %");
	МассивКолонок.Добавить("Размер снижения кВВ из-за акции, %");
	МассивКолонок.Добавить("Скидка постоянного Покупателя (СПП)");
	МассивКолонок.Добавить("Размер кВВ, %");
	МассивКолонок.Добавить("Размер  кВВ без НДС, % Базовый");
	МассивКолонок.Добавить("Итоговый кВВ без НДС, %");
	МассивКолонок.Добавить("Вознаграждение с продаж до вычета услуг поверенного, без НДС");
	МассивКолонок.Добавить("Возмещение за выдачу и возврат товаров на ПВЗ");
	МассивКолонок.Добавить("Возмещение издержек по эквайрингу");
	МассивКолонок.Добавить("Вознаграждение Вайлдберриз (ВВ), без НДС");
	МассивКолонок.Добавить("НДС с Вознаграждения Вайлдберриз");
	МассивКолонок.Добавить("К перечислению Продавцу за реализованный Товар");
	МассивКолонок.Добавить("Количество доставок");
	МассивКолонок.Добавить("Количество возврата");
	МассивКолонок.Добавить("Услуги по доставке товара покупателю");
	МассивКолонок.Добавить("Общая сумма штрафов");
	МассивКолонок.Добавить("Доплаты");
	МассивКолонок.Добавить("Виды логистики, штрафов и доплат");
	МассивКолонок.Добавить("Стикер МП");
	МассивКолонок.Добавить("Наименование банка-эквайера");
	МассивКолонок.Добавить("Номер офиса");
	МассивКолонок.Добавить("Наименование офиса доставки");
	МассивКолонок.Добавить("ИНН партнера");
	МассивКолонок.Добавить("Партнер");
	МассивКолонок.Добавить("Склад");
	МассивКолонок.Добавить("Страна");
	МассивКолонок.Добавить("Тип коробов");
	МассивКолонок.Добавить("Номер таможенной декларации");
	МассивКолонок.Добавить("Код маркировки");
	МассивКолонок.Добавить("ШК");
	МассивКолонок.Добавить("Rid");
	МассивКолонок.Добавить("Srid");
	МассивКолонок.Добавить("Возмещение издержек по перевозке");
	МассивКолонок.Добавить("Организатор перевозки");
	// -- Бойков BSLR-1961
	// письмерова 13.06.2023 BSLR-1982	
	МассивКолонок.Добавить("Обоснование для оплаты");

	
	Возврат МассивКолонок;
КонецФункции

&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровWB(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь, ЭтоВыкупы = Ложь, ВключитьВСуммуПродажВозмешения = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.НомерСтроки = ТекущаяСтрока - 1; 
	// письмерова 17.04.2024 BSLR-3481
	//СтрокаПриемник.site_country      = ?(Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.site_country).ТекущаяОбласть.Текст) = "Россия", "RU", "");
	Если Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.site_country).ТекущаяОбласть.Текст) = "Россия"  Или
		Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.site_country).ТекущаяОбласть.Текст) = "RU"  Тогда			
		СтрокаПриемник.site_country = "RU";
	Иначе
		СтрокаПриемник.site_country = "";
	КонецЕсли; 
	СтрокаПриемник.ОбоснованиеДляОплаты = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ОбоснованиеДляОплаты).ТекущаяОбласть.Текст);
	// письмерова 10.07.2024 BSLR-3690 - Коррекция продаж - обнулять количество, корректировка комиссий
	//Если СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция продаж" ТОгда			
	// 	СтрокаПриемник.Количество = 0;  - BSLR-4102 - перенесено ниже по коду
	//КонецЕсли; 
	
	Если Объект.ДатаНачала < Дата(2024,4,1) ТОгда // письмерова 26.04.2024 BSLR-3509 - до 01.04.2024 старая схема		
		Если СтрокаПриемник.ОбоснованиеДляОплаты = "Частичная компенсация брака" или
			СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или 
			СтрокаПриемник.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения" Тогда  
			Если СтрокаПриемник.Количество = 0 Тогда
				Если СтрокаПриемник.ТипОперации = "Возврат" Тогда 
					СтрокаПриемник.Количество = -1;
				Иначе
					СтрокаПриемник.Количество = 1;	
				КонецЕсли;
			КонецЕсли; 		
		КонецЕсли;	
	Иначе
		// пока ничего не делаем
	КонецЕсли;
	
	СтрокаПриемник.Артикул       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	СтрокаПриемник.Бренд       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Бренд).ТекущаяОбласть.Текст);	
	СтрокаПриемник.ИД_Этикетки_Заказа      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИД_Этикетки_Заказа).ТекущаяОбласть.Текст);
	Гр1 = Лев(СтрокаПриемник.ИД_Этикетки_Заказа,1);
	Гр2 = Сред(СтрокаПриемник.ИД_Этикетки_Заказа,2,3);
	Гр3 = Сред(СтрокаПриемник.ИД_Этикетки_Заказа,5,3);
	Гр4 = Прав(СтрокаПриемник.ИД_Этикетки_Заказа,3);
	СтрокаПриемник.ИД_Этикетки_Заказа = Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3 + Символы.НПП + Гр4; 
	СтрокаПриемник.Идентификатор = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Идентификатор).ТекущаяОбласть.Текст);
	СтрокаПриемник.Комиссия      = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Комиссия).ТекущаяОбласть.Текст) 
	+ Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НДСКомиссии).ТекущаяОбласть.Текст)
	+ Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УслугиПоДоставке).ТекущаяОбласть.Текст);
	
	СтрокаПриемник.НДСКомиссии      = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НДСКомиссии).ТекущаяОбласть.Текст);
	СтрокаПриемник.Наименование       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст);
	// письмерова 05.12.2023 BSLR-2918
	СтрокаПриемник.Размер       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Размер).ТекущаяОбласть.Текст);
	//Попытка	СтрокаПриемник.RID      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.RID).ТекущаяОбласть.Текст);Исключение КонецПопытки; // BSLR-3859
	СтрокаПриемник.Цена          = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст);
	//СтрокаПриемник.Сумма         = ?(ЭтоВыкупы, Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КВыплате).ТекущаяОбласть.Текст), СтрокаПриемник.Цена * СтрокаПриемник.Количество);   
	СтрокаПриемник.Сумма         = СтрокаПриемник.Цена * СтрокаПриемник.Количество;  
	Попытка
		СтрокаПриемник.РазовоеНачисление = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.РазовоеНачисление).ТекущаяОбласть.Текст);  
	Исключение
		
	КонецПопытки;
	СтрокаПриемник.ШтрихКод      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Штрихкод).ТекущаяОбласть.Текст);
	СтрокаПриемник.Штрафы      = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Штрафы).ТекущаяОбласть.Текст);   
	СтрокаПриемник.Доплаты      = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Доплата).ТекущаяОбласть.Текст);
	// BSLR-4102 - перенесено ниже по коду
	Если СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция продаж" ИЛи СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция возвратов" ТОгда	// BSLR-4444		
	 	СтрокаПриемник.Количество = 0; 
	КонецЕсли; 
	
	// письмерова 10.10.2023 BSLR-2677
	Если СтрокаПриемник.ТипОперации = "Возврат" Тогда
		СтрокаПриемник.СуммаКВыплате    = -1*Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаКВыплате).ТекущаяОбласть.Текст);
		// письмерова 23.01.2024 BSLR-3095
		Если ЭтоВыкупы Тогда 
			СтрокаПриемник.Комиссия    = -1*СтрокаПриемник.Комиссия;
			СтрокаПриемник.НДСКомиссии    = -1*СтрокаПриемник.НДСКомиссии;  
		КонецЕсли;
	Иначе
		СтрокаПриемник.СуммаКВыплате    = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаКВыплате).ТекущаяОбласть.Текст);
	КонецЕсли;
	// ++ Бойков BSLR-2048
	ТекстЯчейкиВозмещение = ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеВыдачаВозврат).ТекущаяОбласть.Текст;
	Если ЗначениеЗаполнено(ТекстЯчейкиВозмещение) Тогда
		СтрокаПриемник.ВозмещениеВыдачаВозврат = Число(ТекстЯчейкиВозмещение);
	Иначе
		СтрокаПриемник.ВозмещениеВыдачаВозврат = 0;
	КонецЕсли;
	// -- Бойков BSLR-2048
	
	// письмерова 14.10.2024 BSLR-4000 
	Попытка ТипПлатежаЗаЭквайринг = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ТипПлатежаЗаЭквайринг).ТекущаяОбласть.Текст);
	Исключение ТипПлатежаЗаЭквайринг = ""; КонецПопытки;
	Если ТипПлатежаЗаЭквайринг = "Комиссия за организацию платежа с НДС" Тогда  
		СтрокаПриемник.Эквайринг    = 0;
	Иначе
		СтрокаПриемник.Эквайринг    = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Эквайринг).ТекущаяОбласть.Текст);  
	КонецЕсли;
	СтрокаПриемник.УслугиПоДоставке    = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УслугиПоДоставке).ТекущаяОбласть.Текст);
	
	Если СтрокаПриемник.ОбоснованиеДляОплаты = "Частичная компенсация брака" или 
				СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке/по складским операциям с товаром" Или // письмерова 05.04.2024 BSLR-3440
					// письмерова 15.03.2024 BSLR-3287
					СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или 
					СтрокаПриемник.ОбоснованиеДляОплаты = "Корректировка" Или // BSLR-4558
					СтрокаПриемник.ОбоснованиеДляОплаты = "Авансовая оплата за товар без движения" Тогда 

		Если СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке" 
			Или СтрокаПриемник.ОбоснованиеДляОплаты = "Возмещение издержек по перевозке/по складским операциям с товаром" Тогда // письмерова 05.04.2024 BSLR-3440
			
			СтрокаПриемник.Цена = 0; 
			СтрокаПриемник.Количество = 0; 		
			//письмерова 14.03.2024 BSLR-3357
			Если НЕ ВключитьВСуммуПродажВозмешения Тогда
				// обнулить сумму к выплате
				СтрокаПриемник.СуммаКВыплате = 0;	
			КонецЕсли;
			// письмерова 17.04.2024 BSLR-3481 - перенос комиссии, BSLR-3690
			//Если СтрокаПриемник.Комиссия = 0 ТОгда
			//	Попытка СтрокаПриемник.Комиссия = - Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеИздержек).ТекущаяОбласть.Текст);
			//	Исключение КонецПопытки;					
			//КонецЕсли; 
			Если Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипДокумента).ТекущаяОбласть.Текст) = "Возврат"	Или
					Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипДокумента).ТекущаяОбласть.Текст) = "возврат"	ТОгда	
				Попытка	СтрокаПриемник.ВозмещениеИздержек = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеИздержек).ТекущаяОбласть.Текст);  
				Исключение СтрокаПриемник.ВозмещениеИздержек = 0; КонецПопытки; 
			Иначе
				Попытка	СтрокаПриемник.ВозмещениеИздержек = - Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ВозмещениеИздержек).ТекущаяОбласть.Текст);  
				Исключение СтрокаПриемник.ВозмещениеИздержек = 0; КонецПопытки; 
			КонецЕсли;
			СтрокаПриемник.ТипОперации = СтрокаПриемник.ОбоснованиеДляОплаты;
			СтрокаПриемник.ОбоснованиеДляОплаты      = "";
		КонецЕсли; 
		// письмерова 21.12.2023 BSLR-2959
		Если СтрокаПриемник.СуммаКВыплате <> 0 и СтрокаПриемник.Сумма = 0 Тогда
			СтрокаПриемник.Сумма = СтрокаПриемник.СуммаКВыплате;
		КонецЕсли;
		// письмерова 26.04.2024 BSLR-3509                                                                                                         // BSLR-4558
		Если Объект.ДатаНачала >= Дата(2024,4,1) И (СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Корректировка") Тогда 
			СтрокаПриемник.Сумма = СтрокаПриемник.СуммаКВыплате;  
			СтрокаПриемник.ТипОперации = СтрокаПриемник.ОбоснованиеДляОплаты; 
		КонецЕсли;
	Иначе // очистить поле ОбоснованиеДляОплаты - для свертки
		// письмерова 26.04.2024 BSLR-3509
		Если Объект.ДатаНачала >= Дата(2024,4,1) ТОгда 
			
			// письмерова 14.06.2024 BSLR-3587
			Если СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возврата" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возвратов" Тогда
				СтрокаПриемник.Сумма = -1 * СтрокаПриемник.Сумма;
			КонецЕсли;
			
			Если СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация потерянного товара" или 
					СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация брака" Или 
					  СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация ущерба" Или // письмерова 03.07.2024 BSLR-3662
					  СтрокаПриемник.ОбоснованиеДляОплаты = "Добровольная компенсация при возврате" Или // письмерова 03.07.2024 BSLR-3662
						СтрокаПриемник.ОбоснованиеДляОплаты = "Компенсация подмененного товара"  Тогда
				СтрокаПриемник.Сумма = СтрокаПриемник.СуммаКВыплате;  
				СтрокаПриемник.ТипОперации = СтрокаПриемник.ОбоснованиеДляОплаты;
			Иначе                                                                                                                          
				Если СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно продаж" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возврата"  
					Или СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция продаж" // письмерова 10.07.2024 BSLR-3690
						Или СтрокаПриемник.ОбоснованиеДляОплаты = "Коррекция возвратов" Тогда  // BSLR-4444
					// оставляем все как есть
				Иначе
					СтрокаПриемник.ОбоснованиеДляОплаты = "";
				КонецЕсли;  
			КонецЕсли;
		Иначе
			// письмерова 26.01.2024 BSLR-3095 - убрать из загрузки по выкупа сторно продаж и сторно возврата
			Если СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно продаж" Или СтрокаПриемник.ОбоснованиеДляОплаты = "Сторно возврата" Тогда
				// оставляем все как есть
			Иначе
				СтрокаПриемник.ОбоснованиеДляОплаты = "";
			КонецЕсли;  
		КонецЕсли;
		
	КонецЕсли;
	// письмерова 09.10.2023 BSLR-2677 
	//Если ЭтоВыкупы Тогда    - письмерова 19.03.2024 BSLR-3355
		СтрокаПриемник.SRID      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SRID).ТекущаяОбласть.Текст);		
	//КонецЕсли;
	// письмерова 17.11.2023 BSLR-2814
	СтрокаПриемник.СтранаПродажи      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтранаПродажи).ТекущаяОбласть.Текст);	
	
	// письмерова 20.03.2024 BSLR-2959 - черз попытку, т.к. в старых форматах нет таких полей
	Попытка СтрокаПриемник.Хранение = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Хранение).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	Попытка СтрокаПриемник.Удержания = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Удержания).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	Попытка СтрокаПриемник.ПлатнаяПриемка = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ПлатнаяПриемка).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	
	// письмерова 19.04.2024 BSLR-3481 - обнуление комиссии
	Если СтрокаПриемник.ОбоснованиеДляОплаты = "Логистика" или СтрокаПриемник.ОбоснованиеДляОплаты = "логистика" или СтрокаПриемник.ОбоснованиеДляОплаты = "Хранение" ТОгда
		СтрокаПриемник.Комиссия = 0;
		СтрокаПриемник.НДСКомиссии = 0;	
	КонецЕсли; 
	Попытка	СтрокаПриемник.КодНоменклатуры = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КодНоменклатуры).ТекущаяОбласть.Текст);  
	Исключение СтрокаПриемник.КодНоменклатуры = 0; КонецПопытки;  
	// письмерова 26.04.2024 BSLR-3509 
	Попытка СтрокаПриемник.ПроцентЭквайринга = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ПроцентЭквайринга).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	// письмерова 25.08.2025 BSLR-4868
	Попытка СтрокаПриемник.КомпенсацияЛояльности = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомпенсацияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	// BSLR-4934 ++
	Если ЭтоВозврат ТОгда
		Попытка СтрокаПриемник.КомпенсацияЛояльности = -1* Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КомпенсацияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	КонецЕсли; // BSLR-4934 --
	// BSLR-4895
	Попытка СтрокаПриемник.ПродажаЮЛ = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ПродажаЮЛ).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	
	// письмерова 06.10.2025 BSLR-4934
	Попытка СтрокаПриемник.СтоимостьУчастияЛояльности = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьУчастияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	Если ЭтоВозврат ТОгда
		Попытка СтрокаПриемник.СтоимостьУчастияЛояльности = -1* Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьУчастияЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	КонецЕсли; 	
	Попытка СтрокаПриемник.УдержанияЗаБаллыЛояльности = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УдержанияЗаБаллыЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	Если ЭтоВозврат ТОгда
		Попытка СтрокаПриемник.УдержанияЗаБаллыЛояльности = -1 *Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УдержанияЗаБаллыЛояльности).ТекущаяОбласть.Текст);Исключение КонецПопытки;
	КонецЕсли; // BSLR-4934 --
	
	
КонецПроцедуры
	
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("site_country", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Страна"));
    Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Артикул поставщика"));
    Результат.Вставить("Бренд", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Бренд"));
	Результат.Вставить("ДатаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Дата заказа покупателем"));
	Результат.Вставить("ДатаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Дата продажи"));
	Результат.Вставить("ИД_Заказ", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Srid"));
	Результат.Вставить("ИД_Этикетки_Заказа", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Стикер МП"));
	Результат.Вставить("Идентификатор", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Код номенклатуры"));
	Результат.Вставить("КоличествоПродано", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Кол-во"));
	Результат.Вставить("КоличествоВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Количество возврата"));
	Результат.Вставить("Комиссия", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Вознаграждение Вайлдберриз (ВВ), без НДС"));
	Результат.Вставить("НДСКомиссии", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "НДС с Вознаграждения Вайлдберриз"));
	Результат.Вставить("Наименование", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Предмет"));
	Результат.Вставить("RID", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Rid"));
	Результат.Вставить("Размер", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер"));
	Результат.Вставить("ТипДокумента", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип документа"));
	Результат.Вставить("ТипОперации", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Обоснование для оплаты"));
	Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Вайлдберриз реализовал Товар (Пр)")); 
	Результат.Вставить("ШтрихКод", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Баркод"));	
	Результат.Вставить("РаходыПоЭквайрингу", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по эквайрингу"));
	Результат.Вставить("ВозмещениеЗаВыдачу", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение за выдачу и возврат товаров на ПВЗ"));
	Результат.Вставить("Доплата", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Доплаты")); 
	Результат.Вставить("Штрафы", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Общая сумма штрафов"));  
	Результат.Вставить("УслугиПоДоставке", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Услуги по доставке товара покупателю"));
    Результат.Вставить("ШК_ИД", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Rid")); 
	Результат.Вставить("СуммаКВыплате", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "К перечислению Продавцу за реализованный Товар"));
	Результат.Вставить("ВозмещениеВыдачаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение за выдачу и возврат товаров на ПВЗ"));
	Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по эквайрингу"));
	Результат.Вставить("ОбоснованиеДляОплаты", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Обоснование для оплаты")); 
	Результат.Вставить("SRID", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Srid"));
	Результат.Вставить("СтранаПродажи", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Страна"));
	Результат.Вставить("Хранение", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Хранение"));
	Результат.Вставить("Удержания", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Удержания"));
	
	Результат.Вставить("ПлатнаяПриемка", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Платная приемка")); 
	// письмерова 22.12.2025 BSLR-5183 ++
	Если Не ЗначениеЗаполнено(Результат.ПлатнаяПриемка) Тогда 
		Результат.Вставить("ПлатнаяПриемка",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Операции при приёмке"));
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Результат.ПлатнаяПриемка) Тогда 
		Результат.Вставить("ПлатнаяПриемка",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Операции при приемке")); 
	КонецЕсли;  
	Если Не ЗначениеЗаполнено(Результат.ПлатнаяПриемка) Тогда 
		Результат.Вставить("ПлатнаяПриемка",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Операции на приемке")); 
	КонецЕсли;  // BSLR-5183 --
	
	Результат.Вставить("ВозмещениеИздержек", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по перевозке"));
	Если Не ЗначениеЗаполнено(Результат.ВозмещениеИздержек) Тогда 
		Результат.Вставить("ВозмещениеИздержек",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Возмещение издержек по перевозке/по складским операциям с товаром"));
	КонецЕсли;	
	Результат.Вставить("КодНоменклатуры", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Код номенклатуры"));
	Результат.Вставить("ПроцентЭквайринга", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Процент возмещения издержек по эквайрингу")); 
	Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда   
		Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг без НДС, %"));
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда   
		Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг, %"));
	КонецЕсли;           
	
	Если Не ЗначениеЗаполнено(Результат.Эквайринг) Тогда
		Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Эквайринг/Комиссии за организацию платежей")); 
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Результат.Эквайринг) Тогда
		Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Эквайринг/Комиссия за организацию платежей")); 
	КонецЕсли;	                                                                                            
	Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда	
		Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг/Комиссии за организацию платежей, %"));
	КонецЕсли;	 
	Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда	
		Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер комиссии за эквайринг/Комиссия за организацию платежей, %"));
	КонецЕсли;	
	Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа за Эквайринг/Комиссии за организацию платежей")); 
	Если Не ЗначениеЗаполнено(Результат.ТипПлатежаЗаЭквайринг) Тогда	
		Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа за эквайринг/Комиссии за организацию платежей"));
	КонецЕсли;  
	
	//Крупа BSLR-5434 ++    
	// с 30.03.2026 больше нет отдельной комиссии; перешли на механизм прямого перевыставления. названия столбцов меняются.	
	Если Не ЗначениеЗаполнено(Результат.Эквайринг) Тогда
		Результат.Вставить("Эквайринг", УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Компенсация платёжных услуг/Комиссия за интеграцию платёжных сервисов"));  
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Результат.ПроцентЭквайринга) Тогда	
		Результат.Вставить("ПроцентЭквайринга",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Размер компенсации платёжных услуг/Комиссии за интеграцию платёжных сервисов, %"));  
	КонецЕсли;	
	Если Не ЗначениеЗаполнено(Результат.ТипПлатежаЗаЭквайринг) Тогда	
		Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа: компенсация платёжных услуг/комиссия за интеграцию платёжных сервисов"));   
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Результат.ТипПлатежаЗаЭквайринг) Тогда	
		Результат.Вставить("ТипПлатежаЗаЭквайринг",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Тип платежа: компенсация платёжных услуг/Комиссия за интеграцию платёжных сервисов"));  
	КонецЕсли; 
	//Крупа BSLR-5434 --  
	
	// письмерова 28.05.2025 BSLR-4640
	Если Не ЗначениеЗаполнено(Результат.Доплата) Тогда	
		Результат.Вставить("Доплата",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Корректировка Вознаграждения Вайлдберриз (ВВ)"));
	КонецЕсли;
	// письмерова 25.08.2025 BSLR-4868
	Результат.Вставить("КомпенсацияЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Компенсация скидки по программе лояльности")); 
	// письмерова 03.10.2025 BSLR-4895
	Результат.Вставить("ПродажаЮЛ",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Признак продажи юридическому лицу")); 
	// письмерова 06.10.2025 BSLR-4934
	Результат.Вставить("СтоимостьУчастияЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Стоимость участия в программе лояльности"));
	Результат.Вставить("УдержанияЗаБаллыЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Сумма удержанная за начисленные баллы программы лояльности")); 
	// письмерова 30.04.2026 BSLR-5533
	Если Не ЗначениеЗаполнено(Результат.УдержанияЗаБаллыЛояльности) Тогда	
		Результат.Вставить("УдержанияЗаБаллыЛояльности",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Сумма баллов, удержанных по программе лояльности"));
	КонецЕсли;
	Результат.Вставить("РазовоеНачисление",УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, "Разовое изменение срока перечисления денежных средств")); 
	
	Возврат Результат;
	
КонецФункции

&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиWB(MXL, СтрокаЗаголовков, СтрокаПоиска)
	Для сч = 1 по 80 Цикл // BSLR-4934
		Если СтрокаПоиска = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст) Тогда
			Возврат сч;
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецФункции


&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровWB() Экспорт
  	КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
	КвалификаторыЧисла  = Новый КвалификаторыЧисла(18,5); // BSLR-4934
	ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
	ТипЧисла  = Новый ОписаниеТипов("Число"  ,,,  КвалификаторыЧисла );

	
	СписокТоваров = Новый ТаблицаЗначений;
	СписокТоваров.Колонки.Добавить("НомерСтроки", ТипЧисла);
	СписокТоваров.Колонки.Добавить("site_country", ТипСтроки); 
	СписокТоваров.Колонки.Добавить("Артикул", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Бренд", ТипСтроки); 
	СписокТоваров.Колонки.Добавить("ИД_Заказ", ТипСтроки);
	СписокТоваров.Колонки.Добавить("ИД_Этикетки_Заказа", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Идентификатор", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Количество", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Комиссия", ТипЧисла);
    СписокТоваров.Колонки.Добавить("НДС", ТипЧисла);
	СписокТоваров.Колонки.Добавить("НДСКомиссии", ТипЧисла);  
	СписокТоваров.Колонки.Добавить("Наименование", ТипСтроки);
	СписокТоваров.Колонки.Добавить("RID", ТипСтроки); 
	СписокТоваров.Колонки.Добавить("НомерОперации", ТипСтроки);
	СписокТоваров.Колонки.Добавить("НомерОтправления", ТипСтроки);  
	СписокТоваров.Колонки.Добавить("Размер", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Сумма", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Цена", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ШтрихКод", ТипСтроки);
	СписокТоваров.Колонки.Добавить("СуммаКВыплате", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Доплаты", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Штрафы", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ВозмещениеВыдачаВозврат", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Эквайринг", ТипЧисла);
    СписокТоваров.Колонки.Добавить("УслугиПоДоставке", ТипЧисла); 
	// письмерова 13.06.2023 BSLR-1982
	СписокТоваров.Колонки.Добавить("ОбоснованиеДляОплаты", Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250))); 
	// письмерова 09.10.2023 BSLR-2677
	СписокТоваров.Колонки.Добавить("SRID", ТипСтроки); 
	// письмерова 17.11.2023 BSLR-2814 
	СписокТоваров.Колонки.Добавить("ВозмещениеЗаВыдачу", ТипЧисла); 
	СписокТоваров.Колонки.Добавить("СтранаПродажи", ТипСтроки); 
	// письмерова 20.03.2024 BSLR-2959
	СписокТоваров.Колонки.Добавить("Хранение", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Удержания", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ПлатнаяПриемка", ТипЧисла);  
	// письмерова 19.04.2024 BSLR-3481
	СписокТоваров.Колонки.Добавить("ВозмещениеИздержек", ТипЧисла);
	СписокТоваров.Колонки.Добавить("КодНоменклатуры", ТипЧисла); 
	// письмерова 26.04.2024 BSLR-3509
	СписокТоваров.Колонки.Добавить("ПроцентЭквайринга", ТипЧисла);
	// письмерова 25.08.2025 BSLR-4868  
	СписокТоваров.Колонки.Добавить("КомпенсацияЛояльности", ТипЧисла);
	// письмерова 03.10.2025 BSLR-4895
	СписокТоваров.Колонки.Добавить("ПродажаЮЛ", Новый ОписаниеТипов("Булево"));	// продаж юл
	// письмерова 06.10.2025 BSLR-4934
	СписокТоваров.Колонки.Добавить("СтоимостьУчастияЛояльности", ТипЧисла);
	СписокТоваров.Колонки.Добавить("УдержанияЗаБаллыЛояльности", ТипЧисла);	
	СписокТоваров.Колонки.Добавить("РазовоеНачисление", ТипЧисла);	
	
	Возврат СписокТоваров;
	
КонецФункции

// письмерова 20.12.2023 BSLR-2959
&НаСерверебезконтекста
Функция ЗаголовкиТаблицыWB_NEW(После29012024 = Ложь)
	
	МассивКолонок = Новый Массив;
	
	МассивКолонок.Добавить("№");
	Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Номер поставки"); 
	КонецЕсли;
	МассивКолонок.Добавить("Предмет");
	МассивКолонок.Добавить("Код номенклатуры");
	МассивКолонок.Добавить("Бренд");
	МассивКолонок.Добавить("Артикул поставщика");
	МассивКолонок.Добавить("Название");
	МассивКолонок.Добавить("Размер");
	МассивКолонок.Добавить("Баркод");
	МассивКолонок.Добавить("Тип документа");
	МассивКолонок.Добавить("Обоснование для оплаты");
	МассивКолонок.Добавить("Дата заказа покупателем");
	МассивКолонок.Добавить("Дата продажи");
	МассивКолонок.Добавить("Кол-во");
	МассивКолонок.Добавить("Цена розничная");
	МассивКолонок.Добавить("Вайлдберриз реализовал Товар (Пр)");
	МассивКолонок.Добавить("Согласованный продуктовый дисконт, %"); 
	Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Промокод %");
	КонецЕсли;
	МассивКолонок.Добавить("Итоговая согласованная скидка, %");
	МассивКолонок.Добавить("Цена розничная с учетом согласованной скидки");
	Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Размер снижения кВВ из-за рейтинга, %");
		МассивКолонок.Добавить("Размер снижения кВВ из-за акции, %"); 
	КонецЕсли;
	МассивКолонок.Добавить("Скидка постоянного Покупателя (СПП), %");
	МассивКолонок.Добавить("Размер кВВ, %");
	МассивКолонок.Добавить("Размер  кВВ без НДС, % Базовый");
	МассивКолонок.Добавить("Итоговый кВВ без НДС, %");
	МассивКолонок.Добавить("Вознаграждение с продаж до вычета услуг поверенного, без НДС");
	МассивКолонок.Добавить("Возмещение за выдачу и возврат товаров на ПВЗ");
	МассивКолонок.Добавить("Возмещение издержек по эквайрингу");
	МассивКолонок.Добавить("Вознаграждение Вайлдберриз (ВВ), без НДС");
	МассивКолонок.Добавить("НДС с Вознаграждения Вайлдберриз");
	МассивКолонок.Добавить("К перечислению Продавцу за реализованный Товар");
	МассивКолонок.Добавить("Количество доставок");
	МассивКолонок.Добавить("Количество возврата");
	МассивКолонок.Добавить("Услуги по доставке товара покупателю");
	МассивКолонок.Добавить("Общая сумма штрафов");
	МассивКолонок.Добавить("Доплаты");
	МассивКолонок.Добавить("Виды логистики, штрафов и доплат");
	МассивКолонок.Добавить("Стикер МП"); 
	Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Наименование банка-эквайера");
	КонецЕсли;
	МассивКолонок.Добавить("Номер офиса");  
	Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Наименование офиса доставки");
		МассивКолонок.Добавить("ИНН партнера");
		МассивКолонок.Добавить("Партнер");
	КонецЕсли;
	МассивКолонок.Добавить("Склад");
	МассивКолонок.Добавить("Страна");
	Если После29012024 Тогда // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Тип коробов");
		МассивКолонок.Добавить("Номер таможенной декларации");
		МассивКолонок.Добавить("Код маркировки");
	КонецЕсли;
	МассивКолонок.Добавить("ШК");
	МассивКолонок.Добавить("Rid");
	МассивКолонок.Добавить("Srid");
	МассивКолонок.Добавить("Возмещение издержек по перевозке");
	МассивКолонок.Добавить("Организатор перевозки"); 
	Если Не После29012024 Тогда  // письмерова 04.03.2024 BSLR-3329
		МассивКолонок.Добавить("Код маркировки"); 
	КонецЕсли;
	МассивКолонок.Добавить("Хранение");
	МассивКолонок.Добавить("Удержания");
	МассивКолонок.Добавить("Платная приемка"); 
	
	Возврат МассивКолонок;
КонецФункции

// пиьмерова 27.11.2024 BSLR-4102
&НаСервере
Функция ОбработатьДанныеПоВыкупамВБ(ТаблицаВыкупов)
	
	// разделим таблицу на две
	// в одной чистые продажи, в другой все остальное 
	// сумма к выплате = СуммаКВыплате - УслугиПоДоставке  в рамках одного АРТИКУЛА
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.ШтрихКод КАК ШтрихКод,
	                      |	ТЗ.Идентификатор КАК Идентификатор,
	                      |	ТЗ.Артикул КАК Артикул,
	                      |	ТЗ.Количество КАК Количество,
	                      |	ТЗ.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ТЗ.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ТЗ.ТипОперации КАК ТипОперации,
	                      |	ТЗ.Размер КАК Размер,
	                      |	ТЗ.ОбоснованиеДляОплаты КАК ОбоснованиеДляОплаты
	                      |ПОМЕСТИТЬ ВТ_Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.Количество = 0
	                      |			ТОГДА """"
	                      |		ИНАЧЕ ВТ_Таблица.ШтрихКод
	                      |	КОНЕЦ КАК ШтрихКод,
	                      |	ВТ_Таблица.Артикул КАК Артикул,
	                      |	СУММА(ВЫБОР                                                                           
						                                                                               // BSLR-4444
	                      |			КОГДА ВТ_Таблица.ОбоснованиеДляОплаты = ""Коррекция продаж"" ИЛИ ВТ_Таблица.ОбоснованиеДляОплаты = ""Коррекция возвратов""
	                      |				ТОГДА 0
	                      |			ИНАЧЕ ВТ_Таблица.Количество
	                      |		КОНЕЦ) КАК Количество,
	                      |	СУММА(ВТ_Таблица.УслугиПоДоставке) КАК УслугиПоДоставке,
	                      |	СУММА(ВТ_Таблица.СуммаКВыплате) КАК СуммаКВыплате,
	                      |	ВТ_Таблица.ТипОперации КАК ТипОперации,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.Количество = 0
	                      |			ТОГДА """"
	                      |		ИНАЧЕ ВТ_Таблица.Размер
	                      |	КОНЕЦ КАК Размер,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.ОбоснованиеДляОплаты <> """"
	                      |			ТОГДА """"
	                      |		ИНАЧЕ ВТ_Таблица.ОбоснованиеДляОплаты
	                      |	КОНЕЦ КАК ОбоснованиеДляОплаты,
	                      |	ВТ_Таблица.Идентификатор КАК Идентификатор
	                      |ПОМЕСТИТЬ ВТ_Предварительно
	                      |ИЗ
	                      |	ВТ_Таблица КАК ВТ_Таблица
	                      |ГДЕ
	                      //|	ВТ_Таблица.ТипОперации <> ""Возврат"" И  - BSLR-4287, возвращаем возвраты по выкупам
	                      |	 ВТ_Таблица.СуммаКВыплате <> 0
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_Таблица.Артикул,
	                      |	ВТ_Таблица.ТипОперации,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.Количество = 0
	                      |			ТОГДА """"
	                      |		ИНАЧЕ ВТ_Таблица.Размер
	                      |	КОНЕЦ,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.ОбоснованиеДляОплаты <> """"
	                      |			ТОГДА """"
	                      |		ИНАЧЕ ВТ_Таблица.ОбоснованиеДляОплаты
	                      |	КОНЕЦ,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.Количество = 0
	                      |			ТОГДА """"
	                      |		ИНАЧЕ ВТ_Таблица.ШтрихКод
	                      |	КОНЕЦ,
	                      |	ВТ_Таблица.Идентификатор
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Предварительно.ШтрихКод КАК ШтрихКод,
	                      |	ВТ_Предварительно.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_Предварительно.ТипОперации Как ТипОперации, 
	                      |	СУММА(ВТ_Предварительно.Количество) КАК Количество,
	                      |	СУММА(ВТ_Предварительно.УслугиПоДоставке) КАК УслугиПоДоставке,
	                      |	СУММА(ВТ_Предварительно.СуммаКВыплате) КАК СуммаКВыплате,
	                      |	ВТ_Предварительно.Размер КАК Размер,
	                      |	ВТ_Предварительно.Идентификатор КАК Идентификатор
	                      |ПОМЕСТИТЬ ВТ_ПредварительноСвернуто
	                      |ИЗ
	                      |	ВТ_Предварительно КАК ВТ_Предварительно
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_Предварительно.ШтрихКод,
	                      |	ВТ_Предварительно.Артикул,
	                      |	ВТ_Предварительно.Размер,
						  //BSLR-4287
						  | ВТ_Предварительно.ТипОперации, 
	                      |	ВТ_Предварительно.Идентификатор
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_ПредварительноСвернуто.Артикул КАК Артикул,
	                      |	СУММА(ВТ_ПредварительноСвернуто.СуммаКВыплате) КАК СуммаКВыплате
	                      |ИЗ
	                      |	ВТ_ПредварительноСвернуто КАК ВТ_ПредварительноСвернуто
	                      |ГДЕ
	                      |	ВТ_ПредварительноСвернуто.ШтрихКод = """"
	                      |	И ВТ_ПредварительноСвернуто.Количество = 0
	                      |	И ВТ_ПредварительноСвернуто.Размер = """"
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_ПредварительноСвернуто.Артикул
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_ПредварительноСвернуто.ШтрихКод КАК ШтрихКод,
	                      |	ВТ_ПредварительноСвернуто.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_ПредварительноСвернуто.ТипОперации Как ТипОперации, 
	                      |	СУММА(ВТ_ПредварительноСвернуто.Количество) КАК Количество,
	                      |	СУММА(ВТ_ПредварительноСвернуто.УслугиПоДоставке) КАК УслугиПоДоставке,
	                      |	СУММА(ВТ_ПредварительноСвернуто.СуммаКВыплате) КАК СуммаКВыплате,
	                      |	ВТ_ПредварительноСвернуто.Размер КАК Размер,
	                      |	ВТ_ПредварительноСвернуто.Идентификатор КАК Идентификатор
	                      |ИЗ
	                      |	ВТ_ПредварительноСвернуто КАК ВТ_ПредварительноСвернуто
	                      |ГДЕ
	                      |	ВТ_ПредварительноСвернуто.Количество <> 0
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_ПредварительноСвернуто.ШтрихКод,
	                      |	ВТ_ПредварительноСвернуто.Артикул,
						  //BSLR-4287
						  | ВТ_ПредварительноСвернуто.ТипОперации, 
	                      |	ВТ_ПредварительноСвернуто.Размер,
	                      |	ВТ_ПредварительноСвернуто.Идентификатор
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Таблица.Артикул КАК Артикул,
	                      |	СУММА(ВТ_Таблица.Количество) КАК Количество,
	                      |	СУММА(ВТ_Таблица.УслугиПоДоставке) КАК УслугиПоДоставке
	                      |ИЗ
	                      |	ВТ_Таблица КАК ВТ_Таблица
	                      |ГДЕ
	                      |	ВТ_Таблица.ТипОперации <> ""Возврат""
	                      |	И ВТ_Таблица.СуммаКВыплате = 0
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_Таблица.Артикул");  
	
	Запрос.УстановитьПараметр("ТЗ",ТаблицаВыкупов); 
	
	Результат = запрос.ВыполнитьПакетСПромежуточнымиДанными();   

	ТЗТоварыВыплаты=Результат[3].Выгрузить();
	ТЗТоварыПродажи=Результат[4].Выгрузить();	
	ТЗТовары_Доставка=Результат[5].Выгрузить(); 
	// письмерова 09.01.2024 BSLR-4099
	ТЗТовары_Доставка.Колонки.Добавить("НеНайден");
	ТЗТоварыВыплаты.Колонки.Добавить("НеНайден");
	
	Для Каждого Стр Из ТЗТовары_Доставка Цикл
		
		Отбор = Новый Структура("Артикул", Стр.Артикул);
		
		НайтиСтроки = ТЗТоварыПродажи.НайтиСтроки(Отбор); 
		
		// письмерова 06.12.2024 BSLR-4151
		Если НайтиСтроки.Количество() Тогда
			Если НайтиСтроки.Количество() > 1 ТОгда // распределяем
				МассивКоэффициентов = Новый Массив;
				СуммаКВыплате = 0; // BSLR-4425
				Для Каждого Эл Из НайтиСтроки Цикл
					Если Эл.ТипОперации = "Возврат" ТОгда // пропустить возвраты, сумма возврата не меняется BSLR-5262
						Продолжить;
					КонецЕсли;
					МассивКоэффициентов.Добавить(Эл.СуммаКВыплате);	
					СуммаКВыплате = СуммаКВыплате + Эл.СуммаКВыплате; // BSLR-4425
				КонецЦикла;	
				// письмерова 17.03.2025 BSLR-4425
				// если доставка больше чему сумма к выплате, тогда доставка будет отражена услугой
				Если Стр.УслугиПоДоставке > СуммаКВыплате ТОгда 
					Стр.НеНайден = Истина;
				Иначе
					РезРаспред = топ_ОбщийВызовСервера.РаспределитьПропорционально(Стр.УслугиПоДоставке, МассивКоэффициентов);
					Стр.НеНайден = Истина; // письмерова 23.06.2025 BSLR-4688
					Если РезРаспред <> Неопределено ТОгда 
						сч = 0;
						Для Каждого Эл Из НайтиСтроки Цикл 
							Если Эл.ТипОперации = "Возврат" ТОгда // пропустить возвраты, сумма возврата не меняется BSLR-5262
								Продолжить;								
							КонецЕсли;
							Эл.УслугиПоДоставке = Эл.УслугиПоДоставке  + РезРаспред[сч];
							сч = сч +1;		
						КонецЦикла;
						Стр.НеНайден = Ложь;
					КонецЕсли; // BSLR-4688
				КонецЕсли;
			Иначе
				// письмерова 17.03.2025 BSLR-4425
				// если доставка больше чему сумма к выплате, тогда доставка будет отражена услугой
				Если Стр.УслугиПоДоставке > НайтиСтроки[0].СуммаКВыплате Тогда
					Стр.НеНайден = Истина;
				Иначе
					НайтиСтроки[0].УслугиПоДоставке = Стр.УслугиПоДоставке;
					Стр.НеНайден = Ложь;
				КонецЕсли;
			КонецЕсли;
		Иначе 
			Стр.НеНайден = Истина;	
		КонецЕсли; 	
		
		//Если НайтиСтроки.Количество() Тогда
		//	НайтиСтроки[0].УслугиПоДоставке = Стр.УслугиПоДоставке;
		//КонецЕсли; 	
		
	КонецЦикла;
	// письмерова 09.01.2024 BSLR-4099
	Разница = 0; 
	Для Каждого Стр Из ТЗТовары_Доставка Цикл 
		Если Стр.НеНайден Тогда
			Разница = Разница + Стр.УслугиПоДоставке;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Стр Из ТЗТоварыВыплаты Цикл
		
		// письмерова 05.05.2025 BSLR-4542
		Если Стр.СуммаКВыплате = 0 ТОгда
			Продолжить;
		КонецЕсли;
		
		Отбор = Новый Структура("Артикул", Стр.Артикул);
		
		НайтиСтроки = ТЗТоварыПродажи.НайтиСтроки(Отбор);
		
		// письмерова 06.12.2024 BSLR-4151
		Если НайтиСтроки.Количество() Тогда
			Если НайтиСтроки.Количество() > 1 ТОгда // распределяем
				МассивКоэффициентов = Новый Массив; 
				Для Каждого Эл Из НайтиСтроки Цикл
					МассивКоэффициентов.Добавить(Эл.СуммаКВыплате);		
				КонецЦикла;				
				РезРаспред = топ_ОбщийВызовСервера.РаспределитьПропорционально(Стр.СуммаКВыплате, МассивКоэффициентов); 			
				сч = 0;
				Для Каждого Эл Из НайтиСтроки Цикл
					Эл.СуммаКВыплате = Эл.СуммаКВыплате + РезРаспред[сч];
					сч = сч +1;		
				КонецЦикла;				
		 	Иначе
				НайтиСтроки[0].СуммаКВыплате = НайтиСтроки[0].СуммаКВыплате + Стр.СуммаКВыплате;
			КонецЕсли;
		КонецЕсли; 	
		
		//Если НайтиСтроки.Количество() Тогда
		//	НайтиСтроки[0].СуммаКВыплате = НайтиСтроки[0].СуммаКВыплате + Стр.СуммаКВыплате;
		//КонецЕсли; 	
		
	КонецЦикла; 
	
	// итоговая сборка товаров
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.ШтрихКод КАК ШтрихКод,
	                      |	ТЗ.Идентификатор КАК Идентификатор,
	                      |	ТЗ.Артикул КАК Артикул,
						  //BSLR-4287
						  | ТЗ.ТипОперации КАК ТипОперации, 
	                      |	ТЗ.Количество КАК Количество,
	                      |	ТЗ.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ТЗ.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ТЗ.Размер КАК Размер
	                      |ПОМЕСТИТЬ ВТ_Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Таблица.ШтрихКод КАК ШтрихКод,
	                      |	ВТ_Таблица.Идентификатор КАК Идентификатор,
	                      |	ВТ_Таблица.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_Таблица.ТипОперации КАК ТипОперации, 
	                      |	ВТ_Таблица.Количество КАК Количество,
	                      |	ВТ_Таблица.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ВТ_Таблица.СуммаКВыплате КАК СуммаКВыплатеПредварительно,
	                      |	ВТ_Таблица.Размер КАК Размер,
	                      |	ВТ_Таблица.СуммаКВыплате - ВТ_Таблица.УслугиПоДоставке КАК СуммаКВыплате,
	                      |	ВЫБОР
	                      |		КОГДА ЕСТЬNULL(топ_Штрихкоды.Товар, ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)) = ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)
	                      |			ТОГДА ЕСТЬNULL(топ_ТоварыТорговыхПлощадок.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка))
	                      |		ИНАЧЕ ЕСТЬNULL(топ_Штрихкоды.Товар, ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка))
	                      |	КОНЕЦ КАК Товар,
	                      |	ЕСТЬNULL(топ_Штрихкоды.РазмерWB, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)) КАК РазмерWB
	                      |ПОМЕСТИТЬ ВТ_СРазмерамиТоварами
	                      |ИЗ
	                      |	ВТ_Таблица КАК ВТ_Таблица
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_Штрихкоды КАК топ_Штрихкоды
	                      |		ПО ВТ_Таблица.ШтрихКод = топ_Штрихкоды.Штрихкод
	                      |			И (топ_Штрихкоды.ЛичныйКабинет = &ЛичныйКабинет)
	                      |			И (топ_Штрихкоды.Штрихкод <> """")
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ПО ВТ_Таблица.Идентификатор = топ_ТоварыТорговыхПлощадок.ID
	                      |			И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_СРазмерамиТоварами.ШтрихКод КАК Штрихкод,
	                      |	ВТ_СРазмерамиТоварами.Идентификатор КАК Идентификатор,
	                      |	ВТ_СРазмерамиТоварами.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_СРазмерамиТоварами.ТипОперации КАК ТипОперации, 
	                      |	ВТ_СРазмерамиТоварами.Количество КАК Количество,
	                      |	ВТ_СРазмерамиТоварами.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ВТ_СРазмерамиТоварами.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
	                      |	ВТ_СРазмерамиТоварами.Размер КАК Размер,
	                      |	ВТ_СРазмерамиТоварами.СуммаКВыплате КАК СуммаКВыплате,
	                      |	МАКСИМУМ(ВТ_СРазмерамиТоварами.Товар) КАК Товар,
	                      |	МАКСИМУМ(ВТ_СРазмерамиТоварами.РазмерWB) КАК РазмерWB
	                      |ПОМЕСТИТЬ ВТ_Сгруппированы
	                      |ИЗ
	                      |	ВТ_СРазмерамиТоварами КАК ВТ_СРазмерамиТоварами
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_СРазмерамиТоварами.ШтрихКод,
	                      |	ВТ_СРазмерамиТоварами.Идентификатор,
	                      |	ВТ_СРазмерамиТоварами.Артикул,
						  //BSLR-4287
						  | ВТ_СРазмерамиТоварами.ТипОперации, 
	                      |	ВТ_СРазмерамиТоварами.Количество,
	                      |	ВТ_СРазмерамиТоварами.УслугиПоДоставке,
	                      |	ВТ_СРазмерамиТоварами.СуммаКВыплатеПредварительно,
	                      |	ВТ_СРазмерамиТоварами.Размер,
	                      |	ВТ_СРазмерамиТоварами.СуммаКВыплате
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Сгруппированы.Штрихкод КАК Штрихкод,
	                      |	ВТ_Сгруппированы.Идентификатор КАК Идентификатор,
	                      |	ВТ_Сгруппированы.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_Сгруппированы.ТипОперации КАК ТипОперации, 
	                      |	ВТ_Сгруппированы.Количество КАК Количество,
	                      |	ВТ_Сгруппированы.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ВТ_Сгруппированы.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
	                      |	ВТ_Сгруппированы.Размер КАК Размер,
	                      |	ВТ_Сгруппированы.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ЕСТЬNULL(топ_ТоварыТорговыхПлощадок.Ссылка, ВТ_Сгруппированы.Товар) КАК Товар,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Сгруппированы.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяССылка)
	                      |			ТОГДА ЕСТЬNULL(топ_РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))
	                      |		ИНАЧЕ ВТ_Сгруппированы.РазмерWB
	                      |	КОНЕЦ КАК РазмерWB
	                      |ПОМЕСТИТЬ ВТ_Сводная
	                      |ИЗ
	                      |	ВТ_Сгруппированы КАК ВТ_Сгруппированы
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ПО ВТ_Сгруппированы.Артикул = топ_ТоварыТорговыхПлощадок.КодПоставщика
	                      |			И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_РазмерыТоваровWB КАК топ_РазмерыТоваровWB
	                      |		ПО ВТ_Сгруппированы.Размер = топ_РазмерыТоваровWB.размер
	                      |			И ВТ_Сгруппированы.Товар = топ_РазмерыТоваровWB.Владелец
	                      |			И (топ_РазмерыТоваровWB.Владелец.ЛичныйКабинет = &ЛичныйКабинет)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Сводная.Штрихкод КАК Штрихкод,
	                      |	ВТ_Сводная.Идентификатор КАК Идентификатор,
	                      |	ВТ_Сводная.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_Сводная.ТипОперации КАК ТипОперации, 
	                      |	ВТ_Сводная.Количество КАК Количество,
	                      |	ВТ_Сводная.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ВТ_Сводная.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
	                      |	ВТ_Сводная.Размер КАК Размер,
	                      |	ВТ_Сводная.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ВТ_Сводная.Товар КАК Товар,
	                      |	МАКСИМУМ(ВЫБОР
	                      |			КОГДА ВТ_Сводная.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)
	                      |				ТОГДА ЕСТЬNULL(топ_РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))
	                      |			ИНАЧЕ ВТ_Сводная.РазмерWB
	                      |		КОНЕЦ) КАК РазмерWB
	                      |ПОМЕСТИТЬ ВТ_ТоварыСРазмерами
	                      |ИЗ
	                      |	ВТ_Сводная КАК ВТ_Сводная
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_РазмерыТоваровWB КАК топ_РазмерыТоваровWB
	                      |		ПО ВТ_Сводная.Размер = топ_РазмерыТоваровWB.размер
	                      |			И ВТ_Сводная.Товар = топ_РазмерыТоваровWB.Владелец
	                      |			И (топ_РазмерыТоваровWB.Владелец.ЛичныйКабинет = &ЛичныйКабинет)
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_Сводная.Штрихкод,
	                      |	ВТ_Сводная.Идентификатор,
	                      |	ВТ_Сводная.Артикул,
						  //BSLR-4287
						  | ВТ_Сводная.ТипОперации, 
	                      |	ВТ_Сводная.Количество,
	                      |	ВТ_Сводная.УслугиПоДоставке,
	                      |	ВТ_Сводная.СуммаКВыплатеПредварительно,
	                      |	ВТ_Сводная.Размер,
	                      |	ВТ_Сводная.СуммаКВыплате,
	                      |	ВТ_Сводная.Товар
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_ТоварыСРазмерами.Штрихкод КАК Штрихкод,
	                      |	ВТ_ТоварыСРазмерами.Идентификатор КАК Идентификатор,
	                      |	ВТ_ТоварыСРазмерами.Артикул КАК Артикул,
						  //BSLR-4287
						  | ВТ_ТоварыСРазмерами.ТипОперации КАК ТипОперации, 
	                      |	ВТ_ТоварыСРазмерами.Количество КАК Количество,
	                      |	ВТ_ТоварыСРазмерами.СуммаКВыплатеПредварительно КАК СуммаКВыплатеПредварительно,
	                      |	ВТ_ТоварыСРазмерами.УслугиПоДоставке КАК УслугиПоДоставке,
	                      |	ВТ_ТоварыСРазмерами.Размер КАК Размер,
	                      |	ВТ_ТоварыСРазмерами.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ВТ_ТоварыСРазмерами.Товар КАК Товар,
	                      |	ВТ_ТоварыСРазмерами.РазмерWB КАК РазмерWB,
	                      |	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
	                      |	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
	                      //|	""Продажа"" КАК ТипОперации,
	                      |	ВТ_ТоварыСРазмерами.СуммаКВыплате / ВЫБОР
	                      |		КОГДА ВТ_ТоварыСРазмерами.Количество = 0
	                      |			ТОГДА 1
	                      |		ИНАЧЕ ВТ_ТоварыСРазмерами.Количество
	                      |	КОНЕЦ КАК Цена,
	                      |	ВТ_ТоварыСРазмерами.СуммаКВыплате КАК Сумма,
	                      |	ЛОЖЬ КАК ЭтоНабор,
	                      |	НЕОПРЕДЕЛЕНО КАК СтавкаНДС,
						  // письмерова 19.08.2025 BSLR-4800
						  |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
	                      |			ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
	                      |		ИНАЧЕ топ_СоответствиеТоваров.Упаковка
	                      |	КОНЕЦ КАК ЕдиницаИзмерения
	                      |ИЗ
	                      |	ВТ_ТоварыСРазмерами КАК ВТ_ТоварыСРазмерами
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
	                      |		ПО ВТ_ТоварыСРазмерами.Товар = топ_СоответствиеТоваров.Товар
	                      |			И ВТ_ТоварыСРазмерами.РазмерWB = топ_СоответствиеТоваров.РазмерWB");
	
	Запрос.УстановитьПараметр("ТЗ",ТЗТоварыПродажи);
	Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет); 
	
	ВремТаблВЫкуп = Запрос.Выполнить().Выгрузить();
	
	ВремТаблВЫкуп.Колонки.Добавить("СуммаНДС"); 
	
	ЕстьНДС = топ_ОбщийВызовСервера.НалогообложениеНДСДляЗагрузкиДанныхАПИ(Объект.ЛичныйКабинет,Объект.ДатаОкончания);
	// Ставка Без НДС
	Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.4") 
		ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.4.") 
			ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.4.") Тогда 
		СтавкаБезНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС");
	Иначе
		СтавкаБезНДС = ПредопределенноеЗначение("Справочник.СтавкиНДС.БезНДС");
	КонецЕсли;
	
	// письмерова 21.01.2025 BSLR-4260
	// только ут 
	ДействующиеНастройки = Неопределено;
	СтавкаНДС = Неопределено; 
	
	ДействующиеНастройки = ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
			"НастройкиУчетаНДСПриУСН", Объект.ЛичныйКабинет, Период.ДатаОкончания, Ложь); 
	
	Если ДействующиеНастройки <> Неопределено Тогда
		СтавкаНДС = ДействующиеНастройки.СтавкаНДС;
	Иначе
		СтавкаНДС = ПолучитьСтавкуНДСПоУмолчанию(Объект.ЛичныйКабинет,Объект.ДатаОкончания);  // письмерова 16.04.2025
	КонецЕсли;
	
	// письмерова 07.04.2025 BSLR-4462
	Если Объект.ЛичныйКабинет.СтавкаНДСИзНоменклатуры ТОгда
		СтавкаНДС = Неопределено;
	КонецЕсли;
	
	для каждого СтрокаТЗ из ВремТаблВЫкуп Цикл 
		//получим ставку НДС
		если ЗначениеЗаполнено(строкаТЗ.Номенклатура) тогда  
			Если ЕстьНДС ТОгда // типовая схема
				строкаТЗ.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(строкаТЗ.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
				СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(строкаТЗ.СтавкаНДС);
				строкаТЗ.СуммаНДС = строкаТЗ.СуммаКВыплате * СтавкаНДСЗнач / (100 + СтавкаНДСЗнач);  
			Иначе // обнуляем НДС
				строкаТЗ.СтавкаНДС = СтавкаБезНДС;
				строкаТЗ.СуммаНДС = 0;
			КонецЕсли;			
			Если СтрокаТЗ.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор Тогда
				СтрокаТЗ.ЭтоНабор = истина;
			КонецЕсли;				
		КонецЕсли; 
	КонецЦикла;
	// письмерова 09.01.2024 BSLR-4099
	Результат = Новый Структура("ВремТаблВЫкуп, Разница",ВремТаблВЫкуп,Разница); 
	Возврат Результат;
	//Возврат ВремТаблВЫкуп;
	
КонецФункции

// письмерова 09.01.2024 BSLR-4099
&НаСервере
Процедура ДополнитьУслугиДаннымиДоставкаВыкупы(СуммаДоставки)
	
	Если Объект.Услуги.НайтиСтроки(новый Структура("НаименованиеМП", "DeliveryServiceBasedOnTheReport")).Количество() ТОгда
		СтрокаУслуг = Объект.Услуги.НайтиСтроки(новый Структура("НаименованиеМП", "DeliveryServiceBasedOnTheReport"))[0];
	Иначе // нет услуги
		// письмерова 20.01.2024 BSLR-4099	
		СтрокаУслуг = Объект.Услуги.Добавить();
	КонецЕсли;
	
	СтрокаУслуг.Наименование = "Услуга доставки по отчету о выкупах за период";
	СтрокаУслуг.НаименованиеМП = "DeliveryServiceBasedOnTheReport";
	СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","DeliveryServiceBasedOnTheReport");   
	Если СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда // нет элемента справочника УслугиМП, но он есть в перечне
		Перечень = Новый соответствие;
		Перечень.Вставить("DeliveryServiceBasedOnTheReport","Услуга доставки по отчету о выкупах за период");
		ПереченьНДС = Новый соответствие;
		ПереченьНДС.Вставить("DeliveryServiceBasedOnTheReport","22%");    
		топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,     
		Перечисления.топ_ТорговыеПлощадки.Wildberries,
		Неопределено); 			
		СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "DeliveryServiceBasedOnTheReport");
	Конецесли;			
	СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.Wildberries, СтрокаУслуг.УслугаМП);
	СтрокаУслуг.СтавкаНДС = Строка(топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания));
	СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(СтрокаУслуг.СтавкаНДС));
	СтрокаУслуг.Сумма = СуммаДоставки; 
	СтрокаУслуг.СуммаНДС = СуммаДоставки * СтавкаНДСЗнач /(100 + СтавкаНДСЗнач); 	
		
КонецПроцедуры


// письмерова 16.10.2025 BSLR-4460
&НаСервере
Процедура ЗаполнитьТабЧастьКомпенсации(Товары, ЭтоАпи = Ложь)
	
	Если ЭтоАпи ТОгда
	    ОБъект.Компенсации.Очистить();
		Для Каждого Стр из Товары Цикл
			нСтр = ОБъект.Компенсации.Добавить();
			ЗаполнитьЗначенияСвойств(нСтр,Стр);
			
			Если Стр.ТипОперации = "Возврат" Тогда
				нСтр.Количество = - нСтр.Количество;	
			КонецЕсли;
			нСтр.ТипКомпенсации = Стр.ОбоснованиеДляОплаты;
			нСтр.СтоимостьТовара = Стр.Сумма;
			нСтр.СтоимостьВсего = Стр.Сумма;
			нСтр.ИтогоКНачислению = Стр.Сумма;
		КонецЦикла;

	Иначе
	    ОБъект.Компенсации.Очистить();
		Для Каждого Стр из Товары Цикл
			нСтр = ОБъект.Компенсации.Добавить();
			ЗаполнитьЗначенияСвойств(нСтр,Стр);
			
			нСтр.ТипКомпенсации = Стр.ТипОперации; 
			нСтр.СтоимостьТовара = Стр.Сумма;
			нСтр.СтоимостьВсего = Стр.Сумма;
			нСтр.ИтогоКНачислению = Стр.Сумма;
		КонецЦикла;

	КонецЕсли;
	
КонецПроцедуры


#конецОбласти

#Область ЗагрузкаИзЭксельЯМ  
&НаСервере
Функция  ЗагрузитьНаСервереЯМ(Знач Адрес, Расширение, ЭтоВыкупы)
  	 Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг", 
	Ложь, "", Новый Массив, Новый Массив);
	ПерваяСтрока = 0;
	
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровЯМ();  
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение); 
	ЕстьДанныеОтправления = Ложь;
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда
		
		УдалитьФайлы(ИмяФайла);
		
	КонецЕсли;
	MXLОбщая = MXL; 
	// письмерова 16.04.2025 BSLR-4525
	ФайлВерный = Ложь; 
	
	Если Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS ТОгда 
		Если MXLОбщая.Области.Найти("Доставлено") <> Неопределено 
			И MXLОбщая.Области.Найти("Возвращено") <> Неопределено Тогда
			
			ФайлВерный = Истина; 
		КонецЕсли;
	Иначе     
		Если MXLОбщая.Области.Найти("Доставленные_товары") <> Неопределено 
			И MXLОбщая.Области.Найти("Невыкупленные_товары") <> Неопределено                // письмерова 07.05.2024 BSLR-3519 
			И (MXLОбщая.Области.Найти("Возвращённые_товары") <> Неопределено 
			Или MXLОбщая.Области.Найти("Возвращенные_товары") <> Неопределено) Тогда
			
			ФайлВерный = Истина; 
		КонецЕсли;
	КонецЕсли;
	
	Если ФайлВерный ТОгда // BSLR-4525
		Если Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS ТОгда
			MXL = MXLОбщая.ПолучитьОбласть("Доставлено");
		Иначе  
			MXL = MXLОбщая.ПолучитьОбласть("Доставленные_товары"); 
		КонецЕсли;
		 
		КоличествоСтрок   = MXL.ВысотаТаблицы;
		КоличествоКолонок = MXL.ШиринаСтраницы;
		
		Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
			Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
				ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
				Если СтрНайти(ТекстЯчейки, "Отчёт по данным статистики") <> 0 Тогда
					ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
					
					НомерОправления =  СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2));
					Объект.НомерВходящегоДокумента = НомерОправления;
					
				КонецЕсли;
				
				Если СтрНайти(ТекстЯчейки, "за период") <> 0 Тогда
					ОбработатьСтрокуДатыЯМ(ТекстЯчейки);
					
					ПозицияДаты  = СтрНайти(ТекстЯчейки, "по");
					ДатаОтправленияСтрока = СокрЛП(Сред(ТекстЯчейки, ПозицияДаты + 3));
					Попытка
						ДатаОтправления = Дата(ДатаОтправленияСтрока);
						Объект.ДатаВходящегоДокумента = ДатаОтправления;
					Исключение
						ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
					КонецПопытки;
				КонецЕсли;
				
				Если ТекстЯчейки = "Номер заказа" Тогда
					ПерваяСтрока = ТекущаяСтрока + 1;
				КонецЕсли;
				Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
		
		Если ПерваяСтрока = 0 Тогда
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчёт по данным статистики по Договору""");
			Возврат Результат;
		КонецЕсли;
	Иначе
		Результат.Ошибка = Истина;
		ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчёт по данным статистики по Договору""");
		Возврат Результат;
	КонецЕсли;
	НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
	СтоимостьДостакиКГТ = 0; // письмерова 20.08.2025 BSLR-4676
	
	// письмерова 18.09.2025 BSLR-4418
	ЕстьРасширениеУПД = топ_ОбщийВызовСервера.ПроверкаНаличияРасширенияВБазе("БИТ_УправлениеМаркетплейсами_УПД"); 	
	
	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
		
		Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст), "Итого:") <> 0 Тогда
			Прервать;
		КонецЕсли;
		// письмерова 16.04.2025 BSLR-4525
		Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст = "" ТОгда 
			// письмерова 20.08.2025 BSLR-4676  
			Название = MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст; 
			Если СтрНайти(ВРЕГ(Название),"ДОСТАВКА") > 0 ТОгда
				СтоимостьДостакиКГТ = СтоимостьДостакиКГТ + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст)	
			КонецЕсли;	
			ПРодолжить;
		КонецЕсли;  
		// Стрелкова Н. 08.04.26 BSLR-5296 данные с листа Доставленные_товары берутся только по розничным продажам
		Если Объект.ЛичныйКабинет.РежимЗагрузкиПродажЮЛ = Перечисления.топ_РежимыЗагрузкиПродажЮЛ.ПередачаВДоставку ТОгда // BSLR-5296
			Если НЕ Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS И MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипЗаказа).ТекущаяОбласть.Текст = "Продажа бизнесу" Тогда 
				Продолжить;
			КонецЕсли; 
		КонецЕсли; // BSLR-5296
		
		КоличествоПродано = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
		НоваяСтрока = ТаблицаТоваров.Добавить();
		НоваяСтрока.ТипОперации   = "Продажа";
		НоваяСтрока.Количество = КоличествоПродано;
		ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,,,ЕстьРасширениеУПД);
		
		// письмерова 20.11.2024 BSLR-4095
		Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
			// письмерова 31.01.2025 BSLR-4195
			Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
				НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon;  // BSLR-4486  
				НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
			КонецЕсли;	
			НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615			
		КонецЕсли;
		
		// письмерова 14.12.2023 BSLR-2680	
		Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
			НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
			Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
				Если СоздаватьКонтрагентов ТОгда 
					НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);  
					Сообщить("Создан новый контрагент " + НовыйКонтрагент); 
					НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка; 
				Иначе
					Сообщить("не найден контрагент ИНН"  + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
					НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;			
	КонецЦикла; 

	// письмерова 16.04.2025 BSLR-4525	
	Если Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS ТОгда
		MXL = MXLОбщая.ПолучитьОбласть("Возвращено");
	Иначе
		Если MXLОбщая.Области.Найти("Возвращённые_товары") <> Неопределено ТОгда
			MXL = MXLОбщая.ПолучитьОбласть("Возвращённые_товары");
		ИначеЕсли MXLОбщая.Области.Найти("Возвращенные_товары") <> Неопределено ТОгда
			MXL = MXLОбщая.ПолучитьОбласть("Возвращенные_товары");
		Иначе
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчёт по данным статистики по Договору""");
			Возврат Результат;
		КонецЕсли; 
	КонецЕсли;
	
	КоличествоСтрок   = MXL.ВысотаТаблицы;
	КоличествоКолонок = MXL.ШиринаСтраницы;
	НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
		
		Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст) = "Итого:" Тогда
			Прервать;
		КонецЕсли;
		// письмерова 16.04.2025 BSLR-4525
		Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст = "" ТОгда
			ПРодолжить;
		КонецЕсли;
		
		КоличествоВозврат = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст);
		НоваяСтрока = ТаблицаТоваров.Добавить();
		НоваяСтрока.ТипОперации   = "Возврат";
		НоваяСтрока.Количество = КоличествоВозврат;
		НоваяСтрока.Количество = НоваяСтрока.Количество * -1;
		ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,Истина,,ЕстьРасширениеУПД );  
		
		// письмерова 20.11.2024 BSLR-4095
		Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
			// письмерова 31.01.2025 BSLR-4195
			Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
				НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon;  // BSLR-4486  
				НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
			КонецЕсли;
			НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
		КонецЕсли;
		
		// письмерова 14.12.2023 BSLR-2680	
		Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
			НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
			Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
				Если СоздаватьКонтрагентов ТОгда 
					НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);  
					Сообщить("Создан новый контрагент " + НовыйКонтрагент); 
					НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка; 
				Иначе
					Сообщить("не найден контрагент ИНН"  + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
					НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;			
	КонецЦикла;
	
	Если Объект.ЛичныйКабинет.РежимЗагрузкиПродажЮЛ = Перечисления.топ_РежимыЗагрузкиПродажЮЛ.ПередачаВДоставку ТОгда // BSLR-5296
	// Стрелкова Н. 08.04.26 BSLR-5296 {    
	// Данные листа Товары__переданные_в_доставку берутся только по продажам бизнесу
	Если НЕ Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS И MXLОбщая.ПолучитьОбласть("Товары__переданные_в_доставку") <> Неопределено Тогда 
		MXL = MXLОбщая.ПолучитьОбласть("Товары__переданные_в_доставку");
		КоличествоСтрок   = MXL.ВысотаТаблицы;
		КоличествоКолонок = MXL.ШиринаСтраницы;
		
		НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
		СтоимостьДостакиКГТ = 0; // письмерова 20.08.2025 BSLR-4676
		
		// письмерова 18.09.2025 BSLR-4418
		ЕстьРасширениеУПД = топ_ОбщийВызовСервера.ПроверкаНаличияРасширенияВБазе("БИТ_УправлениеМаркетплейсами_УПД"); 	
		
		Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
			
			Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст), "Итого:") <> 0 Тогда
				Прервать;
			КонецЕсли;  
			Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипЗаказа).ТекущаяОбласть.Текст <> "Продажа бизнесу" Тогда 
				Продолжить;
			КонецЕсли;
			// письмерова 16.04.2025 BSLR-4525
			Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст = "" ТОгда 
				// письмерова 20.08.2025 BSLR-4676  
				Название = MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст; 
				Если СтрНайти(ВРЕГ(Название),"ДОСТАВКА") > 0 ТОгда
					СтоимостьДостакиКГТ = СтоимостьДостакиКГТ + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст)	
				КонецЕсли;	
				ПРодолжить;
			КонецЕсли;
			
			КоличествоПродано = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
			НоваяСтрока = ТаблицаТоваров.Добавить();
			НоваяСтрока.ТипОперации   = "Продажа";
			НоваяСтрока.Количество = КоличествоПродано;
			ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,,,ЕстьРасширениеУПД);
			
			// письмерова 20.11.2024 BSLR-4095
			Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
				// письмерова 31.01.2025 BSLR-4195
				Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
					НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon;  // BSLR-4486  
					НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1); 
				КонецЕсли;
				НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
			КонецЕсли;
			
			// письмерова 14.12.2023 BSLR-2680	
			Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
				НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
				Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
					Если СоздаватьКонтрагентов ТОгда 
						НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);  
						Сообщить("Создан новый контрагент " + НовыйКонтрагент); 
						НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка; 
					Иначе
						Сообщить("не найден контрагент ИНН"  + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
						НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;			
		КонецЦикла; 
	КонецЕсли;	
	// Данные листа Невыкупленные_товары берутся только по продажам бизнесу
	Если НЕ Объект.ЛичныйКабинет.ИспользуетсяСхемаDBS И MXLОбщая.Области.Найти("Невыкупленные_товары") <> Неопределено Тогда 
		MXL = MXLОбщая.ПолучитьОбласть("Невыкупленные_товары");
	
		КоличествоСтрок   = MXL.ВысотаТаблицы;
		КоличествоКолонок = MXL.ШиринаСтраницы;
		НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, ПерваяСтрока-1);
		Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
			
			Если Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст) = "Итого:" Тогда
				Прервать;
			КонецЕсли;
			Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст = "" ТОгда
				Продолжить;
			КонецЕсли;
			Если MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипЗаказа).ТекущаяОбласть.Текст <> "Продажа бизнесу" Тогда 
				Продолжить;
			КонецЕсли;
			
			КоличествоВозврат = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоВозврат).ТекущаяОбласть.Текст);
			НоваяСтрока = ТаблицаТоваров.Добавить();
			НоваяСтрока.ТипОперации   = "Возврат";
			НоваяСтрока.Количество = КоличествоВозврат;
			НоваяСтрока.Количество = НоваяСтрока.Количество * -1;
			ЗаполнитьСтрокуТаблицыТоваровЯМ(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла,Истина,,ЕстьРасширениеУПД );  
			
			Если Объект.ДатаНачала >= Дата(2024,10,1) Тогда // пересчет цены и суммы
				Если НЕ Объект.ЛичныйКабинет.ЗагружатьСуммуСкидокВУслугу Тогда // если не грузим в услугу, грузим в ОК
					НоваяСтрока.Сумма = НоваяСтрока.Сумма + НоваяСтрока.СуммаДоплатыOzon;  // BSLR-4486  
					НоваяСтрока.Цена = НоваяСтрока.Сумма / ?(НоваяСтрока.Количество <> 0, НоваяСтрока.Количество, 1);
				КонецЕсли;
				НоваяСтрока.СуммаДоплатыOzon = - НоваяСтрока.СуммаДоплатыOzon; // BSLR-5615
			КонецЕсли;
			
			Если ЗначениеЗаполнено(НоваяСтрока.НомерСЧФакт) ТОгда
				НоваяСтрока.Покупатель = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", НоваяСтрока.ИНН);
				Если НоваяСтрока.Покупатель = Справочники.Контрагенты.ПустаяСсылка() ТОгда
					Если СоздаватьКонтрагентов ТОгда 
						НовыйКонтрагент = СоздатьЮЛ(НоваяСтрока,Объект.ЛичныйКабинет.Организация);  
						Сообщить("Создан новый контрагент " + НовыйКонтрагент); 
						НоваяСтрока.Покупатель = НовыйКонтрагент.Ссылка; 
					Иначе
						Сообщить("не найден контрагент ИНН"  + НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
						НоваяСтрока.Покупатель = Строка(НоваяСтрока.ИНН + " " + НоваяСтрока.НаименованиеПокупателя);
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;			
		КонецЦикла;	
	КонецЕсли;
	// } Стрелкова Н. 08.04.26 BSLR-5296 
	КонецЕсли; // BSLR-5296
	//а=1;
	Если ТаблицаТоваров.Количество() Тогда  
		Результат.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаТоваров);
		Результат.СписокУслуг   = Новый Массив;
		ДанныеЗагрузки = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(Результат, Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания); 
		
		Если ДанныеЗагрузки.Ошибка Тогда
			Результат.Ошибка = Истина;
			Результат.Сообщение = Результат.Сообщение;
		    Возврат Результат;
		КонецЕсли; 
		// письмерова 20.08.2025 BSLR-4676 	
		// добавим услугу Доставка КГТ, если она > 0 
		Если СтоимостьДостакиКГТ > 0 ТОгда
			нСтр = ДанныеЗагрузки.Услуги.Добавить();
			УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Доставка КГТ");					
			нСтр.УслугаМП = УслугаМП;
			нСтр.Наименование = УслугаМП.Наименование;
			нСтр.НаименованиеМП = УслугаМП.ЛитералУслуги;
			нСтр.Сумма = СтоимостьДостакиКГТ;
			нСтр.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
			СтавкаНДС = нСтр.Номенклатура.СтавкаНДС;
			нСтр.СтавкаНДС = СтавкаНДС;
			ЗначСтавки = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
			нСтр.СуммаНДС = нСтр.Сумма *  ЗначСтавки/ (ЗначСтавки + 100) ; 
		КонецЕсли;
		
		// получить признак набора для номенклатуры
		Если Константы.ИспользоватьНаборы.Получить() Тогда 	
			ДанныеЗагрузки.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеЗагрузки.Товары); 	
		КонецЕсли; 
		Если ЭтоВыкупы Тогда
			Результат.Вставить("ТоварыВыкуп", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
		Иначе
			Результат.Вставить("Товары", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
			Результат.Вставить("Услуги", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Услуги));
		КонецЕсли; 	 
	Иначе // письмерова 18.12.2023 BSLR-2973
		Результат.Ошибка = Истина;
		Результат.Сообщение = "За выбранный период не было продаж";
	    Возврат Результат;
	КонецЕсли;
	//
	Возврат Результат;

КонецФункции

&НаСерверебезконтекста
Процедура ОбработатьСтрокуДатыЯМ(ТекстЯчейки);
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "за период с", "");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " января ", ".01.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " февраля ", ".02.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " марта ", ".03.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " апреля ", ".04.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " мая ", ".05.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " июня ", ".06.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " июля ", ".07.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " августа ", ".08.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " сентября ", ".09."); 
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " октября ", ".10.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " ноября ", ".11.");
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, " декабря ", ".12.");
	
	ТекстЯчейки = СтрЗаменить(ТекстЯчейки, "года", "");
	ТекстЯчейки = ТекстЯчейки + " 00:00:00"; 
КонецПроцедуры

&НаСерверебезконтекста
Функция ЗаголовкиТаблицыЯМ()
	
	МассивКолонок = Новый Массив;
	
	МассивКолонок.Добавить("Номер заказа");
	МассивКолонок.Добавить("Тип заказа");
	МассивКолонок.Добавить("Название товара");
	МассивКолонок.Добавить("Ваш SKU");
	МассивКолонок.Добавить("Количество переданных в доставку, шт.");
	МассивКолонок.Добавить("Статус заказа");
	МассивКолонок.Добавить("Дата оформления заказа");
	МассивКолонок.Добавить("Дата передачи товара в доставку");
	МассивКолонок.Добавить("Дата доставки товара");
	МассивКолонок.Добавить("Способ оплаты");
	МассивКолонок.Добавить("Ставка НДС");
	МассивКолонок.Добавить("Цена c НДС без учёта скидок, руб. за шт.");
	МассивКолонок.Добавить("Ваша скидка по акции маркетплейса, руб. на 1 шт.");
	МассивКолонок.Добавить("Ваша скидка по бонусам СберСпасибо (за шт.), руб. на 1 шт.");
	МассивКолонок.Добавить("Ваша скидка по баллам Яндекс.Плюса, руб. на 1 шт.");
	МассивКолонок.Добавить("Цена с НДС с учётом всех скидок, руб. за шт.");
	МассивКолонок.Добавить("Стоимость всех переданных в доставку штук с НДС без учёта скидок, руб.");
	МассивКолонок.Добавить("Сумма всех скидок для возвращённых штук, руб.");
	МассивКолонок.Добавить("Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб.");
	МассивКолонок.Добавить("ИНН покупателя");
	МассивКолонок.Добавить("КПП покупателя");
	МассивКолонок.Добавить("Дата УПД");
	МассивКолонок.Добавить("Номер УПД");
	МассивКолонок.Добавить("Дата УКД");
	МассивКолонок.Добавить("Номер УКД");
	Возврат МассивКолонок;
КонецФункции

&НаСерверебезконтекста
Процедура ЗаполнитьСтрокуТаблицыТоваровЯМ(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь, ЭтоВыкупы = Ложь, ЕстьРасширениеУПД = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.НомерСтроки = ТекущаяСтрока - 1;
	СтрокаПриемник.Артикул       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	СтрокаПриемник.Наименование       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Наименование).ТекущаяОбласть.Текст);	
	СтрокаПриемник.ИД_Заказ      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст);
	СтрокаПриемник.Номер_Заказ      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Номер_Заказ).ТекущаяОбласть.Текст);
	СтрокаПриемник.ДатаЗаказа = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаЗаказа).ТекущаяОбласть.Текст);

	Если ЭтоВозврат Тогда   
		// письмерова 11.12.2023 BSLR-2422
		СтавкаНДССтрокой      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст); 
		СтрокаПриемник.Цена      = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаВозврат).ТекущаяОбласть.Текст);
		СтрокаПриемник.Сумма = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаВозврат).ТекущаяОбласть.Текст);
        // письмерова 19.11.2024 BSLR-4095
		СтрокаПриемник.СуммаДоплатыOzon = -1 * Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzonВозврат).ТекущаяОбласть.Текст);
		Если СтавкаНДССтрокой <> "" Тогда
		СтавкаНДС      = Число(СтрЗаменить(СтрЗаменить(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДСВозврат).ТекущаяОбласть.Текст, "%", ""), "Без НДС", "0"));
		СтрокаПриемник.СтавкаНДСЗнач  = ?(СтавкаНДС = 0, "Без НДС", Строка(СтавкаНДС) + "%");
		СтрокаПриемник.НДС = СтрокаПриемник.Сумма / (100 + СтавкаНДС) * СтавкаНДС;
		КонецЕсли;  
		СтрокаПриемник.Сумма = СтрокаПриемник.Сумма * -1; 
	Иначе
		// письмерова 11.12.2023 BSLR-2422
		СтавкаНДССтрокой      = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст); 
		СтрокаПриемник.Цена      = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст);
		СтрокаПриемник.Сумма = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Сумма).ТекущаяОбласть.Текст);  
        // письмерова 19.11.2024 BSLR-4095
		СтрокаПриемник.СуммаДоплатыOzon = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаДоплатыOzon).ТекущаяОбласть.Текст);
		Если СтавкаНДССтрокой <> "" Тогда
		СтавкаНДС      = Число(СтрЗаменить(СтрЗаменить(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст, "%", ""), "Без НДС", "0"));
		СтрокаПриемник.СтавкаНДСЗнач  = ?(СтавкаНДС = 0, "Без НДС", Строка(СтавкаНДС) + "%"); 
		СтрокаПриемник.НДС = СтрокаПриемник.Сумма / (100 + СтавкаНДС) * СтавкаНДС;   
		КонецЕсли;
	КонецЕсли; 
	
	// письмерова 14.12.2023 BSLR-2680 
	СтрокаПриемник.НаименованиеПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НаименованиеПокупателя).ТекущаяОбласть.Текст);
	СтрокаПриемник.ИНН = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
	СтрокаПриемник.КПП = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЮридическийАдресПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЮридическийАдресПокупателя).ТекущаяОбласть.Текст);	
	
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если ЭтоВозврат Тогда      
		НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФактКор).ТекущаяОбласть.Текст);  
		ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФактКор).ТекущаяОбласть.Текст);
	Иначе	
		НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФакт).ТекущаяОбласть.Текст);  
		ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФакт).ТекущаяОбласть.Текст);
	КонецЕсли;
	// письмерова 18.09.2025 BSLR-4418
	Если ЕстьРасширениеУПД Тогда
		СтрокаПриемник.НомерСчФакт = НомерСчФактСтрокой;
	Иначе	
		СтрокаПриемник.НомерСчФакт = Прав(НомерСчФактСтрокой,12);
	КонецЕсли;
	
	Если ДатаСтрокой <> "" Тогда
		Год = Число(Прав(ДатаСтрокой,4));
		Месяц = Число(Сред(ДатаСтрокой,4,2));
		День = Число(Лев(ДатаСтрокой,2));
		ДатаСчФакт = Дата(Год,Месяц,День);
		СтрокаПриемник.ДатаСчФакт = ДатаСчФакт; 
	КонецЕсли;
	// письмерова 29.04.2025 BSLR-4544
	Если НЕ ЗначениеЗаполнено(СтрокаПриемник.НомерСчФакт) Тогда // проверим в другой колонке
		// Стрелкова Н. 08.04.26 BSLR-5296 
		Если ЭтоВозврат Тогда      
			Попытка 
				НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФактДопКор).ТекущаяОбласть.Текст); 
			Исключение 
				НомерСчФактСтрокой = ""; 
			КонецПопытки; 
			Попытка 
				ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФактДопКор).ТекущаяОбласть.Текст);
			Исключение 
				ДатаСтрокой = ""; 
			КонецПопытки; 
		Иначе	
			Попытка 
				НомерСчФактСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСчФактДоп).ТекущаяОбласть.Текст); 
			Исключение 
				НомерСчФактСтрокой = ""; 
			КонецПопытки; 
			Попытка 
				ДатаСтрокой = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСчФактДоп).ТекущаяОбласть.Текст);
			Исключение 
				ДатаСтрокой = ""; 
			КонецПопытки; 
		КонецЕсли;
		
		// письмерова 18.09.2025 BSLR-4418
		Если ЕстьРасширениеУПД Тогда
			СтрокаПриемник.НомерСчФакт = НомерСчФактСтрокой;
		Иначе	
			СтрокаПриемник.НомерСчФакт = Прав(НомерСчФактСтрокой,12);
		КонецЕсли;
		Если ДатаСтрокой <> "" Тогда
			Год = Число(Прав(ДатаСтрокой,4));
			Месяц = Число(Сред(ДатаСтрокой,4,2));
			День = Число(Лев(ДатаСтрокой,2));
			ДатаСчФакт = Дата(Год,Месяц,День);
			СтрокаПриемник.ДатаСчФакт = ДатаСчФакт; 
		КонецЕсли;
	КонецЕсли; 
	
	// Стрелкова Н. 31.03.26 BSLR-5296 
	Если ЗначениеЗаполнено(СтрокаПриемник.ИНН) Тогда
		 СтрокаПриемник.ПродажаЮЛ = Истина;
	КонецЕсли;		
	
КонецПроцедуры
	
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("Номер_Заказ", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер заказа"));
	Результат.Вставить("ТипЗаказа",  УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Тип заказа"));
	Результат.Вставить("Наименование", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Название товара"));
	Если Не ЗначениеЗаполнено(Результат.Наименование) Тогда // BSLR-4525
		Результат.Вставить("Наименование",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Название"));
	КонецЕсли;  
	Если Не ЗначениеЗаполнено(Результат.Наименование) Тогда // письмерова 20.08.2025 BSLR-4676
		Результат.Вставить("Наименование",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Наименование"));
	КонецЕсли;
	Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Ваш SKU"));

	Результат.Вставить("Количество",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Доставлено, шт."));
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если Не ЗначениеЗаполнено(Результат.Количество) Тогда
		Результат.Вставить("Количество",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Количество переданных в доставку, шт."));  
	КонецЕсли;
	Результат.Вставить("КоличествоВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Не выкуплено, шт."));
	Если Не ЗначениеЗаполнено(Результат.КоличествоВозврат) Тогда
		Результат.Вставить("КоличествоВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Возвращено, шт."));
	КонецЕсли;
	Результат.Вставить("ТипОперации", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Статус заказа"));
	Если Не ЗначениеЗаполнено(Результат.ТипОперации) Тогда  // письмерова 16.07.2024 BSLR-3711
		Результат.Вставить("ТипОперации",99);
	КонецЕсли;
	Результат.Вставить("ДатаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата оформления заказа"));
	Результат.Вставить("СтавкаНДС", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Ставка НДС"));
	Результат.Вставить("СтавкаНДСВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Ставка НДС"));
	Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок, руб. за шт."));
	Результат.Вставить("ЦенаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок, руб. за шт."));
	//Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, руб."));
	//Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, руб.")); 
	//Если Не ЗначениеЗаполнено(Результат.CуммаВозврат) Тогда
	//	Результат.Вставить("СуммаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб."));
	//КонецЕсли;
	// письмерова 14.12.2023 BSLR-2680
	Результат.Вставить("НаименованиеПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Наименование организации"));
	Результат.Вставить("ИНН", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "ИНН"));
	Результат.Вставить("КПП", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "КПП"));
	Результат.Вставить("ЮридическийАдресПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Юридический адрес"));
	Результат.Вставить("ДатаСчФакт", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата УПД"));
	Результат.Вставить("НомерСчФакт", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер УПД"));
	// письмерова 19.11.2024 BSLR-4095
	Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для доставленных штук, руб."));
	Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для возвращённых штук, руб."));  
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzon) Тогда
		Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для переданных в доставку штук, руб."));
	КонецЕсли; 
	Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzonВозврат) Тогда
		Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для невыкупленных штук, руб."));
	КонецЕсли; 
	// письмерова 07.04.2025 BSLR-4486 	
	Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, руб.") <> Неопределено ТОгда
		Результат.Вставить("Сумма",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, руб."));
	КонецЕсли; 
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, руб.") <> Неопределено ТОгда
		Результат.Вставить("Сумма",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, руб."));
	КонецЕсли; 
	Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, руб.") <> Неопределено ТОгда
		Результат.Вставить("СуммаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, руб."));
	КонецЕсли;
	
	Если УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб.")  <> Неопределено Тогда
		Результат.Вставить("СуммаВозврат",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, руб."));
	КонецЕсли; 
	
	Если Не Результат.Свойство("Сумма") ТОгда
		Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, ₽"));
	ИначеЕсли Не ЗначениеЗаполнено(Результат.Сумма) ТОгда
		Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех доставленных штук с НДС с учётом всех скидок, ₽"));	
	КонецЕсли;   
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если Не Результат.Свойство("Сумма") ТОгда
		Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, ₽"));
	ИначеЕсли Не ЗначениеЗаполнено(Результат.Сумма) ТОгда
		Результат.Вставить("Сумма", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех переданных в доставку штук с НДС с учётом всех скидок, ₽"));	
	КонецЕсли;   
	
	Если Не Результат.Свойство("СуммаВозврат") ТОгда
		Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, ₽"));
	ИначеЕсли Не ЗначениеЗаполнено(Результат.СуммаВозврат) ТОгда
		Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех возвращённых штук с НДС с учётом всех скидок, ₽"));	
	КонецЕсли;
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если Не Результат.Свойство("СуммаВозврат") ТОгда
		Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, ₽"));
	ИначеЕсли Не ЗначениеЗаполнено(Результат.СуммаВозврат) ТОгда
		Результат.Вставить("СуммаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Стоимость всех невыкупленных штук с НДС с учётом всех скидок, ₽"));	
	КонецЕсли;
	 
	Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzon) ТОгда
		Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для доставленных штук, ₽")); 
	КонецЕсли;
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzon) Тогда
		Результат.Вставить("СуммаДоплатыOzon", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для переданных в доставку штук, ₽"));
	КонецЕсли; 
	Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzonВозврат) ТОгда
		Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для возвращённых штук, ₽")); 
	КонецЕсли;
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Если Не ЗначениеЗаполнено(Результат.СуммаДоплатыOzonВозврат) ТОгда
		Результат.Вставить("СуммаДоплатыOzonВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Сумма всех скидок для невыкупленных штук, ₽")); 
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Результат.Цена) ТОгда
		Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок за шт., ₽")); 
	КонецЕсли;
	Если Не ЗначениеЗаполнено(Результат.ЦенаВозврат) ТОгда
		Результат.Вставить("ЦенаВозврат", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Цена с НДС с учётом всех скидок за шт., ₽")); 
	КонецЕсли; 
	
	// письмерова 29.04.2025 BSLR-4544
	Результат.Вставить("ДатаСчФактДоп", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата счёта-фактуры"));
	Результат.Вставить("НомерСчФактДоп", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер счёта фактуры"));
	
	// Стрелкова Н. 08.04.26 BSLR-5296 
	Результат.Вставить("ДатаСчФактКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата УКД"));
	Результат.Вставить("НомерСчФактКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер УКД"));
	Результат.Вставить("ДатаСчФактДопКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Дата корректировочного счёта-фактуры"));
	Результат.Вставить("НомерСчФактДопКор", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Номер корректировочного счёта фактуры"));   	

	Возврат Результат;
	
КонецФункции      

&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, СтрокаПоиска)
	Для сч = 1 по 50 Цикл // письмерова BSLR-4544
		Если СтрокаПоиска = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков) + "C" + сч).ТекущаяОбласть.Текст) Тогда
			Возврат сч;
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецФункции


&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровЯМ() Экспорт
  	КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
	КвалификаторыЧисла  = Новый КвалификаторыЧисла(18,3);
	ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
	ТипЧисла  = Новый ОписаниеТипов("Число"  ,,,  КвалификаторыЧисла );
	ТипБулево = Новый ОписаниеТипов("Булево");

	СписокТоваров = Новый ТаблицаЗначений;
	СписокТоваров.Колонки.Добавить("НомерСтроки", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ИД_Заказ", ТипСтроки); 
	СписокТоваров.Колонки.Добавить("Номер_Заказ", ТипСтроки);

	СписокТоваров.Колонки.Добавить("ТипЗаказа", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Наименование", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Артикул", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Количество", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
	СписокТоваров.Колонки.Добавить("ДатаЗаказа", ТипСтроки);
	СписокТоваров.Колонки.Добавить("СтавкаНДСЗнач", ТипСтроки);
	СписокТоваров.Колонки.Добавить("НДС", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Цена", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Сумма", ТипЧисла);
	// письмерова 14.12.2023 BSLR-2680
	СписокТоваров.Колонки.Добавить("НомерСчФакт", ТипСтроки);
	СписокТоваров.Колонки.Добавить("ДатаСчФакт",Новый ОписаниеТипов("Дата" ,,,, Новый КвалификаторыДаты(ЧастиДаты.Дата)));	
	СписокТоваров.Колонки.Добавить("Покупатель");
	
	СписокТоваров.Колонки.Добавить("НаименованиеПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250))); 
	СписокТоваров.Колонки.Добавить("ЮридическийАдресПокупателя",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
	СписокТоваров.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15)));
	СписокТоваров.Колонки.Добавить("КПП",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(15))); 
	
	// письмерова 19.11.2024 BSLR-4095
	СписокТоваров.Колонки.Добавить("СуммаДоплатыOzon", ТипЧисла);
	// Стрелкова Н. 31.03.26 BSLR-5296 
	СписокТоваров.Колонки.Добавить("ПродажаЮЛ", ТипБулево);
	
	Возврат СписокТоваров;
	
	
КонецФункции


// письмерова 19.07.2023 BSLR-2097 - услуги ЯМ 
&НаКлиенте
Процедура ЗагрузитьУслугиИзExcel(Команда)
	
	Если Объект.Услуги.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыЯМ", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблица услуг содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
	иначе
		ВыполнитьЗагрузкуЧерезФайлУслигиЯМ();
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыЯМ(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Услуги.Очистить();
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайлУслигиЯМ();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлУслигиЯМ(ЭтоПродвижение = Ложь)
	
	Попытка
		НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуУслугиЯМ",ЭтаФорма,ЭтоПродвижение),,,,,новый УникальныйИдентификатор); 
	Исключение
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуУслугиЯМ(Результат,ЭтоПродвижение) Экспорт 
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	РезультатВыполнения = ЗагрузитьУслугиИзExcelНаСервере(Результат.Адрес, РасширениеФайла,ЭтоПродвижение);
	
	УстановитьВидимостьДоступность(); // BSLR-5051	
	
	Если НЕ РезультатВыполнения.Ошибка Тогда
		Если Не ЭтоПродвижение Тогда 
			Если Объект.ДатаНачала <  Дата(2024,10,1) ТОгда // письмерова 20.11.2024 BSLR-4095, файл продвижения отменен с 01.10.2024
				ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеУслугПродвижения", ЭтаФорма);
				ПоказатьВопрос(ОписаниеОповещения, "Для загрузки услуг по договору на продвижение требуется выбрать Детализацию. Загрузить?", РежимДиалогаВопрос.ДаНет);
			КонецЕсли;//BSLR-4095	
		КонецЕсли;
	Иначе
		Сообщить(РезультатВыполнения.Сообщение);	
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьУслугиИзExcelНаСервере(Знач Адрес, Расширение,ЭтоПродвижение)
	
  	Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
	ПерваяСтрока = 0;
	
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение); 
	ЕстьДанныеОтправления = Ложь;
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		УдалитьИзВременногоХранилища(Адрес);
		Результат.Ошибка = Истина;
		Результат.Сообщение = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());//"Ошибка при загрузке файла, повторите попытку";
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда  	
		УдалитьФайлы(ИмяФайла); 	
	КонецЕсли; 
	
	MXLОбщая = MXL;
	// письмерова 19.11.2024 BSLR-4095
	ИдМагазина = ?(Объект.ЛичныйКабинет.ID_ПартнераЯМ_ЗагрузкаОК = "", Объект.ЛичныйКабинет.ID_ПартнераЯМ, Объект.ЛичныйКабинет.ID_ПартнераЯМ_ЗагрузкаОК);

	Если Не ЭтоПродвижение Тогда  // загрузка первого файла
			
		ТаблицаУслуг = ПолучитьТаблицуЗагрузкиУслугЯМ(); 		

		Если MXLОбщая.Области.Найти("Сводка") <> Неопределено Тогда
			
			MXL = MXLОбщая.ПолучитьОбласть("Сводка");	
			КоличествоСтрок   = MXL.ВысотаТаблицы;
			КоличествоКолонок = MXL.ШиринаСтраницы;
			
			Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
				Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
					ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
					Если СтрНайти(ТекстЯчейки, "Сводка бизнеса по стоимости услуг") <> 0 Тогда
						ПерваяСтрока = ТекущаяСтрока + 3;
					КонецЕсли;
					
					Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
						Прервать;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			
			Если ПерваяСтрока = 0 Тогда
				Результат.Ошибка = Истина;
				ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Бухгалтерия → Финансовые отчеты → По стоимости услуг");
				Возврат Результат;
			КонецЕсли;
		Иначе
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Бухгалтерия → Финансовые отчеты → По стоимости услуг");
			Возврат Результат;
		КонецЕсли;

		НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиУслугЯМ(MXL, ПерваяСтрока-1);

		Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
	       		
			Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C1").ТекущаяОбласть.Текст), "Итого:") <> 0 Тогда
				Прервать; // конец таблицы
			КонецЕсли;  
			
			// проверка на ИД магазина
			Если СокрЛП(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C3").ТекущаяОбласть.Текст)) <> ИдМагазина ТОгда
				Продолжить; // данные по другому магазину
			КонецЕсли;		
			
			Для Каждого Колонка из НомераКолонокФайла Цикл 
				Если Колонка.Значение = Неопределено Тогда // письмерова 06.09.2023 BSLR-2551
					Продолжить;
				КонецЕсли;   			
				Сумма = Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + Колонка.Значение).ТекущаяОбласть.Текст);
				ЛитералУслуги = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ПерваяСтрока-1) + "C" + Колонка.Значение).ТекущаяОбласть.Текст); 
				
				Если Сумма = 0 Тогда
					Продолжить; // нулевые не выводим
				КонецЕсли; 
				
				НоваяСтрока = ТаблицаУслуг.Добавить();
			    ЛитералУслуги = СтрЗаменить(ЛитералУслуги,", руб.","");
				ЛитералУслуги = СтрЗаменить(ЛитералУслуги,", ₽","");  // письерова 19.03.2024 BSLR-3371
				НоваяСтрока.ЛитералУслуги = ЛитералУслуги;
				НоваяСтрока.Сумма = Сумма; 			
			КонецЦикла; 	
		КонецЦикла;

		Если ТаблицаУслуг.Количество() Тогда
			// дозаполнение таблицы данными об услуге ТП и сопоставленной номенклатуре 	
			Запрос = Новый запрос("ВЫБРАТЬ
			                      |	тз.ЛитералУслуги КАК ЛитералУслуги,
			                      |	тз.Сумма КАК Сумма
			                      |ПОМЕСТИТЬ ВТ_ТЗ
			                      |ИЗ
			                      |	&тз КАК тз
			                      |;
			                      |
			                      |////////////////////////////////////////////////////////////////////////////////
			                      |ВЫБРАТЬ
			                      |	ВТ_ТЗ.ЛитералУслуги КАК НаименованиеМП,
			                      |	ВТ_ТЗ.Сумма КАК Сумма,
			                      |	топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК Номенклатура,
			                      |	топ_СопоставлениеНоменклатурыУслуг.УслугаМП КАК УслугаМП,
			                      |	топ_СопоставлениеНоменклатурыУслуг.УслугаМП.СтавкаНДС КАК СтавкаНДС,
			                      |	топ_СопоставлениеНоменклатурыУслуг.УслугаМП.Наименование КАК Наименование
			                      |ИЗ
			                      |	ВТ_ТЗ КАК ВТ_ТЗ
			                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
			                      |		ПО ВТ_ТЗ.ЛитералУслуги = топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги
			                      |ГДЕ 
								  // письмерова 13.02.2024 BSLR-3230
			                      |	ВЫБОР
			                      |			КОГДА топ_СопоставлениеНоменклатурыУслуг.ТорговаяПлощадка ЕСТЬ NULL
			                      |				ТОГДА ИСТИНА
			                      |			ИНАЧЕ топ_СопоставлениеНоменклатурыУслуг.ТорговаяПлощадка = &ТорговаяПлощадка
			                      |		КОНЕЦ");  
			
			Запрос.УстановитьПараметр("тз",ТаблицаУслуг);
			Запрос.УстановитьПараметр("ТорговаяПлощадка", Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет);
			
			ВремТабл = Запрос.Выполнить().Выгрузить(); 		
			//Объект.Услуги.Очистить();  - т.к. услуга комиссии приходит с загрузки товаров BSLR-4195
			
			Для Каждого Стр из ВремТабл Цикл  
				нСтр = Объект.Услуги.Добавить();
				ЗаполнитьЗначенияСвойств(нСтр,Стр);	
				// письмерова 13.02.2024 BSLR-3230	- новая услуга
				Если НЕ ЗначениеЗаполнено(нСтр.УслугаМП) Тогда 
					
					УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Стр.НаименованиеМП);					
					Если УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда // нет элемента справочника УслугиМП
						Перечень = Новый соответствие;
						Перечень.Вставить(Стр.НаименованиеМП,Стр.НаименованиеМП);
						ПереченьНДС = Новый соответствие;
						ПереченьНДС.Вставить(Стр.НаименованиеМП,"20%");    
						
						топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
						Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
						Неопределено);
						
						УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Стр.НаименованиеМП);
					Конецесли;					
					нСтр.УслугаМП = УслугаМП;
					нСтр.Наименование = УслугаМП.Наименование;
					нСтр.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
				КонецЕсли;	
				
				Если НЕ ЗначениеЗаполнено(нСтр.Номенклатура) тогда
					Перечень = Новый соответствие;
					Перечень.Вставить(Стр.НаименованиеМП,Стр.НаименованиеМП);
					ПереченьНДС = Новый соответствие;
					ПереченьНДС.Вставить(Стр.НаименованиеМП,"20%");    
					
					топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
					Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
					Неопределено);
					
					УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Стр.НаименованиеМП);
					нСтр.УслугаМП = УслугаМП;
					нСтр.Наименование = УслугаМП.Наименование;
					нСтр.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП); 
					
				КонецЕсли;  					
				СтавкаНДС = нСтр.Номенклатура.СтавкаНДС;
				нСтр.СтавкаНДС = СтавкаНДС;
				ЗначСтавки = топ_ОбщийВызовСервера. БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
				нСтр.СуммаНДС = нСтр.Сумма *  ЗначСтавки/ (ЗначСтавки + 100) ; 		
			КонецЦикла; 
		Иначе // письмерова 12.02.2024 BSLR-3230
			Сообщить("Не найдены совпадения по ID магазина или в файле нулевые значения услуг. 
					|Убедитесь, что в настройках личного кабинета на вкладке ""Отчет комиссионера"" заполнено поле ""ID магазина (для загрузки финансовых отчетов)"", 
					|и загружаемый файл относится к бизнес-аккаунту, указанному в личном кабинете."); 	
		КонецЕсли;
	
	Иначе // заполнение услуг продвижения, второй файл
		
		Если MXLОбщая.Области.Найти("Скидки_маркетплейса") <> Неопределено
			И MXLОбщая.Области.Найти("Баллы_Яндекс_Плюса") <> Неопределено Тогда
			 
			ПерваяСтрока = 0; 
			MXL = MXLОбщая.ПолучитьОбласть("Скидки_маркетплейса");	
			КоличествоСтрок   = MXL.ВысотаТаблицы;
			КоличествоКолонок = MXL.ШиринаСтраницы;
			
			Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
				Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
					ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
					Если СтрНайти(ТекстЯчейки, "ИТОГО") <> 0 Тогда
						ПерваяСтрока = ТекущаяСтрока + 1;
					КонецЕсли;
					
					Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
						Прервать;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			
			Если ПерваяСтрока = 0 Тогда
				Результат.Ошибка = Истина;
				ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Сведённый отчёт по акту об оказанных услугах по продвижению маркетплейса за период");
				Возврат Результат;
			КонецЕсли;
			
			СуммаУслугАкция = 0;
			Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл			
				// проверка на ИД магазина
				Если СокрЛП(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C3").ТекущаяОбласть.Текст)) <> ИдМагазина ТОгда
					Продолжить; // данные по другому магазину
				КонецЕсли; 			
				СуммаУслугАкция = СуммаУслугАкция + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C18").ТекущаяОбласть.Текст); // письмерова 12.08.2024 BSLR-3775	
			КонецЦикла;
			
			Если СуммаУслугАкция <> 0 Тогда
				НоваяСтрока = Объект.Услуги.Добавить();
				НоваяСтрока.НаименованиеМП = "Продвижение в рамках Акций";
				НоваяСтрока.Сумма = - СуммаУслугАкция; 
				
				Данные = ПолучитьДанныеОбУслугеПоЛитералу(НоваяСтрока.НаименованиеМП); 
				
				НоваяСтрока.Номенклатура = Данные.Номенклатура;
				НоваяСтрока.УслугаМП = Данные.УслугаМП; 
				НоваяСтрока.Наименование = Данные.Номенклатура.Наименование;
				Если НоваяСтрока.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
					НоваяСтрока.СтавкаНДС = НоваяСтрока.Номенклатура.СтавкаНДС;
					ЗначСтавки = топ_ОбщийВызовСервера. БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.Номенклатура.СтавкаНДС);
					НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма *  ЗначСтавки/ (ЗначСтавки + 100) ; 		
				КонецЕсли; 
			КонецЕсли; 		   
		   
			ПерваяСтрока = 0; 
			MXL = MXLОбщая.ПолучитьОбласть("Баллы_Яндекс_Плюса");	
			КоличествоСтрок   = MXL.ВысотаТаблицы;
			КоличествоКолонок = MXL.ШиринаСтраницы;
			
			Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
				Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
					ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
					Если СтрНайти(ТекстЯчейки, "ИТОГО") <> 0 Тогда
						ПерваяСтрока = ТекущаяСтрока + 1;
					КонецЕсли;
					
					Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
						Прервать;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			
			Если ПерваяСтрока = 0 Тогда
				Результат.Ошибка = Истина;
				ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Сведённый отчёт по акту об оказанных услугах по продвижению маркетплейса за период");
				Возврат Результат;
			КонецЕсли;
			
			СуммаУслугБаллы = 0;
			Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл			
				// проверка на ИД магазина
				Если СокрЛП(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C3").ТекущаяОбласть.Текст)) <> ИдМагазина ТОгда
					Продолжить; // данные по другому магазину
				КонецЕсли; 			
				СуммаУслугБаллы = СуммаУслугБаллы + Число(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C18").ТекущаяОбласть.Текст); // письмерова 12.08.2024 BSLR-3775		
			КонецЦикла;
			
			Если СуммаУслугБаллы <> 0 Тогда
				НоваяСтрока = Объект.Услуги.Добавить();
				НоваяСтрока.НаименованиеМП = "Продвижение Яндекс.Плюс Кэшбэк";
				НоваяСтрока.Сумма = - СуммаУслугБаллы; 
				
				Данные = ПолучитьДанныеОбУслугеПоЛитералу(НоваяСтрока.НаименованиеМП); 
				
				НоваяСтрока.Номенклатура = Данные.Номенклатура;
				НоваяСтрока.УслугаМП = Данные.УслугаМП;
				НоваяСтрока.Наименование = Данные.Номенклатура.Наименование;
				Если НоваяСтрока.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда
					НоваяСтрока.СтавкаНДС = НоваяСтрока.Номенклатура.СтавкаНДС;
					ЗначСтавки = топ_ОбщийВызовСервера. БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.Номенклатура.СтавкаНДС);
					НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма *  ЗначСтавки/ (ЗначСтавки + 100) ; 		
				КонецЕсли;
			КонецЕсли;
			// письмерова 06.09.2023 BSLR-2551
			Если СуммаУслугБаллы = 0 или СуммаУслугАкция = 0 Тогда
				Сообщить("Для ID партнера " + Строка(ИдМагазина) + "в файле либо отсутствуют данные по услугам, либо их сумма равна 0. Подробнее в справке");
			КонецЕсли;
			
		Иначе
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, выберите в личном кабинете Сведённый отчёт по акту об оказанных услугах по продвижению маркетплейса за период");
			Возврат Результат;
		КонецЕсли; 	
	
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиУслугЯМ() Экспорт 
	
  	КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
	КвалификаторыЧисла  = Новый КвалификаторыЧисла(18,3);
	ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
	ТипЧисла  = Новый ОписаниеТипов("Число"  ,,,  КвалификаторыЧисла );
    
	ТаблицаУслуг = Новый ТаблицаЗначений;
	ТаблицаУслуг.Колонки.Добавить("ЛитералУслуги", ТипСтроки );
	ТаблицаУслуг.Колонки.Добавить("Сумма", ТипЧисла); 

	Возврат ТаблицаУслуг;
	
КонецФункции

&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиУслугЯМ(MXL, СтрокаЗаголовков)
	// письерова 19.03.2024 BSLR-3371
	Результат = Новый Структура;
	Результат.Вставить("РазмещениеТоваров", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Размещение товаров на витрине, руб."));  
	Если Результат.РазмещениеТоваров = Неопределено или Результат.РазмещениеТоваров = 0 Тогда
		Результат.РазмещениеТоваров = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Размещение товаров на витрине, ₽");
	КонецЕсли; 
	Результат.Вставить("СкладскаяОбработка",  УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Складская обработка, руб.")); 
	Если Результат.СкладскаяОбработка = Неопределено или Результат.СкладскаяОбработка = 0 Тогда
		Результат.СкладскаяОбработка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Складская обработка, ₽");
	КонецЕсли;
	Результат.Вставить("ПрограммаЛояльности", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Программа лояльности и отзывы, руб.")); 
	Если Результат.ПрограммаЛояльности = Неопределено или Результат.ПрограммаЛояльности = 0 Тогда
		Результат.ПрограммаЛояльности = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Программа лояльности и отзывы, ₽");
	КонецЕсли; 
	Результат.Вставить("БустПоказы", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Буст продаж, оплата за показы, ₽")); // письмерова 13.08.2024 BSLR-3759 	
	Результат.Вставить("Буст", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Буст продаж, руб."));  
	Если Результат.Буст = Неопределено или Результат.Буст = 0 Тогда
		Результат.Буст = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Буст продаж, ₽");
	КонецЕсли;
	Результат.Вставить("Рассрочка",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Рассрочка, руб."));
	Если Результат.Рассрочка = Неопределено или Результат.Рассрочка = 0 Тогда
		Результат.Рассрочка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Рассрочка, ₽");
	КонецЕсли;
	Результат.Вставить("Полки",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Полки, руб.")); // письмерова 06.09.2023 BSLR-2551
	Если Результат.Полки = Неопределено или Результат.Полки = 0 Тогда
		Результат.Полки = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Полки, ₽");
	КонецЕсли;
	Результат.Вставить("Доставка",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Доставка покупателю, руб.")); 
	Если Результат.Доставка = Неопределено или Результат.Доставка = 0 Тогда
		Результат.Доставка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Доставка покупателю, ₽");
	КонецЕсли;
	Результат.Вставить("ЭкспрессДоставка",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Экспресс-доставка покупателю, руб."));
	Если Результат.ЭкспрессДоставка = Неопределено или Результат.ЭкспрессДоставка = 0 Тогда
		Результат.ЭкспрессДоставка = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Экспресс-доставка покупателю, ₽");
	КонецЕсли;
	Результат.Вставить("ПриемПлатежа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём платежа покупателя, руб."));
	Если Результат.ПриемПлатежа = Неопределено или Результат.ПриемПлатежа = 0 Тогда
		Результат.ПриемПлатежа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём платежа покупателя, ₽");
	КонецЕсли;
	Результат.Вставить("ПереводПлатежа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Перевод платежа покупателя, руб."));
	Если Результат.ПереводПлатежа = Неопределено или Результат.ПереводПлатежа = 0 Тогда
		Результат.ПереводПлатежа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Перевод платежа покупателя, ₽");
	КонецЕсли;
	Результат.Вставить("ПлатноеХранение", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Платное хранение, руб."));
	Если Результат.ПлатноеХранение = Неопределено или Результат.ПлатноеХранение = 0 Тогда
		Результат.ПлатноеХранение = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Платное хранение, ₽");
	КонецЕсли;
	Результат.Вставить("ТранзитныйСклад", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Поставка товаров через транзитный склад, руб."));
	Если Результат.ТранзитныйСклад = Неопределено или Результат.ТранзитныйСклад = 0 Тогда
		Результат.ТранзитныйСклад = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Поставка товаров через транзитный склад, ₽");
	КонецЕсли;
	Результат.Вставить("ПриемИзлишков", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём излишков на складе, руб."));
	Если Результат.ПриемИзлишков = Неопределено или Результат.ПриемИзлишков = 0 Тогда
		Результат.ПриемИзлишков = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Приём излишков на складе, ₽");
	КонецЕсли;
	Результат.Вставить("ВывозСоСклада",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Вывоз со склада, СЦ, ПВЗ, руб.")); 
	Если Результат.ВывозСоСклада = Неопределено или Результат.ВывозСоСклада = 0 Тогда
		Результат.ВывозСоСклада = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Вывоз со склада, СЦ, ПВЗ, ₽");
	КонецЕсли;
	Результат.Вставить("ОбработкаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказа, руб."));
	Если Результат.ОбработкаЗаказа = Неопределено или Результат.ОбработкаЗаказа = 0 Тогда
		Результат.ОбработкаЗаказа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказа, ₽");
	КонецЕсли;
	// письмерова 12.02.2024 BSLR-3230
	Если Результат.ОбработкаЗаказа = Неопределено или Результат.ОбработкаЗаказа = 0 Тогда
		Результат.ОбработкаЗаказа = УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Обработка заказов в СЦ или ПВЗ, руб."); 
		Если Результат.ОбработкаЗаказа = Неопределено или Результат.ОбработкаЗаказа = 0 Тогда
			Результат.ОбработкаЗаказа = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказов в СЦ или ПВЗ, ₽");
		КонецЕсли;
	КонецЕсли; 	
	Результат.Вставить("ХранениеНевыкупов", УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Хранение невыкупов и возвратов, руб.")); 
	Если Результат.ХранениеНевыкупов = Неопределено или Результат.ХранениеНевыкупов = 0 Тогда
		Результат.ХранениеНевыкупов = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Хранение невыкупов и возвратов, ₽");
	КонецЕсли;
	Результат.Вставить("ОрганизацияУтилизации",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация утилизации, руб."));
	Если Результат.ОрганизацияУтилизации = Неопределено или Результат.ОрганизацияУтилизации = 0 Тогда
		Результат.ОрганизацияУтилизации = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация утилизации, ₽");
	КонецЕсли;
	Результат.Вставить("ДоступКСервисам",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Расширенный доступ к сервисам Маркетплейса, руб.")); 
	Если Результат.ДоступКСервисам = Неопределено или Результат.ДоступКСервисам = 0 Тогда
		Результат.ДоступКСервисам = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Расширенный доступ к сервисам Маркетплейса, ₽");
	КонецЕсли;
	// письмерова 12.02.2024 BSLR-3230
	Результат.Вставить("Баннеры",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Баннеры, руб."));
	Если Результат.Баннеры = Неопределено или Результат.Баннеры = 0 Тогда
		Результат.Баннеры = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Баннеры, ₽");
	КонецЕсли;
	Результат.Вставить("ОбработкаЗаказов",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказов на складе, руб."));  
	Если Результат.ОбработкаЗаказов = Неопределено или Результат.ОбработкаЗаказов = 0 Тогда
		Результат.ОбработкаЗаказов = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Обработка заказов на складе, ₽");
	КонецЕсли;
	Результат.Вставить("ОрганизацияЗабораЗаказов",УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация забора заказов, руб.")); 
	Если Результат.ОрганизацияЗабораЗаказов = Неопределено или Результат.ОрганизацияЗабораЗаказов = 0 Тогда
		Результат.ОрганизацияЗабораЗаказов = УстановитьСоответствиеКолонокФайлаЗагрузкиЯМ(MXL, СтрокаЗаголовков, "Организация забора заказов, ₽");
	КонецЕсли;
	
	Возврат Результат;
КонецФункции      

&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеУслугПродвижения(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Возврат;
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайлУслигиЯМ(Истина);

КонецПроцедуры 

&НаСерверебезконтекста
Функция ПолучитьДанныеОбУслугеПоЛитералу(ЛитералУслуги)
	
	Результат = Новый Структура("Номенклатура, УслугаМП",
								Справочники.Номенклатура.ПустаяСсылка(),
								Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка());
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК Номенклатура,
	                      |	топ_СопоставлениеНоменклатурыУслуг.УслугаМП КАК УслугаМП
	                      |ИЗ
	                      |	РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
	                      |ГДЕ
	                      |	топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги = &ЛитералУслуги");
	Запрос.УстановитьПараметр("ЛитералУслуги",ЛитералУслуги);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Результат.Номенклатура = Выборка.Номенклатура;
		Результат.УслугаМП = Выборка.УслугаМП;
	КонецЕсли;
	Возврат Результат; 
	
КонецФункции


// письмерова 31.01.2025 BSLR-4195
&НаСервере
Процедура ВыделитьСкидкиВОтдельнуюУслугуЯМ()

	СуммаУслуги = 0;
	Для Каждого Стр из Объект.Товары Цикл  	
		СуммаУслуги = СуммаУслуги + Стр.СуммаДоплатыOzon;		
	КонецЦикла;
	
	Если СуммаУслуги <> 0 Тогда
		
		УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Возмещение скидок");
		
		Если УслугаМП  = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда
			// создаем услугу и номенклатуру
			Перечень = Новый соответствие;
			Перечень.Вставить("Возмещение скидок","Возмещение суммы скидок при продаже товаров");
			ПереченьНДС = Новый соответствие;
			ПереченьНДС.Вставить("Возмещение скидок","Без НДС");    
			
			топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
			Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
			Неопределено);
		КонецЕсли;
		
		УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Возмещение скидок");
		
		НоваяУслуга = Объект.Услуги.Добавить();
		
		НоваяУслуга.УслугаМП = УслугаМП;
		НоваяУслуга.Наименование = УслугаМП.Наименование;
		НоваяУслуга.НаименованиеМП = УслугаМП.ЛитералУслуги;
		НоваяУслуга.Сумма        = СуммаУслуги;
		НоваяУслуга.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
		
		Если ЗначениеЗаполнено(НоваяУслуга.Номенклатура) тогда
			НоваяУслуга.СтавкаНДС = "Без НДС";
		Иначе
			Перечень = Новый соответствие;
			Перечень.Вставить("Возмещение скидок","Возмещение суммы скидок при продаже товаров");
			ПереченьНДС = Новый соответствие;
			ПереченьНДС.Вставить("Возмещение скидок","Без НДС");    
			
			топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
			Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет,
			Неопределено);
			
			УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", "Возмещение скидок");
			НоваяУслуга.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет, УслугаМП);
			НоваяУслуга.СтавкаНДС = "Без НДС";
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры	
	

#конецОбласти

#Область ЗагрузкаИзЭксельСбер


&НаСервере
Функция ЗагрузитьНаСервереСберМегаМаркет(Знач Адрес, Расширение, ЭтоВыкупы)	
	
	Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг", 
	Ложь, "", Новый Массив, Новый Массив);
	ПерваяСтрока = 0;
	ЕстьДанныеОтправления = Ложь;
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку";
		Возврат Результат;
	КонецПопытки;  
	УдалитьИзВременногоХранилища(Адрес);
	
	
	Архив = Новый ЧтениеZipФайла(ИмяФайла); 
	ВремКаталог = КаталогВременныхФайлов();
	
	// очистка Temp 
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.csv");  
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки; 
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.pdf");  
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
	//BSLR-3639, Чупраков А.Н., 01.07.24, расширение файлов в архиве указано в верхнем регистре, некоторые сервера чувствительны к регистру
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.CSV");  
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки; 
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.PDF");  
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки;

	Архив.ИзвлечьВсе(ВремКаталог,РежимВосстановленияПутейФайловZIP.Восстанавливать);
 
    // Распакуем файлы по одиночке.    
    Для Каждого Элемент Из Архив.Элементы Цикл
        Архив.Извлечь(Элемент, ВремКаталог,
            РежимВосстановленияПутейФайловZIP.Восстанавливать,"");
	КонецЦикла; 
		
	Таблица = Новый ТаблицаЗначений;  
	ТаблицаИТОГОВАЯ = ПолучитьТаблицуЗагрузкиТоваровСбер(); 
	
	Разделитель = ";";
	
	// нужны только файлы csv 
	//BSLR-3639, Чупраков А.Н., 01.07.24, проверка, не нашел *.csv, ищем срасщирением в верхнем регистре *.CSV
	НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.csv"); 
	Если НайденныеФайлы.Количество() = 0 Тогда 
		НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.CSV");
	КонецЕсли; 
	
	// письмерова 04.07.2025 BSLR-4440 - поменяли формат файлов, вместо csv теперь xls 
	Формат_XLS = Ложь;
	Если НайденныеФайлы.Количество() = 0 Тогда // файлы в новом формате 
		
		ЗагрузитьНаСервереСберМегаМаркет_XLS(ВремКаталог, ТаблицаИТОГОВАЯ, ЭтоВыкупы);
		Формат_XLS = Истина;

	Иначе // старый формат CSV
	
	МассивКодов = Новый Массив;
	// ++ Бойков BSLR-3406
	Оператору = 0;
	АкцииМерчанта = 0;
	ОператоруЗаАкции = 0;
	// -- Бойков BSLR-3406  
	
#Область Загрузка_CSV	
	
	Для Каждого Файл_объект из НайденныеФайлы Цикл
				
		Найден = Ложь; 
		
		Если СтрНайти(Файл_объект.Имя, "Приложение1")> 0 Тогда
			//Таблица = Таблица1;
			Найден = Истина;
		КонецЕсли;
		Если СтрНайти(Файл_объект.Имя, "Приложение4а")> 0 Тогда
			//Таблица = Таблица4а;
			Найден = Истина;
		КонецЕсли; 
		Если СтрНайти(Файл_объект.Имя, "Приложение4б")> 0 Тогда
			//Таблица = Таблица4б;
			Найден = Истина;
		КонецЕсли; 
		Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльнос")> 0 Тогда
			//Таблица = Таблица4б;
			Найден = Истина;
		КонецЕсли;  
		
		Если Не Найден Тогда // обрабатываем не все файлы из архива
			Продолжить;
		КонецЕсли;
		
		ЗагружаемыйФайл = Новый ТекстовыйДокумент;
		ЗагружаемыйФайл.Прочитать(Файл_объект.ПолноеИмя);
		
		//шапка по умолчанию первая строчка  		
		Шапка = ЗагружаемыйФайл.ПолучитьСтроку(1);
		НомерСтр=2;
		Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльнос")> 0 Тогда
			Шапка = ЗагружаемыйФайл.ПолучитьСтроку(10);
			НомерСтр=11;
		КонецЕсли; 
		//раскладываем строку в массив
		МассивКол = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель); // процедура из типовой конфигурации, разбивает строку в массив по разделителям
        Таблица.Колонки.Очистить();
		//генерируем столбцы
		н = 1;
		КоличествоКолонок = 0;
		Для Каждого ИмяСтолбца Из МассивКол Цикл 
			ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(ИмяБезПробелов),Символы.Таб,""),Символы.НПП,""),Символы.Таб, "");
			ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(ИмяСтолбца," ",""), ".",""),",","");  
			ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, "№", "номер_");
			ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ИмяБезПробелов, "(", ""),")", ""),"""", ""),"/","");  
			ИмяБезПробелов = СтрЗаменить(СтрЗаменить(СтрЗаменить(СокрЛП(ИмяБезПробелов),Символы.Таб,""),Символы.НПП,""),Символы.Таб, "");	
			Если ИмяБезПробелов = "" Тогда
				Продолжить;
			КонецЕсли;
			Если Таблица.Колонки.Найти(ИмяБезПробелов) <> Неопределено Тогда // в файлах колонки с одинаковыми названиями
				ИмяБезПробелов = ИмяБезПробелов + Строка(н);
				н = н + 1;
			КонецЕсли;
			Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяСтолбца); 
			КоличествоКолонок = КоличествоКолонок + 1;
		КонецЦикла; 
		
		// обнуляем индексы колонок, т.к. файлы имеют различную структуру
		НомерКолонки_НомерОтправления = Неопределено;
		НомерКолонки_НомерОперации = Неопределено;
		НомерКолонки_Артикул = Неопределено;
		НомерКолонки_Количество = Неопределено;
		НомерКолонки_СтоимостьТовара = Неопределено;
		НомерКолонки_СуммаКВыплате = Неопределено;
		НомерКолонки_Комиссия = Неопределено;
		НомерКолонки_ТипОперации = Неопределено;
		НомерКолонки_СуммаКВыплатеИтог = Неопределено;
		НомерКолонки_Бонусы = Неопределено;
		НомерКолонки_СберСпасибо = Неопределено;
		
		// идентификация значимых номеров колонок  	
		Индекс = -1; 
		ОплеченоНайден = ложь;
		Для Каждого Кол из Таблица.Колонки Цикл 
			Индекс = Индекс + 1;
			Если СтрНайти(Врег(Кол.Заголовок), Врег("Номер Отправления Маркетплейс")) Тогда //BSLR-3729, Чупраков А.Н., 29.07.24
				НомерКолонки_НомерОтправления = Индекс;
			КонецЕсли;  		
			Если СтрНайти(Кол.Заголовок, "Номер Позиции Отправления") > 0 Тогда
				НомерКолонки_НомерОперации = Индекс;
			КонецЕсли; 		
			Если СтрНайти(Кол.Заголовок, "Артикул") > 0 Или
					СтрНайти(Кол.Заголовок, "Код товара Продавца") > 0 Тогда
				НомерКолонки_Артикул = Индекс;
			КонецЕсли; 		
			Если СтрНайти(Кол.Заголовок, "Количество") > 0 Тогда
				НомерКолонки_Количество = Индекс;
			КонецЕсли; 		
			Если СтрНайти(Кол.Заголовок, "Стоимость товара") > 0 Тогда
				НомерКолонки_СтоимостьТовара = Индекс;   
			КонецЕсли; 		
			Если СтрНайти(Кол.Заголовок, "Стоимость оплаченных и доставленных товаров") > 0 Тогда
				НомерКолонки_СуммаКВыплате = Индекс;
			КонецЕсли; 			
			Если СтрНайти(Кол.Заголовок, "услуг") > 0 Тогда
				НомерКолонки_Комиссия = Индекс;
			КонецЕсли;			
			Если СтрНайти(Кол.Заголовок, "Статус") > 0 Тогда
				НомерКолонки_ТипОперации = Индекс;
			КонецЕсли; 	
			Если СтрНайти(Кол.Заголовок, "Оплачено") > 0 Тогда
				Если НЕ ОплеченоНайден Тогда
					НомерКолонки_СуммаКВыплатеИтог = Индекс; 
					ОплеченоНайден = истина; 
				КонецЕсли;
			КонецЕсли; 
			Если СтрНайти(Кол.Заголовок, "Статус") > 0 Тогда
				НомерКолонки_ТипОперации = Индекс;
			КонецЕсли; 
			//программа лояльности
			Если СтрНайти(Кол.Заголовок, "Сумма использованных Участником бонусных рублей") > 0 Тогда
				НомерКолонки_Бонусы = Индекс;
			КонецЕсли;
			Если СтрНайти(Кол.Заголовок, "СберСпасибо") > 0 Тогда
				НомерКолонки_СберСпасибо = Индекс;
			КонецЕсли; 
			// расходы по программе лояльности
			Если СтрНайти(Кол.Заголовок, "Сумма вознаграждения оператора за приобретенны") > 0 Тогда
				НомерКолонки_Оператору = Индекс;
			КонецЕсли;  
			Если СтрНайти(Кол.Заголовок, "Сумма по дополнительным акциям мерчанта") > 0 Тогда
				НомерКолонки_АкцииМерчанта = Индекс;
			КонецЕсли;  
			Если СтрНайти(Кол.Заголовок, "Сумма вознаграждения оператора  по дополнительным акциям мерчанта") > 0 Тогда
				НомерКолонки_ОператоруЗаАкции = Индекс;
			КонецЕсли;   
		КонецЦикла;	
		
		Если ЭтоВыкупы ТОгда
			ТаблицаЗаказовМП = ПолучитьТаблицуЗаказовСНомерамиОтправлений();
		КонецЕсли;
		Оператору = 0;
		АкцииМерчанта = 0;
		ОператоруЗаАкции = 0;
		ВозвратыЛояльности = Ложь;
		Для НомерСтроки=НомерСтр по ЗагружаемыйФайл.КоличествоСтрок() Цикл

			// получить стрoку с указанным номером и преобразуем её в массив
			Строка = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
			МассивКол = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);

			Если СокрЛП(МассивКол[0]) = "" Тогда // пустая строка между шапкой и таблицей
				Продолжить;
			КонецЕсли;

			Если СтрНайти(Файл_объект.Имя, "Приложение1")> 0 Тогда // основная таблица продаж
				нСтр = ТаблицаИТОГОВАЯ.Добавить();
				Если НомерКолонки_НомерОтправления <> Неопределено Тогда 
				нСтр.НомерОтправления = МассивКол[НомерКолонки_НомерОтправления]; КонецЕсли;
				Если НомерКолонки_НомерОперации <> Неопределено Тогда 
				нСтр.НомерОперации = МассивКол[НомерКолонки_НомерОперации];  КонецЕсли;
				Если НомерКолонки_Артикул <> Неопределено Тогда 
				нСтр.Артикул = МассивКол[НомерКолонки_Артикул];  КонецЕсли;
				Если НомерКолонки_Количество <> Неопределено Тогда 
				нСтр.Количество = МассивКол[НомерКолонки_Количество];  КонецЕсли;			 
				Если НомерКолонки_СуммаКВыплате <> Неопределено Тогда 
				нСтр.СуммаКВыплате = МассивКол[НомерКолонки_СуммаКВыплате];  
				нСтр.Сумма = МассивКол[НомерКолонки_СуммаКВыплате]; КонецЕсли;
				Если НомерКолонки_Комиссия <> Неопределено Тогда 
				нСтр.Комиссия = МассивКол[НомерКолонки_Комиссия]; КонецЕсли;
				Если НомерКолонки_ТипОперации <> Неопределено Тогда 
				нСтр.ТипОперации = МассивКол[НомерКолонки_ТипОперации];  КонецЕсли;  
				
				нСтр.Цена = нСтр.Сумма/?(нСтр.Количество=0,1,нСтр.Количество);
				
			Иначе // нужно найти нужную строку и добавить сумму комиссии 
				Если НЕ ЭтоВыкупы ТОгда
					НайтиСтроку = ТаблицаИТОГОВАЯ.НайтиСтроки(Новый Структура("НомерОтправления",МассивКол[НомерКолонки_НомерОтправления]));
					Если НайтиСтроку.Количество() Тогда
						нСтр = НайтиСтроку[0]; 
						Если СтрНайти(Файл_объект.Имя, "Приложение4а")> 0 или СтрНайти(Файл_объект.Имя, "Приложение4б")> 0 Тогда
							нСтр.ЛогистикаСортировка = нСтр.ЛогистикаСортировка + МассивКол[НомерКолонки_Комиссия];  
						КонецЕсли;
					КонецЕсли; 
				Иначе // догрузим данные по программе лояльности 
					// в файле лояльности может быть инфо по позвратам прошлого периода
					Если СтрНайти(Строка,"Возврат прошлых периодов (справочно)")>0 Тогда 
						ВозвратыЛояльности = истина;
						ПРодолжить;// возвраты прошлых периодов нам не нужны??
					КонецЕсли; 
					Если ВозвратыЛояльности ТОгда
						Если СтрНайти(Строка,"№ пп")>0 Тогда 
							//шапка возвратов
							ПРодолжить;
						КонецЕсли;
					КонецЕсли;
					
					Если НЕ ВозвратыЛояльности ТОгда
						НайтиСтроку = Объект.Товары.НайтиСтроки(Новый Структура("ЗаказПокупателяМП,Артикул",МассивКол[НомерКолонки_НомерОтправления],МассивКол[НомерКолонки_Артикул]));
						Если НайтиСтроку.Количество() Тогда
							нСтр = НайтиСтроку[0]; 
							Если НомерКолонки_Бонусы <> Неопределено Тогда 
							нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_Бонусы] = "",0,МассивКол[НомерКолонки_Бонусы]);  КонецЕсли;  
							Если НомерКолонки_СберСпасибо <> Неопределено Тогда 
							нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_СберСпасибо] = "",0,МассивКол[НомерКолонки_СберСпасибо]);  КонецЕсли;  
							// расходы
							Если НомерКолонки_Оператору <> Неопределено Тогда 
							Оператору = Оператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]);  
							нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]); КонецЕсли; 
							Если НомерКолонки_АкцииМерчанта <> Неопределено Тогда 
							АкцииМерчанта = АкцииМерчанта + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]);  
							нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]); КонецЕсли; 
							Если НомерКолонки_ОператоруЗаАкции <> Неопределено Тогда 
							ОператоруЗаАкции = ОператоруЗаАкции + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]);  
							нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]); КонецЕсли; 					 
						Иначе // в таблице заказ МП, а не номер отправления, найдем заказ мп с номером отправления
							НайтиСтрокуЗаказМП = ТаблицаЗаказовМП.найтиСтроки(Новый Структура("НомерОтправления,Артикул",МассивКол[НомерКолонки_НомерОтправления],МассивКол[НомерКолонки_Артикул]));
							Если НайтиСтрокуЗаказМП.Количество() Тогда
								ЗаказМП = НайтиСтрокуЗаказМП[0].ЗаказМП;
								НайтиСтроку = Объект.Товары.НайтиСтроки(Новый Структура("ЗаказПокупателяМП",ЗаказМП));	
								Если НайтиСтроку.Количество() Тогда
									нСтр = НайтиСтроку[0]; 
									Если НомерКолонки_Бонусы <> Неопределено Тогда 
									нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_Бонусы] = "",0,МассивКол[НомерКолонки_Бонусы]);  КонецЕсли;  
									Если НомерКолонки_СберСпасибо <> Неопределено Тогда 
									нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_СберСпасибо] = "",0,МассивКол[НомерКолонки_СберСпасибо]);  КонецЕсли; 
									// расходы
									Если НомерКолонки_Оператору <> Неопределено Тогда 
									Оператору = Оператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]);  
									нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]); КонецЕсли; 
									Если НомерКолонки_АкцииМерчанта <> Неопределено Тогда 
									АкцииМерчанта = АкцииМерчанта + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]);  
									нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]); КонецЕсли; 
									Если НомерКолонки_ОператоруЗаАкции <> Неопределено Тогда 
									ОператоруЗаАкции = ОператоруЗаАкции + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]);  
									нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]); КонецЕсли; 					 
								КонецЕсли;  
							КонецЕсли;
						КонецЕсли;	
					Иначе // данные о возвратах
						нСтр = Объект.Товары.Добавить();
						Если НомерКолонки_НомерОтправления <> Неопределено Тогда 
						нСтр.ЗаказПокупателяМП = МассивКол[НомерКолонки_НомерОтправления]; КонецЕсли;
						Если НомерКолонки_Артикул <> Неопределено Тогда 
						нСтр.Артикул = МассивКол[НомерКолонки_Артикул];  КонецЕсли;
						Если НомерКолонки_Количество <> Неопределено Тогда 
						нСтр.Количество = МассивКол[НомерКолонки_Количество];  КонецЕсли;			 
						Если НомерКолонки_СуммаКВыплате <> Неопределено Тогда 
						нСтр.СуммаКВыплате = МассивКол[НомерКолонки_СуммаКВыплате];  
						нСтр.Сумма = МассивКол[НомерКолонки_СуммаКВыплате]; КонецЕсли;
						Если НомерКолонки_Комиссия <> Неопределено Тогда 
						нСтр.Комиссия = МассивКол[НомерКолонки_Комиссия]; КонецЕсли;

						нСтр.ТипОперации = "Возврат";
						//
						Если НомерКолонки_Бонусы <> Неопределено Тогда 
						нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_Бонусы] = "",0,МассивКол[НомерКолонки_Бонусы]);  КонецЕсли;  
						Если НомерКолонки_СберСпасибо <> Неопределено Тогда 
						нСтр.СуммаДоплатыOzon = нСтр.СуммаДоплатыOzon + ?(МассивКол[НомерКолонки_СберСпасибо] = "",0,МассивКол[НомерКолонки_СберСпасибо]);  КонецЕсли;  
						// расходы
						Если НомерКолонки_Оператору <> Неопределено Тогда 
						Оператору = Оператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]);  
						нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_Оператору] = "",0,МассивКол[НомерКолонки_Оператору]); КонецЕсли; 
						Если НомерКолонки_АкцииМерчанта <> Неопределено Тогда 
						АкцииМерчанта = АкцииМерчанта + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]);  
						нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_АкцииМерчанта] = "",0,МассивКол[НомерКолонки_АкцииМерчанта]); КонецЕсли; 
						Если НомерКолонки_ОператоруЗаАкции <> Неопределено Тогда 
						ОператоруЗаАкции = ОператоруЗаАкции + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]);  
						нСтр.ВознаграждениеОператору = нСтр.ВознаграждениеОператору + ?(МассивКол[НомерКолонки_ОператоруЗаАкции] = "",0,МассивКол[НомерКолонки_ОператоруЗаАкции]); КонецЕсли; 					 
						
						МассивКодов.Добавить(нСтр.Артикул);
					КонецЕсли; // возвраты лояльности	
					
				КонецЕсли;  // лояльность
			КонецЕсли;  // не первичная таблица, не приложение 1
		КонецЦикла;  
		
		Сообщить("обработан файл " + Файл_объект.Имя);
		
	КонецЦикла; 
	
#КонецОбласти
	
	// очистка Temp
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.csv");  
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки; 
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.pdf");  
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки;  
	Попытка  // BSLR-4440
	    УдалитьФайлы(ВремКаталог,"*.xls");      
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки; 
	
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.CSV"); 
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки; 
	Попытка
	    УдалитьФайлы(ВремКаталог,"*.PDF"); 
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки;
	Попытка  // BSLR-4440
	    УдалитьФайлы(ВремКаталог,"*.XLS");
	Исключение
	    Сообщить(ОписаниеОшибки());
	КонецПопытки; 
	
	КонецЕсли; // BSLR-4440
	 	
	Если Не ЭтоВыкупы ТОгда // первичная загрузка данных о продажах			
		Если ТаблицаИТОГОВАЯ.Количество() Тогда	    			
			ТаблицаУслуг = ОбработатьТаблицуУслугСбер(ТаблицаИТОГОВАЯ,Формат_XLS); 
			ТаблицаТоваров = ОбработатьТаблицуТоваровСбер(ТаблицаИТОГОВАЯ); 
			
			Результат.СписокТоваров = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаТоваров);
			Результат.СписокУслуг   = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаУслуг);
			ДанныеЗагрузки = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеИзВыгрузки(Результат, Маркетплейс, Объект.ЛичныйКабинет, Истина, Объект.ДатаОкончания); 
			
			Если ДанныеЗагрузки.Ошибка Тогда
				Результат.Ошибка = Истина;
				Результат.Сообщение = Результат.Сообщение;
			    Возврат Результат;
			КонецЕсли;

			// получить признак набора для номенклатуры
			Если Константы.ИспользоватьНаборы.Получить() Тогда 	
				ДанныеЗагрузки.Товары = топ_ОбщийВызовСервера.ДополнитьДаннымиНаборов(ДанныеЗагрузки.Товары); 	
			КонецЕсли;  
			
			Результат.Вставить("Товары", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Товары));
			Результат.Вставить("Услуги", топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ДанныеЗагрузки.Услуги)); 
		КонецЕсли; 			
	Иначе // загрузка данных о программе лояльности
		Если не Формат_XLS ТОгда // BSLR-4440
			Для Каждого Стр Из Объект.Товары Цикл
				Стр.СуммаКВыплате = Стр.СуммаКВыплате + Стр.СуммаДоплатыOzon;
				// письмерова 20.01.2025 BSLR-4190
				СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(Стр.СтавкаНДС)); 
				Стр.СуммаНДС = Стр.СуммаКВыплате * СтавкаНДСЗнач / (100 + СтавкаНДСЗнач);
			КонецЦикла;  	
			// добавить услуги в таб часть
			ДополнитьТаблицуУслугСбер(Оператору,АкцииМерчанта,ОператоруЗаАкции); 
			// дополнить данными о товарах и номенклатуре для возвратов, если они есть
			ДополнитьДаннымиСбер(МассивКодов);
		Иначе // пересчет суммы и ндс // BSLR-4440
			Для Каждого Стр из Объект.Товары Цикл
				// Письмерова 15.01.2026 BSLR-5168 ++
				Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда
					Стр.СуммаКВыплате = Стр.Сумма - Стр.СуммаДоплатыOzon;
				Иначе
					Стр.СуммаКВыплате = Стр.Сумма;
				КонецЕсли; // BSLR-5168 --
				СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(Стр.СтавкаНДС)); 
				Стр.СуммаНДС = Стр.СуммаКВыплате * СтавкаНДСЗнач / (100 + СтавкаНДСЗнач);
			КонецЦикла; 
			// добавление услуи по баллам СберСпасибо 
			// Письмерова 15.01.2026 BSLR-5168 
			Если Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу ТОгда
				loyalty_program_reward = Объект.Товары.Итог("СуммаДоплатыOzon"); // выставляем Сберу расходную накл
				СтрокаУслуг = Объект.Услуги.Добавить();
				СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","loyalty_program_reward");
				СтрокаУслуг.Наименование = СтрокаУслуг.УслугаМП.Наименование;
				СтрокаУслуг.НаименованиеМП = СтрокаУслуг.УслугаМП.ЛитералУслуги;
				СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
				СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаУслуг.Номенклатура,ОБъект.ЛичныйКабинет,Период.ДатаОкончания);
				СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтавкаНДС);
				СтрокаУслуг.СтавкаНДС = Строка(СтавкаНДС);
				СтрокаУслуг.Сумма = - loyalty_program_reward; 
				СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач); 
			КонецЕсли; // BSLR-5168
		КонецЕсли;
	КонецЕсли;  
	
	// ++ Бойков BSLR-3406
	Если Не Результат.Свойство("Товары") Тогда
		Результат.Вставить("Товары", Новый Массив);
	КонецЕсли;
	Если Не Результат.Свойство("Услуги") Тогда
		Результат.Вставить("Услуги", Новый Массив);
	КонецЕсли;
	// -- Бойков BSLR-3406
	
	Возврат Результат;
	
КонецФункции 


// письмерова 04.07.2025 BSLR-4440
&НаСервере  
Процедура ЗагрузитьНаСервереСберМегаМаркет_XLS(ВремКаталог, ТаблицаИТОГОВАЯ, ЭтоЛояльность) 
	
	НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.xls"); 
	Если НайденныеФайлы.Количество() = 0 Тогда 
		НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.XLS");
	КонецЕсли; 
	
	Для Каждого Файл_объект из НайденныеФайлы Цикл
				
		Найден = Ложь; 
		
		Если СтрНайти(Файл_объект.Имя, "Отчет по отправлениям без расшифровки")> 0 Тогда
			Продолжить; // файл не нужен
		КонецЕсли; 
		
		Если СтрНайти(Файл_объект.Имя, "Отчет по отправлениям")> 0 Тогда
			Найден = Истина;
		КонецЕсли;
		
		
		Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльности без расшифровки")> 0 Тогда
			Продолжить; // файл не нужен
		КонецЕсли;
		
		Если СтрНайти(Файл_объект.Имя, "Отчет по программе лояльнос")> 0 Тогда
			Найден = Истина;
		КонецЕсли;  
		
		Если Не Найден Тогда // обрабатываем не все файлы из архива
			Продолжить;
		КонецЕсли; 
		
		MXL = Новый ТабличныйДокумент;
		MXL.Прочитать(Файл_объект.ПолноеИмя);
		
		Файл = Новый Файл(Файл_объект.ПолноеИмя);
		Если Файл.Существует() Тогда
			УдалитьФайлы(Файл_объект.ПолноеИмя);        
		КонецЕсли; 
		
		КоличествоСтрок   = MXL.ВысотаТаблицы;
		КоличествоКолонок = MXL.ШиринаСтраницы;
		
		Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
			Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
				ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
				Если СтрНайти(ТекстЯчейки,"Номер заказа") > 0 Тогда
					Если ЭтоЛояльность ТОгда // загрузка продаж 
						ПерваяСтрока = ТекущаяСтрока + 2; 
					Иначе
						ПерваяСтрока = ТекущаяСтрока + 1;
					КонецЕсли; 
					
					Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
						Прервать;
					КонецЕсли; 
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;

		Если ЭтоЛояльность ТОгда // загрузка продаж 
			НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиСбер(MXL, ПерваяСтрока - 2);
		Иначе
			НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиСбер(MXL, ПерваяСтрока - 1);
		КонецЕсли; 
		
		КомиссияЛояльность = 0; //BSLR-4440
		
		Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок Цикл 
			Если Не ЭтоЛояльность ТОгда 

				Артикул = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
				НомерОТправления = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);
				
				Если (Артикул = "" и НомерОТправления = "") Или (Артикул = 0 и НомерОТправления = 0) Или (Артикул = "0" и НомерОТправления = "0") Тогда 
					Продолжить;
				КонецЕсли;
				
				ТипОперации = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.ТипОперации).ТекущаяОбласть.Текст);
				ЭтоВозврат = ?(Врег(ТипОперации) = "ВОЗВРАТ", Истина, Ложь);
				НоваяСтрока = ТаблицаИТОГОВАЯ.Добавить();
				НоваяСтрока.ТипОперации   = ТипОперации;
				ЗаполнитьСтрокуТаблицыТоваровСбер(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат);
				
			Иначе
				ДозаполнитьСтрокуТоваровЛояльностьюСбер(MXL, ТекущаяСтрока, НомераКолонокФайла);
				// BSLR-4440
				XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
				Если СтрНайти(Врег(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C11").ТекущаяОбласть.Текст),"ИТОГО") > 0 Тогда
					Продолжить;
				КонецЕсли;				
				Попытка ИтоговаяСуммаУдержаний = Число(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИтоговаяСуммаУдержаний).ТекущаяОбласть.Текст);
				Исключение ИтоговаяСуммаУдержаний = 0; КонецПопытки;
				КомиссияЛояльность = КомиссияЛояльность + ИтоговаяСуммаУдержаний;				
			КонецЕсли;
			
		КонецЦикла;
		// BSLR-4440
		Если ЭтоЛояльность и КомиссияЛояльность <> 0 ТОгда 
			
			НДСДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьНДСДопУслугМП();
			
			СтрокаУслуг = Объект.Услуги.Добавить();
			СтрокаУслуг.Наименование = "За техническое, консалтинговое, информационное и маркетинговое сопровождение участия Продавца в Программе лояльности";
			СтрокаУслуг.НаименованиеМП = "transaction_support";
			СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги","transaction_support");
			СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
			СтрокаУслуг.СтавкаНДС = НДСДопУслуг["transaction_support"];
			СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(СтрокаУслуг.СтавкаНДС ));
			СтрокаУслуг.Сумма = КомиссияЛояльность; 
			СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);	
		КонецЕсли;
		
	
	КонецЦикла; // найденые файлы		
	
	
КонецПроцедуры
	
&НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("НомерОтправления", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Номер заказа"));
    Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Код товара"));
    Результат.Вставить("Бренд", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Бренд"));
	Результат.Вставить("ДатаЗаказа", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Дата заказа"));
	Результат.Вставить("Категория", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Категория"));
	Результат.Вставить("Цена", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Стоимость товара"));
	Результат.Вставить("ТипОперации", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Статус отправления"));
	
	// продажи
	Результат.Вставить("Количество", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Количество"));  
	Результат.Вставить("Комиссия", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Сумма с НДС"));
	
	Результат.Вставить("ЗаПродажу", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За продажу",,1));
	Результат.Вставить("ЗаОбработкуПлатежей", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За обработку платежей",,1));
	Результат.Вставить("ЗаПереносДатыОтгрузки", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За перенос даты отгрузки",,1));
	Результат.Вставить("ЗаОтказ", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За отказ",,1));
	Результат.Вставить("ЗаЛогистику", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За логистику",,1));
	Результат.Вставить("ЗаДоставкуДоПокупателя", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За доставку до покупателя",,1));
	Результат.Вставить("ЗаОбработкуВозврата", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За обработку возврата",,1));
	Результат.Вставить("ЗаЛогистикуВозврата", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За логистику возврата",,1)); 
	// лояльность
	Результат.Вставить("СберСпасибо", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Бонусы СберСпасибо",,2));
	Результат.Вставить("Прочее", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Прочее",,2));
	Результат.Вставить("СуммаНачисленныхБонусныхРублей", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Сумма начисленных бонусных рублей покупателю"));
	Результат.Вставить("ЗаСчетИсполнителя", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "За счет исполнителя (базовые начисления)",,1));
	Результат.Вставить("КомиссияЗаказчикаПовышенныйКэшбэк", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Комиссия заказчика за повышенный кэшбэк",,1));
	Результат.Вставить("КомиссияЗаказчикаБазовыеНачисления", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Комиссия заказчика по базовым начислениям"));
	Результат.Вставить("ИтоговаяСуммаУдержаний", УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, "Итоговая сумма удержаний"));

	Возврат Результат;
	
КонецФункции

&НаСерверебезконтекста
Функция УстановитьСоответствиеКолонокФайлаЗагрузкиСбер(MXL, СтрокаЗаголовков, СтрокаПоиска, НачальноеСмещение = 0, СмещениеПоСтроке = 0)
	НачальныйИндекс = 1 + НачальноеСмещение;
	Для сч = НачальныйИндекс по 50 Цикл
		Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(СтрокаЗаголовков + СмещениеПоСтроке) + "C" + сч).ТекущаяОбласть.Текст), СтрокаПоиска) <> 0 Тогда
			Возврат сч;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	Возврат 0;
КонецФункции


&НаСервере  
Процедура ЗаполнитьСтрокуТаблицыТоваровСбер(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.НомерОтправления = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);
	СтрокаПриемник.Артикул       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	СтрокаПриемник.Цена          = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Цена).ТекущаяОбласть.Текст);
	СтрокаПриемник.Количество    = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);
	СтрокаПриемник.Комиссия	     = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Комиссия).ТекущаяОбласть.Текст);
	Если ЭтоВозврат ТОгда
		СтрокаПриемник.Количество  = -1 *СтрокаПриемник.Количество;
		// СтрокаПриемник.Комиссия    = -1 *СтрокаПриемник.Комиссия;  - есть комиссия за возврат
	КонецЕсли;
	СтрокаПриемник.Сумма         = СтрокаПриемник.Количество * СтрокаПриемник.Цена;   
	СтрокаПриемник.Идентификатор = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст); 
	
	// услуги 
	// письмерова 14.07.2025 BSLR-4440
	СтрокаПриемник.ЗаПродажу	    	 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаПродажу).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаОбработкуПлатежей	 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаОбработкуПлатежей).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаПереносДатыОтгрузки = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаПереносДатыОтгрузки).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаОтказ	    		 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаОтказ).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаЛогистику	   		 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаЛогистику).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаДоставкуДоПокупателя = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаДоставкуДоПокупателя).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаОбработкуВозврата   = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаОбработкуВозврата).ТекущаяОбласть.Текст);
	СтрокаПриемник.ЗаЛогистикуВозврата   = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЗаЛогистикуВозврата).ТекущаяОбласть.Текст);

КонецПроцедуры


&НаСервере  
Процедура ДозаполнитьСтрокуТоваровЛояльностьюСбер(ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла)  
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	НомерОтправления =  Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерОтправления).ТекущаяОбласть.Текст);  
	Артикул      	 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	
	Попытка
	СберСпасибо =  Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СберСпасибо).ТекущаяОбласть.Текст);
	Исключение СберСпасибо = 0; КонецПопытки;
	
	Попытка  // письмерова 24.07.2025 BSLR-4440 
	ПрочееСпасибо =  Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Прочее).ТекущаяОбласть.Текст);
	Исключение ПрочееСпасибо = 0; КонецПопытки;

	Если НомерОтправления <> "" ТОгда
		НайтиСтроки = Объект.Товары.НайтиСтроки(новый Структура("Идентификатор",НомерОтправления));
		
		Для Каждого Стр из НайтиСтроки Цикл 
			Если Стр.Артикул = Артикул Тогда
				Стр.СуммаДоплатыOzon = Стр.СуммаДоплатыOzon + СберСпасибо + ПрочееСпасибо;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
	КонецЕсли;	
		
КонецПроцедуры




&НаСерверебезконтекста
Функция ПолучитьТаблицуЗагрузкиТоваровСбер() Экспорт
  	КвалификаторыСтроки = Новый КвалификаторыСтроки(100);
	КвалификаторыЧисла  = Новый КвалификаторыЧисла(18,3);
	ТипСтроки = Новый ОписаниеТипов("Строка" ,,,, КвалификаторыСтроки);
	ТипЧисла  = Новый ОписаниеТипов("Число"  ,,,  КвалификаторыЧисла );
    
	СписокТоваров = Новый ТаблицаЗначений;
	СписокТоваров.Колонки.Добавить("НомерСтроки", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Артикул", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Количество", ТипЧисла);
	СписокТоваров.Колонки.Добавить("Комиссия", ТипЧисла); 
	СписокТоваров.Колонки.Добавить("НомерОперации", ТипСтроки);
	СписокТоваров.Колонки.Добавить("НомерОтправления", ТипСтроки);  
	СписокТоваров.Колонки.Добавить("Сумма", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ТипОперации", ТипСтроки);
	СписокТоваров.Колонки.Добавить("Цена", ТипЧисла);
	СписокТоваров.Колонки.Добавить("СуммаКВыплате", ТипЧисла);
	СписокТоваров.Колонки.Добавить("СуммаКВыплатеИтог", ТипЧисла); 
	СписокТоваров.Колонки.Добавить("СуммаДоплатыOzon", ТипЧисла);
	СписокТоваров.Колонки.Добавить("СберСпасибо", ТипЧисла);
	СписокТоваров.Колонки.Добавить("СуммаВозмещения", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЛогистикаСортировка", ТипЧисла);   // таблица 4а,4б
	СписокТоваров.Колонки.Добавить("Идентификатор", ТипСтроки);  // BSLR-4440
	// услуги
	// письмерова 14.07.2025 BSLR-4440
	СписокТоваров.Колонки.Добавить("ЗаПродажу", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаОбработкуПлатежей", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаПереносДатыОтгрузки", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаОтказ", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаЛогистику", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаДоставкуДоПокупателя", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаОбработкуВозврата", ТипЧисла);
	СписокТоваров.Колонки.Добавить("ЗаЛогистикуВозврата", ТипЧисла);  
	// лояяльность
	СписокТоваров.Колонки.Добавить("ИтоговаяСуммаУдержаний", ТипЧисла);
	
	Возврат СписокТоваров;
	
КонецФункции

&НаСерверебезконтекста
Функция ОбработатьТаблицуУслугСбер(ТаблицаТоваров,Формат_XLS)  
	
	ТаблицаУслуг = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина); 
	
	ПереченьДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьПереченьДопУслугМП();
	НДСДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьНДСДопУслугМП();
	
	СтруктураУслуг = Новый Соответствие;

	komission = ТаблицаТоваров.Итог("Комиссия");
	logistics_sorting = ТаблицаТоваров.Итог("ЛогистикаСортировка"); 
    // письмерова 14.07.2025 BSLR-4440
	For_Sale = ТаблицаТоваров.Итог("ЗаПРодажу");
	For_Payment_Processing  = ТаблицаТоваров.Итог("ЗаОбработкуПлатежей");
    For_Postponement_of_Shipment_Date = ТаблицаТоваров.Итог("ЗаПереносДатыОтгрузки");
    For_Refusal = ТаблицаТоваров.Итог("ЗаОтказ"); 
	For_Logistics = ТаблицаТоваров.Итог("ЗаЛогистику"); 
	For_Delivery_to_Buyer = ТаблицаТоваров.Итог("ЗаДоставкуДоПокупателя");  
	For_Return_Processing = ТаблицаТоваров.Итог("ЗаОбработкуВозврата");  
	For_Return_Logistics = ТаблицаТоваров.Итог("ЗаЛогистикуВозврата");  
	
	// письмерова 14.07.2025 BSLR-4440
	Если НЕ Формат_XLS ТОгда // старая схема
		СтруктураУслуг.Вставить("komission",komission);
		СтруктураУслуг.Вставить("logistics_sorting", logistics_sorting); 
	Иначе
		Если For_Sale <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Sale", For_Sale); 
		КонецЕсли;
		Если For_Payment_Processing <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Payment_Processing", For_Payment_Processing); 
		КонецЕсли;
		Если For_Postponement_of_Shipment_Date <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Postponement_of_Shipment_Date", For_Postponement_of_Shipment_Date); 
		КонецЕсли;
		Если For_Refusal <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Refusal", For_Refusal); 
		КонецЕсли;
		Если For_Logistics <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Logistics", For_Logistics); 
		КонецЕсли;
		Если For_Delivery_to_Buyer <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Delivery_to_Buyer", For_Delivery_to_Buyer); 
		КонецЕсли;
		Если For_Return_Processing <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Return_Processing", For_Return_Processing); 
		КонецЕсли;
		Если For_Return_Logistics <> 0 ТОгда
			СтруктураУслуг.Вставить("For_Return_Logistics", For_Return_Logistics); 
		КонецЕсли; 
	КонецЕсли;
	
	Для Каждого Услуга Из ПереченьДопУслуг Цикл
		Если СтруктураУслуг.Получить(Услуга.Ключ) <> Неопределено Тогда	
			СтрокаУслуг = ТаблицаУслуг.Добавить();
			СтрокаУслуг.Наименование = Услуга.Значение;
			СтрокаУслуг.НаименованиеМП = Услуга.Ключ;
			СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги",Услуга.Ключ);
			СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
			СтрокаУслуг.Цена = СтруктураУслуг[Услуга.Ключ];
			СтрокаУслуг.СтавкаНДС = топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НДСДопУслуг[Услуга.Ключ]);
			СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтрокаУслуг.СтавкаНДС);
			СтрокаУслуг.Количество = 1;
			СтрокаУслуг.Сумма = СтруктураУслуг[Услуга.Ключ]; 
			СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);	
		КонецЕсли;	
	КонецЦикла;
	
	Возврат ТаблицаУслуг;
КонецФункции


&НаСерверебезконтекста
Функция ОбработатьТаблицуТоваровСбер(ТаблицаТоваров)
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	тз.Артикул КАК Артикул,
		|	тз.НомерОперации КАК НомерОперации,
		// BSLR-4440
		|	тз.Идентификатор КАК Идентификатор,
		|	тз.НомерОтправления КАК НомерОтправления,
		|	тз.ТипОперации КАК ТипОперации,
		|	тз.НомерСтроки КАК НомерСтроки,
		|	тз.Цена КАК Цена,
		|	тз.Сумма КАК Сумма,
		|	тз.Количество КАК Количество,
		|	тз.Комиссия КАК Комиссия,
		|	тз.ЛогистикаСортировка КАК ЛогистикаСортировка,
		|	тз.СуммаКВыплате КАК СуммаКВыплате,
		|	тз.СуммаКВыплатеИтог КАК СуммаКВыплатеИтог
		|ПОМЕСТИТЬ ВТ_ТЗ
		|ИЗ
		|	&тз КАК тз
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВЫБОР
		|		КОГДА ВТ_ТЗ.Артикул = """"
		|			ТОГДА ""товар не определен""
		|		ИНАЧЕ ВТ_ТЗ.Артикул
		|	КОНЕЦ КАК Артикул,
		|	ВТ_ТЗ.НомерОперации КАК НомерОперации,
		// BSLR-4440
		|	ВТ_ТЗ.Идентификатор КАК Идентификатор,
		|	ВТ_ТЗ.НомерОтправления КАК НомерОтправления,
		|	ВЫБОР
		|		КОГДА ВТ_ТЗ.ТипОперации = ""Выкуплен покупателем""
		|			ТОГДА ""Продажа""
		|		ИНАЧЕ ВТ_ТЗ.ТипОперации
		|	КОНЕЦ КАК ТипОперации,
		|	ВТ_ТЗ.НомерСтроки КАК НомерСтроки,
		|	ВТ_ТЗ.Цена КАК Цена,
		|	ВТ_ТЗ.Сумма КАК Сумма,
		|	ВТ_ТЗ.Количество КАК Количество,
		|	ВТ_ТЗ.Комиссия КАК Комиссия,
		|	ВТ_ТЗ.ЛогистикаСортировка КАК ЛогистикаСортировка,
		|	ВТ_ТЗ.СуммаКВыплате КАК СуммаКВыплате,
		|	ВТ_ТЗ.СуммаКВыплатеИтог КАК СуммаКВыплатеИтог
		|ИЗ
		|	ВТ_ТЗ КАК ВТ_ТЗ";

	Запрос.УстановитьПараметр("тз", ТаблицаТоваров);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ТаблицаТоваровБезУслуг = РезультатЗапроса.Выгрузить();
                                                             // BSLR-4440
	ТаблицаТоваровБезУслуг.Свернуть("Артикул,НомерОперации, Идентификатор, НомерОтправления, ТипОперации, Цена", "Количество, Комиссия, Сумма, СуммаКВыплате, СуммаКВыплатеИтог, ЛогистикаСортировка");
	Возврат ТаблицаТоваровБезУслуг;
	
КонецФункции

&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеЛояльности(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Возврат;
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайл(Истина);

КонецПроцедуры

&НаСервере
Функция ПолучитьТаблицуЗаказовСНомерамиОтправлений()
	
	Результат = Новый ТаблицаЗначений; 
	Результат.Колонки.Добавить("ЗаказМП");
	Результат.Колонки.Добавить("НомерОтправления");
	Результат.Колонки.Добавить("Артикул");
	
	Для Каждого Стр из Объект.Товары Цикл
		Если ТипЗнч(Стр.ЗаказПокупателяМП) = Тип("ДокументСсылка.топ_ЗаказТорговойПлощадки") Тогда
			Если Стр.ЗаказПокупателяМП <> Документы.топ_ЗаказТорговойПлощадки.ПустаяСсылка() Тогда 
				Для Каждого Ст из Стр.ЗаказПокупателяМП.Товары Цикл
					нСтр = Результат.Добавить();
					нСтр.ЗаказМП = Стр.ЗаказПокупателяМП;
					нСтр.НомерОтправления = Стр.ЗаказПокупателяМП.НомерЗаказа; 
					//Попытка нСтр.Артикул = Ст.Товар.КодПоставщика; Исключение КонецПопытки;
					нСтр.Артикул = Стр.Артикул; // письмерова 14.03.2024 BSLR-3076
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

&НаСервере  
Процедура ДополнитьТаблицуУслугСбер(Оператору,АкцииМерчанта,ОператоруЗаАкции)
	
	ПереченьДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьПереченьДопУслугМП();
	НДСДопУслуг = топ_РаботаСМаркетплейсами_СберМегаМаркет.ПолучитьНДСДопУслугМП();
	
	СтруктураУслуг = Новый Соответствие;
	
	СтруктураУслуг.Вставить("document_exchange", 0);
	СтруктураУслуг.Вставить("remuneration_operator", АкцииМерчанта + ОператоруЗаАкции); // Оператору);  - BSLR-4262
	СтруктураУслуг.Вставить("transaction_support", Оператору); // АкцииМерчанта + ОператоруЗаАкции);  - BSLR-4262
	// письмерова 11.03.2024 BSLR-3076
	loyalty_program_reward = Объект.Товары.Итог("СуммаДоплатыOzon"); // выставляем Сберу расходную накл
    СтруктураУслуг.Вставить("loyalty_program_reward", loyalty_program_reward); 
	
	Для Каждого Услуга Из ПереченьДопУслуг Цикл 
		Если Услуга.Ключ = "komission" или Услуга.Ключ = "logistics_sorting" Тогда
			ПРодолжить;// добавлены ранее в таб часть Услуги
		КонецЕсли;
		Если СтруктураУслуг.Получить(Услуга.Ключ) <> Неопределено Тогда	
			СтрокаУслуг = Объект.Услуги.Добавить();
			СтрокаУслуг.Наименование = Услуга.Значение;
			СтрокаУслуг.НаименованиеМП = Услуга.Ключ;
			СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги",Услуга.Ключ);   
			// письмерова 11.03.2024 BSLR-3076
			Если СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда // нет элемента справочника УслугиМП, но он есть в перечне
				Перечень = Новый соответствие;
				Перечень.Вставить(Услуга.Ключ,Услуга.Значение);
				ПереченьНДС = Новый соответствие;
				ПереченьНДС.Вставить(Услуга.Ключ,"Без НДС");    
				топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,     
				Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет,
				Неопределено); 			
				СтрокаУслуг.УслугаМП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоРеквизиту("ЛитералУслуги", Услуга.Ключ);
			Конецесли;			
			СтрокаУслуг.Номенклатура = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьНоменклатуруДопУслугиМП(Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет, СтрокаУслуг.УслугаМП);
			СтрокаУслуг.СтавкаНДС = топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НДСДопУслуг[Услуга.Ключ]);
			СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(СтрокаУслуг.СтавкаНДС));
			СтрокаУслуг.Сумма = СтруктураУслуг[Услуга.Ключ]; 
			СтрокаУслуг.СуммаНДС = СтрокаУслуг.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач); 		
			// письмерова 11.03.2024 BSLR-3076  - это доплата, выставляем Сберу расх накл
			Если Услуга.Ключ = "loyalty_program_reward" Тогда
                СтрокаУслуг.Сумма = - СтрокаУслуг.Сумма;
				СтрокаУслуг.СуммаНДС = - СтрокаУслуг.СуммаНДС;
			КонецЕсли;  		
		КонецЕсли;	
	КонецЦикла; 
	
КонецПроцедуры

&НаСервере
Процедура ДополнитьДаннымиСбер(МассивКодов)
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	топ_ТоварыТорговыхПлощадок.Ссылка КАК Товар,
	                      |	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
	                      |	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
	                      |	топ_СоответствиеТоваров.Упаковка КАК ЕдиницаИзмерения,
	                      |	топ_ТоварыТорговыхПлощадок.Ссылка.offer_id КАК offer_id
	                      |ИЗ
	                      |	Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
	                      |		ПО топ_ТоварыТорговыхПлощадок.Ссылка = топ_СоответствиеТоваров.Товар
	                      |ГДЕ
	                      |	топ_ТоварыТорговыхПлощадок.offer_id В(&МассивКодов)
	                      |	И топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет"); 
	Запрос.УстановитьПараметр("МассивКодов",МассивКодов);
	Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
	
	ТаблицаДанных = Запрос.Выполнить().Выгрузить();
	
	Для Каждого Стр из Объект.Товары Цикл
		Если Не ЗначениеЗаполнено(Стр.Товар) Тогда 			
			НайтиСтроки = ТаблицаДанных.НайтиСтроки(новый Структура("offer_id", Стр.Артикул));
			Если НайтиСтроки.Количество() Тогда 
				ЗаполнитьЗначенияСвойств(Стр,найтиСтроки[0],"Товар,Номенклатура,Характеристика,ЕдиницаИзмерения");
			КонецЕсли; 
		КонецЕсли;	
	КонецЦикла; 
    // письмерова 13.01.2025 BSLR-4190
	ВремТабл = Объект.Товары.Выгрузить();
	ВремТабл.Свернуть("Артикул,ШтрихКод, Номенклатура, Характеристика, ЕдиницаИзмерения, Товар, ТипОперации, СтавкаНДС, Цена, ЗаказПокупателяМП, ЗаказПокупателя, Идентификатор, ЭтоНабор", 
						"Количество, Комиссия, Сумма, СуммаНДС, СуммаНДСВознаграждения, СуммаДоплатыOzon, СуммаКВыплате, ВознаграждениеОператору, КомиссияБазовая, ВыплатыПоМеханикамЛояльностиПартнеров");
	Объект.Товары.Загрузить(ВремТабл);	
	
	// комиссию в строках с нулевым количеством нужно перенести на этот же артикул 
	// или на любой, если больше нет срок с таким товаром 
	
	ТаблНулевая = Объект.Товары.Выгрузить(новый Структура("Количество",0));
	
	Для Каждого Стр из ТаблНулевая Цикл
		
		Если Стр.Комиссия = 0 Тогда
			Продолжить;
		КонецЕсли;
		
		НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Артикул", Стр.Артикул));
		КомиссияПеренесена = Ложь;
		
		Если НайденыСтроки.Количество() ТОгда 
			Для Каждого Ст из НайденыСтроки Цикл
				Если Ст.Количество = 0 Тогда
					Продолжить;
				КонецЕсли;
				Ст.Комиссия = Ст.Комиссия + Стр.Комиссия;
				КомиссияПеренесена = Истина;
				Прервать;
			КонецЦикла; 
		КонецЕсли;
			
		Если Не КомиссияПеренесена Тогда // нет больше строк с таким товаром - переносим на первую не нулевую строку таб части 
			Для Каждого СтТ из Объект.Товары Цикл
				Если СтТ.Количество = 0 Тогда
					Продолжить;
				КонецЕсли;
				СтТ.Комиссия = СтТ.Комиссия + Стр.Комиссия;
				КомиссияПеренесена = Истина;
				Прервать;
			КонецЦикла; 
		КонецЕсли;
		
	КонецЦикла; 
	
	МассивДляУдаления = Новый Массив;
	Для Каждого Стр из Объект.Товары Цикл
		Если Стр.Количество = 0 Тогда
			Стр.Комиссия = 0;
		 
			Если Стр.СуммаКВыплате <> 0 Тогда
				Продолжить;
			КонецЕсли;
			
			Если Стр.ВознаграждениеОператору <> 0 Тогда
				Продолжить;
			КонецЕсли;
			
			МассивДляУдаления.Добавить(Стр);
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Эл из МассивДляУдаления Цикл
		Объект.Товары.Удалить(Эл);
	КонецЦикла;
	
КонецПроцедуры
	
	
	
#КонецОбласти

&НаКлиенте
Процедура ОбновитьДанныеФормыНаКлиенте(ДанныеВыполнения, ДополнительныеПараметры = Неопределено, ЗагрузкаЧерезФайл = Ложь)
	утоваровЕстьХарактеристики = ИспользуютсяХарактеристики(Объект.ЛичныйКабинет);
	Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		Объект.Товары.Очистить();
	КонецЕсли;
	
	// вывод накопленных сообщений
	Если ДанныеВыполнения.Сообщение <> "" Тогда
		Сообщение = Новый СообщениеПользователю();
		Сообщение.Текст = ДанныеВыполнения.Сообщение;			
		Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
		Сообщение.Сообщить(); 
	Конецесли;
	
	Объект.Услуги.Очистить();
	НомерСтроки = 1;

	если ДанныеВыполнения.свойство("Дата")  тогда
		Объект.ДатаВходящегоДокумента = ДанныеВыполнения.дата; 	
	Иначе
		ДанныеВыполнения.Вставить("Дата", ТекущаяДата());
	КонецЕсли;
	если ДанныеВыполнения.свойство("Номер") тогда
		Объект.НомерВходящегоДокумента = ДанныеВыполнения.номер; 	
	КонецЕсли;
	
	//ЯМ
	Если ДанныеВыполнения.дата = Дата(1,1,1) ТОгда
		ДанныеВыполнения.дата = Объект.ДатаОкончания;
	КонецЕсли; 
	
	// письмерова 21.01.2025 BSLR-4260
	// только ут
	ДействующиеНастройки = Неопределено;
	СтавкаНДС = Неопределено;

	ДействующиеНастройки = ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
			"НастройкиУчетаНДСПриУСН", Объект.ЛичныйКабинет, Объект.ДатаОкончания, Ложь); 
	
	Если ДействующиеНастройки <> Неопределено Тогда
		СтавкаНДС = ДействующиеНастройки.СтавкаНДС;
	Иначе
		СтавкаНДС = ПолучитьСтавкуНДСПоУмолчанию(Объект.ЛичныйКабинет,Объект.ДатаОкончания);  // письмерова 16.04.2025
	КонецЕсли;
	
	// письмерова 07.04.2025 BSLR-4462
	Если БратьСтавкуНДСИзНоменклатуры(Объект.ЛичныйКабинет) ТОгда
		СтавкаНДС = Неопределено;
	КонецЕсли;
	
	Для Каждого Элемент Из ДанныеВыполнения.Товары Цикл
		
		Если ЗагрузкаЧерезФайл Тогда  
		
		    // письмерова 27.11.2024 BSLR-4102
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				Если Элемент.Количество = 0 и Элемент.Комиссия = 0 и Элемент.Сумма = 0 Тогда
					Продолжить; // пустые строки есть после обработки таб части
				КонецЕсли;
			КонецЕсли;
			
			НоваяСтрока = Объект.Товары.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
			НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);// письмерова 06.12.2023 BSLR-2422
			Если ТипЗнч(Элемент.ЗаказПокупателя) = тип("ДокументСсылка.топ_ЗаказТорговойПлощадки") тогда
				НоваяСтрока.ЗаказПокупателяМП = Элемент.ЗаказПокупателя;
			КонецЕсли;
			// письмерова 20.08.2024 BSLR-3677  
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда  
				НоваяСтрока.ВыплатыПоМеханикамЛояльностиПартнеров = Элемент.ВыплатыЛояльности;
			Конецесли;  			
			// письмерова
			Если не ЗначениеЗаполнено(Элемент.ЗаказПокупателяМП) Тогда  // письмерова
				Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
				    НоваяСтрока.ЗаказПокупателяМП = Элемент.ИД_Заказ; // письмерова 09.07.2025 BSLR-4733
				Конецесли;
			КонецЕсли;  			
			
			Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
				// письмерова 17.04.2023 BSLR-1755 - очистить ном и хар, если товар не заполнен, ЭтоНабор = Ложь
				НоваяСтрока.Номенклатура = "";
				НоваяСтрока.Характеристика = "";
				НоваяСтрока.ЕдиницаИзмерения = ""; 
				НоваяСтрока.ЭтоНабор = Ложь; 
				НоваяСтрока.СтавкаНДС = "";
				НоваяСтрока.СуммаНДС = ""; 
				Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				НоваяСтрока.СуммаНДСВознаграждения = "";  КонецЕсли;
			// письмерова 05.03.2024 BSLR-2771
			Иначе // разборки с кривым ШК и размером ВБ, в запросе не отрабатывает
				
				// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
				Если Элемент.Свойство("Размер") ТОгда
					Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда		
						Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
						ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
						НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
						НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика; 					
						НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
						НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;

						Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
							НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
							СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НоваяСтрока.СтавкаНДС)); // письмерова 30.05.2024
							НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);				
						КонецЕсли; 
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
				
			КонецЕсли;
			
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда 
				//НоваяСтрока.СуммаКВыплате = Элемент.СуммаКВыплатеИтог;	
				НоваяСтрока.Комиссия = Элемент.Комиссия;// + Элемент.ЛогистикаСортировка; - логистику будем распределять при проведении, комиссия пойдет один в один по данным загрузки	
			КонецЕсли;
		Иначе
			
			// письмерова 08.12.2023 BSLR-2249
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				Если Элемент.Количество = 0 и Элемент.Комиссия = 0 и Элемент.СуммаНДСВознаграждения = 0 Тогда
					Продолжить; // пустые строки есть после обработки таб части
				КонецЕсли;
			КонецЕсли;
			
			НоваяСтрока = Объект.Товары.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
			НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);

			Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
				НоваяСтрока.Номенклатура = "";
				НоваяСтрока.Характеристика = "";
				НоваяСтрока.ЕдиницаИзмерения = ""; 
				НоваяСтрока.ЭтоНабор = Ложь; 
				НоваяСтрока.СтавкаНДС = "";
				НоваяСтрока.СуммаНДС = ""; 
				Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				НоваяСтрока.СуммаНДСВознаграждения = "";  КонецЕсли;
			Иначе // разборки с кривым ШК и размером ВБ, в запросе не отрабатывает
				
				// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
				Если Элемент.Свойство("Размер") ТОгда
					Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда
						Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
						ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
						НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
						НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика; 
						НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
						НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
						
						// письмерова 16.06.2023 BSLR-2106
						Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
							НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
							СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(топ_ОбщийВызовСервера.ПолучитьСтавкуНДСПоИдентификатору(НоваяСтрока.СтавкаНДС)); // письмерова 30.05.2024
							НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);				
						КонецЕсли; 
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;	
			
			// письмерова 26.11.2024 BSLR-4102 - обнулить количество для Коррекции продаж
			Если НоваяСтрока.ОбоснованиеДляОплаты = "Коррекция продаж" Или НоваяСтрока.ОбоснованиеДляОплаты = "Коррекция возвратов" ТОгда
				НоваяСтрока.Количество = 0;
			КонецЕсли;
			// письмерова 02.09.2025 BSLR-4698
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				Если НоваяСтрока.ПродажаЮЛ ТОгда
					НоваяСтрока.Идентификатор = Элемент.srid;
				КонецЕсли;
			КонецЕсли;
								
		КонецЕсли;

		НомерСтроки = НомерСтроки + 1;
		
	КонецЦикла; 

	// письмерова 15.03.2023 BSLR-1553
	Если ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа(Объект.ЛичныйКабинет) Тогда
		СвернутьНаСервере("Товары"); 
	КонецЕсли;
	// BSLR-4243 
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") ТОгда
		ВыровнятьНДСВознаграждения(); 
	КонецЕсли;	  
	
	// вывод сообщений после группировки  BSLR-2675
	НомерСтроки = 1;
	Для Каждого НоваяСтрока из Объект.Товары Цикл   
		Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда	
			Сообщение = Новый СообщениеПользователю();
			Сообщение.Текст = СтрШаблон("В строке %1 (Товары) не удалось найти товар. Попробуйте выполнить поиск в справочнике ""Товары торговых площадок"" вручную по артикулу. Идентификатор - %2", НомерСтроки, НоваяСтрока.Идентификатор);				
			Сообщение.Поле = СтрШаблон("СписокOZON[%1].Товар", НомерСтроки - 1);
			Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
			Сообщение.Сообщить(); 
		КонецЕсли;
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда 				
			Если НЕ ЗначениеЗаполнено(НоваяСтрока.Номенклатура) Тогда
				Сообщение = Новый СообщениеПользователю();
				Сообщение.Текст = СтрШаблон("В строке %1 (Товары) не найдена сопоставленая номенклатура. Уцененные товары не сопоставляются автоматически. Проверьте, является ли %2 уцененным и вручную укажите номенклатуру, с которой он должен быть связан.", НомерСтроки, НоваяСтрока.Товар);				
				Сообщение.Поле = СтрШаблон("СписокOZON[%1].Товар", НомерСтроки - 1);
				Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
				Сообщение.Сообщить(); 			
			КонецЕсли;
		Конецесли; 
		НомерСтроки = НомерСтроки + 1;
	КонецЦикла;
	
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") И Объект.ВыгужатьДетализациюWB_Excel Тогда //LAShadrin 18/07/23 bslr-1338
		РезультатВыгрузки = ДанныеВыполнения.СырыеТовары;	 
		РезультатВыгрузки.Показать(); 
	КонецЕсли;	
	// письмерова 09.04.2024 BSLR-3440
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		Если ДанныеВыполнения.Свойство("СуммаУслугХранения") Тогда
			Если ДанныеВыполнения.СуммаУслугХранения <> 0 Тогда
				Объект.СуммаУслугХранения = ДанныеВыполнения.СуммаУслугХранения;
			КонецЕсли;
			Если ДанныеВыполнения.СуммаУслугПлатнойПриемки <> 0 Тогда 
				Объект.СумаУслугПлатнойПриемки = ДанныеВыполнения.СуммаУслугПлатнойПриемки;
			КонецЕсли;
		КонецЕсли;
		// письмерова 16.10.2025 BSLR-4460
		Если ДанныеВыполнения.Свойство("Компенсации") Тогда
			Если ДанныеВыполнения.Компенсации.Количество() Тогда
				ЗаполнитьТабЧастьКомпенсации(ДанныеВыполнения.Компенсации, Истина);	
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;   
	
	Для Каждого Элемент Из ДанныеВыполнения.Услуги Цикл 
		//письмерова 11.08.2023 BSLR-2371   - авнсовая оплата и частичная компенсация не добавляем в услуги
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда 
			Если Элемент.НаименованиеМП = "advance_payment" Или Элемент.НаименованиеМП = "partial_compensation" Или Элемент.НаименованиеМП = "delivery_EX_выкупы" 
				Или Элемент.НаименованиеМП = "compensation_for_damage" Тогда // убрать компенсацию, она в таб части письмерова 16.10.2025 BSLR-4460
				Продолжить;
			КонецЕсли;
		КонецЕсли; 
		НоваяСтрока = Объект.Услуги.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
		НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС); 
		
		// письмерова 20.08.2024 BSLR-3677
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда 
			Если Элемент.НаименованиеМП = "PaymentsBasedOnPartnerLoyaltyMechanics" Тогда 
				НоваяСтрока.Сумма = - Объект.Товары.Итог("ВыплатыПоМеханикамЛояльностиПартнеров"); 
				НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС); // BSLR-5126	
			КонецЕсли;
			// письмерова 10.04.2025 BSLR-4508
			Если Элемент.НаименованиеМП = "PointsForDiscounts" Тогда 
				НоваяСтрока.Сумма = - Объект.Товары.Итог("СуммаДоплатыOzon"); 
				НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС); // BSLR-5126
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	// письмерова 31.01.2025 BSLR-4195
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда 
		Если ЗагружатьСуммуСкидокВУслугу(Объект.ЛичныйКабинет) Тогда // BSLR-4508
			ВыделитьСкидкиВОтдельнуюУслугуЯМ();	
		КонецЕсли;
	КонецЕсли;
		
	УстановитьВидимостьДоступность(); 
	
КонецПроцедуры

// письмерова 11.04.2025 BSLR-4508
&НаСервереБезКонтекста 
Функция ЗагружатьСуммуСкидокВУслугу(ЛК)
	Возврат ЛК.ЗагружатьСуммуСкидокВУслугу;
КонецФункции

&НаСервере 
Функция НайтиНоменклатуруИХарактеристикуПоРазмеру(Товар, Размер)
	// BSLR-4099
	ДанныеНоменклатуры = Новый Структура("Номенклатура,Характеристика, Упаковка, Товар, РазмерWB",
							Справочники.Номенклатура.ПустаяСсылка(), 
							Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(),
							Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(),
							Товар, Размер);
	
	НужныйРазмер = Справочники.топ_РазмерыТоваровWB.НайтиПоРеквизиту("размер", СокрЛП(Размер),,Товар);
	Если НужныйРазмер <> Справочники.топ_РазмерыТоваровWB.ПустаяСсылка() ТОгда // BSLR-4182
		Данные = Новый Структура("Товар, Размер",Товар,НужныйРазмер); 
		ДанныеНоменклатуры = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);
	Иначе // ищем по другому реквизиту, путаница с идентификацией размера на строне вб, BSLR-4182		
		НужныйРазмер = Справочники.топ_РазмерыТоваровWB.НайтиПоРеквизиту("рос_размер", СокрЛП(Размер),,Товар);
		Если НужныйРазмер <> Справочники.топ_РазмерыТоваровWB.ПустаяСсылка() ТОгда // BSLR-4182
			Данные = Новый Структура("Товар, Размер",Товар,НужныйРазмер); 
			ДанныеНоменклатуры = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);
		КонецЕсли;	
	КонецЕсли; 	
	Возврат ДанныеНоменклатуры;
	
КонецФункции

&НаКлиенте
Процедура ОбновитьДанныеФормыНаКлиенте_Выкуп(ДанныеВыполнения, ДополнительныеПараметры = Неопределено, ЗагрузкаЧерезФайл = Ложь)
	УТоваровЕстьХарактеристики = ИспользуютсяХарактеристики(Объект.ЛичныйКабинет);
	Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		Объект.Выкуп.Очистить();
	КонецЕсли;
	
	Если ДанныеВыполнения.свойство("Дата")  тогда
		Объект.ДатаВходящегоДокументаВыкупа = ДанныеВыполнения.дата; 	
	КонецЕсли;
	если ДанныеВыполнения.свойство("Номер") тогда
		Объект.НомерВходящегоДокументаВыкупа = ДанныеВыполнения.номерВыкуп; 	
	КонецЕсли;
	
	// письмерова 21.01.2025 BSLR-4260
	// только ут
	ДействующиеНастройки = Неопределено;
	СтавкаНДС = Неопределено;

	ДействующиеНастройки = ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
			"НастройкиУчетаНДСПриУСН", Объект.ЛичныйКабинет, Объект.ДатаОкончания, Ложь); 
	
	Если ДействующиеНастройки <> Неопределено Тогда
		СтавкаНДС = ДействующиеНастройки.СтавкаНДС;
	Иначе
		СтавкаНДС = ПолучитьСтавкуНДСПоУмолчанию(Объект.ЛичныйКабинет,Объект.ДатаОкончания);  // письмерова 16.04.2025
	КонецЕсли;
	
	// письмерова 07.04.2025 BSLR-4462
	Если БратьСтавкуНДСИзНоменклатуры(Объект.ЛичныйКабинет) ТОгда
		СтавкаНДС = Неопределено;
	КонецЕсли;
	
	НомерСтроки = 1; 
	
	Для Каждого Элемент Из ДанныеВыполнения.ТоварыВыкуп Цикл
		
		Если ЗагрузкаЧерезФайл Тогда
			
			НоваяСтрока = Объект.Выкуп.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				 //НоваяСтрока.СуммаКВыплате = НоваяСтрока.Сумма;
			КонецЕсли;
			 
			Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
				// письмерова 17.04.2023 BSLR-1755 - очистить ном и хар, если товар не заполнен, ЭтоНабор = Ложь
				НоваяСтрока.Номенклатура = "";
				НоваяСтрока.Характеристика = "";
				НоваяСтрока.ЕдиницаИзмерения = ""; 
				НоваяСтрока.ЭтоНабор = Ложь; 
				НоваяСтрока.СтавкаНДС = "";
				НоваяСтрока.СуммаНДС = ""; 
				Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				НоваяСтрока.СуммаНДСВознаграждения = "";  КонецЕсли; 
			Иначе
				
				// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
				Если Элемент.Свойство("Размер") ТОгда
					Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда		
						Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
						ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
						НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
						НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика;
						НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
						НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
						
						// письмерова 16.06.2023 BSLR-2106
						Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
							НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
							СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.СтавкаНДС);
							НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);				
						КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			НоваяСтрока = Объект.Выкуп.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);  
			НоваяСтрока.СтавкаНДС = Строка(Элемент.СтавкаНДС);
			
			Если НоваяСтрока.ТипОперации = "Продажа" и НоваяСтрока.Сумма > 0 ТОгда 			
				// выкупы, письмерова BSLR-1680 21.04.2023
				НоваяСтрока.СуммаКВыплате = НоваяСтрока.СуммаКВыплате;//НоваяСтрока.Сумма - НоваяСтрока.Комиссия;
			КонецЕсли;

			Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда
				// письмерова 17.04.2023 BSLR-1755 - очистить ном и хар, если товар не заполнен, ЭтоНабор = Ложь
				НоваяСтрока.Номенклатура = "";
				НоваяСтрока.Характеристика = "";
				НоваяСтрока.ЕдиницаИзмерения = ""; 
				НоваяСтрока.ЭтоНабор = Ложь; 
				НоваяСтрока.СтавкаНДС = "";
				НоваяСтрока.СуммаНДС = ""; 
				Если Маркетплейс <> ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
				НоваяСтрока.СуммаНДСВознаграждения = "";  КонецЕсли;
			Иначе // разборки с кривым ШК и размером ВБ, в запросе не отрабатывает
				
				// вернула в код, т.к. опять приходят продажи без шк, но в указанием размера, BSLR-4182
				Если Элемент.Свойство("Размер") ТОгда
					Если Элемент.Размер <> "" И Не ЗначениеЗаполнено(Элемент.РазмерWB) Тогда		
						Если Не ЗначениеЗаполнено(НоваяСтрока.Номенклатура) ТОгда
						ДанныеНоменклатуры = НайтиНоменклатуруИХарактеристикуПоРазмеру(НоваяСтрока.Товар, Элемент.Размер);
						НоваяСтрока.Номенклатура = ДанныеНоменклатуры.Номенклатура;
						НоваяСтрока.Характеристика = ДанныеНоменклатуры.Характеристика;
						НоваяСтрока.РазмерWB = ДанныеНоменклатуры.РазмерWB;
						НоваяСтрока.ЕдиницаИзмерения = ДанныеНоменклатуры.Упаковка;
						
						// письмерова 16.06.2023 BSLR-2106
						Если ЗначениеЗаполнено(НоваяСтрока.Номенклатура) тогда
							НоваяСтрока.СтавкаНДС = ?(СтавкаНДС = Неопределено,топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(НоваяСтрока.Номенклатура,Объект.ЛичныйКабинет,Объект.ДатаОкончания),СтавкаНДС); // BSLR-4260
							СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(НоваяСтрока.СтавкаНДС);
							НоваяСтрока.СуммаНДС = НоваяСтрока.Сумма * СтавкаНДСЗнач / (100+СтавкаНДСЗнач);				
						КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
				
			КонецЕсли;

		КонецЕсли;
		
		НомерСтроки = НомерСтроки + 1;
		
	КонецЦикла; 
	
	// письмерова 09.01.2024 BSLR-4099
	Если ДанныеВыполнения.Свойство("ДоставкаВыкупы") Тогда 
		Если ДанныеВыполнения.ДоставкаВыкупы <> 0 Тогда
			ДополнитьУслугиДаннымиДоставкаВыкупы(ДанныеВыполнения.ДоставкаВыкупы); 
		КонецЕсли;
	КонецЕсли;		
	
	//LAShadrin 22/03/23 если мы по вб грузим мз файла, то надо догрузить услуги
   	Если ЗагрузкаЧерезФайл И Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		Для Каждого Элемент Из ДанныеВыполнения.СписокУслуг Цикл 
			Если Элемент.НаименованиеМП = "delivery_EX_выкупы" Тогда //письмерова 27.11.2023 BSLR-2869 
				Продолжить;
			КонецЕсли;
			НоваяСтрока = Объект.Услуги.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Элемент);
		КонецЦикла;
	КонецЕсли;
	
	// вывод сообщений после группировки BSLR-2675
	НомерСтроки = 1;
	Для Каждого НоваяСтрока из Объект.Выкуп Цикл   
		Если НЕ ЗначениеЗаполнено(НоваяСтрока.Товар) Тогда	
			Сообщение = Новый СообщениеПользователю();
			Сообщение.Текст = СтрШаблон("В строке %1 (Выкуп) не удалось найти товар. Попробуйте выполнить поиск в справочнике ""Товары торговых площадок"" вручную по артикулу. Идентификатор - %2", НомерСтроки, НоваяСтрока.Идентификатор);				
			Сообщение.Поле = СтрШаблон("Объект.Выкуп[%1].Товар", НомерСтроки - 1);
			Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
			Сообщение.Сообщить(); 
		КонецЕсли;
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда 				
			Если НЕ ЗначениеЗаполнено(НоваяСтрока.Номенклатура) Тогда
				Сообщение = Новый СообщениеПользователю();
				Сообщение.Текст = СтрШаблон("В строке %1 (Выкуп) не найдена сопоставленая номенклатура. Уцененные товары не сопоставляются автоматически. Проверьте, является ли %2 уцененным и вручную укажите номенклатуру, с которой он должен быть связан.", НомерСтроки, НоваяСтрока.Товар);				
				Сообщение.Поле = СтрШаблон("Объект.Выкуп[%1].Товар", НомерСтроки - 1);
				Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
				Сообщение.Сообщить(); 			
			КонецЕсли;
		Конецесли; 
		НомерСтроки = НомерСтроки + 1;
	КонецЦикла; 
			
	УстановитьВидимостьДоступность();

КонецПроцедуры


#Область СозданиеДокументов

// письмерова 20.11.2024 BSLR-4071
&НаКлиенте
Процедура СоздатьДокументы(Команда) 
	
	Если Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты Тогда
		Если ЕстьНезаполненныеКомпкектыНоменклатуры() Тогда
			СписокВыбора = Новый СписокЗначений;
			СписокВыбора.Добавить("Создать", "Создать",,);	
			СписокВыбора.Добавить("Отмена", "Отмена",,);	

			ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОСозданииКомпкектов", ЭтаФорма);
			ПоказатьВопрос(ОписаниеОповещения, "Включена настройка ""Заменять в Реализации по выкупам наборы на комплекты"". Связь товара-набора с комплектом не найдена." ,
								СписокВыбора,,,"Создать новую номенклатуру комплекта?"); 
		Иначе
			СоздатьДокументыПовторныйВызов();	
		Конецесли;
	Иначе
		СоздатьДокументыПовторныйВызов();
	КонецЕсли;
	
КонецПроцедуры

// письмерова 20.11.2024 BSLR-4071
&НаКлиенте
Процедура ПослеОтветаНаВопросОСозданииКомпкектов(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = "Отмена" Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Документы по отчету комиссионера не созданы. Для создания документов выполните одно из действий: отключите флаг ""Заменять в Реализации по выкупам наборы на комплекты"" или укажите для Товарав торговых площадок-наборов соответствующие комплекты. Подробнее - см. Справку");
		Возврат;
	КонецЕсли;
	
	Если Результат = "Создать" Тогда 
		
		РезультатСоздания = СоздатьКомплектыКНаборамНаСервере();
		Если Не РезультатСоздания.Ошибка ТОгда
			СоздатьДокументыПовторныйВызов();
		Иначе
			ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатСоздания.Сообщение);	
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры

// письмерова 20.11.2024 BSLR-4071
&НаКлиенте
Процедура СоздатьДокументыПовторныйВызов()

	// письмерова 22.08.2023 BSLR-2035 
	ЕстьНезаполненыеЮЛ = Ложь;
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		ЕстьНезаполненыеЮЛ = ПроверитьЗаполнениеЮЛ();
		Если ЕстьНезаполненыеЮЛ Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю("Обнаружены продажи юридическим лицам, но партнеры/контрагенты не созданы/не заполнены. Создайте нужных контрагентов или повторите загрузку данных юр. лиц с включенным флагом ""Создавать контрагентов (если есть продажи юр.лицам)""");
		КонецЕсли;	
	КонецЕсли;
	// письмерова 26.06.2023 BSLR-2022
	ЕстьОшибкаСоглашения = ПроверитьСпособРасчетаКомиссионногоВознаграждения(Объект.ЛичныйКабинет, Объект.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой); // BSLR-3906 
	
	ЕстьОшибкаПустогоПериода = НЕ ЗначениеЗаполнено(Объект.ДатаНачала); // BSLR-3977  
	Если ЕстьОшибкаПустогоПериода Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните поле ""Период""");
	КонецЕсли;	
	
	// письмерова 20.04.2023 BSLR-1717   
	// проверка использования/заполнения соглаш/договор с поставщиком 
	РезультатПроверкиСоглашения = ОпределитьЗаполнениеСоглашенияДоговораСПостащиком(Объект.ЛичныйКабинет); 
	
	// письмерова 29.05.2023 BSLR-1921 - проверка заполнения договора продажи для выкупов, проверяем только если есть выкупы	
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда 		
		Если Объект.Выкуп.Количество() Тогда
			РезультатПроверкиСоглашенияВыкуп = ОпределитьЗаполнениеСоглашенияДоговораДляВыкупа(Объект.ЛичныйКабинет); 			
			Если РезультатПроверкиСоглашенияВыкуп.Ошибка Тогда
				ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверкиСоглашенияВыкуп.Сообщение);  
			Конецесли; 
		Иначе
			РезультатПроверкиСоглашенияВыкуп = Новый Структура("Ошибка, Сообщение",ложь,"");	
		КонецЕсли;
	Иначе
		РезультатПроверкиСоглашенияВыкуп = Новый Структура("Ошибка, Сообщение",ложь,"");	
	КонецЕсли;  
	
	// письмерова 19.05.2023 BSLR-1863 - тип набор, но комплектации нет - ошибка, документы не создаем
	ЕстьОшибкаНаборов = ПроверитьналичиеКомплектацийПоНаборам();    
	
	Если РезультатПроверкиСоглашения.Ошибка Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверкиСоглашения.Сообщение);
	КонецЕсли;
	// письмерова 21.04.2025 BSLR-4537
	ЕстьОшибкаСклада = Ложь;
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Или Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда
		Если Не ЗначениеЗаполнено(топ_УТсервер.ПолучитьСкладДляВыкупов(Объект.ЛичныйКабинет)) ТОгда 
			ОбщегоНазначенияКлиент.СообщитьПользователю("Не удалось определить склад для выкупов, заполните реквизит ""Склад"" в личном кабинете, на вкладке ""Отчет комиссионера""");// BSLR-4616
			ЕстьОшибкаСклада = Истина;
		КонецЕсли;
	КонецЕсли;		
	
	
	// письмерова 29.05.2023 BSLR-1921                                                                                                                                         // BSLR-3977
	ЕстьОшибка = ЕстьОшибкаНаборов Или РезультатПроверкиСоглашения.Ошибка Или РезультатПроверкиСоглашенияВыкуп.Ошибка Или 
					ЕстьОшибкаСоглашения Или ЕстьНезаполненыеЮЛ Или ЕстьОшибкаПустогоПериода Или ЕстьОшибкаСклада; 
	
	ЕстьНесопоставленнаяНоменклатура = Ложь;
	ЕстьНезаполненныеЗаказы = Ложь; 
	
	СхемаЛК = ОпределениеСхемыЛК(Объект.ЛичныйКабинет); // BSLR-4190
	
	Для Каждого Товар Из Объект.Товары Цикл 
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
			Если СхемаЛК = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Агентская") ТОгда  // BSLR-4190
				Прервать; 
			КонецЕсли; // BSLR-4190
		КонецЕсли; 
		Если Не ЗначениеЗаполнено(Товар.Номенклатура) Тогда 
			// письмерова 21.12.2023 BSLR-2959  
			Если Товар.ОбоснованиеДляОплаты <> "Частичная компенсация брака" И 
					Товар.ОбоснованиеДляОплаты <> "Авансовая оплата за товар без движения" ТОгда
				ЕстьНесопоставленнаяНоменклатура = Истина;  		
				Прервать; 
			КонецЕсли;
		Иначе
			Продолжить;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Товар Из Объект.Выкуп Цикл
		Если Не ЗначениеЗаполнено(Товар.Номенклатура) Тогда
			ЕстьНесопоставленнаяНоменклатура = Истина;
			Прервать;
		Иначе
			Продолжить;
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Услуга Из Объект.Услуги Цикл
		Если Не ЗначениеЗаполнено(Услуга.Номенклатура) Тогда
			ЕстьНесопоставленнаяНоменклатура = Истина;
			Прервать;
		Иначе
			Продолжить;
		КонецЕсли;
	КонецЦикла;
	// письмерова 27.01.2025 BSLR-4242
	Для Каждого Товар Из Объект.Компенсации Цикл
		Если Не ЗначениеЗаполнено(Товар.Номенклатура) Тогда
			ЕстьНесопоставленнаяНоменклатура = Истина;
			Прервать;
		Иначе
			Продолжить;
		КонецЕсли;
	КонецЦикла;
	
	Если ЕстьНезаполненныеЗаказы Тогда 
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не все заказы покупателей заполнены автоматически. Чтобы создать документы заполните все заказы на вкладке “Товары”")
	Иначе
		Если НЕ ЕстьОшибка Тогда // письмерова 29.05.2023 BSLR-1921
			Если ЕстьНесопоставленнаяНоменклатура Тогда
				ОбщегоНазначенияКлиент.СообщитьПользователю("Не все товары и/или услуги сопоставлены. Чтобы создать документы сопоставьте все товары и услуги с номенклатурой или подберите номенклатуру на вкладке “Товары”");
			Иначе
				// письмерова 19.04.2023 BSLR-1765 - определить тип документов передачи на комиссию до создания документов  		
				РезультатПроверки = ОпределитьТипДокументовНаСервере(Объект.ЛичныйКабинет); 
				Если НЕ РезультатПроверки.Ошибка ТОгда
				
					РезультатСоздания = СоздатьДокументыНаСервере(РезультатПроверки.ТипДокумента);
					
					Если Не РезультатСоздания.Ошибка тогда 				
						ОбщегоНазначенияКлиент.СообщитьПользователю("Документы созданы");  				
					Иначе
						ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатСоздания.Сообщение);
					КонецЕсли; 
					
					УстановитьВидимостьДоступность(); 
				Иначе
					ОбщегоНазначенияКлиент.СообщитьПользователю(РезультатПроверки.Сообщение); 
				КонецЕсли;
			КонецЕсли; 
		Иначе
			ОбщегоНазначенияКлиент.СообщитьПользователю("Документы не могут быть созданы");
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

&НаСервере
Функция СоздатьДокументыНаСервере(ТипДокумента)  
	
	// письмерова 05.11.2024 BSLR-3967
	Если Объект.ЛичныйКабинет.СоздаватьИндивидуальныйДоговорДляВыкупов и  // BSLR-4243                    // BSLR-4599
			Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") И Объект.Выкуп.Количество() ТОгда
		// должен быть заполнен номер документа по выкупам
		Если НЕ ЗначениеЗаполнено(Объект.НомерВходящегоДокументаВыкупа) Тогда
			Возврат Новый Структура("Ошибка,Сообщение",Истина,"Для создания договора по выкупам должен быть заполнен номер входящего документа выкупа"); 
		КонецЕсли;
	КонецЕсли;	
             
	Товары              = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
	ТоварыВозвращенные  = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
	Выкуп               = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
	ВыкупВозвращенные   = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина);
	Услуги              = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина);
	УслугиОтрицательные = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(Истина); 
	Компенсации         = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина); // BSLR-3318 
	Декомпенсации       = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьТаблицу(,истина); // BSLR-4515
	// письмерова 21.11.2024 BSLR-4071
	Выкуп.Колонки.Добавить("Товар");
	ВыкупВозвращенные.Колонки.Добавить("Товар");

	// письмерова 05.10.2023 BSLR-2675
	ТоварыВрем = Объект.Товары.Выгрузить();
	//письмерова 11.08.2023 BSLR-2371   - авнсовая оплата и частичная компенсация вместо номеклатуры товара - услуга
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда 		
		ТоварыВрем = ОбработатьЧастичнуюКомпенсациюДляВБ(ТоварыВрем);		
	КонецЕсли;
	
	//Для Каждого ЭлементТовара Из Объект.Товары Цикл // письмерова 05.10.2023 BSLR-2675
	Для Каждого ЭлементТовара Из ТоварыВрем Цикл 
		
		ЭтоВозврат = (ЭлементТовара.ТипОперации = "Возврат" Или ЭлементТовара.ТипОперации = "возврат"); // письмерова 19.04.2024 BSLR-3481
		Если не ЭлементТовара.Количество = 0 тогда 
			
			Если ЭтоВозврат Тогда 
				НовыйТовар = ТоварыВозвращенные.Добавить();    
			Иначе
				НовыйТовар = Товары.Добавить(); 
			КонецЕсли;	
		
			ЗаполнитьЗначенияСвойств(НовыйТовар, ЭлементТовара);
			// письмерова 01.12.2023 BSLR-2862 - не увеличивать сууму выплаты на сумму доплаты
			Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда 
								
				Если Объект.ДатаНачала >= Дата('20231001000000') Тогда 
					// письмерова 10.04.2025 BSLR-4508 - перенесено в заполнение таб части, BSLR-4576
					//Если НЕ Объект.ЛичныйКабинет.ЗагружатьВыплатыПоМеханикамЛояльностиВУслугу Тогда
					//	НовыйТовар.Сумма = ЭлементТовара.Сумма + ЭлементТовара.ВыплатыПоМеханикамЛояльностиПартнеров;
					//	НовыйТовар.Цена = (ЭлементТовара.Сумма + ЭлементТовара.ВыплатыПоМеханикамЛояльностиПартнеров)/?(НовыйТовар.Количество = 0, 1, НовыйТовар.Количество); 				
					//КонецЕсли;					
				Иначе
					НовыйТовар.Цена = ЭлементТовара.Цена + ЭлементТовара.СуммаДоплатыOzon / ?(НовыйТовар.Количество <> 0, НовыйТовар.Количество, 1);
					НовыйТовар.Сумма = ЭлементТовара.Сумма + ЭлементТовара.СуммаДоплатыOzon; 
				КонецЕсли;
			Иначе // обычная схема 
				Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда //BSLR-4095 - только сбер
					// BSLR-5168
					НовыйТовар.Цена = ЭлементТовара.СуммаКВыплате / ?(НовыйТовар.Количество <> 0, НовыйТовар.Количество, 1);
					НовыйТовар.Сумма = ЭлементТовара.СуммаКВыплате; 
				КонецЕсли; 
			КонецЕсли;
		
			НовыйТовар.НДСКомиссии = ЭлементТовара.СуммаНДСВознаграждения;
			если ЗначениеЗаполнено(ЭлементТовара.ЗаказПокупателя) и ТипЗнч(ЭлементТовара.ЗаказПокупателя) = тип("ДокументСсылка.ЗаказКлиента") тогда
				НовыйТовар.ЗаказПокупателя=ЭлементТовара.ЗаказПокупателя;
			иначе
				НовыйТовар.ЗаказПокупателя=Документы.ЗаказКлиента.ПустаяСсылка();	
			КонецЕсли;	
			
			Если ЭтоВозврат Тогда
				НовыйТовар.Количество = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Количество);
				НовыйТовар.Сумма      = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Сумма); 
				Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда	// письмерова 28.05.2024
					НовыйТовар.Комиссия   = -(НовыйТовар.Комиссия);
					НовыйТовар.НДСКомиссии   = -(НовыйТовар.НДСКомиссии);  // BSLR-3626
				Иначе
					НовыйТовар.Комиссия   = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Комиссия);
				КонецЕсли;
			КонецЕсли; 
		    // письмерова 03.06.2024 BSLR-3527
			НовыйТовар.СтавкаНДССтрокой = ЭлементТовара.СтавкаНДС;
		КонецЕсли; 
		
	КонецЦикла;
	
	Для Каждого ЭлементТовара Из Объект.Выкуп Цикл 
		
		ЭтоВозврат = (ЭлементТовара.ТипОперации = "Возврат"); 
		если не ЭлементТовара.Количество = 0 тогда
			Если ЭтоВозврат Тогда 
				НовыйТовар = ВыкупВозвращенные.Добавить();    
			Иначе
				НовыйТовар = Выкуп.Добавить(); 
			КонецЕсли;	
		
		ЗаполнитьЗначенияСвойств(НовыйТовар, ЭлементТовара);
		//Если ЭтоВозврат Тогда  // письмерова 16.10.2023 BSLR-2718  - закомменчено
		//	НовыйТовар.Цена = (ЭлементТовара.Сумма - ЭлементТовара.Комиссия)/НовыйТовар.Количество;
		//	НовыйТовар.Сумма = (ЭлементТовара.Сумма - ЭлементТовара.Комиссия);
		//Иначе			
			НовыйТовар.Цена = ЭлементТовара.СуммаКВыплате/НовыйТовар.Количество;
			НовыйТовар.Сумма = ЭлементТовара.СуммаКВыплате;
		//КонецЕсли;
		
		НовыйТовар.НДСКомиссии = ЭлементТовара.СуммаНДСВознаграждения;
		если ЗначениеЗаполнено(ЭлементТовара.ЗаказПокупателя) и ТипЗнч(ЭлементТовара.ЗаказПокупателя) = тип("ДокументСсылка.ЗаказКлиента") тогда
			НовыйТовар.ЗаказПокупателя=ЭлементТовара.ЗаказПокупателя;
		иначе
			НовыйТовар.ЗаказПокупателя=Документы.ЗаказКлиента.ПустаяСсылка();	
		КонецЕсли;	
		
		Если ЭтоВозврат Тогда
			НовыйТовар.Количество = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Количество);
			НовыйТовар.Сумма      = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Сумма); 
			НовыйТовар.Комиссия   = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Комиссия);
			НовыйТовар.Цена 	=  топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.Цена);  // BSLR-4033
			НовыйТовар.СуммаНДС =  топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(НовыйТовар.СуммаНДС); // BSLR-4033
		КонецЕсли; 
		// письмерова 03.06.2024 BSLR-3527
		НовыйТовар.СтавкаНДССтрокой = ЭлементТовара.СтавкаНДС; 
		КонецЕсли;
	КонецЦикла;
	
	СхемаЛК = ОпределениеСхемыЛК(Объект.ЛичныйКабинет); // BSLR-4190 
	
	Для Каждого ЭлементУслуги Из Объект.Услуги Цикл 
		// письмерова 23.12.2024 BSLR-4190, для схемы комиссионых продаж комисия будет либо в товарах, либо отдельным документом
		// т.е. из таб части ее нужно убрать
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
			Если СхемаЛК = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Комиссионерская") ТОгда  
				Если ЭлементУслуги.НаименованиеМП = "komission" Тогда 
					Продолжить;
				КонецЕсли;
			КонецЕсли; 
		КонецЕсли; 
		
		если НЕ ЭлементУслуги.Сумма = 0 тогда
			НоваяУслуга = ?(ЭлементУслуги.Сумма < 0, УслугиОтрицательные.Добавить(),  Услуги.Добавить());
			ЗаполнитьЗначенияСвойств(НоваяУслуга, ЭлементУслуги);
			НоваяУслуга.Количество = 1;
			НоваяУслуга.Цена       = НоваяУслуга.Сумма; //тут передадим как есть  
			НоваяУслуга.СтавкаНДССтрокой = ЭлементУслуги.СтавкаНДС; // BSLR-4099 
		КонецЕсли;
	КонецЦикла;
	// письмерова 21.10.2024 BSLR-3956
	ЗаполнитьИндексыУслуг(Услуги,УслугиОтрицательные); 
	Услуги.Сортировать("ИндексДокумента");
	УслугиОтрицательные.Сортировать("ИндексДокумента"); 
	
	// письмерова 24.10.2024 BSLR-3318 
	Для Каждого Стр из Объект.Компенсации Цикл
		// письмерова 10.10.2025 BSLR-4515
		Если Стр.Количество < 0 Тогда
			нСтр = Декомпенсации.Добавить();
			ЗаполнитьЗначенияСвойств(нСтр,Стр);
			нСтр.Цена =  Стр.ИтогоКНачислению/нСтр.Количество;
			нСтр.Количество = - нСтр.Количество;			
			нСтр.Сумма = - Стр.ИтогоКНачислению;
		Иначе
			нСтр = Компенсации.Добавить();
			ЗаполнитьЗначенияСвойств(нСтр,Стр);
			нСтр.Сумма = Стр.ИтогоКНачислению;
		КонецЕсли;
	КонецЦикла;
			
	// для СберМегаМаркет не создаем ОК, только услуги  - только для агентской схемы
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда
		Если СхемаЛК = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Агентская") ТОгда  // BSLR-4190	
			ТоварыВозвращенные.Очистить();
			Товары.Очистить(); 
		КонецЕсли;
	КонецЕсли;
	
	ДанныеПериода = Новый Структура("ДатаНачала, ДатаОкончания, ДатаТиповыхДокументов", Объект.ДатаНачала, Объект.ДатаОкончания,
									?(ОБъект.ДатаТиповыхДокументов = Дата(1,1,1), Объект.ДатаОкончания, КонецДня(ОБъект.ДатаТиповыхДокументов))); // BSLR-3621
	Входящийдокумент = Новый Структура("НомерВходящегоДокумента, ДатаВходящегоДокумента, НомерВходящегоДокументаВыкупа, ДатаВходящегоДокументаВыкупа", 
										Объект.НомерВходящегоДокумента, Объект.ДатаВходящегоДокумента, Объект.НомерВходящегоДокументаВыкупа, Объект.ДатаВходящегоДокументаВыкупа);
	ДанныеДляОтчета = Новый Структура("Товары, ТоварыВозвращенные, Услуги, УслугиОтрицательные,  ЛичныйКабинет, Период, Входящийдокумент, Выкуп, ВыкупВозвращенные, КомиссияВБ, НДСКомиссияВБ,ТипДокумента,
	                                 // письмерова 17.10.2024 BSLR-3906                    // BSLR-4071 								  // BSLR-4351  						// BSLR-3318    // BSLR-4515
									 | ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой, ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты, СоздаватьСначалаПродажиПотомВозвраты, Компенсации, Декомпенсации", 
							топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(Товары), 
							топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ТоварыВозвращенные), 					
							топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(Услуги),
							топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(УслугиОтрицательные),
							Объект.ЛичныйКабинет,
							ДанныеПериода,
							Входящийдокумент,
							топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(Выкуп),
							топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ВыкупВозвращенные),
							Объект.Товары.Итог("Комиссия"),
							Объект.Товары.Итог("СуммаНДСВознаграждения"), // письмерова 16.06.2023 BSLR-2106
							ТипДокумента, 
	                        Объект.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой, // BSLR-3906 
							Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты, // BSLR-4071 
							Объект.СоздаватьСначалаПродажиПотомВозвраты, // письмерова 28.02.2025 BSLR-4351
							Компенсации, // BSLR-4515
							Декомпенсации); // BSLR-3318

	РезультатСоздания = топ_ОбщийВызовСервера.СоздатьДокументыИзЗагрузкиОтчетовКомиссионера(ДанныеДляОтчета);
	
	Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКомиссионера) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Отчет комиссионера о продаже";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКомиссионера);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКомиссионера);
	КонецЕсли;
	// письмерова 27.02.2025 BSLR-4351
	Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКомиссионераВОЗВРАТ) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Отчет комиссионера (только возвраты)";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКомиссионераВОЗВРАТ);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКомиссионераВОЗВРАТ);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКоммисионераОВозвратах) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Отчет комиссионера о возвратах";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКоммисионераОВозвратах);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКоммисионераОВозвратах);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.ПоступлениеДопУслуг) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Приобретение товаров и услуг на Доп. услуги"; // BSLR-2817
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПоступлениеДопУслуг);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ПоступлениеДопУслуг);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.РасходнаяНаОтрицательныеУслуги) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Реализация товаров и услуг на Доп. услуги"; // BSLR-2817
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.РасходнаяНаОтрицательныеУслуги);
		нСтр.ДокументУИД = Строка(РезультатСоздания.РасходнаяНаОтрицательныеУслуги);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.ПриходнаяВыкуп) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Приобретение товаров и услуг на выкуп"; // BSLR-2817
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПриходнаяВыкуп);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ПриходнаяВыкуп);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.РасходнаяВыкуп) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Реализация товаров и услуг на выкуп"; // BSLR-2817
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.РасходнаяВыкуп);
		нСтр.ДокументУИД = Строка(РезультатСоздания.РасходнаяВыкуп);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.ВозвратДляРасходаПоВыкупу) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Возврат из комиссии для продажи по выкупу";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ВозвратДляРасходаПоВыкупу);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ВозвратДляРасходаПоВыкупу);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.ВозвратПоВыкупуДляПередачиНаКомиссию) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Возврат по выкупу для передачи на комиссию";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ВозвратПоВыкупуДляПередачиНаКомиссию);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ВозвратПоВыкупуДляПередачиНаКомиссию);
	КонецЕсли;
	Если ЗначениеЗаполнено(РезультатСоздания.ПередачаНаКомиссиюВозвратовПоВыкупу) Тогда
		нСтр = Объект.Документы.Добавить(); 
		нСтр.ТипДокумента = "Передача на комиссию возвратов по выкупу";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПередачаНаКомиссиюВозвратовПоВыкупу);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ПередачаНаКомиссиюВозвратовПоВыкупу);
	КонецЕсли; 
	// если разделили услуги	
	Для Каждого Эл Из РезультатСоздания.МассивУслуг Цикл
		нСтр = Объект.Документы.Добавить(); 
		//нСтр.ТипДокумента = "Услуга ВБ"; // BSLR-3677 от 29.08.2024
		нСтр.ТипДокумента = Эл.Сининим; 
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Эл.Док);
		нСтр.ДокументУИД = Строка(Эл.Док);
	КонецЦикла; 
	// письмерова 24.10.2024 BSLR-3318
	Если ЗначениеЗаполнено(РезультатСоздания.ОтчетКомиссионераОСписании) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Отчет комиссионера о списании";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОтчетКомиссионераОСписании);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ОтчетКомиссионераОСписании);
	КонецЕсли; 
	// письмерова 10.10.2025 BSLR-4515
	Если ЗначениеЗаполнено(РезультатСоздания.ОприходованиеИзлишковТоваровУХранителя) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Оприходование излишков по декомпенсации";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ОприходованиеИзлишковТоваровУХранителя);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ОприходованиеИзлишковТоваровУХранителя);
	КонецЕсли; 
	Если ЗначениеЗаполнено(РезультатСоздания.ПередачаНаКомиссиюДекомпенсация) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Передача на комиссию излишков по декомпенсации";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ПередачаНаКомиссиюДекомпенсация);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ПередачаНаКомиссиюДекомпенсация);
	КонецЕсли; 	
	// письмерова 11.03.2026 BSLR-5351	
	Если ЗначениеЗаполнено(РезультатСоздания.ВзаимозачетЗадолженностиВозвратВыкупы) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Взаимозачет по возврату выкупов";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.ВзаимозачетЗадолженностиВозвратВыкупы);
		нСтр.ДокументУИД = Строка(РезультатСоздания.ВзаимозачетЗадолженностиВозвратВыкупы);
	КонецЕсли; 
	// письмерова 27.03.2026 BSLR-5298 ++ 
	Если ЗначениеЗаполнено(РезультатСоздания.КорректировкаЗадолженностиКомпенсации) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Коректировка задолженности по компенсации";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.КорректировкаЗадолженностиКомпенсации);
		нСтр.ДокументУИД = Строка(РезультатСоздания.КорректировкаЗадолженностиКомпенсации);
	КонецЕсли; 
	Если ЗначениеЗаполнено(РезультатСоздания.КорректировкаЗадолженностиДекомпенсации) Тогда
		нСтр = Объект.Документы.Добавить();
		нСтр.ТипДокумента = "Коректировка задолженности по декомпенсации";
		нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(РезультатСоздания.КорректировкаЗадолженностиДекомпенсации);
		нСтр.ДокументУИД = Строка(РезультатСоздания.КорректировкаЗадолженностиДекомпенсации);
	КонецЕсли; // BSLR-5298 --
	
	// письмерова 07.05.2026 
	Если РезультатСоздания.Свойство("МассивРеализаций") ТОгда
		Для Каждого Эл Из РезультатСоздания.МассивРеализаций Цикл
			нСтр = Объект.Документы.Добавить();
			нСтр.ТипДокумента = "Реализация через комиссионера юр.лицу";
			нСтр.ДокументНавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Эл);
			нСтр.ДокументУИД = Строка(Эл);
		КонецЦикла;
	КонецЕсли;
	
	
	// письмерова 21.11.2024 BSLR-4071  
	Если РезультатСоздания.МассивСборок.Количество() Тогда
		ЗаполнитьСборкиВВыкупах(РезультатСоздания.МассивСборок);
	КонецЕсли;
	
       	Попытка
			НачатьТранзакцию();
			СтрПараметрыЗаписи = новый Структура;
			СтрПараметрыЗаписи.Вставить("РежимЗаписи",РежимЗаписиДокумента.Запись);
			ЭтаФорма.Записать(СтрПараметрыЗаписи);
			ЗафиксироватьТранзакцию();
		Исключение
			Ошибка=ИнформацияОбОшибке();
			сообщение = новый СообщениеПользователю;
			сообщение.Текст = Ошибка.Описание + Символы.ПС + Ошибка.ИмяМодуля + Символы.ПС+
			Ошибка.НомерСтроки + Символы.ПС + Ошибка.ИсходнаяСтрока;
			сообщение.Сообщить();
			ОтменитьТранзакцию();
		КонецПопытки;
		
	ОбновитьИндексыДокументов(); // BSLR-5372	
	ОбновитьДеревоДокументов(); // BSLR-5340
	
	Возврат РезультатСоздания
КонецФункции

&НаСервере
Процедура ОчиститьСвязанныеДокументыНаСервере()
	если ЗначениеЗаполнено(Объект.ОтчетКомиссионераПродажа) тогда
		документОб = Объект.ОтчетКомиссионераПродажа.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ОтчетКомиссионераПродажа = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.ОтчетКомиссионераВозврат) тогда
		документОб = Объект.ОтчетКомиссионераВозврат.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ОтчетКомиссионераВозврат = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.ПриходнаяНакладная) тогда
		документОб = Объект.ПриходнаяНакладная.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ПриходнаяНакладная = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.РасходнаяНакладнаяКомиссия) тогда
		документОб = Объект.РасходнаяНакладнаяКомиссия.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.РасходнаяНакладнаяКомиссия = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.РасходнаяНакладнаяВыкуп) тогда
		документОб = Объект.РасходнаяНакладнаяВыкуп.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.РасходнаяНакладнаяВыкуп = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.ПриходнаяНакладнаяВыкуп) тогда
		документОб = Объект.ПриходнаяНакладнаяВыкуп.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ПриходнаяНакладнаяВыкуп = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.ВозвратДляРасходаПоВыкупу) тогда
		документОб = Объект.ВозвратДляРасходаПоВыкупу.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ВозвратДляРасходаПоВыкупу = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.ВозвратПоВыкупуДляПередачиНаКомиссию) тогда
		документОб = Объект.ВозвратПоВыкупуДляПередачиНаКомиссию.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ВозвратПоВыкупуДляПередачиНаКомиссию = Неопределено;
	КонецЕсли;
	если ЗначениеЗаполнено(Объект.ПередачаНаКомиссиюВозвратовПоВыкупу) тогда
		документОб = Объект.ПередачаНаКомиссиюВозвратовПоВыкупу.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина);
		Объект.ПередачаНаКомиссиюВозвратовПоВыкупу = Неопределено;
	КонецЕсли; 
	
	// письмерова 19.04.2023 BSLR-1765
	Если Объект.ПередачаНаКомиссиюВозвратовПоВыкупуУИД <> "" тогда
		
		НС = Объект.ПередачаНаКомиссиюВозвратовПоВыкупуНавигационнаяСсылка;
		// пометка на удаление документа по навигационной ссылке
	    ПерваяТочка = Найти(НС, "e1cib/data/");
	    ВтораяТочка = Найти(НС, "?ref=");
	    
	    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
	    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
	    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
	    СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
		
		документОб = СсылкаДляУдаления.ПолучитьОбъект();
		документОб.УстановитьПометкуУдаления(Истина); 
		
        Объект.ПередачаНаКомиссиюВозвратовПоВыкупуУИД = "";
		Объект.ПередачаНаКомиссиюВозвратовПоВыкупуНавигационнаяСсылка = "";
	КонецЕсли; 
	
	// письмерова 07.09.2023 BSLR-2415
	Для Каждого Стр из Объект.Документы Цикл
		
		Если Стр.ДокументНавигационнаяСсылка = "" Тогда // пустая строка BSLR-2855
			Продолжить;
		КонецЕсли;
		
		НС = Стр.ДокументНавигационнаяСсылка;
		// пометка на удаление документа по навигационной ссылке
	    ПерваяТочка = Найти(НС, "e1cib/data/");
	    ВтораяТочка = Найти(НС, "?ref=");
	    
	    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
	    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
	    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
	    СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
		
		Попытка документОб = СсылкаДляУдаления.ПолучитьОбъект(); Исключение КонецПопытки; // BSLR-3906 - удалить попытку (?)
		Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки; // если удалили из прямых ссылок
		
	КонецЦикла;  
	Объект.Документы.Очистить(); 
	
	// письмерова 21.11.2024 BSLR-4071 - очистка сборок
	Для Каждого Стр Из Объект.Выкуп Цикл
		Если ЗначениеЗаполнено(Стр.СборкаТоваров) Тогда
			документОб = Стр.СборкаТоваров.ПолучитьОбъект();
			Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки;
			Стр.СборкаТоваров = "";
		КонецЕсли;
	КонецЦикла;
	
	Попытка
		НачатьТранзакцию();
		СтрПараметрыЗаписи = новый Структура;
		СтрПараметрыЗаписи.Вставить("РежимЗаписи",РежимЗаписиДокумента.Запись);
		ЭтаФорма.Записать(СтрПараметрыЗаписи);
		ЗафиксироватьТранзакцию();
	Исключение
		Ошибка=ИнформацияОбОшибке();
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = Ошибка.Описание + Символы.ПС + Ошибка.ИмяМодуля + Символы.ПС+
		Ошибка.НомерСтроки + Символы.ПС + Ошибка.ИсходнаяСтрока;
		сообщение.Сообщить();
		ОтменитьТранзакцию();
	КонецПопытки;	

КонецПроцедуры

&НаКлиенте
Процедура ОчиститьСвязанныеДокументы(Команда)
	ОчиститьСвязанныеДокументыНаСервере();
	УстановитьВидимостьДоступность(); 
	ОбновитьДеревоДокументов(); // BSLR-5340
КонецПроцедуры

// письмерова 19.05.2023 BSLR-1863
&НаСервере
Функция ПроверитьНаличиеКомплектацийПоНаборам() 
	
	ТаблицаНаборов = новый ТаблицаЗначений; 
	
	ТаблицаНаборов.Колонки.Добавить("Номенклатура");
	ТаблицаНаборов.Колонки.Добавить("Характеристика"); 
	
	Для Каждого Стр Из Объект.Товары Цикл
		Если Стр.ЭтоНабор Тогда
			нСтр = ТаблицаНаборов.Добавить();
			ЗаполнитьЗначениясвойств(нСтр,Стр);
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Стр Из Объект.Выкуп Цикл
		Если Стр.ЭтоНабор Тогда
			нСтр = ТаблицаНаборов.Добавить();
			ЗаполнитьЗначениясвойств(нСтр,Стр);
		КонецЕсли;
	КонецЦикла; 
	
	ТаблицаНаборов.Свернуть("Номенклатура,Характеристика");
	
	Если ТаблицаНаборов.Количество() = 0 Тогда
		Возврат Ложь;   // нет наборов в таб частях
	КонецЕсли;	
	
	Ошибка = Ложь;
    Для Каждого Стр Из ТаблицаНаборов Цикл 
		ПараметрыВариантаКомплектацииНоменклатуры = НаборыВызовСервера.ПараметрыВариантаКомплектацииНоменклатуры(Стр.Номенклатура, Стр.Характеристика);
		Если ПараметрыВариантаКомплектацииНоменклатуры = Неопределено Тогда
			Сообщение = "Для номенклатуры " + Стр.Номенклатура.Наименование + " не заполнен основной состав набора в 1С.";
			ОбщегоНазначения.СообщитьПользователю(Сообщение);
			Ошибка = Истина;
        КонецЕсли;
	КонецЦикла;
	
    Возврат Ошибка;	
КонецФункции	

// письмерова 23.06.2023 BSLR-2022
&НаСервереБезКонтекста
Функция ПроверитьСпособРасчетаКомиссионногоВознаграждения(ЛичныйКабинет,ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой = Ложь)	
	ЕстьОшибкаСоглашения = Ложь; 		
	Если ЗначениеЗаполнено(ЛичныйКабинет.Соглашение) Тогда  
		//Если ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда 
		//	Возврат ЕстьОшибкаСоглашения;
		//КонецЕсли;  - BSLR-4190	
		Если ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда  // BSLR-4190
			Если НЕ ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
				Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи") Тогда
					ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Процент от суммы продажи"" "); 
					ЕстьОшибкаСоглашения = Истина;
				КонецЕсли;
			ИначеЕсли ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
				Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается") Тогда
					ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Не рассчитывается"" "); 
					ЕстьОшибкаСоглашения = Истина;
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли  ЛичныйКабинет.ТорговаяПлощадка = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда  // BSLR-4190 
			Если ЛичныйКабинет.СхемаРаботыЯндексМаркет = ПредопределенноеЗначение("Перечисление.топ_СхемыРаботыЯМ.Комиссионерская") Тогда 
				Если НЕ ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
					Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.ПроцентОтСуммыПродажи") Тогда
						ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Процент от суммы продажи"" "); 
						ЕстьОшибкаСоглашения = Истина;
					КонецЕсли;
				ИначеЕсли ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой Тогда
					Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается") Тогда
						ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Не рассчитывается"" "); 
						ЕстьОшибкаСоглашения = Истина;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		Иначе
			Если ЛичныйКабинет.Соглашение.СпособРасчетаВознаграждения <> ПредопределенноеЗначение("Перечисление.СпособыРасчетаКомиссионногоВознаграждения.НеРассчитывается") Тогда
				ОбщегоНазначения.СообщитьПользователю("Способ расчета комиссионного вознаграждения в соглашении с комиссионером и на закладке ""Настройки заполнения"" в личном кабинете должен быть ""Не рассчитывается"" "); 
				ЕстьОшибкаСоглашения = Истина;
			КонецЕсли;
		КонецЕсли;  
	КонецЕсли;
    Возврат ЕстьОшибкаСоглашения;
КонецФункции

//письмерова 11.08.2023 BSLR-2371 // письмерова 05.10.2023 BSLR-2675
Функция ОбработатьЧастичнуюКомпенсациюДляВБ(ТоварыВрем) 
	
	УслугаКомпенс = Справочники.Номенклатура.ПустаяСсылка();
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК НоменклатураУслуги,
	                      |	топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги КАК ЛитералУслуги
	                      |ИЗ
	                      |	РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
	                      |ГДЕ
	                      |	топ_СопоставлениеНоменклатурыУслуг.ТорговаяПлощадка = &ТорговаяПлощадка
	                      |	И топ_СопоставлениеНоменклатурыУслуг.ЛитералУслуги = &ЛитералУслугиКомпенс");
	Запрос.УстановитьПараметр("ТорговаяПлощадка",Перечисления.топ_ТорговыеПлощадки.Wildberries);
	Запрос.УстановитьПараметр("ЛитералУслугиКомпенс","partial_compensation");
	
	Выборка = Запрос.Выполнить().Выбрать(); 
	Если  Выборка.Следующий() Тогда  
		УслугаКомпенс = Выборка.НоменклатураУслуги;	
	КонецЕсли;  
	
	Для каждого Стр Из ТоварыВрем Цикл
		Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" ТОгда  
			Если Стр.ТипОперации = "Продажа" Тогда
				Стр.Количество = 1;
			ИначеЕсли Стр.ТипОперации = "Возврат" Или Стр.ТипОперации = "возврат" Тогда // письмерова 17.04.2024 BSLR-3481
				Стр.Количество = - 1; 
			КонецЕсли;
			Стр.Цена = Стр.Сумма * Стр.Количество; // письмерова 09.04.2024 BSLR-3448		
			Стр.СтавкаНДС = "20%";
			Стр.Номенклатура = УслугаКомпенс;
			Стр.Характеристика = "";  
		КонецЕсли;
	КонецЦикла; 
	
	// письмерова 05.09.2023 BSLR-2487  
	// свернуть все строки по ЧКБ в одну	
	//Если Объект.ЛичныйКабинет.ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа Тогда 
	// письмерова 05.10.2023 BSLR-2675 - сворачивать всегда  
	
	// отключено в рамках задачи BSLR-3287
		//МассивДляУдаления = Новый Массив;
		//СуммаЧКБ = 0;
		//Для каждого Стр Из ТоварыВрем Цикл
		//	Если Стр.ОбоснованиеДляОплаты = "Частичная компенсация брака" ТОгда  
		//		Если Стр.ТипОперации = "Продажа" Тогда
		//			СуммаЧКБ = СуммаЧКБ + Стр.Сумма;
		//		ИначеЕсли Стр.ТипОперации = "Возврат" Тогда
		//			//СуммаЧКБ = СуммаЧКБ - Стр.Сумма;
		//			СуммаЧКБ = СуммаЧКБ + Стр.Сумма; // письмерова 07.02.2024 BSLR-3196
		//		КонецЕсли;
		//		МассивДляУдаления.Добавить(Стр);	
		//	КонецЕсли;
		//КонецЦикла;  
		//
		//Если МассивДляУдаления.Количество() ТОгда  		
		//	нСтр = ТоварыВрем.Добавить();
		//	нСтр.Сумма = СуммаЧКБ;
		//	нСтр.Цена = ?(нСтр.Сумма>0,СуммаЧКБ,-СуммаЧКБ);
		//	нСтр.Количество = ?(нСтр.Сумма>0,1,-1);
		//	нСтр.СтавкаНДС = "20%";
		//	нСтр.Номенклатура = УслугаКомпенс;
		//	нСтр.Характеристика = "";  
		//КонецЕсли;	
	//КонецЕсли;	 

	Возврат ТоварыВрем;
КонецФункции

// письмерова 19.04.2023 BSLR-1765
&НаСервереБезКонтекста
Функция ОпределитьТипДокументовНаСервере(ЛК)
	Возврат топ_ОбщийВызовСервера.ОпределитьТипДокументаПередачиНаКомиссию(ЛК);
КонецФункции

// письмерова 23.12.2024 BSLR-4190 
Функция ОпределениеСхемыЛК(ЛК)
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЛК,"СхемаРаботыЯндексМаркет");
КонецФункции

// письмерова 20.04.2023 BSLR-1717
&НаСервереБезКонтекста
Функция ОпределитьЗаполнениеСоглашенияДоговораСПостащиком(ЛК)
    Возврат топ_ОбщийВызовСервера.ОпределитьЗаполнениеСоглашенияДоговораСПостащиком(ЛК);	
КонецФункции

// письмерова 20.04.2023 BSLR-1717
&НаСервереБезКонтекста
Функция ОпределитьЗаполнениеСоглашенияДоговораДляВыкупа(ЛК)
    Возврат топ_ОбщийВызовСервера.ОпределитьЗаполнениеСоглашенияДоговораДляВыкупа(ЛК);	
КонецФункции	

// письмерова 20.11.2024 BSLR-4071
&НаСервере
Функция ЕстьНезаполненныеКомпкектыНоменклатуры()

	Результат = Ложь;
	МассивСообщений = новый Массив;
	Для Каждого Стр Из Объект.Выкуп Цикл
		Если Стр.ЭтоНабор Тогда
			Если ЗначениеЗаполнено(Стр.Товар) Тогда
				Если Не ЗначениеЗаполнено(Стр.Товар.НоменклатураКомплекта) Тогда
					МассивСообщений.Добавить("Для товара " + Стр.Товар + " не заполнена номенклатура комплекта");
					Результат = Истина;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла; 
	
	Если МассивСообщений.Количество() Тогда 
		Для Каждого Эл Из МассивСообщений Цикл
			ОбщегоНазначения.СообщитьПользователю(Эл);
		КонецЦикла;		
	КонецЕсли;
	
	Возврат Результат; 
	
КонецФункции
				
// письмерова 20.11.2024 BSLR-4071
&НаСервере
Функция СоздатьКомплектыКНаборамНаСервере()	
	
	ВремТабл = Новый ТаблицаЗначений;
	ВремТабл.Колонки.Добавить("Товар");
	ВремТабл.Колонки.Добавить("Номенклатура");
	ВремТабл.Колонки.Добавить("Характеристика");
	Для Каждого Стр Из Объект.Выкуп Цикл
		Если Стр.ЭтоНабор Тогда
			Если ЗначениеЗаполнено(Стр.Товар) Тогда
				Если Не ЗначениеЗаполнено(Стр.Товар.НоменклатураКомплекта) Тогда 
					нСтр = ВремТабл.Добавить();
					ЗаполнитьЗначенияСвойств(нСтр,Стр);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	ВремТабл.Свернуть("Товар,Номенклатура,Характеристика");
	
	РезультатСоздания = топ_ОбщийВызовСервера.СоздатьКомплектыКНаборам(топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ТаблицаЗначенийВМассив(ВремТабл));	

	Возврат РезультатСоздания;  
	
КонецФункции

// письмерова 21.11.2024 BSLR-4071  
Процедура ЗаполнитьСборкиВВыкупах(МассивСборок)
	
	Для Каждого Эл из МассивСборок Цикл 
		Количество = ?(Эл.ТипОперации = "Возврат", -Эл.Количество, Эл.Количество); 
		Отбор = Новый Структура("Товар,ЭтоНабор,Количество,ТипОперации", Эл.Товар,Истина,Количество,Эл.ТипОперации); // BSLR-4287
		НайденыСтроки = Объект.Выкуп.НайтиСтроки(Отбор);
		Если НайденыСтроки.Количество() Тогда
			Для Каждого Стр из НайденыСтроки Цикл
				Если ЗначениеЗаполнено(Стр.СборкаТоваров) ТОгда
					Продолжить;
				Иначе
					Стр.СборкаТоваров = Эл.СборкаТоваров;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСтатусДокументов(Команда)
	
	ОбновитьИндексыДокументов(); // BSLR-5372
	ОбновитьДеревоДокументов(); // BSLR-5340
	
КонецПроцедуры


#КонецОбласти


#Область Служебные

Функция ВернутьКонстантуГруппыДоступовКонтрагентов()
	Возврат Константы.ИспользоватьГруппыДоступаПартнеров.Получить();
КонецФункции 

&НаКлиенте
Процедура УслугиНоменклатураПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.Услуги.ТекущиеДанные; 
	если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Номенклатура) тогда
		СтрокаТабличнойЧасти.СтавкаНДС = топ_ОбщийВызовСервера.БИТ_СтавкаНДС_Номенклатуры(СтрокаТабличнойЧасти.Номенклатура,Объект.ЛичныйКабинет,Период.ДатаОкончания); 
		СтавкаНДСЗнач = топ_ОбщийВызовСервера.БИТ_ПолучитьЗначениеСтавкиНДС(СтрокаТабличнойЧасти.СтавкаНДС);
		СтрокаТабличнойЧасти.СуммаНДС = СтрокаТабличнойЧасти.Сумма * СтавкаНДСЗнач /(100 + СтавкаНДСЗнач);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	если (не ЗначениеЗаполнено(Объект.ДатаНачала)) или (не ЗначениеЗаполнено(Объект.ДатаОкончания)) тогда
		Отказ=Истина;
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Период";
		сообщение.Сообщить();
	КонецЕсли;
	
	// дата документа = конец периода, для корректного проведения документа
	Объект.Дата = Объект.ДатаОкончания;
	
КонецПроцедуры

&НаСервере
Процедура РаспределитьРазницуНаСервере() 
	
	Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries ТОгда // письмерова 14.12.2023 BSLR-2953
	СуммаКомиссии=?(Объект.Товары.Итог("Комиссия")=Неопределено,0,Объект.Товары.Итог("Комиссия"));
	СуммаНДСКомиссии=?(Объект.Товары.Итог("СуммаНДСВознаграждения")=Неопределено,0,Объект.Товары.Итог("СуммаНДСВознаграждения"));
	если (НЕ Объект.СуммаКомиссииПоУПД=0) и (НЕ СуммаКомиссии = Объект.СуммаКомиссииПоУПД) тогда
  		МассивКоэффициентов    = Объект.Товары.Выгрузить().ВыгрузитьКолонку("Сумма");
		СуммаДляРаспределения = Объект.СуммаКомиссииПоУПД-СуммаКомиссии;
		если топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(СуммаДляРаспределения) >= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(Объект.СуммаКомиссииПоУПД*0.1) тогда
			Сообщение = новый СообщениеПользователю;
			Сообщение.Текст = "Распределение не может быть выполнено, тк распределяемая разница превышает 10%, обратитесь в техническую поддержку " + ПолучитьАдресПочты();  // BT BSLR-3058 //LAShadrin 11/03/24 BSLR-3060 
			Сообщение.Сообщить(); 
			Возврат;
		КонецЕсли;
		РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаДляРаспределения, МассивКоэффициентов);
		Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
			Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
			Сообщение = новый СообщениеПользователю;
			Сообщение.Текст = "По документу не удалось распредилить Сумму Комиссии По УПД.";
			Сообщение.Сообщить();
			Возврат;
		КонецЕсли;
		сч=0;
		для каждого строкаТовары из Объект.Товары цикл
			строкаТовары.Комиссия = строкаТовары.Комиссия+РезультатРаспределения[сч];
			сч= сч+1;
		КонецЦикла;
		Сообщение = новый СообщениеПользователю;
		Сообщение.Текст = "Комиссионное вознаграждение на вкладке ""Товары"" пересчитано";  
		Сообщение.Сообщить();
		
		//LAShadrin 31/03/23 + задача BSLR-1566 аналогично пересчитаем и НДС
		МассивКоэффициентов    = Объект.Товары.Выгрузить().ВыгрузитьКолонку("СуммаНДСВознаграждения");

		СуммаДляРаспределения = (Объект.СуммаКомиссииПоУПД / (100 + ЗначениеОсновнойСтавкиНДС) * ЗначениеОсновнойСтавкиНДС) - СуммаНДСКомиссии;  // BSLR-5126
		если топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(СуммаДляРаспределения) >= топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.МодульЧисла(Объект.СуммаКомиссииПоУПД  / (100 + ЗначениеОсновнойСтавкиНДС) * ЗначениеОсновнойСтавкиНДС * 0.1) Тогда  // BSLR-5126
			Сообщение = новый СообщениеПользователю;
			Сообщение.Текст = "Распределение НДС комиссии не может быть выполнено, тк распределяемая разница превышает 10%, обратитесь в техническую поддержку " + ПолучитьАдресПочты(); //LAShadrin 11/03/24 BSLR-3060
			Сообщение.Сообщить(); 
			Возврат;
		КонецЕсли;
		РезультатРаспределения = топ_ОбщийВызовСервера.РаспределитьПропорционально(СуммаДляРаспределения, МассивКоэффициентов);
		Если Не ТипЗнч(РезультатРаспределения) = Тип("Массив") или
			Не РезультатРаспределения.Количество() = МассивКоэффициентов.Количество() Тогда
			Сообщение = новый СообщениеПользователю;
			Сообщение.Текст = "По документу не удалось распредилить Сумму Комиссии По УПД.";
			Сообщение.Сообщить();
			Возврат;
		КонецЕсли;
		сч=0;
		для каждого строкаТовары из Объект.Товары цикл
			строкаТовары.СуммаНДСВознаграждения = строкаТовары.СуммаНДСВознаграждения + РезультатРаспределения[сч];
			сч= сч+1;
		КонецЦикла;
		Сообщение = новый СообщениеПользователю;
		Сообщение.Текст = "НДС Комиссионного вознаграждения на вкладке ""Товары"" пересчитано";  
		Сообщение.Сообщить();
		//LAShadrin 31/03/23 -
		
		// изменить сумму в таб части для WB_komission 
		ОТбор = Новый Структура("НаименованиеМП","WB_komission"); 
		НайденыСтроки = Объект.Услуги.НайтиСтроки(ОТбор);
		Если НайденыСтроки.Количество() ТОгда
			НайденыСтроки[0].Сумма = Объект.СуммаКомиссииПоУПД; 
			
			// НДС
			Если СтрНайти(НайденыСтроки[0].СтавкаНДС,"10") > 0 Тогда
				НайденыСтроки[0].СуммаНДС = НайденыСтроки[0].Сумма * 10 /110;
			ИначеЕсли СтрНайти(НайденыСтроки[0].СтавкаНДС,"20") > 0 Тогда
				НайденыСтроки[0].СуммаНДС = НайденыСтроки[0].Сумма * 20 /120;
			ИначеЕсли СтрНайти(НайденыСтроки[0].СтавкаНДС,"Без НДС") > 0 Тогда 
				НайденыСтроки[0].СуммаНДС = 0; 
			// письмерова 11.12.2025 BSLR-5126
			ИначеЕсли СтрНайти(НайденыСтроки[0].СтавкаНДС,"22") > 0 Тогда
				НайденыСтроки[0].СуммаНДС = НайденыСтроки[0].Сумма * 22 /122;
			КонецЕсли;
		КонецЕсли; 		
	КонецЕсли;  
	
	ИначеЕсли Маркетплейс = Перечисления.топ_ТорговыеПлощадки.OZON ТОгда // письмерова 14.12.2023 BSLR-2953 
		
		Разница = Объект.СуммаКомиссииПоУПД  - Объект.Товары.Итог("Комиссия"); 
		РазницаНДС = Объект.СуммаКомиссииПоУПД*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС) - Объект.Товары.Итог("СуммаНДСВознаграждения");  // BSLR-5126
		ВремТабл = Объект.Товары.Выгрузить(,"Комиссия");
		ВремТабл.Сортировать("Комиссия Убыв",);
		Макс = ВремТабл[0].Комиссия;
		Мин = ВремТабл[ВремТабл.Количество()-1].Комиссия; 
		Если  Разница > 0 Тогда
			// недобор по комиссии после загрузки, берем строку с мин комиссией и добавляем туда разницу
			НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Мин)); 
			Если НайденыСтроки.Количество() Тогда
				НайденыСтроки[0].Комиссия = НайденыСтроки[0].Комиссия + Разница;
				НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС; // BSLR-4243
			КонецЕсли;
		КонецЕсли;
				
		Если  Разница < 0 Тогда
			// перебор по комиссии после загрузки, берем строку с макс комиссией и убавляем оттуда разницу
			НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Макс)); 
			Если НайденыСтроки.Количество() Тогда
				НайденыСтроки[0].Комиссия = НайденыСтроки[0].Комиссия + Разница;
				НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС; // BSLR-4243
			КонецЕсли;
		КонецЕсли; 
			
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура РаспределитьРазницу(Команда)
	РаспределитьРазницуНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура СсылкаНаСтрОтчетаНажатие(Элемент)
	ПерейтиПоНавигационнойСсылке(Элемент.Заголовок);
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	УстановитьВидимостьДоступность(); 
	ОбновитьИндексыДокументов(); // BSLR-5372
КонецПроцедуры

&НаКлиенте
Процедура РазрешитьЗагрузкуЗа12МесяцевПриИзменении(Элемент)
	УстановитьПериод();
КонецПроцедуры

&НаСервереБезКонтекста
Функция ИспользуютсяХарактеристики(ЛичныйКабинет)
	Возврат ЛичныйКабинет.СоздаватьНоменклатуруСИспользованиемХарактеристик;
КонецФункции

&НаКлиенте
Процедура УслугиСтавкаНДСПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
	
	ПересчитатьНДС(ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ПересчитатьНДС(ТекущиеДанные) 
	
	НужнаяСумма = ТекущиеДанные.Сумма;
	Если НЕ ТекущиеДанные.Свойство("ВыплатыПоМеханикамЛояльностиПартнеров") Тогда // выкупы 
		Если ТекущиеДанные.Свойство("СуммаКВыплате") Тогда 
			НужнаяСумма = ТекущиеДанные.СуммаКВыплате; 
		КонецЕсли;
	Иначе   // BSLR-4190
		Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") ТОгда
			НужнаяСумма = ТекущиеДанные.СуммаКВыплате;
		КонецЕсли;
	КонецЕсли;
	Если СтрНайти(ТекущиеДанные.СтавкаНДС,"10") > 0 Тогда
		ТекущиеДанные.СуммаНДС = НужнаяСумма *10/110;
	ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"20") > 0 Тогда
		ТекущиеДанные.СуммаНДС = НужнаяСумма *20/120;
	ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"Без НДС") > 0 Тогда 
		ТекущиеДанные.СуммаНДС = 0; 
	// письмерова 21.01.2025 BSLR-4261
	ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"5") > 0 Тогда
		ТекущиеДанные.СуммаНДС = НужнаяСумма *5/105;
	ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"7") > 0 Тогда
		ТекущиеДанные.СуммаНДС = НужнаяСумма *7/107;
	// письмерова 11.12.2025 BSLR-5126	
	ИначеЕсли СтрНайти(ТекущиеДанные.СтавкаНДС,"22") > 0 Тогда
		ТекущиеДанные.СуммаНДС = НужнаяСумма *22/122;
	КонецЕсли;   
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыПересчитатьПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	
	ТекущиеДанные.Сумма  = ТекущиеДанные.Цена * ТекущиеДанные.Количество;	
	
	ПересчитатьНДС(ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыПересчитатьЦЕНУПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	
	ТекущиеДанные.Цена  = ?(ТекущиеДанные.Количество = 0 , 0,ТекущиеДанные.Сумма / ТекущиеДанные.Количество);

	ПересчитатьНДС(ТекущиеДанные);
	
КонецПроцедуры  

&НаКлиенте
Процедура ТоварыСтавкаНДСПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	
	ПересчитатьНДС(ТекущиеДанные);

КонецПроцедуры

&НаКлиенте
Процедура ВыкупПересчитатьПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
	
	ТекущиеДанные.Сумма  = ТекущиеДанные.Цена * ТекущиеДанные.Количество;	
	
	ПересчитатьНДС(ТекущиеДанные);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыкупПересчитатьЦЕНУПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
	
	ТекущиеДанные.Цена  = ?(ТекущиеДанные.Количество = 0 , 0,ТекущиеДанные.Сумма / ТекущиеДанные.Количество);
	
	ПересчитатьНДС(ТекущиеДанные);
	
КонецПроцедуры  

&НаКлиенте
Процедура ВыкупСтавкаНДСПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
	
	ПересчитатьНДС(ТекущиеДанные);

КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьВыкупыИзExcel(Команда)
		Если НЕ ЗначениеЗаполнено(Период) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
		Возврат;
	КонецЕсли;
	
	Если Объект.Выкуп.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииТаблицыВыкупов", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблица выкупов не пуста. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
	иначе
		ВыполнитьЗагрузкуЧерезФайл(Истина);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииТаблицыВыкупов(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли; 
	// письмерова 04.03.2024 BSLR-3329	
	Если Результат = КодВозвратаДиалога.Нет Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Выкуп.Очистить();
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайл(Истина);

КонецПроцедуры

&НаСервереБезКонтекста
Функция ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа(ЛичныйКабинет)    
	Возврат ЛичныйКабинет.ГруппироватьТоварыВОтчетеКомиссионераБезУчетаЗаказа;
КонецФункции 

&НаСервере
Процедура СвернутьНаСервере(ТабЧасть)

	Если ТабЧасть = "Товары" Тогда     
		ВремТабл = Объект.Товары.Выгрузить();
		Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries ТОгда // BSLR-5361 ++
			// для загрузки ЮЛ нажно оставить Идентификатор - по нему грузим данные юл из другого файла или по апи
			// и сворачивать нужно с учетом поля Идентификатор 
			Для Каждого Стр Из ВремТабл Цикл
				Если НЕ Стр.ПродажаЮЛ Тогда
					Стр.Идентификатор = "";
				КонецЕсли;
			КонецЦикла;
		ВремТабл.Свернуть("Артикул,Номенклатура,Характеристика,Товар,РазмерWB,ТипОперации,СтавкаНДС,ЭтоНабор,ЕдиницаИзмерения,
							|ОбоснованиеДляОплаты,НомерСчФакт,ДатаСчФакт,Покупатель,ПродажаЮЛ,Идентификатор",  
								"Количество,Сумма,СуммаНДС,Комиссия,СуммаНДСВознаграждения,СуммаДоплатыOzon,ВыплатыПоМеханикамЛояльностиПартнеров,КомиссияБазовая");
		Иначе // BSLR-5361
		ВремТабл.Свернуть("Артикул,Номенклатура,Характеристика,Товар,РазмерWB,ТипОперации,СтавкаНДС,ЭтоНабор,ЕдиницаИзмерения,
							|ОбоснованиеДляОплаты,НомерСчФакт,ДатаСчФакт,Покупатель,ПродажаЮЛ",  //письмерова 05.09.2023 BSLR-2487     // BSLR-3879 //  BSLR-5361
								"Количество,Сумма,СуммаНДС,Комиссия,СуммаНДСВознаграждения,СуммаДоплатыOzon,ВыплатыПоМеханикамЛояльностиПартнеров,КомиссияБазовая");
		КонецЕсли; // BSLR-5361 --
		ВремТабл.Колонки.Добавить("Цена");
		УсреднитьЦеныНаСервереБезКонтекста(ВремТабл, ЗначениеОсновнойСтавкиНДС); 			
		Объект.Товары.Загрузить(ВремТабл); 
	ИначеЕсли ТабЧасть = "Выкуп" Тогда 
		ВремТабл = Объект.Выкуп.Выгрузить();
		ВремТабл.Свернуть("Артикул,Номенклатура,Характеристика,Товар,РазмерWB,ТипОперации,СтавкаНДС,ЭтоНабор,ЕдиницаИзмерения",
								"Количество,Сумма,СуммаНДС,Комиссия,СуммаНДСВознаграждения,СуммаКВыплате"); 
		ВремТабл.Колонки.Добавить("Цена");
		УсреднитьЦеныНаСервереБезКонтекста(ВремТабл, ЗначениеОсновнойСтавкиНДС);
		Объект.Выкуп.Загрузить(ВремТабл);   
	КонецЕсли;
	
КонецПроцедуры  

&НаСервереБезКонтекста 
Процедура УсреднитьЦеныНаСервереБезКонтекста(ВремТабл, ЗначениеОсновнойСтавкиНДС)
	Для Каждого Стр из ВремТабл Цикл
		Стр.Цена = ?(Стр.Количество = 0,0,Стр.Сумма/Стр.Количество);
		Стр.СуммаНДСВознаграждения = Окр(Стр.Комиссия * ЗначениеОсновнойСтавкиНДС / (100 + ЗначениеОсновнойСтавкиНДС),2); // BSLR-5126
	КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// ++ Бойков BSLR-1852
	СписокРеквизитов = Новый Массив;
	СписокРеквизитов.Добавить("ЛичныйКабинет");
	СписокРеквизитов.Добавить("Товары.Товар");
	СписокРеквизитов.Добавить("Услуги.УслугаМП");
	СписокРеквизитов.Добавить("Выкуп.Товар");
	топ_ИнтерфейсСервер.ПроверитьЗаполнениеРеквизитовПоДоступнымТорговымПлощадкам(ЭтотОбъект, "Объект", СписокРеквизитов, Отказ);
	// -- Бойков BSLR-1852
	
КонецПроцедуры

// письмерова 02.06.2023 BSLR-1990
&НаСервереБезКонтекста 
Функция ПолучитьПризнакНабора(Номенклатура)
	Возврат ?(Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор,Истина, Ложь);
КонецФункции

&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
		
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	ТекущиеДанные.ЭтоНабор = ПолучитьПризнакНабора(ТекущиеДанные.Номенклатура) 
	
КонецПроцедуры


&НаКлиенте
Процедура ВыкупНоменклатураПриИзменении(Элемент) 
	
	ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
	ТекущиеДанные.ЭтоНабор = ПолучитьПризнакНабора(ТекущиеДанные.Номенклатура)
	
КонецПроцедуры

// ++ Бойков BSLR-2012
//
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПроверитьИспользованиеЛичногоКабинета(ЭтотОбъект);
	
КонецПроцедуры // -- Бойков BSLR-2012

// письмерова 19.04.2023 BSLR-1765
&НаКлиенте
Процедура ПередачаНаКомиссиюВозвратовПоВыкупуУИДНажатие(Элемент, СтандартнаяОбработка)
	ПерейтиПоНавигационнойСсылке(Объект.ПередачаНаКомиссиюВозвратовПоВыкупуНавигационнаяСсылка);
КонецПроцедуры

// письмерова 06.09.2023 BSLR-2415   
&НаКлиенте
Процедура ТаблицаДокументовДокументУИДОткрытие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ТекущиеДанные = Элементы.ТаблицаДокументов.ТекущиеДанные; 
	ПерейтиПоНавигационнойСсылке(ТекущиеДанные.ДокументНавигационнаяСсылка);
КонецПроцедуры


// письмерова 22.12.2023 BSLR-2959 
&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
	ПересчитатьКомиссиюВБ();
КонецПроцедуры

&НаКлиенте
Процедура ТоварыКомиссияПриИзменении(Элемент) 	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	ТекущиеДанные.СуммаНДСВознаграждения = ТекущиеДанные.Комиссия * ЗначениеОсновнойСтавкиНДС /(100 + ЗначениеОсновнойСтавкиНДС); // BSLR-5126
	ПересчитатьКомиссиюВБ();
КонецПроцедуры

&НаКлиенте
Процедура ПересчитатьКомиссиюВБ()
	// изменить сумму в таб части для WB_komission 
	ОТбор = Новый Структура("НаименованиеМП","WB_komission"); 
	НайденыСтроки = Объект.Услуги.НайтиСтроки(ОТбор);
	Если НайденыСтроки.Количество() ТОгда
		НайденыСтроки[0].Сумма = Объект.Товары.Итог("Комиссия");		
		НайденыСтроки[0].СуммаНДС = Объект.Товары.Итог("СуммаНДСВознаграждения");
	КонецЕсли; 		
КонецПроцедуры

// письмерова 12.08.2024 BSLR-3773
&НаКлиенте
Процедура НомерВходящегоДокументаПриИзменении(Элемент)	
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда 
		Если Объект.НомерВходящегоДокумента <> "" Тогда
			Элементы.СсылкаНаСтрОтчета.Заголовок = топ_РаботаСМаркетплейсами_Wildberries.ПолучитьАдресСсылкиНаОтчёт(Объект.НомерВходящегоДокумента,Объект.ДатаНачала);
			Элементы.СсылкаНаСтрОтчета.Видимость = Истина;
			Элементы.ГруппаСсылкаНастрОтчетаПодсказка.Видимость = Истина;
		Иначе
			Элементы.СсылкаНаСтрОтчета.Заголовок = "";
			Элементы.СсылкаНаСтрОтчета.Видимость = Ложь; 
			Элементы.ГруппаСсылкаНастрОтчетаПодсказка.видимость = Ложь; 
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

// письмерова 21.10.2024 BSLR-3956
Процедура ЗаполнитьИндексыУслуг(Услуги,УслугиОтрицательные) 
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.Наименование КАК Наименование,
	                      |	ТЗ.НаименованиеМП КАК НаименованиеМП,
	                      |	ТЗ.Бренд КАК Бренд,
	                      |	ТЗ.Номенклатура КАК Номенклатура,
	                      |	ТЗ.Сумма КАК Сумма,
	                      |	ТЗ.Цена КАК Цена,
	                      |	ТЗ.Количество КАК Количество,
						  |	ТЗ.ДатаЗаказа КАК ДатаЗаказа,
	                      |	ТЗ.СуммаНДС КАК СуммаНДС,
	                      |	ТЗ.УслугаМП КАК УслугаМП,
	                      |	ТЗ.СтавкаНДС КАК СтавкаНДС,
						  // BSLR-4099 
						  |	ТЗ.СтавкаНДССтрокой КАК СтавкаНДССтрокой
	                      |ПОМЕСТИТЬ Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	топ_РаспределениеУслугПоДокументамНастройки.Ссылка.ТорговаяПлощадка КАК ТорговаяПлощадка,
	                      |	топ_РаспределениеУслугПоДокументамНастройки.УслугаТП КАК УслугаТП,
	                      |	МАКСИМУМ(топ_РаспределениеУслугПоДокументамНастройки.ИндексДокумента) КАК ИндексДокумента
	                      |ПОМЕСТИТЬ ВТ_ИндексыДокументовУслуг
	                      |ИЗ
	                      |	Справочник.топ_РаспределениеУслугПоДокументам.Настройки КАК топ_РаспределениеУслугПоДокументамНастройки
	                      |ГДЕ
	                      |	НЕ топ_РаспределениеУслугПоДокументамНастройки.Ссылка.ПометкаУдаления
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	топ_РаспределениеУслугПоДокументамНастройки.Ссылка.ТорговаяПлощадка,
	                      |	топ_РаспределениеУслугПоДокументамНастройки.УслугаТП
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	Таблица.Наименование КАК Наименование,
	                      |	Таблица.НаименованиеМП КАК НаименованиеМП,
	                      |	Таблица.Бренд КАК Бренд,
	                      |	Таблица.Номенклатура КАК Номенклатура,
	                      |	Таблица.Сумма КАК Сумма,
	                      |	Таблица.СуммаНДС КАК СуммаНДС,
						  // BSLR-4099 
						  |	Таблица.СтавкаНДССтрокой КАК СтавкаНДССтрокой,
	                      |	Таблица.УслугаМП КАК УслугаМП,
	                      |	Таблица.СтавкаНДС КАК СтавкаНДС,
	                      |	ЕСТЬNULL(ВТ_ИндексыДокументовУслуг.ИндексДокумента, 1) КАК ИндексДокумента,
						  |	Таблица.ДатаЗаказа КАК ДатаЗаказа,
	                      |	Таблица.Цена КАК Цена,
	                      |	Таблица.Количество КАК Количество
	                      |ИЗ
	                      |	Таблица КАК Таблица
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ИндексыДокументовУслуг КАК ВТ_ИндексыДокументовУслуг
	                      |		ПО Таблица.УслугаМП = ВТ_ИндексыДокументовУслуг.УслугаТП");  
	Запрос.УстановитьПараметр("ТЗ",Услуги);  
	Услуги = Запрос.Выполнить().Выгрузить();
	
	Запрос.УстановитьПараметр("ТЗ",УслугиОтрицательные);
	УслугиОтрицательные = Запрос.Выполнить().Выгрузить(); 
	
	
КонецПроцедуры


&НаКлиенте
Процедура ЗаменятьВРеализацииПоВыкупамНаборыНаКомплектыПриИзменении(Элемент)
	Элементы.ВыкупСборкаТоваров.Видимость = Объект.ЗаменятьВРеализацииПоВыкупамНаборыНаКомплекты;	
КонецПроцедуры


// письмерова 17.01.2025 BSLR-4243
&НаСервере
Процедура ВыровнятьНДСВознаграждения() 
	
	РазницаНДС = Объект.Товары.Итог("Комиссия")*ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС) - Объект.Товары.Итог("СуммаНДСВознаграждения");  // BSLR-5126
	
	Если РазницаНДС <> 0 Тогда
		
		ВремТабл = Объект.Товары.Выгрузить(,"Комиссия");
		ВремТабл.Сортировать("Комиссия Убыв",);
		Макс = ВремТабл[0].Комиссия;
		Мин = ВремТабл[ВремТабл.Количество()-1].Комиссия; 
		Если  РазницаНДС > 0 Тогда
			// недобор по комиссии после загрузки, берем строку с мин комиссией и добавляем туда разницу
			НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Мин)); 
			Если НайденыСтроки.Количество() Тогда
				НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС; 
			КонецЕсли;
		КонецЕсли;
				
		Если  РазницаНДС < 0 Тогда
			// перебор по комиссии после загрузки, берем строку с макс комиссией и убавляем оттуда разницу
			НайденыСтроки = Объект.Товары.НайтиСтроки(новый Структура("Комиссия",Макс)); 
			Если НайденыСтроки.Количество() Тогда
				НайденыСтроки[0].СуммаНДСВознаграждения = НайденыСтроки[0].СуммаНДСВознаграждения + РазницаНДС; 
			КонецЕсли;
		КонецЕсли; 
			
	КонецЕсли;
	
КонецПроцедуры

// письмерова 21.01.2025 BSLR-4260
&НаСервереБезКонтекста
Функция ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
			НазваниеРегистра, ЛичныйКабинет, ДатаОкончания, ВыдаватьИсключение) 
	
    Возврат топ_УТсервер.ПолучитьДействующиеПараметрыНалоговУчетныхПолитикНаДату(
				НазваниеРегистра, ЛичныйКабинет, ДатаОкончания, ВыдаватьИсключение);
	
КонецФункции


// письмерова 16.04.2025 
&НаСервереБезКонтекста
Функция ПолучитьСтавкуНДСПоУмолчанию(ЛК,Дата)
	Возврат топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьСтавкуНДСПоУмолчанию(ЛК,Дата);
КонецФункции

// пиьмерова 08.05.2026 BSLR-5340
&НаКлиенте
Процедура ДеревоДокументовДокументУИДОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ТекущиеДанные = Элементы.ДеревоДокументов.ТекущиеДанные; 
	ПерейтиПоНавигационнойСсылке(ТекущиеДанные.ДокументНавигационнаяСсылка);

КонецПроцедуры

#КонецОбласти


#Область ЗагрузкаВыкуповOZON

// письмерова 13.10.2023 BSLR-1587 
&НаКлиенте
Процедура ЗагрузитьВыкупыИзExcelOZON(Команда)
	
	Если НЕ ЗначениеЗаполнено(Период) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
		Возврат;
	КонецЕсли;
	
	Если Объект.Выкуп.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииВыкупыOZON", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблица выкупов содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
	иначе
		ВыполнитьЗагрузкуЧерезФайлВыкупыOZON();
	КонецЕсли;

КонецПроцедуры


// письмерова 28.11.2025 BSLR-4287
&НаКлиенте
Процедура ЗагрузитьВыкупыИзExcelOZONВозвраты(Команда)
	
	Если НЕ ЗначениеЗаполнено(Период) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
		Возврат;
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайлВыкупыOZON(Истина);

КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииВыкупыOZON(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Выкуп.Очистить();
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайлВыкупыOZON();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлВыкупыOZON(ЭтоВозвраты = Ложь) // BSLR-4287 
	
	Попытка                                                                                         // BSLR-4287
		НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуВыкупыOZON",ЭтаФорма,ЭтоВозвраты),,,,,новый УникальныйИдентификатор); 
	Исключение
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуВыкупыOZON(Результат,ЭтоВозвраты) Экспорт 
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	РезультатВыполнения = ЗагрузитьВыкупыOZONИзExcelНаСервере(Результат.Адрес, РасширениеФайла, ЭтоВозвраты); // BSLR-4287
	УстановитьВидимостьДоступность();
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьВыкупыOZONИзExcelНаСервере(Знач Адрес, Расширение, ЭтоВозвраты)
	
	Результат = Новый Структура("Ошибка, Сообщение, СписокТоваров, СписокУслуг", 
	Ложь, "", Новый Массив, Новый Массив);
	ПерваяСтрока = 0;
	ЕстьДанныеОтправления = Ложь;
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиТоваровOZON();
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);

	Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда
		
		УдалитьФайлы(ИмяФайла);
		
	КонецЕсли; 
	
	КоличествоСтрок   = MXL.ВысотаТаблицы;
	КоличествоКолонок = MXL.ШиринаСтраницы;
	// письмерова 01.12.2025 BSLR-4287
	Если ЭтоВозвраты ТОгда
		СтрокаПоиска_1 = "Отчёт о возвращенных";
		СтрокаПоиска_2 = "Возврат товаров за период";
	Иначе
		СтрокаПоиска_1 = "Отчет о выкупленных";
		СтрокаПоиска_2 = "Реализация товаров за период";
	КонецЕсли;
	
	Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
		Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
			ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
			Если СтрНайти(ТекстЯчейки, СтрокаПоиска_1) <> 0 Тогда // BSLR-4287
				ПозицияНомераНачало = СтрНайти(ТекстЯчейки, "№");
				
				НомерОправления =  СокрЛП(Сред(ТекстЯчейки, ПозицияНомераНачало + 2));
				Объект.НомерВходящегоДокументаВыкупа = НомерОправления;  				
			КонецЕсли; 			
			
			Если СтрНайти(ТекстЯчейки, СтрокаПоиска_2) <> 0 Тогда  // BSLR-4287
				ПозицияДаты  = СтрНайти(ТекстЯчейки, "по");
				ДатаОтправленияСтрока = СокрЛП(Сред(ТекстЯчейки, ПозицияДаты + 3)) + " 00:00:00";
				Попытка
					ДатаОтправления = Дата(ДатаОтправленияСтрока);
					Объект.ДатаВходящегоДокументаВыкупа = ДатаОтправления;
				Исключение
					ОбщегоНазначения.СообщитьПользователю("Не удалось определить дату входящего документа из файла. Укажите дату вручную");
				КонецПопытки;
			КонецЕсли;
			
			Если ТекстЯчейки = "№ п/п" Тогда
				ПерваяСтрока = ТекущаяСтрока + 3;
			КонецЕсли;
			Если ТекстЯчейки = "Номер" Тогда
				ЕстьДанныеОтправления = Истина;
			КонецЕсли;
			Если ЕстьДанныеОтправления И ЗначениеЗаполнено(ПерваяСтрока) Тогда
				Прервать;
			КонецЕсли; 
		КонецЦикла;
	КонецЦикла;
	
	Если ПерваяСтрока = 0 Тогда
		Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчет о выкупленных товарах""");
		Возврат Результат;
	КонецЕсли;

	НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиВыкупыOZON(MXL, ПерваяСтрока-3, ЭтоВозвраты); // BSLR-4287
	
	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
		КоличествоПродано = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + НомераКолонокФайла.КоличествоПродано).ТекущаяОбласть.Текст); 
		Если КоличествоПродано = "0" Тогда
			Продолжить;
		КонецЕсли;
		НоваяСтрока = Объект.Выкуп.Добавить();
		Если ЭтоВозвраты ТОгда  // BSLR-4287 ++
			НоваяСтрока.ТипОперации   = "Возврат";
		Иначе
			НоваяСтрока.ТипОперации   = "Продажа";
		КонецЕсли;
		НоваяСтрока.Количество = ?(ЭтоВозвраты, - КоличествоПродано,КоличествоПродано); // BSLR-4287 --
		ЗаполнитьСтрокуТаблицыТоваровВыкупыOZON(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
	КонецЦикла;

	ДополнитьДаннымиТоваровИНоменклатурыOZON(); 
	
	Возврат Результат;
	
КонецФункции

 &НаСерверебезконтекста
Функция СоответствиеКолонокФайлаЗагрузкиВыкупыOZON(MXL, СтрокаЗаголовков, ЭтоВозвраты = Ложь)
	
	Результат = Новый Структура;
	Если Не ЭтоВозвраты ТОгда // BSLR-4287 ++
		Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара продавца")); 
		Если НЕ ЗначениеЗаполнено(Результат.Артикул) Тогда // BSLR-5196 ++
			Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"));
		КонецЕсли; // BSLR-5196 --	
		Результат.Вставить("СуммаПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого к начислению, руб.")); 
		Результат.Вставить("Идентификатор",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Код товара OZON")); 
	Иначе
		Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"));
		Результат.Вставить("СуммаПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Возвращено на сумму, руб.")); 
		Результат.Вставить("Идентификатор",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU")); 
	КонецЕсли;  // BSLR-4287 --
	
	Результат.Вставить("КоличествоПродано",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во")); 
	Результат.Вставить("СтавкаНДС",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Ставка НДС, %"));  
	Результат.Вставить("ЦенаПродажи",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Цена реализации")); 
	
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровВыкупыOZON(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.Артикул       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	СтрокаПриемник.Цена          = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ЦенаПродажи).ТекущаяОбласть.Текст);
	СтрокаПриемник.СуммаКВыплате = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаПродажи).ТекущаяОбласть.Текст);	
	СтрокаПриемник.Сумма         = СтрокаПриемник.Количество * СтрокаПриемник.Цена;   
	СтрокаПриемник.СтавкаНДС     = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтавкаНДС).ТекущаяОбласть.Текст);
	// письмерова 10.03.2026 BSLR-5362
	Если СтрНайти(СтрокаПриемник.СтавкаНДС,"%") = 0 ТОгда
		СтрокаПриемник.СтавкаНДС = СтрЗаменить(СтрокаПриемник.СтавкаНДС,",00", "%");
	КонецЕсли;	
	// sku
	ИД = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Идентификатор).ТекущаяОбласть.Текст);
	// формализация данных под требования хранения данных в системе, письмерова   1 135 800 695 или 788 867 123
	// 10 или 9 символов
	Если СтрДлина(ИД) = 9 Тогда
		Гр1 = Лев(ИД,3);
		Гр2 = Сред(ИД,4,3);
		ГР3 = Прав(ИД,3);
		ИДСтрокой = Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
	ИначеЕсли СтрДлина(ИД) = 10 Тогда 
	    Гр0 = Лев(ИД,1);
		Гр1 = Сред(ИД,2,3);
		Гр2 = Сред(ИД,5,3);
		ГР3 = Прав(ИД,3);
		ИДСтрокой = Гр0 + Символы.НПП + Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
	Иначе
		ИДСтрокой = ИД;
	КонецЕсли; 
	СтрокаПриемник.Идентификатор = ИДСтрокой; 
	
КонецПроцедуры

&НаСервере
Процедура ДополнитьДаннымиТоваровИНоменклатурыOZON()

	// дополнить данными товаров и связанной номенкалтуры
	ВремТабл = Объект.Выкуп.Выгрузить();
 
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.Идентификатор КАК Идентификатор,
	                      |	ТЗ.Артикул КАК Артикул,
	                      |	ТЗ.ТипОперации КАК ТипОперации,
	                      |	ТЗ.Количество КАК Количество,
	                      |	ТЗ.Сумма КАК Сумма,
	                      |	ТЗ.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ТЗ.Цена КАК Цена,
	                      |	ТЗ.СтавкаНДС КАК СтавкаНДС
	                      |ПОМЕСТИТЬ ВТ_Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Таблица.Идентификатор КАК Идентификатор,
	                      |	ВТ_Таблица.Артикул КАК Артикул,
	                      |	ВТ_Таблица.ТипОперации КАК ТипОперации,
	                      |	ВТ_Таблица.Количество КАК Количество,
	                      |	ВТ_Таблица.Сумма КАК Сумма,
	                      |	ВТ_Таблица.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ВТ_Таблица.Цена КАК Цена,
	                      |	ВТ_Таблица.СтавкаНДС КАК СтавкаНДС,
	                      |	топ_ТоварыТорговыхПлощадок.Ссылка КАК Товар
	                      |ПОМЕСТИТЬ ВТ_ТоварыПредварительно
	                      |ИЗ
	                      |	ВТ_Таблица КАК ВТ_Таблица
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ПО (ВТ_Таблица.Идентификатор = топ_ТоварыТорговыхПлощадок.sku_fbo
	                      |				ИЛИ ВТ_Таблица.Идентификатор = топ_ТоварыТорговыхПлощадок.sku_fbs)
	                      |			И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_ТоварыПредварительно.Идентификатор КАК Идентификатор,
	                      |	ВТ_ТоварыПредварительно.Артикул КАК Артикул,
	                      |	ВТ_ТоварыПредварительно.ТипОперации КАК ТипОперации,
	                      |	ВТ_ТоварыПредварительно.Количество КАК Количество,
	                      |	ВТ_ТоварыПредварительно.Сумма КАК Сумма,
	                      |	ВТ_ТоварыПредварительно.СуммаКВыплате КАК СуммаКВыплате,
	                      |	ВТ_ТоварыПредварительно.Цена КАК Цена,
	                      |	ВТ_ТоварыПредварительно.СтавкаНДС КАК СтавкаНДС,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_ТоварыПредварительно.Товар ЕСТЬ NULL
	                      |			ТОГДА топ_ТоварыТорговыхПлощадок.Ссылка
	                      |		ИНАЧЕ ВТ_ТоварыПредварительно.Товар
	                      |	КОНЕЦ КАК Товар
	                      |ПОМЕСТИТЬ ВТ_ТоварыПолная
	                      |ИЗ
	                      |	ВТ_ТоварыПредварительно КАК ВТ_ТоварыПредварительно
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ПО ВТ_ТоварыПредварительно.Артикул = топ_ТоварыТорговыхПлощадок.КодПоставщика
	                      |			И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	МАКСИМУМ(ВТ_ТоварыПолная.Товар) КАК Товар,
	                      |	ВТ_ТоварыПолная.Идентификатор КАК Идентификатор,
	                      |	ВТ_ТоварыПолная.Артикул КАК Артикул,
	                      |	СУММА(ВТ_ТоварыПолная.Количество) КАК Количество,
	                      |	СУММА(ВТ_ТоварыПолная.Сумма) КАК Сумма,
	                      |	ВТ_ТоварыПолная.Цена КАК Цена,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""10,00""
	                      |			ТОГДА ""10%""
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""20,00""
	                      |			ТОГДА ""20%"" 
						  // письмерова 21.01.2025 BSLR-4260
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""5,00""
	                      |			ТОГДА ""5%"" 
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""7,00""
	                      |			ТОГДА ""7%"" 
	                      |		ИНАЧЕ ВТ_ТоварыПолная.СтавкаНДС
	                      |	КОНЕЦ КАК СтавкаНДС,
	                      |	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
	                      |	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
	                      |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
	                      |			ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
	                      |		ИНАЧЕ топ_СоответствиеТоваров.Упаковка
	                      |	КОНЕЦ КАК ЕдиницаИзмерения,
						   // письмерова 18.11.2024 BSLR-4106
						  |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Номенклатура ЕСТЬ NULL
	                      |			ТОГДА ЛОЖЬ
	                      |		ИНАЧЕ ВЫБОР
	                      |				КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
	                      |					ТОГДА ИСТИНА
	                      |				ИНАЧЕ ЛОЖЬ
	                      |			КОНЕЦ
	                      |	КОНЕЦ КАК ЭтоНабор,
	                      |	СУММА(ВТ_ТоварыПолная.СуммаКВыплате) КАК СуммаКВыплате,
	                      |	ВТ_ТоварыПолная.ТипОперации КАК ТипОперации,
	                      |	СУММА(ВЫБОР
	                      |			КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""10,00""
	                      |					ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""10%""
	                      |				ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 10 / 110
	                      |			КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""20,00""
	                      |					ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""20%""
	                      |				ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 20 / 120 
						  // письмерова 21.01.2025 BSLR-4260
	                      |			КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""5,00""
						  |					ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""5%""  
						  |				ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 5 / 105 
	                      |			КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""7,00""
						  |					ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""7%"" 
						  |				ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 7 / 107 
						  // письмерова 11.12.2025 BSLR-5126
	                      |			КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""22,00""
						  |					ИЛИ ВТ_ТоварыПолная.СтавкаНДС = ""22%"" 
						  |				ТОГДА ВТ_ТоварыПолная.СуммаКВыплате * 22 / 122 
	                      |			ИНАЧЕ 0
	                      |		КОНЕЦ) КАК СуммаНДС
	                      |ИЗ
	                      |	ВТ_ТоварыПолная КАК ВТ_ТоварыПолная
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
	                      |		ПО ВТ_ТоварыПолная.Товар = топ_СоответствиеТоваров.Товар
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_ТоварыПолная.ТипОперации,
	                      |	ВТ_ТоварыПолная.Идентификатор,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""10,00""
	                      |			ТОГДА ""10%""
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""20,00""
	                      |			ТОГДА ""20%"" 
						  // письмерова 21.01.2025 BSLR-4260
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""5,00""
	                      |			ТОГДА ""5%"" 
	                      |		КОГДА ВТ_ТоварыПолная.СтавкаНДС = ""7,00""
	                      |			ТОГДА ""7%"" 
	                      |		ИНАЧЕ ВТ_ТоварыПолная.СтавкаНДС
	                      |	КОНЕЦ,
	                      |	топ_СоответствиеТоваров.Номенклатура,
	                      |	топ_СоответствиеТоваров.Характеристика,
						   // письмерова 18.11.2024 BSLR-4106
						  |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Номенклатура ЕСТЬ NULL
	                      |			ТОГДА ЛОЖЬ
	                      |		ИНАЧЕ ВЫБОР
	                      |				КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
	                      |					ТОГДА ИСТИНА
	                      |				ИНАЧЕ ЛОЖЬ
	                      |			КОНЕЦ
	                      |	КОНЕЦ,
	                      |	топ_СоответствиеТоваров.Упаковка,
	                      |	ВТ_ТоварыПолная.Артикул,
	                      |	ВТ_ТоварыПолная.Цена,
	                      |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
	                      |			ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
	                      |		ИНАЧЕ топ_СоответствиеТоваров.Упаковка
	                      |	КОНЕЦ");
	
	Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
	Запрос.УстановитьПараметр("ТЗ",ВремТабл);
	
	ТаблицаИтоговая = Запрос.Выполнить().Выгрузить();
	
	Объект.Выкуп.Очистить();
	Объект.Выкуп.Загрузить(ТаблицаИтоговая);
	
	
КонецПроцедуры

#КонецОбласти


&НаСервереБезКонтекста
Функция ПолучитьАдресПочты()

	Возврат Константы.топ_АдресПочтыТехподдержки.Получить();
	
КонецФункции

// письмерова 19.04.2024 BSLR-3481
&НаСервере
Функция РазмерWBПриИзмененииНаСервере(Данные)
	ДанныеНоменклатуры = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);  
	Возврат ДанныеНоменклатуры;
КонецФункции

&НаКлиенте
Процедура ТоварыРазмерWBПриИзменении(Элемент) 
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	Данные = Новый Структура("Товар, Размер",ТекущиеДанные.Товар,ТекущиеДанные.РазмерWB);
	ДанныеНоменклатуры = РазмерWBПриИзмененииНаСервере(Данные); 
	
	ТекущиеДанные.Номенклатура = ДанныеНоменклатуры.Номенклатура;
	ТекущиеДанные.Характеристика = ДанныеНоменклатуры.Характеристика;

КонецПроцедуры

&НаКлиенте
Процедура ВыкупРазмерWBПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Выкуп.ТекущиеДанные;
	Данные = Новый Структура("Товар, Размер",ТекущиеДанные.Товар,ТекущиеДанные.РазмерWB);
	ДанныеНоменклатуры = РазмерWBПриИзмененииНаСервере(Данные); 
	
	ТекущиеДанные.Номенклатура = ДанныеНоменклатуры.Номенклатура;
	ТекущиеДанные.Характеристика = ДанныеНоменклатуры.Характеристика;

КонецПроцедуры

// письмерова 30.08.2024 BSLR-3601
&НаКлиенте
Процедура ТолькоВыкупыПриИзменении(Элемент)
	
	Объект.ДатаНачала = дата('0001.01.01 00:00:00');
	Объект.ДатаОкончания = дата('0001.01.01 00:00:00');
	УстановитьПериод(); 
	УстановитьВидимостьДоступность();	

КонецПроцедуры

// письмерова 22.10.2024 BSLR-4033
&НаКлиенте
Процедура ИзменитьСтавкуНДС(Команда)
	
	СписокСтавок = Новый СписокЗначений;
	СписокСтавок.Добавить("22%");  // SLR-5126
	СписокСтавок.Добавить("20%");
	СписокСтавок.Добавить("10%");
	СписокСтавок.Добавить("Без НДС");
	// письмерова 21.01.2025 BSLR-4261
	СписокСтавок.Добавить("5%");  
	СписокСтавок.Добавить("7%");  
	ЭтоТовары = ?(ЭтаФорма.ТекущийЭлемент.Родитель.Имя = "ГруппаКомандыВыкуп",Ложь,Истина);

	СписокСтавок.ПоказатьВыборЭлемента(новый ОписаниеОповещения("ПослеВЫбораСтавкиНДС",ЭтотОбъект,ЭтоТовары),"Выберите ставку НДС",СписокСтавок[0]);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВЫбораСтавкиНДС(ВыбранныйЭлемент,ЭтоТовары) Экспорт
	
	Если ВыбранныйЭлемент = Неопределено Тогда
        Сообщить("Ставка НДС не выбрана");
    Иначе
		Если ЭтоТовары Тогда
			Для Каждого Эл Из Элементы.Товары.ВыделенныеСтроки Цикл
				Объект.Товары.НайтиПоИдентификатору(Эл).СтавкаНДС = ВыбранныйЭлемент;
				ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(Эл);
				ПересчитатьНДС(ТекущиеДанные);
				// письмерова 16.01.2025 BSLR-4243
				// если ндс комиссии не посчитан - пересчитаем по 20%  
				Если ТекущиеДанные.СуммаНДСВознаграждения = 0 Тогда
					ТекущиеДанные.СуммаНДСВознаграждения = Окр(ТекущиеДанные.Комиссия * ЗначениеОсновнойСтавкиНДС/(100 + ЗначениеОсновнойСтавкиНДС),2); // BSLR-5126
				КонецЕсли;
			КонецЦикла;
		Иначе
			Для Каждого Эл Из Элементы.Выкуп.ВыделенныеСтроки Цикл
				Объект.Выкуп.НайтиПоИдентификатору(Эл).СтавкаНДС = ВыбранныйЭлемент;
				ПересчитатьНДС(Объект.Выкуп.НайтиПоИдентификатору(Эл));
			КонецЦикла;	
		КонецЕсли;
	КонецЕсли;	
КонецПроцедуры

// письмерова 06.03.2026 BSLR-5361
&НаКлиенте
Процедура ПоказатьТолькоЮЛПриИзменении(Элемент)
	
	Если ПоказатьТолькоЮЛ ТОгда
		Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("ПродажаЮЛ", Истина);
	Иначе
		Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаДокументовПриАктивизацииСтроки(Элемент)
	ОбновитьИндексыДокументов();
КонецПроцедуры


// письмерова 23.10.2024 BSLR-3318
#Область ЗагрузкаКомпенсации

&НаКлиенте
Процедура ЗагрузитьКомпенсацииИзExcel(Команда)
	
	//Если НЕ ЗначениеЗаполнено(Период) Тогда
	//	ОбщегоНазначенияКлиент.СообщитьПользователю("Заполните период", , "Период");
	//	Возврат;
	//КонецЕсли;
	
	Если Объект.Компенсации.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииКомпенсации", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблица компенсаций содержит данные. Очистить?", РежимДиалогаВопрос.ДаНетОтмена);
	иначе
		ВыполнитьЗагрузкуЧерезФайлКомпенсации();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииКомпенсации(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		Объект.Компенсации.Очистить();
	КонецЕсли;
	
	ВыполнитьЗагрузкуЧерезФайлКомпенсации();
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлКомпенсации(ЭтоДекомпенсация = Ложь) // BSLR-4515 
	
	Попытка
		НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуКомпенсации",ЭтаФорма,ЭтоДекомпенсация),,,,,новый УникальныйИдентификатор); // BSLR-4515
	Исключение
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуКомпенсации(Результат,ЭтоДекомпенсация) Экспорт  // BSLR-4515
	
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	Результат = ЗагрузитьКомпенсацииИзExcelНаСервере(Результат.Адрес, РасширениеФайла, ЭтоДекомпенсация); // BSLR-4515
	
	Если НЕ Результат.Ошибка Тогда
		ЭтаФорма.Модифицированность = Истина; 
		УстановитьВидимостьДоступность(); // BSLR-5071
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьКомпенсацииИзExcelНаСервере(Знач Адрес, Расширение, ЭтоДекомпенсация) // BSLR-4515
	
	Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
	ПерваяСтрока = 0;
	ЕстьДанныеОтправления = Ложь;
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиКомпенсации(); 
	// письмерова 10.10.2025 BSLR-4515
	//Если НЕ ЭтоДекомпенсация ТОгда
	//	Объект.Компенсации.Очистить();	
	//КонецЕсли;
			
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);

	Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда
		
		УдалитьФайлы(ИмяФайла);
		
	КонецЕсли; 
	
	КоличествоСтрок   = MXL.ВысотаТаблицы;
	КоличествоКолонок = MXL.ШиринаСтраницы;
	
	Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
		Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
			ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
			
			Если ТекстЯчейки = "№ п/п" Тогда
				ПерваяСтрока = ТекущаяСтрока + 2;
			КонецЕсли;

			Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
				Прервать;
			КонецЕсли; 
		КонецЦикла;
		Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
			Прервать;
		КонецЕсли; 
	КонецЦикла;
	
	Если ПерваяСтрока = 0 Тогда
		Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчет о компенсациях """);
		Возврат Результат;
	КонецЕсли;

	НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиКомпенсации(MXL, ПерваяСтрока-2);
	ПустаяСтрока = 0;
	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
		
		Если ПустаяСтрока > 3 Тогда
			Прервать; // таблица закончена, остались только подписи
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
			ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
			ПРодолжить;
		КонецЕсли; 
		
		Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Всего к начислению")>0 Тогда
			ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
			ПРодолжить;
		КонецЕсли;
		// письмерова 10.10.2025 BSLR-4515
		Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Всего к удержанию")>0 Тогда
			ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
			ПРодолжить;
		КонецЕсли; 
		
		НоваяСтрока = ТаблицаТоваров.Добавить();
		ЗаполнитьСтрокуТаблицыТоваровКомпенсации(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла); 
		// письмерова 10.10.2025 BSLR-4515
		Если ЭтоДекомпенсация ТОгда
			НоваяСтрока.ТипКомпенсации = "Декомпенсация";
			НоваяСтрока.Количество = - НоваяСтрока.Количество;
			НоваяСтрока.СтоимостьВсего = - НоваяСтрока.СтоимостьВсего;
			НоваяСтрока.УменьшеноНаСумму = - НоваяСтрока.УменьшеноНаСумму;
			НоваяСтрока.ИтогоКНачислению = - НоваяСтрока.ИтогоКНачислению;
		КонецЕсли;
	КонецЦикла;

	ДополнитьДаннымиТоваровИНоменклатурыКомпенсации(ТаблицаТоваров); 
	
	Возврат Результат;
	
КонецФункции

 &НаСервереБезКонтекста
Функция СоответствиеКолонокФайлаЗагрузкиКомпенсации(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("Артикул", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Артикул"));
	Результат.Вставить("ТипКомпенсации",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Тип компенсации")); 
	Результат.Вставить("SKU",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SKU")); 
	Результат.Вставить("Количество",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Кол-во")); 
	Результат.Вставить("ШтрихКод",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Штрих-код"));  
	
	Результат.Вставить("СтоимостьТовара",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков+1, "Действительная стоимость товара")); 
	Результат.Вставить("СтоимостьВсего",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков+1, "Действительная стоимость - всего")); 
	Результат.Вставить("УменьшеноНаСумму",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков+1, "Уменьшено на сумму")); 
	Результат.Вставить("ИтогоКНачислению",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого к начислению"));
	// письмерова 10.10.2025 BSLR-4515, декомпенсация
	Если Результат.ИтогоКНачислению = 0 Тогда
		Результат.Вставить("ИтогоКНачислению",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Итого сумма излишне выплаченных компенсаций к удержанию"));
	КонецЕсли;
	Если Результат.ТипКомпенсации = 0 Тогда
		Результат.Вставить("ТипКомпенсации",  99);
	КонецЕсли;
	Если Результат.УменьшеноНаСумму = 0 Тогда
		Результат.Вставить("УменьшеноНаСумму",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Скорректировано на сумму"));
	КонецЕсли; 
	// письмерова 29.12.2025 BSLR-5207
	Если Результат.СтоимостьТовара = 0 Тогда
		Результат.Вставить("СтоимостьТовара",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Объявленная стоимость товара"));
	КонецЕсли;
	Если Результат.СтоимостьВсего = 0 Тогда
		Результат.Вставить("СтоимостьВсего",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Объявленная стоимость всего"));
	КонецЕсли;
               
	Возврат Результат;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровКомпенсации(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоВозврат = Ложь)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.Артикул       = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Артикул).ТекущаяОбласть.Текст);
	СтрокаПриемник.ТипКомпенсации  = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ТипКомпенсации).ТекущаяОбласть.Текст);
	СтрокаПриемник.Количество	 = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Количество).ТекущаяОбласть.Текст);	
	СтрокаПриемник.ШтрихКод    	 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ШтрихКод).ТекущаяОбласть.Текст);
	
	СтрокаПриемник.СтоимостьТовара    	 = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьТовара).ТекущаяОбласть.Текст);
    СтрокаПриемник.СтоимостьВсего    	 = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СтоимостьВсего).ТекущаяОбласть.Текст);
	СтрокаПриемник.УменьшеноНаСумму    	 = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.УменьшеноНаСумму).ТекущаяОбласть.Текст);
	СтрокаПриемник.ИтогоКНачислению    	 = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИтогоКНачислению).ТекущаяОбласть.Текст);

	// sku
	ИД = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SKU).ТекущаяОбласть.Текст);
	// формализация данных под требования хранения данных в системе, письмерова   1 135 800 695 или 788 867 123
	// 10 или 9 символов
	Если СтрДлина(ИД) = 9 Тогда
		Гр1 = Лев(ИД,3);
		Гр2 = Сред(ИД,4,3);
		ГР3 = Прав(ИД,3);
		ИДСтрокой = Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
	ИначеЕсли СтрДлина(ИД) = 10 Тогда 
	    Гр0 = Лев(ИД,1);
		Гр1 = Сред(ИД,2,3);
		Гр2 = Сред(ИД,5,3);
		ГР3 = Прав(ИД,3);
		ИДСтрокой = Гр0 + Символы.НПП + Гр1 + Символы.НПП + Гр2 + Символы.НПП + Гр3;
	Иначе
		ИДСтрокой = ИД;
	КонецЕсли; 
	СтрокаПриемник.SKU = ИДСтрокой; 
	
КонецПроцедуры

&НаСервере
Процедура ДополнитьДаннымиТоваровИНоменклатурыКомпенсации(ТаблицаТоваров)

 
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.SKU КАК SKU,
	                      |	ТЗ.Артикул КАК Артикул,
	                      |	ТЗ.ТипКомпенсации КАК ТипКомпенсации,
	                      |	ТЗ.Количество КАК Количество,
	                      |	ТЗ.ШтрихКод КАК ШтрихКод,
	                      |	ТЗ.СтоимостьТовара КАК СтоимостьТовара,
	                      |	ТЗ.СтоимостьВсего КАК СтоимостьВсего,
	                      |	ТЗ.УменьшеноНаСумму КАК УменьшеноНаСумму,
	                      |	ТЗ.ИтогоКНачислению КАК ИтогоКНачислению
	                      |ПОМЕСТИТЬ ВТ_Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Таблица.SKU КАК SKU,
	                      |	ВТ_Таблица.Артикул КАК Артикул,
	                      |	ВТ_Таблица.ТипКомпенсации КАК ТипКомпенсации,
	                      |	ВТ_Таблица.Количество КАК Количество,
	                      |	ВТ_Таблица.ШтрихКод КАК ШтрихКод,
	                      |	ВТ_Таблица.СтоимостьТовара КАК СтоимостьТовара,
	                      |	ВТ_Таблица.СтоимостьВсего КАК СтоимостьВсего,
	                      |	ВТ_Таблица.УменьшеноНаСумму КАК УменьшеноНаСумму,
	                      |	ВТ_Таблица.ИтогоКНачислению КАК ИтогоКНачислению,
	                      |	топ_ТоварыТорговыхПлощадок.Ссылка КАК Товар
	                      |ПОМЕСТИТЬ ВТ_ТоварыПредварительно
	                      |ИЗ
	                      |	ВТ_Таблица КАК ВТ_Таблица
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ПО (ВТ_Таблица.SKU = топ_ТоварыТорговыхПлощадок.sku_fbo
	                      |				ИЛИ ВТ_Таблица.SKU = топ_ТоварыТорговыхПлощадок.sku_fbs)
	                      |			И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_ТоварыПредварительно.SKU КАК SKU,
	                      |	ВТ_ТоварыПредварительно.Артикул КАК Артикул,
	                      |	ВТ_ТоварыПредварительно.ТипКомпенсации КАК ТипКомпенсации,
	                      |	ВТ_ТоварыПредварительно.Количество КАК Количество,
	                      |	ВТ_ТоварыПредварительно.ШтрихКод КАК ШтрихКод,
	                      |	ВТ_ТоварыПредварительно.СтоимостьТовара КАК СтоимостьТовара,
	                      |	ВТ_ТоварыПредварительно.СтоимостьВсего КАК СтоимостьВсего,
	                      |	ВТ_ТоварыПредварительно.УменьшеноНаСумму КАК УменьшеноНаСумму,
	                      |	ВТ_ТоварыПредварительно.ИтогоКНачислению КАК ИтогоКНачислению,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_ТоварыПредварительно.Товар ЕСТЬ NULL
	                      |			ТОГДА топ_ТоварыТорговыхПлощадок.Ссылка
	                      |		ИНАЧЕ ВТ_ТоварыПредварительно.Товар
	                      |	КОНЕЦ КАК Товар
	                      |ПОМЕСТИТЬ ВТ_ТоварыПолная
	                      |ИЗ
	                      |	ВТ_ТоварыПредварительно КАК ВТ_ТоварыПредварительно
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК топ_ТоварыТорговыхПлощадок
	                      |		ПО ВТ_ТоварыПредварительно.Артикул = топ_ТоварыТорговыхПлощадок.КодПоставщика
	                      |			И (топ_ТоварыТорговыхПлощадок.ЛичныйКабинет = &ЛичныйКабинет)
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	МАКСИМУМ(ВТ_ТоварыПолная.Товар) КАК Товар,
	                      |	ВТ_ТоварыПолная.SKU КАК SKU,
	                      |	ВТ_ТоварыПолная.Артикул КАК Артикул,
	                      |	ВТ_ТоварыПолная.ТипКомпенсации КАК ТипКомпенсации,
	                      |	СУММА(ВТ_ТоварыПолная.Количество) КАК Количество,
	                      |	ВТ_ТоварыПолная.ШтрихКод КАК ШтрихКод,
	                      |	СУММА(ВТ_ТоварыПолная.СтоимостьТовара) КАК СтоимостьТовара,
	                      |	СУММА(ВТ_ТоварыПолная.СтоимостьВсего) КАК СтоимостьВсего,
	                      |	СУММА(ВТ_ТоварыПолная.УменьшеноНаСумму) КАК УменьшеноНаСумму,
	                      |	СУММА(ВТ_ТоварыПолная.ИтогоКНачислению) КАК ИтогоКНачислению,
	                      |	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
	                      |	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
	                      |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
	                      |			ТОГДА ИСТИНА
	                      |		ИНАЧЕ ЛОЖЬ
	                      |	КОНЕЦ КАК ЭтоНабор,
	                      |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
	                      |			ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
	                      |		ИНАЧЕ топ_СоответствиеТоваров.Упаковка
	                      |	КОНЕЦ КАК ЕдиницаИзмерения
	                      |ИЗ
	                      |	ВТ_ТоварыПолная КАК ВТ_ТоварыПолная
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
	                      |		ПО ВТ_ТоварыПолная.Товар = топ_СоответствиеТоваров.Товар
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_ТоварыПолная.SKU,
	                      |	ВТ_ТоварыПолная.Артикул,
	                      |	ВТ_ТоварыПолная.ТипКомпенсации,
	                      |	ВТ_ТоварыПолная.ШтрихКод,
	                      |	топ_СоответствиеТоваров.Номенклатура,
	                      |	топ_СоответствиеТоваров.Характеристика,
	                      |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяССылка)
	                      |			ТОГДА топ_СоответствиеТоваров.Номенклатура.ЕдиницаИзмерения
	                      |		ИНАЧЕ топ_СоответствиеТоваров.Упаковка
	                      |	КОНЕЦ,
	                      |	ВЫБОР
	                      |		КОГДА топ_СоответствиеТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
	                      |			ТОГДА ИСТИНА
	                      |		ИНАЧЕ ЛОЖЬ
	                      |	КОНЕЦ");
	
	
	Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
	Запрос.УстановитьПараметр("ТЗ",ТаблицаТоваров);
	// письмерова 10.10.2025 BSLR-4515
	ВЫборка = Запрос.Выполнить().Выбрать();
	// дозаполнение таблицы документа 
	Пока Выборка.Следующий() Цикл
		нСтр = Объект.Компенсации.Добавить();
		ЗаполнитьЗначенияСвойств(нСтр,Выборка);
	КонецЦикла;
	
КонецПроцедуры

 &НаСервереБезКонтекста
Функция ПолучитьТаблицуЗагрузкиКомпенсации() Экспорт
	
	СписокТоваров = Новый ТаблицаЗначений;
	
	СписокТоваров.Колонки.Добавить("Артикул",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(150))); 
	СписокТоваров.Колонки.Добавить("ТипКомпенсации",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(100))); 
	СписокТоваров.Колонки.Добавить("SKU",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(80))); 
	СписокТоваров.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,3))); 
	СписокТоваров.Колонки.Добавить("ШтрихКод",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(50))); 
	СписокТоваров.Колонки.Добавить("СтоимостьТовара",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2))); 
	СписокТоваров.Колонки.Добавить("СтоимостьВсего",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2))); 
	СписокТоваров.Колонки.Добавить("УменьшеноНаСумму",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2))); 
	СписокТоваров.Колонки.Добавить("ИтогоКНачислению",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2))); 
	СписокТоваров.Колонки.Добавить("ЭтоНабор",Новый ОписаниеТипов("Булево")); 

	Возврат СписокТоваров;
	
КонецФункции 


// письмерова 10.10.2025 BSLR-4515
&НаКлиенте
Процедура ЗагрузитьДекомпенсацииИзExcel(Команда) 
	
	ВыполнитьЗагрузкуЧерезФайлКомпенсации(Истина);  
	
КонецПроцедуры

//Крупа 09.04.2026 BSLR-5437  
// заливка наборов
&НаСервере
Процедура УстановитьУсловноеОформлениеКомпенсация()  

	ЭлементыФормы = ЭтаФорма.Элементы;
	
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ПолеФормы    = ЭлементыФормы.Компенсации; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеФормы.Имя);
	
	Если ПолеФормы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПолеЭлемента.Использование = Истина;
	
	Отбор = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Компенсации.ЭтоНабор");
	Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	Отбор.ПравоеЗначение = Истина;
	
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.НейтральноЗеленый); 	
	
КонецПроцедуры



#КонецОбласти


// письмерова 13.11.2024 BSLR-3215
#Область ПеревыставлениеУслугOZON

// загрузка отчета
&НаКлиенте
Процедура ЗагрузитьОтчетОПеревыставленииУслуг(Команда)  
	
	ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
	Если РаспределятьПоПоставщикам(Объект.ЛичныйКабинет) И ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Группа доступа партнера";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	Если Объект.ПеревыставлениеУслуг.Количество() Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОбОчищенииПеревыставлениеУслуг", ЭтаФорма);
		ПоказатьВопрос(ОписаниеОповещения, "Таблица перевыставления услуг содержит данные. Очистить? Связанные документы будут помечены на удаление.", РежимДиалогаВопрос.ДаНетОтмена);
	иначе
		ВыполнитьЗагрузкуЧерезФайлПеревыставлениеУслуг();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПослеОтветаНаВопросОбОчищенииПеревыставлениеУслуг(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда 
		
		ПометитьНаУделениеСвязанныеПеревыставлениеУслуг();				
		ВыполнитьЗагрузкуЧерезФайлПеревыставлениеУслуг(); 
		
	КонецЕсли;   
	
КонецПроцедуры  

&НаСервере
ПРоцедура ПометитьНаУделениеСвязанныеПеревыставлениеУслуг()
	
	Для Каждого Стр из Объект.ПеревыставлениеУслуг Цикл
		
		Если Стр.ДокументНавигационнаяСсылка = "" Тогда // пустая строка
			Продолжить;
		КонецЕсли;
		
		НС = Стр.ДокументНавигационнаяСсылка;
		// пометка на удаление документа по навигационной ссылке
	    ПерваяТочка = Найти(НС, "e1cib/data/");
	    ВтораяТочка = Найти(НС, "?ref=");
	    
	    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
	    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
	    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
	    СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
		
		Попытка документОб = СсылкаДляУдаления.ПолучитьОбъект(); Исключение КонецПопытки; 
		Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки; 
		
	КонецЦикла;  
	
	Объект.ПеревыставлениеУслуг.Очистить(); 
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуЧерезФайлПеревыставлениеУслуг()
	
	Попытка
		НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуПеревыставлениеУслуг",ЭтаФорма,нЕопределено),,,,,новый УникальныйИдентификатор); 
	Исключение
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
	КонецПопытки;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуПеревыставлениеУслуг(Результат,ДополнительныеПараметры) Экспорт 
	
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	Результат = ЗагрузитьПеревыставлениеУслугИзExcelНаСервере(Результат.Адрес, РасширениеФайла); 
	
	Если НЕ Результат.Ошибка Тогда
		ЭтаФорма.Модифицированность = Истина;  
		// письмерова 28.11.2024 BSLR-3215
		Если РаспределятьПоПоставщикам(Объект.ЛичныйКабинет) Тогда
			ОписаниеОповещения = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗагрузкеРеестраСЧФ", ЭтаФорма);
			ПоказатьВопрос(ОписаниеОповещения, "Таблица Перевыставление услуг загружена. Загрузить реестр счетов фактур?", РежимДиалогаВопрос.ДаНет);
		КонецЕсли;
	КонецЕсли;  
	
	// письмерова 24.02.2025 BSLR-4378
	Если Объект.Документы.Количество() = 0 ТОгда
		// удаление услуги экваринг, т.к. он дублирует данные из загрузки перевыставления услуг
		УдалениеУслугиЭкваринга();
	КонецЕсли;
		
	УстановитьВидимостьДоступность();
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьПеревыставлениеУслугИзExcelНаСервере(Знач Адрес, Расширение)
	
	Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
	ПерваяСтрока = 0;
	ЕстьДанныеОтправления = Ложь;
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиПеревыставлениеУслуг();
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);

	Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	MXL = Новый ТабличныйДокумент;
	MXL.Прочитать(ИмяФайла);
	
	Файл = Новый Файл(ИмяФайла);
	Если Файл.Существует() Тогда
		
		УдалитьФайлы(ИмяФайла);
		
	КонецЕсли; 
	
	КоличествоСтрок   = MXL.ВысотаТаблицы;
	КоличествоКолонок = MXL.ШиринаСтраницы;
	
	Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
		Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
			ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
			
			Если ТекстЯчейки = "№" Тогда
				ПерваяСтрока = ТекущаяСтрока + 1;
			КонецЕсли;

			Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
				Прервать;
			КонецЕсли; 
		КонецЦикла;
		Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
			Прервать;
		КонецЕсли; 
	КонецЦикла;
	
	Если ПерваяСтрока = 0 Тогда
		Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Отчет о перевыставлении услуг """);
		Возврат Результат;
	КонецЕсли;

	НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, ПерваяСтрока-2);
	ПустаяСтрока = 0;
	Индекс = 1;
	Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
		
		Если ПустаяСтрока > 2 Тогда
			Прервать; // таблица закончена, остались только подписи
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
			ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
			ПРодолжить;
		КонецЕсли; 
		
		Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
			ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
			Прервать;
		КонецЕсли; 
		
		НоваяСтрока = ТаблицаТоваров.Добавить();
		ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла);
		 
		Если Объект.ЛичныйКабинет.СоздаватьОтдельныеДокументыДляУслугСНДС ТОгда // всем индекс, что бы не потерять данные
			// письмерова 28.11.2024 BSLR-3215
			Если НоваяСтрока.СуммаНДС <> 0 Тогда // только тем у кого есть ндс 
				НоваяСтрока.Индекс = Индекс;	
				Индекс = Индекс + 1;
			КонецЕсли;	
		КонецЕсли;
	КонецЦикла;  
	

	// письмерова 28.11.2024 BSLR-3215 
	Если НЕ Объект.ЛичныйКабинет.СоздаватьОтдельныеДокументыДляУслугСНДС ТОгда
		ТаблицаТоваров.Свернуть("Исполнитель,ИНН,КПП,НаименованиеУслуги", "Сумма");
		ТаблицаТоваров.Колонки.Добавить("СуммаНДС",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
	Иначе
		ТаблицаТоваров.Свернуть("Исполнитель,ИНН,КПП,НаименованиеУслуги,СуммаНДС,Индекс", "Сумма");
	КонецЕсли;

	ДополнитьДаннымиТоваровИНоменклатурыПеревыставлениеУслуг(ТаблицаТоваров); 
	
	Возврат Результат;
	
КонецФункции

 &НаСервереБезКонтекста
Функция СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("Исполнитель", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Исполнитель"));
	Результат.Вставить("ИНН",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "ИНН")); 
	Результат.Вставить("КПП",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "КПП")); 
	Результат.Вставить("НаименованиеУслуги",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Наименование работ, услуг")); 
	Результат.Вставить("Сумма",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Сумма с НДС (Руб.)"));  
	Результат.Вставить("СуммаНДС",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Сумма НДС* (Руб.)"));  
	
	// реестр
	Результат.Вставить("НомерСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Номер счёта-фактуры"));
	Результат.Вставить("ДатаСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Дата счёта-фактуры")); 
	
	 
	Возврат Результат;
	
КонецФункции

 &НаСервереБезКонтекста
Функция ПолучитьТаблицуЗагрузкиПеревыставлениеУслуг() Экспорт
	
	СписокТоваров = Новый ТаблицаЗначений;
	
	СписокТоваров.Колонки.Добавить("Исполнитель",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(150))); 
	СписокТоваров.Колонки.Добавить("ИНН",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(20))); 
	СписокТоваров.Колонки.Добавить("КПП",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(20)));
	СписокТоваров.Колонки.Добавить("НаименованиеУслуги",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(250)));
	СписокТоваров.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2))); 
	СписокТоваров.Колонки.Добавить("СуммаНДС",Новый ОписаниеТипов("Число" ,,,, Новый КвалификаторыЧисла(10,2)));
	// не корректная свертка, т.к. по одному поставщику могут быть абсолютер одинаковые строки, поэтому
	// проставляем индекс в строки с непустым инн и только потом сворачиваем
    СписокТоваров.Колонки.Добавить("Индекс",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(10)));  
	
	// для реестра сч/факт
    СписокТоваров.Колонки.Добавить("НомерСЧФАКТ",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(10)));  
    СписокТоваров.Колонки.Добавить("ДатаСЧФАКТ",Новый ОписаниеТипов("Строка" ,,,, Новый КвалификаторыСтроки(10)));  
	
	Возврат СписокТоваров;
	
КонецФункции 

&НаСервере
Процедура ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(СтрокаПриемник, ТабличныйДокумент, ТекущаяСтрока, НомераКолонокФайла, ЭтоРЕЕСТРСЧФ = Ложь, СтандартныйФормат = Истина)
	
	XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
	
	СтрокаПриемник.Исполнитель   = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Исполнитель).ТекущаяОбласть.Текст);
	СтрокаПриемник.ИНН  		 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
	СтрокаПриемник.КПП			 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);	
	СтрокаПриемник.НаименованиеУслуги = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НаименованиеУслуги).ТекущаяОбласть.Текст);
	
	//Попытка
		СтрокаПриемник.Сумма   = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Сумма).ТекущаяОбласть.Текст);
	//Исключение       
	//	СуммаСтрокой = ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Сумма).ТекущаяОбласть.Текст;
	//	СуммаСтрокой = СтрЗаменить(СуммаСтрокой, ",", "");    
	//	СуммаСтрокой = СтрЗаменить(СуммаСтрокой, " ", ""); //Крупа BSLR-5354 	
	//	СтрокаПриемник.Сумма = Число(СуммаСтрокой);   //Крупа BSLR-5354
	//КонецПопытки;   
	
	//Попытка
		СтрокаПриемник.СуммаНДС    	 = Число(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаНДС).ТекущаяОбласть.Текст);
	//Исключение  
	//	СуммаНДССтрокой = ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.СуммаНДС).ТекущаяОбласть.Текст;
	//	СуммаНДССтрокой = СтрЗаменить(СуммаНДССтрокой, ",", "");    
	//	СуммаНДССтрокой = СтрЗаменить(СуммаНДССтрокой, " ", ""); //Крупа BSLR-5354 
	//	СтрокаПриемник.СуммаНДС = Число(СуммаНДССтрокой); 
	//КонецПопытки;
	
	Если ЭтоРЕЕСТРСЧФ Тогда
		СтрокаПриемник.НомерСЧФАКТ    	 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСЧФАКТ).ТекущаяОбласть.Текст);
	    СтрокаПриемник.ДатаСЧФАКТ    	 = Строка(ТабличныйДокумент.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСЧФАКТ).ТекущаяОбласть.Текст);
	Иначе
		// если не разделять по поставщикам - очистим строки без ндс,
		// они будуь свернуты и поставщик там будет ООО Интернет решения
		Если НЕ Объект.ЛичныйКабинет.СоздаватьОтдельныеДокументыДляУслугСНДС ТОгда
			//Если СтрокаПриемник.СуммаНДС = 0 Тогда письмерова 28.11.2024 BSLR-3215 - всех затираем
				СтрокаПриемник.Исполнитель = "";	
				СтрокаПриемник.ИНН = "";	
				СтрокаПриемник.КПП = "";
			//КонецЕсли;
		Иначе  // письмерова 28.11.2024 BSLR-3215 - затираем только нулевые ндс
			Если СтрокаПриемник.СуммаНДС = 0 Тогда 
				СтрокаПриемник.Исполнитель = "";	
				СтрокаПриемник.ИНН = "";	
				СтрокаПриемник.КПП = "";
			КонецЕсли;
		КонецЕсли;
	КонецЕсли; 
	
КонецПроцедуры

&НаСервере
Процедура ДополнитьДаннымиТоваровИНоменклатурыПеревыставлениеУслуг(ТаблицаТоваров) 
	
	// письмерова 17.12.2024 BSLR-4200
	// услуги могут перименовать
	// предварительно нужно выявить такие
	ВремТабл = ТаблицаТоваров.Скопировать(,"НаименованиеУслуги");
	ВремТабл.Свернуть("НаименованиеУслуги"); 
	// проверим есть ли УслгаТП по наименованию
	Для Каждого Стр из ВремТабл Цикл
		
		УслугаТП = Справочники.топ_УслугиТорговыхПлощадок.НайтиПоНаименованию(Стр.НаименованиеУслуги);
		
		Если УслугаТП  = Справочники.топ_УслугиТорговыхПлощадок.ПустаяСсылка() Тогда
			// создаем услугу и номенклатуру
			Перечень = Новый соответствие;
			Перечень.Вставить(СТРЗаменить(Стр.НаименованиеУслуги," ",""),Стр.НаименованиеУслуги);
			ПереченьНДС = Новый соответствие;
			ПереченьНДС.Вставить(СТРЗаменить(Стр.НаименованиеУслуги," ",""),"20%");    
			
			топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.СоздатьЭлементыНоменклатурыУслугМП(Перечень,ПереченьНДС,
			Перечисления.топ_ТорговыеПлощадки.OZON,
			Неопределено);
		КонецЕсли;	
		
	КонецЦикла;
	

 
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	ТЗ.Исполнитель КАК Исполнитель,
	                      |	ТЗ.ИНН КАК ИНН,
	                      |	ТЗ.КПП КАК КПП,
	                      |	ТЗ.НаименованиеУслуги КАК НаименованиеУслуги,
	                      |	ТЗ.Сумма КАК Сумма,
	                      |	ТЗ.СуммаНДС КАК СуммаНДС
	                      |ПОМЕСТИТЬ ВТ_Таблица
	                      |ИЗ
	                      |	&ТЗ КАК ТЗ
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	МАКСИМУМ(Контрагенты.Ссылка) КАК Ссылка,
	                      |	Контрагенты.ИНН КАК ИНН
	                      |ПОМЕСТИТЬ ВТ_Контрагенты
	                      |ИЗ
	                      |	Справочник.Контрагенты КАК Контрагенты
	                      |ГДЕ
	                      |	НЕ Контрагенты.ПометкаУдаления
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	Контрагенты.ИНН
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_Таблица.Исполнитель КАК Исполнитель,
	                      |	ВТ_Таблица.Исполнитель КАК НаименованиеПокупателя,
	                      |	"""" КАК ЮридическийАдресПокупателя,
	                      |	ВТ_Таблица.ИНН КАК ИНН,
	                      |	ВТ_Таблица.КПП КАК КПП,
	                      |	ВТ_Таблица.НаименованиеУслуги КАК НаименованиеУслуги,
	                      |	ВТ_Таблица.Сумма КАК Сумма,
	                      |	ВТ_Таблица.СуммаНДС КАК СуммаНДС,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.ИНН = """"
	                      |			ТОГДА &ИнтернетРешения
	                      |		ИНАЧЕ ЕСТЬNULL(ВТ_Контрагенты.Ссылка, ВТ_Таблица.Исполнитель + "" (ИНН "" + ВТ_Таблица.ИНН + "" ,КПП "" + ВТ_Таблица.КПП + "")"")
	                      |	КОНЕЦ КАК Поставщик,
	                      |	топ_СопоставлениеНоменклатурыУслуг.УслугаМП КАК УслугаМП,
	                      |	топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги КАК Номенклатура,
	                      |	ВЫБОР
	                      |		КОГДА ВТ_Таблица.СуммаНДС = 0
	                      |			ТОГДА ""Без НДС"" 
						  // письмерова 21.07.2025 BSLR-4782
	                      |		ИНАЧЕ ВЫБОР
	                      |				КОГДА топ_СопоставлениеНоменклатурыУслуг.УслугаМП.СтавкаНДС <> """"
	                      |					ТОГДА топ_СопоставлениеНоменклатурыУслуг.УслугаМП.СтавкаНДС
	                      |				ИНАЧЕ топ_СопоставлениеНоменклатурыУслуг.НоменклатураУслуги.СтавкаНДС
	                      |			КОНЕЦ
	                      |	КОНЕЦ КАК СтавкаНДС
	                      |ИЗ
	                      |	ВТ_Таблица КАК ВТ_Таблица
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
	                      |		ПО ВТ_Таблица.ИНН = ВТ_Контрагенты.ИНН
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СопоставлениеНоменклатурыУслуг КАК топ_СопоставлениеНоменклатурыУслуг
	                      |		ПО ВТ_Таблица.НаименованиеУслуги = топ_СопоставлениеНоменклатурыУслуг.УслугаМП.Наименование");
	
	
	Запрос.УстановитьПараметр("ЛичныйКабинет",Объект.ЛичныйКабинет);
	Запрос.УстановитьПараметр("ИнтернетРешения",Объект.ЛичныйКабинет.Контрагент);
	Запрос.УстановитьПараметр("ТЗ",ТаблицаТоваров);
	//Крупа BSLR-5355 24.03.2026
	УстановитьПривилегированныйРежим(Истина);     
	ТаблицаИтоговая = Запрос.Выполнить().Выгрузить(); 
	УстановитьПривилегированныйРежим(Ложь);      
	ТаблицаИтоговая.Сортировать("Поставщик");	

	Если СоздаватьКонтрагентов ТОгда
		Для Каждого Стр из ТаблицаИтоговая Цикл
			Если ТипЗнч(Стр.Поставщик) = Тип("Строка") Тогда
				НовыйКонтрагент = СоздатьЮЛ(Стр,Объект.ЛичныйКабинет.Организация, истина);  
				Сообщить("Создан новый контрагент " + НовыйКонтрагент); 
				Стр.Поставщик = НовыйКонтрагент.Ссылка;
			КонецЕсли;
		КонецЦикла; 		   

	КонецЕсли;
	
	Объект.ПеревыставлениеУслуг.Очистить();
	Объект.ПеревыставлениеУслуг.Загрузить(ТаблицаИтоговая);
	
	
КонецПроцедуры

// письмерова 24.02.2025 BSLR-4378
&НаСервере
Процедура УдалениеУслугиЭкваринга()  
	
	Для Каждого Стр из Объект.Услуги Цикл
		Если Стр.НаименованиеМП = "MarketplaceRedistributionOfAcquiringOperation" 
				Или Стр.НаименованиеМП = "OperationMarketplacePackageRedistribution" Тогда	// BSLR-4908		
			Объект.Услуги.Удалить(Стр);
			//Прервать;			
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры	


// загрузка реестра

&НаКлиенте
Процедура ПослеОтветаНаВопросОЗагрузкеРеестраСЧФ(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Отмена Тогда
		Возврат;
	КонецЕсли;
	
	Если Результат = КодВозвратаДиалога.Да Тогда 
		ЗагрузитьРеестрСФ(Неопределено); 
	КонецЕсли;
	
КонецПроцедуры 

&НаКлиенте
Процедура ЗагрузитьРеестрСФ(Команда) 
	
	Попытка
		НачатьПомещениеФайлаНаСервер(Новый ОписаниеОповещения("ВыполнитьЗагрузкуПеревыставлениеУслугРЕЕСТРСЧФ",ЭтаФорма,нЕопределено),,,,,новый УникальныйИдентификатор); 
	Исключение
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не получилось открыть файл. Скорее всего он уже открыт на вашем компьютере");
	КонецПопытки; 
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузкуПеревыставлениеУслугРЕЕСТРСЧФ(Результат,ДополнительныеПараметры) Экспорт 
	
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	РасширениеФайла = Результат.СсылкаНаФайл.Расширение; 
	Результат = ЗагрузитьПеревыставлениеУслугРЕЕСТРСЧФИзExcelНаСервере(Результат.Адрес, РасширениеФайла); 
	
	Если НЕ Результат.Ошибка Тогда
		ЭтаФорма.Модифицированность = Истина;  
	КонецЕсли;  
	
КонецПроцедуры

&НаСервере
Функция ЗагрузитьПеревыставлениеУслугРЕЕСТРСЧФИзExcelНаСервере(Знач Адрес, Расширение)
	
	Результат = Новый Структура("Ошибка, Сообщение", Ложь, "");
	ПерваяСтрока = 0;
	ЕстьДанныеОтправления = Ложь;
	ТаблицаТоваров = ПолучитьТаблицуЗагрузкиПеревыставлениеУслуг();
	ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
	ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);

	Если Расширение <> ".xls" И Расширение <> ".xlsx" Тогда
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, можно загрузить только файл формата Excel"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецЕсли;
	
	Попытка
		ФайлВременногоХранилища.Записать(ИмяФайла);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = "Ошибка при загрузке файла, повторите попытку"; 
		Сообщить(Результат.Сообщение);
		Возврат Результат;
	КонецПопытки;
	УдалитьИзВременногоХранилища(Адрес);
	
	//Крупа 5354 +++   
	//пробуем прочитать как СпособЧтенияЗначенийТабличногоДокумента.Текст
	СтандартныйФорматЗначений = Истина;
	Попытка 
		MXL = Новый ТабличныйДокумент;
		MXL.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);  //Крупа 5354
		Файл = Новый Файл(ИмяФайла);
		//Если Файл.Существует() Тогда
		//	
		//	УдалитьФайлы(ИмяФайла);
		//	
		//КонецЕсли; 
		
		КоличествоСтрок   = MXL.ВысотаТаблицы;
		КоличествоКолонок = MXL.ШиринаСтраницы;
		
		Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
			Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
				ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
				
				Если ТекстЯчейки = "№" Тогда
					ПерваяСтрока = ТекущаяСтрока + 1;
				КонецЕсли;

				Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
					Прервать;
				КонецЕсли; 
			КонецЦикла;
			Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
				Прервать;
			КонецЕсли; 
		КонецЦикла;
		
		Если ПерваяСтрока = 0 Тогда
			Результат.Ошибка = Истина;
				ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Реестр по агентам и счетам-фактурам""");
			Возврат Результат;
		КонецЕсли;  
		
		НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, ПерваяСтрока-2);
		
		ПустаяСтрока = 0;
		Индекс = 1;
		Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
			
			Если ПустаяСтрока > 2 Тогда
				Прервать; // таблица закончена, остались только подписи
			КонецЕсли;
			
			Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
				ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
				ПРодолжить;
			КонецЕсли; 
			
			Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
				ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
				Прервать;
			КонецЕсли; 
			
			НоваяСтрока = ТаблицаТоваров.Добавить();
			ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина, СтандартныйФорматЗначений);
			
		КонецЦикла;  
		ДополнитьДаннымиИзРеестраСЧФПеревыставлениеУслуг(ТаблицаТоваров); 	
		
	Исключение 
		СтандартныйФорматЗначений = Ложь;   
	КонецПопытки;   
	
	//пробуем прочитать через СпособЧтенияЗначенийТабличногоДокумента.Значение	
	Если НЕ СтандартныйФорматЗначений Тогда
		Попытка
			MXL = Новый ТабличныйДокумент;
			MXL.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);  
			Файл = Новый Файл(ИмяФайла);
			Если Файл.Существует() Тогда
				
				УдалитьФайлы(ИмяФайла);
				
			КонецЕсли; 
			
			КоличествоСтрок   = MXL.ВысотаТаблицы;
			КоличествоКолонок = MXL.ШиринаСтраницы;
			
			Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
				Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
					ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
					
					Если ТекстЯчейки = "№" Тогда
						ПерваяСтрока = ТекущаяСтрока + 1;
					КонецЕсли;

					Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
						Прервать;
					КонецЕсли; 
				КонецЦикла;
				Если ЗначениеЗаполнено(ПерваяСтрока) Тогда
					Прервать;
				КонецЕсли; 
			КонецЦикла;
			
			Если ПерваяСтрока = 0 Тогда
				Результат.Ошибка = Истина;
					ОбщегоНазначения.СообщитьПользователю("Выбран не тот документ, скачайте из ЛК на маркетплейсе документ ""Реестр по агентам и счетам-фактурам""");
				Возврат Результат;
			КонецЕсли;  
			
			НомераКолонокФайла = СоответствиеКолонокФайлаЗагрузкиПеревыставлениеУслуг(MXL, ПерваяСтрока-2);
			
			ПустаяСтрока = 0;
			Индекс = 1;
			Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
				
				Если ПустаяСтрока > 2 Тогда
					Прервать; // таблица закончена, остались только подписи
				КонецЕсли;
				
				Если Не ЗначениеЗаполнено(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст)) ТОгда
					ПустаяСтрока = ПустаяСтрока + 1; // колонка № п/п
					ПРодолжить;
				КонецЕсли; 
				
				Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
					ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
					Прервать;
				КонецЕсли; 
				
				НоваяСтрока = ТаблицаТоваров.Добавить();
				ЗаполнитьСтрокуТаблицыТоваровПеревыставлениеУслуг(НоваяСтрока, MXL, ТекущаяСтрока, НомераКолонокФайла, Истина, СтандартныйФорматЗначений);
				 
			КонецЦикла;  
			
			ДополнитьДаннымиИзРеестраСЧФПеревыставлениеУслуг(ТаблицаТоваров);
		Исключение 
			Результат.Ошибка = Истина;
			Результат.Сообщение = "Ошибка при чтении значений файла"; 
			Сообщить(Результат.Сообщение);
			Возврат Результат;  
		КонецПопытки;    
	КонецЕсли;
		
	//Крупа 5354 ---
	
	Возврат Результат;
	
КонецФункции      


&НаСервере
Процедура ДополнитьДаннымиИзРеестраСЧФПеревыставлениеУслуг(ТаблицаТоваров)
	
	// не можем делать через запрос, т.к. в таблицах могут быть строки - полные дубли (без номера сч/факт)
	// поэтому делаем в цикле 
	
	Для Каждого Стр из ТаблицаТоваров Цикл 
		
		//Если Стр.НомерСЧФАКТ = "" Тогда // большинство строк пустые, но нужно пересчитать ставку НДС
		//	Продолжить;
		//КонецЕсли;
		
		Отбор = Новый Структура("ИНН,Сумма,СуммаНДС", Стр.ИНН, Стр.Сумма, Стр.СуммаНДС);  

		НайтиСтроки = Объект.ПеревыставлениеУслуг.НайтиСтроки(Отбор);
		
		Если НайтиСтроки.Количество() Тогда
			Для Каждого Ст Из НайтиСтроки Цикл
				НоваяСтавка = ВычислитьСтавкуНДСПоСуммам(Стр.Сумма, Стр.СуммаНДС);  //Крупа  BSLR-5354
				Ст.СтавкаНДС = Справочники.СтавкиНДС.НайтиПоНаименованию(НоваяСтавка);    //Крупа  BSLR-5354
				Если Ст.НомерСчФакт <> "" Тогда // заполнен ранее
					Продолжить;
				Иначе
					Ст.НомерСчФакт = Стр.НомерСЧФАКТ;
					Ст.ДатаСчФакт = ?(Стр.ДатаСЧФАКТ = "", "", Дата("" + Стр.ДатаСЧФАКТ + " 0:00:00")); 	
					//Прервать;  //закомментировано Крупа  BSLR-5354, ндс для дублей не пересчитывался
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;    
		
		
	КонецЦикла; 
		
КонецПроцедуры    

&НаСервереБезКонтекста
Функция ВычислитьСтавкуНДСПоСуммам(Знач СуммаСНДС, Знач СуммаНДС)  //Крупа  BSLR-5354    
    Если СуммаНДС = 0 ИЛИ СуммаСНДС = СуммаНДС Тогда
        Возврат "Без НДС";
    КонецЕсли;
    
    СуммаБезНДС = СуммаСНДС - СуммаНДС;
    Если СуммаБезНДС <= 0 Тогда
        Возврат "Без НДС";
    КонецЕсли;
    
    ФактСтавка = СуммаНДС / СуммаБезНДС * 100;
    
    ДопустимыеСтавки = Новый Массив;
    ДопустимыеСтавки.Добавить(5);
    ДопустимыеСтавки.Добавить(7);
    ДопустимыеСтавки.Добавить(10);
    ДопустимыеСтавки.Добавить(22);
    
    БлижайшаяСтавка = ДопустимыеСтавки[0];
    МинОтклонение = ?(ФактСтавка - БлижайшаяСтавка < 0, -(ФактСтавка - БлижайшаяСтавка), ФактСтавка - БлижайшаяСтавка);
    
    Для Индекс = 1 По ДопустимыеСтавки.ВГраница() Цикл
        ТекСтавка = ДопустимыеСтавки[Индекс];
        Отклонение = ?(ФактСтавка - ТекСтавка < 0, -(ФактСтавка - ТекСтавка), ФактСтавка - ТекСтавка);
        Если Отклонение < МинОтклонение Тогда
            МинОтклонение = Отклонение;
            БлижайшаяСтавка = ТекСтавка;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Строка(БлижайшаяСтавка) + "%";
КонецФункции



// создание документов

&НаСервере
Процедура СоздатьДокументыПеревыставлениеУслугНаСервере()  
	
	ДанныеДокумента = Новый Структура("ДокОК, ТаблицаУслуг", Объект.Ссылка, Объект.ПеревыставлениеУслуг.Выгрузить());

	Результат = топ_ОбщийВызовСервера.СоздатьДокументыПоступленияПоПеревыставлениеУслугOZON(ДанныеДокумента);  
	
	Если Не Результат.Ошибка Тогда 	
		Объект.ПеревыставлениеУслуг.Загрузить(Результат.ДанныеДокумента.ТаблицаУслуг); 	
	Иначе
		ОбщегоНазначения.СообщитьПользователю(Результат.Сообщение);
	КонецЕсли;		

КонецПроцедуры 

// BSLR-4203
&НаСервере
Процедура ОчиститьСсылкиНаДокументыНаСервере()
	
	Для Каждого Стр из Объект.ПеревыставлениеУслуг Цикл
		
		Если Стр.ДокументНавигационнаяСсылка = "" Тогда 
			Продолжить;
		КонецЕсли;
		
		НС = Стр.ДокументНавигационнаяСсылка;
		// пометка на удаление документа по навигационной ссылке
	    ПерваяТочка = Найти(НС, "e1cib/data/");
	    ВтораяТочка = Найти(НС, "?ref=");
	    
	    ПредставлениеТипа   = Сред(НС, ПерваяТочка + 11, ВтораяТочка - ПерваяТочка - 11);
	    ШаблонЗначения = ЗначениеВСтрокуВнутр(ПредопределенноеЗначение(ПредставлениеТипа + ".ПустаяСсылка"));
	    ЗначениеСсылки = СтрЗаменить(ШаблонЗначения, "00000000000000000000000000000000", Сред(НС, ВтораяТочка + 5));
	    СсылкаДляУдаления = ЗначениеИзСтрокиВнутр(ЗначениеСсылки);
		
		Попытка документОб = СсылкаДляУдаления.ПолучитьОбъект(); Исключение КонецПопытки; 
		Попытка документОб.УстановитьПометкуУдаления(Истина); Исключение КонецПопытки; 
		
		Стр.ДокументНавигационнаяСсылка = "";
		Стр.ДокументУИД = "";	
		
	КонецЦикла; 	
	
КонецПроцедуры

// BSLR-4203 
&НаКлиенте
Процедура ОчиститьСсылкиНаДокументы(Команда)
	ОчиститьСсылкиНаДокументыНаСервере(); 
	УстановитьВидимостьДоступность();
КонецПроцедуры


&НаКлиенте
Процедура СоздатьДокументыПеревыставлениеУслуг(Команда)  
	
	ЕстьНезаполненыеЮЛ = ПроверитьЗаполнениеЮЛ(Истина);
	Если ЕстьНезаполненыеЮЛ Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не все партнеры/контрагенты заполнены. Создайте нужных контрагентов или повторите загрузку данных о перевыставленных услугах с включеным флагом ""Создавать контрагентов (если есть продажи юр.лицам)""");
		Возврат;
	КонецЕсли;
	
	ЭтаФорма.Записать();
	
	СоздатьДокументыПеревыставлениеУслугНаСервере();
	
	ЭтаФорма.Записать(); // сохранение созданных типовых документов в ОК
	
КонецПроцедуры

&НаКлиенте
Процедура ПеревыставлениеУслугДокументУИДОткрытие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ТекущиеДанные = Элементы.ПеревыставлениеУслуг.ТекущиеДанные; 
	ПерейтиПоНавигационнойСсылке(ТекущиеДанные.ДокументНавигационнаяСсылка);

КонецПроцедуры

// BSLR-4203
&НаКлиенте
Функция ЕстьДокуметыПеревыставления() 
	
	Для Каждого Стр из Объект.ПеревыставлениеУслуг Цикл 
		Если Стр.ДокументНавигационнаяСсылка <> "" Тогда 
			Возврат истина;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

// письмерова 13.03.2025 BSLR-4423
// оформление отрицательных сумм 
&НаСервере
Процедура УстановитьУсловноеОформлениеПеревыставлениеУслуг()
	
	ЭлементыФормы = ЭтаФорма.Элементы;
	
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ПолеФормы    = ЭлементыФормы.ПеревыставлениеУслугДокументУИД; // ПолеФормы
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ПолеФормы.Имя);
	
	ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПеревыставлениеУслуг.Сумма");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
	ОтборЭлемента.ПравоеЗначение = 0;

	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОсобогоТекста);
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<обработать вручную>'"));
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
	
КонецПроцедуры

#КонецОбласти

// письмерова 02.09.2025 BSLR-4698
#Область РеестрЮрЛицВБ  

// апи
&НаКлиенте
Процедура ЗапроситьРеестрЮрЛиц(Команда)
	
	ИспользуютсяГруппыДоступаКонтрагентов = ВернутьКонстантуГруппыДоступовКонтрагентов();
	Если ИспользуютсяГруппыДоступаКонтрагентов И НЕ ЗначениеЗаполнено(ГруппаДоступаПартнера) И СоздаватьКонтрагентов Тогда
		сообщение = новый СообщениеПользователю;
		сообщение.Текст = "Заполните поле Группа доступа партнера";
		сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	ПараметрыКоманды = Новый Структура("ЛичныйКабинет, Период",Объект.ЛичныйКабинет, Период);	
	Результат = топ_РаботаСМаркетплейсами_Wildberries.ЗапроситьДанныеПоРеестрамПродажЮрЛицамWB(ПараметрыКоманды);

	ТаблицаРеестровЮЛ.Очистить();
	
	Для Каждого Эл из Результат.Данные Цикл
		нСтр = ТаблицаРеестровЮЛ.Добавить();
		нСтр.ИДРеестра = Эл.serviceName;
	КонецЦикла;
	
	Если ТаблицаРеестровЮЛ.Количество() Тогда
		ЗапроситьДанныеРеестров();  
	Иначе
		ОбщегоНазначенияКлиент.СообщитьПользователю("Нет данных по реестрам продаж юр.лицам за период");
	КонецЕсли;
	
КонецПроцедуры  

&НаСервере
Процедура ЗапроситьДанныеРеестров()
	
	ПараметрыКоманды = Новый Структура("ЛичныйКабинет, Реестр",Объект.ЛичныйКабинет, "");	
    ТаблицаДанныхЮЛ = ПолучитьТаблицуДанныхЮЛOZON();
	
	Для Каждого Стр из ТаблицаРеестровЮЛ Цикл 
		
		ПараметрыКоманды.Реестр = Стр.ИДРеестра;
		Результат = топ_РаботаСМаркетплейсами_Wildberries.ЗапроситьДанныеРеестраWB(ПараметрыКоманды); 
		
		Если НЕ Результат.Ошибка ТОгда
			
			Если Результат.ДанныеФайла <> "" Тогда
				
				// обработать файл 
				// BSLR-4964 ++ 
				МассивЮЛ = ОбработатьРеестрЮрЛицНаСервере(Результат.ДанныеФайла);
				Для Каждого ДанныеЮЛ из МассивЮЛ Цикл	
					нСтр = ТаблицаДанныхЮЛ.ДОбавить();
					ЗаполнитьЗначенияСвойств(нСтр,ДанныеЮЛ); 
					нСтр.ДатаСчФакт = ?(ДанныеЮЛ.ДатаСчФакт = "", "", Дата("" + ДанныеЮЛ.ДатаСчФакт + " 0:00:00")); 					
				КонецЦикла; // BSLR-4964 --
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
	  
	Если ТаблицаДанныхЮЛ.Количество() Тогда
        // обработка таб части, заполнение данных по ЮЛ, поиск контрагента по ИНН 
		// если не нашли - пишем ИНН + Наименование и сообщаем пользователю
		Результат = ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ);

		Если Результат.Ошибка Тогда
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю(Результат.Сообщение);
		КонецЕсли;

	КонецЕсли;
	
	
КонецПРоцедуры


Функция ОбработатьРеестрЮрЛицНаСервере(ДанныеФайла)
	
	ИмяФайла = ПолучитьИмяВременногоФайла("zip");
	ДвДанные = Base64Значение(ДанныеФайла); 
	
	МассивЮЛ = новый Массив; // BSLR-4964
	
	Если ДвДанные = Неопределено Тогда
		ОбщегоНазначения.СообщитьПользователю("Ошибка формата файла реестра");
	Иначе
	
		ДвДанные.Записать(ИмяФайла);
		
		Архив = Новый ЧтениеZipФайла(ИмяФайла); 
		ВремКаталог = КаталогВременныхФайлов();
		// очистка Temp 
		Попытка
			УдалитьФайлы(ВремКаталог,"*.xlsx");  
		Исключение
			Сообщить(ОписаниеОшибки());
		КонецПопытки; 
		
		Архив.ИзвлечьВсе(ВремКаталог,РежимВосстановленияПутейФайловZIP.Восстанавливать);
		
		// Распакуем файлы по одиночке.    
		Для Каждого Элемент Из Архив.Элементы Цикл
			Архив.Извлечь(Элемент, ВремКаталог,
			РежимВосстановленияПутейФайловZIP.Восстанавливать,"");
		КонецЦикла; 
		
		Таблица = Новый ТаблицаЗначений;  
		//ТаблицаИТОГОВАЯ = ПолучитьТаблицуЗагрузкиТоваровСбер(); 
		НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.xlsx"); 
		Если НайденныеФайлы.Количество() = 0 Тогда 
			НайденныеФайлы = НайтиФайлы(ВремКаталог, "*.XLSX");
		КонецЕсли; 
		
		Для Каждого Файл_объект из НайденныеФайлы Цикл
			
			ИмяФайла = Файл_объект.ПолноеИмя;	
			MXL = Новый ТабличныйДокумент;
			MXL.Прочитать(ИмяФайла);
			
			Файл = Новый Файл(ИмяФайла);
			Если Файл.Существует() Тогда
				УдалитьФайлы(ИмяФайла);
			КонецЕсли; 
			
			КоличествоСтрок   = MXL.ВысотаТаблицы;
			КоличествоКолонок = MXL.ШиринаСтраницы;
			
			Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
				Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
					ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
					Если ТекстЯчейки = "ТипДокумента" Тогда
						ПерваяСтрока = ТекущаяСтрока + 1;
					КонецЕсли;
				КонецЦикла;
			КонецЦикла; 
			
			НомераКолонокФайла = СоответствиеКолонокРеестрЮрЛицВБ(MXL, ПерваяСтрока-1);
			
			ПустаяСтрока = 0;
			Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
				
				Если ПустаяСтрока > 3 Тогда
					Прервать; // таблица закончена, остались только подписи
				КонецЕсли;   
				
				Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
					ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
					Прервать;
				КонецЕсли;
				
				XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
				SRID = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SRID).ТекущаяОбласть.Текст);
				
				Если Не ЗначениеЗаполнено(SRID) ТОгда
					ПустаяСтрока = ПустаяСтрока + 1; // колонка SRID
					ПРодолжить;
				КонецЕсли; 
				
				НайтиСтроки = Объект.Товары.НайтиСтроки(Новый Структура("Идентификатор",SRID));
				
				Если НайтиСтроки.Количество() ТОгда
					
					ДанныеЮЛ = Новый Структура("НаименованиеПокупателя,ИНН,НомерСчФакт,ДатаСчФакт,КПП,ЮридическийАдресПокупателя,SRID",  // BSLR-4964
												"","","","","","","");
	
					ДанныеЮЛ.НаименованиеПокупателя	= Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Покупатель).ТекущаяОбласть.Текст);
					ДанныеЮЛ.ИНН = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
					ДанныеЮЛ.КПП = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);	
					ДанныеЮЛ.ЮридическийАдресПокупателя = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Адрес).ТекущаяОбласть.Текст);
					ДанныеЮЛ.НомерСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСЧФАКТ).ТекущаяОбласть.Текст);
					ДанныеЮЛ.ДатаСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСЧФАКТ).ТекущаяОбласть.Текст);
					ДанныеЮЛ.SRID = SRID; 
					
					МассивЮЛ.Добавить(ДанныеЮЛ); // BSLR-4964
					
				КонецЕсли;	
			КонецЦикла;  
		КонецЦикла;
	КонецЕсли;
	
	Возврат МассивЮЛ; // BSLR-4964
	
КонецФункции


 &НаСервереБезКонтекста
Функция СоответствиеКолонокРеестрЮрЛицВБ(MXL, СтрокаЗаголовков)
	
	Результат = Новый Структура;
	Результат.Вставить("Покупатель", УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Наименование покупателя"));
	Результат.Вставить("ИНН",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "ИНН покупателя")); 
	Результат.Вставить("КПП",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "КПП покупателя")); 
	Результат.Вставить("Адрес",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Юридический адрес покупателя")); 
	Результат.Вставить("SRID",  УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "SRID")); 
	Результат.Вставить("НомерСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Номер документа"));
	Результат.Вставить("ДатаСЧФАКТ",УстановитьСоответствиеКолонокФайлаЗагрузкиOZON(MXL, СтрокаЗаголовков, "Дата документа")); 
	 
	Возврат Результат;
	
КонецФункции



// BSLR-4895 файл
&НаКлиенте
Процедура ВыполнитьЗагрузкуРеестраЮЛ(Результат, ДопПараметры) Экспорт 
	
	Если Результат = Неопределено Тогда 
		Возврат;
	КонецЕсли; 
	
	МассивАдресов = Новый Массив;
	
	Для Каждого Эл Из Результат Цикл		
		ДанныеФайла = Новый Структура("Адрес,Расширение", Эл.Адрес, Эл.СсылкаНаФайл.Расширение); 
		МассивАдресов.Добавить(ДанныеФайла);
	КонецЦикла;
	
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
		РезультатВыполнения = ЗагрузитьРеестрыЮЛНаСервереВБ(МассивАдресов);  
	КонецЕсли;
	
КонецПроцедуры 

&НаСервере
Функция ЗагрузитьРеестрыЮЛНаСервереВБ(МассивАдресов)
	
	ТаблицаДанныхЮЛ = ПолучитьТаблицуДанныхЮЛOZON();
	
	Для Каждого Эл из МассивАдресов Цикл 
		
		Адрес = Эл.Адрес;
		Расширение = Эл.Расширение;
		
		ФайлВременногоХранилища = ПолучитьИзВременногоХранилища(Адрес);
		ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
		Попытка
			ФайлВременногоХранилища.Записать(ИмяФайла);
		Исключение
			ОбщегоНазначения.СообщитьПользователю("Ошибка при загрузке файла, повторите попытку");
			Возврат Неопределено;
		КонецПопытки;;
		УдалитьИзВременногоХранилища(Адрес);
		MXL = Новый ТабличныйДокумент;
		MXL.Прочитать(ИмяФайла);
		
		Файл = Новый Файл(ИмяФайла);
		Если Файл.Существует() Тогда
			УдалитьФайлы(ИмяФайла);        
		КонецЕсли; 
		
		КоличествоСтрок   = MXL.ВысотаТаблицы;
		КоличествоКолонок = MXL.ШиринаСтраницы;
		
		Для ТекущаяСтрока = 1 По КоличествоСтрок Цикл
			Для ТекущаяКолонка = 1 По КоличествоКолонок Цикл
				ТекстЯчейки = Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C" + ТекущаяКолонка).ТекущаяОбласть.Текст);
				Если ТекстЯчейки = "ТипДокумента" Тогда
					ПерваяСтрока = ТекущаяСтрока + 1;
				КонецЕсли;
			КонецЦикла;
		КонецЦикла; 
		
		НомераКолонокФайла = СоответствиеКолонокРеестрЮрЛицВБ(MXL, ПерваяСтрока-1);
		
		ПустаяСтрока = 0;
		Для ТекущаяСтрока = ПерваяСтрока По КоличествоСтрок-1 Цикл 
			
			Если ПустаяСтрока > 3 Тогда
				Прервать; // таблица закончена, остались только подписи
			КонецЕсли;   
			
			Если СтрНайти(Строка(MXL.ПолучитьОбласть("R" + XMLСтрока(ТекущаяСтрока) + "C2").ТекущаяОбласть.Текст),"Итого")>0 Тогда
				ПустаяСтрока = ПустаяСтрока + 1; // итоги по таблице
				Прервать;
			КонецЕсли;
			
			XMLТекущаяСтрока = XMLСтрока(ТекущаяСтрока);
			SRID = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.SRID).ТекущаяОбласть.Текст);
			
			Если Не ЗначениеЗаполнено(SRID) ТОгда
				ПустаяСтрока = ПустаяСтрока + 1; // колонка SRID
				ПРодолжить;
			КонецЕсли; 
			
			НайтиСтроки = Объект.Товары.НайтиСтроки(Новый Структура("Идентификатор",SRID));
			
			Если НайтиСтроки.Количество() ТОгда
				
				ДанныеЮЛ = Новый Структура("НаименованиеПокупателя,ИНН,НомерСчФакт,ДатаСчФакт,КПП,ЮридическийАдресПокупателя,SRID",  // BSLR-4964
											"","","","","","","");

				ДанныеЮЛ.НаименованиеПокупателя	= Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Покупатель).ТекущаяОбласть.Текст);
				ДанныеЮЛ.ИНН = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ИНН).ТекущаяОбласть.Текст);
				ДанныеЮЛ.КПП = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.КПП).ТекущаяОбласть.Текст);	
				ДанныеЮЛ.ЮридическийАдресПокупателя = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.Адрес).ТекущаяОбласть.Текст);
				ДанныеЮЛ.НомерСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.НомерСЧФАКТ).ТекущаяОбласть.Текст);
				ДанныеЮЛ.ДатаСЧФАКТ = Строка(MXL.ПолучитьОбласть("R" + XMLТекущаяСтрока + "C" + НомераКолонокФайла.ДатаСЧФАКТ).ТекущаяОбласть.Текст);
				ДанныеЮЛ.SRID = SRID; 
				
				нСтр = ТаблицаДанныхЮЛ.ДОбавить();
				ЗаполнитьЗначенияСвойств(нСтр,ДанныеЮЛ); 
				нСтр.ДатаСчФакт = ?(ДанныеЮЛ.ДатаСчФакт = "", "", Дата("" + ДанныеЮЛ.ДатаСчФакт + " 0:00:00")); 
				
			КонецЕсли;	
		КонецЦикла; 
	КонецЦикла;
	
	Если ТаблицаДанныхЮЛ.Количество() Тогда
        // обработка таб части, заполнение данных по ЮЛ, поиск контрагента по ИНН 
		// если не нашли - пишем ИНН + Наименование и сообщаем пользователю
		Результат = ДополнитьДаннымиЮЛOZON(ТаблицаДанныхЮЛ);

		Если Результат.Ошибка Тогда
			Результат.Ошибка = Истина;
			ОбщегоНазначения.СообщитьПользователю(Результат.Сообщение);
		КонецЕсли;

	КонецЕсли;
	
КонецФункции

&НаКлиенте
Процедура ЗагрузитьОтчетБаллыЗаСкидки(Команда) //Крупа BSLR-4753
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите отчёт Ozon 'Баллы за скидки'";
	Диалог.Фильтр = "Файлы Excel (*.xlsx;*.xls)|*.xlsx;*.xls";
	Если Не Диалог.Выбрать() Тогда
		Возврат;
	КонецЕсли;      

	Результат = ЗагрузитьОтчетБаллыЗаСкидкиНаСервере(Диалог.ПолноеИмяФайла, Объект.Ссылка);  
	
	Для каждого Сообщение Из Результат.Сообщения Цикл
		Сообщить(Сообщение);
	КонецЦикла;
	
КонецПроцедуры   

&НаСервере
Функция ЗагрузитьОтчетБаллыЗаСкидкиНаСервере(Знач ИмяФайла, Знач СсылкаНаДокумент) //Крупа BSLR-4753
	
	Результат = Новый Структура("Сообщения", Новый Массив);
	
	ТабДок = Новый ТабличныйДокумент;
	Попытка
		ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	Исключение
		Результат.Сообщения.Добавить("Ошибка чтения файла: " + ОписаниеОшибки());
		Возврат Результат;
	КонецПопытки;
	
	ЛистНайден = Ложь;
	Для Каждого Область Из ТабДок.Области Цикл
		ИмяЛиста = Область.Имя;
		Если ПустаяСтрока(ИмяЛиста) Тогда
			// если имя не задано, мб это единственная область
			ЧитаемаяОбласть = ТабДок.ПолучитьОбласть(Область.Имя);
			ЛистНайден = Истина;
			Прервать;
		Иначе
			//Если НРег(ИмяЛиста) = "Отчет баллы за скидки" Тогда
				ЧитаемаяОбласть = ТабДок.ПолучитьОбласть(Область.Имя);
				ЛистНайден = Истина;
				Прервать;
			//КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Если Не ЛистНайден Тогда
		Результат.Сообщения.Добавить("Не найден лист с данными в файле");
		Возврат Результат;
	КонецЕсли;
	
	//поиск строки заголовков
	СтрокаЗаголовка = 0;
	Для НомерСтр = 1 По ЧитаемаяОбласть.ВысотаТаблицы Цикл
		Для НомерКол = 1 По ЧитаемаяОбласть.ШиринаТаблицы Цикл
			Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, НомерКол);
			ТекстЯчейки = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
			Если ТекстЯчейки = "Наименование" Тогда
				СтрокаЗаголовка = НомерСтр;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		Если СтрокаЗаголовка > 0 Тогда 
			Прервать; 
		КонецЕсли;
	КонецЦикла;
	
	Если СтрокаЗаголовка = 0 Тогда
		Результат.Сообщения.Добавить("В файле не найдена колонка 'Наименование'");
		Возврат Результат;
	КонецЕсли;
	
    //номера колонок по заголовкам
	КолонкаНаименование = 0;
	КолонкаСуммаНачисления = 0;
	КолонкаСуммаБаллов = 0;
	КолонкаИтоговаяСумма = 0;
	
	Для НомерКол = 1 По ЧитаемаяОбласть.ШиринаТаблицы Цикл
		Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(СтрокаЗаголовка, НомерКол);
		Заголовок1 = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
		Если Заголовок1 = "Наименование" Тогда
			КолонкаНаименование = НомерКол;
		ИначеЕсли Заголовок1 = "Сумма начисления, руб." Тогда
			КолонкаСуммаНачисления = НомерКол;
		ИначеЕсли Заголовок1 = "Сумма баллов" Тогда
			КолонкаСуммаБаллов = НомерКол;
		ИначеЕсли Заголовок1 = "Итого сумма по документу, руб." Тогда
			КолонкаИтоговаяСумма = НомерКол;
		КонецЕсли;
	КонецЦикла;
	
	Если КолонкаНаименование = 0 Тогда
		Результат.Сообщения.Добавить("Не найдена обязательная колонка 'Наименование'");
		Возврат Результат;
	КонецЕсли;
	
	ДокументОбъект = Объект;
	Если ДокументОбъект = Неопределено Тогда
		Результат.Сообщения.Добавить("Не удалось получить объект документа");
		Возврат Результат;
	КонецЕсли;
	
	ФлагОтражатьКомиссиюОтдельно = ДокументОбъект.ОтражатьКомиссионноеВознаграждениеОтдельнойУслугой;
	УслугаКомиссии = ДокументОбъект.ЛичныйКабинет.УслугаКомиссионногоВознаграждения;  
	
	КоличествоОбработано = 0;
	ЛитералДляУдаления = "Электронная услуга: "; // Стрелкова Н.
	ЛитералУслугаПродвижение = "Услуга Продвижение бренда"; // Стрелкова Н.
	// обход строк 
	Для НомерСтр = СтрокаЗаголовка + 1 По ЧитаемаяОбласть.ВысотаТаблицы Цикл
		
		Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаНаименование);
		Наименование = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
		Если ПустаяСтрока(Наименование) Тогда 
			Продолжить; 
		КонецЕсли;  
		Если СтрНайти(Наименование, ЛитералДляУдаления) Тогда
			Наименование = СтрЗаменить(Наименование, ЛитералДляУдаления, "");	
		ИначеЕсли Наименование = ЛитералУслугаПродвижение Тогда
			Наименование = СтрЗаменить(Наименование, "Услуга ", "");	
		КонецЕсли;
		
		СуммаНачисления = 0;
		Если КолонкаСуммаНачисления > 0 Тогда
			Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаСуммаНачисления);
			ТекстСуммы = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
			Если ТекстСуммы <> "" Тогда
				Попытка СуммаНачисления = Число(ТекстСуммы); 
				Исключение 
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
		
		СуммаБаллов = 0;
		Если КолонкаСуммаБаллов > 0 Тогда
			Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаСуммаБаллов);
			ТекстБаллов = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
			Если ТекстБаллов <> "" Тогда
				Попытка СуммаБаллов = Число(ТекстБаллов); 
				Исключение 
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
		
		// сумма по документу для вознаграждения
		ИтоговаяСумма = 0;
		Если КолонкаИтоговаяСумма > 0 Тогда
			Ячейка = ЧитаемаяОбласть.ПолучитьОбласть(НомерСтр, КолонкаИтоговаяСумма);
			ТекстИтог = СокрЛП(Ячейка.ВыделенныеОбласти[0].Текст);
			Если ТекстИтог <> "" Тогда
				Попытка 
					ИтоговаяСумма = Число(ТекстИтог); 
				Исключение 
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
		
		// поиск услуги в тч                             
		Если ДокументОбъект.Услуги = Неопределено Тогда
			Результат.Сообщения.Добавить("Заполните табличную часть Услуги");  
			Возврат Результат;
		КонецЕсли;
		
		Если Наименование = "Вознаграждение за реализацию" Тогда
			Если ФлагОтражатьКомиссиюОтдельно Тогда
				// поиск услуги комиссионного вознаграждения и замена ее суммы начисления     
				СтруктураОтбора = Новый Структура("Наименование", УслугаКомиссии);
				НайденныеСтроки = ДокументОбъект.Услуги.НайтиСтроки(СтруктураОтбора); // Стрелкова Н. замена Найти на НайтиСтроки  
				Если НайденныеСтроки.Количество() = 0 Тогда
					Результат.Сообщения.Добавить("Не найдена услуга комиссионного вознаграждения: " + УслугаКомиссии);
				КонецЕсли;
				Для Каждого СтрокаКомиссии Из НайденныеСтроки Цикл 
					СтрокаКомиссии.СуммаДоВычетаБаллов = СуммаНачисления;
				КонецЦикла;
			КонецЕсли;
			ДокументОбъект.СуммаКомиссииПоУПД = ИтоговаяСумма;
			РаспределитьРазницуВДокументе(ДокументОбъект);
		КонецЕсли;

		НайденнаяСтрока = Неопределено; 
		Для каждого стр из ДокументОбъект.Услуги Цикл
			Если стр.Наименование = Наименование или СтрНайти(стр.УслугаМП.Наименование, Наименование) Тогда //4753 доработка
				НайденнаяСтрока = стр;
				Прервать
			КонецЕсли;
		КонецЦикла;
 
		Если НайденнаяСтрока = Неопределено Тогда
			//Результат.Сообщения.Добавить("Услуга """ + Наименование + """ не найдена в списке услуг. Перезаполните услуги в ""Стартовом помощнике""");
			Продолжить;
		КонецЕсли;
		
				
	
		// замена "сумма до вычета баллов" на "сумма начисления, руб"
		Если СуммаНачисления <> 0 И Наименование <> "Вознаграждение за реализацию" Тогда
			НайденнаяСтрока.СуммаДоВычетаБаллов = СуммаНачисления;
		КонецЕсли;
		
		Если СуммаБаллов <> 0 Тогда
			НайденнаяСтрока.Баллы = СуммаБаллов;
		КонецЕсли;
		НайденнаяСтрока.Сумма = НайденнаяСтрока.СуммаДоВычетаБаллов - НайденнаяСтрока.Баллы;
		
		
		КоличествоОбработано = КоличествоОбработано + 1;
		
	КонецЦикла; 
	
	
	Если КоличествоОбработано > 0 Тогда
		Результат.Сообщения.Добавить("Сумма комиссии и услуг скорректирована в соответствии с ""Отчетом о начислении и списании баллов""");
	Иначе
		Результат.Сообщения.Добавить("Не удалось обработать ни одной строки. Проверьте формат файла.");
	КонецЕсли;
	
	Возврат Результат;	
КонецФункции

&НаСервере
Процедура РаспределитьРазницуВДокументе(ДокументОбъект)
	Попытка             
		РаспределитьРазницуНаСервере();
	Исключение
		Сообщить("Не удалось автоматически распределить разницу");
	КонецПопытки;
КонецПроцедуры   

#КонецОбласти