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



#Область ПрограммныйИнтерфейс

#Область Работа_с_товарами

// Функция - Вернуть ссылку на товар на сайте торговой площадке
//
// Параметры:
//  Товар	 - Товар, по которому требуется получить адрес страницы  - 
// 
// Возвращаемое значение:
//   - Адрес интернет-страницы товара 
//
Функция ВернутьСсылкуНаТовар(Товар) Экспорт
	
	Если		Товар.ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		Возврат "https://www.wildberries.ru/catalog/"+СтрЗаменить(Товар.ID," ","")+"/detail.aspx";
	ИначеЕсли   Товар.ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON Тогда
		Возврат "https://www.ozon.ru/context/detail/id/"+СтрЗаменить(?(ЗначениеЗаполнено(Товар.sku_fbo), Товар.sku_fbo, Товар.sku_fbs)," ","");
	Иначе
		Возврат "";
	КонецЕсли
	
КонецФункции

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

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

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

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


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

// ++ Бойков BSLR-2576
//
Функция ПараметрыРазмещенияЭлементовФормыРегистраСопоставленияТоваров() Экспорт
	
	ПараметрыРазмещения = Новый Структура;
	ПараметрыРазмещения.Вставить("ЭлементРодитель");
	ПараметрыРазмещения.Вставить("СледующийЭлемент");
	ПараметрыРазмещения.Вставить("ИмяДинамическогоСписка", "Список");
	
	Возврат ПараметрыРазмещения;
	
КонецФункции // -- Бойков BSLR-2576

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

#Область Работа_с_ценами

Функция ПолучитьЦенуПоВидуЦены(Товар, ВидЦены, Период) Экспорт

	Если НЕ ЗначениеЗаполнено(ВидЦены) Тогда
		Возврат 0;
	КонецЕсли;
	
	// письмерова 09.02.2024 BSLR-3179 - получим цену товара типовым механизмом 
	Данные = новый Структура("Товар,Размер", Товар, Справочники.топ_РазмерыТоваровWB.ПустаяСсылка()); 
	ДанныеТовара = топ_РаботаСМаркетплейсамиОбщий_ВызовСервера.ПолучитьДанныеСвязаннойНомеклатурыПоТовару(Данные);  
	
	Если ДанныеТовара.Номенклатура <> Справочники.Номенклатура.ПустаяСсылка() Тогда // нашли сопоставление 
		Цена = 0;
		
		СтруктураПараметровОтбора = Новый Структура;
		СтруктураПараметровОтбора.Вставить("Дата",Период);
		СтруктураПараметровОтбора.Вставить("Валюта",Справочники.Валюты.НайтиПоКоду("643"));
		СтруктураПараметровОтбора.Вставить("Номенклатура",ДанныеТовара.Номенклатура);
		СтруктураПараметровОтбора.Вставить("Характеристика",ДанныеТовара.Характеристика);
		СтруктураПараметровОтбора.Вставить("Упаковка",ДанныеТовара.Упаковка);
		СтруктураПараметровОтбора.Вставить("Серия",Справочники.СерииНоменклатуры.ПустаяСсылка());
		СтруктураПараметровОтбора.Вставить("ВидЦены",ВидЦены);
        		
        // ут 11.5
		ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер = Метаданные.ОбщиеМодули.Найти("ЦеныПредприятияЗаполнениеСервер");
		Если ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер <> Неопределено Тогда 
			ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер = ОбщегоНазначения.ОбщийМодуль("ЦеныПредприятияЗаполнениеСервер");
			Цена = ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора);
		Иначе  	
			// ут 11.4
			ОбщийМодуль_ПродажиСервер = Метаданные.ОбщиеМодули.Найти("ПродажиСервер");
			Если ОбщийМодуль_ПродажиСервер <> Неопределено Тогда 
				ОбщийМодуль_ПродажиСервер = ОбщегоНазначения.ОбщийМодуль("ПродажиСервер");
				СтруктураПараметровОтбора.Вставить("ВернутьМногооборотнуюТару",Ложь); 
				СтруктураПараметровОтбора.Вставить("НалогообложениеНДС",Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);
				Цена = ОбщийМодуль_ПродажиСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора);
			КонецЕсли;
		КонецЕсли;
		
		Если ДанныеТовара.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор Тогда
			// если цену не получили (нет установленной цены на набор) тогда, расчитаем по составу набора 
			Если Цена = 0 Тогда 
				
				ПараметрыВариантаКомплектацииНоменклатуры = НаборыВызовСервера.ПараметрыВариантаКомплектацииНоменклатуры(
				ДанныеТовара.Номенклатура,
				ДанныеТовара.Характеристика);
				
				Если ПараметрыВариантаКомплектацииНоменклатуры = Неопределено Тогда  // состав набора не настроен
					Возврат 0;
				КонецЕсли;
				
				ВариантКомплектацииНоменклатуры = ПараметрыВариантаКомплектацииНоменклатуры.ВариантКомплектацииНоменклатуры;
				
				ПараметрыКомплектующих = Новый Структура;
				ПараметрыКомплектующих.Вставить("НоменклатураНабора",              ДанныеТовара.Номенклатура);
				ПараметрыКомплектующих.Вставить("ХарактеристикаНабора",            ДанныеТовара.Характеристика);
				ПараметрыКомплектующих.Вставить("ВариантКомплектацииНоменклатуры", ВариантКомплектацииНоменклатуры);
				ПараметрыКомплектующих.Вставить("ВидЦены", ВидЦены);
				ПараметрыКомплектующих.Вставить("Валюта", Справочники.Валюты.НайтиПоКоду("643"));
				ПараметрыКомплектующих.Вставить("КоличествоУпаковок", 1);
				ПараметрыКомплектующих.Вставить("ПроцентРучнойСкидки", 0);
				
				ДополнительныеПараметры = Новый Структура;
				ДополнительныеПараметры.Вставить("Дата",    Период);
				ДополнительныеПараметры.Вставить("Валюта",  Справочники.Валюты.НайтиПоКоду("643"));
				ДополнительныеПараметры.Вставить("ВидЦены", ВидЦены);
				ДополнительныеПараметры.Вставить("Цена", 0);
	
				ПодобранныеТовары = НаборыВызовСервера.Комплектующие(ПараметрыКомплектующих, ДополнительныеПараметры);
				
				Для каждого ПодТов Из ПодобранныеТовары Цикл 				
					Цена = Цена + ПодТов.Цена * ПодТов.КоличествоУпаковок; 				
				КонецЦикла; 
				
				Если ДанныеТовара.Упаковка <> Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка() Тогда // есть упаковка
					Цена = Цена * ?(ДанныеТовара.Упаковка.Числитель = 0,1,ДанныеТовара.Упаковка.Числитель) / 
										?(ДанныеТовара.Упаковка.Знаменатель = 0,1,ДанныеТовара.Упаковка.Знаменатель);
				КонецЕсли;
				
				Возврат Цена;
			КонецЕсли;
		КонецЕсли;
		Возврат Цена;
	Иначе
		// проверить, возможно это товар вб с размерами, которому сопоставлены различные номенклатуры без характеристик
		// тогда берем макс цену товара без учета размера  
		
		Если Данные.Товар.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries И
				Данные.Товар.ИспользуютсяРазмерыWB Тогда
				
			// получим массив номеклатур, без учета размеров		
			Запрос = Новый Запрос("ВЫБРАТЬ
			                      |	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
			                      |	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
		                          |	топ_СоответствиеТоваров.Упаковка КАК Упаковка,
								  | 0 КАК Цена
			                      |ИЗ
			                      |	РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
			                      |ГДЕ
			                      |	топ_СоответствиеТоваров.Товар = &Товар"); 
								  
			Запрос.УстановитьПараметр("Товар",Данные.Товар);

			ТаблицаНоменклатур = Запрос.Выполнить().Выгрузить();
			Для каждого Стр Из ТаблицаНоменклатур Цикл
				
				СтруктураПараметровОтбора = Новый Структура;
				СтруктураПараметровОтбора.Вставить("Дата",Период);
				СтруктураПараметровОтбора.Вставить("Валюта",Справочники.Валюты.НайтиПоКоду("643"));
				СтруктураПараметровОтбора.Вставить("Номенклатура",Стр.Номенклатура);
				СтруктураПараметровОтбора.Вставить("Характеристика",Стр.Характеристика);
				СтруктураПараметровОтбора.Вставить("Упаковка",Стр.Упаковка);
				СтруктураПараметровОтбора.Вставить("Серия",Справочники.СерииНоменклатуры.ПустаяСсылка());
				СтруктураПараметровОтбора.Вставить("ВидЦены",ВидЦены);
		        		
		        // ут 11.5
				ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер = Метаданные.ОбщиеМодули.Найти("ЦеныПредприятияЗаполнениеСервер");
				Если ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер <> Неопределено Тогда
					ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер = ОбщегоНазначения.ОбщийМодуль("ЦеныПредприятияЗаполнениеСервер");
					Стр.Цена = ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора);
				Иначе  	
					// ут 11.4
					ОбщийМодуль_ПродажиСервер = Метаданные.ОбщиеМодули.Найти("ПродажиСервер");
					Если ОбщийМодуль_ПродажиСервер <> Неопределено Тогда 						
						ОбщийМодуль_ПродажиСервер = ОбщегоНазначения.ОбщийМодуль("ПродажиСервер"); 
						СтруктураПараметровОтбора.Вставить("ВернутьМногооборотнуюТару",Ложь);
						СтруктураПараметровОтбора.Вставить("НалогообложениеНДС",Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);
						Стр.Цена = ОбщийМодуль_ПродажиСервер.ПолучитьЦенуПоОтбору(СтруктураПараметровОтбора);
					КонецЕсли;
				КонецЕсли; 	
		    КонецЦикла;
			
			ТаблицаНоменклатур.Сортировать("Цена Убыв");
			
			Если ТаблицаНоменклатур.Количество() ТОгда
				Возврат ТаблицаНоменклатур[0].Цена;
			Иначе
				Возврат 0;	
			КонецЕсли;
		КонецЕсли; // товар вб	
	КонецЕсли; // есть номенклатура
	
	
	// письмерова - код устарел 
	
#Область СтарыйКод	
	Запрос = Новый Запрос;
	
	
	Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.4") 
		ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.4.") 
		ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.4.")
		ИЛИ ПолучитьФункциональнуюОпцию("ИспользуетсяЦенообразование20") Тогда

		Запрос.Текст = 
		"ВЫБРАТЬ
		|	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
		|	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
		// ++ Бойков BSLR-2290
		|	топ_СоответствиеТоваров.Упаковка КАК Упаковка,
		|	ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
		|			ТОГДА 1
		|		КОГДА топ_СоответствиеТоваров.Упаковка.Числитель = 0 ИЛИ топ_СоответствиеТоваров.Упаковка.Знаменатель = 0
		|			ТОГДА 1
		|		ИНАЧЕ топ_СоответствиеТоваров.Упаковка.Числитель / топ_СоответствиеТоваров.Упаковка.Знаменатель
		|	КОНЕЦ КАК КоэффициентУпаковки
		// -- Бойков BSLR-2290
		|ПОМЕСТИТЬ ВТНоменклатура
		|ИЗ
		|	РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
		|ГДЕ
		|	топ_СоответствиеТоваров.Товар = &Товар
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
		|	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
		// ++ Бойков BSLR-2290
		|	ЦеныНоменклатурыСрезПоследних.Упаковка КАК Упаковка,
		// -- Бойков BSLR-2290
		|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		|ПОМЕСТИТЬ ВТЦены
		|ИЗ
		|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, 
		//|		Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) И  // письмерова 09.02.2023 BSLR-1359
		|		Валюта.Код = &ВалютаКод
		|		И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		// ++ Бойков BSLR-2290
		|ВЫБРАТЬ
		|	ВТНоменклатура.Номенклатура КАК Номенклатура,
		|	ЕСТЬNULL(ВТЦены.Цена, 0) КАК Цена,
		|	1 КАК Приоритет
		|ПОМЕСТИТЬ ВТ_ЦеныНоменклатурыПредварительно
		|ИЗ
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦены КАК ВТЦены
		|		ПО ВТНоменклатура.Номенклатура = ВТЦены.Номенклатура
		|			И ВТНоменклатура.Характеристика = ВТЦены.Характеристика
		|			И ВТНоменклатура.Упаковка = ВТЦены.Упаковка
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ВТНоменклатура.Номенклатура,
		|	ЕСТЬNULL(ВТЦены.Цена, 0) * ВТНоменклатура.КоэффициентУпаковки,
		|	2
		|ИЗ
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦены КАК ВТЦены
		|		ПО ВТНоменклатура.Номенклатура = ВТЦены.Номенклатура
		|			И ВТНоменклатура.Характеристика = ВТЦены.Характеристика
		|			И ВТЦены.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ЦеныНоменклатурыПредварительно.Номенклатура КАК Номенклатура,
		|	МИНИМУМ(ВТ_ЦеныНоменклатурыПредварительно.Приоритет) КАК Приоритет
		|ПОМЕСТИТЬ ВТ_ПриоритетыЦенНоменклатуры
		|ИЗ
		|	ВТ_ЦеныНоменклатурыПредварительно КАК ВТ_ЦеныНоменклатурыПредварительно
		|ГДЕ
		|	ВТ_ЦеныНоменклатурыПредварительно.Цена <> 0
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТ_ЦеныНоменклатурыПредварительно.Номенклатура
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ЦеныНоменклатурыПредварительно.Номенклатура КАК Номенклатура,
		|	ВТ_ЦеныНоменклатурыПредварительно.Цена КАК Цена
		|ИЗ
		|	ВТ_ЦеныНоменклатурыПредварительно КАК ВТ_ЦеныНоменклатурыПредварительно
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПриоритетыЦенНоменклатуры КАК ВТ_ПриоритетыЦенНоменклатуры
		|		ПО ВТ_ЦеныНоменклатурыПредварительно.Номенклатура = ВТ_ПриоритетыЦенНоменклатуры.Номенклатура
		|			И ВТ_ЦеныНоменклатурыПредварительно.Приоритет = ВТ_ПриоритетыЦенНоменклатуры.Приоритет
		// -- Бойков BSLR-2290
		//БИТ Смирнов А.П. 16.11.2022 BSLR-971 (
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ                                           
		|	ВТНоменклатура.Номенклатура КАК НоменклатураНабора,
		|	ВТНоменклатура.Характеристика КАК ХарактеристикаНабора,
		|	СоставНаборов.Номенклатура КАК Номенклатура,
		|	СоставНаборов.Характеристика КАК Характеристика,
		|	СУММА(СоставНаборов.КоличествоУпаковок) КАК Количество
		|ПОМЕСТИТЬ ВТСоставНабора
		|ИЗ 
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК СоставНаборов
		|		ПО (ВТНоменклатура.Номенклатура = СоставНаборов.Ссылка.Владелец
		|			И ВТНоменклатура.Характеристика = СоставНаборов.Ссылка.Характеристика)
		|ГДЕ
		|	ВТНоменклатура.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
		|
		|СГРУППИРОВАТЬ ПО
		|	СоставНаборов.Номенклатура,
		|	СоставНаборов.Характеристика,
		|	ВТНоменклатура.Номенклатура,
		|	ВТНоменклатура.Характеристика
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	СоставНабора.НоменклатураНабора КАК Номенклатура,
		|	СоставНабора.ХарактеристикаНабора КАК Характеристика,
		|	СУММА(ВЫРАЗИТЬ(ЦеныНоменклатурыСрезПоследних.Цена * СоставНабора.Количество КАК ЧИСЛО(15, 2))) КАК Цена
		|ПОМЕСТИТЬ ВТЦеныНаборов
		|ИЗ
		|	ВТСоставНабора КАК СоставНабора
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
		|				&Период,
		|				(ВидЦены, Номенклатура, Характеристика) В
		|						(ВЫБРАТЬ
		|							&ВидЦены,
		|							ВТСоставНабора.Номенклатура,
		|							ВТСоставНабора.Характеристика
		|						ИЗ
		|							ВТСоставНабора)) КАК ЦеныНоменклатурыСрезПоследних
		|		ПО СоставНабора.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
		|			И СоставНабора.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
		|ГДЕ
		|	НЕ ЦеныНоменклатурыСрезПоследних.ВидЦены ЕСТЬ NULL
		|
		|СГРУППИРОВАТЬ ПО
		|	СоставНабора.НоменклатураНабора,
		|	СоставНабора.ХарактеристикаНабора
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТНоменклатура.Номенклатура КАК Номенклатура,
		|	МАКСИМУМ(ВТЦеныНаборов.Цена * ВТНоменклатура.КоэффициентУпаковки) КАК Цена
		|ИЗ
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНаборов КАК ВТЦеныНаборов
		|		ПО (ВТНоменклатура.Номенклатура = ВТЦеныНаборов.Номенклатура)
		|			И (ВТНоменклатура.Характеристика = ВТЦеныНаборов.Характеристика)
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТНоменклатура.Номенклатура";
		//БИТ Смирнов А.П. 16.11.2022 )				

	ИначеЕсли ПолучитьФункциональнуюОпцию("ИспользуетсяЦенообразование25")  Тогда
		
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
		|	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
		// ++ Бойков BSLR-2290
		|	топ_СоответствиеТоваров.Упаковка КАК Упаковка,
		|	ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
		|			ТОГДА 1
		|		КОГДА топ_СоответствиеТоваров.Упаковка.Числитель = 0 ИЛИ топ_СоответствиеТоваров.Упаковка.Знаменатель = 0
		|			ТОГДА 1
		|		ИНАЧЕ топ_СоответствиеТоваров.Упаковка.Числитель / топ_СоответствиеТоваров.Упаковка.Знаменатель
		|	КОНЕЦ КАК КоэффициентУпаковки
		// -- Бойков BSLR-2290
		|ПОМЕСТИТЬ ВТНоменклатура
		|ИЗ
		|	РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
		|ГДЕ
		|	топ_СоответствиеТоваров.Товар = &Товар
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ЦеныНоменклатурыСрезПоследних.ХарактеристикаЦО КАК ХарактеристикаЦО,
		|	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
		// ++ Бойков BSLR-2290
		|	ЦеныНоменклатурыСрезПоследних.Упаковка КАК Упаковка,
		// -- Бойков BSLR-2290
		|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		|ПОМЕСТИТЬ ВТЦены
		|ИЗ
		|	РегистрСведений.ЦеныНоменклатуры25.СрезПоследних(
		|			&Период,
		|			Валюта.Код = &ВалютаКод
		|				И ВидЦены = &ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		// ++ Бойков BSLR-2290
		|ВЫБРАТЬ
		|	ВТНоменклатура.Номенклатура КАК Номенклатура,
		|	ЕСТЬNULL(ВТЦены.Цена, 0) КАК Цена,
		|	1 КАК Приоритет
		|ПОМЕСТИТЬ ВТ_ЦеныНоменклатурыПредварительно
		|ИЗ
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦены КАК ВТЦены
		|		ПО (ВТНоменклатура.Номенклатура = ВТЦены.Номенклатура
		|			И ВТНоменклатура.Упаковка = ВТЦены.Упаковка
		|			И ВЫБОР
		|				КОГДА ВТНоменклатура.Номенклатура.ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
		|					ТОГДА ИСТИНА
		|				ИНАЧЕ ВТНоменклатура.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования = ВТЦены.ХарактеристикаЦО
		|			КОНЕЦ)
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	ВТНоменклатура.Номенклатура,
		|	ЕСТЬNULL(ВТЦены.Цена, 0) * ВТНоменклатура.КоэффициентУпаковки,
		|	2
		|ИЗ
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦены КАК ВТЦены
		|		ПО (ВТНоменклатура.Номенклатура = ВТЦены.Номенклатура
		|			И ВТЦены.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
		|			И ВЫБОР
		|				КОГДА ВТНоменклатура.Номенклатура.ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
		|					ТОГДА ИСТИНА
		|				ИНАЧЕ ВТНоменклатура.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования = ВТЦены.ХарактеристикаЦО
		|			КОНЕЦ)
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ЦеныНоменклатурыПредварительно.Номенклатура КАК Номенклатура,
		|	МИНИМУМ(ВТ_ЦеныНоменклатурыПредварительно.Приоритет) КАК Приоритет
		|ПОМЕСТИТЬ ВТ_ПриоритетыЦенНоменклатуры
		|ИЗ
		|	ВТ_ЦеныНоменклатурыПредварительно КАК ВТ_ЦеныНоменклатурыПредварительно
		|ГДЕ
		|	ВТ_ЦеныНоменклатурыПредварительно.Цена <> 0
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТ_ЦеныНоменклатурыПредварительно.Номенклатура
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ЦеныНоменклатурыПредварительно.Номенклатура КАК Номенклатура,
		|	ВТ_ЦеныНоменклатурыПредварительно.Цена КАК Цена
		|ИЗ
		|	ВТ_ЦеныНоменклатурыПредварительно КАК ВТ_ЦеныНоменклатурыПредварительно
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПриоритетыЦенНоменклатуры КАК ВТ_ПриоритетыЦенНоменклатуры
		|		ПО ВТ_ЦеныНоменклатурыПредварительно.Номенклатура = ВТ_ПриоритетыЦенНоменклатуры.Номенклатура
		|			И ВТ_ЦеныНоменклатурыПредварительно.Приоритет = ВТ_ПриоритетыЦенНоменклатуры.Приоритет
		// -- Бойков BSLR-2290
		//БИТ Смирнов А.П. 16.11.2022 BSLR-971 (
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ                                           
		|	ВТНоменклатура.Номенклатура КАК НоменклатураНабора,
		|	ВТНоменклатура.Характеристика КАК ХарактеристикаНабора,
		// ++ Бойков BSLR-2290
		|	ВТНоменклатура.КоэффициентУпаковки КАК КоэффициентУпаковки,
		// -- Бойков BSLR-2290
		|	СоставНаборов.Номенклатура КАК Номенклатура,
		|	СоставНаборов.Характеристика КАК Характеристика,
		|	СУММА(СоставНаборов.КоличествоУпаковок) КАК Количество
		|ПОМЕСТИТЬ ВТСоставНабора
		|ИЗ 
		|	ВТНоменклатура КАК ВТНоменклатура
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК СоставНаборов
		|		ПО (ВТНоменклатура.Номенклатура = СоставНаборов.Ссылка.Владелец
		|			И ВТНоменклатура.Характеристика = СоставНаборов.Ссылка.Характеристика)
		|ГДЕ
		|	ВТНоменклатура.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
		|
		|СГРУППИРОВАТЬ ПО
		|	СоставНаборов.Номенклатура,
		|	СоставНаборов.Характеристика,
		|	ВТНоменклатура.Номенклатура,
		|	ВТНоменклатура.Характеристика,
		|	ВТНоменклатура.КоэффициентУпаковки
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ВТСоставНабора.НоменклатураНабора КАК НоменклатураНабора,
		|	ВТСоставНабора.ХарактеристикаНабора КАК ХарактеристикаНабора,
		|	ВТСоставНабора.Номенклатура КАК Номенклатура,
		|	ВТСоставНабора.Характеристика КАК Характеристика,
		|	МАКСИМУМ(ВТЦены.Цена) КАК Цена
		|ПОМЕСТИТЬ ВТЦеныНаборов
		|ИЗ
		|	ВТСоставНабора КАК ВТСоставНабора
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦены КАК ВТЦены
		|		ПО ВТСоставНабора.Номенклатура = ВТЦены.Номенклатура
		|			И (ЕСТЬNULL(ВТСоставНабора.Характеристика.ХарактеристикаНоменклатурыДляЦенообразования, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка)) = ВЫБОР
		|				КОГДА ВТСоставНабора.Номенклатура.ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = ЗНАЧЕНИЕ(Перечисление.ВариантОтбораДляКлючаЦен.НеИспользовать)
		|					ТОГДА ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатурыДляЦенообразования.ПустаяСсылка)
		|				ИНАЧЕ ВТЦены.ХарактеристикаЦО
		|			КОНЕЦ)
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТСоставНабора.Номенклатура,
		|	ВТСоставНабора.Характеристика,
		|	ВТСоставНабора.НоменклатураНабора,
		|	ВТСоставНабора.ХарактеристикаНабора
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТСоставНабора.НоменклатураНабора КАК Номенклатура,
		|	СУММА(ВЫРАЗИТЬ(ВТЦеныНаборов.Цена * ВТСоставНабора.Количество КАК ЧИСЛО(15, 2)) * ВТСоставНабора.КоэффициентУпаковки) КАК Цена
		|ИЗ
		|	ВТСоставНабора КАК ВТСоставНабора
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТЦеныНаборов КАК ВТЦеныНаборов
		|		ПО (ВТСоставНабора.Номенклатура = ВТЦеныНаборов.Номенклатура)
		|			И (ВТСоставНабора.Характеристика = ВТЦеныНаборов.Характеристика)
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТСоставНабора.НоменклатураНабора";
		//БИТ Смирнов А.П. 16.11.2022 )					

	КонецЕсли;
	
	Запрос.УстановитьПараметр("ВалютаКод", "643");
	Запрос.УстановитьПараметр("Товар", Товар);
	Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
	Запрос.УстановитьПараметр("Период", Период);	
	
	//БИТ Смирнов А.П. 15.11.2022 BSLR-971 (
	//РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	РезультатПакет = Запрос.ВыполнитьПакет();
	РезультатЗапроса 	   = РезультатПакет[4].Выгрузить(); // Бойков BSLR-2290
	РезультатЗапросаНаборы = РезультатПакет[РезультатПакет.Количество()-1].Выгрузить();
	//БИТ Смирнов А.П. 15.11.2022 )	
	
	Если РезультатЗапроса.Количество() > 1 Тогда
		Сообщить("Ошибка при определении цены товара " + Товар);
		Возврат 0;
	ИначеЕсли РезультатЗапроса.Количество() Тогда
		//БИТ Смирнов А.П. 15.11.2022 BSLR-971 (
		//Возврат РезультатЗапроса[0].Цена;
		ЦенаРезультат = 0;
		Если ЗначениеЗаполнено(РезультатЗапроса[0].Цена) Тогда
            ЦенаРезультат = РезультатЗапроса[0].Цена;     
        ИначеЕсли РезультатЗапросаНаборы.Количество() Тогда //BT BSLR-1219 Тетерин А.С. проверим что в наборах что-то есть 
			Если ЗначениеЗаполнено(РезультатЗапросаНаборы[0].Цена) Тогда
				ЦенаРезультат = РезультатЗапросаНаборы[0].Цена;    
			КонецЕсли;
        КонецЕсли;           
		Возврат ЦенаРезультат;
		//БИТ Смирнов А.П. 15.11.2022 )	
	Иначе
		Возврат 0;
	КонецЕсли;
	//Симонова 30.05.2022 ) 
	
#КонецОбласти
	
КонецФункции

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

	ПараметрыЗаполнения = Новый Структура;
	ПараметрыЗаполнения.Вставить("Дата", Дата);
	// BSLR-4810 ++
	//ПараметрыЗаполнения.Вставить("Валюта", Справочники.Валюты.НайтиПоКоду("643"));
	Если Валюта = Неопределено Или Валюта = "" ТОгда // BSLR-5097
		ВалютаСпр = Справочники.Валюты.НайтиПоКоду("643");
    Иначе
		ВалютаСпр = Справочники.Валюты.НайтиПоНаименованию(Валюта); 
		Если ВалютаСпр = Неопределено Или ВалютаСпр = Справочники.Валюты.ПустаяСсылка() ТОгда  // BSLR-5233
			ВалютаСпр = Справочники.Валюты.НайтиПоКоду("643");
		КонецЕсли; 
	КонецЕсли;
	ПараметрыЗаполнения.Вставить("Валюта",ВалютаСпр);
	// BSLR-4810 --
	ПараметрыЗаполнения.Вставить("ВидЦены", ВидЦены);
	ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦены");
	
    // ут 11.5
	ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер = Метаданные.ОбщиеМодули.Найти("ЦеныПредприятияЗаполнениеСервер");
	Если ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер <> Неопределено Тогда 
		ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер = ОбщегоНазначения.ОбщийМодуль("ЦеныПредприятияЗаполнениеСервер");
		ЦеныРассчитаны = ОбщийМодуль_ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
		ОбщаяТабл,
		Неопределено, // Массив строк или структура отбора.
		ПараметрыЗаполнения);
	Иначе 		
		// ут 11.4
		ОбщийМодуль_ПродажиСервер = Метаданные.ОбщиеМодули.Найти("ПродажиСервер");
		Если ОбщийМодуль_ПродажиСервер <> Неопределено Тогда
			ОбщийМодуль_ПродажиСервер = ОбщегоНазначения.ОбщийМодуль("ПродажиСервер");
			ЦеныРассчитаны = ОбщийМодуль_ПродажиСервер.ЗаполнитьЦены(
			ОбщаяТабл,
			Неопределено, // Массив строк или структура отбора.
			ПараметрыЗаполнения);
		КонецЕсли;		
	КонецЕсли;  
	
	// для наборов, цена которых должна быть расчитана по ценам составляющих нужно пересчитывать по строчно
	Для Каждого ДанныеТовара из ОбщаяТабл Цикл
		Если ДанныеТовара.Цена = 0 Тогда
			Если ДанныеТовара.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Набор Тогда
				// если цену не получили (нет установленной цены на набор) тогда, расчитаем по составу набора 
					
				ПараметрыВариантаКомплектацииНоменклатуры = НаборыВызовСервера.ПараметрыВариантаКомплектацииНоменклатуры(
				ДанныеТовара.Номенклатура,
				ДанныеТовара.Характеристика);
				
				Если ПараметрыВариантаКомплектацииНоменклатуры <> Неопределено Тогда // состав набора настроен
					
					ВариантКомплектацииНоменклатуры = ПараметрыВариантаКомплектацииНоменклатуры.ВариантКомплектацииНоменклатуры;
					
					ПараметрыКомплектующих = Новый Структура;
					ПараметрыКомплектующих.Вставить("НоменклатураНабора",              ДанныеТовара.Номенклатура);
					ПараметрыКомплектующих.Вставить("ХарактеристикаНабора",            ДанныеТовара.Характеристика);
					ПараметрыКомплектующих.Вставить("ВариантКомплектацииНоменклатуры", ВариантКомплектацииНоменклатуры);
					ПараметрыКомплектующих.Вставить("ВидЦены", ВидЦены);
					ПараметрыКомплектующих.Вставить("Валюта", Справочники.Валюты.НайтиПоКоду("643"));
					ПараметрыКомплектующих.Вставить("КоличествоУпаковок", 1);
					ПараметрыКомплектующих.Вставить("ПроцентРучнойСкидки", 0);
					
					ДополнительныеПараметры = Новый Структура;
					ДополнительныеПараметры.Вставить("Дата",    Дата);
					ДополнительныеПараметры.Вставить("Валюта",  Справочники.Валюты.НайтиПоКоду("643"));
					ДополнительныеПараметры.Вставить("ВидЦены", ВидЦены);
					ДополнительныеПараметры.Вставить("Цена", 0);
		
					ПодобранныеТовары = НаборыВызовСервера.Комплектующие(ПараметрыКомплектующих, ДополнительныеПараметры);
					
					Для каждого ПодТов Из ПодобранныеТовары Цикл 				
						ДанныеТовара.Цена = ДанныеТовара.Цена + ПодТов.Цена * ПодТов.КоличествоУпаковок; 				
					КонецЦикла;
				КонецЕсли;
			КонецЕсли; 
		КонецЕсли;
	КонецЦикла;
	
	// группировка по товару - по макс цене
	ЗапросИтоговый = Новый Запрос("ВЫБРАТЬ
	                      |	Товары.Товар КАК Товар,
	                      |	Товары.ВидЦены КАК ВидЦены,
	                      |	Товары.Цена КАК Цена
	                      |ПОМЕСТИТЬ ВТ_ТоварыДокумента
	                      |ИЗ
	                      |	&ТаблицаТоваров КАК Товары
	                      |;
	                      |
	                      |////////////////////////////////////////////////////////////////////////////////
	                      |ВЫБРАТЬ
	                      |	ВТ_ТоварыДокумента.Товар КАК Товар,
	                      |	ВТ_ТоварыДокумента.ВидЦены КАК ВидЦены,
	                      |	МАКСИМУМ(ВТ_ТоварыДокумента.Цена) КАК Цена
	                      |ИЗ
	                      |	ВТ_ТоварыДокумента КАК ВТ_ТоварыДокумента
	                      |
	                      |СГРУППИРОВАТЬ ПО
	                      |	ВТ_ТоварыДокумента.Товар,
	                      |	ВТ_ТоварыДокумента.ВидЦены"); 
	
	ЗапросИтоговый.УстановитьПараметр("ТаблицаТоваров",ОбщаяТабл);
	
	ТаблРезультат = ЗапросИтоговый.Выполнить().Выгрузить(); 	

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

// письмерова 26.09.2024 BSLR-3848
// для рег задания по шаблону и перезаписи элементов справочника топ_ШаблоныУстановкиЦен
Функция ПолучитьШаблоныУстановкиЦен() Экспорт
	
	Результат = Новый Структура("Шаблон_ПолучениеДанных, Шаблон_ОбработкаСтрок","","");
	
	Обр = Обработки.топ_УстановкаЦен.Создать();
	пНастройки = ХранилищеОбщихНастроек.Загрузить(Обр.СведенияОВнешнейОбработке().Наименование, "Шаблон");
	пДанные = Десериализовать(пНастройки);
	
	Результат.Шаблон_ПолучениеДанных = пДанные.Шаблон_ПолучениеДанных;
	Результат.Шаблон_ОбработкаСтрок = пДанные.Шаблон_ОбработкаСтрок;
	
	Возврат Результат; 
	
КонецФункции
// письмерова 26.09.2024 BSLR-3848
Функция Десериализовать(Текст) Экспорт
	
	пЧтениеJSON = Новый ЧтениеJSON;
	пЧтениеJSON.УстановитьСтроку(Текст);
	пДанные = ПолучитьЗначениеИзJSON(пЧтениеJSON);
	пЧтениеJSON.Закрыть();
	
	Возврат пДанные;
	
КонецФункции

Функция ПолучитьЗначениеИзJSON(ЧтениеJSON)
	
	Пока ЧтениеJSON.Прочитать() Цикл
		Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
			Возврат ЧтениеJSON.ТекущееЗначение;
		ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоМассива Тогда
			Возврат ПолучитьМассивИзJSON(ЧтениеJSON);
		ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта Тогда
			Возврат ПолучитьСтруктуруИзJSON(ЧтениеJSON);
		ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.КонецМассива
		      ИЛИ ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.КонецОбъекта Тогда
			Возврат Null;
		КонецЕсли;
	КонецЦикла;
	
КонецФункции

Функция ПолучитьМассивИзJSON(ЧтениеJSON)
	
	пМассив = Новый Массив;
	
	Пока ЧтениеJSON.Прочитать() Цикл
		Если ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.КонецМассива Тогда
			Возврат пМассив;
		ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Тогда
			пМассив.Добавить(ЧтениеJSON.ТекущееЗначение);
		ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоМассива Тогда
			пМассив.Добавить(ПолучитьМассивИзJSON(ЧтениеJSON));
		ИначеЕсли ЧтениеJSON.ТипТекущегоЗначения = ТипЗначенияJSON.НачалоОбъекта Тогда
			пМассив.Добавить(ПолучитьСтруктуруИзJSON(ЧтениеJSON));
		КонецЕсли;
	КонецЦикла;
	
КонецФункции

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


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

// ++ Бойков BSLR-3730
//
Процедура ИнициализироватьВременныеТаблицыДляПланированияПоставокFBO(МенеджерВременныхТаблиц, ПараметрыЗапроса) Экспорт
	
	ОбщийМодуль =  топ_ОбщийВызовСервера.ПолучитьМодульПоКонфигурации();
	Если ТипЗнч(ОбщийМодуль) = Тип("Строка") Тогда
		ВызватьИсключение ОбщийМодуль;
	Иначе	
		ОбщийМодуль.ИнициализироватьВременныеТаблицыДляПланированияПоставокFBO(МенеджерВременныхТаблиц, ПараметрыЗапроса);
	КонецЕсли;
	
КонецПроцедуры // -- Бойков BSLR-3730

// ++ Бойков BSLR-3730
//
Функция ТекстЗапросаПредопределенногоИсточникаДанныхВыручка() Экспорт
	
	ОбщийМодуль =  топ_ОбщийВызовСервера.ПолучитьМодульПоКонфигурации();
	Если ТипЗнч(ОбщийМодуль) = Тип("Строка") Тогда
		ВызватьИсключение ОбщийМодуль;
	Иначе	
		Возврат ОбщийМодуль.ТекстЗапросаПредопределенногоИсточникаДанныхВыручка();
	КонецЕсли;
	
КонецФункции // -- Бойков BSLR-3730

// ++ Бойков BSLR-3730
//
Функция ТекстЗапросаПредопределенногоИсточникаДанныхСебестоимость() Экспорт
	
	ОбщийМодуль =  топ_ОбщийВызовСервера.ПолучитьМодульПоКонфигурации();
	Если ТипЗнч(ОбщийМодуль) = Тип("Строка") Тогда
		ВызватьИсключение ОбщийМодуль;
	Иначе	
		Возврат ОбщийМодуль.ТекстЗапросаПредопределенногоИсточникаДанныхСебестоимость();
	КонецЕсли;
	
КонецФункции // -- Бойков BSLR-3730

 #Область Сообщить_Пользователю

#Если Сервер ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда
	// Формирует и выводит сообщение, которое может быть связано с элементом управления формы.
	//
	// Параметры:
	//  ТекстСообщенияПользователю - Строка - текст сообщения.
	//  КлючДанных - ЛюбаяСсылка - объект или ключ записи информационной базы, к которому это сообщение относится.
	//  Поле - Строка - наименование реквизита формы.
	//  ПутьКДанным - Строка - путь к данным (путь к реквизиту формы).
	//  Отказ - Булево - выходной параметр, всегда устанавливается в значение Истина.
	//
	// Пример:
	//
	//  1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
	//  топ_ОбщийМодульСервер.СообщитьПользователю(
	//   НСтр("ru = 'Сообщение об ошибке.'"), ,
	//   "ПолеВРеквизитеФормыОбъект",
	//   "Объект");
	//
	//  Альтернативный вариант использования в форме объекта:
	//  топ_ОбщийМодульСервер.СообщитьПользователю(
	//   НСтр("ru = 'Сообщение об ошибке.'"), ,
	//   "Объект.ПолеВРеквизитеФормыОбъект");
	//
	//  2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
	//  топ_ОбщийМодульСервер.СообщитьПользователю(
	//   НСтр("ru = 'Сообщение об ошибке.'"), ,
	//   "ИмяРеквизитаФормы");
	//
	//  3. Для вывода сообщения связанного с объектом информационной базы:
	//  топ_ОбщийМодульСервер.СообщитьПользователю(
	//   НСтр("ru = 'Сообщение об ошибке.'"), ОбъектИнформационнойБазы, "Ответственный",,Отказ);
	//
	//  4. Для вывода сообщения по ссылке на объект информационной базы:
	//  топ_ОбщийМодульСервер.СообщитьПользователю(
	//   НСтр("ru = 'Сообщение об ошибке.'"), Ссылка, , , Отказ);
	//
	//  Случаи некорректного использования:
	//   1. Передача одновременно параметров КлючДанных и ПутьКДанным.
	//   2. Передача в параметре КлючДанных значения типа отличного от допустимого.
	//   3. Установка ссылки без установки поля (и/или пути к данным).
	//
	Процедура СообщитьПользователю( 
		Знач ТекстСообщенияПользователю,
		Знач КлючДанных = Неопределено,
		Знач Поле = "",
		Знач ПутьКДанным = "",
		Отказ = Ложь) Экспорт
		
		ЭтоОбъект = Ложь;
		
		Если КлючДанных <> Неопределено
			И XMLТипЗнч(КлючДанных) <> Неопределено Тогда
			
			ТипЗначенияСтрокой = XMLТипЗнч(КлючДанных).ИмяТипа;
			ЭтоОбъект = СтрНайти(ТипЗначенияСтрокой, "Object.") > 0;
		КонецЕсли;
		
		СообщитьПользователю_Служебная(
		ТекстСообщенияПользователю,
		КлючДанных,
		Поле,
		ПутьКДанным,
		Отказ,
		ЭтоОбъект);
		
	КонецПроцедуры
#КонецЕсли

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

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

#Область Статусы

&НаСервере
Функция ВернутьСтатусЗаказаТорговойПлощадки(ЗаказТорговойПлощадки) Экспорт
	
	//BSLR-2881, Чупраков А.Н., 08.02.24
	//Запрос = Новый Запрос;
	//Запрос.Текст = "ВЫБРАТЬ
	//               |	топ_СтатусыЗаказовТорговойПлощадкиСрезПоследних.Статус КАК Статус,
	//               |	топ_СтатусыЗаказовТорговойПлощадкиСрезПоследних.УнифицированныйСтатус КАК УнифицированныйСтатус
	//               |ИЗ
	//               |	РегистрСведений.топ_СтатусыЗаказовТорговойПлощадки.СрезПоследних(, ЗаказТорговойПлощадки = &ЗаказТорговойПлощадки) КАК топ_СтатусыЗаказовТорговойПлощадкиСрезПоследних";
	//
	//Запрос.УстановитьПараметр("ЗаказТорговойПлощадки",  ЗаказТорговойПлощадки);	
	
	СтруктураСтатусов = Новый Структура("Статус,УнифицированныйСтатус");
	СтруктураСтатусов.Статус 				= Справочники.топ_СтатусыЗаказовНаТорговыхПлощадках.ПустаяСсылка();
	СтруктураСтатусов.УнифицированныйСтатус = Справочники.топ_УнифицированныеСтатусыТорговыхПлощадок.ПустаяСсылка();

	//РезультатЗапроса = Запрос.Выполнить();
	//Если РезультатЗапроса.Пустой() Тогда 
	//	Возврат СтруктураСтатусов;
	//КонецЕсли; 
	
	МенеджерЗаписи = РегистрыСведений.топ_СтатусыЗаказовТорговойПлощадкиАктуальные.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.ЗаказТорговойПлощадки = ЗаказТорговойПлощадки;
	МенеджерЗаписи.Прочитать(); 
	
	Если МенеджерЗаписи.Выбран() = Ложь Тогда 
		Возврат СтруктураСтатусов;
	КонецЕсли;	 
	
	ЗаполнитьЗначенияСвойств(СтруктураСтатусов, МенеджерЗаписи);
	
	//Выборка = РезультатЗапроса.Выбрать();
	//Выборка.Следующий(); 	
	//ЗаполнитьЗначенияСвойств(СтруктураСтатусов, Выборка);
	
	Возврат СтруктураСтатусов;
	
КонецФункции

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

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

// Функция - Вернуть связанную номенклатуру
//
// Параметры:
//  Товар	 - Товар торговой площадки	 - 
// 
// Возвращаемое значение:
//   - Структура, содержащая связанную номенклатуру и характеристику с товаром
//
&НаСервере
Функция ВернутьСвязаннуюНоменклатуру(Товар) Экспорт
	
	СтруктураНоменклатуры = Новый Структура("Номенклатура,Характеристика");

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

// Функция - Вернуть связанную номенклатуру
//
// Параметры:
//  Товар	 - Товар торговой площадки	 - 
// 
// Возвращаемое значение:
//   - Структура, содержащая связанную номенклатуру и характеристику с товаром
//
&НаСервере
Функция ВернутьСвязаннуюНоменклатуруРазмерWB(Товар, РазмерWB = Неопределено) Экспорт
	
	СтруктураНоменклатуры = Новый Структура("Номенклатура,Характеристика,Упаковка");

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

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

// Функция - Создать (или заменить существующую) номенклатуру на основании товара.
//
// Параметры:
//  ПараметрыСвязи	 - структура с необходимыми данными 
// 
// Возвращаемое значение:
//   - Создает элемент справочника номенклатуры (или обновляет уже существующий) и возвращает его ссылку. Устанавливает связь в регистре
//
&НаСервере
Функция СоздатьНоменклатуруНаОснованииТовара(ПараметрыСвязи) Экспорт
	
	ДанныеПоТекущейСвязи = ВернутьСвязаннуюНоменклатуруРазмерWB(ПараметрыСвязи.Товар, ПараметрыСвязи.РазмерWB);
	
	// письмерова 13.04.2023 BSLR-1720
	Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
	Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
	
	ПараметрыСвязи.Вставить("ТекущаяНоменклатура"	, ДанныеПоТекущейСвязи.Номенклатура);
	ПараметрыСвязи.Вставить("ТекущаяХарактеристика"	, ДанныеПоТекущейСвязи.Характеристика);
	
	// ++ Бойков BSLR-3054
	Если ПараметрыСвязи.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет Тогда
		КодТовара = СтрЗаменить(СтрЗаменить(Строка(ПараметрыСвязи.Товар.offer_id), " ", ""), " ", "");
	Иначе
		КодТовара = СтрЗаменить(СтрЗаменить(Строка(ПараметрыСвязи.Товар.ID), " ", ""), " ", "");
	КонецЕсли;
	// -- Бойков BSLR-3054
	
	Если ПараметрыСвязи.НоваяНоменклатура.Пустая() Тогда
		
		Если ЗначениеЗаполнено(ПараметрыСвязи.Товар.КодПоставщика) Тогда
			АртикулТовара = ПараметрыСвязи.Товар.КодПоставщика;
		ИначеЕсли ЗначениеЗаполнено(ПараметрыСвязи.Товар.АртикулЦвета) Тогда
			АртикулТовара = ПараметрыСвязи.Товар.АртикулЦвета;
		КонецЕсли;
				
		Если ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоАртикулу Тогда 
			
			Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Строка(АртикулТовара));
			//БИТ Смирнов А.П. 21.11.2022 BSLR-978 ( 
			Если Номенклатура.Пустая() Тогда
				Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("топ_АртикулПоставщика",Строка(ПараметрыСвязи.Товар.КодПоставщика));
			КонецЕсли;
		ИначеЕсли ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоКодуIDТовара Тогда 
			
			Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Строка(КодТовара));
			     
			
		ИначеЕсли ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоКодуАртикулуТовара Тогда 
			
			Номенклатура = Справочники.Номенклатура.НайтиПоКоду(Строка(АртикулТовара));
			
		ИначеЕсли ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоШтрихкоду Тогда
			

		// письмерова 13.04.2023 BSLR-1720
		Запрос = Новый Запрос("ВЫБРАТЬ
							|	топ_Штрихкоды.Штрихкод КАК Штрихкод,
							// ++ Бойков BSLR-2411
							|	ИСТИНА КАК ПодобратьХарактеристикуПоШтрихкоду
							// -- Бойков BSLR-2411
							|ПОМЕСТИТЬ ВТШтрихкодыТовара
							|ИЗ
							|	РегистрСведений.топ_Штрихкоды КАК топ_Штрихкоды
							|ГДЕ
							|	топ_Штрихкоды.Товар = &Товар
							|		И топ_Штрихкоды.РазмерWB = &РазмерWB
							// ++ Бойков BSLR-2411. Если у товара несколько размеров с разными штрихкодами, номенклатура дублируется (создается новая под каждый штрихкод)
							|
							|ОБЪЕДИНИТЬ ВСЕ
							|
							|ВЫБРАТЬ
							|	топ_Штрихкоды.Штрихкод,
							|	ЛОЖЬ
							|ИЗ
							|	РегистрСведений.топ_Штрихкоды КАК топ_Штрихкоды
							|ГДЕ
							|	топ_Штрихкоды.Товар = &Товар
							|		И НЕ топ_Штрихкоды.РазмерWB = &РазмерWB
							// -- Бойков BSLR-2411
							|;
							|
							|////////////////////////////////////////////////////////////////////////////////
							|ВЫБРАТЬ
							|	ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
							// ++ Бойков BSLR-2411
							|	ВЫБОР
							|		КОГДА ВТШтрихкодыТовара.ПодобратьХарактеристикуПоШтрихкоду 
							|			ТОГДА ШтрихкодыНоменклатуры.Характеристика
							|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
							|	КОНЕЦ КАК Характеристика
							// -- Бойков BSLR-2411
							|ИЗ
							|	ВТШтрихкодыТовара КАК ВТШтрихкодыТовара
							|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
							|		ПО ВТШтрихкодыТовара.Штрихкод = ШтрихкодыНоменклатуры.Штрихкод
							|ГДЕ
							|	НЕ ШтрихкодыНоменклатуры.Номенклатура ЕСТЬ NULL
							|
							|УПОРЯДОЧИТЬ ПО
							|	Номенклатура,
							|	ВТШтрихкодыТовара.ПодобратьХарактеристикуПоШтрихкоду УБЫВ");
		
		    Запрос.УстановитьПараметр("Товар", ПараметрыСвязи.Товар);
			Запрос.УстановитьПараметр("РазмерWB", ?(ПараметрыСвязи.РазмерWB = Неопределено, Справочники.топ_РазмерыТоваровWB.ПустаяСсылка(), ПараметрыСвязи.РазмерWB)); // BSLR-1887
			ВЫборка = Запрос.Выполнить().Выбрать();
			
			Если Выборка.Следующий() Тогда
				Номенклатура = Выборка.Номенклатура;
				Характеристика = Выборка.Характеристика;
			КонецЕсли;			
			
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда	
			Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); 
			Номенклатура.Артикул = Строка(АртикулТовара);  //Для ВБ это поле согласуется с артикулом цвета товара (может быть не уникальным) торговой площадки
			Номенклатура.топ_АртикулПоставщика = Строка(ПараметрыСвязи.Товар.КодПоставщика); 
			ПараметрыСвязи.Вставить("ЭтоНовый", Истина);
			
		Иначе 
			//BSLR-3676+
			Сообщить("Для товара """ + ПараметрыСвязи.Товар + """ новая номенклатура не создана. Выполнено сопоставление с уже существующей номенклатурой. Для создания новой номенклатуры удалите существующую");
			//BSLR-3676-
			Номенклатура = Номенклатура.ПолучитьОбъект();
			ПараметрыСвязи.Вставить("ЭтоНовый", Ложь);			
		КонецЕсли;
		
	Иначе // Новая номенклатура указана
		
		Номенклатура = ПараметрыСвязи.НоваяНоменклатура.ПолучитьОбъект();
		ПараметрыСвязи.Вставить("ЭтоНовый", Ложь);
		
	КонецЕсли;
	
	Если ПараметрыСвязи.ИспользуютсяХарактеристики Тогда
		
		Если ПараметрыСвязи.НоваяХарактеристика.Пустая() Тогда
			
			Если ПараметрыСвязи.ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда	
				
				// письмерова 13.04.2023 BSLR-1720 - на случай если получили размер из запроса по шк
				Если Характеристика.Пустая() Тогда
					//+БИТ Тверитин	
					Если ЗначениеЗаполнено(ПараметрыСвязи.РазмерWB) Тогда						
						НаименованиеДляПоиска = ПараметрыСвязи.РазмерWB.Наименование;
						Если ПараметрыСвязи.Свойство("АртикулЦвета") И ЗначениеЗаполнено(ПараметрыСвязи.АртикулЦвета) Тогда
							НаименованиеДляПоиска = ПараметрыСвязи.АртикулЦвета + " " + НаименованиеДляПоиска;
						КонецЕсли; 
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(НаименованиеДляПоиска,,,ПараметрыСвязи.ВидНоменклатуры);
						//БИТ Смирнов А.П. 13.12.2022 ) 						
					Иначе
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.Товар.КодПоставщика,,,ПараметрыСвязи.ВидНоменклатуры);  
					КонецЕсли;
				КонецЕсли;
				
				Если Характеристика.Пустая() Тогда
					Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
				Иначе
					Характеристика = Характеристика.ПолучитьОбъект();
				КонецЕсли;   			
			
			ИначеЕсли ПараметрыСвязи.ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры Тогда
				// письмерова 13.04.2023 BSLR-1720 - на случай если получили размер из запроса по шк
				Если Характеристика.Пустая() Тогда
					Если ЗначениеЗаполнено(ПараметрыСвязи.РазмерWB) Тогда	
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.РазмерWB.Наименование,,,ПараметрыСвязи.НоваяНоменклатура);
					Иначе
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.Товар.КодПоставщика,,,ПараметрыСвязи.НоваяНоменклатура);  
					КонецЕсли;
				КонецЕсли;
				// письмерова 13.04.2023 BSLR-1720 - если нашли номенклатуру - искать с привязкой к ней
				Если Характеристика.Пустая() и Не ПараметрыСвязи.ЭтоНовый Тогда					
					Если ЗначениеЗаполнено(ПараметрыСвязи.РазмерWB) Тогда	
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.РазмерWB.Наименование,,,Номенклатура.Ссылка);
					Иначе
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.Товар.КодПоставщика,,,Номенклатура.Ссылка);  
					КонецЕсли;  					
				КонецЕсли;
				
				Если Характеристика.Пустая() Тогда
					Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
				Иначе
					Характеристика = Характеристика.ПолучитьОбъект();
				КонецЕсли;
				
			ИначеЕсли ПараметрыСвязи.ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
				// письмерова 13.04.2023 BSLR-1720 - на случай если получили размер из запроса по шк
				Если Характеристика.Пустая() Тогда
					Если ЗначениеЗаполнено(ПараметрыСвязи.РазмерWB) Тогда	
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.РазмерWB.Наименование,,,ПараметрыСвязи.ВидНоменклатуры.ВладелецХарактеристик);
					Иначе
						Характеристика = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ПараметрыСвязи.Товар.КодПоставщика,,,ПараметрыСвязи.ВидНоменклатуры.ВладелецХарактеристик);  
					КонецЕсли;
				КонецЕсли;
				
				Если Характеристика.Пустая() Тогда
					Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
				Иначе
					Характеристика = Характеристика.ПолучитьОбъект();
				КонецЕсли;
			ИначеЕсли ПараметрыСвязи.ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать Тогда  // письмерова 13.04.2023 BSLR-1720
				Характеристика = Неопределено;	
			КонецЕсли;
			//если характеристики не используются для данного вида, то ничего не создаётся	
 	
			//-БИТ Тверитин				
					
		Иначе 
			Характеристика = ПараметрыСвязи.НоваяХарактеристика;
		КонецЕсли;
		
	Иначе //БИТ Тверитин
		Характеристика = Неопределено; // письмерова 13.04.2023 BSLR-1720
	КонецЕсли;
                                                    //передаются объекты к заполнению
	ЗаполнитьРеквизитыНоменклатурыНаОснованииТовара(Номенклатура, Характеристика, ПараметрыСвязи);
	
	Возврат Номенклатура.Ссылка;
	
КонецФункции


// Процедура - Удалить информацию по старой связи
//
// Параметры:
//  ПараметрыСвязи	 - структура с необходимыми данными 
//
&НаСервере
Процедура УдалитьИнформациюПоСтаройСвязи(ПараметрыСвязи)
	
	// Очистка прошлой связи
	ЗаписьРегистра = РегистрыСведений.топ_СоответствиеТоваров.СоздатьМенеджерЗаписи();
	
	ЗаписьРегистра.Номенклатура 	= ПараметрыСвязи.ТекущаяНоменклатура;
	ЗаписьРегистра.Характеристика	= ПараметрыСвязи.ТекущаяХарактеристика;
	ЗаписьРегистра.Товар			= ПараметрыСвязи.Товар;
	//> БИТ - КондращенкоМ
	ЗаписьРегистра.РазмерWB			= ПараметрыСвязи.РазмерWB;
	//< БИТ - КондращенкоМ
	
	//БИТ Смирнов А.П. 16.12.2022 BSLR-958 ( 
	Если ПараметрыСвязи.Свойство("Упаковка") Тогда
		ЗаписьРегистра.Упаковка			= ПараметрыСвязи.Упаковка;
	КонецЕсли;
	//БИТ Смирнов А.П. 16.12.2022 ) 
	
	ЗаписьРегистра.Прочитать();
	
	Если ЗаписьРегистра.Выбран() Тогда
		ЗаписьРегистра.Удалить();
	КонецЕсли;
	
	// ++ Бойков BSLR-3205
	Если ПараметрыСвязи.ДобавлятьШК Тогда
		// Удаление старого штрихкода
		// ++ Бойков BSLR-2454. Для товара возвращается массив штрихкодов, некорректно заполнялась запись регистра
		МассивШтрихкодов = ВернутьШтрихкодыТовара(ПараметрыСвязи.Товар, ПараметрыСвязи.РазмерWB);
		Для Каждого Штрихкод Из МассивШтрихкодов Цикл
			
			// Считываем ШК через набор записей. В УТ и УНФ разные структуры регистров, менеджер записи отрабатывает некорректно
			НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Штрихкод.Установить(Штрихкод);
			НаборЗаписей.Прочитать();
			
			Если НаборЗаписей.Количество() Тогда
				ЗаписиКУдалению = Новый Массив;
				Для Каждого Запись Из НаборЗаписей Цикл
					// Удаляем запись ШК только для неактуальных номенклатуры и характеристики
					Если Не (Запись.Номенклатура = ПараметрыСвязи.НоваяНоменклатура И Запись.Характеристика = ПараметрыСвязи.НоваяХарактеристика) Тогда
						ЗаписиКУдалению.Добавить(Запись);
					КонецЕсли;
				КонецЦикла;
				
				Для Каждого Запись Из ЗаписиКУдалению Цикл
					НаборЗаписей.Удалить(Запись);
				КонецЦикла;
				
				Если НаборЗаписей.Модифицированность() Тогда
					НаборЗаписей.Записать();
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;
		// -- Бойков BSLR-2454
	КонецЕсли;
	// -- Бойков BSLR-3205
	
КонецПроцедуры

// Процедура - Связать номенклатуру и товар
//
// Параметры:
//  Номенклатура - Элемент справочника номенклатуры	 - 
//  Товар		 - Элемент справочника товаров торговых площадок	 - 
//
&НаСервере
Процедура СвязатьНоменклатуруИТовар(Номенклатура, Характеристика, ПараметрыСвязи)
	
	ЗаписьРегистра = РегистрыСведений.топ_СоответствиеТоваров.СоздатьМенеджерЗаписи();
	
	//BSLR-1713
	Запрос = Новый Запрос("ВЫБРАТЬ
	|	топ_СоответствиеТоваров.Товар КАК Товар,
	|	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
	|	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
	|	топ_СоответствиеТоваров.РазмерWB КАК РазмерWB,
	|	топ_СоответствиеТоваров.Упаковка КАК Упаковка
	|ИЗ
	|	РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
	|ГДЕ
	|	топ_СоответствиеТоваров.Товар = &Товар
	|	И топ_СоответствиеТоваров.РазмерWB = &РазмерWB
	|	И топ_СоответствиеТоваров.Номенклатура <> &Номенклатура");
	Запрос.УстановитьПараметр("Товар", ПараметрыСвязи.Товар);
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	Запрос.УстановитьПараметр("РазмерWB", ?(ЗначениеЗаполнено(ПараметрыСвязи.РазмерWB), ПараметрыСвязи.РазмерWB, Справочники.топ_РазмерыТоваровWB.ПустаяСсылка()));
	РезультатЗапроса = Запрос.Выполнить();
	
	Если НЕ РезультатЗапроса.Пустой() Тогда
		ТекстСообщения = СтрШаблон("Товар(%1) уже связан с другой номенклатурой", ПараметрыСвязи.Товар);
		ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
		Возврат;
	КонецЕсли;
    //BSLR-1713
	
	ЗаписьРегистра.Номенклатура		= Номенклатура;
	ЗаписьРегистра.Характеристика	= Характеристика;
	ЗаписьРегистра.Товар			= ПараметрыСвязи.Товар;
	//> БИТ - КондращенкоМ
	ЗаписьРегистра.РазмерWB			= ПараметрыСвязи.РазмерWB;
	//< БИТ - КондращенкоМ

	//БИТ Смирнов А.П. 16.12.2022 BSLR-958 (
	Если ПараметрыСвязи.Свойство("Упаковка") Тогда
		ЗаписьРегистра.Упаковка			= ПараметрыСвязи.Упаковка;
	КонецЕсли;
	//БИТ Смирнов А.П. 16.12.2022 ) 

	//> БИТ - ТверитинД
	ЗаписиКЗамещению = РегистрыСведений.топ_СоответствиеТоваров.СоздатьНаборЗаписей();
	ЗаписиКЗамещению.Отбор.Товар.Установить(ПараметрыСвязи.Товар);
	ЗаписиКЗамещению.Отбор.РазмерWB.Установить(ПараметрыСвязи.РазмерWB);
	ЗаписиКЗамещению.Записать();
	//< БИТ - ТверитинД	
	
	ЗаписьРегистра.Записать(Истина);
	
	ТекстСообщения = "Номенклатура " + Номенклатура + " и карточка МП " + ПараметрыСвязи.Товар + " успешно связаны!";
	СообщитьПользователю(ТекстСообщения);
КонецПроцедуры

// Процедура - Связать номенклатуру и товар при создании товара
//
// Параметры:
//  Номенклатура - Элемент справочника номенклатуры	 - 
//  Товар		 - Элемент справочника товаров торговых площадок	 - 
//
&НаСервере
Процедура СвязатьНоменклатуруИТоварПриСозданииТовара(Номенклатура, Характеристика, Размер, Товар) Экспорт

	ЗаписьРегистра = РегистрыСведений.топ_СоответствиеТоваров.СоздатьМенеджерЗаписи();
	
	ЗаписьРегистра.Номенклатура		= Номенклатура;
	ЗаписьРегистра.Характеристика	= Характеристика;
	ЗаписьРегистра.РазмерWB			= Размер;
	ЗаписьРегистра.Товар			= Товар;
	// Упаковку не заполняем по умолчанию единицей измерения из номенклатуры, т.к. у нее тип измеряемой величины не соответствует значению для упаковки.
	// Но визуально в форме списка и записи регистра, если упаковка пустая, она будет отображаться, как и в типовом функционале
	
	ЗаписьРегистра.Записать(Истина);
	
КонецПроцедуры 
//< БИТ - сопоставление_штрихкоды - КондращенкоМ

// Процедура - Скопировать штрихкод товара в номенклатуру
//
// Параметры:
//  Номенклатура - Элемент справочника номенклатуры	 - 
//  Товар		 - Элемент справочника товаров торговых площадок	 - 
//
&НаСервере
Процедура СкопироватьШтрихкод(Номенклатура, Характеристика, ПараметрыСвязи) Экспорт

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

		// ++ Бойков BSLR-2454. Считываем ШК через набор записей. В УТ и УНФ разные структуры регистров, менеджер записи отрабатывает некорректно
		НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Штрихкод.Установить(Выборка.Штрихкод);
		НаборЗаписей.Прочитать();
		Если НаборЗаписей.Количество() Тогда
			Продолжить;
		КонецЕсли;
		
		ЗаписьРегистра = НаборЗаписей.Добавить();
		
		Если ПараметрыСвязи.Свойство("Упаковка") Тогда
			ЗаписьРегистра.Упаковка = ПараметрыСвязи.Упаковка;
		КонецЕсли;
		// -- Бойков BSLR-2454
		
		ЗаписьРегистра.Номенклатура		= Номенклатура;
		ЗаписьРегистра.Характеристика	= Характеристика;
		ЗаписьРегистра.Штрихкод			= Выборка.Штрихкод;
		
		Попытка            
			//Чупраков А.Н. 26.12.22
			//При ограниченном доступе к штрихкодам, может вознакть ошибка - добавлен привилегированный режим
			УстановитьПривилегированныйРежим(Истина);
			Если Выборка.Штрихкод <> "" Тогда // письмерова, проверка на пустой ШК
				//ЗаписьРегистра.Записать(Истина); 
				НаборЗаписей.Записать();
			Иначе
				ОбщегоНазначения.СообщитьПользователю("У товара " + ПараметрыСвязи.Товар + " (ID" + ПараметрыСвязи.Товар.ID + ") обнаружен пустой штрихкод");
			КонецЕсли;
			УстановитьПривилегированныйРежим(Ложь);
		Исключение
			ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
		КонецПопытки;
	КонецЦикла;
	
КонецПроцедуры

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

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

// Процедура - Заполнить реквизиты номенклатуры на основании товара
//
// Параметры:
//  Номенклатура_Объект		 - Объект элемента справочника номенклатуры	 - 
//  Товар					 - Элемент справочника товаров торговых площадок	 - 
//  КатегорияНоменклатуры	 - Ссылка на элемент справочника категории номенклатуры	 - 
//
&НаСервере
Процедура ЗаполнитьРеквизитыНоменклатурыНаОснованииТовара(Номенклатура, Характеристика, ПараметрыСвязи)
	
	#Область Создание_номенклатуры
	
	ЛичныйКабинет = ПараметрыСвязи.ЛичныйКабинет;
	ТорговаяПлощадка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЛичныйКабинет, "ТорговаяПлощадка");
	НовыйМеханизмСвойств = топ_КатегорииСвойстваТоваров.НовыйМеханизмСвойств(ТорговаяПлощадка);
	
	Если (ПараметрыСвязи.ОбновлятьРеквизитыНоменклатуры = Истина или ПараметрыСвязи.ЭтоНовый) Тогда
		
		// ++ Бойков BSLR-2527. Переместил часть кода.
		// Заполнение по виду/категории номенклатуры может перезаписывать реквизиты, заполненные через сопоставление свойств
		ИмяКонфигурации = Метаданные.Имя;		
		
		Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей") 
			ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием")
			ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация")Тогда 
			
			Номенклатура.ВидНоменклатуры = ПараметрыСвязи.ВидНоменклатуры; 		
			Справочники.Номенклатура.ЗаполнитьРеквизитыПоВидуНоменклатуры(Номенклатура, Ложь, Ложь, Неопределено, Ложь);
			
		Иначе 		
			Номенклатура.КатегорияНоменклатуры = ПараметрыСвязи.ВидНоменклатуры;  		
			ОбщийМодуль = ОбщегоНазначения.ОбщийМодуль("КатегорииНоменклатурыСервер");
			ОбщийМодуль.ЗаполнитьСвойстваНоменклатурыПоКатегории(Номенклатура);
			
		КонецЕсли;
		// -- Бойков BSLR-2527
		
		Если НовыйМеханизмСвойств Тогда
			ТаблицаДопСвойств = Новый ТаблицаЗначений;
			ТаблицаДопСвойств.Колонки.Добавить("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"));
			ТаблицаДопСвойств.Колонки.Добавить("Значение");
			ОбработатьСвойстваТовара(Номенклатура, ЛичныйКабинет, ПараметрыСвязи, ТаблицаДопСвойств);
			
		КонецЕсли;
		
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ		
			|	ДопРеквизитыСведения.Свойство КАК Свойство,
			|	ДопРеквизитыСведения.Свойство.Заголовок КАК ПредставлениеРеквизита,
			|	ЛОЖЬ КАК ОбщееСвойство,
			|	ДопРеквизитыСведения.НомерСтроки КАК НомерСтрокиДляСортировки,
			|	ВЫБОР
			|		КОГДА ДопРеквизитыСведения.ПометкаУдаления
			|			ТОГДА 4
			|		ИНАЧЕ 1
			|	КОНЕЦ КАК ИндексКартинки
			|ПОМЕСТИТЬ ВтНаборы
			|ИЗ
			|	Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДопРеквизитыСведения
			|ГДЕ
			|	ДопРеквизитыСведения.Ссылка = &НаборСвойств
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|ВЫБРАТЬ
			|	ОбщиеДопРеквизитыСведения.Свойство,
			|	ОбщиеДопРеквизитыСведения.Свойство.Заголовок,
			|	ИСТИНА,
			|	ОбщиеДопРеквизитыСведения.НомерСтроки,
			|	ВЫБОР
			|		КОГДА ОбщиеДопРеквизитыСведения.ПометкаУдаления
			|			ТОГДА 4
			|		ИНАЧЕ 1
			|	КОНЕЦ
			|ИЗ
			|	Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ОбщиеДопРеквизитыСведения
			|ГДЕ
			|	ОбщиеДопРеквизитыСведения.Ссылка = &НаборОбщихСвойств
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////
			// ++ Бойков BSLR-2140
			|ВЫБРАТЬ
			|	топ_ЗначенияСвойствТоваров.Свойство КАК Свойство,
			|	топ_ЗначенияСвойствТоваров.Значение КАК Значение,
			|	ЕСТЬNULL(топ_СопоставлениеСвойствНоменклатурыИТовара.РеквизитНоменклатуры, """") КАК РеквизитНоменклатуры,
			|	ДополнительныеРеквизитыИСведения.Ссылка КАК СвойствоСсылка,
			|	ВЫБОР
			|		КОГДА ТИПЗНАЧЕНИЯ(топ_СопоставлениеСвойствНоменклатурыИТовара.СвойствоТовара) = ТИП(СТРОКА)
			|			ТОГДА ИСТИНА
			|		ИНАЧЕ ЛОЖЬ
			|	КОНЕЦ КАК ЭтоРеквизитТовара,
			|	топ_СопоставлениеСвойствНоменклатурыИТовара.СвойствоТовара КАК СвойствоТовара
			|ПОМЕСТИТЬ ВтСвойства
			|ИЗ
			|	РегистрСведений.топ_СопоставлениеСвойствНоменклатурыИТовара КАК топ_СопоставлениеСвойствНоменклатурыИТовара
			|		ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
			|		ПО топ_СопоставлениеСвойствНоменклатурыИТовара.РеквизитНоменклатуры = ДополнительныеРеквизитыИСведения.Имя
			|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_ЗначенияСвойствТоваров КАК топ_ЗначенияСвойствТоваров
			|		ПО топ_ЗначенияСвойствТоваров.Свойство = топ_СопоставлениеСвойствНоменклатурыИТовара.СвойствоТовара
			|			И топ_ЗначенияСвойствТоваров.Товар = &Товар
			|ГДЕ
			|	топ_СопоставлениеСвойствНоменклатурыИТовара.ЛичныйКабинет = &ЛичныйКабинет
			// -- Бойков BSLR-2140
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////
			|ВЫБРАТЬ
			|	ВтСвойства.Свойство КАК Свойство,
			|	ВтСвойства.Значение КАК Значение,
			|	ВтСвойства.РеквизитНоменклатуры КАК РеквизитНоменклатуры,
			|	ВтСвойства.СвойствоСсылка КАК СвойствоСсылка,
			// ++ Бойков BSLR-2140
			|	ВтСвойства.СвойствоТовара КАК СвойствоТовара,
			|	ВтСвойства.ЭтоРеквизитТовара КАК ЭтоРеквизитТовара,
			// -- Бойков BSLR-2140
			|	ВЫБОР
			|		КОГДА НЕ ВтСвойства.СвойствоСсылка ЕСТЬ NULL
			|			ТОГДА ВЫБОР
			|					КОГДА ВтНаборы.Свойство ЕСТЬ NULL 		
			|						ТОГДА ИСТИНА
			|					ИНАЧЕ ЛОЖЬ
			|				КОНЕЦ
			|		ИНАЧЕ ЛОЖЬ
			|	КОНЕЦ КАК Исключить
			|ИЗ
			|	ВтСвойства КАК ВтСвойства
			|		ЛЕВОЕ СОЕДИНЕНИЕ ВтНаборы КАК ВтНаборы
			|		ПО (ВтСвойства.СвойствоСсылка = ВтНаборы.Свойство)"; 
		
		ТорговаяПлощадка = ПараметрыСвязи.ЛичныйКабинет.ТорговаяПлощадка; 	
		
		// ++ Бойков BSLR-2140
		Запрос.УстановитьПараметр("ЛичныйКабинет", ПараметрыСвязи.ЛичныйКабинет);
		// -- Бойков BSLR-2140
		Запрос.УстановитьПараметр("Товар", 				ПараметрыСвязи.Товар); 
		Запрос.УстановитьПараметр("НаборОбщихСвойств", 	УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Номенклатура_Общие"));		
		Если ПараметрыСвязи.ЭтоНовый = Истина Тогда   
			// Бойков BSLR-2140
			Запрос.УстановитьПараметр("НаборСвойств", 	ПараметрыСвязи.ВидНоменклатуры.НаборСвойств);	
		Иначе 	
			Запрос.УстановитьПараметр("НаборСвойств", 	Номенклатура.ВидНоменклатуры.НаборСвойств);
		КонецЕсли;
		
		//Выборка сопоставленных свойств с карточкой товара
		Выборка = Запрос.Выполнить().Выбрать();
		Пока Выборка.Следующий() цикл
			
			Если НовыйМеханизмСвойств Тогда
				Прервать;
			КонецЕсли;
			
			Если Выборка.РеквизитНоменклатуры = "" Тогда
				Продолжить;
			КонецЕсли; 
			
			// ++ Бойков BSLR-2141
			Если Выборка.РеквизитНоменклатуры = "Наименование" Тогда
				ПараметрыСвязи.Вставить("НаименованиеЗаполненоЧерезСоответствиеСвойств", Истина);
			КонецЕсли;
			Если Выборка.РеквизитНоменклатуры = "Код" Тогда
				ПараметрыСвязи.Вставить("КодЗаполненЧерезСоответствиеСвойств", Истина);
			КонецЕсли;
			
			Если Выборка.РеквизитНоменклатуры = "Наименование" Или Выборка.РеквизитНоменклатуры = "Код" Тогда
				Если ПараметрыСвязи.ЭтоНовый = Истина Или 
					(ПараметрыСвязи.НеПерезаписыватьСтандартныеРеквизиты = Ложь И ПараметрыСвязи.ОбновлятьРеквизитыНоменклатуры) Тогда
					// Стандартные реквизиты заполняем для новых объектов или при обновлении (выбраны соответствующие настройки)
				Иначе
					Продолжить;
				КонецЕсли;
			КонецЕсли;
			// -- Бойков BSLR-2141
			
			Если Выборка.Исключить Тогда
				Продолжить;
			КонецЕсли;
			
			//Заполнение дополнительных реквизитов
			ДопРеквизит = Выборка.СвойствоСсылка;
			Если ЗначениеЗаполнено(Выборка.СвойствоСсылка) Тогда
				ДополнительныйРеквизит = Номенклатура.ДополнительныеРеквизиты.Найти(ДопРеквизит);
				Если ДополнительныйРеквизит = Неопределено Тогда 						
					ДополнительныйРеквизит = Номенклатура.ДополнительныеРеквизиты.Добавить();
					ДополнительныйРеквизит.Свойство = ДопРеквизит;
				КонецЕсли; 
				
				// ++ Бойков BSLR-2140
				Если Выборка.ЭтоРеквизитТовара Тогда
					ДополнительныйРеквизит.Значение = ОбработатьЗначениеПоТипуДанных(ДопРеквизит, ПараметрыСвязи.Товар[Выборка.СвойствоТовара], ПараметрыСвязи.СоздаватьЗначенияДополнительныхРеквизитов);
				Иначе
					ДополнительныйРеквизит.Значение = ОбработатьЗначениеПоТипуДанных(ДопРеквизит, Выборка.Значение, ПараметрыСвязи.СоздаватьЗначенияДополнительныхРеквизитов);
				КонецЕсли;
				// -- Бойков BSLR-2140
				
				Продолжить; 
				
			КонецЕсли;
			
			//Заполнение реквизитов номенклатуры			
			// ++ Бойков BSLR-2140
			Если Выборка.ЭтоРеквизитТовара Тогда
				Значение = ПараметрыСвязи.Товар[Выборка.СвойствоТовара];
			Иначе
				Значение = Выборка.Значение;
			КонецЕсли;
			// -- Бойков BSLR-2140
			Реквизит = Номенклатура[Выборка.РеквизитНоменклатуры];			
			Если ОбщегоНазначения.ЗначениеСсылочногоТипа(Реквизит) Тогда
				
				МенеджерОбъекта		= ОбщегоНазначения.МенеджерОбъектаПоСсылке(Реквизит);
				ВариантПоиска		= "";  			
				Если ОбщегоНазначения.ВидОбъектаПоСсылке(Реквизит) = "Справочник" Тогда  				
					МетаданныеОбъекта = Реквизит.Метаданные();
					
					Если МетаданныеОбъекта.ДлинаНаименования > 0 Тогда  						
						ЭлемеменСправочника	= МенеджерОбъекта.НайтиПоНаименованию(Значение);
						
						Если ЭлемеменСправочника.Пустая() Тогда 						
							ЭлемеменСправочника_Объект	= МенеджерОбъекта.СоздатьЭлемент(); 						
							ЭлемеменСправочника_Объект.Наименование				= Значение;
							ЭлемеменСправочника_Объект.ОбменДанными.Загрузка	= Истина;  						
							ЭлемеменСправочника_Объект.Записать();                         						
							ЭлемеменСправочника = ЭлемеменСправочника_Объект.Ссылка;
							
						КонецЕсли;
						
					ИначеЕсли МетаданныеОбъекта.ДлинаКода > 0 Тогда 					
						СсылкаНаЭлемент = МенеджерОбъекта.НайтиПоКоду(Значение);						
						Если ЭлемеменСправочника.Пустая() Тогда							
							ЭлемеменСправочника_Объект	= МенеджерОбъекта.СоздатьЭлемент(); 						
							ЭлемеменСправочника_Объект.Код						= Значение;
							ЭлемеменСправочника_Объект.ОбменДанными.Загрузка	= Истина; 
							
							Если ЭлемеменСправочника_Объект.Код <> "" Тогда 							
								ЭлемеменСправочника_Объект.Записать();
								ЭлемеменСправочника = ЭлемеменСправочника_Объект.Ссылка;
								
							КонецЕсли;							
						КонецЕсли; 					
					КонецЕсли;
					
					Если НЕ ЭлемеменСправочника.Пустая() Тогда
						Номенклатура[Выборка.РеквизитНоменклатуры] = ЭлемеменСправочника;
					КонецЕсли;
					
				КонецЕсли;
				
				Если ОбщегоНазначения.ВидОбъектаПоСсылке(Реквизит) = "Перечисление" Тогда
					
				КонецЕсли;				
			Иначе 			
				Если ТипЗНЧ(Реквизит) = Тип("Число") Тогда
					Значение = топ_ОбщийМодульСервер.ПреобразоватьСтрокуВЧисло(Значение);
				КонецЕсли; 			
				Номенклатура[Выборка.РеквизитНоменклатуры] = Значение;
				
			КонецЕсли;			
		КонецЦикла;    
		
		Если ЗначениеЗаполнено(ПараметрыСвязи.Товар.КодПоставщика) Тогда
			АртикулТовара = ПараметрыСвязи.Товар.КодПоставщика;
		ИначеЕсли ЗначениеЗаполнено(ПараметрыСвязи.Товар.АртикулЦвета) Тогда
			АртикулТовара = ПараметрыСвязи.Товар.АртикулЦвета;
		КонецЕсли;
		
		Если ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоАртикулу Тогда 					  	 
			Если Номенклатура.топ_АртикулПоставщика <> АртикулТовара Тогда
				Номенклатура.топ_АртикулПоставщика = АртикулТовара;
			КонецЕсли; 
			
		КонецЕсли;
		
		//Не перезаписывать наименование и наименование полное при установленной пометке НеПерезаписыватьСтандартныеРеквизиты
		Если (ПараметрыСвязи.НеПерезаписыватьСтандартныеРеквизиты = Ложь И ПараметрыСвязи.ОбновлятьРеквизитыНоменклатуры 
											И ПараметрыСвязи.ЭтоНовый = Ложь) Или ПараметрыСвязи.ЭтоНовый = Истина Тогда 
			
			// ++ Бойков BSLR-2141
			НаименованиеЗаполненоЧерезСоответствиеСвойств = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыСвязи,
				"НаименованиеЗаполненоЧерезСоответствиеСвойств", Ложь);
			Если Не НаименованиеЗаполненоЧерезСоответствиеСвойств Тогда
				Номенклатура.Наименование = ПараметрыСвязи.Товар.Наименование;
			КонецЕсли;
			// -- Бойков BSLR-2141
			
			Если ПараметрыСвязи.УникальноеНаименование Тогда
				Номенклатура.Наименование = Номенклатура.Наименование + " (" + ПараметрыСвязи.Товар.КодПоставщика + ")";	
			КонецЕсли; 
			
			//Наименование номенклатруы по шаблону
			//Проверить
			ЗаполнитьНаименованиеПоШаблону = Ложь;
			Если ПараметрыСвязи.Свойство("ЗаполнитьНаименованиеПоШаблону", ЗаполнитьНаименованиеПоШаблону) Тогда
				ШаблонРабочегоНаименованияНоменклатуры = ПараметрыСвязи.ВидНоменклатуры.ШаблонРабочегоНаименованияНоменклатуры;
				Если ПараметрыСвязи.ЗаполнитьНаименованиеПоШаблону И ШаблонРабочегоНаименованияНоменклатуры <> "" Тогда
					Номенклатура.Наименование = НоменклатураСервер.НаименованиеПоШаблону(ПараметрыСвязи.ВидНоменклатуры.ШаблонРабочегоНаименованияНоменклатуры, Номенклатура);	
				КонецЕсли;
			КонецЕсли;
			
			Если Не ЗначениеЗаполнено(Номенклатура.НаименованиеПолное) Тогда  
				Номенклатура.НаименованиеПолное = Номенклатура.Наименование; 
			КонецЕсли; 
			
			Если ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоАртикулу Тогда 	
				Если Номенклатура.Артикул <> АртикулТовара Тогда
					Номенклатура.Артикул = АртикулТовара;
				КонецЕсли;
			КонецЕсли;  
			
			//LAShadrin 26/06/23
			Если ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоКодуIDТовара Тогда 	
				// ++ Бойков BSLR-3054
				Если ПараметрыСвязи.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.СберМегаМаркет Тогда
					КодТовара = СтрЗаменить(СтрЗаменить(Строка(ПараметрыСвязи.Товар.offer_id), " ", ""), " ", "");
				Иначе
					КодТовара = СтрЗаменить(СтрЗаменить(Строка(ПараметрыСвязи.Товар.ID), " ", ""), " ", "");
				КонецЕсли;
				// -- Бойков BSLR-3054
				Если Номенклатура.Код <> КодТовара Тогда
					Номенклатура.Код = КодТовара; 
				КонецЕсли;
			КонецЕсли;
			
			Если ПараметрыСвязи.ВариантСвязиКарточек = Перечисления.топ_ВариантСвязиКарточек.ПоКодуАртикулуТовара Тогда 	
				Если Номенклатура.Код <> АртикулТовара Тогда
					Номенклатура.Код = АртикулТовара;
				КонецЕсли;
			КонецЕсли;
			
		КонецЕсли;
		
		Если ПараметрыСвязи.ИспользуютсяХарактеристики Тогда   
			Номенклатура.ИспользованиеХарактеристик = ПараметрыСвязи.ВидНоменклатуры.ИспользованиеХарактеристик;
			Номенклатура.ВладелецХарактеристик = ПараметрыСвязи.ВидНоменклатуры.ВладелецХарактеристик; 
		Иначе
			Номенклатура.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать;
		КонецЕсли;
				
		// ++ Бойков BSLR-2140
		Если ЗначениеЗаполнено(ПараметрыСвязи.Товар.Категория) Тогда
			//Добавление товарных категорий
			ТоварнаяКатегория = Справочники.ТоварныеКатегории.НайтиПоНаименованию(ПараметрыСвязи.Товар.Категория.Наименование);
			Если Не ЗначениеЗаполнено(ТоварнаяКатегория) Тогда
				
				ТоварнаяКатегория = Справочники.ТоварныеКатегории.СоздатьЭлемент();
				ТоварнаяКатегория.Наименование 	= ПараметрыСвязи.Товар.Категория.Наименование;
				ТоварнаяКатегория.Владелец 		= ПараметрыСвязи.ВидНоменклатуры;		
				ТоварнаяКатегория.Записать(); 
				
			КонецЕсли;
			
			Если ЗначениеЗаполнено(Номенклатура.ТоварнаяКатегория) Тогда
				Номенклатура.ТоварнаяКатегория = ТоварнаяКатегория;
			КонецЕсли;
		КонецЕсли;
		// -- Бойков BSLR-2140
		
		Попытка	
			
			Номенклатура.ОбменДанными.Загрузка = Истина; 			
			
			Если Не ЗначениеЗаполнено(Номенклатура.Код) Тогда
				Номенклатура.УстановитьНовыйКод();
			КонецЕсли;
			Номенклатура.Записать(); 
			Если НовыйМеханизмСвойств Тогда
				Если ТаблицаДопСвойств.Количество() Тогда
					УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Номенклатура.Ссылка, ТаблицаДопСвойств);
				КонецЕсли;
			КонецЕсли;
		Исключение
			ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
	КонецЕсли;
	
	Номенклатура = Номенклатура.Ссылка; 
	
	// ++ Бойков BSLR-2454
	ПараметрыСвязи.Вставить("НоваяНоменклатура", Номенклатура);
	// -- Бойков BSLR-2454
	
	#КонецОбласти
	
	#Область Создание_характеристики 
	
	Если ЗначениеЗаполнено(ПараметрыСвязи.РазмерWB) Тогда
		НаименованиеХарактеристики	= ПараметрыСвязи.РазмерWB.Наименование;
		Если ПараметрыСвязи.Свойство("АртикулЦвета") И ЗначениеЗаполнено(ПараметрыСвязи.АртикулЦвета) Тогда
			НаименованиеХарактеристики = ПараметрыСвязи.АртикулЦвета + " " + НаименованиеХарактеристики;	
		КонецЕсли;
		
	Иначе
		НаименованиеХарактеристики	= ПараметрыСвязи.Товар.КодПоставщика;   
	КонецЕсли; 
	
	Если ПараметрыСвязи.ИспользуютсяХарактеристики И Характеристика <> Неопределено И ПараметрыСвязи.СоздаватьНоменклатуру Тогда 			
		
		Если Не ЗначениеЗаполнено(Характеристика.Ссылка) Тогда
			
			ИспользованиеХарактеристикНоменклатуры 	= ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Номенклатура, "ИспользованиеХарактеристик");
			// письмерова BSLR-1720 - падает при повторной связи товаров БЕЗ характеристик 26.04.2023
			Если ИспользованиеХарактеристикНоменклатуры <> ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать") Тогда 
				Характеристика.Наименование				= НаименованиеХарактеристики;
				
				Если ИспользованиеХарактеристикНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры") Тогда 
					Характеристика.Владелец = Номенклатура;
					
				ИначеЕсли ИспользованиеХарактеристикНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры") Тогда 
					Характеристика.Владелец = ПараметрыСвязи.ВидНоменклатуры;
					
				ИначеЕсли ИспользованиеХарактеристикНоменклатуры = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
					Характеристика.Владелец = ПараметрыСвязи.ВидНоменклатуры.ВладелецХарактеристик;  	
				Иначе
					Характеристика.Владелец = Номенклатура; // письмерова 30.01.2023 BSLR-1278	- падала при некорректных учетных данных
				КонецЕсли;  			
				
				Если НЕ ЗначениеЗаполнено(Характеристика.Наименование) И ЗначениеЗаполнено(ПараметрыСвязи.Товар) Тогда
					ОбщегоНазначения.СообщитьПользователю("Невозможно создать характеристику! Не заполнен код поставщика или отсутствуют размеры у товара: " + ПараметрыСвязи.Товар.Наименование);     
					Возврат;
				КонецЕсли;	
				
				Попытка 		
					Характеристика.Записать(); 
					
				Исключение
					ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки());
					Возврат; //если делать возврат, то не обновятся связи и не перевяжется номенклатура 
					
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли; 
	
	Если Характеристика <> Неопределено Тогда  //получение ссылки объекта
		Характеристика = Характеристика.Ссылка; 
	КонецЕсли;
	
	// ++ Бойков BSLR-2454
	Если ТипЗнч(Характеристика) = Тип("СправочникСсылка.ХарактеристикиНоменклатуры") Тогда
		ПараметрыСвязи.Вставить("НоваяХарактеристика", Характеристика);
	Иначе
		ПараметрыСвязи.Вставить("НоваяХарактеристика", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
	КонецЕсли;
	// -- Бойков BSLR-2454
	
	#КонецОбласти
	
	УдалитьИнформациюПоСтаройСвязи(ПараметрыСвязи);	
	СвязатьНоменклатуруИТовар(Номенклатура, Характеристика, ПараметрыСвязи); 
	Если ПараметрыСвязи.ДобавлятьШК Тогда//LAShadrin BSLR-2548+
		СкопироватьШтрихкод(Номенклатура, Характеристика, ПараметрыСвязи);
	КонецЕсли;//LAShadrin BSLR-2548-


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

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

&НаСервере
Процедура ПроверитьЗаполнениеПредопределенныеЭлементыИРегламентныеЗаданияПриНачалеРаботыСистемы() Экспорт
	
	УстановитьПривилегированныйРежим(Истина);// БИТ_Козырев ++ 2022-06-09
	
	//БИТ Симонова 17.06.2022 ( 
	РасширенияМассив = РасширенияКонфигурации.Получить(Новый Структура("Имя", "БИТ_УправлениеМаркетплейсами"));
	ПерезаписыватьСправочники 	= Ложь; 
	НачальноеЗаполнение			= Ложь;
	Если РасширенияМассив.Количество() Тогда
		
		//проверяем версию
		АктуальнаяВерсияРасширения 	= РасширенияМассив[0].Версия;
		СохраненнаяВерсияРасширения = Константы.топ_ТекущаяВерсияРасширения.Получить(); 
		НачальноеЗаполнение			= Не ЗначениеЗаполнено(СохраненнаяВерсияРасширения); //Чупраков А.Н., 16.05.23, передать команду на создание справочников
		Если НЕ АктуальнаяВерсияРасширения = СохраненнаяВерсияРасширения Тогда
			ПерезаписыватьСправочники = Истина;
			
			//записываем текущую версию
			КонстантаВерсияРасширения = Константы.топ_ТекущаяВерсияРасширения.СоздатьМенеджерЗначения();
			КонстантаВерсияРасширения.Значение = АктуальнаяВерсияРасширения;
			КонстантаВерсияРасширения.Записать(); 
			
			//> БИТ - обработчики_обновления - КондращенкоМ
			//выполняем обработчики обновления
			Если ЗначениеЗаполнено(СохраненнаяВерсияРасширения) Тогда
				// ++ Бойков BSLR-2579. Передаем номер установленной версии расширения, чтобы не выполнять обработчики более старших релизов
				топ_ОбновлениеИнформационнойБазы.ВыполнитьОбновление(СохраненнаяВерсияРасширения, АктуальнаяВерсияРасширения);
				// -- Бойков BSLR-2579
			КонецЕсли;
			//< БИТ - обработчики_обновления - КондращенкоМ
		КонецЕсли;  
		
		// ++ Бойков BSLR-2129
		Если НачальноеЗаполнение Тогда
			ОбработкаСтартовыйПомощник = Обработки.топ_СтартовыйПомощникSeller.Создать();
			ОбработкаСтартовыйПомощник.ЗаполнитьРегистрИспользованиеУправлениеМаркетплейсами();
		КонецЕсли;
		// -- Бойков BSLR-2129
		
	КонецЕсли;
	
	Если ПерезаписыватьСправочники Тогда
		ОбработкаСтартовыйПомощник = Обработки.топ_СтартовыйПомощникSeller.Создать();
		ОбработкаСтартовыйПомощник.ЗаполнитьРегламентныеПроцедурыПоУмолчаниюНаСервере();
		ОбработкаСтартовыйПомощник.ЗагрузитьСправочники(НачальноеЗаполнение); //Чупраков А.Н., 16.05.23, при старте записываем справочники
	КонецЕсли;
	//БИТ Симонова 17.06.2022 ) 
	
	УстановитьПривилегированныйРежим(Ложь); // БИТ_Козырев ++ 2022-06-09
	
КонецПроцедуры 
//-- БИТ_Козырев при переносе доработок в Расширение топ_      

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

Функция ПолучитьМатрицуХарактеристик(УровеньХарактеристик = Неопределено, ВариантПолученияДанных = Неопределено, КатегорияТовара = Неопределено) Экспорт
	
	Запрос = Новый Запрос;
	
	Запрос.Текст = 
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	топ_КатегорииТоваровWB.РеквизитМаркетплейс КАК ХарактеристикаMP,
	|	топ_КатегорииТоваровWB.ВариантПолученияДанных КАК ВариантПолученияДанных,
	|	топ_КатегорииТоваровWB.ПутьКДанным КАК ПутьКДанным,
	|	топ_КатегорииТоваровWB.Обязательный КАК Обязательный,
	|	топ_КатегорииТоваровWB.value КАК value,
	|	топ_КатегорииТоваровWB.units КАК units,
	|	топ_КатегорииТоваровWB.isNumber КАК isNumber,
	|	топ_КатегорииТоваровWB.useOnlyDictionaryValues КАК useOnlyDictionaryValues,
	|	топ_КатегорииТоваровWB.maxCount КАК maxCount,
	|	топ_КатегорииТоваровWB.ИдентификаторХарактеристики КАК ИдентификаторХарактеристики,
	|	топ_КатегорииТоваровWB.ЭтоРеквизитКарточки КАК ЭтоРеквизитКарточки
	|ИЗ
	|	Справочник.топ_КатегорииТоваровWB.СоответствиеХарактеристикWBИРеквизитовНоменклатуры КАК топ_КатегорииТоваровWB
	|ГДЕ
	|	ВЫБОР
	|			КОГДА &ВсеУровни
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ топ_КатегорииТоваровWB.УровеньХарактеристики = &УровеньХарактеристик
	|		КОНЕЦ
	|	И ВЫБОР
	|			КОГДА &ВсеВарианты
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ топ_КатегорииТоваровWB.ВариантПолученияДанных = &ВариантПолученияДанных
	|		КОНЕЦ
	|	И топ_КатегорииТоваровWB.Ссылка = &КатегорияТовара
	|
	|УПОРЯДОЧИТЬ ПО
	|	ХарактеристикаMP";
	
	Запрос.УстановитьПараметр("ВсеУровни", УровеньХарактеристик = Неопределено);
	Запрос.УстановитьПараметр("УровеньХарактеристик", УровеньХарактеристик);
	Запрос.УстановитьПараметр("ВсеВарианты", ВариантПолученияДанных = Неопределено);
	Запрос.УстановитьПараметр("ВариантПолученияДанных", ВариантПолученияДанных);
	Запрос.УстановитьПараметр("КатегорияТовара", КатегорияТовара);
	
	Возврат Запрос.Выполнить().Выгрузить();
	
КонецФункции

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

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

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

//БИТ Смирнов А.П. 13.12.2022 BSLR-1057 (
Процедура УстановитьСвязиКарточекИНоменклатуры_СозданиеОбщейПоЦветамИРазмерамWB(ЛичныйКабинет, ВидНоменклатуры) Экспорт

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

КонецПроцедуры
//БИТ Смирнов А.П. 13.12.2022 )

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

#Область Операции_с_заказами_торговых_площадок

&НаСервере
Функция РассчитатьОстатокВремениНаДоставку(МаксимальноеВремяДоставки, ДатаЗаказа, ВключаяСекунды = Истина) Экспорт
	
	Если МаксимальноеВремяДоставки = 0 Тогда
		Возврат "--:--";
	КонецЕсли;
	
	МаксимальныйЛимит	= МаксимальноеВремяДоставки * 3600;
	ВсегоСекунд			= МаксимальныйЛимит - (ТекущаяДата() - ДатаЗаказа); 
    Если ВсегоСекунд < 0 Тогда
		Возврат "--:--";
	КонецЕсли;
	
	
	Часов				= Цел(ВсегоСекунд / 3600);
	Минут				= Цел((ВсегоСекунд - Часов * 3600) / 60 );
	Минут				= ?(Минут < 0, -Минут, Минут);
	
	ВремяТекстом		= Формат(Часов, "ЧЦ=2; ЧН=0; ЧВН=") + ":" + Формат(Минут, "ЧЦ=2; ЧН=0; ЧВН=");
	
	Если ВключаяСекунды Тогда
		
		Секунд			=	ВсегоСекунд - (Часов * 3600) - (Минут * 60);	
		Секунд			= ?(Секунд < 0, -Секунд, Секунд);

		ВремяТекстом	=	ВремяТекстом + ":" + Формат(Секунд, "ЧЦ=2; ЧН=0; ЧВН="); 	
	КонецЕсли;
	
	Возврат ВремяТекстом;
	
КонецФункции

&НаСервере
Функция ВернутьМаксимальноеВремяДоставки(ЛичныйКабинет,ДатаЗаказа,ДатаДоставки) Экспорт
	
	Если ЛичныйКабинет.Пустая() Тогда
		Возврат 0;
	КонецЕсли;
	
	Если	ДатаДоставки = Дата(1,1,1) Тогда
		МаксимальноеВремяДоставки =	ЛичныйКабинет.МаксимальноеВремяДоставки;	
	Иначе
		МаксимальноеВремяДоставки =	(ДатаДоставки - ДатаЗаказа) / 3600; 
	КонецЕсли;
	
	Возврат МаксимальноеВремяДоставки; 

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

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

&НаСервере
Функция ВернутьЛогистическуюЭтикетку(ЗаказТорговойПлощадки) Экспорт
	
	Структура = Новый Структура("Штрихкод, ID, ТабличныйДокумент");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	топ_ЛогистическиеЭтикетки.Хранилище КАК Хранилище,
	               |	топ_ЛогистическиеЭтикетки.Штрихкод КАК Штрихкод,
	               |	топ_ЛогистическиеЭтикетки.ПутьКФайлу КАК ПутьКФайлу,
	               |	топ_ЛогистическиеЭтикетки.СохраненоВБазе КАК СохраненоВБазе,
	               |	топ_ЛогистическиеЭтикетки.ID КАК ID
	               |ИЗ
	               |	РегистрСведений.топ_ЛогистическиеЭтикетки КАК топ_ЛогистическиеЭтикетки
	               |ГДЕ
	               |	топ_ЛогистическиеЭтикетки.ЗаказТорговойПлощадки = &ЗаказТорговойПлощадки";
	
	Запрос.УстановитьПараметр("ЗаказТорговойПлощадки", ЗаказТорговойПлощадки);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		
		Структура.Штрихкод		= Выборка.Штрихкод;
		Структура.ID			= Выборка.ID;
		
		ТабДок					= Новый ТабличныйДокумент;
		
		ТабДок.ПолеСверху		= 1;
		ТабДок.ПолеСнизу		= 1;
		ТабДок.ПолеСлева		= 1;
		ТабДок.ПолеСправа		= 1;
		ТабДок.РазмерСтраницы	= "Custom";
		
		//BSLR-4027, Чупраков А.Н., 31.10.24, макет через БСП
		//Макет					= Документы.топ_ЗаказТорговойПлощадки.ПолучитьМакет("ПФ_MXL_ЛогЭтикетка"); 
		Макет 					= УправлениеПечатью.МакетПечатнойФормы("Документ.топ_ЗаказТорговойПлощадки.ПФ_MXL_ЛогЭтикетка");
		ОбластьПечати			= Макет.ПолучитьОбласть("ОбластьГор|ОбластьВерт");
		
		Если ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда				
			ТабДок.ШиринаСтраницы	= 55;
			ТабДок.ВысотаСтраницы	= 35;
			
		Иначе 		
			ТабДок.ШиринаСтраницы	= 75;
			ТабДок.ВысотаСтраницы	= 120;
			
		КонецЕсли;
		
		Рисунок	= ОбластьПечати.Рисунки[0];

		Если Выборка.СохраненоВБазе Тогда
			Рисунок.Картинка = Новый Картинка(Base64Значение(Выборка.Хранилище.Получить()));  
		Иначе
			Рисунок.Картинка = Новый Картинка(Выборка.ПутьКФайлу);
		КонецЕсли;
		
		Рисунок.Ширина = ТабДок.ШиринаСтраницы;
		Рисунок.Высота = ТабДок.ВысотаСтраницы;
		
		Рисунок.РазмерКартинки = РазмерКартинки.Растянуть; 
		
		ТабДок.Вывести(ОбластьПечати); 
		
		ТабДок.ИмяПараметровПечати  = "ПАРАМЕТРЫ_ПЕЧАТИ_ЛогЭтикетка";
		Структура.ТабличныйДокумент = ТабДок;

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

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

&НаСервере
Функция ВернутьВидЗаказаКлиента()
	
	ПозицияРазделителя	= СтрНайти(Метаданные.Имя,"_");
	
	Если ПозицияРазделителя > 0 Тогда
		ИмяОригинальнойКонфигурации = Лев(Метаданные.Имя, ПозицияРазделителя-1);
	Иначе
		ИмяОригинальнойКонфигурации = Метаданные.Имя;
	КонецЕсли;
	
	Если ИмяОригинальнойКонфигурации = "УправлениеНебольшойФирмой" Тогда
		Возврат "ЗаказПокупателя";
	Иначе
		Возврат "ЗаказКлиента";
	КонецЕсли;
	
КонецФункции

&НаСервере
Функция ВернутьСтруктуруНакопленныхДанных() 
	Возврат Новый Структура("Успешно,ОписаниеОшибки,Документ,Статус,УнифицированныйСтатус",Ложь,"")
КонецФункции

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

	Для каждого ЗаказТП из МассивЗаказовТП Цикл
		Если НЕ ЗначениеЗаполнено(ЗаказКлиента) Тогда
			Продолжить;
		КонецЕсли;
		ЗаписьРегистра							=	РегистрыСведений.топ_СоответствиеЗаказов.СоздатьМенеджерЗаписи();
		
		ЗаписьРегистра.ЗаказТорговойПлощадки	=	ЗаказТП;
		ЗаписьРегистра.ЗаказКлиента				=	ЗаказКлиента;
		
		ЗаписьРегистра.Записать(Истина);
	КонецЦикла;
		
КонецФункции

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

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

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

&НаСервере
Функция ВернутьПараметрыЗапросаИсходяИзКатегории(Операция, ЛичныйКабинет, ЗапросКСерверу, ЗаказТорговойПлощадки, Отказ)
	
	ПараметрыЗапроса = Новый Структура();
	
	Если ЗапросКСерверу.КатегорияЗапроса = Справочники.топ_КатегорииЗапросов.НайтиПоРеквизиту("НаименованиеДляПоиска","ЗапросНаСменуСтатуса") Тогда
		
		Если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
			
			СтатусЗаказаНаПортале =	ВернутьСтатусЗаказаНаПорталеПоУнифицированномуСтатусу(ЛичныйКабинет, Операция.УнифицированныйСтатус);
			
			Если ЗначениеЗаполнено(СтатусЗаказаНаПортале) Тогда
				ПараметрыЗапроса.Вставить("orderId", ЗаказТорговойПлощадки.НомерЗаказа);	
				ПараметрыЗапроса.Вставить("Status" , СтатусЗаказаНаПортале.ID);
			Иначе
				Отказ = Истина;
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
	Если ЗапросКСерверу.КатегорияЗапроса = Справочники.топ_КатегорииЗапросов.НайтиПоРеквизиту("НаименованиеДляПоиска","ЗапросЛогЭтикеток") Тогда	
		
		Если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
			
			Массив = Новый Массив();
			Массив.Добавить(Число(ЗаказТорговойПлощадки.НомерЗаказа));
			
			ПараметрыЗапроса.Вставить("Array", Массив);
			
		КонецЕсли;
		
		Если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON Тогда
			
			Массив = Новый Массив();
			Массив.Добавить(ЗаказТорговойПлощадки.НомерОтправления);
			
			ПараметрыЗапроса.Вставить("Array", Массив);
			
		КонецЕсли;  
		
		Если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет Тогда
			
			Массив = Новый Массив();
			Массив.Добавить(ЗаказТорговойПлощадки.НомерЗаказа);
			
			ПараметрыЗапроса.Вставить("Array", Массив);
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат ПараметрыЗапроса; 
	
КонецФункции

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

	КонецПопытки;
	
	Возврат РезультатСменыСтатуса; 
	 
КонецФункции

&НаСервере
Функция СохранитьДвоичныеДанныеВКаталог(НомерЗаказа, Каталог, ДанныеBase64, ФорматФайла)
	
	РезультатЗаписи		= Истина;
	
	ID					= Новый УникальныйИдентификатор();
	ИмяФайла			= НомерЗаказа+"_"+СокрЛП(ID)+"."+ФорматФайла;
	ДвоичныеДанные		= Base64Значение(ДанныеBase64);		
	ИмяВременногоФайла	= Каталог+"\"+ИмяФайла; 
	
	Попытка
		ДвоичныеДанные.Записать(ИмяВременногоФайла);
	Исключение
		// ++ Бойков BSLR-1972
		ОбщегоНазначения.СообщитьПользователю("Ошибка сохранения этикетки в каталог: " + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		ИмяВременногоФайла = Ложь;
		// -- Бойков BSLR-1972
		РезультатЗаписи	= Ложь;	
	КонецПопытки;
	
	Возврат ИмяВременногоФайла;
	
КонецФункции

&НаСервере
Функция КонвертироватьPDFвJPG(ДвоичныеДанные) Экспорт //БИТ Смирнов А.П. 05.09.2022 BSLR-648
	
	// ++ Бойков BSLR-2906
	УстановитьПривилегированныйРежим(Истина);
	ПутьКПриложению = Константы.топ_ПутьКПриложениюКонвертацииИзображений.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	// -- Бойков BSLR-2906
	
	Если ПустаяСтрока(ПутьКПриложению) Тогда
		Возврат Неопределено;	
	КонецЕсли;
		
	ФайлПриложения = Новый Файл(ПутьКПриложению);
	
	Если НЕ ФайлПриложения.Существует() Тогда
		Возврат Неопределено;	
	КонецЕсли;
		
	ИмяВременногойФайлаPDF = ПолучитьИмяВременногоФайла("PDF");
	
	Попытка
		ДвоичныеДанные.Записать(ИмяВременногойФайлаPDF);
	Исключение
		Возврат Неопределено;
	КонецПопытки;
		
	ИмяКонвертированногоФайлаJPG = ПолучитьИмяВременногоФайла("JPG");
	
	ЗапуститьПриложение("""" + ПутьКПриложению + """ -density 200 "+ИмяВременногойФайлаPDF+" "+ИмяКонвертированногоФайлаJPG,,Истина);
	
	ВременныйФайлPDF = Новый Файл(ИмяКонвертированногоФайлаJPG);
	//▼ Чупраков А.Н. 08.08.22 
	МассивДвоичныхДанных = Новый Массив;
	Если ВременныйФайлPDF.Существует() Тогда
		Возврат МассивДвоичныхДанных.Добавить(Base64Строка(Новый ДвоичныеДанные(ВременныйФайлPDF.ПолноеИмя)));
	Иначе
		ИмяИсходногоФайлаБезРасширения = СтрЗаменить(ИмяКонвертированногоФайлаJPG, КаталогВременныхФайлов(), "");
		ИмяИсходногоФайлаБезРасширения = СтрЗаменить(ИмяИсходногоФайлаБезРасширения, ".JPG", ""); 
		РезультатПоиска = НайтиФайлы(КаталогВременныхФайлов(), ИмяИсходногоФайлаБезРасширения + "-*.JPG", Ложь);		
		Для Каждого СтрокаПоиска Из РезультатПоиска Цикл 
			Если СтрокаПоиска.Существует() Тогда
				МассивДвоичныхДанных.Добавить(Base64Строка(Новый ДвоичныеДанные(СтрокаПоиска.ПолноеИмя)));
			КонецЕсли;
		КонецЦикла;
		Если МассивДвоичныхДанных.Количество() <> 0 Тогда 
			Возврат МассивДвоичныхДанных;	
		Иначе 	
			Возврат Неопределено;
		КонецЕсли;
	КонецЕсли; 
	//▲ Чупраков А.Н.	
		
КонецФункции
 //-- БИТ_Тверитин
 
&НаСервере
Функция ЗагрузитьЛогистическуюЭтикетку(ЗаказТорговойПлощадки, ДанныеСТорговойПлощадки) Экспорт 
	
	ДанныеПоЭтикеткеПолучены	= Ложь;
	ДанныеПоЭтикетке			= Неопределено;
	ЛичныйКабинет				= ЗаказТорговойПлощадки.ЛичныйКабинет;
	МассивЛогЭтикеток			= Новый Массив;  //Чупраков А.Н. 08.08.22
	
	#Область Wildberries

	Если ЛичныйКабинет.ТорговаяПлощадка	= Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		
		Если ТипЗНЧ(ДанныеСТорговойПлощадки) = Тип("Структура") Тогда
			Если ДанныеСТорговойПлощадки.Свойство("data") Тогда
				
				//БИТ Симонова 19.09.2022 ( 
				ДанныеПоЭтикетке = ДанныеСТорговойПлощадки.Data.file;
				Штрихкод = ЗаказТорговойПлощадки.Товары[0].Штрихкод;
				ID = ЗаказТорговойПлощадки.Товар.ID;					
				ФорматФайла = "PDF";
				МассивЛогЭтикеток.Добавить(ДанныеПоЭтикетке);
				//БИТ Симонова 19.09.2022 )
				
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;
	
	#КонецОбласти

	#Область OZON
	
	Если ЛичныйКабинет.ТорговаяПлощадка	= Перечисления.топ_ТорговыеПлощадки.OZON Или 
		ЛичныйКабинет.ТорговаяПлощадка	= Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет Тогда
		
		Если ТипЗНЧ(ДанныеСТорговойПлощадки) = Тип("ДвоичныеДанные") Тогда
			
			ДанныеПоЭтикетке	= Истина;
			МассивЛогЭтикеток	= КонвертироватьPDFвJPG(ДанныеСТорговойПлощадки);
			
			Если МассивЛогЭтикеток = Неопределено Тогда
				//+битТверитин
				МассивЛогЭтикеток			= Новый Массив;
				//-битТверитин
				МассивЛогЭтикеток.Добавить(Base64Строка(ДанныеСТорговойПлощадки));
				ФорматФайла	= "PDF";
			Иначе
				ФорматФайла = "JPG"
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
	#КонецОбласти
	
	Если Не ДанныеПоЭтикетке = Неопределено Тогда
		
		Для Каждого СтрокаЛогЭтикетка Из МассивЛогЭтикеток Цикл 				
			
			ЗаписьРегистра							=	РегистрыСведений.топ_ЛогистическиеЭтикетки.СоздатьМенеджерЗаписи();
			
			ЗаписьРегистра.ЗаказТорговойПлощадки	=	ЗаказТорговойПлощадки;
			ЗаписьРегистра.ИдентификаторЭтикетки	=	Строка((Новый УникальныйИдентификатор()));
			ЗаписьРегистра.Штрихкод					=	Штрихкод;
			ЗаписьРегистра.ID						=	ID;
			ЗаписьРегистра.ФорматФайла				=	ФорматФайла;
			
			Если ЛичныйКабинет.СохранятьЛогЭтикеткиВКаталог Тогда
				
				ПутьКФайлу = СохранитьДвоичныеДанныеВКаталог(ЗаказТорговойПлощадки.Номерзаказа, 
				ЛичныйКабинет.КаталогЛогистическихЭтикеток, СтрокаЛогЭтикетка, форматФайла);
				
				РезультатСохранения	= Ложь;
				
				Если ПутьКФайлу <> Ложь Тогда
					ЗаписьРегистра.ПутьКФайлу	= ПутьКФайлу;
					РезультатСохранения			= Истина;
				КонецЕсли;
				
			Иначе
				
				ЗаписьРегистра.Хранилище		=	Новый ХранилищеЗначения(СтрокаЛогЭтикетка, Новый СжатиеДанных(9));
				РезультатСохранения				=	Истина;
				ЗаписьРегистра.СохраненоВБазе	=	Истина;
				
			КонецЕсли;
			
			Если РезультатСохранения = Истина Тогда
				
				Попытка
					ЗаписьРегистра.Записать(Истина);
					ДанныеПоЭтикеткеПолучены	= Истина;
				Исключение
					ДанныеПоЭтикеткеПолучены	= Ложь;
				КонецПопытки;
				
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	Возврат ДанныеПоЭтикеткеПолучены;
	
КонецФункции

&НаСервере
Функция ВыполнитьЗапрос(ЗаказТорговойПлощадки, Операция, ЛичныйКабинет, НакопленныеДанные)
	
	Если Операция.Запрос.Пустая() Тогда
		
		НакопленныеДанные.Успешно			= Ложь;
		НакопленныеДанные.ОписаниеОшибки	= "В операции: "+Операция+" не задан запрос";
		
		Возврат Ложь;
		
	КонецЕсли;
	
	Отказ			=	Ложь;
	ЗапросКСерверу	=	Операция.Запрос;
	
	Если ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда 
		HTTP_Соединение	= топ_ИнтеграцияСервер.ВернутьСоединение(ЛичныйКабинет, Справочники.Топ_СервераПлощадок.НайтиПоРеквизиту("НаименованиеДляПоиска","WildBerries"));
	ИначеЕсли ЛичныйКабинет.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON Тогда 
		HTTP_Соединение	= топ_ИнтеграцияСервер.ВернутьСоединение(ЛичныйКабинет, Справочники.Топ_СервераПлощадок.НайтиПоРеквизиту("НаименованиеДляПоиска","OZON"));
	Иначе
		
		НакопленныеДанные.Успешно			= Ложь;
		НакопленныеДанные.ОписаниеОшибки	= "В операции: "+Операция+" запрос по "+ЛичныйКабинет.ТорговаяПлощадка+" не предусмотрен";
		
		Возврат Ложь;
		
	КонецЕсли;
		
	Если HTTP_Соединение.Ошибка Тогда
		
		НакопленныеДанные.Успешно			= Ложь;
		НакопленныеДанные.ОписаниеОшибки	= "В операции: "+Операция+" не удалось сформировать HTTP соединение из за ошибки "+HTTP_Соединение.ОписаниеОшибки;
		
		Возврат Ложь;

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

&НаСервере
Функция ОтправитьСообщениевTelegram(ЗаказТорговойПлощадки, Операция, СообщениеОВыполнении)
	
	УчетнаяЗапись = Справочники.топ_ГруппыTelegram.НайтиПоРеквизиту("НаименованиеДляПоиска","СистемнаяУчетнаяЗапись");
	
	Если СокрЛП(УчетнаяЗапись.ID) = "" или СокрЛП(УчетнаяЗапись.Ключ) = "" Тогда
		Возврат Ложь;
	КонецЕсли;
	
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows,
	Новый СертификатыУдостоверяющихЦентровWindows);
	
	СообщениеПользователю = Операция.ТекстСообщенияПользователю + 
	?(Операция.ДобавитьСообщениеОВыполении, Символы.ПС+СообщениеОВыполнении, "");
	
    Ресурс = "bot" + УчетнаяЗапись.Ключ + "/sendMessage?chat_id=" + 
	СтрЗаменить(Формат(УчетнаяЗапись.ID, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "")+
	"&text= " + СообщениеПользователю;
	
    Соединение  = Новый HTTPСоединение("api.telegram.org", 443,,,,, ЗащищенноеСоединение);
    Запрос      = Новый HTTPЗапрос(Ресурс);
	
    Ответ       = Соединение.Получить(Запрос);    
    
	Если Ответ.КодСостояния = 200 тогда
		Возврат Истина
	Иначе
		Возврат Ложь;
    КонецЕсли;
		
КонецФункции

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

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

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

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

&НаСервере
Процедура ОткатитьДействияПоОперации(ЗаказТорговойПлощадки, Операция, ПромежуточныйРезультат)
	
	ЗаказКлиента = ПромежуточныйРезультат.Документ;
	
	// ++ БИТ Сергеев BSLR-997
	//Если ЗаказКлиента = Неопределено Тогда
	//	ЗаказКлиента = топ_ОбщийМодульСервер.ВернутьПодчиненныйЗаказКлиента(ЗаказТорговойПлощадки);
	//КонецЕсли;
	
	Если ЗаказКлиента = Неопределено Тогда
		ЗаказыКлиента = топ_ОбщийМодульСервер.ВернутьПодчиненныйЗаказКлиента(ЗаказТорговойПлощадки);
	Иначе
		ЗаказыКлиента = Новый Массив(1);
		ЗаказыКлиента[0] = ЗаказКлиента;
	КонецЕсли;
	// -- БИТ Сергеев BSLR-997
	
	Если Операция.СоздатьДокумент Тогда	
		// ++ БИТ Сергеев BSLR-997
		НачатьТранзакцию();
		
		Для Каждого ЗаказКлиента Из ЗаказыКлиента Цикл
		// -- БИТ Сергеев BSLR-997
		Если ЗаказКлиента.Проведен Тогда
			ЗаказКлиента_Объект = ЗаказКлиента.ПолучитьОбъект();
			ЗаказКлиента_Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
		КонецЕсли;
		
		// ++ БИТ Сергеев BSLR-997
		ЗафиксироватьТранзакцию();
		
		КонецЦикла;
		// -- БИТ Сергеев BSLR-997
	КонецЕсли;
	
	Если Операция.УстановитьСтатусЗаказаКлиента Тогда	
		
		Запрос = Новый Запрос;
		Запрос.Текст =
			"ВЫБРАТЬ
			|	СтатусыЗаказовКлиента.Статус КАК Статус,
			|	СтатусыЗаказовКлиента.Период КАК Период,
			|	СтатусыЗаказовКлиента.ЗаказКлиента КАК ЗаказКлиента
			|ИЗ
			|	РегистрСведений.топ_СтатусыЗаказовКлиента.СрезПоследних(, ЗаказКлиента В (&ЗаказыКлиента)) КАК СтатусыЗаказовКлиента";
		
		Запрос.УстановитьПараметр("ЗаказыКлиента", ЗаказыКлиента);
		
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			
			ЗаписьРегистра	= РегистрыСведений.топ_СтатусыЗаказовКлиента.СоздатьМенеджерЗаписи();
			ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Выборка);
			ЗаписьРегистра.Прочитать();
			
			Если ЗаписьРегистра.Выбран() Тогда
				ЗаписьРегистра.Удалить();	
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
	//BSLR-2575, Чупраков А.Н., 16.11.23, оптимизация по статусам заказов торговых площадки, отказ от РС топ_УнифицированныеСтатусыЗаказов
	//Если Операция.УстановитьУнифицированныйСтатус Тогда	
	//	
	//	Запрос = Новый Запрос;
	//	Запрос.Текст = "ВЫБРАТЬ
	//	               |	топ_УнифицированныеСтатусы.Период КАК Период,
	//	               |	топ_УнифицированныеСтатусы.ЗаказТорговойПлощадки КАК ЗаказТорговойПлощадки,
	//	               |	топ_УнифицированныеСтатусы.УнифицированныйСтатус КАК УнифицированныйСтатус
	//	               |ИЗ
	//	               |	РегистрСведений.топ_УнифицированныеСтатусыЗаказов.СрезПоследних(, ЗаказТорговойПлощадки = &ЗаказТорговойПлощадки) КАК топ_УнифицированныеСтатусы";
	//	
	//	Запрос.УстановитьПараметр("ЗаказТорговойПлощадки", ЗаказТорговойПлощадки);
	//	
	//	Выборка = Запрос.Выполнить().Выбрать();
	//	Если Выборка.Следующий() Тогда
	//		
	//		ЗаписьРегистра	= РегистрыСведений.топ_УнифицированныеСтатусыЗаказов.СоздатьМенеджерЗаписи();
	//		ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Выборка);
	//		ЗаписьРегистра.Прочитать();
	//		
	//		Если ЗаписьРегистра.Выбран() Тогда
	//			ЗаписьРегистра.Удалить();	
	//		КонецЕсли;
	//		
	//	КонецЕсли;	
	//	
	//КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УдалитьОперациюИзРегистра(Выборка)
	
	ЗаписьРегистра = РегистрыСведений.топ_ОчередьОперацийДокументооборота.СоздатьМенеджерЗаписи();
	
	ЗаполнитьЗначенияСвойств(ЗаписьРегистра,Выборка);
	ЗаписьРегистра.Прочитать();
	//LAShadrin 22/06/23 +
	Если ЗаписьРегистра.Выбран() Тогда
		ЗаписьРегистра.ОперацияВыполнена = Истина;
		ЗаписьРегистра.Записать(Истина)	
	КонецЕсли;
	//-
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПриНеудачномВыполненииОперации(Выборка)
	
	ЗаписьРегистра	=	Неопределено;

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

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

&НаСервере
Процедура ВыполнитьОперацииПоЗаказамТорговыхПлощадок() Экспорт
	
	//BSLR-2575, Чупраков А.Н., 16.11.23, оптимизация по статусам заказов торговых площадки, отказ от РС топ_УнифицированныеСтатусыЗаказов
	Запрос = Новый Запрос;	
	Запрос.Текст = "ВЫБРАТЬ
		|	топ_ОчередьОперацийДокументооборота.ЗаказТорговойПлощадки КАК ЗаказТорговойПлощадки,
		|	топ_ОчередьОперацийДокументооборота.ЗаказКлиента КАК ЗаказКлиента,
		|	топ_ОчередьОперацийДокументооборота.Операция КАК Операция,
		|	топ_ОчередьОперацийДокументооборота.АльтернативнаяОперация КАК АльтернативнаяОперация,
		|	топ_ОчередьОперацийДокументооборота.КоличествоПопыток КАК КоличествоПопыток,
		|	топ_ОчередьОперацийДокументооборота.ВремяПоследнейПопытки КАК ВремяПоследнейПопытки,
		|	топ_ОчередьОперацийДокументооборота.Операция.Приоритет КАК ОперацияПриоритет,
		|	топ_ОчередьОперацийДокументооборота.ЗаказТорговойПлощадки.ЛичныйКабинет КАК ЛичныйКабинет,
		|	топ_ОчередьОперацийДокументооборота.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка КАК ТорговаяПлощадка,
		|	топ_ОчередьОперацийДокументооборота.Операция.РезервныйРежим КАК РезервныйРежим,
		|	топ_ОчередьОперацийДокументооборота.АльтернативнаяОперацияВыполнена КАК АльтернативнаяОперацияВыполнена,
		|	топ_СтатусыЗаказовТорговойПлощадкиСрезПоследних.УнифицированныйСтатус КАК УнифицированныйСтатус
		|ИЗ
		|	РегистрСведений.топ_ОчередьОперацийДокументооборота КАК топ_ОчередьОперацийДокументооборота
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СтатусыЗаказовТорговойПлощадки.СрезПоследних(, ) КАК топ_СтатусыЗаказовТорговойПлощадкиСрезПоследних
		|		ПО топ_ОчередьОперацийДокументооборота.ЗаказТорговойПлощадки = топ_СтатусыЗаказовТорговойПлощадкиСрезПоследних.ЗаказТорговойПлощадки
		// ++ Бойков BSLR-1852
		|ГДЕ
		//LAShadrin 22/06/23+
		|	НЕ топ_ОчередьОперацийДокументооборота.ОперацияВыполнена 
		//-
		|	И &ОтборПоТорговойПлощадке 
		// -- Бойков BSLR-1852
		// ++ Бойков BSLR-2012
		|	И топ_ОчередьОперацийДокументооборота.ЗаказТорговойПлощадки.ЛичныйКабинет.Используется
		// -- Бойков BSLR-2012
		|
		|УПОРЯДОЧИТЬ ПО
		|	ОперацияПриоритет УБЫВ";
	
	// ++ Бойков BSLR-1852
	Если Не ПолучитьФункциональнуюОпцию("топ_ЭтоНеВерсияТолькоWB") Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоТорговойПлощадке",
		"топ_ОчередьОперацийДокументооборота.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.Wildberries)");
	Иначе
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПоТорговойПлощадке", "ИСТИНА");
	КонецЕсли;
	// -- Бойков BSLR-1852
	
	Выборка	= Запрос.Выполнить().Выбрать();	
	Пока Выборка.Следующий() Цикл 		
		РазрешеноВыполнитьОперацию = Ложь;		
		Если Выборка.ВремяПоследнейПопытки = Дата(1,1,1) Тогда			
			РазрешеноВыполнитьОперацию	= Истина;
			
		Иначе 		
			ВремяСледующейПопытки		=	Дата(1,1,1);
			КоличествоОсновныхПопыток	=	Выборка.Операция.КоличествоПопыток;
			КоличествоРезервныхПопыток	=	Выборка.Операция.КоличествоПопытокВрезервномРежиме;
			
			Если Выборка.КоличествоПопыток <= КоличествоОсновныхПопыток Тогда				
				ВремяСледующейПопытки = Выборка.ВремяПоследнейПопытки + Выборка.Операция.ИнтервалПопыток;
				
			Иначе 			
				Если Выборка.РезервныйРежим = Истина Тогда
					Если Выборка.КоличествоПопыток <= (КоличествоОсновныхПопыток + КоличествоРезервныхПопыток) Тогда
						ВремяСледующейПопытки = Выборка.ВремяПоследнейПопытки + Выборка.Операция.ИнтервалПопытокВРезервномРежиме;
					КонецЕсли;
				КонецЕсли;				
			КонецЕсли;
			
			Если ВремяСледующейПопытки <= ТекущаяДата() Тогда
				РазрешеноВыполнитьОперацию	= Истина;
			КонецЕсли;
			
		КонецЕсли;
		
		Если РазрешеноВыполнитьОперацию	= Истина Тогда 			
			РезультатВыполнения = ВыполнитьОперациюПоЗаказуТорговойПлошадки(Выборка, Выборка.Операция);			
			Если РезультатВыполнения.Успешно Тогда
				УдалитьОперациюИзРегистра(Выборка);
			Иначе
				ОбработкаПриНеудачномВыполненииОперации(Выборка);
			КонецЕсли;			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

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

&НаСервере
Процедура ВыполнитьТестРеглЗаданияСозданиеЭлементаВСправочниктоп_ГруппыTelegram() Экспорт

	ЭлементСпр = Справочники.топ_ГруппыTelegram.СоздатьЭлемент();
	ЭлементСпр.ОбменДанными.Загрузка = Истина;
	ЭлементСпр.Наименование = "ТестовыйЭлемент "+Строка(ТекущаяДата());
	ЭлементСпр.ОбменДанными.Загрузка = Истина;
	ЭлементСпр.Записать();

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


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

//++ БИТ_Тверитин
&НаСервере
Процедура ВывестиЭтикеткуОЗОН(Заказы) Экспорт 

	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	топ_ЛогистическиеЭтикетки.Хранилище КАК Хранилище,
	               |	топ_ЛогистическиеЭтикетки.Штрихкод КАК Штрихкод,
	               |	топ_ЛогистическиеЭтикетки.ПутьКФайлу КАК ПутьКФайлу,
	               |	топ_ЛогистическиеЭтикетки.СохраненоВБазе КАК СохраненоВБазе,
	               |	топ_ЛогистическиеЭтикетки.ID КАК ID,
	               |	топ_ЛогистическиеЭтикетки.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка КАК ТорговаяПлощадка
	               |ИЗ
	               |	РегистрСведений.топ_ЛогистическиеЭтикетки КАК топ_ЛогистическиеЭтикетки
	               |ГДЕ
	               |	топ_ЛогистическиеЭтикетки.ЗаказТорговойПлощадки В(&ЗаказТорговойПлощадки)";
	
	Запрос.УстановитьПараметр("ЗаказТорговойПлощадки", Заказы);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
			
		Если Выборка.ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON Тогда
			
			//БИТ Смирнов А.П. 05.09.2022 BSLR-648 (
			Если Выборка.СохраненоВБазе Тогда       
				ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf");
				ДвоичныеДанные = Base64Значение(Выборка.Хранилище.Получить());
				ДвоичныеДанные.Записать(ПутьКФайлу);
			Иначе 
				ПутьКФайлу = Выборка.ПутьКФайлу;
			КонецЕсли;
			//БИТ Смирнов А.П. 05.09.2022 )
			
           	Попытка
				ЗапуститьПриложение(ПутьКФайлу);
			Исключение
				Сообщить("Ошибка открытия (PDF) файла");
			КонецПопытки;

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


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

#Область Печать
   
Функция ПроверитьНаличиеДанныхОбЭтикетках(МассивЗаказов) Экспорт //++ БИТ Артемьев 20.06.2022

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

Функция ПолучитьДанныеЭтикеток(МассивЗаказов) Экспорт //++ БИТ Артемьев 20.06.2022

// Временно: 1 заказ = 1 запрос
	// По-хорошему нужно разбивать заказы по торговым площадкам и делать 1 торговая площадка = 1 запрос, 
	// 		потому что тело запроса позволяет передать N заказов

	// ++ БИТ Сергеев COSTS-66
	пНеобработанныеЗаказы = Новый Массив;
	// -- БИТ Сергеев COSTS-66
	
	Для Каждого Заказ Из МассивЗаказов Цикл
		
		// ++ БИТ Сергеев COSTS-66
		//ПолучитьДанныеЭтикетки(Заказ);	
		Если НЕ ПолучитьДанныеЭтикетки(Заказ) Тогда
			пНеобработанныеЗаказы.Добавить(Заказ)
		КонецЕсли;
		// -- БИТ Сергеев COSTS-66
		
	КонецЦикла;
	
	// ++ БИТ Сергеев COSTS-66
	Возврат пНеобработанныеЗаказы;
	// -- БИТ Сергеев COSTS-66
	
КонецФункции //-- БИТ Артемьев

Функция ПолучитьДанныеЭтикетки(ЗаказТорговойПлощадки) Экспорт //++ БИТ Артемьев 20.06.2022
	
	РеквизитыЗаказа 	= ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗаказТорговойПлощадки, "ЛичныйКабинет, ЛичныйКабинет.ТорговаяПлощадка");
	ЛичныйКабинет 		= РеквизитыЗаказа.ЛичныйКабинет;
	ТорговаяПлощадка 	= РеквизитыЗаказа.ЛичныйКабинетТорговаяПлощадка;
	ЗапросКСерверу		= НайтиЗапросЛогистическихЭтикеток(ТорговаяПлощадка);
	//БИТ Симонова 19.09.2022 (
	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		Операция = "Запрос QR-этикеток";
	Иначе
		Операция = "Запрос логистических этикеток";
	КонецЕсли;
	//БИТ Симонова 19.09.2022 )
	
	НакопленныеДанные 	= Новый Структура("Успешно,ОписаниеОшибки,Документ,Статус,УнифицированныйСтатус",Ложь,""); 
	
	Если ЗапросКСерверу = Неопределено Тогда Возврат Ложь; КонецЕсли;
	
	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда 
		HTTP_Соединение	= топ_ИнтеграцияСервер.ВернутьСоединение(ЛичныйКабинет, Справочники.Топ_СервераПлощадок.НайтиПоРеквизиту("НаименованиеДляПоиска","WildBerries"));
	ИначеЕсли ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON Тогда 
		HTTP_Соединение	= топ_ИнтеграцияСервер.ВернутьСоединение(ЛичныйКабинет, Справочники.Топ_СервераПлощадок.НайтиПоРеквизиту("НаименованиеДляПоиска","OZON"));
	ИначеЕсли ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет Тогда 
		HTTP_Соединение	= топ_ИнтеграцияСервер.ВернутьСоединение(ЛичныйКабинет, Справочники.Топ_СервераПлощадок.НайтиПоРеквизиту("НаименованиеДляПоиска","ЯндексМаркет"));	
	Иначе
		
		НакопленныеДанные.Успешно			= Ложь;
		НакопленныеДанные.ОписаниеОшибки	= "В операции: "+Операция+" запрос по "+ТорговаяПлощадка+" не предусмотрен";
		
		Возврат Ложь;
		
	КонецЕсли;
		
	Если HTTP_Соединение.Ошибка Тогда
		
		НакопленныеДанные.Успешно			= Ложь;
		НакопленныеДанные.ОписаниеОшибки	= "В операции: "+Операция+" не удалось сформировать HTTP соединение из за ошибки "+HTTP_Соединение.ОписаниеОшибки;
		
		Возврат Ложь;

	КонецЕсли;
	
	ПараметрыЗапроса = ВернутьПараметрыЗапроса(ТорговаяПлощадка, ЗаказТорговойПлощадки);
	
	ПеременныеАдреса = Новый Структура("orderId", ЗаказТорговойПлощадки.НомерЗаказа);
	ПараметрыЗапроса.Вставить("Шаблон", ПеременныеАдреса);
	
	РезультатЗапроса = топ_ИнтеграцияСервер.ВыполнитьЗапросКСерверу(HTTP_Соединение, ЗапросКСерверу, Ложь, ПараметрыЗапроса);	
	
	Если Не РезультатЗапроса.Ошибка Тогда
		
		Возврат топ_ОбщийМодульСервер.ЗагрузитьЛогистическуюЭтикетку(ЗаказТорговойПлощадки, РезультатЗапроса.Данные);  
		
	Иначе
		Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет И РезультатЗапроса.КодСостояния = 400 Тогда			
			//Чупраков А.Н. 19.12.22, вывод сообщения с понятной формулировкой. Требуется проверка.
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Для заказа " + ЗаказТорговойПлощадки.НомерЗаказа + " идентификатор грузовых мест не указан."); 
			
		ИначеЕсли ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON И РезультатЗапроса.КодСостояния = 400 Тогда  		
			//Чупраков А.Н. 20.12.22, вывод ошибки по этикетке
			//только в статусе awaiting_delivery(для кроссбордера ещё в статусе awaiting_registration), 
			//после перехода в delivering и далее, этикетка становится не доступна для печати  
			ОшибкаОЗОН = топ_ВзаимодействиеСПлощадками.ВернутьСодержимоеРезультатовЗапроса(РезультатЗапроса.Данные, "message");  
			Если ОшибкаОЗОН = "INVALID_ARGUMENT" Тогда 
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Для заказа " + ЗаказТорговойПлощадки.НомерЗаказа + " загрузка этикетки недоступна.");
			Иначе 
				Сообщить(топ_ИнтеграцияСервер.ПояснитьКодСостоянияПриОшибке(РезультатЗапроса.КодСостояния));
			КонецЕсли;
			
		Иначе 	
			//БИТ Тверитин
			Сообщить(топ_ИнтеграцияСервер.ПояснитьКодСостоянияПриОшибке(РезультатЗапроса.КодСостояния)); 
			
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат Ложь;
	
КонецФункции //-- БИТ Артемьев

Функция НайтиЗапросЛогистическихЭтикеток(ТорговаяПлощадка) //++ БИТ Артемьев 10.06.2022
	
	Запрос = Новый Запрос("Выбрать Первые 1 Ссылка Из Справочник.топ_ЗапросыКТорговымПлощадкам ГДЕ КатегорияЗапроса = &КатегорияЗапроса И ТорговаяПлощадка = &ТорговаяПлощадка");
	//БИТ Симонова 19.09.2022 (
	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		Запрос.УстановитьПараметр("КатегорияЗапроса", Справочники.топ_КатегорииЗапросов.НайтиПоРеквизиту("НаименованиеДляПоиска","ЗапросКуарЭтикеток"));
	Иначе
		Запрос.УстановитьПараметр("КатегорияЗапроса", Справочники.топ_КатегорииЗапросов.НайтиПоРеквизиту("НаименованиеДляПоиска","ЗапросЛогЭтикеток"));
	КонецЕсли;
	//БИТ Симонова 19.09.2022 (
	Запрос.УстановитьПараметр("ТорговаяПлощадка", ТорговаяПлощадка);
	Выборка = Запрос.Выполнить().Выбрать();
	Возврат ?(Выборка.Следующий(), Выборка.Ссылка, Неопределено);
	
КонецФункции //-- БИТ Артемьев

Функция ВернутьПараметрыЗапроса(ТорговаяПлощадка, ЗаказТорговойПлощадки) //++ БИТ Артемьев 10.06.2022
	
	ПараметрыЗапроса = Новый Структура();

	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		
		Массив = Новый Массив();
		Массив.Добавить(Число(ЗаказТорговойПлощадки.НомерЗаказа));
		
		ПараметрыЗапроса.Вставить("Array", Массив);
		
	КонецЕсли;
	
	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.OZON Тогда
		
		//БИТ Смирнов А.П. 09.12.2022 BSLR-1069 (
		//Массив = Новый Массив();
		//Массив.Добавить(ЗаказТорговойПлощадки.НомерОтправления);
		Массив = МассивНомеровОтправленийЗаказаОзон(ЗаказТорговойПлощадки);
		//БИТ Смирнов А.П. 09.12.2022 )
		
		ПараметрыЗапроса.Вставить("Array", Массив);
		
	КонецЕсли; 
	
	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет Тогда
		
		Массив = Новый Массив();
		Массив.Добавить(ЗаказТорговойПлощадки.НомерЗаказа);
		
		ПараметрыЗапроса.Вставить("Array", Массив);
		
	КонецЕсли;
	
	Возврат ПараметрыЗапроса; 
	
КонецФункции //-- БИТ Артемьев

//БИТ Смирнов А.П. 30.11.2022 BSLR-777 (
Функция ПечатьЭтикетокТоваровЗаказаТорговойПлощадки(ЗаказТорговойПлощадки) Экспорт

	ТабДок						= Новый ТабличныйДокумент;
	
	ТабДок.ПолеСверху			= 1;
	ТабДок.ПолеСнизу			= 1;
	ТабДок.ПолеСлева			= 1;
	ТабДок.ПолеСправа			= 1;
	ТабДок.РазмерСтраницы		= "Custom";  
	ТабДок.ВысотаСтраницы		= 40;
	ТабДок.ШиринаСтраницы		= 58;
	ТабДок.ИмяПараметровПечати  = "ПАРАМЕТРЫ_ПЕЧАТИ_ТОП_ЭТИКЕТКАТОВАРА";
	
	Если ТипЗнч(ЗаказТорговойПлощадки) = Тип("Массив") Тогда
		Если ЗаказТорговойПлощадки.Количество() > 0 И ТипЗнч(ЗаказТорговойПлощадки[0]) = Тип("ДокументСсылка.топ_ЗаказТорговойПлощадки") Тогда
			МассивЗаказов = ЗаказТорговойПлощадки;
		Иначе
			Возврат Неопределено;
		КонецЕсли;
	ИначеЕсли ТипЗнч(ЗаказТорговойПлощадки) = Тип("ДокументСсылка.топ_ЗаказТорговойПлощадки") Тогда
		МассивЗаказов = Новый Массив;
		МассивЗаказов.Добавить(ЗаказТорговойПлощадки);
	Иначе         
		Возврат Неопределено;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	
	// ++ Бойков BSLR-3505
	СоответствиеВариантовСортировки = Новый Соответствие;
	СоответствиеВариантовСортировки.Вставить(Перечисления.топ_ВариантыСорировкиПечатныхФорм.НомерЗаказа, "ВТЗаказы.НомерЗаказа");
	СоответствиеВариантовСортировки.Вставить(Перечисления.топ_ВариантыСорировкиПечатныхФорм.Артикул, "ДополнительныеПоляСортировки.Артикул");
	СоответствиеВариантовСортировки.Вставить(Перечисления.топ_ВариантыСорировкиПечатныхФорм.Номенклатура, "ДополнительныеПоляСортировки.Номенклатура");
	СоответствиеВариантовСортировки.Вставить(Перечисления.топ_ВариантыСорировкиПечатныхФорм.Склад1С, "ДополнительныеПоляСортировки.Склад");
	СоответствиеВариантовСортировки.Вставить(Перечисления.топ_ВариантыСорировкиПечатныхФорм.Товар, "ДополнительныеПоляСортировки.Товар");
	
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.УстановитьПараметр("МассивЗаказов", МассивЗаказов);
	// В менеджер временных таблиц помещаем таблицу ВТ_ДополнительныеПоляСортировки
	топ_ОбщийВызовСервера.ВременнаяТаблицаДополнительныеПоляСортировкиЭтикеток(Запрос);
	// -- Бойков BSLR-3505
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	топ_ЗаказТорговойПлощадки.Ссылка КАК Ссылка,
	|	топ_ЗаказТорговойПлощадки.НомерЗаказа КАК НомерЗаказа
	|ПОМЕСТИТЬ ВТЗаказы
	|ИЗ
	|	Документ.топ_ЗаказТорговойПлощадки КАК топ_ЗаказТорговойПлощадки
	|ГДЕ
	|	топ_ЗаказТорговойПлощадки.Ссылка В(&ЗаказТорговойПлощадки)
	//|	И топ_ЗаказТорговойПлощадки.ЛичныйКабинет.ВыводитьНаПечатьЭтикеткиТоваров  //BT BSLR-2486 27.10.23
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	топ_ЗаказТорговойПлощадкиТовары.Ссылка КАК ЗаказТП,
	|	топ_ЗаказТорговойПлощадкиТовары.Товар КАК Товар,
	|	топ_ЗаказТорговойПлощадкиТовары.РазмерWB.баркод КАК Баркод,
	|	топ_ЗаказТорговойПлощадкиТовары.Товар.Наименование КАК Наименование,
	|	ЕСТЬNULL(топ_ЗначенияСвойствТоваров_СП.Значение, """") КАК СтранаПроизводитель,
	|	ЕСТЬNULL(топ_ЗначенияСвойствТоваров_Бренд.Значение, """") КАК Бренд, 
	//LAShadrin 05/05/23+
	|	топ_ЗаказТорговойПлощадкиТовары.Товар.КодПоставщика КАК Артикул
	//LAShadrin 05/05/23-
	|ИЗ
	|	ВТЗаказы КАК ВТЗаказы
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.топ_ЗаказТорговойПлощадки.Товары КАК топ_ЗаказТорговойПлощадкиТовары
	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_ЗначенияСвойствТоваров КАК топ_ЗначенияСвойствТоваров_СП
	|			ПО топ_ЗаказТорговойПлощадкиТовары.Товар = топ_ЗначенияСвойствТоваров_СП.Товар
	|				И топ_ЗаказТорговойПлощадкиТовары.РазмерWB = топ_ЗначенияСвойствТоваров_СП.РазмерWB
	|				И (топ_ЗначенияСвойствТоваров_СП.Свойство = &СвойствоСтранаПроизводитель)
	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_ЗначенияСвойствТоваров КАК топ_ЗначенияСвойствТоваров_Бренд
	|			ПО топ_ЗаказТорговойПлощадкиТовары.Товар = топ_ЗначенияСвойствТоваров_Бренд.Товар
	|				И топ_ЗаказТорговойПлощадкиТовары.РазмерWB = топ_ЗначенияСвойствТоваров_Бренд.РазмерWB
	|				И (топ_ЗначенияСвойствТоваров_Бренд.Свойство = &СвойствоБренд)
	|		ПО ВТЗаказы.Ссылка = топ_ЗаказТорговойПлощадкиТовары.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДополнительныеПоляСортировки КАК ДополнительныеПоляСортировки
	|		ПО ВТЗаказы.Ссылка = ДополнительныеПоляСортировки.ЗаказТорговойПлощадки
	|
	|УПОРЯДОЧИТЬ ПО
	|	&ВариантСортировки
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	топ_ЗаказТорговойПлощадкиТовары.Товар КАК Товар,
	|	топ_Штрихкоды.Штрихкод КАК Штрихкод
	|ИЗ
	|	ВТЗаказы КАК ВТЗаказы
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.топ_ЗаказТорговойПлощадки.Товары КАК топ_ЗаказТорговойПлощадкиТовары
	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_Штрихкоды КАК топ_Штрихкоды
	|			ПО топ_ЗаказТорговойПлощадкиТовары.Товар = топ_Штрихкоды.Товар
	|				И топ_ЗаказТорговойПлощадкиТовары.РазмерWB = топ_Штрихкоды.РазмерWB
	|		ПО ВТЗаказы.Ссылка = топ_ЗаказТорговойПлощадкиТовары.Ссылка
	|ГДЕ
	|	НЕ топ_Штрихкоды.Штрихкод ЕСТЬ NULL"; 	
	
	// ++ Бойков BSLR-3505
	УстановитьПривилегированныйРежим(Истина);
	ВариантСортировки = Константы.топ_ВариантСорировкиПечатныхФорм.Получить();
	Если Не ЗначениеЗаполнено(ВариантСортировки) Тогда
		ВариантСортировки = Перечисления.топ_ВариантыСорировкиПечатныхФорм.НомерЗаказа;
	КонецЕсли;
	УстановитьПривилегированныйРежим(Ложь);
	
	// ++ Бойков BSLR-3937
	//Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВариантСортировки", СоответствиеВариантовСортировки.Получить(ВариантСортировки));
	
	Если ВариантСортировки = Перечисления.топ_ВариантыСорировкиПечатныхФорм.НомерЗаказа Тогда
		ДополнительноеПолеСортировки = "ДополнительныеПоляСортировки.Артикул";
	Иначе
		ДополнительноеПолеСортировки = "ДополнительныеПоляСортировки.НомерЗаказа";
	КонецЕсли;
	
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ВариантСортировки", СоответствиеВариантовСортировки.Получить(ВариантСортировки) + 
		СтрШаблон(",
			|	%1", ДополнительноеПолеСортировки));
	// -- Бойков BSLR-3937
	// -- Бойков BSLR-3505
	
	Запрос.УстановитьПараметр("СвойствоСтранаПроизводитель"	, Справочники.топ_СвойстваТоваров.НайтиПоНаименованию("Страна производства"));
	Запрос.УстановитьПараметр("СвойствоБренд"				, Справочники.топ_СвойстваТоваров.НайтиПоНаименованию("Бренд"));
	Запрос.УстановитьПараметр("ЗаказТорговойПлощадки"		, МассивЗаказов);
	
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	РезультатТовары   = РезультатЗапроса[1];
	ТаблицаШтрихкодов = РезультатЗапроса[2].Выгрузить();
	ПараметрыОтбораШтрихкодов = Новый Структура("Товар");

	Если НЕ РезультатТовары.Пустой() Тогда
	
		//BSLR-4027, Чупраков А.Н., 31.10.24, макет через БСП
		//Макет						= Документы.топ_ЗаказТорговойПлощадки.ПолучитьМакет("ПФ_MXL_ЛогЭтикетка"); 
		Макет 						= УправлениеПечатью.МакетПечатнойФормы("Документ.топ_ЗаказТорговойПлощадки.ПФ_MXL_ЛогЭтикетка");
		ОбластьШКТовара				= Макет.ПолучитьОбласть("ШКТовара|ОбластьВерт");
		
		Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
		РисунокКвадрат = Эталон.Рисунки.Квадрат100Пикселей; // РисунокТабличногоДокумента
		КоличествоМиллиметровВПикселе = РисунокКвадрат.Высота / 100;
		
		ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
		ПараметрыШтрихкода.Вставить("Ширина",           Окр(ОбластьШКТовара.Рисунки.ШтрихкодТовара.Ширина / КоличествоМиллиметровВПикселе));
		ПараметрыШтрихкода.Вставить("Высота",           Окр(ОбластьШКТовара.Рисунки.ШтрихкодТовара.Высота / КоличествоМиллиметровВПикселе));
		ПараметрыШтрихкода.Вставить("Штрихкод",         "");
		ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Штрихкод - это строка
		ПараметрыШтрихкода.Вставить("ТипКода",          4); // Code128
		ПараметрыШтрихкода.Вставить("ОтображатьТекст",  Ложь);//LAShadrin 05/05/23
		ПараметрыШтрихкода.Вставить("РазмерШрифта",     5);
		
		Выборка = РезультатТовары.Выбрать();
		Пока Выборка.Следующий() Цикл 

			ШтрихкодТовара = Выборка.Баркод;
			Если НЕ ЗначениеЗаполнено(ШтрихкодТовара) Тогда
				ПараметрыОтбораШтрихкодов.Вставить("Товар", Выборка.Товар);
				СтрокиШтрихкодов = ТаблицаШтрихкодов.НайтиСтроки(ПараметрыОтбораШтрихкодов);
				Если СтрокиШтрихкодов.Количество() > 0 Тогда
					ШтрихкодТовара = СтрокиШтрихкодов[0].Штрихкод;	
				КонецЕсли;
			КонецЕсли;
			ПараметрыШтрихкода.Вставить("Штрихкод", ШтрихкодТовара);
			
			ОбластьШКТовара.Параметры.Заполнить(Выборка);
			ОбластьШКТовара.Параметры.НомерШК = ШтрихкодТовара; //LAShadrin 05/05/23
			ОбластьШКТовара.Рисунки.ШтрихкодТовара.Картинка = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода).Картинка;
			ТабДок.Вывести(ОбластьШКТовара);
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЦикла;
		
		АдресТабДок = ПоместитьВоВременноеХранилище(ТабДок);
		Возврат АдресТабДок;
		
	Иначе
		Возврат Неопределено;
	КонецЕсли;

	
КонецФункции
//БИТ Смирнов А.П. 30.11.2022 ) 

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

// ++ Бойков BSLR-1946
Функция ВывестиМассивЭтикетокPDFВЕдиныйТабличныйДокумент(МассивЭтикеток) Экспорт
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	ТабличныйДокумент.ПолеСверху = 1;
	ТабличныйДокумент.ПолеСлева = 1; 
	ТабличныйДокумент.ПолеСнизу = 1;
	ТабличныйДокумент.ПолеСправа = 1; 
	ТабличныйДокумент.РазмерКолонтитулаСверху = 0; 
	ТабличныйДокумент.РазмерКолонтитулаСнизу = 0;
	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Если МассивЭтикеток.Количество() = 0 Тогда
		Возврат ТабличныйДокумент;
	КонецЕсли;
	
	ТорговаяПлощадка = МассивЭтикеток[0].ЗаказТП.ЛичныйКабинет.ТорговаяПлощадка;
	
	//BSLR-4027, Чупраков А.Н., 31.10.24, макет через БСП
	//МакетЭтикеток = Обработки.топ_АРМ_КладовщикаFBS.ПолучитьМакет("ПФ_MXL_ЭтикеткаПодробно");  
	МакетЭтикеток = УправлениеПечатью.МакетПечатнойФормы("Обработка.топ_АРМ_КладовщикаFBS.ПФ_MXL_ЭтикеткаПодробно");
	Если ТорговаяПлощадка = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет Тогда
		ЭтикеткаМаркета = МакетЭтикеток.ПолучитьОбласть("МаркетплейсРасш");
		Рисунок = ЭтикеткаМаркета.Рисунки[0];
		ТабличныйДокумент.ШиринаСтраницы = 76;
		ТабличныйДокумент.ВысотаСтраницы = 120;
	Иначе
		ЭтикеткаМаркета = МакетЭтикеток.ПолучитьОбласть("Маркетплейс");
		Рисунок = ЭтикеткаМаркета.Рисунки.Этикетка;
		ТабличныйДокумент.ШиринаСтраницы = 58;
		ТабличныйДокумент.ВысотаСтраницы = 40;
	КонецЕсли;
	
	СоответствиеЭтикеток = Новый Соответствие;
	ЭтикеткиДляКонвертации = Новый Соответствие;
	
	#Область КонвертацияPDFВКартинки
	
	Для Каждого ДанныеЭтикетки Из МассивЭтикеток Цикл
		
		Значение = ЭтикеткиДляКонвертации.Получить(ДанныеЭтикетки.ЗаказТП);
		
		Если Значение = Неопределено Тогда
			ЭтикеткиДляКонвертации.Вставить(ДанныеЭтикетки.ЗаказТП, ДанныеЭтикетки.ДвоичныеДанные);
		ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
			Значение.Добавить(ДанныеЭтикетки.ДвоичныеДанные);
		Иначе
			Массив = Новый Массив;
			Массив.Добавить(Значение);
			Массив.Добавить(ДанныеЭтикетки.ДвоичныеДанные);
			ЭтикеткиДляКонвертации.Вставить(ДанныеЭтикетки.ЗаказТП, Массив);
		КонецЕсли;
		
	КонецЦикла;
	
	Если ЭтикеткиДляКонвертации.Количество() Тогда
		РезультатКонвертации = Обработки.топ_КонвертацияPDF.Создать().КонвертироватьФайлыPDF(ЭтикеткиДляКонвертации,"GhostScript");
		
		Для Каждого Запись Из РезультатКонвертации Цикл
			Значение = СоответствиеЭтикеток.Получить(Запись.Ключ);
			
			Если Значение = Неопределено Тогда
				СоответствиеЭтикеток.Вставить(Запись.Ключ, Запись.Значение);
			Иначе
				Для Каждого пФайл Из Запись.Значение Цикл
					Значение.Добавить(пФайл);
				КонецЦикла;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	#КонецОбласти
	
	Для Каждого ДанныеЭтикетки Из МассивЭтикеток Цикл  
		
		ЭтикеткиМаркетПлейса = СоответствиеЭтикеток.Получить(ДанныеЭтикетки.ЗаказТП);
		
		Если ЭтикеткиМаркетПлейса = Неопределено Тогда
			ТекстСообщения = НСтр("ru='Для заказа №%1 не найдено этикетки маркетплейса.'");
			ТекстСообщения = СтрШаблон(ТекстСообщения, ДанныеЭтикетки.ЗаказТП.НомерЗаказа);
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
			Продолжить;
		ИначеЕсли ТипЗнч(ЭтикеткиМаркетПлейса) = Тип("Строка") Тогда
			ТекстСообщения = НСтр("ru='Не удалось выполнить конвертацию для заказа №%1
				|по причине: %2.'");
			ТекстСообщения = СтрШаблон(ТекстСообщения, ДанныеЭтикетки.ЗаказТП.НомерЗаказа, ЭтикеткиМаркетПлейса);
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
			Продолжить;
		КонецЕсли;
		
		Для Каждого Этикетка Из ЭтикеткиМаркетПлейса Цикл
			Рисунок.Картинка = Новый Картинка(Этикетка);
			ТабличныйДокумент.Вывести(ЭтикеткаМаркета);
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЦикла;
		
		АдресДанных = ПечатьЭтикетокТоваровЗаказаТорговойПлощадки(ДанныеЭтикетки.ЗаказТП);
		Если АдресДанных <> Неопределено Тогда
			ЭтикеткиТоваровЗаказаТП = ПолучитьИзВременногоХранилища(АдресДанных);
			
			ИсходнаяВысотаТаблицы = ТабличныйДокумент.ВысотаТаблицы;
			
			ТабличныйДокумент.Вывести(ЭтикеткиТоваровЗаказаТП);
			
			// Выравнивание этикетки товара под этикетку МП
			ОбластьЭтикеткиТовара = ТабличныйДокумент.Область(ИсходнаяВысотаТаблицы + 1, 1, ТабличныйДокумент.ВысотаТаблицы, 1);
			ОбластьЭтикеткиТовара.ШиринаКолонки = 45;
			ТабличныйДокумент.Рисунки.ШтрихкодТовара.Лево = 15;
			
			ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ТабличныйДокумент;
	
КонецФункции // -- Бойков BSLR-1946


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

#Область ОстаткиFBS
// ++ БИТ Сергеев BSLR-807

// Функция возвращает текст запроса остатков по FBS
// Бойков BSLR-1734. Добавлен параметр "ЭтоВыгрузкаОстатков"
//
// Параметры:
//  ИмяВТ - Строка - Имя временой таблицы содержащей результат запроса. Если строка пустая, то добавляются поля для построителя и результат не помещается в ВТ
//
Функция ПолучитьТекстЗапросаОстатковПоFBS(Знач ИмяВТ = "ВТ_Результат", УчитыватьМинимальныеОстатки = Ложь, ЭтоВыгрузкаОстатков = Ложь) Экспорт
	
	пТекстыЗапросов = Новый Массив;
	// ++ Бойков BSLR-1734
	//пТекстыЗапросов.Добавить(ОстаткиFBS_ПолучитьТекстЗапроса_ОсновныхТаблиц());  // ВТ_ЛичныеКабинеты, ВТ_Склады, ВТ_Товары - Описание таблицы в процедуре
	пТекстыЗапросов.Добавить(ОстаткиFBS_ПолучитьТекстЗапроса_ОсновныхТаблиц(ЭтоВыгрузкаОстатков));  // ВТ_ЛичныеКабинеты, ВТ_Склады, ВТ_Товары - Описание таблицы в процедуре
	// -- Бойков BSLR-1734
	пТекстыЗапросов.Добавить(ОстаткиFBS_ПолучитьТекстЗапроса_ВТ_Номенклатура());  //ВТ_Номенклатура - К таблице товаров тянутся необходимые реквизиты номенклатуры, к примеру ед.изм.
	пТекстыЗапросов.Добавить(ОстаткиFBS_ПолучитьТекстЗапроса_ВТ_Остатки(УчитыватьМинимальныеОстатки)); //ВТ_Остатки - Получаем остатки в разрезе товаров
	пТекстыЗапросов.Добавить(ОстаткиFBS_ПолучитьТекстЗапроса_ВТ_Резерв(Истина)); //ВТ_Резерв - Таблица с резервом товара
	
	// ++ Бойков BSLR-2506
	// ++ Бойков BSLR-2906
	УстановитьПривилегированныйРежим(Истина);
	ИспользоватьВиртуальныйРезерв = Константы.топ_ИспользоватьВиртуальныйРезерв.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	// -- Бойков BSLR-2906
	Если ИспользоватьВиртуальныйРезерв Тогда
		ТекстРезерва = "-ВТ_Резерв.Количество";
	Иначе
		ТекстРезерва = "0";
	КонецЕсли;
	// -- Бойков BSLR-2506
	
	пТекстРезультата = 
		"ВЫБРАТЬ
		|	ВЫРАЗИТЬ(ВложенныйЗапрос.Товар КАК Справочник.топ_ТоварыТорговыхПлощадок).ЛичныйКабинет КАК ЛичныйКабинет,
		|	ВложенныйЗапрос.Товар КАК Товар,
		|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|	ВложенныйЗапрос.Склад КАК Склад,
		|	ВложенныйЗапрос.Количество КАК Количество,
		|	ВТ_Товары.ТоварID КАК ТоварID,
		|	ВТ_Товары.КодПоставщика КАК КодПоставщика,
		|	ВТ_Товары.Штрихкод КАК Штрихкод, 
		// ++ BSLR-1160
		|	ВТ_Товары.ОбнулятьОстатки КАК ОбнулятьОстатки,
		// -- BSLR-1160
		|	ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|	ВложенныйЗапрос.Характеристика КАК Характеристика
		|ПОМЕСТИТЬ ВТ_Результат
		|ИЗ
		|	(ВЫБРАТЬ
		|		ВложенныйЗапрос.Товар КАК Товар,
		|		ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|		ВложенныйЗапрос.Склад КАК Склад,
		|		СУММА(ВложенныйЗапрос.Количество) КАК Количество,
		|		ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|		ВложенныйЗапрос.Характеристика КАК Характеристика
		|	ИЗ
		|		(ВЫБРАТЬ
		|			ВТ_Остатки.Товар КАК Товар,
		|			ВТ_Остатки.РазмерWB КАК РазмерWB,
		|			ВТ_Остатки.Склад КАК Склад,
		|			ВТ_Остатки.Количество КАК Количество,
		|			ВТ_Остатки.Номенклатура КАК Номенклатура,
		|			ВТ_Остатки.Характеристика КАК Характеристика
		|		ИЗ
		|			ВТ_Остатки КАК ВТ_Остатки
		|		
		|		ОБЪЕДИНИТЬ ВСЕ
		|		
		|		ВЫБРАТЬ
		// ++ Бойков BSLR-2735
		//|			ВТ_Резерв.Товар,
		//|			ВТ_Резерв.РазмерWB,
		|			ВТ_Номенклатура.Товар,
		|			ВТ_Номенклатура.РазмерWB,
		// -- Бойков BSLR-2735
		|			ВТ_Резерв.Склад,
		|			%ТекстРезерва,
		|			ВТ_Резерв.Номенклатура,
		|			ВТ_Резерв.Характеристика
		|		ИЗ
		// ++ Бойков BSLR-2735
		//|			ВТ_Резерв КАК ВТ_Резерв) КАК ВложенныйЗапрос
		|			ВТ_Резерв КАК ВТ_Резерв
		|				ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
		|					ВТ_Номенклатура.Товар КАК Товар,
		|					ВТ_Номенклатура.РазмерWB КАК РазмерWB,
		|					ВТ_Номенклатура.Номенклатура КАК Номенклатура,
		|					ВТ_Номенклатура.Характеристика КАК Характеристика
		|				ИЗ
		|					ВТ_Номенклатура КАК ВТ_Номенклатура) КАК ВТ_Номенклатура
		|				ПО ВТ_Резерв.Номенклатура = ВТ_Номенклатура.Номенклатура
		|					И ВТ_Резерв.Характеристика = ВТ_Номенклатура.Характеристика) КАК ВложенныйЗапрос
		// -- Бойков BSLR-2735
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ВложенныйЗапрос.Склад,
		|		ВложенныйЗапрос.Товар,
		|		ВложенныйЗапрос.РазмерWB,
		|		ВложенныйЗапрос.Номенклатура,
		|		ВложенныйЗапрос.Характеристика) КАК ВложенныйЗапрос
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			Т.Товар КАК Товар,
		|			Т.ТоварID КАК ТоварID,
		|			Т.КодПоставщика КАК КодПоставщика,
		|			Т.РазмерWB КАК РазмерWB,
		|			Т.Штрихкод КАК Штрихкод,
		// ++ BSLR-1160
		|			Т.ОбнулятьОстатки КАК ОбнулятьОстатки
		// -- BSLR-1160
		|		ИЗ
		|			ВТ_Товары КАК Т
		|		
		|		СГРУППИРОВАТЬ ПО
		|			Т.Товар,
		|			Т.ТоварID,
		|			Т.КодПоставщика,
		|			Т.РазмерWB,
		// ++ BSLR-1160
		|			Т.ОбнулятьОстатки,
		// -- BSLR-1160
		|			Т.Штрихкод) КАК ВТ_Товары
		|		ПО ВложенныйЗапрос.Товар = ВТ_Товары.Товар
		|			И ВложенныйЗапрос.РазмерWB = ВТ_Товары.РазмерWB
		|{ГДЕ
		|	(ВЫРАЗИТЬ(ВложенныйЗапрос.Товар КАК Справочник.топ_ТоварыТорговыхПлощадок).ЛичныйКабинет) КАК ЛичныйКабинет,
		|	ВложенныйЗапрос.Товар,
		|	ВложенныйЗапрос.РазмерWB,
		|	ВложенныйЗапрос.Склад,
		|	ВложенныйЗапрос.Количество,
		|	ВТ_Товары.ТоварID,
		|	ВТ_Товары.КодПоставщика,
		|	ВТ_Товары.Штрихкод}";
	
	Если НЕ ИмяВТ = "ВТ_Результат" Тогда
		Если ЗначениеЗаполнено(ИмяВТ) Тогда
			ИмяВТ = СтрШаблон("ПОМЕСТИТЬ %1", ИмяВТ);
		Иначе
			ИмяВТ =
				"{ВЫБРАТЬ
				|	ЛичныйКабинет,
				|	Товар,
				|	РазмерWB,
				|	Склад,
				|	Количество,
				|	ТоварID,
				|	КодПоставщика,
				|	Штрихкод,
				|	Номенклатура,
				|	Характеристика}";
		КонецЕсли;
		
		пТекстРезультата = СтрЗаменить(пТекстРезультата, "ПОМЕСТИТЬ ВТ_Результат", ИмяВТ);
	КонецЕсли;
	
	пТекстРезультата = СтрЗаменить(пТекстРезультата, "%ТекстРезерва", ТекстРезерва);
	
	пТекстыЗапросов.Добавить(пТекстРезультата);
	
	пТекстыЗапросов = СтрСоединить(пТекстыЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());
	
	Возврат пТекстыЗапросов;
	
КонецФункции

// Бойков BSLR-1734. Добавлен параметр "ЭтоВыгрузкаОстатков"
Функция ОстаткиFBS_ПолучитьТекстЗапроса_ОсновныхТаблиц(ЭтоВыгрузкаОстатков = Ложь) Экспорт
	
	//ВТ_ЛичныеКабинеты - Выбираются все личные кабинеты   
	//ВТ_Склады - Выбирается таблица СписокСкладовFBS из личного кабинета
	//ВТ_Товары - Выбираются ТОЛЬКО сопоставленные товары

	Возврат
	"ВЫБРАТЬ
	|	топ_ЛичныеКабинеты.Ссылка КАК Ссылка
	|ПОМЕСТИТЬ ВТ_ЛичныеКабинеты
	|ИЗ
	|	Справочник.топ_ЛичныеКабинеты КАК топ_ЛичныеКабинеты
	|{ГДЕ
	|	топ_ЛичныеКабинеты.Ссылка.* КАК ЛичныйКабинет}
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВТ_ЛичныеКабинеты.Ссылка КАК ЛичныйКабинет,
	|	топ_ЛичныеКабинетыСписокСкладовFBS.Склад КАК Склад,
	|	топ_ЛичныеКабинетыСписокСкладовFBS.СкладТП КАК СкладТП
	|ПОМЕСТИТЬ ВТ_Склады
	|ИЗ
	|	Справочник.топ_ЛичныеКабинеты.СписокСкладовFBS КАК топ_ЛичныеКабинетыСписокСкладовFBS
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЛичныеКабинеты КАК ВТ_ЛичныеКабинеты
	|		ПО топ_ЛичныеКабинетыСписокСкладовFBS.Ссылка = ВТ_ЛичныеКабинеты.Ссылка
	|{ГДЕ
	|	топ_ЛичныеКабинетыСписокСкладовFBS.Склад.*,
	|	топ_ЛичныеКабинетыСписокСкладовFBS.СкладТП.*}
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ВложенныйЗапрос.Товар КАК Товар,
	|	ВложенныйЗапрос.ТоварID КАК ТоварID,
	|	ВложенныйЗапрос.КодПоставщика КАК КодПоставщика,
	|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
	|	ВложенныйЗапрос.Штрихкод КАК Штрихкод,
	// ++ BSLR-1114
	|	ВложенныйЗапрос.ОбнулятьОстатки КАК ОбнулятьОстатки,
	// -- BSLR-1114
	|	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
	|	топ_СоответствиеТоваров.Характеристика КАК Характеристика,
	|	топ_СоответствиеТоваров.Упаковка КАК Упаковка
	|ПОМЕСТИТЬ ВТ_Товары
	|ИЗ
	|	(ВЫБРАТЬ
	|		Товары.Ссылка КАК Товар,
	|		Товары.ID КАК ТоварID,
	|		Товары.КодПоставщика КАК КодПоставщика,
	|		ЕСТЬNULL(РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)) КАК РазмерWB,
	// ++ BSLR-1160
	|		Товары.ОбнулятьОстатки КАК ОбнулятьОстатки,
	// ++ BSLR-1160
	|		МАКСИМУМ(ВЫБОР
	|				КОГДА ЕСТЬNULL(РазмерыТоваровWB.Ссылка, 0) = 0
	|						ИЛИ РазмерыТоваровWB.баркод = """"
	|					ТОГДА ЕСТЬNULL(Штрихкоды.Штрихкод, """")
	|				ИНАЧЕ РазмерыТоваровWB.баркод
	|			КОНЕЦ) КАК Штрихкод
	|	ИЗ
	|		Справочник.топ_ТоварыТорговыхПлощадок КАК Товары
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЛичныеКабинеты КАК ВТ_ЛичныеКабинеты
	|			ПО Товары.ЛичныйКабинет = ВТ_ЛичныеКабинеты.Ссылка
	|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_Штрихкоды КАК Штрихкоды
	|			ПО Товары.Ссылка = Штрихкоды.Товар
	|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.топ_РазмерыТоваровWB КАК РазмерыТоваровWB
	|			ПО Товары.Ссылка = РазмерыТоваровWB.Владелец
	|			И (НЕ РазмерыТоваровWB.ПометкаУдаления)
	|			ГДЕ
	|			Товары.Показывается = Истина
	|	{ГДЕ
	|		Товары.Ссылка.* КАК Товар,
	|		(ЕСТЬNULL(РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))).* КАК Размер,
	// ++ BSLR-1160
	|		НЕ Товары.ОбнулятьОстатки КАК РазмещенНаВитрине,
	// -- BSLR-1160
	|		(МАКСИМУМ(ЕСТЬNULL(Штрихкоды.Штрихкод, """"))) КАК Штрихкод}
	|	
	|	СГРУППИРОВАТЬ ПО
	|		Товары.Ссылка,
	|		Товары.ID,  
	// ++ BSLR-1160
	|		Товары.ОбнулятьОстатки, 
	// -- BSLR-1160
	|		Товары.КодПоставщика,
	|		ЕСТЬNULL(РазмерыТоваровWB.Ссылка, ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))) КАК ВложенныйЗапрос
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
	|			ПО топ_СоответствиеТоваров.Номенклатура = спрНоменклатура.Ссылка
	|		ПО ВложенныйЗапрос.Товар = топ_СоответствиеТоваров.Товар
	|			И (ВложенныйЗапрос.РазмерWB = топ_СоответствиеТоваров.РазмерWB
	|				ИЛИ ВложенныйЗапрос.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)
	|					И топ_СоответствиеТоваров.РазмерWB.размер = ""0"")
	// ++ Бойков BSLR-1734
	|" + ?(ЭтоВыгрузкаОстатков,
		"		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_МинимальныйОстатокТовара.СрезПоследних КАК МинимальныеОстаткиТовара
		|		ПО ВложенныйЗапрос.Товар = МинимальныеОстаткиТовара.Товар
		|ГДЕ
		|	НЕ ЕСТЬNULL(МинимальныеОстаткиТовара.ТоварТолькоДляFBO, ЛОЖЬ)", "") + "
	// -- Бойков BSLR-1734
	|{ГДЕ
	|	топ_СоответствиеТоваров.Номенклатура.*,
	|	топ_СоответствиеТоваров.Характеристика.*}";
КонецФункции

Функция ОстаткиFBS_ПолучитьТекстЗапроса_ВТ_Номенклатура() Экспорт
	
	пТекстыЗапросов = Новый Массив;
	  
	Если НЕ Метаданные.Справочники.Найти("УпаковкиЕдиницыИзмерения") = Неопределено Тогда //УТ
		
		пТекстыЗапросов.Добавить(
			"ВЫБРАТЬ
			|	ВТ_Товары.Товар КАК Товар,
			|	ВТ_Товары.РазмерWB КАК РазмерWB,
			|	ВТ_Товары.Номенклатура КАК Номенклатура,
			|	ВТ_Товары.Характеристика КАК Характеристика,
			|	ЛОЖЬ КАК Набор,
			|	ВТ_Товары.Номенклатура КАК НоменклатураОстатков,
			|	ВТ_Товары.Характеристика КАК ХарактеристикаОстатков,
			|	ВЫБОР
			|		КОГДА ВТ_Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
			|			ТОГДА 1
			|		ИНАЧЕ ВЫБОР
			|				КОГДА ВТ_Товары.Упаковка.Знаменатель = 0
			|					ТОГДА 1
			|				ИНАЧЕ ВТ_Товары.Упаковка.Знаменатель
			|			КОНЕЦ
			|	КОНЕЦ КАК КоэффициентЧислитель,
			|	ВЫБОР
			|		КОГДА ВТ_Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка)
			|			ТОГДА 1
			|		ИНАЧЕ ВЫБОР
			|				КОГДА ВТ_Товары.Упаковка.Числитель = 0
			|					ТОГДА 1
			|				ИНАЧЕ ВТ_Товары.Упаковка.Числитель
			|			КОНЕЦ
			|	КОНЕЦ КАК КоэффициентЗнаменатель
			|ПОМЕСТИТЬ ВТ_Номенклатура
			|ИЗ
			|	ВТ_Товары КАК ВТ_Товары");  
		
	ИначеЕсли НЕ Метаданные.Справочники.Найти("ЕдиницыИзмерения") = Неопределено Тогда //УНФ
		
		пТекстыЗапросов.Добавить(
			"ВЫБРАТЬ
			|	ВТ_Товары.Товар КАК Товар,
			|	ВТ_Товары.РазмерWB КАК РазмерWB,
			|	ВТ_Товары.Номенклатура КАК Номенклатура,
			|	ВТ_Товары.Характеристика КАК Характеристика,
			|	ЛОЖЬ КАК Набор,
			|	ВТ_Товары.Номенклатура КАК НоменклатураОстатков,
			|	ВТ_Товары.Характеристика КАК ХарактеристикаОстатков,
			|	1 КАК КоэффициентЧислитель,     
			|	ВЫБОР
			|		КОГДА ВТ_Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
			|			ТОГДА 1
			|		ИНАЧЕ ВЫБОР
			|				КОГДА ВТ_Товары.Упаковка.Коэффициент = 0
			|					ТОГДА 1
			|				ИНАЧЕ ВТ_Товары.Упаковка.Коэффициент
			|			КОНЕЦ
			|	КОНЕЦ КАК КоэффициентЗнаменатель
			|ПОМЕСТИТЬ ВТ_Номенклатура
			|ИЗ
			|	ВТ_Товары КАК ВТ_Товары");  
		
	Иначе
		ВызватьИсключение "Ошибка при построении запроса остатков FBS (не найдена таблица упаковок и единиц измерения)";
	КонецЕсли;
	//БИТ Смирнов А.П. 16.12.2022 )
	
	Если НЕ Метаданные.Справочники.Найти("ВариантыКомплектацииНоменклатуры") = Неопределено Тогда // УТ
		пТекстыЗапросов.Добавить(
			"ВЫБРАТЬ
			|	ВТ_Товары.Товар КАК Товар,
			|	ВТ_Товары.РазмерWB КАК РазмерWB,
			|	ВТ_Товары.Номенклатура КАК Номенклатура,
			|	ВТ_Товары.Характеристика КАК Характеристика,
			|	СоставНаборов.Ссылка КАК Набор,
			|	СоставНаборов.Номенклатура КАК НоменклатураОстатков,
			|	СоставНаборов.Характеристика КАК ХарактеристикаОстатков,
			|	ВЫБОР
			|		КОГДА СоставНаборов.Ссылка.Количество = 0
			|			ТОГДА 1
			|		ИНАЧЕ СоставНаборов.Ссылка.Количество
			|	КОНЕЦ КАК КоэффициентЧислитель,
			|	ВЫБОР
			|		КОГДА СоставНаборов.Количество = 0
			|			ТОГДА 1
			|		ИНАЧЕ СоставНаборов.Количество
			|	КОНЕЦ КАК КоэффициентЗнаменатель
			|ИЗ
			|	ВТ_Товары КАК ВТ_Товары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК СоставНаборов
			|		ПО (ВТ_Товары.Номенклатура = СоставНаборов.Ссылка.Владелец
			|				И ВТ_Товары.Характеристика = СоставНаборов.Ссылка.Характеристика
			|				И НЕ СоставНаборов.Ссылка.ПометкаУдаления
			|				И ВТ_Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)),
			|	Константа.ИспользоватьНаборы КАК ИспользоватьНаборы
			|ГДЕ
			|	ИспользоватьНаборы.Значение = ИСТИНА
			// ++ Бойков BSLR-2230
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|ВЫБРАТЬ
			|	ВТ_Товары.Товар КАК Товар,
			|	ВТ_Товары.РазмерWB КАК РазмерWB,
			|	ВТ_Товары.Номенклатура КАК Номенклатура,
			|	ВТ_Товары.Характеристика КАК Характеристика,
			|	СоставНаборов.Ссылка КАК Набор,
			|	СоставНаборов.Номенклатура КАК НоменклатураОстатков,
			|	СоставНаборов.Характеристика КАК ХарактеристикаОстатков,
			|	ВЫБОР
			|		КОГДА СоставНаборов.Ссылка.Количество = 0
			|			ТОГДА 1
			|		ИНАЧЕ СоставНаборов.Ссылка.Количество
			|	КОНЕЦ КАК КоэффициентЧислитель,
			|	ВЫБОР
			|		КОГДА СоставНаборов.Количество = 0
			|			ТОГДА 1
			|		ИНАЧЕ СоставНаборов.Количество
			|	КОНЕЦ КАК КоэффициентЗнаменатель
			|ИЗ
			|	ВТ_Товары КАК ВТ_Товары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК СоставНаборов
			|		ПО (ВТ_Товары.Номенклатура = СоставНаборов.Ссылка.Владелец
			|				И ВТ_Товары.Характеристика = СоставНаборов.Ссылка.Характеристика
			|				И НЕ СоставНаборов.Ссылка.ПометкаУдаления 
			//BSLR-2489, Начало, Чупраков А.Н., 28.11.23
			//|				И &НеВыгружатьВиртуальныйОстатокПоКомплектам = ЛОЖЬ 
			|				И ВТ_Товары.Товар.ЛичныйКабинет.НеВыгружатьВиртуальныйОстатокПоКомплектам = ЛОЖЬ
			//BSLR-2489, Конец
			|				И ВЫБОР
			|					КОГДА ВТ_Товары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
			|						ТОГДА СоставНаборов.Ссылка.Основной
			|					ИНАЧЕ ЛОЖЬ
			|				КОНЕЦ)");
			// -- Бойков BSLR-2230
		
	ИначеЕсли НЕ Метаданные.РегистрыСведений.Найти("СоставНаборов") = Неопределено Тогда // УНФ
		пТекстыЗапросов.Добавить(
			"ВЫБРАТЬ
			|	ВТ_Товары.Товар КАК Товар,
			|	ВТ_Товары.РазмерWB КАК РазмерWB,
			|	ВТ_Товары.Номенклатура КАК Номенклатура,
			|	ВТ_Товары.Характеристика КАК Характеристика,
			|	ИСТИНА КАК Набор,
			|	СоставНаборов.Номенклатура КАК НоменклатураОстатков,
			|	СоставНаборов.Характеристика КАК ХарактеристикаОстатков,
			|	1 КАК КоэффициентЧислитель,
			|	ВЫБОР
			|		КОГДА СУММА(СоставНаборов.Количество * ВЫБОР
			|					КОГДА СоставНаборов.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
			|						ТОГДА СоставНаборов.ЕдиницаИзмерения.Коэффициент
			|					ИНАЧЕ 1
			|				КОНЕЦ) = 0
			|			ТОГДА 1
			|		ИНАЧЕ СУММА(СоставНаборов.Количество * ВЫБОР
			|					КОГДА СоставНаборов.ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения
			|						ТОГДА СоставНаборов.ЕдиницаИзмерения.Коэффициент
			|					ИНАЧЕ 1
			|				КОНЕЦ)
			|	КОНЕЦ КАК КоэффициентЗнаменатель
			|ИЗ
			|	ВТ_Товары КАК ВТ_Товары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставНаборов КАК СоставНаборов
			|		ПО ВТ_Товары.Номенклатура = СоставНаборов.НоменклатураНабора
			// письмерова BSLR-1795 - при отключении признака набор в номенклатуре запись в РС остается
			|			И СоставНаборов.НоменклатураНабора.ЭтоНабор
			|			И (ВТ_Товары.Характеристика = СоставНаборов.ХарактеристикаНабора
			|					И НЕ СоставНаборов.Общий
			|				ИЛИ ВТ_Товары.Характеристика <> ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)
			|					И СоставНаборов.Общий)
			|
			|СГРУППИРОВАТЬ ПО
			|	ВТ_Товары.Товар,
			|	ВТ_Товары.РазмерWB,
			|	ВТ_Товары.Номенклатура,
			|	ВТ_Товары.Характеристика,
			|	СоставНаборов.Номенклатура,
			|	СоставНаборов.Характеристика
			// ++ Бойков BSLR-2230
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|ВЫБРАТЬ
			|	ВТ_Товары.Товар КАК Товар,
			|	ВТ_Товары.РазмерWB КАК РазмерWB,
			|	ВТ_Товары.Номенклатура КАК Номенклатура,
			|	ВТ_Товары.Характеристика КАК Характеристика,
			|	ИСТИНА КАК Набор,
			|	СоставКомплектации.Номенклатура КАК НоменклатураОстатков,
			|	СоставКомплектации.Характеристика КАК ХарактеристикаОстатков,
			|	СоставКомплектации.КоличествоПродукции КАК КоэффициентЧислитель,
			|	СоставКомплектации.Количество КАК КоэффициентЗнаменатель
			|ИЗ
			|	ВТ_Товары КАК ВТ_Товары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КомплектацииПоУмолчанию КАК КомплектацииПоУмолчанию
			|		ПО ВТ_Товары.Номенклатура = КомплектацииПоУмолчанию.Номенклатура
			|			И ВТ_Товары.Характеристика = КомплектацииПоУмолчанию.Характеристика
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КомплектацииНоменклатуры.Состав КАК СоставКомплектации
			|		ПО КомплектацииПоУмолчанию.Комплектация = СоставКомплектации.Ссылка
			|			И НЕ СоставКомплектации.Ссылка.ПометкаУдаления   
			//BSLR-2489, Начало, Чупраков А.Н., 28.11.23
			//|			И (&НеВыгружатьВиртуальныйОстатокПоКомплектам = ЛОЖЬ)");  
			|			И (ВТ_Товары.Товар.ЛичныйКабинет.НеВыгружатьВиртуальныйОстатокПоКомплектам = ЛОЖЬ)");
			//BSLR-2489, Конец
			// -- Бойков BSLR-2230
	Иначе
		ВызватьИсключение "Ошибка при построении запроса остатков FBS (не найдена таблица наборов)";
	КонецЕсли;
	
	пТекстыЗапросов = СтрСоединить(пТекстыЗапросов, СтрШаблон("%1%1ОБЪЕДИНИТЬ ВСЕ%1%1", Символы.ПС));
	
	Возврат пТекстыЗапросов;
	
КонецФункции

Функция ОстаткиFBS_ПолучитьТекстЗапроса_ВТ_Остатки(УчитыватьМинимальныеОстатки = Ложь)
	
	ЭтоУНФ = Ложь;
	
	пТекстЗапроса = Новый Массив;
	
	Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.4.")
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.4.")
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.4.") Тогда // УТ 11.4
		пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	СвободныеОстатки.Номенклатура КАК Номенклатура,
		|	СвободныеОстатки.Характеристика КАК Характеристика,
		|	СвободныеОстатки.Склад КАК Склад,
		|	СУММА(СвободныеОстатки.ВНаличииОстаток - СвободныеОстатки.ВРезервеСоСкладаОстаток - СвободныеОстатки.ВРезервеПодЗаказОстаток) КАК Остаток
		|ПОМЕСТИТЬ ВТ_ОстаткиПредварительная
		|ИЗ
		|	РегистрНакопления.СвободныеОстатки.Остатки(
		|			,
		|			(Номенклатура, Характеристика) В
		|					(ВЫБРАТЬ
		|						Таблица.НоменклатураОстатков КАК Номенклатура,
		|						Таблица.ХарактеристикаОстатков КАК Характеристика
		|					ИЗ
		|						ВТ_Номенклатура КАК Таблица)
		|				И Склад В
		|					(ВЫБРАТЬ
		|						Таблица.Склад
		|					ИЗ
		|						ВТ_Склады КАК Таблица)) КАК СвободныеОстатки
		|
		|СГРУППИРОВАТЬ ПО
		|	СвободныеОстатки.Номенклатура,
		|	СвободныеОстатки.Характеристика,
		|	СвободныеОстатки.Склад");
		//BSLR-5453
	ИначеЕсли топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.5.26.96", Истина)
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.5.26.96", Истина)
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.5.26.96", Истина) Тогда // УТ 11.5
		пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	СвободныеОстатки.Номенклатура КАК Номенклатура,
		|	СвободныеОстатки.Характеристика КАК Характеристика,
		|	СвободныеОстатки.Склад КАК Склад,
		|	СУММА(СвободныеОстатки.Количество) КАК Остаток
		|ПОМЕСТИТЬ ВТ_ОстаткиПредварительная
		|ИЗ
		|	(ВЫБРАТЬ
		|		Т.НоменклатураОстатков КАК Номенклатура,
		|		Т.ХарактеристикаОстатков КАК Характеристика
		|	ИЗ
		|		ВТ_Номенклатура КАК Т
		|	
		|	СГРУППИРОВАТЬ ПО
		|		Т.НоменклатураОстатков,
		|		Т.ХарактеристикаОстатков) КАК ВТ_Номенклатура
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК СвободныеОстатки
		|		ПО ВТ_Номенклатура.Номенклатура = СвободныеОстатки.Номенклатура
		|			И ВТ_Номенклатура.Характеристика = СвободныеОстатки.Характеристика
		|			И (СвободныеОстатки.СостояниеЗапаса = ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии))
		// BSLR-5822
		//|			И (СвободныеОстатки.СостояниеЗапаса В (ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличииОжидаетсяРазблокировка), ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличииНеПодлежитРазблокировке)))
		|			И (СвободныеОстатки.ХарактеристикаПотребности В (ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.ОтложитьРезервирование), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.КОбеспечению), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.Излишек)))
		|			И (СвободныеОстатки.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка))
		|ГДЕ
		|	СвободныеОстатки.Склад В
		|			(ВЫБРАТЬ
		|				Т.Склад
		|			ИЗ
		|				ВТ_Склады КАК Т)
		|
		|СГРУППИРОВАТЬ ПО
		|	СвободныеОстатки.Номенклатура,
		|	СвободныеОстатки.Характеристика,
		|	СвободныеОстатки.Склад");	
		//BSLR-5453
	ИначеЕсли топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.5.")
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.5.")
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.5.") Тогда //
		пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	СвободныеОстатки.Номенклатура КАК Номенклатура,
		|	СвободныеОстатки.Характеристика КАК Характеристика,
		|	СвободныеОстатки.Склад КАК Склад,
		|	СУММА(СвободныеОстатки.Свободно) КАК Остаток
		|ПОМЕСТИТЬ ВТ_ОстаткиПредварительная
		|ИЗ
		|	(ВЫБРАТЬ
		|		Т.НоменклатураОстатков КАК Номенклатура,
		|		Т.ХарактеристикаОстатков КАК Характеристика
		|	ИЗ
		|		ВТ_Номенклатура КАК Т
		|	
		|	СГРУППИРОВАТЬ ПО
		|		Т.НоменклатураОстатков,
		|		Т.ХарактеристикаОстатков) КАК ВТ_Номенклатура
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК СвободныеОстатки
		|		ПО ВТ_Номенклатура.Номенклатура = СвободныеОстатки.Номенклатура
		|			И ВТ_Номенклатура.Характеристика = СвободныеОстатки.Характеристика
		|			И (СвободныеОстатки.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе))
		|			И (СвободныеОстатки.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка))
		|ГДЕ
		|	СвободныеОстатки.Склад В
		|			(ВЫБРАТЬ
		|				Т.Склад
		|			ИЗ
		|				ВТ_Склады КАК Т)
		|
		|СГРУППИРОВАТЬ ПО
		|	СвободныеОстатки.Номенклатура,
		|	СвободныеОстатки.Характеристика,
		|	СвободныеОстатки.Склад");
	ИначеЕсли топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеНебольшойФирмой") Тогда // УНФ
		ЭтоУНФ = Истина;
		пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	ЗапасыОстатки.Номенклатура КАК Номенклатура,
		|	ЗапасыОстатки.Характеристика КАК Характеристика,
		|	ЗапасыОстатки.СтруктурнаяЕдиница КАК Склад,
		|	СУММА(ЗапасыОстатки.КоличествоОстаток) КАК Остаток
		|ПОМЕСТИТЬ ВТ_ОстаткиПредварительная
		|ИЗ
		|	РегистрНакопления.Запасы.Остатки(
		|			,
		|			(Номенклатура, Характеристика) В
		|					(ВЫБРАТЬ
		|						Таблица.НоменклатураОстатков КАК Номенклатура,
		|						Таблица.ХарактеристикаОстатков КАК Характеристика
		|					ИЗ
		|						ВТ_Номенклатура КАК Таблица)
		|				И СтруктурнаяЕдиница В
		|					(ВЫБРАТЬ
		|						Таблица.Склад
		|					ИЗ
		|						ВТ_Склады КАК Таблица)
		|				И ЗаказПокупателя = ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)) КАК ЗапасыОстатки
		|
		|СГРУППИРОВАТЬ ПО
		|	ЗапасыОстатки.Номенклатура,
		|	ЗапасыОстатки.Характеристика,
		|	ЗапасыОстатки.СтруктурнаяЕдиница");
	Иначе
		ВызватьИсключение "Ошибка при построении запроса остатков FBS (не найден регистр остатков)";
	КонецЕсли;
	
	// ++ BSLR-XXXX, Варнин, 23.09.2026
	// Склады поставщиков (FBS со склада Берга): остаток берётся не из РаспределениеЗапасов, а из
	// регистра расширения Кореана кор_ОстаткиПоставщиков. Текст подменяет кор_ОстаткиПоставщиков.ДополнитьЗапросОстатковFBS;
	// без Кореаны или без настроенных складов поставщиков запрос остаётся прежним.
	Если Не ЭтоУНФ И Метаданные.ОбщиеМодули.Найти("кор_ОстаткиПоставщиков") <> Неопределено Тогда
		ПараметрыМетода = Новый Массив;
		ПараметрыМетода.Добавить(пТекстЗапроса);
		ОбщегоНазначения.ВыполнитьМетодКонфигурации("кор_ОстаткиПоставщиков.ДополнитьЗапросОстатковFBS", ПараметрыМетода);
	КонецЕсли;
	// -- BSLR-XXXX, Варнин, 23.09.2026
		
	 // BSLR-5822 добавлена группировка для КоэффициентЗнаменатель, когда в наборе несколько строк с одним товаром 
	пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	ВложенныйЗапрос.Товар КАК Товар,
		|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|	ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|	ВложенныйЗапрос.Характеристика КАК Характеристика,
		|	СУММА(ВЫБОР
		|			КОГДА ВложенныйЗапрос.Количество = 0
		|				ТОГДА 0
		|			КОГДА ВложенныйЗапрос.Количество > 0
		|				ТОГДА ВЫРАЗИТЬ(ВложенныйЗапрос.Количество - 0.5 КАК ЧИСЛО(15, 0))
		|			ИНАЧЕ ВЫРАЗИТЬ(ВложенныйЗапрос.Количество + 0.5 КАК ЧИСЛО(15, 0))
		|		КОНЕЦ) КАК Количество,
		|	ВложенныйЗапрос.Склад КАК Склад
		|ПОМЕСТИТЬ ВТ_Остатки
		|ИЗ
		|	(ВЫБРАТЬ
		|		ВТ_Номенклатура.Товар КАК Товар,
		|		ВТ_Номенклатура.РазмерWB КАК РазмерWB,
		|		ВТ_Номенклатура.Номенклатура КАК Номенклатура,
		|		ВТ_Номенклатура.Характеристика КАК Характеристика,
		|		ВТ_Номенклатура.Набор КАК Набор,
		|		МИНИМУМ(ВТ_Номенклатура.КоэффициентЧислитель * ВЫБОР
		|				КОГДА ВТ_ОстаткиПредварительная.Остаток ЕСТЬ NULL
		|						ИЛИ ВТ_ОстаткиПредварительная.Остаток < 0
		|							И ВТ_Номенклатура.Набор <> ЛОЖЬ
		|					ТОГДА 0
		|				ИНАЧЕ ВТ_ОстаткиПредварительная.Остаток
		|			КОНЕЦ / ВТ_Номенклатура.КоэффициентЗнаменатель) КАК Количество,
		|		ВТ_Номенклатура.Склад КАК Склад
		|	ИЗ
		|		(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|			ВТ_Номенклатура.Товар КАК Товар,
		|			ВТ_Номенклатура.РазмерWB КАК РазмерWB,
		|			ВТ_Номенклатура.Номенклатура КАК Номенклатура,
		|			ВТ_Номенклатура.Характеристика КАК Характеристика,
		|			ВТ_Номенклатура.Набор КАК Набор,
		|			ВТ_Номенклатура.НоменклатураОстатков КАК НоменклатураОстатков,
		|			ВТ_Номенклатура.ХарактеристикаОстатков КАК ХарактеристикаОстатков,
		|			ВТ_Номенклатура.КоэффициентЧислитель КАК КоэффициентЧислитель,
		|			СУММА(ВТ_Номенклатура.КоэффициентЗнаменатель) КАК КоэффициентЗнаменатель,
		|			ВложенныйЗапрос.Склад КАК Склад
		|		ИЗ
		|			ВТ_Номенклатура КАК ВТ_Номенклатура,
		|			(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|				ВТ_Склады.Склад КАК Склад
		|			ИЗ
		|				ВТ_Склады КАК ВТ_Склады) КАК ВложенныйЗапрос
		|		
		|		СГРУППИРОВАТЬ ПО
		|			ВТ_Номенклатура.Товар,
		|			ВТ_Номенклатура.РазмерWB,
		|			ВТ_Номенклатура.Номенклатура,
		|			ВТ_Номенклатура.Характеристика,
		|			ВТ_Номенклатура.Набор,
		|			ВТ_Номенклатура.НоменклатураОстатков,
		|			ВТ_Номенклатура.ХарактеристикаОстатков,
		|			ВТ_Номенклатура.КоэффициентЧислитель,
		|			ВложенныйЗапрос.Склад) КАК ВТ_Номенклатура
		|			ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПредварительная КАК ВТ_ОстаткиПредварительная
		|			ПО ВТ_Номенклатура.НоменклатураОстатков = ВТ_ОстаткиПредварительная.Номенклатура
		|				И ВТ_Номенклатура.ХарактеристикаОстатков = ВТ_ОстаткиПредварительная.Характеристика
		|				И ВТ_Номенклатура.Склад = ВТ_ОстаткиПредварительная.Склад
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ВТ_Номенклатура.Товар,
		|		ВТ_Номенклатура.РазмерWB,
		|		ВТ_Номенклатура.Номенклатура,
		|		ВТ_Номенклатура.Характеристика,
		|		ВТ_Номенклатура.Набор,
		|		ВТ_Номенклатура.Склад) КАК ВложенныйЗапрос
		|
		|СГРУППИРОВАТЬ ПО
		|	ВложенныйЗапрос.Товар,
		|	ВложенныйЗапрос.РазмерWB,
		|	ВложенныйЗапрос.Номенклатура,
		|	ВложенныйЗапрос.Характеристика,
		|	ВложенныйЗапрос.Склад");
	
	// ++ Бойков BSLR-2192. Сделано через вложенные запросы, чтобы оптимизатор СКД не убрал некоторые поля
	пТекстЗапроса.Удалить(пТекстЗапроса.ВГраница());
	
	пТекстЗапроса.Добавить(
	"ВЫБРАТЬ
	|	топ_ОграниченияВыгрузкиОстатковНаМП.СкладПоставщика КАК СкладПоставщика,
	|	топ_ОграниченияВыгрузкиОстатковНаМП.Товар КАК Товар,
	|	топ_ОграниченияВыгрузкиОстатковНаМП.РазмерWB КАК РазмерWB
	|ПОМЕСТИТЬ ВТ_ограничения
	|ИЗ
	|	РегистрСведений.топ_ОграниченияВыгрузкиОстатковНаМП КАК топ_ОграниченияВыгрузкиОстатковНаМП
	|ГДЕ
	|	топ_ОграниченияВыгрузкиОстатковНаМП.СкладПоставщика = &Склад");
	
	пТекстЗапроса.Добавить(
	 // BSLR-5822 добавлена группировка для КоэффициентЗнаменатель, когда в наборе несколько строк с одним товаром 
		"ВЫБРАТЬ
		|	ВложенныйЗапрос.Товар КАК Товар,
		|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|	ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|	ВложенныйЗапрос.Характеристика КАК Характеристика,
		|	ВложенныйЗапрос.Набор КАК Набор,
		|	ВложенныйЗапрос.НоменклатураОстатков КАК НоменклатураОстатков,
		|	ВложенныйЗапрос.ХарактеристикаОстатков КАК ХарактеристикаОстатков,
		|	ВложенныйЗапрос.КоэффициентЧислитель КАК КоэффициентЧислитель,
		|	СУММА(ВложенныйЗапрос.КоэффициентЗнаменатель) КАК КоэффициентЗнаменатель,
		|	ВложенныйЗапрос.Склад КАК Склад,
		|	ВложенныйЗапрос.СкладТП КАК СкладТП
		|ПОМЕСТИТЬ ВТ_НоменклатураСоСкладами
		|ИЗ
		|	(ВЫБРАТЬ
		|		ВТ_Номенклатура.Товар КАК Товар,
		|		ВТ_Номенклатура.РазмерWB КАК РазмерWB,
		|		ВТ_Номенклатура.Номенклатура КАК Номенклатура,
		|		ВТ_Номенклатура.Характеристика КАК Характеристика,
		|		ВТ_Номенклатура.Набор КАК Набор,
		|		ВТ_Номенклатура.НоменклатураОстатков КАК НоменклатураОстатков,
		|		ВТ_Номенклатура.ХарактеристикаОстатков КАК ХарактеристикаОстатков,
		|		ВТ_Номенклатура.КоэффициентЧислитель КАК КоэффициентЧислитель,
		|		ВТ_Номенклатура.КоэффициентЗнаменатель КАК КоэффициентЗнаменатель,
		|		ВТ_Склады.Склад КАК Склад,
		|		ВТ_Склады.СкладТП КАК СкладТП
		|	ИЗ
		|		ВТ_Номенклатура КАК ВТ_Номенклатура
		|			ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Склады КАК ВТ_Склады
		|			ПО ВТ_Номенклатура.Товар.ЛичныйКабинет = ВТ_Склады.ЛичныйКабинет) КАК ВложенныйЗапрос
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ограничения КАК ВТ_ограничения
		|		ПО ВложенныйЗапрос.Товар = ВТ_ограничения.Товар
		|			И ВложенныйЗапрос.РазмерWB = ВТ_ограничения.РазмерWB
		|			И ВложенныйЗапрос.СкладТП = ВТ_ограничения.СкладПоставщика
		|ГДЕ
		|	ЕСТЬNULL(ВТ_ограничения.СкладПоставщика, 0) = 0
		|
		|СГРУППИРОВАТЬ ПО
		|	ВложенныйЗапрос.РазмерWB,
		|	ВложенныйЗапрос.Товар,
		|	ВложенныйЗапрос.СкладТП,
		|	ВложенныйЗапрос.Склад,
		|	ВложенныйЗапрос.КоэффициентЧислитель,
		|	ВложенныйЗапрос.ХарактеристикаОстатков,
		|	ВложенныйЗапрос.НоменклатураОстатков,
		|	ВложенныйЗапрос.Набор,
		|	ВложенныйЗапрос.Характеристика,
		|	ВложенныйЗапрос.Номенклатура");
	
	пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	ВложенныйЗапрос.Товар КАК Товар,
		|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|	ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|	ВложенныйЗапрос.Характеристика КАК Характеристика,
		|	ВложенныйЗапрос.Набор КАК Набор,
		|	ВложенныйЗапрос.НоменклатураОстатков КАК НоменклатураОстатков,
		|	ВложенныйЗапрос.ХарактеристикаОстатков КАК ХарактеристикаОстатков,
		|	ВложенныйЗапрос.СкладТП КАК СкладТП,
		|	ВложенныйЗапрос.Количество КАК Количество
		|ПОМЕСТИТЬ ВТ_ИтогиПоНоменклатуреОстатков
		|ИЗ
		|	(ВЫБРАТЬ
		|		ВТ_НоменклатураСоСкладами.Товар КАК Товар,
		|		ВТ_НоменклатураСоСкладами.РазмерWB КАК РазмерWB,
		|		ВТ_НоменклатураСоСкладами.Номенклатура КАК Номенклатура,
		|		ВТ_НоменклатураСоСкладами.Характеристика КАК Характеристика,
		|		ВТ_НоменклатураСоСкладами.Набор КАК Набор,
		|		ВТ_НоменклатураСоСкладами.НоменклатураОстатков КАК НоменклатураОстатков,
		|		ВТ_НоменклатураСоСкладами.ХарактеристикаОстатков КАК ХарактеристикаОстатков,
		|		ВТ_НоменклатураСоСкладами.СкладТП КАК СкладТП,
		|		СУММА(ВЫБОР
		|				КОГДА ВТ_ОстаткиПредварительная.Остаток ЕСТЬ NULL
		|						ИЛИ ВТ_ОстаткиПредварительная.Остаток < 0
		|							И ВТ_НоменклатураСоСкладами.Набор <> ЛОЖЬ
		|					ТОГДА 0
		|				ИНАЧЕ ВТ_ОстаткиПредварительная.Остаток
		|			КОНЕЦ) * ВТ_НоменклатураСоСкладами.КоэффициентЧислитель / ВТ_НоменклатураСоСкладами.КоэффициентЗнаменатель КАК Количество
		|	ИЗ
		|		ВТ_НоменклатураСоСкладами КАК ВТ_НоменклатураСоСкладами
		|			ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиПредварительная КАК ВТ_ОстаткиПредварительная
		|			ПО ВТ_НоменклатураСоСкладами.НоменклатураОстатков = ВТ_ОстаткиПредварительная.Номенклатура
		|				И ВТ_НоменклатураСоСкладами.ХарактеристикаОстатков = ВТ_ОстаткиПредварительная.Характеристика
		|				И ВТ_НоменклатураСоСкладами.Склад = ВТ_ОстаткиПредварительная.Склад
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ВТ_НоменклатураСоСкладами.Товар,
		|		ВТ_НоменклатураСоСкладами.РазмерWB,
		|		ВТ_НоменклатураСоСкладами.Номенклатура,
		|		ВТ_НоменклатураСоСкладами.Характеристика,
		|		ВТ_НоменклатураСоСкладами.Набор,
		|		ВТ_НоменклатураСоСкладами.НоменклатураОстатков,
		|		ВТ_НоменклатураСоСкладами.ХарактеристикаОстатков,
		|		ВТ_НоменклатураСоСкладами.КоэффициентЧислитель,
		|		ВТ_НоменклатураСоСкладами.КоэффициентЗнаменатель,
		|		ВТ_НоменклатураСоСкладами.СкладТП) КАК ВложенныйЗапрос");
	
	пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	ВложенныйЗапрос.Товар КАК Товар,
		|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|	ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|	ВложенныйЗапрос.Характеристика КАК Характеристика,
		|	ВложенныйЗапрос.Набор КАК Набор,
		|	ВложенныйЗапрос.СкладТП КАК СкладТП,
		|	ВложенныйЗапрос.Количество КАК Количество
		|ПОМЕСТИТЬ ВТ_ОстаткиПоСкладамТП
		|ИЗ
		|	(ВЫБРАТЬ
		|		ВТ_ИтогиПоНоменклатуреОстатков.Товар КАК Товар,
		|		ВТ_ИтогиПоНоменклатуреОстатков.РазмерWB КАК РазмерWB,
		|		ВТ_ИтогиПоНоменклатуреОстатков.Номенклатура КАК Номенклатура,
		|		ВТ_ИтогиПоНоменклатуреОстатков.Характеристика КАК Характеристика,
		|		ВТ_ИтогиПоНоменклатуреОстатков.Набор КАК Набор,
		|		ВТ_ИтогиПоНоменклатуреОстатков.СкладТП КАК СкладТП,
		|		МИНИМУМ(ВТ_ИтогиПоНоменклатуреОстатков.Количество) КАК Количество
		|	ИЗ
		|		ВТ_ИтогиПоНоменклатуреОстатков КАК ВТ_ИтогиПоНоменклатуреОстатков
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ВТ_ИтогиПоНоменклатуреОстатков.Товар,
		|		ВТ_ИтогиПоНоменклатуреОстатков.РазмерWB,
		|		ВТ_ИтогиПоНоменклатуреОстатков.Номенклатура,
		|		ВТ_ИтогиПоНоменклатуреОстатков.Характеристика,
		|		ВТ_ИтогиПоНоменклатуреОстатков.Набор,
		|		ВТ_ИтогиПоНоменклатуреОстатков.СкладТП) КАК ВложенныйЗапрос");
	
	пТекстЗапроса.Добавить(
		"ВЫБРАТЬ
		|	ВложенныйЗапрос.Товар КАК Товар,
		|	ВложенныйЗапрос.РазмерWB КАК РазмерWB,
		|	ВложенныйЗапрос.Номенклатура КАК Номенклатура,
		|	ВложенныйЗапрос.Характеристика КАК Характеристика,
		|	ВложенныйЗапрос.СкладТП КАК СкладТП,
		|	ВложенныйЗапрос.Склад КАК Склад,
		|	ВложенныйЗапрос.Количество КАК Количество
		|ПОМЕСТИТЬ ВТ_Остатки
		|ИЗ
		|	(ВЫБРАТЬ
		|		ВТ_ОстаткиПоСкладамТП.Товар КАК Товар,
		|		ВТ_ОстаткиПоСкладамТП.РазмерWB КАК РазмерWB,
		|		ВТ_ОстаткиПоСкладамТП.Номенклатура КАК Номенклатура,
		|		ВТ_ОстаткиПоСкладамТП.Характеристика КАК Характеристика,
		|		ВТ_ОстаткиПоСкладамТП.СкладТП КАК СкладТП,
		|		НЕОПРЕДЕЛЕНО КАК Склад,
		|		СУММА(ВЫБОР
		|				КОГДА ВТ_ОстаткиПоСкладамТП.Количество = 0
		|					ТОГДА 0
		|				КОГДА ВТ_ОстаткиПоСкладамТП.Количество > 0
		|					ТОГДА ВЫРАЗИТЬ(ВТ_ОстаткиПоСкладамТП.Количество - 0.5 КАК ЧИСЛО(15, 0))
		|				ИНАЧЕ ВЫРАЗИТЬ(ВТ_ОстаткиПоСкладамТП.Количество + 0.5 КАК ЧИСЛО(15, 0))
		|			КОНЕЦ) КАК Количество
		|	ИЗ
		|		ВТ_ОстаткиПоСкладамТП КАК ВТ_ОстаткиПоСкладамТП
		|	
		|	СГРУППИРОВАТЬ ПО
		|		ВТ_ОстаткиПоСкладамТП.Товар,
		|		ВТ_ОстаткиПоСкладамТП.РазмерWB,
		|		ВТ_ОстаткиПоСкладамТП.Номенклатура,
		|		ВТ_ОстаткиПоСкладамТП.Характеристика,
		|		ВТ_ОстаткиПоСкладамТП.СкладТП) КАК ВложенныйЗапрос");
	// -- Бойков BSLR-2192
	
	пТекстЗапроса.Добавить("УНИЧТОЖИТЬ ВТ_ОстаткиПредварительная");
	
	// ++ БИТ Сергеев BSLR-1005
	Если УчитыватьМинимальныеОстатки Тогда
		пТекстЗапроса.Добавить("ВЫБРАТЬ * Поместить ВТ_ОстаткиПредварительная ИЗ ВТ_Остатки КАК Т");
		пТекстЗапроса.Добавить("УНИЧТОЖИТЬ ВТ_Остатки");
		ТекстСклада = ?(ЭтоУНФ, "Значение(Справочник.СтруктурныеЕдиницы.пустаяссылка)", "Значение(Справочник.Склады.пустаяссылка)");
		ТекстМинОстатка = "ВЫБРАТЬ
		|	Т.Товар КАК Товар,
		|	Т.РазмерWB КАК РазмерWB,
		|	Т.Номенклатура КАК Номенклатура,
		|	Т.Характеристика КАК Характеристика,
		|	Т.Количество - ЕСТЬNULL(МинимальныйОстатокТовара.МинимальныйОстаток, 0) КАК Количество,
		|	%1  КАК Склад 
		|ПОМЕСТИТЬ ВТ_Остатки
		|ИЗ
		|	ВТ_ОстаткиПредварительная КАК Т
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_МинимальныйОстатокТовара.СрезПоследних(
		|				,
		|				Товар В
		|					(ВЫБРАТЬ РАЗЛИЧНЫЕ
		|						Т.Товар
		|					ИЗ
		|						ВТ_Товары КАК Т)) КАК МинимальныйОстатокТовара
		|		ПО Т.Товар = МинимальныйОстатокТовара.Товар";
		ТекстМинОстатка = СтрШаблон(ТекстМинОстатка, ТекстСклада);
		пТекстЗапроса.Добавить(ТекстМинОстатка);
	КонецЕсли;
	// -- БИТ Сергеев BSLR-1005
	
	пТекстЗапроса = СтрСоединить(пТекстЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
	
	Возврат пТекстЗапроса;
	
КонецФункции

Функция ОстаткиFBS_ПолучитьТекстЗапроса_ВТ_Резерв(НовыйТекстЗапроса = Ложь) Экспорт
	
	// ++ Бойков BSLR-2507
	Если НовыйТекстЗапроса Тогда
		
		ТекстЗапроса = 
			"ВЫБРАТЬ
			|	Продажи.Товар КАК Товар,
			|	Продажи.РазмерWB КАК РазмерWB,
			|	Продажи.СкладПоставщика КАК СкладТП,
			|	СУММА(Продажи.КоличествоОборот) КАК Количество
			|ПОМЕСТИТЬ ВТ_ПродажиВРезерве
			|ИЗ
			|	РегистрНакопления.топ_Продажи.Обороты(
			|			,
			|			,
			|			Регистратор,
			|			(Товар, РазмерWB) В
			|					(ВЫБРАТЬ
			|						Т.Товар КАК Товар,
			|						Т.РазмерWB КАК РазмерWB
			|					ИЗ
			|						ВТ_Номенклатура КАК Т)
			|				И СкладПоставщика В
			|					(ВЫБРАТЬ
			|						Т.СкладТП КАК СкладТП
			|					ИЗ
			|						ВТ_Склады КАК Т)
			|				И СхемаРаботы = ЗНАЧЕНИЕ(Перечисление.топ_СхемыРаботы.FBS)) КАК Продажи
			|		
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.топ_СтатусыЗаказовТорговойПлощадки.СрезПоследних КАК СтатусыЗаказов
			|		ПО Продажи.Регистратор = СтатусыЗаказов.ЗаказТорговойПлощадки
			|			И (СтатусыЗаказов.Статус.НаименованиеДляПоиска = ""ЗаказВОбработке""
			|					И СтатусыЗаказов.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет)
			|				ИЛИ СтатусыЗаказов.Статус.НаименованиеДляПоиска = ""Awaiting_packaging""
			|					И СтатусыЗаказов.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.OZON)
			|				ИЛИ СтатусыЗаказов.Статус.НаименованиеДляПоиска = ""НовыйЗаказ""
			|					И СтатусыЗаказов.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.Wildberries))
			|		
			|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеЗаказов КАК СоответствиеЗаказов
			|		ПО Продажи.Регистратор = СоответствиеЗаказов.ЗаказТорговойПлощадки
			|		
			//|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Константа.топ_ИспользоватьВиртуальныйРезерв КАК ИспользоватьВиртуальныйРезерв
			//|		ПО ИСТИНА
			|ГДЕ
			|	НЕ ЕСТЬNULL(СоответствиеЗаказов.ЗаказКлиента.Проведен, ЛОЖЬ)
			|	И &ИспользоватьВиртуальныйРезерв
			|
			|СГРУППИРОВАТЬ ПО
			|	Продажи.Товар,
			|	Продажи.РазмерWB,
			|	Продажи.СкладПоставщика
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////
			// ++ Бойков BSLR-2603
			|ВЫБРАТЬ
			|	СоответствиеТоваровИНоменклатурыКомплектующих.Товар КАК Товар,
			|	СоответствиеТоваровИНоменклатурыКомплектующих.РазмерWB КАК РазмерWB,
			|	СоответствиеТоваровИНоменклатурыКомплектующих.Номенклатура КАК Номенклатура,
			|	СоответствиеТоваровИНоменклатурыКомплектующих.Характеристика КАК Характеристика,
			|	ПродажиВРезерве.СкладТП КАК СкладТП,
			|	СУММА(ПродажиВРезерве.Количество * НоменклатураКомплектующих.КоэффициентЗнаменатель * СоответствиеТоваровИНоменклатурыКомплектующих.КоэффициентЧислитель / (НоменклатураКомплектующих.КоэффициентЧислитель * СоответствиеТоваровИНоменклатурыКомплектующих.КоэффициентЗнаменатель)) КАК Количество
			|ПОМЕСТИТЬ ВТ_КомплектующиеВРезерве
			|ИЗ
			|	ВТ_ПродажиВРезерве КАК ПродажиВРезерве
			|
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК НоменклатураКомплектующих
			|		ПО ПродажиВРезерве.Товар = НоменклатураКомплектующих.Товар
			|			И ПродажиВРезерве.РазмерWB = НоменклатураКомплектующих.РазмерWB
			|			И НЕ НоменклатураКомплектующих.Набор = ЛОЖЬ
			|
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК СоответствиеТоваровИНоменклатурыКомплектующих
			|		ПО НоменклатураКомплектующих.НоменклатураОстатков = СоответствиеТоваровИНоменклатурыКомплектующих.Номенклатура
			|			И НоменклатураКомплектующих.ХарактеристикаОстатков = СоответствиеТоваровИНоменклатурыКомплектующих.Характеристика
			|			И СоответствиеТоваровИНоменклатурыКомплектующих.Набор = ЛОЖЬ
			|
			|СГРУППИРОВАТЬ ПО
			|	СоответствиеТоваровИНоменклатурыКомплектующих.Товар,
			|	СоответствиеТоваровИНоменклатурыКомплектующих.РазмерWB,
			|	СоответствиеТоваровИНоменклатурыКомплектующих.Номенклатура,
			|	СоответствиеТоваровИНоменклатурыКомплектующих.Характеристика,
			|	ПродажиВРезерве.СкладТП
			|;
			|
			|////////////////////////////////////////////////////////////////////////////////
			// -- Бойков BSLR-2603
			|ВЫБРАТЬ
			|	ПродажиВРезерве.Товар КАК Товар,
			|	ПродажиВРезерве.РазмерWB КАК РазмерWB,
			|	ВТ_Номенклатура.Номенклатура КАК Номенклатура,
			|	ВТ_Номенклатура.Характеристика КАК Характеристика,
			|	ПродажиВРезерве.СкладТП КАК СкладТП,
			|	НЕОПРЕДЕЛЕНО КАК Склад,
			|	ВЫБОР
			|		КОГДА ПродажиВРезерве.Количество > 0
			|			ТОГДА ВЫРАЗИТЬ(ПродажиВРезерве.Количество - 0.5 КАК ЧИСЛО(15, 0))
			|		ИНАЧЕ 0
			|	КОНЕЦ КАК Количество
			|ПОМЕСТИТЬ ВТ_Резерв
			|ИЗ
			|	ВТ_ПродажиВРезерве КАК ПродажиВРезерве
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Номенклатура КАК ВТ_Номенклатура
			|		ПО ПродажиВРезерве.Товар = ВТ_Номенклатура.Товар
			|			И ПродажиВРезерве.РазмерWB = ВТ_Номенклатура.РазмерWB
			|			И ВТ_Номенклатура.Набор = ЛОЖЬ
			|
			|ОБЪЕДИНИТЬ ВСЕ
			|
			|ВЫБРАТЬ
			|	КомплектующиеВРезерве.Товар,
			|	КомплектующиеВРезерве.РазмерWB,
			|	КомплектующиеВРезерве.Номенклатура,
			|	КомплектующиеВРезерве.Характеристика,
			|	КомплектующиеВРезерве.СкладТП,
			|	НЕОПРЕДЕЛЕНО,
			|	ВЫБОР
			|		КОГДА КомплектующиеВРезерве.Количество > 0
			|			ТОГДА ВЫРАЗИТЬ(КомплектующиеВРезерве.Количество - 0.5 КАК ЧИСЛО(15, 0))
			|		ИНАЧЕ 0
			|	КОНЕЦ
			|ИЗ
			|	ВТ_КомплектующиеВРезерве КАК КомплектующиеВРезерве";
		
		// ++ Бойков BSLR-2906
		УстановитьПривилегированныйРежим(Истина);
		ИспользоватьВиртуальныйРезерв = Константы.топ_ИспользоватьВиртуальныйРезерв.Получить();
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИспользоватьВиртуальныйРезерв", ?(ИспользоватьВиртуальныйРезерв, "ИСТИНА", "ЛОЖЬ"));
		УстановитьПривилегированныйРежим(Ложь);
		// -- Бойков BSLR-2906
		
		Возврат ТекстЗапроса;
		
	КонецЕсли;
	// -- Бойков BSLR-2507
	
	пТекст = Новый Массив;
	пТекст.Добавить(
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	топ_СоответствиеТоваров.Товар КАК Товар,
		|	ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.РазмерWB.размер = ""0""
		|			ТОГДА ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)
		|		ИНАЧЕ топ_СоответствиеТоваров.РазмерWB
		|	КОНЕЦ КАК РазмерWB,
		|	топ_СоответствиеТоваров.Номенклатура КАК Номенклатура,
		|	топ_СоответствиеТоваров.Характеристика КАК Характеристика
		|ПОМЕСТИТЬ ВТ_ТоварыРаширенныйСписок
		|ИЗ
		|	ВТ_Номенклатура КАК ВТ_Номенклатура
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.топ_ТоварыТорговыхПлощадок КАК спрТовары
		|			ПО топ_СоответствиеТоваров.Товар = спрТовары.Ссылка
		|		ПО ВТ_Номенклатура.Номенклатура = топ_СоответствиеТоваров.Номенклатура
		|			И ВТ_Номенклатура.Характеристика = топ_СоответствиеТоваров.Характеристика
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	МАКСИМУМ(ВТ_Склады.Склад) КАК Склад,
		|	СписокСкладовFBS.СкладТП КАК СкладТП
		|ПОМЕСТИТЬ ВТ_СкладыРаширенныйСписок
		|ИЗ
		|	ВТ_Склады КАК ВТ_Склады
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.топ_ЛичныеКабинеты.СписокСкладовFBS КАК СписокСкладовFBS
		|		ПО ВТ_Склады.Склад = СписокСкладовFBS.Склад
		|
		|СГРУППИРОВАТЬ ПО
		|	СписокСкладовFBS.СкладТП
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		// ++ БИТ Сергеев BSLR-1128
		//|	Продажи.Товар КАК Товар,
		//|	Продажи.КоличествоОборот КАК Количество,
		//|	ВТ_ТоварыРаширенныйСписок.Номенклатура КАК Номенклатура,
		//|	ВТ_ТоварыРаширенныйСписок.Характеристика КАК Характеристика,
		// ++ БИТ Сергеев BSLR-1128
		|	Продажи.Регистратор КАК ЗаказТП,
		|	ВТ_СкладыРаширенныйСписок.Склад КАК Склад
		|ПОМЕСТИТЬ ВТ_ЗаказыВРезерве
		|ИЗ
		|	РегистрНакопления.топ_Продажи.Обороты(
		|			,
		|			,
		|			Регистратор,
		|			Товар В
		|					(ВЫБРАТЬ
		|						Т.Товар КАК Товар
		|					ИЗ
		|						ВТ_ТоварыРаширенныйСписок КАК Т)
		|				И СкладПоставщика В
		|					(ВЫБРАТЬ
		|						Т.СкладТП КАК СкладТП
		|					ИЗ
		|						ВТ_СкладыРаширенныйСписок КАК Т)) КАК Продажи
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.топ_СтатусыЗаказовТорговойПлощадки.СрезПоследних КАК СтатусыЗаказов
		|		ПО Продажи.Регистратор = СтатусыЗаказов.ЗаказТорговойПлощадки
		|			И (СтатусыЗаказов.Статус.НаименованиеДляПоиска = ""PROCESSING""
		|					И СтатусыЗаказов.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет)
		|				ИЛИ СтатусыЗаказов.Статус.НаименованиеДляПоиска = ""Awaiting_packaging""
		|					И СтатусыЗаказов.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.OZON)
		|				ИЛИ СтатусыЗаказов.Статус.НаименованиеДляПоиска = ""НовыйЗаказ""
		|					И СтатусыЗаказов.ЗаказТорговойПлощадки.ЛичныйКабинет.ТорговаяПлощадка = ЗНАЧЕНИЕ(Перечисление.топ_ТорговыеПлощадки.Wildberries))
		// ++ БИТ Сергеев BSLR-1128
		//|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТоварыРаширенныйСписок КАК ВТ_ТоварыРаширенныйСписок
		//|		ПО Продажи.Товар = ВТ_ТоварыРаширенныйСписок.Товар
		// -- БИТ Сергеев BSLR-1128
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.топ_ЗаказТорговойПлощадки КАК топ_ЗаказТорговойПлощадки
		|		ПО Продажи.Регистратор = топ_ЗаказТорговойПлощадки.Ссылка
		|			И (топ_ЗаказТорговойПлощадки.СхемаРаботы = ЗНАЧЕНИЕ(Перечисление.топ_СхемыРаботы.FBS))
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_СкладыРаширенныйСписок КАК ВТ_СкладыРаширенныйСписок
		|		ПО Продажи.СкладПоставщика = ВТ_СкладыРаширенныйСписок.СкладТП");
	
	//Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей") 
	// ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация") 
	// ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием") Тогда
	//	пТекст.Добавить(
	//		"");
	//Иначе // УНФ
		пТекст.Добавить(
			"ВЫБРАТЬ
			// ++ БИТ Сергеев BSLR-1128
			//|	ВТ_ЗаказыВРезерве.Номенклатура КАК Номенклатура,
			//|	ВТ_ЗаказыВРезерве.Характеристика КАК Характеристика,
			//|	ВТ_ЗаказыВРезерве.Склад КАК Склад,
			// -- БИТ Сергеев BSLR-1128
			|	ВТ_ЗаказыВРезерве.ЗаказТП КАК ЗаказТП
			|ПОМЕСТИТЬ ВТ_УченыеРезервы
			|ИЗ
			|	ВТ_ЗаказыВРезерве КАК ВТ_ЗаказыВРезерве
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеЗаказов КАК СоответствиеЗаказов
			|		ПО ВТ_ЗаказыВРезерве.ЗаказТП = СоответствиеЗаказов.ЗаказТорговойПлощадки
			|ГДЕ
			|	ЕСТЬNULL(СоответствиеЗаказов.ЗаказКлиента.Проведен, ЛОЖЬ)");
	//КонецЕсли;
	
	пТекст.Добавить(
		"ВЫБРАТЬ
		// ++ БИТ Сергеев BSLR-1128
		//|	ВТ_ЗаказыВРезерве.Номенклатура КАК Номенклатура,
		//|	ВТ_ЗаказыВРезерве.Характеристика КАК Характеристика,
		//|	ВТ_ЗаказыВРезерве.Количество КАК Количество,
		|	ВТ_ТоварыРаширенныйСписок.Номенклатура КАК Номенклатура,
		|	ВТ_ТоварыРаширенныйСписок.Характеристика КАК Характеристика,
		|	ТчТовары.Количество КАК Количество,
		// -- БИТ Сергеев BSLR-1128 		
		//▼ BSLR-2489, Чупраков А.Н., 29.01.24, для наборов Неопределено
		|	ВЫБОР
		|	КОГДА ВТ_ТоварыРаширенныйСписок.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
		|		ТОГДА НЕОПРЕДЕЛЕНО
		|	ИНАЧЕ ВТ_ЗаказыВРезерве.Склад
		|КОНЕЦ КАК Склад  
		//▲ BSLR-2489, Чупраков А.Н.
		|ПОМЕСТИТЬ ВТ_Резерв
		|ИЗ
		|	ВТ_ЗаказыВРезерве КАК ВТ_ЗаказыВРезерве
		// ++ БИТ Сергеев BSLR-1128
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.топ_ЗаказТорговойПлощадки.Товары КАК ТчТовары
		|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТоварыРаширенныйСписок КАК ВТ_ТоварыРаширенныйСписок
		|			ПО ТчТовары.Товар = ВТ_ТоварыРаширенныйСписок.Товар
		|				И ТчТовары.РазмерWB = ВТ_ТоварыРаширенныйСписок.РазмерWB
		|		ПО ВТ_ЗаказыВРезерве.ЗаказТП = ТчТовары.Ссылка
		// -- БИТ Сергеев BSLR-1128
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УченыеРезервы КАК ВТ_УченыеРезервы
		|		ПО ВТ_ЗаказыВРезерве.ЗаказТП = ВТ_УченыеРезервы.ЗаказТП
		// ++ БИТ Сергеев BSLR-1128
		//|			И ВТ_ЗаказыВРезерве.Номенклатура = ВТ_УченыеРезервы.Номенклатура
		//|			И ВТ_ЗаказыВРезерве.Характеристика = ВТ_УченыеРезервы.Характеристика
		//|			И ВТ_ЗаказыВРезерве.Склад = ВТ_УченыеРезервы.Склад
		// -- БИТ Сергеев BSLR-1128
		|ГДЕ
		|	ВТ_УченыеРезервы.ЗаказТП ЕСТЬ NULL");
	
	пТекст.Добавить("УНИЧТОЖИТЬ ВТ_УченыеРезервы");
	пТекст.Добавить("УНИЧТОЖИТЬ ВТ_ЗаказыВРезерве");
	пТекст.Добавить("УНИЧТОЖИТЬ ВТ_ТоварыРаширенныйСписок");
	
	пТекст = СтрСоединить(пТекст, ОбщегоНазначения.РазделительПакетаЗапросов());
	
	Возврат пТекст;
	
КонецФункции
// -- БИТ Сергеев BSLR-807

// ++ Куряев 11.01.2024 BSLR-2485
Процедура ОбработатьОбнулениеОстаткаFBSПоFBO(ТекстЗапросаМассив) Экспорт
	
	МассивКоличество = ТекстЗапросаМассив.Количество();
	Если МассивКоличество > 0 Тогда
		
		ТекстЗапросаМассив[МассивКоличество - 1] = СтрЗаменить(ТекстЗапросаМассив[МассивКоличество - 1], "ПОМЕСТИТЬ ВТ_Результат", "ПОМЕСТИТЬ ВТ_РезультатПредварительный");
		ТекстЗапросаМассив.Добавить("
		|ВЫБРАТЬ
		|	ОстаткиНаСкладахТП.ЛичныйКабинет КАК ЛичныйКабинет,
		|	ОстаткиНаСкладахТП.Товар КАК Товар,
		|	топ_Штрихкоды.Штрихкод КАК Штрихкод,
		|	СУММА(ОстаткиНаСкладахТП.Количество) КАК Количество,
		|	ОстаткиНаСкладахТП.ID_Товара КАК ID_Товара
		|ПОМЕСТИТЬ ВТ_ОстаткиФБО
		|ИЗ
		|РегистрСведений.топ_ОстаткиНаСкладахТорговойПлощадки.СрезПоследних(, ЛичныйКабинет = &П) КАК ОстаткиНаСкладахТП
		|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_Штрихкоды КАК топ_Штрихкоды
		|	ПО ОстаткиНаСкладахТП.Товар = топ_Штрихкоды.Товар
		|		И ОстаткиНаСкладахТП.РазмерWB = топ_Штрихкоды.РазмерWB
		|
		|СГРУППИРОВАТЬ ПО
		|	ОстаткиНаСкладахТП.ЛичныйКабинет,
		|	ОстаткиНаСкладахТП.Товар,
		|	топ_Штрихкоды.Штрихкод,
		|	ОстаткиНаСкладахТП.ID_Товара
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Товар
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_РезультатПредварительный.ЛичныйКабинет КАК ЛичныйКабинет,
		|	ВТ_РезультатПредварительный.Товар КАК Товар,
		|	ВТ_РезультатПредварительный.РазмерWB КАК РазмерWB,
		|	ВТ_РезультатПредварительный.Склад КАК Склад,
		|	ВЫБОР
		|		КОГДА ЕСТЬNULL(ВТ_ОстаткиФБО.Количество, 0) > 0
		|				И ЕСТЬNULL(МинимальныеОстаткиFBO.МинимальныйОстаток, 0) < ЕСТЬNULL(ВТ_ОстаткиФБО.Количество, 0)
		|			ТОГДА 0
		|		ИНАЧЕ ВТ_РезультатПредварительный.Количество
		|	КОНЕЦ КАК Количество,
		|	ВТ_РезультатПредварительный.ТоварID КАК ТоварID,
		|	ВТ_РезультатПредварительный.КодПоставщика КАК КодПоставщика,
		|	ВТ_РезультатПредварительный.Штрихкод КАК Штрихкод,
		|	ВТ_РезультатПредварительный.ОбнулятьОстатки КАК ОбнулятьОстатки,
		|	ВТ_РезультатПредварительный.Номенклатура КАК Номенклатура,
		|	ВТ_РезультатПредварительный.Характеристика КАК Характеристика
		|ПОМЕСТИТЬ ВТ_Результат
		|ИЗ
		|	ВТ_РезультатПредварительный КАК ВТ_РезультатПредварительный
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиФБО КАК ВТ_ОстаткиФБО
		|		ПО ВТ_РезультатПредварительный.Товар = ВТ_ОстаткиФБО.Товар 
					// письмерова 31.03.2025 BSLR-4191
		|			И  ВТ_РезультатПредварительный.Штрихкод = ВТ_ОстаткиФБО.Штрихкод		
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_МинимальныеОстаткиFBO КАК МинимальныеОстаткиFBO
		|		ПО ВТ_РезультатПредварительный.Товар = МинимальныеОстаткиFBO.Товар 
					// письмерова 31.03.2025 BSLR-4191
		|			И  ВТ_РезультатПредварительный.РазмерWB = МинимальныеОстаткиFBO.РазмерWB		
		|{ГДЕ
		|	ВТ_РезультатПредварительный.ЛичныйКабинет КАК ЛичныйКабинет,
		|	ВТ_РезультатПредварительный.Товар,
		|	ВТ_РезультатПредварительный.РазмерWB,
		|	ВТ_РезультатПредварительный.Склад,
		|	ВЫБОР
		|		КОГДА ЕСТЬNULL(ВТ_ОстаткиФБО.Количество, 0) > 0
		|				И ЕСТЬNULL(МинимальныеОстаткиFBO.МинимальныйОстаток, 0) < ЕСТЬNULL(ВТ_ОстаткиФБО.Количество, 0)
		|			ТОГДА 0
		|		ИНАЧЕ ВТ_РезультатПредварительный.Количество
		|	КОНЕЦ,
		|	ВТ_РезультатПредварительный.ТоварID,
		|	ВТ_РезультатПредварительный.КодПоставщика,
		|	ВТ_РезультатПредварительный.Штрихкод}");
		
	КонецЕсли;
	
КонецПроцедуры
// Куряев 11.01.2024 BSLR-2485

#КонецОбласти
   
#Область КИЗы

Функция ПолучитьТаблицуКИЗов(ЛичныйКабинет, НаДату) Экспорт
	
	НастройкиПодключения = ПолучитьНастройкиЛичногоКабинета(ЛичныйКабинет);
	
	Если НастройкиПодключения.Маркетплейс <> Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		ОбщегоНазначения.СообщитьПользователю("Для данного маркетплейса не предусмотрена загрузка КИЗов по API");
		Возврат Неопределено;
	КонецЕсли;
	
	Возврат ПолучитьТаблицуКИЗовМП(НастройкиПодключения, НаДату);
	
КонецФункции

Функция ПолучитьТаблицуКИЗовМП(НастройкиПодключения, НаДату)
	
	Если НастройкиПодключения.Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		
		Возврат ПолучитьТаблицуКИЗов_WB(НастройкиПодключения, НаДату);
	
	КонецЕсли;
	
КонецФункции

Функция ПолучитьТаблицуКИЗов_WB(НастройкиСоединения,  Дата) Экспорт
	
	МетодыAPI        = ПолучитьМетодыAPI(НастройкиСоединения.Маркетплейс);
	ПараметрыЗапроса = ПодготовитьПараметрыЗапросаДляКИЗов(НастройкиСоединения.ЛичныйКабинет, Дата);
	
	Если ПараметрыЗапроса = Неопределено Тогда
		Возврат ПараметрыЗапроса;
	КонецЕсли;
	
	Ответ = топ_HTTPКоннектор.GetJson(МетодыAPI.ЗагрузитьКИЗы, ПараметрыЗапроса);
	Возврат Ответ
	
КонецФункции	

Функция ПодготовитьПараметрыЗапросаДляКИЗов(ЛичныйКабинет, Дата)
	
	ПараметрыЗапроса = Новый Структура("key, datefrom", "", Формат(Дата, "ДФ=yyyy-MM-dd"));
	
	Если ЗначениеЗаполнено(ЛичныйКабинет.API_Key_СтатистикаNEW) Тогда
		ПараметрыЗапроса.key = ЛичныйКабинет.API_Key_СтатистикаNEW;
		Возврат ПараметрыЗапроса;
	Иначе
		ОбщегоНазначения.СообщитьПользователю("Не найден ключ статистики APIx64 для Wildberries в личном кабинете");
		Возврат Неопределено;
	КонецЕсли;
	
КонецФункции

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

#Область Методы
Функция ПолучитьПустуюСтруктуруМетодов()
	
	Методы = Новый Структура();
	Методы.Вставить("ЗагрузитьОбновитьТовары");
	Методы.Вставить("ОбновитьЦеныТоваровНаСайте"); 
	Методы.Вставить("ЗагрузитьЗаказыDBS"); // BSLR-4446, Чупраков А.Н., 24.11.25
	Методы.Вставить("ПолучитьКатегорииТоваров");
	Методы.Вставить("ПолучитьРеквизитыКатегории");
	Методы.Вставить("ПолучитьСписокТоваров");
	Методы.Вставить("ПолучитьСписокТоваров_v2");
	Методы.Вставить("ОбновитьОстатокТовара");
	Методы.Вставить("ПолучитьРеквизитыАтрибутов");
	Методы.Вставить("ДобавитьТовары");
	Методы.Вставить("ПолучитьСписокЗаказов");
	Методы.Вставить("ПолучитьЦеныТоваров");
	Методы.Вставить("ПолучитьИнформациюОТоварах"); 
	Методы.Вставить("ПолучитьИнформациюОТоварах_v2"); 
	Методы.Вставить("ПолучитьДопИнформациюОТоварах"); 
	Методы.Вставить("ПолучитьДопИнформациюОТоварах_v2"); 
	Методы.Вставить("ПолучитьСписокСкладов");  
	Методы.Вставить("ЗагрузитьОбновитьЗаказы");
	Методы.Вставить("ПолучитьДочерниеКатегории");
	Методы.Вставить("ПолучитьОстатки");  
	Методы.Вставить("СобратьЗаказ"); 
	Методы.Вставить("ПолучитьМаркировку");
    Методы.Вставить("СменитьСтатус"); 
	Методы.Вставить("ОтменитьТоварыОтправления");
	Методы.Вставить("ОтменитьОтправление");
	Методы.Вставить("ПолучитьАктНакладную");
	Методы.Вставить("ПолучитьМетодыДоставки");
	Методы.Вставить("ПолучитьЭтикеткиГрузМеста");
	Методы.Вставить("СоздатьПоставку");
	Методы.Вставить("ДобавитьКПоставкеЗаказы");
	Методы.Вставить("ЗакрытьПоставку");
	Методы.Вставить("ПолучитьЭтикеткуПоставки");
	Методы.Вставить("ПередатьГрузовоеМесто"); 
	Методы.Вставить("ПолучитьМаркировкуГМ");
	Методы.Вставить("ПолучитьПФАктПриемаПередачи");
	Методы.Вставить("ПолучитьIDГрузовогоМеста");
	Методы.Вставить("ПолучитьСписокЗаказовФБО");
	Методы.Вставить("ЗагрузитьКИЗы");
	Методы.Вставить("ПередатьКиЗ");
	Методы.Вставить("ПолучитьКатегорииТоваров_NEW");
	Методы.Вставить("ПолучитьИнфоПоЦенам");
	Методы.Вставить("ПередатьСкидкиНаТовары");
	Методы.Вставить("СброситьСкидкиНаТовары");
	
	Возврат Методы;
	
КонецФункции

Функция ПолучитьМетодыAPI(Маркетплейс) Экспорт
	
	Методы = ПолучитьПустуюСтруктуруМетодов();
	
	Если Маркетплейс = Перечисления.топ_ТорговыеПлощадки.OZON Тогда
		
		Если Константы.БИТ_ИспользуетсяТестоваяСреда.Получить() Тогда
			АдресAPI = "https://cb-api.ozonru.me";
		Иначе
			АдресAPI = "https://api-seller.ozon.ru";
		КонецЕсли;
		
		Методы.ЗагрузитьОбновитьТовары       = СтрШаблон("%1/v2/product/import", АдресAPI);
		Методы.ОбновитьЦеныТоваровНаСайте    = СтрШаблон("%1/v1/product/import/prices", АдресAPI);
		Методы.ПолучитьКатегорииТоваров      = СтрШаблон("%1/v2/category/tree", АдресAPI);
		Методы.ПолучитьРеквизитыКатегории    = СтрШаблон("%1/v3/category/attribute", АдресAPI);
		Методы.ПолучитьСписокТоваров         = СтрШаблон("%1/v2/product/list", АдресAPI);
		Методы.ОбновитьОстатокТовара         = СтрШаблон("%1/v2/products/stocks", АдресAPI);
		Методы.ПолучитьРеквизитыАтрибутов    = СтрШаблон("%1/v2/category/attribute/values", АдресAPI);
		Методы.ДобавитьТовары                = СтрШаблон("%1/v2/product/import", АдресAPI);
		Методы.ПолучитьЦеныТоваров           = СтрШаблон("%1/v4/product/info/prices", АдресAPI);
		Методы.ПолучитьИнформациюОТоварах    = СтрШаблон("%1/v2/product/info", АдресAPI);
		Методы.ПолучитьИнформациюОТоварах_v2 = СтрШаблон("%1/v2/product/info/list", АдресAPI);
		Методы.ПолучитьДопИнформациюОТоварах = СтрШаблон("%1/v3/products/info/attributes", АдресAPI);
		Методы.ПолучитьДопИнформациюОТоварах_v2 = СтрШаблон("%1/v3/products/info/attributes", АдресAPI);
		Методы.ПолучитьСписокСкладов         = СтрШаблон("%1/v2/warehouse/list", АдресAPI);
		Методы.ЗагрузитьОбновитьЗаказы       = СтрШаблон("%1/v3/posting/fbs/list", АдресAPI); 
		// ++ Бойков BSLR-2453. Метод устарел, при необходимости использовать "/v2/analytics/stock_on_warehouses"
		//Методы.ПолучитьОстатки               = СтрШаблон("%1/v1/analytics/stock_on_warehouses", АдресAPI);
		// -- Бойков BSLR-2453
		//Методы.СобратьЗаказ	                 = СтрШаблон("%1/v3/posting/fbs/ship", АдресAPI);
		Методы.СобратьЗаказ	                 = СтрШаблон("%1/v4/posting/fbs/ship", АдресAPI);
		Методы.ПолучитьМаркировку            = СтрШаблон("%1/v2/posting/fbs/package-label", АдресAPI);
		Методы.ОтменитьТоварыОтправления     = СтрШаблон("%1/v2/posting/fbs/product/cancel", АдресAPI);
		Методы.ОтменитьОтправление           = СтрШаблон("%1/v2/posting/fbs/cancel", АдресAPI);
		Методы.ПолучитьАктНакладную          = СтрШаблон("%1/v2/posting/fbs/act/get-pdf", АдресAPI);
		Методы.ПолучитьМетодыДоставки        = СтрШаблон("%1/v1/delivery-method/list", АдресAPI);
		Методы.ПолучитьЭтикеткиГрузМеста     = СтрШаблон("%1/v2/posting/fbs/act/get-container-labels", АдресAPI);
		Методы.ПолучитьСписокЗаказовФБО      = СтрШаблон("%1/v2/posting/fbo/list", АдресAPI);  
		
	ИначеЕсли Маркетплейс = Перечисления.топ_ТорговыеПлощадки.Wildberries Тогда
		
		Методы.ПолучитьСписокТоваров         = "https://suppliers-api.wildberries.ru/card/list";
		Методы.ПолучитьКатегорииТоваров_NEW  = "https://suppliers-api.wildberries.ru/content/v1/object/all?top=100000";
		Методы.ПолучитьСписокТоваров_v2      = "https://suppliers-api.wildberries.ru/content/v1/cards/list";
		Методы.ЗагрузитьОбновитьЗаказы       = "https://suppliers-api.wildberries.ru/api/v2/orders"; 
		Методы.ПолучитьКатегорииТоваров      = "https://suppliers-api.wildberries.ru/api/v1/config/get/object/parent/list";
		Методы.ПолучитьДочерниеКатегории     = "https://suppliers-api.wildberries.ru/api/v1/config/object/byparent";
		Методы.ПолучитьСписокСкладов         = "https://suppliers-api.wildberries.ru/api/v2/warehouses";
		Методы.ОбновитьОстатокТовара         = "https://suppliers-api.wildberries.ru/api/v2/stocks";
		Методы.ОбновитьЦеныТоваровНаСайте    = "https://suppliers-api.wildberries.ru/public/api/v1/prices";
		Методы.ПолучитьОстатки               = "https://suppliers-stats.wildberries.ru/api/v1/supplier/stocks";
		Методы.ПолучитьМаркировку            = "https://suppliers-api.wildberries.ru/api/v2/orders/stickers/pdf";
		Методы.СменитьСтатус                 = "https://suppliers-api.wildberries.ru/api/v2/orders";  // PUT
		Методы.СоздатьПоставку               = "https://suppliers-api.wildberries.ru/api/v2/supplies"; //PoST 
		Методы.ДобавитьКПоставкеЗаказы       = "https://suppliers-api.wildberries.ru/api/v2/supplies/{id}"; // PUT
		Методы.ЗакрытьПоставку               = "https://suppliers-api.wildberries.ru/api/v2/supplies/{id}/close";//PoST 
		Методы.ПолучитьЭтикеткуПоставки      = "https://suppliers-api.wildberries.ru/api/v2/supplies/{id}/barcode";//Get 
		Методы.ПолучитьIDГрузовогоМеста      = "https://suppliers-api.wildberries.ru/api/v2/orders/stickers"; 		
		Методы.ПолучитьСписокЗаказовФБО      = "https://suppliers-stats.wildberries.ru/api/v1/supplier/orders";
		Методы.ЗагрузитьКИЗы                 = "https://suppliers-stats.wildberries.ru/api/v1/supplier/excise-goods"; //get
		Методы.ЗагрузитьЗаказыDBS            = "https://marketplace-api.wildberries.ru/api/v3/dbs/orders"; // BSLR-4446, Чупраков А.Н., get
		
		Методы.ПолучитьИнфоПоЦенам           = "https://suppliers-api.wildberries.ru/public/api/v1/info";  //Get
		Методы.ПередатьСкидкиНаТовары        = "https://suppliers-api.wildberries.ru/public/api/v1/updateDiscounts"; //PoST  
		Методы.СброситьСкидкиНаТовары        = "https://suppliers-api.wildberries.ru/public/api/v1/revokeDiscounts"; //PoST  
		
	ИначеЕсли Маркетплейс = Перечисления.топ_ТорговыеПлощадки.ЯндексМаркет Тогда
		
		Методы.ПолучитьСписокТоваров         = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/offer-mapping-entries.json";
		Методы.ЗагрузитьОбновитьЗаказы       = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders.json"; //Get - нет ID склада
		Методы.ПолучитьМаркировку            = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders/{orderId}/delivery/labels.json"; 
		Методы.ПолучитьМаркировкуГМ          = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders/{orderId}/delivery/shipments/{shipmentId}/boxes/{boxId}/label.json";
		Методы.СменитьСтатус                 = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders/status-update.json";  // PoST
		Методы.ПередатьГрузовоеМесто		 = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders/{orderId}/delivery/shipments/{shipmentId}/boxes.json"; //PUT
		Методы.ПолучитьПФАктПриемаПередачи   = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/shipments/reception-transfer-act.json";  //GET
		Методы.ПолучитьСписокСкладов         = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/business-info.json";  //GET
		Методы.ОбновитьОстатокТовара         = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/offers/stocks";
		Методы.ОбновитьЦеныТоваровНаСайте    = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/offer-prices/updates";
		Методы.ПередатьКиЗ					 = "https://api.partner.market.yandex.ru/v2/campaigns/{campaignId}/orders/{orderId}/cis.json"; //PUT
		
	КонецЕсли;
	
	Возврат Методы;
	
КонецФункции       

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

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

#Область Статистика    

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

Функция ПолучитьДанныеСтатистики() Экспорт
	
	Результат    = ПолучитьРезультатВозвратаСтатистики();
	ТекстЗапроса = ПолучитьТекстЗапросаПоДаннымСтатистики();
	Запрос       = Новый Запрос(ТекстЗапроса);
	
	ВременныеТаблицы = Запрос.ВыполнитьПакетСПромежуточнымиДанными();
	
	
КонецФункции

Функция ПолучитьТекстЗапросаПоДаннымСтатистики()

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

Функция ПолучитьРезультатВозвратаСтатистики()
	
	Возврат Новый Структура("ЗагрузкаОтчетаКомиссионера, ЗаданиеНаПоставкуFBO, ЗаказМаркетплейса, ЛичныеКабинеты, СнятиеТоваров, Товары, УстановкаМинимальногоОстатка, УстановкаЦен");
	
КонецФункции

Функция ПолучитьИмяСервераСтатистики() Экспорт
	Возврат "tor.1bit.support";
КонецФункции

Функция ПолучитьИмяБазыСтатистики()
	Возврат "Statistic";
КонецФункции

Процедура ВыгрузитьДанныеСтатистики() Экспорт
	
	// ++ Бойков BSLR-2906
	УстановитьПривилегированныйРежим(Истина);
	ИдентификаторБазы = Константы.топ_ИдентификаторСтатистики.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	// -- Бойков BSLR-2906
	
	Если ПустаяСтрока(ИдентификаторБазы) Тогда
		Возврат;
	КонецЕсли;
	
	ДанныеКабинетов = топ_ОбщийВызовСервера.ДанныеКабинетовJSON();
	МассивКонстант = топ_ОбщийВызовСервера.ПолучитьЗначенияВсехКонстант();
	ДанныеКОтправке = Новый Структура("id, client, const, data, cabinets", ИдентификаторБазы, 
	ПолучитьИнформациюОКлиенте(), МассивКонстант, , ДанныеКабинетов);
	МассивДанных = Новый Массив;
	СерверИсточник = ПолучитьИмяСервераСтатистики();   
	ИмяБазыСтатистики = ПолучитьИмяБазыСтатистики();
	
	Запрос = Новый Запрос("ВЫБРАТЬ
	|	топ_ИспользованиеОбъектовСрезПоследних.Период КАК Период,
	|	топ_ИспользованиеОбъектовСрезПоследних.КлючОбъекта КАК КлючОбъекта,
	|	топ_ИспользованиеОбъектовСрезПоследних.Количество КАК Количество,
	|	топ_ИспользованиеОбъектовСрезПоследних.КоличествоОткрытий КАК КоличествоОткрытий
	|ИЗ
	|	РегистрСведений.топ_ИспользованиеОбъектов.СрезПоследних(, ) КАК топ_ИспользованиеОбъектовСрезПоследних
	|
	|УПОРЯДОЧИТЬ ПО
	|	КлючОбъекта");
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл   
		СтруктураДанных = Новый Структура();
		СтруктураДанных.Вставить("key", Выборка.КлючОбъекта);
		СтруктураДанных.Вставить("count", Выборка.Количество);
		СтруктураДанных.Вставить("countOpen", Выборка.КоличествоОткрытий);
		СтруктураДанных.Вставить("period", Формат(Выборка.Период, "ДФ=yyyyMMdd"));
		МассивДанных.Добавить(СтруктураДанных);
	КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	топ_ИспользованиеОбъектов.Период КАК Период,
	|	топ_ИспользованиеОбъектов.КлючОбъекта КАК КлючОбъекта,
	|	топ_ИспользованиеОбъектов.Количество КАК Количество,
	|	топ_ИспользованиеОбъектов.КоличествоОткрытий КАК КоличествоОткрытий
	|ИЗ
	|	РегистрСведений.топ_ИспользованиеОбъектов КАК топ_ИспользованиеОбъектов
	|ГДЕ
	|	топ_ИспользованиеОбъектов.КоличествоОткрытий <> 0";
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		СтруктураДанных = Новый Структура();
		СтруктураДанных.Вставить("key", Выборка.КлючОбъекта);
		СтруктураДанных.Вставить("count", Выборка.Количество);
		СтруктураДанных.Вставить("countOpen", Выборка.КоличествоОткрытий);
		СтруктураДанных.Вставить("period", Формат(Выборка.Период, "ДФ=yyyyMMdd"));
		МассивДанных.Добавить(СтруктураДанных);
	КонецЦикла;
	
	ДанныеКОтправке.data = МассивДанных;
	
	ОтправкаДанныхНаСерверСтатистики(ДанныеКОтправке, СерверИсточник, ИмяБазыСтатистики);
	
КонецПроцедуры

Процедура ОтправкаДанныхНаСерверСтатистики(ДанныеКОтправке, СерверИсточник, ИмяБазыСтатистики)

	JSONСтрока = топ_HTTPКоннектор.Данные1СВJSON(ДанныеКОтправке);
	
	ПараметрыЖурналаОбмена	= топ_ВзаимодействиеСПлощадками.ВернутьПараметрыЖурналаОбмена();
	ДанныеОтправлены = ДанныеБылиОтправлены(JSONСтрока);
	
	Если ДанныеОтправлены Тогда
		топ_ВзаимодействиеСПлощадками.ЗаполнитьПараметрыЖурналаОбмена(ПараметрыЖурналаОбмена, Справочники.топ_ЛичныеКабинеты.ПустаяСсылка(),Перечисления.топ_ВидыОбменов.ВыгрузкаСтатистики,
		"Выгрузка статистики не будет произведена",
		"Выгрузка статистики не будет произведена т.к. эти данные уже выгружались", Ложь);
		топ_ВзаимодействиеСПлощадками.ДобавитьЗаписьВЖурналОбменов(ПараметрыЖурналаОбмена);
		Возврат;
	КонецЕсли;
	
	Попытка
		HTTPСоединение = Новый HTTPСоединение(СерверИсточник);
	Исключение
		Возврат;
	КонецПопытки; 
	
	АдресРесурса = СтрШаблон("%1/hs/statistics", ИмяБазыСтатистики);
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
	HTTPЗапрос.УстановитьТелоИзСтроки(JSONСтрока);
	ИмяМетода = "POST";
	
	Попытка
		Результат = HTTPСоединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапрос);
		Если Результат.КодСостояния = 200 Тогда
			ОбщегоНазначения.СообщитьПользователю("Данные успешно отправлены и обработаны");
			РегистрыСведений.топ_ИспользованиеОбъектов.ОчиститьЗаписиРегистраСведений();
			ДанныеСтатистики = Новый Структура("Период, JSONСтрока", ТекущаяДата(), JSONСтрока);
			РегистрыСведений.топ_ДанныеСтатистикиОтправка.ЗаписатьДанныеВРегистр(ДанныеСтатистики);
			Возврат; 
		Иначе
			Возврат;
		КонецЕсли;    
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;  
	КонецПопытки;
	
КонецПроцедуры

Функция ПользовательскоеСоглашениеПринято() Экспорт
	УстановитьПривилегированныйРежим(Истина);
	Возврат Константы.топ_ПользовательскоеСоглашениеПодписано.Получить();
КонецФункции

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

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

Процедура ЗаписатьДанныеОбИдентификаторе(Идентификатор, СерверИсточник, ИмяБазыСтатистики)
	
	Попытка
		HTTPСоединение = Новый HTTPСоединение(СерверИсточник);
	Исключение
		Возврат;
	КонецПопытки; 
	
	АдресРесурса = СтрШаблон("%1/hs/statistics/confirm/%2", ИмяБазыСтатистики, Идентификатор);
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
	ИмяМетода = "GET";
	
	Попытка
		Результат = HTTPСоединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапрос);
		Если Результат.КодСостояния = 200 Тогда
			// ++ Бойков BSLR-2906
			УстановитьПривилегированныйРежим(Истина);
			Константы.топ_ИдентификаторСтатистики.Установить(Идентификатор);
			УстановитьПривилегированныйРежим(Ложь);
			// -- Бойков BSLR-2906
		КонецЕсли;    
	Исключение
		Возврат;  
	КонецПопытки;
	
КонецПроцедуры

Функция ПолучитьИдентификатор(ДанныеКОтправке, СерверИсточник, ИмяБазыСтатистики)
	
	JSONСтрока = топ_HTTPКоннектор.Данные1СВJSON(ДанныеКОтправке);
	
	Попытка
		HTTPСоединение = Новый HTTPСоединение(СерверИсточник);
	Исключение
		Возврат Неопределено;
	КонецПопытки; 
	
	АдресРесурса = СтрШаблон("%1/hs/statistics", ИмяБазыСтатистики);
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
	HTTPЗапрос.УстановитьТелоИзСтроки(JSONСтрока);
	ИмяМетода = "GET";
	
	Попытка
		Результат = HTTPСоединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапрос);
		Если Результат.КодСостояния = 200 Тогда
			Идентификатор = Результат.ПолучитьТелоКакСтроку();
			Возврат Идентификатор; 
		Иначе
			Возврат Неопределено;
		КонецЕсли;    
	Исключение
		Возврат Неопределено;  
	КонецПопытки;
	
КонецФункции   

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

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

Процедура ЗапуститьПроцедуруВыгрузкиСтатистики() Экспорт
	// ++ Бойков BSLR-2906
	УстановитьПривилегированныйРежим(Истина);
	ПользовательскоеСоглашениеПодписано = Константы.топ_ПользовательскоеСоглашениеПодписано.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	// -- Бойков BSLR-2906
	Если ПользовательскоеСоглашениеПодписано Тогда
		ОтправитьДанныеОКлиенте();
		ВыгрузитьДанныеСтатистики();                                           
	КонецЕсли;
КонецПроцедуры

Функция ПолучитьСлучайноеЧисло(Мин=0,Макс=100) Экспорт
	
	//вместо Randomize 
	Для н = 1 По Макс Цикл 
		Уник = Новый УникальныйИдентификатор; 
	КонецЦикла; 
	
	//генерируем GUID 
	Уник = СокрЛП(Новый УникальныйИдентификатор); 
	
	//оставляем только цифры 
	Уник    = СтрЗаменить(Уник,"-","");
	Уник    = СтрЗаменить(Уник,Символы.НПП,"");
	
	Случ = 0;
	//знаменатель должен иметь такую же разрядность 
	Знаменатель = 1; 
	Для н = 1 По (СтрДлина(Уник)) Цикл
		ТекС = Сред(Уник,н,1);
		Если ТекС="a" Тогда
			Случ = Случ + Знаменатель*10;
		ИначеЕсли ТекС="b" Тогда
			Случ = Случ + Знаменатель*11;
		ИначеЕсли ТекС="c" Тогда
			Случ = Случ + Знаменатель*12;
		ИначеЕсли ТекС="d" Тогда
			Случ = Случ + Знаменатель*13;
		ИначеЕсли ТекС="e" Тогда
			Случ = Случ + Знаменатель*14;
		ИначеЕсли ТекС="f" Тогда
			Случ = Случ + Знаменатель*15;
		ИначеЕсли ТекС="1" Тогда
			Случ = Случ + Знаменатель;
		ИначеЕсли ТекС="2" Тогда
			Случ = Случ + Знаменатель*2;
		ИначеЕсли ТекС="3" Тогда
			Случ = Случ + Знаменатель*3;
		ИначеЕсли ТекС="4" Тогда
			Случ = Случ + Знаменатель*4;
		ИначеЕсли ТекС="5" Тогда
			Случ = Случ + Знаменатель*5;
		ИначеЕсли ТекС="6" Тогда
			Случ = Случ + Знаменатель*6;
		ИначеЕсли ТекС="7" Тогда
			Случ = Случ + Знаменатель*7;
		ИначеЕсли ТекС="8" Тогда
			Случ = Случ + Знаменатель*8;
		ИначеЕсли ТекС="9" Тогда
			Случ = Случ + Знаменатель*9;
		КонецЕсли;
		Знаменатель = Знаменатель * 16;
	КонецЦикла; 
	
	Случ = Случ / Знаменатель; //здесь получается дробное случайное число от 0 до 1 
	
	//преобразуем его в случайное число из заданного интервала, округляем до целого 
	ЧислоИзИнтервала = Мин(Макс(Окр(Мин + (Макс-Мин)*Случ),Мин),Макс); 
	
	Возврат ЧислоИзИнтервала; 
	
КонецФункции //ПолучитьСлучайноеЧисло()

// ++ Чупраков BSLR-3724, отправка информации ошибки загрузки товаров, если была попытка изменения ключевых реквизитов объекта Товар 
//
Процедура ОтправитьДанныеОбОшибкеЗаписиТоваров(ЛичныйКабинет, ПараметрыЖурналаОбмена = Неопределено, ПревышениеТоваровПослеЗапроса = Ложь) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	ИдентификаторБазы = Константы.топ_ИдентификаторСтатистики.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	
	Если ПустаяСтрока(ИдентификаторБазы) Тогда
		Возврат;
	КонецЕсли;
	
	РеквизитыЛичногоКабинета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЛичныйКабинет, "Наименование, Код");
	
	ДанныеКабинета = Новый Структура;
	ДанныеКабинета.Вставить("Наименование", РеквизитыЛичногоКабинета.Наименование);
	ДанныеКабинета.Вставить("Код", РеквизитыЛичногоКабинета.Код);
	ДанныеКабинета.Вставить("ОшибкаЗагрузкиТоваровДубли", Истина);
	ДанныеКабинета.Вставить("ПревышениеТоваровПослеЗапроса", ПревышениеТоваровПослеЗапроса); // BSLR-3724/1
	
	ДанныеКОтправке = Новый Структура;
	ДанныеКОтправке.Вставить("id", ИдентификаторБазы);
	ДанныеКОтправке.Вставить("cabinets", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДанныеКабинета));
	
	Если ПараметрыЖурналаОбмена = Неопределено Тогда
		ПараметрыЖурналаОбмена = топ_ВзаимодействиеСПлощадками.ВернутьПараметрыЖурналаОбмена();
	КонецЕсли;
	
	ИмяСервераСтатистики = ПолучитьИмяСервераСтатистики();
	ИмяБазыСтатистики = ПолучитьИмяБазыСтатистики();
	
	Попытка
		HTTPСоединение = Новый HTTPСоединение(ИмяСервераСтатистики);
	Исключение
		Возврат;
	КонецПопытки;
	
	ДанныеКОтправкеСтрокой = топ_HTTPКоннектор.Данные1СВJSON(ДанныеКОтправке);
	
	АдресРесурса = СтрШаблон("%1/hs/statistics", ИмяБазыСтатистики);
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
	HTTPЗапрос.УстановитьТелоИзСтроки(ДанныеКОтправкеСтрокой);
	
	Попытка
		
		РезультатЗапроса = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
		
		топ_ВзаимодействиеСПлощадками.ЗаполнитьПараметрыЖурналаОбмена(ПараметрыЖурналаОбмена,
			ЛичныйКабинет,
			Перечисления.топ_ВидыОбменов.ВыгрузкаСтатистики,
			"Отправка отчета об ошибке загрузки товаров",
			"Выполнена отправка отчета об ошибке загрузки товаров");
		
		топ_ВзаимодействиеСПлощадками.ДобавитьЗаписьВЖурналОбменов(ПараметрыЖурналаОбмена);
		
	Исключение
		
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		топ_ВзаимодействиеСПлощадками.ЗаполнитьПараметрыЖурналаОбмена(ПараметрыЖурналаОбмена,
			ЛичныйКабинет,
			Перечисления.топ_ВидыОбменов.ВыгрузкаСтатистики,
			"Отправка отчета об ошибке загрузки товаров",
			"При отправке отчета возникла ошибка:" + Символы.ПС + ТекстОшибки,
			Истина);
		
		топ_ВзаимодействиеСПлощадками.ДобавитьЗаписьВЖурналОбменов(ПараметрыЖурналаОбмена);
		
	КонецПопытки;
	
КонецПроцедуры // -- Бойков BSLR-3724

//BSLR-3724, Чупраков А.Н., 21.11.24, отправляет на сервер FTP исходные тексты запросов API
Процедура ОтправитьРезультатЗапросАПИ(МассивАдресХранилища) Экспорт 

	УстановитьПривилегированныйРежим(Истина);
	ИдентификаторБазы = Константы.топ_ИдентификаторСтатистики.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	
	Если ПустаяСтрока(ИдентификаторБазы) Тогда
		Возврат;
	КонецЕсли; 
	
	НомерСтроки = 1;
	Для Каждого АдресХранилища Из МассивАдресХранилища Цикл  
	ДвоичныеДанные 	= ПолучитьИзВременногоХранилища(АдресХранилища);
	ИмяФайла 		= ПолучитьИмяВременногоФайла("txt");
	ДвоичныеДанные.Записать(ИмяФайла); 			
	ИмяФайлаСервер 	= Строка(ИдентификаторБазы + Формат(НомерСтроки, "ЧЦ=; ЧГ=; ЧФ=_Ч") + Формат(ТекущаяДата(), "ДФ=_yyyyMMdd_HHmmss") + ".txt");			
	ФТП 			= топ_ВзаимодействиеСПлощадками.ПодключитьсяКFTPСерверу();
	
	Попытка
		ФТП.Записать(ИмяФайла, ИмяФайлаСервер); 		
	Исключение				
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки()); 	
	КонецПопытки; 
	
	НомерСтроки = НомерСтроки + 1;
	
	КонецЦикла;

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

// письмерова 12.05.2025 BSLR-3724/1 - дубли товаров, Эгрегор
Процедура ОтправитьДанныеТоваров(ТаблицаТоваров, ИзмененныеТовары, ТаблицаЗапроса) Экспорт

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

	
	// ТаблицаЗапроса
	ИмяФайла 		= ПолучитьИмяВременногоФайла("mxl");
	
	ТаблДок 		= ПреобразоватьТЗвТД(ТаблицаЗапроса);
	ТаблДок.Записать(ИмяФайла);
	
	ИмяФайлаСервер 	= Строка(ИдентификаторБазы + Формат("ТоварыИтог") + Формат(ТекущаяДата(), "ДФ=_yyyyMMdd_HHmmss") + ".mxl");			
	ФТП 			= топ_ВзаимодействиеСПлощадками.ПодключитьсяКFTPСерверу();
	
	Попытка
		ФТП.Записать(ИмяФайла, ИмяФайлаСервер); 		
	Исключение				
		ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки()); 	
	КонецПопытки; 
	

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


// Преобразовать таблицу значений в табличный документ. BSLR-3724/1
//
// Параметры:
//	ТабЗначений - <ТаблицаЗначений> - Исходная таблица значений;
//	ТабДок - <ТабличныйДокумент> - Полученный табличный документ. Если параметр не задан, 
//	 то документ создаётся заново и возвращается функцией;
//	НачалоСтрока - <Число> - Строка начала области;
//	НачалоСтолбец - <Число> - Столбец начала области;
//	ВыводитьЗаголовки - <Булево> - Определяет выводить ли имена колонок или нет.
//	
// Возвращаемое значение:
//	<ТабличныйДокумент> - Полученный табличный документ (возвращает параметр "ТабДок").
//
Функция ПреобразоватьТЗвТД(ТабЗначений, ТабДок = Неопределено, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, ВыводитьЗаголовки = Истина) Экспорт
 
	Если ТабДок = Неопределено Тогда
		ТабДок = Новый ТабличныйДокумент;
	КонецЕсли;
 
	// Определение габаритов таблицы
	НачалоСтрока = ?(НачалоСтрока = Неопределено, 1, НачалоСтрока);
	НачалоСтолбец = ?(НачалоСтолбец = Неопределено, 1, НачалоСтолбец);
 
	// Преобразование
	ИндексСтроки = НачалоСтрока;
	Если ВыводитьЗаголовки Тогда
		ИндексКолонки = НачалоСтолбец;
		Для Каждого Колонка Из ТабЗначений.Колонки Цикл
			ТабДок.Область(ИндексСтроки, ИндексКолонки).Текст = ?(ПустаяСтрока(Колонка.Заголовок), Колонка.Имя, Колонка.Заголовок);
			ИндексКолонки = ИндексКолонки + 1;
		КонецЦикла;
		ИндексСтроки = ИндексСтроки + 1;
	КонецЕсли;
 
	Для Каждого Элемент Из ТабЗначений Цикл
		ИндексКолонки = НачалоСтолбец;
		Для Каждого Колонка Из ТабЗначений.Колонки Цикл
			ТабДок.Область(ИндексСтроки, ИндексКолонки).СодержитЗначение = Истина;
			ТабДок.Область(ИндексСтроки, ИндексКолонки).ТипЗначения = Новый ОписаниеТипов(Колонка.ТипЗначения);
			ТабДок.Область(ИндексСтроки, ИндексКолонки).Значение = Элемент[Колонка.Имя];
			ИндексКолонки = ИндексКолонки + 1;
		КонецЦикла;
		ИндексСтроки = ИндексСтроки + 1;
	КонецЦикла;
 
	Возврат ТабДок;
КонецФункции
	
#КонецОбласти

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


#Область СлужебныеПроцедурыИФункции 

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


&НаСервере
Функция ВернутьТорговуюПлощадку(ЛичныйКабинет) Экспорт
	
	Возврат ЛичныйКабинет.ТорговаяПлощадка;
	
КонецФункции

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

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

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

	КонецЦикла;
	
	ЭтотОбъект.ИзменитьРеквизиты(МассивРеквизитов);
	
	Для Каждого СтрокаТаблицы из ТаблицаДополнительныхНастроек цикл
		
		ДопНастройка = СтрокаТаблицы.Характеристика;

		ЭлементСвойство             = ФормаОбъекта.Элементы.Добавить(ДопНастройка.Наименование, Тип("ПолеФормы"),ВернутьГруппуПоНаименованию(ФормаОбъекта,ДопНастройка.ИнтерфейсГруппаИмя));
		
		ЭлементСвойство.ПутьКДанным = ДопНастройка.Наименование;
		ЭлементСвойство.Заголовок   = ДопНастройка.Описание;
		
		Если Тип(ДопНастройка.ТипЗначения) = Тип("Строка") или Тип(ДопНастройка.ТипЗначения) = Тип("Число") Тогда
			ЭлементСвойство.Вид = ВидПоляФормы.ПолеВвода;
		ИначеЕсли Тип(ДопНастройка.ТипЗначения) = Тип("Булево") Тогда
			ЭлементСвойство.Вид = ВидПоляФормы.ПолеФлажка;
		КонецЕсли;
		
		ФормаОбъекта.Объект[ДопНастройка.Наименование] = СтрокаТаблицы.Значение;
		
	КонецЦикла;
	
КонецПроцедуры

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

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

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

//Функция возвращает результат проверки названия и версии текущей конфигурации
// Параметры:
//  Наименование - Строка - Название конфигурации.
//  Версия - Строка - версия конфигурации
//  ИлиВерсияСтарше - Булево - применяется при сравнении на минимальную версию конфигурации
//    При использовании этого параметра необходимо передавать номер версии в формате "x.x.x.x",
//    т.к. применятеся функция общего модуля. Прежняя реализация при сравненнии на больше ">" была некорректна.
//    Например, "3.0.4" > "3.0.12" = Истина, что неверно
//
// Пример:
//
//  1. Для проверки является ли текущая конфигурация, конфигурацией "Управление торговлей" версии 11.4:
//  топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.4");
&НаСервере
Функция ЭтаКонфигурация(Наименование, Версия = Неопределено, ИлиВерсияСтарше = Ложь) Экспорт 
	
	РезультатПроверки = Ложь;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВерсииПодсистем.Версия КАК Версия
		|ИЗ
		|	РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем
		|ГДЕ
		|	ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы";
	
	Запрос.УстановитьПараметр("ИмяПодсистемы", Наименование);
	
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	Если Выборка.Следующий() Тогда
		Если ЗначениеЗаполнено(Версия) Тогда
			Если ИлиВерсияСтарше Тогда
				// см. описание параметра ИлиВерсияСтарше в комментарии к функции
				РезультатПроверки = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Выборка.Версия, Версия) >= 0;
			Иначе
				РезультатПроверки = (Лев(Выборка.Версия, СтрДлина(Версия)) = Версия);
			КонецЕсли;
		Иначе
			РезультатПроверки = Истина;
		КонецЕсли;
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Ложь);
	
	Возврат РезультатПроверки;
	
КонецФункции 

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

  //++ БИТ Шадрин 28.10.2022
 &НаСервере
Функция ПолучитьТекущуюВерсиюРасширения() Экспорт 
	УстановитьПривилегированныйРежим(Истина);
	ТекущаяВерсия = Константы.топ_ТекущаяВерсияРасширения.Получить();
	УстановитьПривилегированныйРежим(Ложь);
	Возврат ТекущаяВерсия;
КонецФункции

//LAShadrin 08/06/23 +
&НаСервере
Функция РасширениеДоступноПользователю() Экспорт
	
	Если Не РольДоступна("ПолныеПрава") Тогда 
		Если Не РольДоступна("топ_ОсновнаяРоль") Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	топ_ИспользованиеБИТ_УМ.Использование КАК Доступно
		|ИЗ
		|	РегистрСведений.топ_ИспользованиеБИТ_УМ КАК топ_ИспользованиеБИТ_УМ
		|ГДЕ
		|	топ_ИспользованиеБИТ_УМ.Пользователь = &Пользователь";
	
	Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
		Доступно = ВыборкаДетальныеЗаписи.Доступно;
	Иначе
		// ++ Бойков BSLR-1267
		Доступно = Ложь;
		// -- Бойков BSLR-1267
	КонецЕсли;
	Возврат Доступно;
КонецФункции
//-- БИТ Шадрин 28.10.2022


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

//Процедура добавляет в массив структура отбора
//
// Параметры:
//	МассивОтборов  - Массив - Текст запроса
//	ЛевоеЗначение  - Левое значение отбора
//	ПравоеЗначение - Правое значение отбора
//	ВидСравнения   - ВидСравненияКомпоновкиДанных - Вид сравнения
//	Использование  - Булево - Использования отбора
//
Процедура ДобавитьСтруктуруОтбораСКДВМассив(МассивОтборов, ЛевоеЗначение, ПравоеЗначение, ВидСравнения = Неопределено, Использование = Истина) Экспорт
	
	пСтруктура = Новый Структура;
	пСтруктура.Вставить("Использование",  Использование);
	пСтруктура.Вставить("ЛевоеЗначение",  ЛевоеЗначение);
	пСтруктура.Вставить("ПравоеЗначение", ПравоеЗначение);
	пСтруктура.Вставить("ВидСравнения",   ?(ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, ВидСравнения));
	
	МассивОтборов.Добавить(пСтруктура);
	
КонецПроцедуры


//Чупраков А.Н. 15.07.22
//▼ 
Функция ПолучитьЗначениеРеквизитаСправочника(Справочник, Реквизит) Экспорт 
	
	Возврат Справочник[Реквизит];
	
КонецФункции  
// -- БИТ Сергеев BSLR-807

// ++ БИТ Сергеев BSLR-847
Функция ЗначенияРеквизитовОбъекта(Ссылка, Знач Реквизиты, ВыбратьРазрешенные = Ложь, Знач КодЯзыка = Неопределено) Экспорт
	
	Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, Реквизиты, ВыбратьРазрешенные, КодЯзыка);
	
КонецФункции

// Добавляет в запрос одноименный параметр и текст позволяющий использовать ТаблицуЗначений
Процедура ДобавитьТаблицуВЗапрос(Запрос, Таблица, ИмяВременойТаблицы, ДобавитьПолеАвтономер = Ложь) Экспорт
	
	Запрос.УстановитьПараметр(ИмяВременойТаблицы, Таблица);
	
	пПоля = Новый Массив;
	
	Если ДобавитьПолеАвтономер Тогда
		пПоля.Добавить("АВТОНОМЕРЗАПИСИ() КАК Автономер");
	КонецЕсли;
	
	пШаблонПолей = "Таблица.%1 КАК %1";
	
	Для Каждого пКолонка Из Таблица.Колонки Цикл
		пПоля.Добавить(СтрШаблон(пШаблонПолей, пКолонка.Имя));
	КонецЦикла;
	
	пПоля = СтрСоединить(пПоля, СтрШаблон(",%1%2", Символы.ПС, Символы.Таб));
	
	Запрос.Текст = Запрос.Текст
		+ ?(ЗначениеЗаполнено(Запрос.Текст), ОбщегоНазначения.РазделительПакетаЗапросов(), "")
		+ СтрШаблон(
			"ВЫБРАТЬ
			|	%1
			|ПОМЕСТИТЬ %2
			|ИЗ
			|	&%2 КАК Таблица", пПоля, ИмяВременойТаблицы);
	
КонецПроцедуры

// БИТ Малышев 27.07.2022
 Функция ПолучитьСреднийОстатокТовараЗаПериод(ДатаНачалаПериода, ДатаОкончанияПериода, Товар, Склад, ЛичныйКабинет) Экспорт
	 
	Остаток = 0;
	КонОстаток = 0;
	СуммаОстатков = 0;
		
	СекундВДне = 60 * 60 * 24;
	
	НачДата = ДатаНачалаПериода;
	КонДата = ДатаОкончанияПериода;
	
	ДнейВПериоде = (КонДата - НачДата) / СекундВДне;
	
	ТекДата = НачДата;	
	Пока ТекДата < КонДата Цикл       

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

	Возврат ?(СуммаОстатков > 0 И ДнейВПериоде > 0,  СуммаОстатков / ДнейВПериоде, 0);
КонецФункции   

//БИТ ++ Тверитин
Функция ВернутьКонстанту(ИмяКонстанты) Экспорт
	// ++ Бойков BSLR-2906
	УстановитьПривилегированныйРежим(Истина);
	// -- Бойков BSLR-2906
	Возврат Константы[ИмяКонстанты].Получить();
КонецФункции
//БИТ Смирнов А.П. 01.09.2022 )     

//Чупраков А.Н. 12.09.22
Функция МассивЭтикетокPDF(МассивЗаказов) Экспорт 

	Возврат Документы.топ_ЗаказТорговойПлощадки.НаличиеФайлаPDF(МассивЗаказов);	

КонецФункции // МассивЭтикетокPDF()

//> БИТ - 11_4 - КондращенкоМ 

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

//Бит Юрлов
Функция Бит_ПолучитьФункциональнуюОпцию(Имя) Экспорт
	Возврат ПолучитьФункциональнуюОпцию(Имя);
КонецФункции

//Бит Юрлов
Функция ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные = Ложь, Знач КодЯзыка = Неопределено) Экспорт
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные,КодЯзыка);
КонецФункции 

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

	Если НЕ РезультатЗапроса.Пустой() Тогда
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		ВыборкаДетальныеЗаписи.Следующий();
		Результат = ВыборкаДетальныеЗаписи.Использование;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции // ИспользоватьФункционалБИТ_УМ()

Процедура ПриОткрытииФормыОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт

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


Функция ПреобразованиеМассивВТаблицуЗначений(Массив) Экспорт

   ТЗ = Новый ТаблицаЗначений;

   Для Каждого СтрокаМассива Из Массив Цикл

       Если ТЗ.Колонки.Количество() = 0 Тогда
           Для Каждого ЭлементМассива Из СтрокаМассива Цикл
               ТЗ.Колонки.Добавить(ЭлементМассива.Ключ);
           КонецЦикла;
       КонецЕсли;

       НоваяСтрока = ТЗ.Добавить();
       Для Каждого ЭлементМассива Из СтрокаМассива Цикл
           НоваяСтрока[ЭлементМассива.Ключ] = ЭлементМассива.Значение;
       КонецЦикла;
   КонецЦикла;

   Возврат ТЗ;

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

// ++ Бойков BSLR-2129
//
Функция ПодсистемаУправлениеМаркетплейсамиДоступнаВсегда() Экспорт
	
	Возврат Пользователи.ЭтоПолноправныйПользователь();
	
КонецФункции // -- Бойков BSLR-2129

// ++ Бойков BSLR-2129
//
Функция ВывестиФормуНастроекИспользованияУправлениеМаркетПлейсами() Экспорт
	
	// Если в регистре нет записей, выводим для администратора форму для настройки использования расширения
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ИспользованиеБИТ_УМ.Пользователь КАК Пользователь
		|ИЗ
		|	РегистрСведений.топ_ИспользованиеБИТ_УМ КАК ИспользованиеБИТ_УМ";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	УстановитьПривилегированныйРежим(Ложь);
	
	Возврат РезультатЗапроса.Пустой();
	
КонецФункции // -- Бойков BSLR-2129

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

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


Функция ПолучитьАдресПочтыТехподдержки() Экспорт  //LAShadrin 11/03/24 BSLR-3060                    

    Возврат  "support-mp@1cbit.ru";
	
КонецФункции


Функция ПолучитьСписокКолонокЛистаПодбора(Маркетплейс) Экспорт  //LAShadrin BSLR-2842	

	МассивКолонок = Новый Массив;
	
	Если Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.Wildberries") Тогда
	МассивКолонок.Добавить("№ задания");
	МассивКолонок.Добавить("Склад 1С");
	МассивКолонок.Добавить("Фото");
	МассивКолонок.Добавить("Наименование товара");
	МассивКолонок.Добавить("Наименование номенклатуры");
	МассивКолонок.Добавить("Размер");
	МассивКолонок.Добавить("Цвет");
	МассивКолонок.Добавить("Артикул поставщика");
	МассивКолонок.Добавить("Количество");
	МассивКолонок.Добавить("Этикетка");
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.OZON") Тогда  
	МассивКолонок.Добавить("№ задания");
	МассивКолонок.Добавить("Склад 1С");
	МассивКолонок.Добавить("Фото");
	МассивКолонок.Добавить("Наименование товара");
	МассивКолонок.Добавить("Наименование номенклатуры");
	МассивКолонок.Добавить("Характеристика");
	МассивКолонок.Добавить("Артикул поставщика");
	МассивКолонок.Добавить("Кол-во");
	МассивКолонок.Добавить("Этикетка");
	МассивКолонок.Добавить("Куда доставить");
	МассивКолонок.Добавить("Дата зак. / отгр.");
	ИНачеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.ЯндексМаркет") Тогда 
	МассивКолонок.Добавить("№ задания");
	МассивКолонок.Добавить("Склад 1С");
	МассивКолонок.Добавить("Фото");
	МассивКолонок.Добавить("Наименование товара");
	МассивКолонок.Добавить("Наименование номенклатуры");
	МассивКолонок.Добавить("Характеристика");
	МассивКолонок.Добавить("Артикул поставщика");
	МассивКолонок.Добавить("Кол-во");
	МассивКолонок.Добавить("Этикетка");
	ИначеЕсли Маркетплейс = ПредопределенноеЗначение("Перечисление.топ_ТорговыеПлощадки.СберМегаМаркет") Тогда 
		
	КонецЕсли;                                                                                        
	
	Возврат МассивКолонок;
	
КонецФункции

// ++ БИТ Сергеев COSTS-66
Функция ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные = Ложь, Знач КодЯзыка = Неопределено) Экспорт
	Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивСсылок, ИмяРеквизита, ВыбратьРазрешенные, КодЯзыка);
КонецФункции

Функция ЗначенияРеквизитовОбъектов(Ссылки, Знач Реквизиты, ВыбратьРазрешенные = Ложь, Знач КодЯзыка = Неопределено) Экспорт
	Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Ссылки, Реквизиты, ВыбратьРазрешенные, КодЯзыка);
КонецФункции


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

Функция ИмяИнтеграции() Экспорт
	
	Возврат "BIT_UM/" + ВерсияРасширения();
	
КонецФункции  

Функция ВерсияРасширения() Экспорт
	
	ПривилегированныйРежим = ПривилегированныйРежим();
	УстановитьПривилегированныйРежим(Истина);
	Отбор = Новый Структура("Имя", "БИТ_УправлениеМаркетплейсами");
	Расширения = РасширенияКонфигурации.Получить(Отбор);
	Если Расширения.Количество() = 0 Тогда
		Возврат "";
	КонецЕсли;
	
	Версия = Расширения[0].Версия;
	УстановитьПривилегированныйРежим(ПривилегированныйРежим);
	Возврат Версия;
	
КонецФункции


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


// письмерова 20.10.2025 BSLR-4959
#Область УслугиКонсалтинга  


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

	JSONСтрока = топ_HTTPКоннектор.Данные1СВJSON(ДанныеКОтправке); 
	
	ПараметрыЖурналаОбмена	= топ_ВзаимодействиеСПлощадками.ВернутьПараметрыЖурналаОбмена();
	
	Попытка
		HTTPСоединение = Новый HTTPСоединение(СерверИсточник);
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = ОписаниеОшибки();
	КонецПопытки; 
	
	АдресРесурса = СтрШаблон("%1/hs/statistics/consulting", ИмяБазыСтатистики);
	HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
	HTTPЗапрос.УстановитьТелоИзСтроки(JSONСтрока);
	ИмяМетода = "POST";
	
	Попытка
		ОТвет = HTTPСоединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапрос);
		Если ОТвет.КодСостояния = 200 Тогда

			Результат.Сообщение = "Спасибо за Вашу заявку! Мы свяжемся с Вами в течение 1 рабочего дня с 9:00 до 18:00 по московскому времени. Хорошего дня!";
			
			ЗаписатьДанныеОбОтправкеЗаявкиВРегистр(ДанныеКОтправке, JSONСтрока, ВидЗапроса);
			
		Иначе
			Результат.Ошибка = Истина;
			Результат.Сообщение = "Не удалось отправить заявку";
		КонецЕсли;    
	Исключение
		Результат.Ошибка = Истина;
		Результат.Сообщение = ОписаниеОшибки();
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции 


Функция ДополнитьДанныеКОтправке(ДанныеКОтправке)
	
	ДанныеоКлиенте = ПолучитьИнформациюОКлиенте();
	
	ДанныеКОтправке.Вставить("organizations",ДанныеоКлиенте.organizations);
	ДанныеКОтправке.Вставить("date_request",ЗаписатьДатуJSON(ТекущаяДатаСеанса(), ФорматДатыJSON.ISO, ВариантЗаписиДатыJSON.ЛокальнаяДата));
	
	Возврат ДанныеКОтправке; 
	
КонецФункции


ПРоцедура ЗаписатьДанныеОбОтправкеЗаявкиВРегистр(ДанныеКОтправке, JSONСтрока, ВидЗапроса)
	
	НоваяЗапись = РегистрыСведений.топ_ЗаявкиНаКонсалтинг.СоздатьМенеджерЗаписи();
	
	НоваяЗапись.Период = ПрочитатьДатуJSON(ДанныеКОтправке.date_request, ФорматДатыJSON.ISO);
	НоваяЗапись.Имя = ДанныеКОтправке.name;
	НоваяЗапись.Почта = ДанныеКОтправке.mail;
	НоваяЗапись.Телефон = ДанныеКОтправке.tel;
	НоваяЗапись.ВидЗапроса = ВидЗапроса;
	
	НоваяЗапись.Вопрос = ДанныеКОтправке.question;

	НоваяЗапись.JSONСтрока = JSONСтрока;
	НоваяЗапись.Пользователь = Пользователи.АвторизованныйПользователь();
	
	НоваяЗапись.Записать();
	
КонецПроцедуры


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

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

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

//БИТ Смирнов А.П. 17.10.2022 BSLR-791 ( 
// Функция получает связанную номенклатуру товаров из заказов торговой площадки и распределяет ее по складам в зависимости от наличия остатка.
// Результат функции можно передать в параметры заполнения процедуры создания заказа клиента
//
// Параметры:
//  ЛичныйКабинет			   - Личный кабинет поставщика на торговой площадки
//  ЗаказТорговойПлощадки	   - Документ заказа с торговой площадки или массив заказов, на основании которых создается заказ клиента 
//
// Возвращаемое значение:
//	 Структура
//		ОписаниеОшибки		   				- Строка
//  	ДанныеРаспределения	   		  		- Массив структур
//			СкладЗаполнения		   		  	- Справочник.Склады - склад, с которого номенклатура будет зарезервирована
//			ЗаказыТорговойПлощадки		  	- Массив элементов типа Документ.топ_ЗаказТорговойПлощадки - заказы ТП, из товаров которых получена номенклатура
//			МассивНоменклатурыЗаполнения 	- массив структур - состав номенклатуры для резерва со склада
//				Номенклатура              	- Справочник.Номенклатура
//				Характеристика			  	- Справочник.Характеристики
//				Количество				 	- Число
//				Цена                        - Число
//				Сумма						- Число
//
Функция РаспределитьТоварыЗаказовПоОстаткамНаСкладах_УправлениеТорговлей(ЛичныйКабинет, ЗаказТорговойПлощадки) Экспорт
	
	РезультатРаспределения = Новый Структура("СообщениеОбОшибке, ДанныеРаспределения", "", Новый Массив);
	
	ЭтоОдинЗаказТП = Истина;
	Если ТипЗнч(ЗаказТорговойПлощадки) <> Тип("Массив") Тогда
		МассивЗаказовТП = Новый Массив;
		МассивЗаказовТП.Добавить(ЗаказТорговойПлощадки);
	Иначе
		МассивЗаказовТП = ЗаказТорговойПлощадки;
		Если МассивЗаказовТП.Количество() > 1 Тогда
			ЭтоОдинЗаказТП = Ложь;         
		КонецЕсли;
	КонецЕсли;
	
	Если МассивЗаказовТП.Количество() = 0 Тогда
		РезультатРаспределения.СообщениеОбОшибке = "Не переданы заказы торговой площадки";
		Возврат РезультатРаспределения;
	КонецЕсли;
		
	ДанныеДляОбработки = ТоварныйСостав_ОстаткиНоменклатурыПоЗаказамТорговойПлощадки(ЛичныйКабинет, МассивЗаказовТП);
	ВыборкаЗаказы   = ДанныеДляОбработки.ВыборкаЗаказы;
	ТаблицаОстатков = ДанныеДляОбработки.ТаблицаОстатков;
	ТаблицаСкладов  = ДанныеДляОбработки.ТаблицаСкладов;
	//отл
	//ТаблицаТоваров = ДанныеДляОбработки.ТаблицаТоваров;
	
	ПараметрыОтбора		   = Новый Структура("Номенклатура,Характеристика,Склад"); 
	ПараметрыОтбораСкладов = Новый Структура("СкладПоставщика", Справочники.топ_СкладыПоставщика.ПустаяСсылка());
	
	СтрокиПустыхСкладовПоставщика = ТаблицаСкладов.НайтиСтроки(ПараметрыОтбораСкладов);
	
	СоздаватьОдинЗаказКлиента = ЛичныйКабинет.СоздаватьОдинЗаказКлиентаFBS;
	
	Если СоздаватьОдинЗаказКлиента Тогда
		СоответствиеСкладов = Новый Соответствие;
	КонецЕсли;
	
	Пока ВыборкаЗаказы.Следующий() Цикл
		
		МассивСкладов = Новый Массив;
		Если ЗначениеЗаполнено(ВыборкаЗаказы.СкладПоставщика) Тогда
			ПараметрыОтбораСкладов.Вставить("СкладПоставщика", ВыборкаЗаказы.СкладПоставщика);
			СтрокиСкладов = ТаблицаСкладов.НайтиСтроки(ПараметрыОтбораСкладов);	
			Для каждого СтрокаСклада из СтрокиСкладов Цикл
				МассивСкладов.Добавить(СтрокаСклада.Склад);	
			КонецЦикла;
		КонецЕсли;
		
		Для каждого СтрокаСклада из СтрокиПустыхСкладовПоставщика Цикл
			МассивСкладов.Добавить(СтрокаСклада.Склад);	
		КонецЦикла; 
		
		Если МассивСкладов.Количество() = 0 Тогда
			РезультатРаспределения.СообщениеОбОшибке = "Для заказа торговой площадки №" + ВыборкаЗаказы.НомерЗаказа + " не найдено соответствие со складами 1С";
			Возврат РезультатРаспределения;
		КонецЕсли;
		
		ТекущиеПараметрыЗаполнения = Неопределено;
		ВыборкаТовары = ВыборкаЗаказы.Выбрать();  
		КоличествоПозицийВНаборе = 1; 
		ЭтоПервый = Истина;  
		н = 0;
		
		Пока ВыборкаТовары.Следующий() Цикл
			
			// письмерова 30.01.2023 BSLR-1339
			ПересчитаннаяЦена = ВыборкаТовары.Цена;
			КоличествоНаборов = ВыборкаТовары.КоличествоПоЗаказу;   	
				
			
			Если ВыборкаТовары.НоменклатураПоЗаказу <> ВыборкаТовары.Номенклатура Тогда // начался набор 
				н = н + 1;	
				Если ЭтоПервый ТОгда
					пСуммаКРаспределению = ВыборкаТовары.Сумма;
					ЭтоПервый = Ложь;
				Конецесли;
				//если набор состоит из одной комплектующей - цену и сумму можно заполнить
				// если элементов набора больше одного - пересчитываем исходя из варианта расчета цены набора
				
				ПараметрыВариантаКомплектацииНоменклатуры = НаборыВызовСервера.ПараметрыВариантаКомплектацииНоменклатуры(
																									ВыборкаТовары.НоменклатураПоЗаказу,
																									ВыборкаТовары.ХарактеристикаПоЗаказу);
				ВариантКомплектацииНоменклатуры = ПараметрыВариантаКомплектацииНоменклатуры.ВариантКомплектацииНоменклатуры;																						

				ПодобранныеТоварыСтруктура = ПодобранныеТовары(Неопределено, ВыборкаТовары); 
				
				ВариантРасчетаЦеныНабора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВариантКомплектацииНоменклатуры, "ВариантРасчетаЦеныНабора");
				КоличествоПозицийВНаборе = ПодобранныеТоварыСтруктура.Количество();
				
				Если КоличествоПозицийВНаборе = 1 ТОгда // нужно пересчитать цену исходя из количества элемента набора
					ПересчитаннаяЦена = ВыборкаТовары.Цена * ВыборкаТовары.КоличествоПоЗаказу /ВыборкаТовары.КоличествоУпаковок; 
				Иначе // письмерова 20.02.2023 BSLR-1428  - нужно пересчитать цены если это возможно или заполнить цену по первому товару, по остальным выставить 0,01 руб
					
					СтандартныйПересчетНабора = истина;
					Если ВариантРасчетаЦеныНабора = Перечисления.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям Тогда  
						СтандартныйПересчетНабора = Ложь;
						Для Каждого Стр из ПодобранныеТоварыСтруктура Цикл 
							Если СТр.Номенклатура = ВыборкаТовары.Номенклатура Тогда
								ПересчитаннаяЦена = Стр.Цена; 
							КонецЕсли;						
						КонецЦикла;
					КонецЕсли;
					
					Если СтандартныйПересчетНабора Тогда // если не можем расчитать цену по долям  							
						
						Если н = КоличествоПозицийВНаборе Тогда   // это последняя строка
							ПересчитаннаяСумма = пСуммаКРаспределению;
							ПересчитаннаяЦена = ПересчитаннаяСумма/ ВыборкаТовары.КоличествоУпаковок;
						Иначе
							ПересчитаннаяЦена = 0.01; 										
							ПересчитаннаяСумма = 0.01 * ВыборкаТовары.КоличествоУпаковок; 	
						КонецЕсли;

						пСуммаКРаспределению = пСуммаКРаспределению - ПересчитаннаяСумма;

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

					//ЗаполнитьЗначенияСвойств(нСтр, ВыборкаТовары, "Номенклатура,Характеристика,Товар,РазмерWB,Упаковка");
					//нСтр.КоличествоУпаковок = КоличествоКРезерву / ?(КоэффициентУпаковки = 0, 1, КоэффициентУпаковки); 
					//нСтр.Ссылка = ВыборкаТовары.ЗаказТП;

					//Если НЕ ВыборкаТовары.ЭтоКомплектующая Тогда
					//	нСтр.Цена  = ВыборкаТовары.Цена;
					//	нСтр.Сумма = нСтр.КоличествоУпаковок * нСтр.Цена; //БИТ Смирнов А.П. 16.12.2022 BSLR-958
					//Иначе // письмерова 30.01.2023 BSLR-1339
					//	нСтр.Цена  = ПересчитаннаяЦена;
					//	нСтр.Сумма = нСтр.КоличествоУпаковок * нСтр.Цена;		
					//КонецЕсли;

					Если НЕ ВыборкаТовары.ЭтоКомплектующая Тогда
						нСтр = ТекущиеПараметрыЗаполнения.ТаблицаНоменклатурыЗаполнения.Добавить();

						ЗаполнитьЗначенияСвойств(нСтр, ВыборкаТовары, "Номенклатура,Характеристика,Товар,РазмерWB,Упаковка");
						нСтр.КоличествоУпаковок = КоличествоКРезерву / ?(КоэффициентУпаковки = 0, 1, КоэффициентУпаковки); 
						нСтр.Ссылка = ВыборкаТовары.ЗаказТП;
						
						нСтр.Цена  = ВыборкаТовары.Цена;
						нСтр.Сумма = нСтр.КоличествоУпаковок * нСтр.Цена; //БИТ Смирнов А.П. 16.12.2022 BSLR-958
					Иначе // письмерова 30.01.2023 BSLR-1339
						
						Для Каждого Стр из ПодобранныеТоварыСтруктура Цикл 
							Если СТр.Номенклатура = ВыборкаТовары.Номенклатура И Стр.КоличествоУпаковок > 0 И КоличествоКРезерву > 0 Тогда
								
								нСтр = ТекущиеПараметрыЗаполнения.ТаблицаНоменклатурыЗаполнения.Добавить();
								ЗаполнитьЗначенияСвойств(нСтр, ВыборкаТовары, "Номенклатура,Характеристика,Товар,РазмерWB,Упаковка");
								нСтр.Ссылка = ВыборкаТовары.ЗаказТП;
								
								КоличествоУпаковок = КоличествоКРезерву / ?(КоэффициентУпаковки = 0, 1, КоэффициентУпаковки);
								КоличествоУпаковок = Мин(Стр.КоличествоУпаковок, КоличествоУпаковок);
								
								КоличествоКРезерву = КоличествоКРезерву - КоличествоУпаковок * КоэффициентУпаковки;
								
								Стр.КоличествоУпаковок = Стр.КоличествоУпаковок - КоличествоУпаковок;
								
								нСтр.КоличествоУпаковок = КоличествоУпаковок;
								нСтр.Цена = СТр.Цена;
								нСтр.Сумма = нСтр.КоличествоУпаковок * нСтр.Цена;
								
							КонецЕсли;
						КонецЦикла;
						
					КонецЕсли;
					// -- Бойков BSLR-1968
					
				КонецЕсли;
								
			КонецЦикла;
			
			Если ОсталосьРаспределить > 0 Тогда
				
				СкладКОбеспечению = МассивСкладов[0]; 
				Если СоздаватьОдинЗаказКлиента Тогда 
					ТекущиеПараметрыЗаполнения = СоответствиеСкладов.Получить(СкладКОбеспечению); 
				КонецЕсли;
				
				Если ТекущиеПараметрыЗаполнения = Неопределено Тогда
					ТекущиеПараметрыЗаполнения = ПараметрыЗаполненияЗаказаКлиента();
					ТекущиеПараметрыЗаполнения.Вставить("СкладЗаполнения", СкладКОбеспечению);
					
					Если СоздаватьОдинЗаказКлиента Тогда 
						СоответствиеСкладов.Вставить(СкладКОбеспечению, ТекущиеПараметрыЗаполнения);
					КонецЕсли;
				КонецЕсли;
				
				Если ТекущиеПараметрыЗаполнения.ЗаказыТорговойПлощадки.Найти(ВыборкаЗаказы.ЗаказТП) = Неопределено Тогда
					ТекущиеПараметрыЗаполнения.ЗаказыТорговойПлощадки.Добавить(ВыборкаЗаказы.ЗаказТП);
				КонецЕсли;
				
				нСтр = ТекущиеПараметрыЗаполнения.ТаблицаНоменклатурыЗаполнения.Добавить();
				ЗаполнитьЗначенияСвойств(нСтр, ВыборкаТовары, "Номенклатура,Характеристика,Товар,РазмерWB,Упаковка");
				нСтр.КоличествоУпаковок = ОсталосьРаспределить / ?(КоэффициентУпаковки = 0, 1, КоэффициентУпаковки);
				нСтр.Ссылка = ВыборкаТовары.ЗаказТП;

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

Функция ТоварныйСостав_ОстаткиНоменклатурыПоЗаказамТорговойПлощадки(ЛичныйКабинет, МассивЗаказовТП)

	Запрос = Новый Запрос;
	ТекстЗапроса = 	
		"ВЫБРАТЬ
		|	топ_ЗаказТорговойПлощадкиТовары.Ссылка КАК ЗаказТП,
		|	топ_ЗаказТорговойПлощадкиТовары.Ссылка.СкладПоставщика КАК СкладПоставщика,
		|	топ_ЗаказТорговойПлощадкиТовары.Товар КАК Товар,
		|	топ_ЗаказТорговойПлощадкиТовары.РазмерWB КАК РазмерWB,
		|	МИНИМУМ(топ_ЗаказТорговойПлощадкиТовары.Цена) КАК Цена,
		|	СУММА(топ_ЗаказТорговойПлощадкиТовары.Сумма) КАК Сумма,
		|	СУММА(топ_ЗаказТорговойПлощадкиТовары.Количество) КАК Количество
		|ПОМЕСТИТЬ ВТ_ТоварыПоЗаказам
		|ИЗ
		|	Документ.топ_ЗаказТорговойПлощадки.Товары КАК топ_ЗаказТорговойПлощадкиТовары
		|ГДЕ
		|	топ_ЗаказТорговойПлощадкиТовары.Ссылка В(&МассивЗаказовТП)
		|
		|СГРУППИРОВАТЬ ПО
		|	топ_ЗаказТорговойПлощадкиТовары.Ссылка,
		|	топ_ЗаказТорговойПлощадкиТовары.Ссылка.СкладПоставщика,
		|	топ_ЗаказТорговойПлощадкиТовары.Товар,
		|	топ_ЗаказТорговойПлощадкиТовары.РазмерWB
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ТоварыПоЗаказам.Товар КАК Товар,
		|	ВТ_ТоварыПоЗаказам.РазмерWB КАК РазмерWB,
		//БИТ Смирнов А.П. 25.11.2022 доработка для учета нулевых размеров (	
		|	ВЫБОР
		|		КОГДА ВТ_ТоварыПоЗаказам.РазмерWB.размер = ""0""
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоНулевойРазмер
		//БИТ Смирнов А.П. 25.11.2022 доработка для учета нулевых размеров )	
		|ПОМЕСТИТЬ ВТ_Товары
		|ИЗ
		|	ВТ_ТоварыПоЗаказам КАК ВТ_ТоварыПоЗаказам
		|
		|СГРУППИРОВАТЬ ПО
		|	ВТ_ТоварыПоЗаказам.Товар,
		|	ВТ_ТоварыПоЗаказам.РазмерWB,
		//БИТ Смирнов А.П. 25.11.2022 доработка для учета нулевых размеров (	
		|	ВЫБОР
		|		КОГДА ВТ_ТоварыПоЗаказам.РазмерWB.размер = ""0""
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ
		//БИТ Смирнов А.П. 25.11.2022 доработка для учета нулевых размеров )	
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////	
		|ВЫБРАТЬ
		|	ВТТовары.Товар КАК Товар,
		|	ВТТовары.РазмерWB КАК РазмерWB,
		|	ВТТовары.ЭтоНулевойРазмер КАК ЭтоНулевойРазмер,
		|	ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.Номенклатура ЕСТЬ NULL
		|			ТОГДА ВЫБОР
		|					КОГДА ВТТовары.ЭтоНулевойРазмер
		|						ТОГДА топ_СоответствиеТоваров1.Номенклатура
		|					ИНАЧЕ топ_СоответствиеТоваров2.Номенклатура
		|				КОНЕЦ
		|		ИНАЧЕ топ_СоответствиеТоваров.Номенклатура
		|	КОНЕЦ КАК Номенклатура,
		|	ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.Характеристика ЕСТЬ NULL
		|			ТОГДА ВЫБОР
		|					КОГДА ВТТовары.ЭтоНулевойРазмер
		|						ТОГДА топ_СоответствиеТоваров1.Характеристика
		|					ИНАЧЕ топ_СоответствиеТоваров2.Характеристика
		|				КОНЕЦ
		|		ИНАЧЕ топ_СоответствиеТоваров.Характеристика
		|	КОНЕЦ КАК Характеристика,
		//БИТ Смирнов А.П. 16.12.2022 BSLR-958 (
		|	ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.Упаковка ЕСТЬ NULL
		|			ТОГДА ВЫБОР
		|					КОГДА ВТТовары.ЭтоНулевойРазмер
		|						ТОГДА топ_СоответствиеТоваров1.Упаковка
		|					ИНАЧЕ топ_СоответствиеТоваров2.Упаковка
		|				КОНЕЦ
		|		ИНАЧЕ топ_СоответствиеТоваров.Упаковка
		|	КОНЕЦ КАК Упаковка
		//БИТ Смирнов А.П. 16.12.2022 )
		|ПОМЕСТИТЬ ВТ_НоменклатураТовары
		|ИЗ
		|	ВТ_Товары КАК ВТТовары
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров
		|		ПО ВТТовары.Товар = топ_СоответствиеТоваров.Товар
		|			И ВТТовары.РазмерWB = топ_СоответствиеТоваров.РазмерWB 
		|			И топ_СоответствиеТоваров.Товар <> ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров1
		|		ПО ВТТовары.Товар = топ_СоответствиеТоваров1.Товар
		|			И (ВТТовары.ЭтоНулевойРазмер)
		|			И (топ_СоответствиеТоваров1.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка)) 
		|			И топ_СоответствиеТоваров1.Товар <> ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.топ_СоответствиеТоваров КАК топ_СоответствиеТоваров2
		|		ПО ВТТовары.Товар = топ_СоответствиеТоваров2.Товар
		|			И (ВТТовары.РазмерWB = ЗНАЧЕНИЕ(Справочник.топ_РазмерыТоваровWB.ПустаяСсылка))
		|			И (топ_СоответствиеТоваров2.РазмерWB.размер = ""0"")
		|			И топ_СоответствиеТоваров2.Товар <> ЗНАЧЕНИЕ(Справочник.топ_ТоварыТорговыхПлощадок.ПустаяСсылка)
		|ГДЕ
		|	НЕ ВЫБОР
		|		КОГДА топ_СоответствиеТоваров.Номенклатура ЕСТЬ NULL
		|			ТОГДА ВЫБОР
		|					КОГДА ВТТовары.ЭтоНулевойРазмер
		|						ТОГДА топ_СоответствиеТоваров1.Номенклатура
		|					ИНАЧЕ топ_СоответствиеТоваров2.Номенклатура
		|				КОНЕЦ
		|		ИНАЧЕ топ_СоответствиеТоваров.Номенклатура
		|	КОНЕЦ ЕСТЬ NULL
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		//БИТ Смирнов А.П. 25.11.2022 доработка для учета нулевых размеров )	
		|ВЫБРАТЬ
		|	ВТ_НоменклатураТовары.Товар КАК Товар,
		|	ВТ_НоменклатураТовары.РазмерWB КАК РазмерWB,
		|	ВТ_НоменклатураТовары.Номенклатура КАК НоменклатураНабора,
		|	ВТ_НоменклатураТовары.Характеристика КАК ХарактеристикаНабора,
		|	СоставНаборов.Номенклатура КАК Номенклатура,
		|	СоставНаборов.Характеристика КАК Характеристика,
		//БИТ Смирнов А.П. 17.11.2022 BSLR-958 ( 
		//|	СУММА(СоставНаборов.КоличествоУпаковок) КАК Количество,
		|	СУММА(СоставНаборов.Количество) КАК Количество,
		|	СУММА(СоставНаборов.КоличествоУпаковок) КАК КоличествоУпаковок,
		|	СоставНаборов.Упаковка КАК Упаковка
		//БИТ Смирнов А.П. 17.11.2022 )
		|ПОМЕСТИТЬ ВТ_СоставНабора
		|ИЗ
		|	ВТ_НоменклатураТовары КАК ВТ_НоменклатураТовары
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК СоставНаборов
		|		ПО (ВТ_НоменклатураТовары.Номенклатура = СоставНаборов.Ссылка.Владелец
		|			И ВТ_НоменклатураТовары.Характеристика = СоставНаборов.Ссылка.Характеристика)
		|ГДЕ
		|	ВТ_НоменклатураТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
		|			
		|СГРУППИРОВАТЬ ПО
		|	ВТ_НоменклатураТовары.Товар, 
		|	ВТ_НоменклатураТовары.РазмерWB,
		|	ВТ_НоменклатураТовары.Номенклатура,
		|	ВТ_НоменклатураТовары.Характеристика,
		|	СоставНаборов.Номенклатура,
		|	СоставНаборов.Характеристика,
		//БИТ Смирнов А.П. 17.11.2022 BSLR-958 (
		|	СоставНаборов.Упаковка";
		//БИТ Смирнов А.П. 17.11.2022 )	
	
	Если топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.4") 
		ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.4.")
		ИЛИ топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.4.") Тогда		
		
		
		ТекстЗапроса = 	ТекстЗапроса  + 
			";
			|
			|////////////////////////////////////////////////////////////////////////////////
			|ВЫБРАТЬ
			|	СвободныеОстатки.Номенклатура КАК Номенклатура,
			|	СвободныеОстатки.Характеристика КАК Характеристика,
			|	СвободныеОстатки.Склад КАК Склад,
			|	СвободныеОстатки.ВНаличииОстаток - СвободныеОстатки.ВРезервеСоСкладаОстаток КАК КоличествоОстаток
			|ИЗ
			|	РегистрНакопления.СвободныеОстатки.Остатки(
			|			,
			|			(Номенклатура, Характеристика) В
			|				(ВЫБРАТЬ
			|					ВТ_НоменклатураТовары.Номенклатура,
			|					ВТ_НоменклатураТовары.Характеристика
			|				ИЗ
			|					ВТ_НоменклатураТовары
			|			
			|				ОБЪЕДИНИТЬ
			|			
			|				ВЫБРАТЬ
			|					ВТ_СоставНабора.Номенклатура,
			|					ВТ_СоставНабора.Характеристика
			|				ИЗ
			|					ВТ_СоставНабора)) КАК СвободныеОстатки"; 	
		
	ИначеЕсли топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.5.26.96", Истина)
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.5.26.96", Истина)
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.5.26.96", Истина) Тогда // УТ 11.5
		ТекстЗапроса = ТекстЗапроса +		
			";
			|
			|////////////////////////////////////////////////////////////////////////////////
			|ВЫБРАТЬ
			|	ВТ_НоменклатураТовары.Номенклатура КАК Номенклатура,
			|	ВТ_НоменклатураТовары.Характеристика КАК Характеристика,
			|	ОстатокНаСкладе.Склад КАК Склад,
			|	СУММА(ЕСТЬNULL(ОстатокНаСкладе.Свободно, 0)) КАК КоличествоОстаток
			|ИЗ
			|	ВТ_НоменклатураТовары КАК ВТ_НоменклатураТовары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК ОстатокНаСкладе
			|		ПО ВТ_НоменклатураТовары.Номенклатура = ОстатокНаСкладе.Номенклатура
			|				И ВТ_НоменклатураТовары.Характеристика = ОстатокНаСкладе.Характеристика
			|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СоставНабора КАК ВТ_СоставНабора
			|		ПО ВТ_НоменклатураТовары.Номенклатура = ВТ_СоставНабора.Номенклатура
			|				И ВТ_НоменклатураТовары.Характеристика = ВТ_СоставНабора.Характеристика
			|
			|ГДЕ
			// BSLR-5822 {
			|	ОстатокНаСкладе.СостояниеЗапаса = ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии) 
			|	И ОстатокНаСкладе.ХарактеристикаПотребности В (ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.ОтложитьРезервирование), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.КОбеспечению), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.Излишек))
			//|	ОстатокНаСкладе.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
			// BSLR-5822 }
			|	И ОстатокНаСкладе.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
			//|	И ОстатокНаСкладе.Склад В (ВЫБРАТЬ ВТСкладыПоЗаказам.Склад ИЗ ВТСкладыПоЗаказам КАК ВТСкладыПоЗаказам)
			|  	И ВТ_НоменклатураТовары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор) 
			|	И ВТ_СоставНабора.Номенклатура ЕСТЬ NULL 
			|	
			|СГРУППИРОВАТЬ ПО
			|	ВТ_НоменклатураТовары.Номенклатура,
			|	ВТ_НоменклатураТовары.Характеристика,
			|	ОстатокНаСкладе.Склад
			|	 
			|ОБЪЕДИНИТЬ ВСЕ
			|	
			|ВЫБРАТЬ
			|	ВТ_СоставНабора.Номенклатура КАК Номенклатура,
			|	ВТ_СоставНабора.Характеристика КАК Характеристика,
			|	ДоступностьТоваров.Склад КАК Склад,  
			|   СУММА(ЕСТЬNULL(ДоступностьТоваров.Свободно, 0)) КАК КоличествоОстаток
			|ИЗ
			|	ВТ_СоставНабора КАК ВТ_СоставНабора,
			|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК ДоступностьТоваров
			|		ПО ДоступностьТоваров.Номенклатура = ВТ_СоставНабора.Номенклатура
			|			И ДоступностьТоваров.Характеристика = ВТ_СоставНабора.Характеристика
			// BSLR-5822 {
			|			И ДоступностьТоваров.ХарактеристикаПотребности В (ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.ОтложитьРезервирование), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.КОбеспечению), ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.Излишек))
			|			И ДоступностьТоваров.СостояниеЗапаса = ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии)
			//|			И ДоступностьТоваров.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
			// BSLR-5822 }
			|			И ДоступностьТоваров.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
			//|			И ДоступностьТоваров.Склад В (ВЫБРАТЬ ВТСкладыПоЗаказам.Склад ИЗ ВТСкладыПоЗаказам КАК ВТСкладыПоЗаказам)
			|			
			|СГРУППИРОВАТЬ ПО
			|	ВТ_СоставНабора.Номенклатура,
			|	ВТ_СоставНабора.Характеристика,
			|	ДоступностьТоваров.Склад";		
		//BSLR-5453
	ИначеЕсли топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеТорговлей", "11.5.")
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("КомплекснаяАвтоматизация", "2.5.")
		Или топ_ОбщийМодульСервер.ЭтаКонфигурация("УправлениеПредприятием", "2.5.") Тогда  // УТ 11.5
        ТекстЗапроса = ТекстЗапроса +		
			";
			|
			|////////////////////////////////////////////////////////////////////////////////
			|ВЫБРАТЬ
			|	ВТ_НоменклатураТовары.Номенклатура КАК Номенклатура,
			|	ВТ_НоменклатураТовары.Характеристика КАК Характеристика,
			|	ОстатокНаСкладе.Склад КАК Склад,
			|	СУММА(ЕСТЬNULL(ОстатокНаСкладе.Количество, 0)) КАК КоличествоОстаток
			|ИЗ
			|	ВТ_НоменклатураТовары КАК ВТ_НоменклатураТовары
			|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК ОстатокНаСкладе
			|		ПО ВТ_НоменклатураТовары.Номенклатура = ОстатокНаСкладе.Номенклатура
			|				И ВТ_НоменклатураТовары.Характеристика = ОстатокНаСкладе.Характеристика
			|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СоставНабора КАК ВТ_СоставНабора
			|		ПО ВТ_НоменклатураТовары.Номенклатура = ВТ_СоставНабора.Номенклатура
			|				И ВТ_НоменклатураТовары.Характеристика = ВТ_СоставНабора.Характеристика
			|
			|ГДЕ 
			// BSLR-5822 {
			|	ОстатокНаСкладе.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
			//|	ОстатокНаСкладе.СостояниеЗапаса = ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии)
			//|	ОстатокНаСкладе.ХарактеристикаПотребности = ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.Излишек)
			// BSLR-5822 }
			|	И ОстатокНаСкладе.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
			//|	И ОстатокНаСкладе.Склад В (ВЫБРАТЬ ВТСкладыПоЗаказам.Склад ИЗ ВТСкладыПоЗаказам КАК ВТСкладыПоЗаказам)
			|  	И ВТ_НоменклатураТовары.Номенклатура.ТипНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор) 
			|	И ВТ_СоставНабора.Номенклатура ЕСТЬ NULL 
			|	
			|СГРУППИРОВАТЬ ПО
			|	ВТ_НоменклатураТовары.Номенклатура,
			|	ВТ_НоменклатураТовары.Характеристика,
			|	ОстатокНаСкладе.Склад
			|	 
			|ОБЪЕДИНИТЬ ВСЕ
			|	
			|ВЫБРАТЬ
			|	ВТ_СоставНабора.Номенклатура КАК Номенклатура,
			|	ВТ_СоставНабора.Характеристика КАК Характеристика,
			|	ДоступностьТоваров.Склад КАК Склад,  
			|   СУММА(ЕСТЬNULL(ДоступностьТоваров.Свободно, 0)) КАК КоличествоОстаток
			|ИЗ
			|	ВТ_СоставНабора КАК ВТ_СоставНабора,
			|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаспределениеЗапасов КАК ДоступностьТоваров
			|		ПО ДоступностьТоваров.Номенклатура = ВТ_СоставНабора.Номенклатура
			|			И ДоступностьТоваров.Характеристика = ВТ_СоставНабора.Характеристика
			// BSLR-5822 {
			|			И ДоступностьТоваров.Состояние = ЗНАЧЕНИЕ(Перечисление.РаспределениеЗапасовСостояния.ОстатокНаСкладе)
			//|			И ДоступностьТоваров.ХарактеристикаПотребности = ЗНАЧЕНИЕ(Перечисление.ХарактеристикиПотребности.Излишек)
			//|			И ДоступностьТоваров.СостояниеЗапаса = ЗНАЧЕНИЕ(Перечисление.СостоянияЗапаса.ВНаличии)
			// BSLR-5822 }
			|			И ДоступностьТоваров.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
			//|			И ДоступностьТоваров.Склад В (ВЫБРАТЬ ВТСкладыПоЗаказам.Склад ИЗ ВТСкладыПоЗаказам КАК ВТСкладыПоЗаказам)
			|			
			|СГРУППИРОВАТЬ ПО
			|	ВТ_СоставНабора.Номенклатура,
			|	ВТ_СоставНабора.Характеристика,
			|	ДоступностьТоваров.Склад";
			//BSLR-5453
	КонецЕсли;                  
	
	ТекстЗапроса = ТекстЗапроса + 
		";
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	ВТ_ТоварыПоЗаказам.ЗаказТП КАК ЗаказТП,
		|	ВТ_ТоварыПоЗаказам.ЗаказТП.НомерЗаказа КАК НомерЗаказа,
		|	ВТ_ТоварыПоЗаказам.СкладПоставщика КАК СкладПоставщика,
		|	ВТ_ТоварыПоЗаказам.Товар КАК Товар,
		|	ВТ_ТоварыПоЗаказам.РазмерWB КАК РазмерWB,
		|	ВТ_ТоварыПоЗаказам.Цена КАК Цена,
		|	ВТ_ТоварыПоЗаказам.Сумма КАК Сумма,
		//БИТ Смирнов А.П. 16.12.2022 BSLR-958 (
		//|	ВЫБОР
		//|		КОГДА ВТ_СоставНабора.Номенклатура ЕСТЬ NULL
		//|			ТОГДА ВТ_ТоварыПоЗаказам.Количество
		//|		ИНАЧЕ ВТ_ТоварыПоЗаказам.Количество * ВТ_СоставНабора.Количество
		//|	КОНЕЦ КАК Количество, 
		// письмерова 30.01.2023 BSLR-1339
		|	ВТ_ТоварыПоЗаказам.Количество КАК КоличествоПоЗаказу,
		
		|	ВЫБОР
		|		КОГДА ВТ_СоставНабора.Номенклатура ЕСТЬ NULL
		|			ТОГДА ВТ_ТоварыПоЗаказам.Количество
		|		ИНАЧЕ ВТ_ТоварыПоЗаказам.Количество * ВТ_СоставНабора.КоличествоУпаковок
		|	КОНЕЦ КАК КоличествоУпаковок,
		|	ВЫБОР
		|		КОГДА ВТ_СоставНабора.Номенклатура ЕСТЬ NULL
		|			ТОГДА ВТ_НоменклатураТовары.Упаковка
		|		ИНАЧЕ ВТ_СоставНабора.Упаковка
		|	КОНЕЦ КАК Упаковка,
		//БИТ Смирнов А.П. 16.12.2022 )
		|	ВЫБОР
		|		КОГДА ВТ_СоставНабора.Номенклатура ЕСТЬ NULL
		|			ТОГДА ЕСТЬNULL(ВТ_НоменклатураТовары.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) 
		|		ИНАЧЕ ВТ_СоставНабора.Номенклатура
		|	КОНЕЦ КАК Номенклатура,
		// письмерова 30.01.2023 BSLR-1339
		|	ЕСТЬNULL(ВТ_НоменклатураТовары.Номенклатура, ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК НоменклатураПоЗаказу,
		
		|	ВЫБОР
		|		КОГДА ВТ_СоставНабора.Номенклатура ЕСТЬ NULL
		|			ТОГДА ЕСТЬNULL(ВТ_НоменклатураТовары.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
		|		ИНАЧЕ ВТ_СоставНабора.Характеристика
		|	КОНЕЦ КАК Характеристика, 
		// письмерова 30.01.2023 BSLR-1339
		|	ЕСТЬNULL(ВТ_НоменклатураТовары.Характеристика, ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ХарактеристикаПоЗаказу,
		
		|	ВЫБОР
		|		КОГДА ВТ_СоставНабора.Номенклатура ЕСТЬ NULL
		|			ТОГДА ЛОЖЬ
		|		ИНАЧЕ ИСТИНА
		|	КОНЕЦ КАК ЭтоКомплектующая
		|ИЗ
		|	ВТ_ТоварыПоЗаказам КАК ВТ_ТоварыПоЗаказам
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_НоменклатураТовары КАК ВТ_НоменклатураТовары
		|			ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СоставНабора КАК ВТ_СоставНабора
		|			ПО ВТ_НоменклатураТовары.Номенклатура = ВТ_СоставНабора.НоменклатураНабора
		|				И ВТ_НоменклатураТовары.Характеристика = ВТ_СоставНабора.ХарактеристикаНабора
		|		ПО ВТ_ТоварыПоЗаказам.Товар = ВТ_НоменклатураТовары.Товар
		|			И ВТ_ТоварыПоЗаказам.РазмерWB = ВТ_НоменклатураТовары.РазмерWB
		|ИТОГИ
		|	МИНИМУМ(СкладПоставщика),
		|	МИНИМУМ(НомерЗаказа)
		|ПО
		|	ЗаказТП
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	топ_ЛичныеКабинетыСписокСкладовFBS.НомерСтроки КАК НомерСтроки,
		|	топ_ЛичныеКабинетыСписокСкладовFBS.Склад КАК Склад,
		|	топ_ЛичныеКабинетыСписокСкладовFBS.СкладТП КАК СкладПоставщика,
		|	топ_ЛичныеКабинетыСписокСкладовFBS.Ссылка КАК ЛичныйКабинет
		|ИЗ
		|	Справочник.топ_ЛичныеКабинеты.СписокСкладовFBS КАК топ_ЛичныеКабинетыСписокСкладовFBS
		|ГДЕ
		|	топ_ЛичныеКабинетыСписокСкладовFBS.Ссылка = &ЛичныйКабинет
		|
		|УПОРЯДОЧИТЬ ПО
		|	НомерСтроки";
	
	Запрос.Текст = ТекстЗапроса;
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.УстановитьПараметр("МассивЗаказовТП", МассивЗаказовТП);
	Запрос.УстановитьПараметр("ЛичныйКабинет"  , ЛичныйКабинет); 
	
	РезультатЗапроса = Запрос.ВыполнитьПакет();
	
	ДанныеДляОбработки = Новый Структура;                                                                         
	ДанныеДляОбработки.Вставить("ТаблицаСкладов" , РезультатЗапроса[РезультатЗапроса.Количество()-1].Выгрузить());
	ДанныеДляОбработки.Вставить("ВыборкаЗаказы"  , РезультатЗапроса[РезультатЗапроса.Количество()-2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам));
	ДанныеДляОбработки.Вставить("ТаблицаОстатков", РезультатЗапроса[РезультатЗапроса.Количество()-3].Выгрузить());
	//ДанныеДляОбработки.Вставить("ТаблицаТоваров" , РезультатЗапроса[РезультатЗапроса.Количество()-2].Выгрузить());
	
	Возврат ДанныеДляОбработки;

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

Функция ПустаяТаблицаНоменклатурыДляЗаполненияЗаказаКлиента()

	ТаблицаНоменклатуры = Новый ТаблицаЗначений;
	ТаблицаНоменклатуры.Колонки.Добавить("Номенклатура");
	ТаблицаНоменклатуры.Колонки.Добавить("Характеристика");
	ТаблицаНоменклатуры.Колонки.Добавить("Товар");
	ТаблицаНоменклатуры.Колонки.Добавить("РазмерWB");
	//БИТ Смирнов А.П. 16.12.2022 BSLR-958 (
	//ТаблицаНоменклатуры.Колонки.Добавить("Количество");
	ТаблицаНоменклатуры.Колонки.Добавить("КоличествоУпаковок");
	ТаблицаНоменклатуры.Колонки.Добавить("Упаковка");
	//БИТ Смирнов А.П. 16.12.2022 )
	ТаблицаНоменклатуры.Колонки.Добавить("Цена");
	ТаблицаНоменклатуры.Колонки.Добавить("Сумма");
	//БИТ Смирнов А.П. 30.11.2022 BSLR-1014 (
	ТаблицаНоменклатуры.Колонки.Добавить("Ссылка"); 
	//БИТ Смирнов А.П. 30.11.2022 ) 
	
	Возврат ТаблицаНоменклатуры;
	
КонецФункции 

Функция ПараметрыЗаполненияЗаказаКлиента()

	ПараметрыЗаполнения = Новый Структура;
	ПараметрыЗаполнения.Вставить("СкладЗаполнения"); 
	ПараметрыЗаполнения.Вставить("ЗаказыТорговойПлощадки"		, Новый Массив); 
	ПараметрыЗаполнения.Вставить("ТаблицаНоменклатурыЗаполнения", ПустаяТаблицаНоменклатурыДляЗаполненияЗаказаКлиента());
	
	Возврат ПараметрыЗаполнения;
	
КонецФункции